update website
diff --git a/404.html b/404.html
new file mode 100644
index 0000000..f7f9008
--- /dev/null
+++ b/404.html
@@ -0,0 +1,22 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="plugin-native plugin-id-default">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">Page Not Found | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/404.html"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="Page Not Found | Apache Milagro"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/404.html"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/404.html" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/404.html" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
+
+
+
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><main class="container margin-vert--xl"><div class="row"><div class="col col--6 col--offset-3"><h1 class="hero__title">Page Not Found</h1><p>We could not find what you were looking for.</p><p>Please contact the owner of the site that linked you to the original URL and let them know their link is broken.</p></div></div></main></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/assets/css/styles.e187d088.css b/assets/css/styles.e187d088.css
new file mode 100644
index 0000000..ef6cafe
--- /dev/null
+++ b/assets/css/styles.e187d088.css
@@ -0,0 +1 @@
+.col,.container{padding:0 var(--ifm-spacing-horizontal);width:100%}.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown li,body{word-wrap:break-word}body,ol ol,ol ul,ul ol,ul ul{margin:0}pre,table{overflow:auto}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.button,code{vertical-align:middle}.button--outline.button--active,.button--outline:active,.button--outline:hover,:root{--ifm-button-color:var(--ifm-font-color-base-inverse)}.menu__link:hover,a{transition:color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.navbar--dark,:root{--ifm-navbar-link-hover-color:var(--ifm-color-primary)}.menu,.navbar-sidebar{overflow-x:hidden}:root,html[data-theme=dark]{--ifm-color-emphasis-500:var(--ifm-color-gray-500)}.toggleButton_gllP,html{-webkit-tap-highlight-color:transparent}.clean-list,.containsTaskList_mC6p,.details_lb9f>summary,.dropdown__menu,.menu__list{list-style:none}:root{--ifm-color-scheme:light;--ifm-dark-value:10%;--ifm-darker-value:15%;--ifm-darkest-value:30%;--ifm-light-value:15%;--ifm-lighter-value:30%;--ifm-lightest-value:50%;--ifm-contrast-background-value:90%;--ifm-contrast-foreground-value:70%;--ifm-contrast-background-dark-value:70%;--ifm-contrast-foreground-dark-value:90%;--ifm-color-primary:#3578e5;--ifm-color-secondary:#ebedf0;--ifm-color-success:#00a400;--ifm-color-info:#54c7ec;--ifm-color-warning:#ffba00;--ifm-color-danger:#fa383e;--ifm-color-primary-dark:#306cce;--ifm-color-primary-darker:#2d66c3;--ifm-color-primary-darkest:#2554a0;--ifm-color-primary-light:#538ce9;--ifm-color-primary-lighter:#72a1ed;--ifm-color-primary-lightest:#9abcf2;--ifm-color-primary-contrast-background:#ebf2fc;--ifm-color-primary-contrast-foreground:#102445;--ifm-color-secondary-dark:#d4d5d8;--ifm-color-secondary-darker:#c8c9cc;--ifm-color-secondary-darkest:#a4a6a8;--ifm-color-secondary-light:#eef0f2;--ifm-color-secondary-lighter:#f1f2f5;--ifm-color-secondary-lightest:#f5f6f8;--ifm-color-secondary-contrast-background:#fdfdfe;--ifm-color-secondary-contrast-foreground:#474748;--ifm-color-success-dark:#009400;--ifm-color-success-darker:#008b00;--ifm-color-success-darkest:#007300;--ifm-color-success-light:#26b226;--ifm-color-success-lighter:#4dbf4d;--ifm-color-success-lightest:#80d280;--ifm-color-success-contrast-background:#e6f6e6;--ifm-color-success-contrast-foreground:#003100;--ifm-color-info-dark:#4cb3d4;--ifm-color-info-darker:#47a9c9;--ifm-color-info-darkest:#3b8ba5;--ifm-color-info-light:#6ecfef;--ifm-color-info-lighter:#87d8f2;--ifm-color-info-lightest:#aae3f6;--ifm-color-info-contrast-background:#eef9fd;--ifm-color-info-contrast-foreground:#193c47;--ifm-color-warning-dark:#e6a700;--ifm-color-warning-darker:#d99e00;--ifm-color-warning-darkest:#b38200;--ifm-color-warning-light:#ffc426;--ifm-color-warning-lighter:#ffcf4d;--ifm-color-warning-lightest:#ffdd80;--ifm-color-warning-contrast-background:#fff8e6;--ifm-color-warning-contrast-foreground:#4d3800;--ifm-color-danger-dark:#e13238;--ifm-color-danger-darker:#d53035;--ifm-color-danger-darkest:#af272b;--ifm-color-danger-light:#fb565b;--ifm-color-danger-lighter:#fb7478;--ifm-color-danger-lightest:#fd9c9f;--ifm-color-danger-contrast-background:#ffebec;--ifm-color-danger-contrast-foreground:#4b1113;--ifm-color-white:#fff;--ifm-color-black:#000;--ifm-color-gray-0:var(--ifm-color-white);--ifm-color-gray-100:#f5f6f7;--ifm-color-gray-200:#ebedf0;--ifm-color-gray-300:#dadde1;--ifm-color-gray-400:#ccd0d5;--ifm-color-gray-500:#bec3c9;--ifm-color-gray-600:#8d949e;--ifm-color-gray-700:#606770;--ifm-color-gray-800:#444950;--ifm-color-gray-900:#1c1e21;--ifm-color-gray-1000:var(--ifm-color-black);--ifm-color-emphasis-0:var(--ifm-color-gray-0);--ifm-color-emphasis-100:var(--ifm-color-gray-100);--ifm-color-emphasis-200:var(--ifm-color-gray-200);--ifm-color-emphasis-300:var(--ifm-color-gray-300);--ifm-color-emphasis-400:var(--ifm-color-gray-400);--ifm-color-emphasis-600:var(--ifm-color-gray-600);--ifm-color-emphasis-700:var(--ifm-color-gray-700);--ifm-color-emphasis-800:var(--ifm-color-gray-800);--ifm-color-emphasis-900:var(--ifm-color-gray-900);--ifm-color-emphasis-1000:var(--ifm-color-gray-1000);--ifm-color-content:var(--ifm-color-emphasis-900);--ifm-color-content-inverse:var(--ifm-color-emphasis-0);--ifm-color-content-secondary:#525860;--ifm-background-color:transparent;--ifm-background-surface-color:var(--ifm-color-content-inverse);--ifm-global-border-width:1px;--ifm-global-radius:0.4rem;--ifm-hover-overlay:rgba(0,0,0,.05);--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 rgba(0,0,0,.1);--ifm-global-shadow-md:0 5px 40px rgba(0,0,0,.2);--ifm-global-shadow-tl:0 12px 28px 0 rgba(0,0,0,.2),0 2px 4px 0 rgba(0,0,0,.1);--ifm-z-index-dropdown:100;--ifm-z-index-fixed:200;--ifm-z-index-overlay:400;--ifm-container-width:1140px;--ifm-container-width-xl:1320px;--ifm-code-background:#f6f7f8;--ifm-code-border-radius:var(--ifm-global-radius);--ifm-code-font-size:90%;--ifm-code-padding-horizontal:0.1rem;--ifm-code-padding-vertical:0.1rem;--ifm-pre-background:var(--ifm-code-background);--ifm-pre-border-radius:var(--ifm-code-border-radius);--ifm-pre-color:inherit;--ifm-pre-line-height:1.45;--ifm-pre-padding:1rem;--ifm-heading-color:inherit;--ifm-heading-margin-top:0;--ifm-heading-margin-bottom:var(--ifm-spacing-vertical);--ifm-heading-font-family:var(--ifm-font-family-base);--ifm-heading-font-weight:var(--ifm-font-weight-bold);--ifm-heading-line-height:1.25;--ifm-h1-font-size:2rem;--ifm-h2-font-size:1.5rem;--ifm-h3-font-size:1.25rem;--ifm-h4-font-size:1rem;--ifm-h5-font-size:0.875rem;--ifm-h6-font-size:0.85rem;--ifm-image-alignment-padding:1.25rem;--ifm-leading-desktop:1.25;--ifm-leading:calc(var(--ifm-leading-desktop)*1rem);--ifm-list-left-padding:2rem;--ifm-list-margin:1rem;--ifm-list-item-margin:0.25rem;--ifm-list-paragraph-margin:1rem;--ifm-table-cell-padding:0.75rem;--ifm-table-background:transparent;--ifm-table-stripe-background:rgba(0,0,0,.03);--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,<svg xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" viewBox="0 0 256 256"><g><g><polygon points="79.093,0 48.907,30.187 146.72,128 48.907,225.813 79.093,256 207.093,128"/></g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g><g></g></svg>');--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,<svg xmlns="http://www.w3.org/2000/svg" width="16px" height="16px" viewBox="0 0 24 24"><path fill="rgba(0,0,0,0.5)" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path></svg>');--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,<svg fill="currentColor" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" height="16px" width="16px"><path d="M6.02945,10.20327a4.17382,4.17382,0,1,1,4.17382-4.17382A4.15609,4.15609,0,0,1,6.02945,10.20327Zm9.69195,4.2199L10.8989,9.59979A5.88021,5.88021,0,0,0,12.058,6.02856,6.00467,6.00467,0,1,0,9.59979,10.8989l4.82338,4.82338a.89729.89729,0,0,0,1.29912,0,.89749.89749,0,0,0-.00087-1.29909Z" /></svg>');--ifm-navbar-sidebar-width:83vw;--ifm-pagination-border-radius:var(--ifm-global-radius);--ifm-pagination-color-active:var(--ifm-color-primary);--ifm-pagination-font-size:1rem;--ifm-pagination-item-active-background:var(--ifm-hover-overlay);--ifm-pagination-page-spacing:0.2em;--ifm-pagination-padding-horizontal:calc(var(--ifm-spacing-horizontal)*1);--ifm-pagination-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-pagination-nav-border-radius:var(--ifm-global-radius);--ifm-pagination-nav-color-hover:var(--ifm-color-primary);--ifm-pills-color-active:var(--ifm-color-primary);--ifm-pills-color-background-active:var(--ifm-hover-overlay);--ifm-pills-spacing:0.125rem;--ifm-tabs-color:var(--ifm-font-color-secondary);--ifm-tabs-color-active:var(--ifm-color-primary);--ifm-tabs-color-active-border:var(--ifm-tabs-color-active);--ifm-tabs-padding-horizontal:1rem;--ifm-tabs-padding-vertical:1rem;--docusaurus-progress-bar-color:var(--ifm-color-primary);--ifm-color-primary-lightest:#3cb571;--ifm-color-primary-lighter:#35a064;--ifm-color-primary-light:#339960;--ifm-color-primary:#2e8b57;--ifm-color-primary-dark:#297d4e;--ifm-color-primary-darker:#27764a;--ifm-color-primary-darkest:#20613d;--docusaurus-announcement-bar-height:auto;--docusaurus-collapse-button-bg:transparent;--docusaurus-collapse-button-bg-hover:rgba(0,0,0,.1);--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px;--docusaurus-tag-list-border:var(--ifm-color-emphasis-300)}.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:transparent}*{box-sizing:border-box}html{-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;-moz-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)}.margin-bottom--none,.margin-vert--none,.markdown>:last-child{margin-bottom:0!important}.margin-top--none,.margin-vert--none{margin-top:0!important}.row--no-gutters{margin-left:0;margin-right:0}.margin-horiz--none,.margin-right--none{margin-right:0!important}.row--no-gutters>.col{padding-left:0;padding-right:0}.row--align-top{align-items:flex-start}.row--align-bottom{align-items:flex-end}.menuExternalLink_NmtK,.row--align-center{align-items:center}.row--align-stretch{align-items:stretch}.row--align-baseline{align-items:baseline}.col{--ifm-col-width:100%;flex:1 0;margin-left:0;max-width:var(--ifm-col-width)}.padding-bottom--none,.padding-vert--none{padding-bottom:0!important}.padding-top--none,.padding-vert--none{padding-top:0!important}.padding-horiz--none,.padding-left--none{padding-left:0!important}.padding-horiz--none,.padding-right--none{padding-right:0!important}.col[class*=col--]{flex:0 0 var(--ifm-col-width)}.col--1{--ifm-col-width:8.33333%}.col--offset-1{margin-left:8.33333%}.col--2{--ifm-col-width:16.66667%}.col--offset-2{margin-left:16.66667%}.col--3{--ifm-col-width:25%}.col--offset-3{margin-left:25%}.col--4{--ifm-col-width:33.33333%}.col--offset-4{margin-left:33.33333%}.col--5{--ifm-col-width:41.66667%}.col--offset-5{margin-left:41.66667%}.col--6{--ifm-col-width:50%}.col--offset-6{margin-left:50%}.col--7{--ifm-col-width:58.33333%}.col--offset-7{margin-left:58.33333%}.col--8{--ifm-col-width:66.66667%}.col--offset-8{margin-left:66.66667%}.col--9{--ifm-col-width:75%}.col--offset-9{margin-left:75%}.col--10{--ifm-col-width:83.33333%}.col--offset-10{margin-left:83.33333%}.col--11{--ifm-col-width:91.66667%}.col--offset-11{margin-left:91.66667%}.col--12{--ifm-col-width:100%}.col--offset-12{margin-left:100%}.margin-horiz--none,.margin-left--none{margin-left:0!important}.margin--none{margin:0!important}.margin-bottom--xs,.margin-vert--xs{margin-bottom:.25rem!important}.margin-top--xs,.margin-vert--xs{margin-top:.25rem!important}.margin-horiz--xs,.margin-left--xs{margin-left:.25rem!important}.margin-horiz--xs,.margin-right--xs{margin-right:.25rem!important}.margin--xs{margin:.25rem!important}.margin-bottom--sm,.margin-vert--sm{margin-bottom:.5rem!important}.margin-top--sm,.margin-vert--sm{margin-top:.5rem!important}.margin-horiz--sm,.margin-left--sm{margin-left:.5rem!important}.margin-horiz--sm,.margin-right--sm{margin-right:.5rem!important}.margin--sm{margin:.5rem!important}.margin-bottom--md,.margin-vert--md{margin-bottom:1rem!important}.margin-top--md,.margin-vert--md{margin-top:1rem!important}.margin-horiz--md,.margin-left--md{margin-left:1rem!important}.margin-horiz--md,.margin-right--md{margin-right:1rem!important}.margin--md{margin:1rem!important}.margin-bottom--lg,.margin-vert--lg{margin-bottom:2rem!important}.margin-top--lg,.margin-vert--lg{margin-top:2rem!important}.margin-horiz--lg,.margin-left--lg{margin-left:2rem!important}.margin-horiz--lg,.margin-right--lg{margin-right:2rem!important}.margin--lg{margin:2rem!important}.margin-bottom--xl,.margin-vert--xl{margin-bottom:5rem!important}.margin-top--xl,.margin-vert--xl{margin-top:5rem!important}.margin-horiz--xl,.margin-left--xl{margin-left:5rem!important}.margin-horiz--xl,.margin-right--xl{margin-right:5rem!important}.margin--xl{margin:5rem!important}.padding--none{padding:0!important}.padding-bottom--xs,.padding-vert--xs{padding-bottom:.25rem!important}.padding-top--xs,.padding-vert--xs{padding-top:.25rem!important}.padding-horiz--xs,.padding-left--xs{padding-left:.25rem!important}.padding-horiz--xs,.padding-right--xs{padding-right:.25rem!important}.padding--xs{padding:.25rem!important}.padding-bottom--sm,.padding-vert--sm{padding-bottom:.5rem!important}.padding-top--sm,.padding-vert--sm{padding-top:.5rem!important}.padding-horiz--sm,.padding-left--sm{padding-left:.5rem!important}.padding-horiz--sm,.padding-right--sm{padding-right:.5rem!important}.padding--sm{padding:.5rem!important}.padding-bottom--md,.padding-vert--md{padding-bottom:1rem!important}.padding-top--md,.padding-vert--md{padding-top:1rem!important}.padding-horiz--md,.padding-left--md{padding-left:1rem!important}.padding-horiz--md,.padding-right--md{padding-right:1rem!important}.padding--md{padding:1rem!important}.padding-bottom--lg,.padding-vert--lg{padding-bottom:2rem!important}.padding-top--lg,.padding-vert--lg{padding-top:2rem!important}.padding-horiz--lg,.padding-left--lg{padding-left:2rem!important}.padding-horiz--lg,.padding-right--lg{padding-right:2rem!important}.padding--lg{padding:2rem!important}.padding-bottom--xl,.padding-vert--xl{padding-bottom:5rem!important}.padding-top--xl,.padding-vert--xl{padding-top:5rem!important}.padding-horiz--xl,.padding-left--xl{padding-left:5rem!important}.padding-horiz--xl,.padding-right--xl{padding-right:5rem!important}.padding--xl{padding:5rem!important}code{background-color:var(--ifm-code-background);border:.1rem solid rgba(0,0,0,.1);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:transparent;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)}img{max-width:100%}img[align=right]{padding-left:var(--image-alignment-padding)}img[align=left]{padding-right:var(--image-alignment-padding)}.markdown{--ifm-h1-vertical-rhythm-top:3;--ifm-h2-vertical-rhythm-top:2;--ifm-h3-vertical-rhythm-top:1.5;--ifm-heading-vertical-rhythm-top:1.25;--ifm-h1-vertical-rhythm-bottom:1.25;--ifm-heading-vertical-rhythm-bottom:1}.markdown:after,.markdown:before{content:"";display:table}.markdown:after{clear:both}.markdown h1:first-child{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-h1-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown>h2{--ifm-h2-font-size:2rem;margin-top:calc(var(--ifm-h2-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h3{--ifm-h3-font-size:1.5rem;margin-top:calc(var(--ifm-h3-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h4,.markdown>h5,.markdown>h6{margin-top:calc(var(--ifm-heading-vertical-rhythm-top)*var(--ifm-leading))}.markdown>p,.markdown>pre,.markdown>ul{margin-bottom:var(--ifm-leading)}.markdown li>p{margin-top:var(--ifm-list-paragraph-margin)}.markdown li+li{margin-top:var(--ifm-list-item-margin)}ol,ul{margin:0 0 var(--ifm-list-margin);padding-left:var(--ifm-list-left-padding)}ol ol,ul ol{list-style-type:lower-roman}ol ol ol,ol ul ol,ul ol ol,ul ul ol{list-style-type:lower-alpha}table{border-collapse:collapse;display:block;margin-bottom:var(--ifm-spacing-vertical)}table thead tr{border-bottom:2px solid var(--ifm-table-border-color)}table thead,table tr:nth-child(2n){background-color:var(--ifm-table-stripe-background)}table tr{background-color:var(--ifm-table-background);border-top:var(--ifm-table-border-width) solid var(--ifm-table-border-color)}table td,table th{border:var(--ifm-table-border-width) solid var(--ifm-table-border-color);padding:var(--ifm-table-cell-padding)}table th{background-color:var(--ifm-table-head-background);color:var(--ifm-table-head-color);font-weight:var(--ifm-table-head-font-weight)}table td{color:var(--ifm-table-cell-color)}strong{font-weight:var(--ifm-font-weight-bold)}a{color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}a:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button:hover,.text--no-decoration,.text--no-decoration:hover,a:not([href]){text-decoration:none}p{margin:0 0 var(--ifm-paragraph-margin-bottom)}blockquote{border-left:var(--ifm-blockquote-border-left-width) solid var(--ifm-blockquote-border-color);box-shadow:var(--ifm-blockquote-shadow);color:var(--ifm-blockquote-color);font-size:var(--ifm-blockquote-font-size);padding:var(--ifm-blockquote-padding-vertical) var(--ifm-blockquote-padding-horizontal)}blockquote>:first-child{margin-top:0}blockquote>:last-child{margin-bottom:0}hr{background-color:var(--ifm-hr-background-color);border:0;height:var(--ifm-hr-height);margin:var(--ifm-hr-margin-vertical) 0}.shadow--lw{box-shadow:var(--ifm-global-shadow-lw)!important}.shadow--md{box-shadow:var(--ifm-global-shadow-md)!important}.shadow--tl{box-shadow:var(--ifm-global-shadow-tl)!important}.text--primary,.wordWrapButtonEnabled_EoeP .wordWrapButtonIcon_Bwma{color:var(--ifm-color-primary)}.text--secondary{color:var(--ifm-color-secondary)}.text--success{color:var(--ifm-color-success)}.text--info{color:var(--ifm-color-info)}.text--warning{color:var(--ifm-color-warning)}.text--danger{color:var(--ifm-color-danger)}.text--center{text-align:center}.text--left{text-align:left}.text--justify{text-align:justify}.text--right{text-align:right}.text--capitalize{text-transform:capitalize}.text--lowercase{text-transform:lowercase}.admonitionHeading_tbUL,.alert__heading,.text--uppercase{text-transform:uppercase}.text--light{font-weight:var(--ifm-font-weight-light)}.text--normal{font-weight:var(--ifm-font-weight-normal)}.text--semibold{font-weight:var(--ifm-font-weight-semibold)}.text--bold{font-weight:var(--ifm-font-weight-bold)}.text--italic{font-style:italic}.text--truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text--break{word-wrap:break-word!important;word-break:break-word!important}.clean-btn{background:none;border:none;color:inherit;cursor:pointer;font-family:inherit;padding:0}.alert,.alert .close{color:var(--ifm-alert-foreground-color)}.clean-list{padding-left:0}.alert--primary{--ifm-alert-background-color:var(--ifm-color-primary-contrast-background);--ifm-alert-background-color-highlight:rgba(53,120,229,.15);--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:rgba(235,237,240,.15);--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:rgba(0,164,0,.15);--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:rgba(84,199,236,.15);--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:rgba(255,186,0,.15);--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:rgba(250,56,62,.15);--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{-moz-column-gap:var(--ifm-avatar-intro-margin);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:link:hover,.breadcrumbs__link:visited:hover,area.breadcrumbs__link[href]:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs__link:-moz-any-link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs__link:any-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;-moz-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:transparent;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;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)}.sidebar_re4s,.tableOfContents_bqdL{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem);overflow-y:auto}.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 transparent;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,.collapsibleContent_i85q>:last-child,.footer__items{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,.title_f1Hy{font-size:3rem}.hero__subtitle{font-size:1.5rem}.menu__list{margin:0;padding-left:0}.menu__caret,.menu__link{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu__list .menu__list{flex:0 0 100%;margin-top:.25rem;padding-left:var(--ifm-menu-link-padding-horizontal)}.menu__list-item:not(:first-child){margin-top:.25rem}.menu__list-item--collapsed .menu__list{height:0;overflow:hidden}.details_lb9f[data-collapsed=false].isBrowser_bmU9>summary:before,.details_lb9f[open]:not(.isBrowser_bmU9)>summary:before,.menu__list-item--collapsed .menu__caret:before,.menu__list-item--collapsed .menu__link--sublist:after{transform:rotate(90deg)}.menu__list-item-collapsible{display:flex;flex-wrap:wrap;position:relative}.menu__caret:hover,.menu__link:hover,.menu__list-item-collapsible--active,.menu__list-item-collapsible:hover{background:var(--ifm-menu-color-background-hover)}.menu__list-item-collapsible .menu__link--active,.menu__list-item-collapsible .menu__link:hover{background:none!important}.menu__caret,.menu__link{align-items:center;display:flex}.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{content:"";height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast) linear;width:1.25rem;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)}.docsWrapper_BCFX,.navbar,.navbar>.container,.navbar>.container-fluid{display:flex}.navbar--fixed-top{position:sticky;top:0;z-index:var(--ifm-z-index-fixed)}.navbar-sidebar,.navbar-sidebar__backdrop{bottom:0;opacity:0;position:fixed;transition-timing-function:ease-in-out;left:0;top:0;visibility:hidden}.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:hsla(0,0%,100%,.1);--ifm-navbar-search-input-placeholder-color:hsla(0,0%,100%,.5);color:var(--ifm-color-white)}.navbar--dark{--ifm-navbar-background-color:#242526;--ifm-menu-color-background-active:hsla(0,0%,100%,.05);--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;-moz-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::-moz-placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.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);transform:translate3d(-100%,0,0);transition-duration:.25s;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:rgba(0,0,0,.6);right:0;transition-duration:.1s;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{-moz-column-gap:var(--ifm-pagination-page-spacing);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,.sidebarItemLink_mo7H: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,.sidebarItemTitle_pO2u,.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 transparent;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:hsla(0,0%,100%,.05);--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:hsla(0,0%,100%,.1);--ifm-scrollbar-track-background-color:#444;--ifm-scrollbar-thumb-background-color:#686868;--ifm-scrollbar-thumb-hover-background-color:#7a7a7a;--ifm-table-stripe-background:hsla(0,0%,100%,.07);--ifm-toc-border-color:var(--ifm-color-emphasis-200);--ifm-color-primary-contrast-background:#102445;--ifm-color-primary-contrast-foreground:#ebf2fc;--ifm-color-secondary-contrast-background:#474748;--ifm-color-secondary-contrast-foreground:#fdfdfe;--ifm-color-success-contrast-background:#003100;--ifm-color-success-contrast-foreground:#e6f6e6;--ifm-color-info-contrast-background:#193c47;--ifm-color-info-contrast-foreground:#eef9fd;--ifm-color-warning-contrast-background:#4d3800;--ifm-color-warning-contrast-foreground:#fff8e6;--ifm-color-danger-contrast-background:#4b1113;--ifm-color-danger-contrast-foreground:#ffebec}#nprogress .bar{background:var(--docusaurus-progress-bar-color);height:2px;left:0;position:fixed;top:0;width:100%;z-index:1031}#nprogress .peg{box-shadow:0 0 10px var(--docusaurus-progress-bar-color),0 0 5px var(--docusaurus-progress-bar-color);height:100%;opacity:1;position:absolute;right:0;transform:rotate(3deg) translateY(-4px);width:100px}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}#docusaurus-base-url-issue-banner-container,.collapseSidebarButton_PEFL,.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}.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}[data-theme=dark] .themedImage--dark_i4oU,[data-theme=light] .themedImage--light_HNdA{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)}.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{flex:1 0 auto}.docusaurus-mt-lg{margin-top:3rem}#__docusaurus{display:flex;flex-direction:column;min-height:100%}.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)}.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:hsla(0,0%,100%,.05);--docusaurus-collapse-button-bg-hover:hsla(0,0%,100%,.1)}.docMainContainer_gTbr,.docPage__5DB{display:flex;width:100%}.sidebar_re4s{position:sticky;top:calc(var(--ifm-navbar-height) + 2rem)}.sidebarItemTitle_pO2u{font-size:var(--ifm-h3-font-size)}.container_mt6G,.sidebarItemList_Yudw{font-size:.9rem}.sidebarItem__DBe{margin-top:.7rem}.sidebarItemLink_mo7H{color:var(--ifm-font-color-base);display:block}.sidebarItemLinkActive_I1ZP{color:var(--ifm-color-primary)!important}.buttonGroup__atx button,.codeBlockContainer_Ckt0{background:var(--prism-background-color);color:var(--prism-color)}.authorCol_Hf19{flex-grow:1!important;max-width:inherit!important}.imageOnlyAuthorRow_pa_O{display:flex;flex-flow:row wrap}.imageOnlyAuthorCol_G86a{margin-left:.3rem;margin-right:.3rem}.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{-moz-column-gap:.2rem;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 .2s ease-in-out}.buttonGroup__atx button:focus-visible,.buttonGroup__atx button:hover{opacity:1!important}.theme-code-block:hover .buttonGroup__atx button{opacity:.4}.iconEdit_Z9Sw{margin-right:.3em;vertical-align:sub}: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)}.tag_zVej{border:1px solid var(--docusaurus-tag-list-border);transition:border var(--ifm-transition-fast)}.tag_zVej:hover{--docusaurus-tag-list-border:var(--ifm-link-color);text-decoration:none}.tagRegular_sFm0{border-radius:var(--ifm-global-radius);font-size:90%;padding:.2rem .5rem .3rem}.tagWithCount_h2kH{align-items:center;border-left:0;display:flex;padding:0 .5rem 0 1rem;position:relative}.tagWithCount_h2kH:after,.tagWithCount_h2kH:before{border:1px solid var(--docusaurus-tag-list-border);content:"";position:absolute;top:50%;transition:inherit}.tagWithCount_h2kH:before{border-bottom:0;border-right:0;height:1.18rem;right:100%;transform:translate(50%,-50%) rotate(-45deg);width:1.18rem}.tagWithCount_h2kH:after{border-radius:50%;height:.5rem;left:0;transform:translateY(-50%);width:.5rem}.tagWithCount_h2kH span{background:var(--ifm-color-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-color-black);font-size:.7rem;line-height:1.2;margin-left:.3rem;padding:.1rem .4rem}.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:.15s;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}.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}.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;padding-left:1rem;position:relative}.details_lb9f>summary::-webkit-details-marker{display:none}.details_lb9f>summary:before{border-color:transparent transparent transparent 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)}.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;-moz-user-select:none;user-select:none}.hash-link:before{content:"#"}.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}.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}.blogPostFooterDetailsFull_mRVl{flex-direction:column}.tableOfContents_bqdL{position:sticky;top:calc(var(--ifm-navbar-height) + 1rem)}.breadcrumbsContainer_Z_bl{--ifm-breadcrumb-size-multiplier:0.8;margin-bottom:.8rem}.breadcrumbHomeIcon_OVgt{height:1.1rem;position:relative;top:1px;vertical-align:top;width:1.1rem}@media (min-width:997px){.collapseSidebarButton_PEFL,.expandButton_m80_{background-color:var(--docusaurus-collapse-button-bg);position:sticky}: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)}.collapseSidebarButton_PEFL{border:1px solid var(--ifm-toc-border-color);border-radius:0;bottom:0;display:block!important;height:40px}.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%;max-height:100vh;padding-top:var(--ifm-navbar-height);position:sticky;top:0;transition:opacity 50ms;width:var(--doc-sidebar-width)}.sidebarWithHideableNavbar_wUlq{padding-top:0}.sidebarHidden_VK0M{height:0;opacity:0;overflow:hidden;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;max-height:100vh;top:0;transition:background-color var(--ifm-transition-fast) ease}[dir=rtl] .expandButtonIcon_BlDH{transform:rotate(180deg)}.docSidebarContainer_b6E3{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_b3ry{cursor:pointer;width:var(--doc-sidebar-hidden-width)}.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}.lastUpdated_vwxv{text-align:right}.tocMobile_ITEo{display:none}.docItemCol_VOVn{max-width:75%!important}}@media (min-width:1440px){.container{max-width:var(--ifm-container-width-xl)}}@media (max-width:996px){.col{--ifm-col-width:100%;flex-basis:var(--ifm-col-width);margin-left:0}.footer{--ifm-footer-padding-horizontal:0}.colorModeToggle_DEke,.footer__link-separator,.navbar__item,.sidebar_re4s,.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 (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}.title_f1Hy{font-size:2rem}}@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 print{.announcementBar_mb4j,.footer,.menu,.navbar,.pagination-nav,.table-of-contents,.tocMobile_ITEo{display:none}.tabs{page-break-inside:avoid}.codeBlockLines_e6Vv{white-space:pre-wrap}}
\ No newline at end of file
diff --git a/assets/images/Chow-ChooProtocol-1aa57e8d61146f9a9a0741dd614493be.png b/assets/images/Chow-ChooProtocol-1aa57e8d61146f9a9a0741dd614493be.png
new file mode 100644
index 0000000..fa96b89
--- /dev/null
+++ b/assets/images/Chow-ChooProtocol-1aa57e8d61146f9a9a0741dd614493be.png
Binary files differ
diff --git a/assets/images/Envelope-2b64b60c67dc11eaa0e9f62058ff4134.png b/assets/images/Envelope-2b64b60c67dc11eaa0e9f62058ff4134.png
new file mode 100644
index 0000000..28f8ff4
--- /dev/null
+++ b/assets/images/Envelope-2b64b60c67dc11eaa0e9f62058ff4134.png
Binary files differ
diff --git a/assets/images/RC1-537ade04d4b9de9c84709b309c333790.png b/assets/images/RC1-537ade04d4b9de9c84709b309c333790.png
new file mode 100644
index 0000000..30d7d16
--- /dev/null
+++ b/assets/images/RC1-537ade04d4b9de9c84709b309c333790.png
Binary files differ
diff --git a/assets/images/RC1-Overview-1-df66e3e41d643bfeb8ad2c77160b6d97.png b/assets/images/RC1-Overview-1-df66e3e41d643bfeb8ad2c77160b6d97.png
new file mode 100644
index 0000000..5fdfa85
--- /dev/null
+++ b/assets/images/RC1-Overview-1-df66e3e41d643bfeb8ad2c77160b6d97.png
Binary files differ
diff --git a/assets/images/clint.eps-f86b0b1b33fb4f1bde48330c4fa8db8a.jpg b/assets/images/clint.eps-f86b0b1b33fb4f1bde48330c4fa8db8a.jpg
new file mode 100644
index 0000000..fc215b0
--- /dev/null
+++ b/assets/images/clint.eps-f86b0b1b33fb4f1bde48330c4fa8db8a.jpg
Binary files differ
diff --git a/assets/images/words.eps-5a2c0be3376e91f68e1b4abf760f24bb.jpg b/assets/images/words.eps-5a2c0be3376e91f68e1b4abf760f24bb.jpg
new file mode 100644
index 0000000..3685d4c
--- /dev/null
+++ b/assets/images/words.eps-5a2c0be3376e91f68e1b4abf760f24bb.jpg
Binary files differ
diff --git a/assets/js/01cea0f3.f0c39ced.js b/assets/js/01cea0f3.f0c39ced.js
new file mode 100644
index 0000000..12c9972
--- /dev/null
+++ b/assets/js/01cea0f3.f0c39ced.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9449],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>y});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 o(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 p(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){n(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 c(e,t){if(null==e)return{};var r,a,n=function(e,t){if(null==e)return{};var r,a,n={},o=Object.keys(e);for(a=0;a<o.length;a++)r=o[a],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var i=a.createContext({}),l=function(e){var t=a.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):p(p({},t),e)),r},s=function(e){var t=l(e.components);return a.createElement(i.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,o=e.originalType,i=e.parentName,s=c(e,["components","mdxType","originalType","parentName"]),u=l(r),d=n,y=u["".concat(i,".").concat(d)]||u[d]||m[d]||o;return r?a.createElement(y,p(p({ref:t},s),{},{components:r})):a.createElement(y,p({ref:t},s))}));function y(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=r.length,p=new Array(o);p[0]=d;var c={};for(var i in t)hasOwnProperty.call(t,i)&&(c[i]=t[i]);c.originalType=e,c[u]="string"==typeof e?e:n,p[1]=c;for(var l=2;l<o;l++)p[l]=r[l];return a.createElement.apply(null,p)}return a.createElement.apply(null,r)}d.displayName="MDXCreateElement"},1316:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>c,metadata:()=>l,toc:()=>u});var a=r(7462),n=r(3366),o=(r(7294),r(3905)),p=["components"],c={id:"amcl-javascript-api",title:"AMCL JavaScript API",sidebar_label:"AMCL JavaScript API"},i=void 0,l={unversionedId:"cryptojs/amcl-javascript-api",id:"cryptojs/amcl-javascript-api",title:"AMCL JavaScript API",description:"MCJS - Milagro Crypto JavaScript",source:"@site/../docs/cryptojs/amcl-javascript-api.md",sourceDirName:"cryptojs",slug:"/cryptojs/amcl-javascript-api",permalink:"/docs/cryptojs/amcl-javascript-api",draft:!1,tags:[],version:"current",frontMatter:{id:"amcl-javascript-api",title:"AMCL JavaScript API",sidebar_label:"AMCL JavaScript API"},sidebar:"docs",previous:{title:"AMCL C API 2.0.0",permalink:"/docs/amcl-c-api-2.0.0"},next:{title:"AES",permalink:"/docs/cryptojs/aes"}},s={},u=[],m={toc:u};function d(e){var t=e.components,r=(0,n.Z)(e,p);return(0,o.kt)("wrapper",(0,a.Z)({},m,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,(0,o.kt)("em",{parentName:"p"},"MCJS - Milagro Crypto JavaScript")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"MCJS is a standards compliant JavaScript cryptographic library with no\nexternal dependencies except for the random seed source.")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"MCJS supports the standards for RSA, ECDH, ECIES, ECDSA and M-PIN, AES-GCM\nencryption/decryption, SHA256, SHA384, SHA512 and SHA3 hash functions and a\ncryptographically secure random number generator. Furthermore we recently\nadded New Hope, a post-quantum key exchange.")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"MCJS is ",(0,o.kt)("a",{parentName:"p",href:"https://nodejs.org/en/"},"Node.js")," compatible and browser compatible\n(see some examples below)."))))}d.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/04b79425.3e88f1f6.js b/assets/js/04b79425.3e88f1f6.js
new file mode 100644
index 0000000..0770eb9
--- /dev/null
+++ b/assets/js/04b79425.3e88f1f6.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2161],{3905:(e,a,t)=>{t.d(a,{Zo:()=>p,kt:()=>d});var r=t(7294);function i(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function l(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);a&&(r=r.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,r)}return t}function n(e){for(var a=1;a<arguments.length;a++){var t=null!=arguments[a]?arguments[a]:{};a%2?l(Object(t),!0).forEach((function(a){i(e,a,t[a])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):l(Object(t)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(t,a))}))}return e}function o(e,a){if(null==e)return{};var t,r,i=function(e,a){if(null==e)return{};var t,r,i={},l=Object.keys(e);for(r=0;r<l.length;r++)t=l[r],a.indexOf(t)>=0||(i[t]=e[t]);return i}(e,a);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r<l.length;r++)t=l[r],a.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(i[t]=e[t])}return i}var c=r.createContext({}),s=function(e){var a=r.useContext(c),t=a;return e&&(t="function"==typeof e?e(a):n(n({},a),e)),t},p=function(e){var a=s(e.components);return r.createElement(c.Provider,{value:a},e.children)},u="mdxType",h={inlineCode:"code",wrapper:function(e){var a=e.children;return r.createElement(r.Fragment,{},a)}},g=r.forwardRef((function(e,a){var t=e.components,i=e.mdxType,l=e.originalType,c=e.parentName,p=o(e,["components","mdxType","originalType","parentName"]),u=s(t),g=i,d=u["".concat(c,".").concat(g)]||u[g]||h[g]||l;return t?r.createElement(d,n(n({ref:a},p),{},{components:t})):r.createElement(d,n({ref:a},p))}));function d(e,a){var t=arguments,i=a&&a.mdxType;if("string"==typeof e||i){var l=t.length,n=new Array(l);n[0]=g;var o={};for(var c in a)hasOwnProperty.call(a,c)&&(o[c]=a[c]);o.originalType=e,o[u]="string"==typeof e?e:i,n[1]=o;for(var s=2;s<l;s++)n[s]=t[s];return r.createElement.apply(null,n)}return r.createElement.apply(null,t)}g.displayName="MDXCreateElement"},8434:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>p,contentTitle:()=>c,default:()=>g,frontMatter:()=>o,metadata:()=>s,toc:()=>u});var r=t(7462),i=t(3366),l=(t(7294),t(3905)),n=["components"],o={id:"downloads",title:"Downloads",sidebar_label:"Downloads"},c="Project Downloads",s={unversionedId:"downloads",id:"downloads",title:"Downloads",description:"This page will be updated with all official Apache Software Foundation releases from the Apache Milagro (incubating) project.",source:"@site/../docs/downloads.md",sourceDirName:".",slug:"/downloads",permalink:"/docs/downloads",draft:!1,tags:[],version:"current",frontMatter:{id:"downloads",title:"Downloads",sidebar_label:"Downloads"},sidebar:"docs",previous:{title:"Contributor's Guide",permalink:"/docs/contributor-guide"},next:{title:"Support",permalink:"/docs/support"}},p={},u=[{value:"Verifying Releases",id:"verifying-releases",level:2},{value:"Apache Milagro Crypto C Incubating v2.0.1",id:"apache-milagro-crypto-c-incubating-v201",level:2},{value:"Source Release",id:"source-release",level:3},{value:"Release Notes",id:"release-notes",level:3},{value:"Previous Releases",id:"previous-releases",level:3},{value:"Apache Milagro libmpc v0.1",id:"apache-milagro-libmpc-v01",level:2},{value:"Source Release",id:"source-release-1",level:3},{value:"Release Notes",id:"release-notes-1",level:3},{value:"Previous Releases",id:"previous-releases-1",level:3},{value:"Apache Milagro Decentralized Trust Authority Incubating v0.1.0 (Alpha Release)",id:"apache-milagro-decentralized-trust-authority-incubating-v010-alpha-release",level:2},{value:"Source Release",id:"source-release-2",level:3},{value:"Release Notes",id:"release-notes-2",level:3},{value:"Previous Releases",id:"previous-releases-2",level:3},{value:"Apache Milagro Crypto C Incubating v1.0.0",id:"apache-milagro-crypto-c-incubating-v100",level:2},{value:"Source Release",id:"source-release-3",level:3},{value:"Release Notes",id:"release-notes-3",level:3},{value:"Previous Releases",id:"previous-releases-3",level:3},{value:"Apache Milagro Crypto JS Incubating v1.0.0",id:"apache-milagro-crypto-js-incubating-v100",level:2},{value:"Source Release",id:"source-release-4",level:3},{value:"Release Notes",id:"release-notes-4",level:3},{value:"Previous Releases",id:"previous-releases-4",level:3}],h={toc:u};function g(e){var a=e.components,t=(0,i.Z)(e,n);return(0,l.kt)("wrapper",(0,r.Z)({},h,t,{components:a,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"project-downloads"},"Project Downloads"),(0,l.kt)("p",null,"This page will be updated with all official Apache Software Foundation releases from the Apache Milagro (incubating) project."),(0,l.kt)("h2",{id:"verifying-releases"},"Verifying Releases"),(0,l.kt)("p",null,"You can find instructions for checking hashes and signatures on the ",(0,l.kt)("a",{parentName:"p",href:"http://www.apache.org/info/verification.html"},"Verifying Apache Software Foundation Releases")," page. The Milagro committer\u2019s pgp signatures can be found ",(0,l.kt)("a",{parentName:"p",href:"https://www.apache.org/dist/incubator/milagro/KEYS"},"here"),".   "),(0,l.kt)("p",null,"For fast downloads, current source distributions are hosted on mirror servers; older source distributions are in the archive. For security, public keys, hashes and signature files are always hosted at Apache."),(0,l.kt)("h2",{id:"apache-milagro-crypto-c-incubating-v201"},"Apache Milagro Crypto C Incubating v2.0.1"),(0,l.kt)("p",null,"This is the initial release of the Apache Milagro Crypto C library."),(0,l.kt)("h3",{id:"source-release"},"Source Release"),(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},(0,l.kt)("a",{parentName:"th",href:"http://www.apache.org/dyn/closer.cgi/incubator/milagro/apache-milagro-crypto-c-2.0.1-incubating/apache-milagro-crypto-c-2.0.1-incubating-src.tar.gz"},"tar.gz")),(0,l.kt)("th",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"th",href:"https://www.apache.org/dist/incubator/milagro/apache-milagro-crypto-c-2.0.1-incubating/apache-milagro-crypto-c-2.0.1-incubating-src.tar.gz.sha512"},"sha512")),(0,l.kt)("th",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"th",href:"https://www.apache.org/dist/incubator/milagro/apache-milagro-crypto-c-2.0.1-incubating/apache-milagro-crypto-c-2.0.1-incubating-src.tar.gz.asc"},"signature"))))),(0,l.kt)("h3",{id:"release-notes"},"Release Notes"),(0,l.kt)("p",null,"The latest release notes can be found ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/apache/incubator-milagro-crypto-c/releases/tag/2.0.1"},"here")),(0,l.kt)("h3",{id:"previous-releases"},"Previous Releases"),(0,l.kt)("p",null,"1.0.0 (see below for details)"),(0,l.kt)("h2",{id:"apache-milagro-libmpc-v01"},"Apache Milagro libmpc v0.1"),(0,l.kt)("p",null,"This is the initial release of the Apache Milagro libmpc (Multi-Party Computation)."),(0,l.kt)("h3",{id:"source-release-1"},"Source Release"),(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},(0,l.kt)("a",{parentName:"th",href:"https://www.apache.org/dyn/closer.cgi/incubator/milagro/apache-milagro-mpc-0.1-incubating/apache-milagro-mpc-0.1-incubating-src.tar.gz"},"tar.gz")),(0,l.kt)("th",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"th",href:"https://www.apache.org/dyn/closer.cgi/incubator/milagro/apache-milagro-mpc-0.1-incubating/apache-milagro-mpc-0.1-incubating-src.tar.gz.sha512"},"sha512")),(0,l.kt)("th",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"th",href:"https://www.apache.org/dyn/closer.cgi/incubator/milagro/apache-milagro-mpc-0.1-incubating/apache-milagro-mpc-0.1-incubating-src.tar.gz.asc"},"signature"))))),(0,l.kt)("h3",{id:"release-notes-1"},"Release Notes"),(0,l.kt)("p",null,"The latest release notes can be found ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/apache/incubator-milagro-MPC/releases/tag/0.1"},"here")),(0,l.kt)("h3",{id:"previous-releases-1"},"Previous Releases"),(0,l.kt)("p",null,"none"),(0,l.kt)("h2",{id:"apache-milagro-decentralized-trust-authority-incubating-v010-alpha-release"},"Apache Milagro Decentralized Trust Authority Incubating v0.1.0 (Alpha Release)"),(0,l.kt)("p",null,"This is the initial release of the Apache Milagro Decentralized Trust Authority server."),(0,l.kt)("h3",{id:"source-release-2"},"Source Release"),(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},(0,l.kt)("a",{parentName:"th",href:"http://www.apache.org/dyn/closer.cgi/incubator/milagro/apache-milagro-dta-0.1.0-incubating/apache-milagro-dta-0.1.0-incubating-src.tar.gz"},"tar.gz")),(0,l.kt)("th",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"th",href:"https://www.apache.org/dist/incubator/milagro/apache-milagro-dta-0.1.0-incubating/apache-milagro-dta-0.1.0-incubating-src.tar.gz.sha512"},"sha512")),(0,l.kt)("th",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"th",href:"https://www.apache.org/dist/incubator/milagro/apache-milagro-dta-0.1.0-incubating/apache-milagro-dta-0.1.0-incubating-src.tar.gz.asc"},"signature"))))),(0,l.kt)("h3",{id:"release-notes-2"},"Release Notes"),(0,l.kt)("p",null,"The latest release notes can be found ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/apache/incubator-milagro-dta/releases/tag/0.1.0"},"here")),(0,l.kt)("h3",{id:"previous-releases-2"},"Previous Releases"),(0,l.kt)("p",null,"None"),(0,l.kt)("h2",{id:"apache-milagro-crypto-c-incubating-v100"},"Apache Milagro Crypto C Incubating v1.0.0"),(0,l.kt)("p",null,"This is the initial release of the Apache Milagro Crypto C library."),(0,l.kt)("h3",{id:"source-release-3"},"Source Release"),(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},(0,l.kt)("a",{parentName:"th",href:"http://www.apache.org/dyn/closer.cgi/incubator/milagro/apache-milagro-crypto-c-1.0.0-incubating/apache-milagro-crypto-c-1.0.0-incubating-src.tar.gz"},"tar.gz")),(0,l.kt)("th",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"th",href:"https://www.apache.org/dist/incubator/milagro/apache-milagro-crypto-c-1.0.0-incubating/apache-milagro-crypto-c-1.0.0-incubating-src.tar.gz.sha512"},"sha512")),(0,l.kt)("th",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"th",href:"https://www.apache.org/dist/incubator/milagro/apache-milagro-crypto-c-1.0.0-incubating/apache-milagro-crypto-c-1.0.0-incubating-src.tar.gz.asc"},"signature"))))),(0,l.kt)("h3",{id:"release-notes-3"},"Release Notes"),(0,l.kt)("p",null,"The latest release notes can be found ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/apache/incubator-milagro-crypto-c/releases/tag/1.0.0"},"here")),(0,l.kt)("h3",{id:"previous-releases-3"},"Previous Releases"),(0,l.kt)("p",null,"None"),(0,l.kt)("h2",{id:"apache-milagro-crypto-js-incubating-v100"},"Apache Milagro Crypto JS Incubating v1.0.0"),(0,l.kt)("p",null,"This is the initial release of the Apache Milagro Crypto JS library."),(0,l.kt)("h3",{id:"source-release-4"},"Source Release"),(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},(0,l.kt)("a",{parentName:"th",href:"http://www.apache.org/dyn/closer.cgi/incubator/milagro/apache-milagro-crypto-js-1.0.0-incubating/apache-milagro-crypto-js-1.0.0-incubating-src.tar.gz"},"tar.gz")),(0,l.kt)("th",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"th",href:"https://www.apache.org/dist/incubator/milagro/apache-milagro-crypto-js-1.0.0-incubating/apache-milagro-crypto-js-1.0.0-incubating-src.tar.gz.sha512"},"sha512")),(0,l.kt)("th",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"th",href:"https://www.apache.org/dist/incubator/milagro/apache-milagro-crypto-js-1.0.0-incubating/apache-milagro-crypto-js-1.0.0-incubating-src.tar.gz.asc"},"signature"))))),(0,l.kt)("h3",{id:"release-notes-4"},"Release Notes"),(0,l.kt)("p",null,"The latest release notes can be found ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/apache/incubator-milagro-crypto-js/releases/tag/1.0.0"},"here")),(0,l.kt)("h3",{id:"previous-releases-4"},"Previous Releases"),(0,l.kt)("p",null,"None"),(0,l.kt)("p",null,"Supported admonition types are: caution, note, important, tip, warning."))}g.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/07d4c24f.73a9da8c.js b/assets/js/07d4c24f.73a9da8c.js
new file mode 100644
index 0000000..b7cebc4
--- /dev/null
+++ b/assets/js/07d4c24f.73a9da8c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5962],{5804:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-blog","id":"blog"}')}}]);
\ No newline at end of file
diff --git a/assets/js/08c494e0.0af470b4.js b/assets/js/08c494e0.0af470b4.js
new file mode 100644
index 0000000..84e4f08
--- /dev/null
+++ b/assets/js/08c494e0.0af470b4.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6944],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});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 a(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?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(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,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=r.createContext({}),s=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=s(e.components);return r.createElement(p.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},g=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),c=s(n),g=o,m=c["".concat(p,".").concat(g)]||c[g]||d[g]||a;return n?r.createElement(m,i(i({ref:t},u),{},{components:n})):r.createElement(m,i({ref:t},u))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=g;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[c]="string"==typeof e?e:o,i[1]=l;for(var s=2;s<a;s++)i[s]=n[s];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}g.displayName="MDXCreateElement"},2721:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>p,default:()=>g,frontMatter:()=>l,metadata:()=>s,toc:()=>c});var r=n(7462),o=n(3366),a=(n(7294),n(3905)),i=["components"],l={id:"plugin-dev-guide",title:"D-TA Plugins Developers Guide",sidebar_label:"Developers Guide"},p=void 0,s={unversionedId:"dta-details/plugin-dev-guide",id:"dta-details/plugin-dev-guide",title:"D-TA Plugins Developers Guide",description:"We have provided a template plugin that provides the same functionality as out-of-the-box milagro.",source:"@site/../docs/dta-details/plugin-dev-guide.md",sourceDirName:"dta-details",slug:"/dta-details/plugin-dev-guide",permalink:"/docs/dta-details/plugin-dev-guide",draft:!1,tags:[],version:"current",frontMatter:{id:"plugin-dev-guide",title:"D-TA Plugins Developers Guide",sidebar_label:"Developers Guide"}},u={},c=[{value:"Developer Notes",id:"developer-notes",level:2}],d={toc:c};function g(e){var t=e.components,n=(0,o.Z)(e,i);return(0,a.kt)("wrapper",(0,r.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"We have provided a template plugin that provides the same functionality as out-of-the-box milagro."),(0,a.kt)("h2",{id:"developer-notes"},"Developer Notes"),(0,a.kt)("p",null,"You need to install protobufs"),(0,a.kt)("p",null,"If you change the portobufs definition run "),(0,a.kt)("p",null,"$ protoc -I=. --go_out=. ./docs.proto"),(0,a.kt)("p",null,"To add a new endpoint to the goKit Microservices framework"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"First define the contract in milagro/pkg/milagroservice/proto.go")),(0,a.kt)("p",null,"Add structs for http transport\nAdd responses to milagro/swagger/swagger.config,yaml"),(0,a.kt)("ol",{start:2},(0,a.kt)("li",{parentName:"ol"},"Add and endpoint definition")),(0,a.kt)("p",null,"milagro/pkg/milagroendpoints/endpoints.go"),(0,a.kt)("ol",{start:3},(0,a.kt)("li",{parentName:"ol"},"Create a handler factory")),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Thise instructions still aren't perfect")),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Clone the repo and make sure that it works by following the ",(0,a.kt)("a",{parentName:"li",href:"/docs/dta-details/quickstart"},"Quick Start")," instructions"),(0,a.kt)("li",{parentName:"ol"},"Copy the plugin template")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"\ncp -r pkg/plugintemplate pkg/encryptastring\n\n")),(0,a.kt)("ol",{start:3},(0,a.kt)("li",{parentName:"ol"},"Rename the package and service\non a mac you could do this...")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},'\nsed -i "" "s/template/encryptastring/g" pkg/encryptastring/service.go\n\n')),(0,a.kt)("ol",{start:4},(0,a.kt)("li",{parentName:"ol"},"Now create a plugin regsitration file")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},'\nsed -i "" "s/plugintemplate/encryptastring/g" plugins/encryptastring.go\nsed -i "" "s/pluginTemplate/encryptAString/g" plugins/encryptastring.go\n\n')),(0,a.kt)("ol",{start:5},(0,a.kt)("li",{parentName:"ol"},"Update the Config File")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"\nnano ~/.milagro/config.yaml\n\nupdate....\n\nplugins:\n  service: encryptastring\n\n\n")),(0,a.kt)("ol",{start:6},(0,a.kt)("li",{parentName:"ol"},"See your plugin in action!")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"\ngo build -o target/service github.com/apache/incubator-milagro-dta/cmd/service\ntarget/service\n\n")),(0,a.kt)("p",null,"Point your browser at:\nhttp://localhost:5555/status"),(0,a.kt)("p",null,"you should see"))}g.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/0aae0fe2.80df566f.js b/assets/js/0aae0fe2.80df566f.js
new file mode 100644
index 0000000..7a48fd6
--- /dev/null
+++ b/assets/js/0aae0fe2.80df566f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2569],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(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?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function c(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(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)&&(o[r]=e[r])}return o}var p=n.createContext({}),l=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(p.Provider,{value:t},e.children)},d="mdxType",s={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),d=l(r),f=o,m=d["".concat(p,".").concat(f)]||d[f]||s[f]||a;return r?n.createElement(m,i(i({ref:t},u),{},{components:r})):n.createElement(m,i({ref:t},u))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=f;var c={};for(var p in t)hasOwnProperty.call(t,p)&&(c[p]=t[p]);c.originalType=e,c[d]="string"==typeof e?e:o,i[1]=c;for(var l=2;l<a;l++)i[l]=r[l];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}f.displayName="MDXCreateElement"},3579:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>p,default:()=>f,frontMatter:()=>c,metadata:()=>l,toc:()=>d});var n=r(7462),o=r(3366),a=(r(7294),r(3905)),i=["components"],c={id:"d-ta-api",title:"D-TA Node API",sidebar_label:"D-TA Node API"},p=void 0,l={unversionedId:"d-ta-api",id:"d-ta-api",title:"D-TA Node API",description:"Interested in becoming a contributor? Milagro is looking for you.",source:"@site/../docs/d-ta-api.md",sourceDirName:".",slug:"/d-ta-api",permalink:"/docs/d-ta-api",draft:!1,tags:[],version:"current",frontMatter:{id:"d-ta-api",title:"D-TA Node API",sidebar_label:"D-TA Node API"}},u={},d=[],s={toc:d};function f(e){var t=e.components,r=(0,o.Z)(e,i);return(0,a.kt)("wrapper",(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("admonition",{title:"WE NEED HELP DOCUMENTING!",type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"Interested in becoming a contributor? Milagro is looking for you.\n",(0,a.kt)("a",{parentName:"p",href:"/docs/contributor-guide"},"CONTRIBUTOR'S GUIDE"),".")),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"/swagger/index.html"},"Swagger")),(0,a.kt)("p",null,"Supported admonition types are: caution, note, important, tip, warning."))}f.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/0f3e38c0.12e6a23f.js b/assets/js/0f3e38c0.12e6a23f.js
new file mode 100644
index 0000000..6efbe14
--- /dev/null
+++ b/assets/js/0f3e38c0.12e6a23f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9839],{3905:(t,e,n)=>{n.d(e,{Zo:()=>k,kt:()=>b});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 p(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?p(Object(n),!0).forEach((function(e){r(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):p(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={},p=Object.keys(t);for(a=0;a<p.length;a++)n=p[a],e.indexOf(n)>=0||(r[n]=t[n]);return r}(t,e);if(Object.getOwnPropertySymbols){var p=Object.getOwnPropertySymbols(t);for(a=0;a<p.length;a++)n=p[a],e.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(r[n]=t[n])}return r}var o=a.createContext({}),m=function(t){var e=a.useContext(o),n=e;return t&&(n="function"==typeof t?t(e):l(l({},e),t)),n},k=function(t){var e=m(t.components);return a.createElement(o.Provider,{value:e},t.children)},d="mdxType",s={inlineCode:"code",wrapper:function(t){var e=t.children;return a.createElement(a.Fragment,{},e)}},u=a.forwardRef((function(t,e){var n=t.components,r=t.mdxType,p=t.originalType,o=t.parentName,k=i(t,["components","mdxType","originalType","parentName"]),d=m(n),u=r,b=d["".concat(o,".").concat(u)]||d[u]||s[u]||p;return n?a.createElement(b,l(l({ref:e},k),{},{components:n})):a.createElement(b,l({ref:e},k))}));function b(t,e){var n=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var p=n.length,l=new Array(p);l[0]=u;var i={};for(var o in e)hasOwnProperty.call(e,o)&&(i[o]=e[o]);i.originalType=t,i[d]="string"==typeof t?t:r,l[1]=i;for(var m=2;m<p;m++)l[m]=n[m];return a.createElement.apply(null,l)}return a.createElement.apply(null,n)}u.displayName="MDXCreateElement"},7094:(t,e,n)=>{n.r(e),n.d(e,{assets:()=>k,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>m,toc:()=>d});var a=n(7462),r=n(3366),p=(n(7294),n(3905)),l=["components"],i={id:"dbig",title:"DBIG",sidebar_label:"DBIG"},o=void 0,m={unversionedId:"cryptojs/dbig",id:"cryptojs/dbig",title:"DBIG",description:"DBIG",source:"@site/../docs/cryptojs/dbig.md",sourceDirName:"cryptojs",slug:"/cryptojs/dbig",permalink:"/docs/cryptojs/dbig",draft:!1,tags:[],version:"current",frontMatter:{id:"dbig",title:"DBIG",sidebar_label:"DBIG"},sidebar:"docs",previous:{title:"BLS256",permalink:"/docs/cryptojs/bls256"},next:{title:"ECDH",permalink:"/docs/cryptojs/ecdh"}},k={},d=[{value:"DBIG",id:"dbig",level:2},{value:"new DBIG()",id:"new-dbig",level:3},{value:"dbiG.zero() \u21d2",id:"dbigzero-",level:3},{value:"dbiG.copy() \u21d2",id:"dbigcopy-",level:3},{value:"dbiG.hcopy() \u21d2",id:"dbighcopy-",level:3},{value:"dbiG.norm() \u21d2",id:"dbignorm-",level:3},{value:"dbiG.muladd()",id:"dbigmuladd",level:3},{value:"dbiG.shr() \u21d2",id:"dbigshr-",level:3},{value:"dbiG.shl() \u21d2",id:"dbigshl-",level:3},{value:"dbiG.cmove()",id:"dbigcmove",level:3},{value:"dbiG.add() \u21d2",id:"dbigadd-",level:3},{value:"dbiG.sub() \u21d2",id:"dbigsub-",level:3},{value:"dbiG.nbits() \u21d2",id:"dbignbits-",level:3},{value:"dbiG.toString() \u21d2",id:"dbigtostring-",level:3},{value:"dbiG.mod() \u21d2",id:"dbigmod-",level:3},{value:"dbiG.div() \u21d2",id:"dbigdiv-",level:3},{value:"dbiG.split() \u21d2",id:"dbigsplit-",level:3},{value:"DBIG.comp() \u21d2",id:"dbigcomp-",level:3}],s={toc:d};function u(t){var e=t.components,n=(0,r.Z)(t,l);return(0,p.kt)("wrapper",(0,a.Z)({},s,n,{components:e,mdxType:"MDXLayout"}),(0,p.kt)("a",{name:"DBIG"}),(0,p.kt)("h2",{id:"dbig"},"DBIG"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": global class",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}DBIG{"}"}'),"  "),(0,p.kt)("ul",null,(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#DBIG"},"DBIG"),(0,p.kt)("ul",{parentName:"li"},(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#new_DBIG_new"},"new DBIG()")),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("em",{parentName:"li"},"instance"),(0,p.kt)("ul",{parentName:"li"},(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#DBIG+zero"},".zero()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#DBIG+copy"},".copy()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#DBIG+hcopy"},".hcopy()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#DBIG+norm"},".norm()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#DBIG+muladd"},".muladd()")),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#DBIG+shr"},".shr()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#DBIG+shl"},".shl()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#DBIG+cmove"},".cmove()")),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#DBIG+add"},".add()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#DBIG+sub"},".sub()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#DBIG+nbits"},".nbits()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#DBIG+toString"},".toString()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#DBIG+mod"},".mod()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#DBIG+div"},".div()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#DBIG+split"},".split()")," \u21d2"))),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("em",{parentName:"li"},"static"),(0,p.kt)("ul",{parentName:"li"},(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#DBIG.comp"},".comp()")," \u21d2")))))),(0,p.kt)("a",{name:"new_DBIG_new"}),(0,p.kt)("h3",{id:"new-dbig"},"new DBIG()"),(0,p.kt)("p",null,"General purpose Constructor"),(0,p.kt)("a",{name:"DBIG+zero"}),(0,p.kt)("h3",{id:"dbigzero-"},"dbiG.zero() \u21d2"),(0,p.kt)("p",null,"set to zero"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#DBIG"},(0,p.kt)("code",null,"DBIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": BIG number",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}DBIG{"}"}'),"  "),(0,p.kt)("a",{name:"DBIG+copy"}),(0,p.kt)("h3",{id:"dbigcopy-"},"dbiG.copy() \u21d2"),(0,p.kt)("p",null,"set to b"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#DBIG"},(0,p.kt)("code",null,"DBIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": DBIG number",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}DBIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": b DBIG number  "),(0,p.kt)("a",{name:"DBIG+hcopy"}),(0,p.kt)("h3",{id:"dbighcopy-"},"dbiG.hcopy() \u21d2"),(0,p.kt)("p",null,"copy from ctx.BIG"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#DBIG"},(0,p.kt)("code",null,"DBIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": DBIG number",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}DBIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": b BIG number  "),(0,p.kt)("a",{name:"DBIG+norm"}),(0,p.kt)("h3",{id:"dbignorm-"},"dbiG.norm() \u21d2"),(0,p.kt)("p",null,"normalise DBIG - force all digits ","<"," 2^BASEBITS"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#DBIG"},(0,p.kt)("code",null,"DBIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": DBIG number",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}DBIG{"}"}'),"  "),(0,p.kt)("a",{name:"DBIG+muladd"}),(0,p.kt)("h3",{id:"dbigmuladd"},"dbiG.muladd()"),(0,p.kt)("p",null,"this","[i]","+=x","*","y+c, and return high part"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#DBIG"},(0,p.kt)("code",null,"DBIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}DBIG{"}"}'),"  "),(0,p.kt)("a",{name:"DBIG+shr"}),(0,p.kt)("h3",{id:"dbigshr-"},"dbiG.shr() \u21d2"),(0,p.kt)("p",null,"General shift right by k bits"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#DBIG"},(0,p.kt)("code",null,"DBIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": BIG number",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}DBIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": k Number of bits to shift  "),(0,p.kt)("a",{name:"DBIG+shl"}),(0,p.kt)("h3",{id:"dbigshl-"},"dbiG.shl() \u21d2"),(0,p.kt)("p",null,"General shift left by k bits"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#DBIG"},(0,p.kt)("code",null,"DBIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": BIG number",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": k Number of bits to shift  "),(0,p.kt)("a",{name:"DBIG+cmove"}),(0,p.kt)("h3",{id:"dbigcmove"},"dbiG.cmove()"),(0,p.kt)("p",null,"Conditional move of BIG depending on d using XOR - no branches"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#DBIG"},(0,p.kt)("code",null,"DBIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}DBIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": b DBIG number",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": d DBIG number  "),(0,p.kt)("a",{name:"DBIG+add"}),(0,p.kt)("h3",{id:"dbigadd-"},"dbiG.add() \u21d2"),(0,p.kt)("p",null,"Sum two DBIG mumbers"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#DBIG"},(0,p.kt)("code",null,"DBIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": this+=x",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}DBIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": x DBIG object  "),(0,p.kt)("a",{name:"DBIG+sub"}),(0,p.kt)("h3",{id:"dbigsub-"},"dbiG.sub() \u21d2"),(0,p.kt)("p",null,"Subtract DBIG from one another"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#DBIG"},(0,p.kt)("code",null,"DBIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": this-=x",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}DBIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": x BIG object  "),(0,p.kt)("a",{name:"DBIG+nbits"}),(0,p.kt)("h3",{id:"dbignbits-"},"dbiG.nbits() \u21d2"),(0,p.kt)("p",null,"length in bits"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#DBIG"},(0,p.kt)("code",null,"DBIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": The number of bigs in DBIG object",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}DBIG{"}"}'),"  "),(0,p.kt)("a",{name:"DBIG+toString"}),(0,p.kt)("h3",{id:"dbigtostring-"},"dbiG.toString() \u21d2"),(0,p.kt)("p",null,"Convert to string"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#DBIG"},(0,p.kt)("code",null,"DBIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": string representation of a BIG number",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}DBIG{"}"}'),"  "),(0,p.kt)("a",{name:"DBIG+mod"}),(0,p.kt)("h3",{id:"dbigmod-"},"dbiG.mod() \u21d2"),(0,p.kt)("p",null,"reduces this DBIG mod a ctx.BIG, and returns the ctx.BIG"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#DBIG"},(0,p.kt)("code",null,"DBIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": BIG object",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}DBIG{"}"}'),"  "),(0,p.kt)("a",{name:"DBIG+div"}),(0,p.kt)("h3",{id:"dbigdiv-"},"dbiG.div() \u21d2"),(0,p.kt)("p",null,"this/=c"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#DBIG"},(0,p.kt)("code",null,"DBIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": DBIG number",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}DBIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Paramter"),": c divisor  "),(0,p.kt)("a",{name:"DBIG+split"}),(0,p.kt)("h3",{id:"dbigsplit-"},"dbiG.split() \u21d2"),(0,p.kt)("p",null,"split this DBIG at position n, return higher half, keep lower half"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#DBIG"},(0,p.kt)("code",null,"DBIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": lower half BIG number",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}DBIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Paramter"),": n Position to splitdivisor  "),(0,p.kt)("a",{name:"DBIG.comp"}),(0,p.kt)("h3",{id:"dbigcomp-"},"DBIG.comp() \u21d2"),(0,p.kt)("p",null,"Compare a and b"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#DBIG"},(0,p.kt)("code",null,"DBIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": 0 if a==b, -1 if a","<","b, +1 if a",">","b",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}DBIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": a DBIG number (normalised)",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": b DBIG number (normalised"))}u.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/1056678c.caf18304.js b/assets/js/1056678c.caf18304.js
new file mode 100644
index 0000000..b0b21dc
--- /dev/null
+++ b/assets/js/1056678c.caf18304.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7454],{3905:(t,e,a)=>{a.d(e,{Zo:()=>m,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 p(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 k(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({}),i=function(t){var e=n.useContext(o),a=e;return t&&(a="function"==typeof t?t(e):p(p({},e),t)),a},m=function(t){var e=i(t.components);return n.createElement(o.Provider,{value:e},t.children)},u="mdxType",s={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},d=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,l=t.originalType,o=t.parentName,m=k(t,["components","mdxType","originalType","parentName"]),u=i(a),d=r,N=u["".concat(o,".").concat(d)]||u[d]||s[d]||l;return a?n.createElement(N,p(p({ref:e},m),{},{components:a})):n.createElement(N,p({ref:e},m))}));function N(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=a.length,p=new Array(l);p[0]=d;var k={};for(var o in e)hasOwnProperty.call(e,o)&&(k[o]=e[o]);k.originalType=t,k[u]="string"==typeof t?t:r,p[1]=k;for(var i=2;i<l;i++)p[i]=a[i];return n.createElement.apply(null,p)}return n.createElement.apply(null,a)}d.displayName="MDXCreateElement"},9354:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>m,contentTitle:()=>o,default:()=>d,frontMatter:()=>k,metadata:()=>i,toc:()=>u});var n=a(7462),r=a(3366),l=(a(7294),a(3905)),p=["components"],k={id:"fp24",title:"FP24",sidebar_label:"FP24"},o=void 0,i={unversionedId:"cryptojs/fp24",id:"cryptojs/fp24",title:"FP24",description:"FP24",source:"@site/../docs/cryptojs/fp24.md",sourceDirName:"cryptojs",slug:"/cryptojs/fp24",permalink:"/docs/cryptojs/fp24",draft:!1,tags:[],version:"current",frontMatter:{id:"fp24",title:"FP24",sidebar_label:"FP24"},sidebar:"docs",previous:{title:"FP16",permalink:"/docs/cryptojs/fp16"},next:{title:"FP48",permalink:"/docs/cryptojs/fp48"}},m={},u=[{value:"FP24",id:"fp24",level:2},{value:"new FP24()",id:"new-fp24",level:3},{value:"fP24.reduce()",id:"fp24reduce",level:3},{value:"fP24.norm()",id:"fp24norm",level:3},{value:"fP24.iszilch()",id:"fp24iszilch",level:3},{value:"fP24.isunity()",id:"fp24isunity",level:3},{value:"fP24.cmove(g, d)",id:"fp24cmoveg-d",level:3},{value:"fP24.select()",id:"fp24select",level:3},{value:"fP24.geta()",id:"fp24geta",level:3},{value:"fP24.getb()",id:"fp24getb",level:3},{value:"fP24.getc()",id:"fp24getc",level:3},{value:"fP24.equals(x)",id:"fp24equalsx",level:3},{value:"fP24.copy(x)",id:"fp24copyx",level:3},{value:"fP24.one(x)",id:"fp24onex",level:3},{value:"fP24.zero()",id:"fp24zero",level:3},{value:"fP24.conj()",id:"fp24conj",level:3},{value:"fP24.set(d, e, f)",id:"fp24setd-e-f",level:3},{value:"fP24.seta(c)",id:"fp24setac",level:3},{value:"fP24.usqr()",id:"fp24usqr",level:3},{value:"fP24.sqr()",id:"fp24sqr",level:3},{value:"fP24.mul(y)",id:"fp24muly",level:3},{value:"fP24.smul(y)",id:"fp24smuly",level:3},{value:"fP24.ssmul(y)",id:"fp24ssmuly",level:3},{value:"fP24.inverse()",id:"fp24inverse",level:3},{value:"fP24.frob(f)",id:"fp24frobf",level:3},{value:"fP24.trace()",id:"fp24trace",level:3},{value:"fP24.toString()",id:"fp24tostring",level:3},{value:"fP24.toBytes(w)",id:"fp24tobytesw",level:3},{value:"fP24.pow(e)",id:"fp24powe",level:3},{value:"fP24.pinpow(e, bts)",id:"fp24pinpowe-bts",level:3},{value:"fP24.compow(e, r)",id:"fp24compowe-r",level:3},{value:"FP24.fromBytes(w)",id:"fp24frombytesw",level:3},{value:"FP24.teq()",id:"fp24teq",level:3},{value:"FP24.pow8()",id:"fp24pow8",level:3}],s={toc:u};function d(t){var e=t.components,a=(0,r.Z)(t,p);return(0,l.kt)("wrapper",(0,n.Z)({},s,a,{components:e,mdxType:"MDXLayout"}),(0,l.kt)("a",{name:"FP24"}),(0,l.kt)("h2",{id:"fp24"},"FP24"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": global class",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP24{"}"}'),"  "),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP24"},"FP24"),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#new_FP24_new"},"new FP24()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("em",{parentName:"li"},"instance"),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP24+reduce"},".reduce()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP24+norm"},".norm()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP24+iszilch"},".iszilch()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP24+isunity"},".isunity()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP24+cmove"},".cmove(g, d)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP24+select"},".select()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP24+geta"},".geta()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP24+getb"},".getb()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP24+getc"},".getc()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP24+equals"},".equals(x)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP24+copy"},".copy(x)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP24+one"},".one(x)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP24+zero"},".zero()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP24+conj"},".conj()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP24+set"},".set(d, e, f)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP24+seta"},".seta(c)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP24+usqr"},".usqr()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP24+sqr"},".sqr()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP24+mul"},".mul(y)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP24+smul"},".smul(y)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP24+ssmul"},".ssmul(y)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP24+inverse"},".inverse()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP24+frob"},".frob(f)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP24+trace"},".trace()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP24+toString"},".toString()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP24+toBytes"},".toBytes(w)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP24+pow"},".pow(e)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP24+pinpow"},".pinpow(e, bts)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP24+compow"},".compow(e, r)")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("em",{parentName:"li"},"static"),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP24.fromBytes"},".fromBytes(w)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP24.teq"},".teq()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP24.pow8"},".pow8()"))))))),(0,l.kt)("a",{name:"new_FP24_new"}),(0,l.kt)("h3",{id:"new-fp24"},"new FP24()"),(0,l.kt)("p",null,"Creates an instance of FP24."),(0,l.kt)("a",{name:"FP24+reduce"}),(0,l.kt)("h3",{id:"fp24reduce"},"fP24.reduce()"),(0,l.kt)("p",null,"Reduces all components of possibly unreduced FP24 mod Modulus"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP24"},(0,l.kt)("code",null,"FP24")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP24{"}"}'),"  "),(0,l.kt)("a",{name:"FP24+norm"}),(0,l.kt)("h3",{id:"fp24norm"},"fP24.norm()"),(0,l.kt)("p",null,"Normalises the components of an FP24"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP24"},(0,l.kt)("code",null,"FP24")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP24{"}"}'),"  "),(0,l.kt)("a",{name:"FP24+iszilch"}),(0,l.kt)("h3",{id:"fp24iszilch"},"fP24.iszilch()"),(0,l.kt)("p",null,"Tests for FP24 equal to zero"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP24"},(0,l.kt)("code",null,"FP24")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP24{"}"}'),"  "),(0,l.kt)("a",{name:"FP24+isunity"}),(0,l.kt)("h3",{id:"fp24isunity"},"fP24.isunity()"),(0,l.kt)("p",null,"Tests for FP24 equal to unity"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP24"},(0,l.kt)("code",null,"FP24")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP24{"}"}'),"  "),(0,l.kt)("a",{name:"FP24+cmove"}),(0,l.kt)("h3",{id:"fp24cmoveg-d"},"fP24.cmove(g, d)"),(0,l.kt)("p",null,"Conditional copy of FP24 number"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP24"},(0,l.kt)("code",null,"FP24")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP24{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"g"),(0,l.kt)("td",{parentName:"tr",align:null},"FP24 instance")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"d"),(0,l.kt)("td",{parentName:"tr",align:null},"copy depends on this value")))),(0,l.kt)("a",{name:"FP24+select"}),(0,l.kt)("h3",{id:"fp24select"},"fP24.select()"),(0,l.kt)("p",null,"Constant time select from pre-computed table"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP24"},(0,l.kt)("code",null,"FP24")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP24{"}"}'),"  "),(0,l.kt)("a",{name:"FP24+geta"}),(0,l.kt)("h3",{id:"fp24geta"},"fP24.geta()"),(0,l.kt)("p",null,"extract a from this"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP24"},(0,l.kt)("code",null,"FP24")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP24{"}"}'),"  "),(0,l.kt)("a",{name:"FP24+getb"}),(0,l.kt)("h3",{id:"fp24getb"},"fP24.getb()"),(0,l.kt)("p",null,"extract b from this"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP24"},(0,l.kt)("code",null,"FP24")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP24{"}"}'),"  "),(0,l.kt)("a",{name:"FP24+getc"}),(0,l.kt)("h3",{id:"fp24getc"},"fP24.getc()"),(0,l.kt)("p",null,"extract c from this"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP24"},(0,l.kt)("code",null,"FP24")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP24{"}"}'),"  "),(0,l.kt)("a",{name:"FP24+equals"}),(0,l.kt)("h3",{id:"fp24equalsx"},"fP24.equals(x)"),(0,l.kt)("p",null,"Tests for equality of two FP24s"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP24"},(0,l.kt)("code",null,"FP24")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP24{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"x"),(0,l.kt)("td",{parentName:"tr",align:null},"FP24 instance to compare")))),(0,l.kt)("a",{name:"FP24+copy"}),(0,l.kt)("h3",{id:"fp24copyx"},"fP24.copy(x)"),(0,l.kt)("p",null,"Copy FP24 to another FP24"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP24"},(0,l.kt)("code",null,"FP24")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP24{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"x"),(0,l.kt)("td",{parentName:"tr",align:null},"FP24 instance to be copied")))),(0,l.kt)("a",{name:"FP24+one"}),(0,l.kt)("h3",{id:"fp24onex"},"fP24.one(x)"),(0,l.kt)("p",null,"Set FP24 to unity"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP24"},(0,l.kt)("code",null,"FP24")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP24{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"x"),(0,l.kt)("td",{parentName:"tr",align:null},"FP24 instance to be set to one")))),(0,l.kt)("a",{name:"FP24+zero"}),(0,l.kt)("h3",{id:"fp24zero"},"fP24.zero()"),(0,l.kt)("p",null,"Set FP24 to zero"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP24"},(0,l.kt)("code",null,"FP24")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP24{"}"}'),"  "),(0,l.kt)("a",{name:"FP24+conj"}),(0,l.kt)("h3",{id:"fp24conj"},"fP24.conj()"),(0,l.kt)("p",null,"Conjugation of FP24"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP24"},(0,l.kt)("code",null,"FP24")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP24{"}"}'),"  "),(0,l.kt)("a",{name:"FP24+set"}),(0,l.kt)("h3",{id:"fp24setd-e-f"},"fP24.set(d, e, f)"),(0,l.kt)("p",null,"Set FP24 from three FP8 values"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP24"},(0,l.kt)("code",null,"FP24")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP24{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"d"),(0,l.kt)("td",{parentName:"tr",align:null},"FP8 instance")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"e"),(0,l.kt)("td",{parentName:"tr",align:null},"FP8 instance")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"f"),(0,l.kt)("td",{parentName:"tr",align:null},"FP8 instance")))),(0,l.kt)("a",{name:"FP24+seta"}),(0,l.kt)("h3",{id:"fp24setac"},"fP24.seta(c)"),(0,l.kt)("p",null,"Set FP24 from one FP8 value"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP24"},(0,l.kt)("code",null,"FP24")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP24{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"c"),(0,l.kt)("td",{parentName:"tr",align:null},"FP8 instance")))),(0,l.kt)("a",{name:"FP24+usqr"}),(0,l.kt)("h3",{id:"fp24usqr"},"fP24.usqr()"),(0,l.kt)("p",null,'Fast Squaring of an FP24 in "unitary" form'),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP24"},(0,l.kt)("code",null,"FP24")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP24{"}"}'),"  "),(0,l.kt)("a",{name:"FP24+sqr"}),(0,l.kt)("h3",{id:"fp24sqr"},"fP24.sqr()"),(0,l.kt)("p",null,"Fast Squaring of an FP24"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP24"},(0,l.kt)("code",null,"FP24")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP24{"}"}'),"  "),(0,l.kt)("a",{name:"FP24+mul"}),(0,l.kt)("h3",{id:"fp24muly"},"fP24.mul(y)"),(0,l.kt)("p",null,"Full unconditional Multiplication of two FP24s"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP24"},(0,l.kt)("code",null,"FP24")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP24{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"y"),(0,l.kt)("td",{parentName:"tr",align:null},"FP24 instance, the multiplier")))),(0,l.kt)("a",{name:"FP24+smul"}),(0,l.kt)("h3",{id:"fp24smuly"},"fP24.smul(y)"),(0,l.kt)("p",null,"Fast multiplication of two sparse FP24s that arises from ATE pairing line functions"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP24"},(0,l.kt)("code",null,"FP24")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP24{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"y"),(0,l.kt)("td",{parentName:"tr",align:null},"FP24 instance, the multiplier")))),(0,l.kt)("a",{name:"FP24+ssmul"}),(0,l.kt)("h3",{id:"fp24ssmuly"},"fP24.ssmul(y)"),(0,l.kt)("p",null,"Fast multiplication of what may be sparse multiplicands"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP24"},(0,l.kt)("code",null,"FP24")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP24{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"y"),(0,l.kt)("td",{parentName:"tr",align:null},"FP24 instance, the multiplier")))),(0,l.kt)("a",{name:"FP24+inverse"}),(0,l.kt)("h3",{id:"fp24inverse"},"fP24.inverse()"),(0,l.kt)("p",null,"Inverting an FP24"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP24"},(0,l.kt)("code",null,"FP24")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP24{"}"}'),"  "),(0,l.kt)("a",{name:"FP24+frob"}),(0,l.kt)("h3",{id:"fp24frobf"},"fP24.frob(f)"),(0,l.kt)("p",null,"Raises an FP24 to the power of the internal modulus p, using the Frobenius"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP24"},(0,l.kt)("code",null,"FP24")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP24{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"f"),(0,l.kt)("td",{parentName:"tr",align:null},"Modulus")))),(0,l.kt)("a",{name:"FP24+trace"}),(0,l.kt)("h3",{id:"fp24trace"},"fP24.trace()"),(0,l.kt)("p",null,"Calculate the trace of an FP24"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP24"},(0,l.kt)("code",null,"FP24")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP24{"}"}'),"  "),(0,l.kt)("a",{name:"FP24+toString"}),(0,l.kt)("h3",{id:"fp24tostring"},"fP24.toString()"),(0,l.kt)("p",null,"convert this to hex string"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP24"},(0,l.kt)("code",null,"FP24")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP24{"}"}'),"  "),(0,l.kt)("a",{name:"FP24+toBytes"}),(0,l.kt)("h3",{id:"fp24tobytesw"},"fP24.toBytes(w)"),(0,l.kt)("p",null,"convert this to byte array"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP24"},(0,l.kt)("code",null,"FP24")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP24{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"w"),(0,l.kt)("td",{parentName:"tr",align:null},"Byte array")))),(0,l.kt)("a",{name:"FP24+pow"}),(0,l.kt)("h3",{id:"fp24powe"},"fP24.pow(e)"),(0,l.kt)("p",null,"Raises an FP24 to the power of a BIG"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP24"},(0,l.kt)("code",null,"FP24")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP24{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"e"),(0,l.kt)("td",{parentName:"tr",align:null},"BIG instance exponent")))),(0,l.kt)("a",{name:"FP24+pinpow"}),(0,l.kt)("h3",{id:"fp24pinpowe-bts"},"fP24.pinpow(e, bts)"),(0,l.kt)("p",null,"Raises an FP24 instance x to a small integer power, side-channel resistant"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP24"},(0,l.kt)("code",null,"FP24")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP24{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"e"),(0,l.kt)("td",{parentName:"tr",align:null},"small integer exponent")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"bts"),(0,l.kt)("td",{parentName:"tr",align:null},"maximum number of bits in exponent")))),(0,l.kt)("a",{name:"FP24+compow"}),(0,l.kt)("h3",{id:"fp24compowe-r"},"fP24.compow(e, r)"),(0,l.kt)("p",null,"Raises an FP24 instance to a BIG power, compressed to FP4"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP24"},(0,l.kt)("code",null,"FP24")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP24{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"e"),(0,l.kt)("td",{parentName:"tr",align:null},"BIG exponent")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"r"),(0,l.kt)("td",{parentName:"tr",align:null},"BIG group order")))),(0,l.kt)("a",{name:"FP24.fromBytes"}),(0,l.kt)("h3",{id:"fp24frombytesw"},"FP24.fromBytes(w)"),(0,l.kt)("p",null,"convert from byte array to FP24"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#FP24"},(0,l.kt)("code",null,"FP24")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP24{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"w"),(0,l.kt)("td",{parentName:"tr",align:null},"Byte array")))),(0,l.kt)("a",{name:"FP24.teq"}),(0,l.kt)("h3",{id:"fp24teq"},"FP24.teq()"),(0,l.kt)("p",null,"return 1 if b==c, no branching"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#FP24"},(0,l.kt)("code",null,"FP24")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP24{"}"}'),"  "),(0,l.kt)("a",{name:"FP24.pow8"}),(0,l.kt)("h3",{id:"fp24pow8"},"FP24.pow8()"),(0,l.kt)("p",null,"p=q0^u0.q1^u1.q2^u2.q3^u3..."),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#FP24"},(0,l.kt)("code",null,"FP24")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP24{"}"}')))}d.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/1271.3089a1a2.js b/assets/js/1271.3089a1a2.js
new file mode 100644
index 0000000..a17011d
--- /dev/null
+++ b/assets/js/1271.3089a1a2.js
@@ -0,0 +1 @@
+(self.webpackChunk=self.webpackChunk||[]).push([[1271],{3905:(e,t,n)=>{"use strict";n.d(t,{Zo:()=>u,kt:()=>f});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 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){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 i(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 c=r.createContext({}),s=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},u=function(e){var t=s(e.components);return r.createElement(c.Provider,{value:t},e.children)},m="mdxType",d={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,a=e.mdxType,o=e.originalType,c=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),m=s(n),p=a,f=m["".concat(c,".").concat(p)]||m[p]||d[p]||o;return n?r.createElement(f,l(l({ref:t},u),{},{components:n})):r.createElement(f,l({ref:t},u))}));function f(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,l=new Array(o);l[0]=p;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i[m]="string"==typeof e?e:a,l[1]=i;for(var s=2;s<o;s++)l[s]=n[s];return r.createElement.apply(null,l)}return r.createElement.apply(null,n)}p.displayName="MDXCreateElement"},4881:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var r=n(7294),a=n(5999),o=n(5281),l=n(7462),i=n(3366),c=n(6010);const s="iconEdit_Z9Sw";var u=["className"];function m(e){var t=e.className,n=(0,i.Z)(e,u);return r.createElement("svg",(0,l.Z)({fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,c.Z)(s,t),"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 d(e){var t=e.editUrl;return r.createElement("a",{href:t,target:"_blank",rel:"noreferrer noopener",className:o.k.common.editThisPage},r.createElement(m,null),r.createElement(a.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page"},"Edit this page"))}},2503:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var r=n(7462),a=n(3366),o=n(7294),l=n(6010),i=n(5999),c=n(6668);const s="anchorWithStickyNavbar_LWe7",u="anchorWithHideOnScrollNavbar_WYt5";var m=["as","id"];function d(e){var t=e.as,n=e.id,d=(0,a.Z)(e,m),p=(0,c.L)().navbar.hideOnScroll;return"h1"!==t&&n?o.createElement(t,(0,r.Z)({},d,{className:(0,l.Z)("anchor",p?u:s),id:n}),d.children,o.createElement("a",{className:"hash-link",href:"#"+n,title:(0,i.I)({id:"theme.common.headingLinkTitle",message:"Direct link to heading",description:"Title for link to heading"})},"\u200b")):o.createElement(t,(0,r.Z)({},d,{id:void 0}))}},9334:(e,t,n)=>{"use strict";n.d(t,{Z:()=>Ce});var r=n(7294),a=n(3905),o=n(7462),l=n(3366),i=n(5742),c=["mdxType","originalType"];var s=n(2389),u=n(6010),m=n(2949),d=n(6668);function p(){var e=(0,d.L)().prism,t=(0,m.I)().colorMode,n=e.theme,r=e.darkTheme||n;return"dark"===t?r:n}var f=n(5281),v=n(6528),h=n(7594),g=n.n(h),y=(0,v.Z)(/title=(["'])(.*?)\1/,{quote:1,title:2}),b=(0,v.Z)(/\{([\d,-]+)\}/,{range:1}),E={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}};function k(e,t){var n=e.map((function(e){var n=E[e],r=n.start,a=n.end;return"(?:"+r+"\\s*("+t.flatMap((function(e){var t,n;return[e.line,null==(t=e.block)?void 0:t.start,null==(n=e.block)?void 0:n.end].filter(Boolean)})).join("|")+")\\s*"+a+")"})).join("|");return new RegExp("^\\s*(?:"+n+")\\s*$")}function N(e,t){var n=e.replace(/\n$/,""),r=t.language,a=t.magicComments,o=t.metastring;if(o&&b.test(o)){var l=o.match(b).groups.range;if(0===a.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.");var i=a[0].className,c=g()(l).filter((function(e){return e>0})).map((function(e){return[e-1,[i]]}));return{lineClassNames:Object.fromEntries(c),code:n}}if(void 0===r)return{lineClassNames:{},code:n};for(var s=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return k(["js","jsBlock"],t);case"jsx":case"tsx":return k(["js","jsBlock","jsx"],t);case"html":return k(["js","jsBlock","html"],t);case"python":case"py":case"bash":return k(["bash"],t);case"markdown":case"md":return k(["html","jsx","bash"],t);default:return k(Object.keys(E),t)}}(r,a),u=n.split("\n"),m=Object.fromEntries(a.map((function(e){return[e.className,{start:0,range:""}]}))),d=Object.fromEntries(a.filter((function(e){return e.line})).map((function(e){var t=e.className;return[e.line,t]}))),p=Object.fromEntries(a.filter((function(e){return e.block})).map((function(e){var t=e.className;return[e.block.start,t]}))),f=Object.fromEntries(a.filter((function(e){return e.block})).map((function(e){var t=e.className;return[e.block.end,t]}))),v=0;v<u.length;){var h=u[v].match(s);if(h){var y=h.slice(1).find((function(e){return void 0!==e}));d[y]?m[d[y]].range+=v+",":p[y]?m[p[y]].start=v:f[y]&&(m[f[y]].range+=m[f[y]].start+"-"+(v-1)+","),u.splice(v,1)}else v+=1}n=u.join("\n");var N={};return Object.entries(m).forEach((function(e){var t=e[0],n=e[1].range;g()(n).forEach((function(e){null!=N[e]||(N[e]=[]),N[e].push(t)}))})),{lineClassNames:N,code:n}}const C="codeBlockContainer_Ckt0";var Z=["as"];function w(e){var t=e.as,n=(0,l.Z)(e,Z),a=function(e){var t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((function(e){var r=e[0],a=e[1],o=t[r];o&&"string"==typeof a&&(n[o]=a)})),n}(p());return r.createElement(t,(0,o.Z)({},n,{style:a,className:(0,u.Z)(n.className,C,f.k.common.codeBlock)}))}const T={codeBlockContent:"codeBlockContent_biex",codeBlockTitle:"codeBlockTitle_Ktv7",codeBlock:"codeBlock_bY9V",codeBlockStandalone:"codeBlockStandalone_MEMb",codeBlockLines:"codeBlockLines_e6Vv",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_o6Pm",buttonGroup:"buttonGroup__atx"};function B(e){var t=e.children,n=e.className;return r.createElement(w,{as:"pre",tabIndex:0,className:(0,u.Z)(T.codeBlockStandalone,"thin-scrollbar",n)},r.createElement("code",{className:T.codeBlockLines},t))}var j=n(9688),_={attributes:!0,characterData:!0,childList:!0,subtree:!0};function L(e,t){var n=(0,r.useState)(),a=n[0],o=n[1],l=(0,r.useCallback)((function(){var t;o(null==(t=e.current)?void 0:t.closest("[role=tabpanel][hidden]"))}),[e,o]);(0,r.useEffect)((function(){l()}),[l]),function(e,t,n){void 0===n&&(n=_);var a=(0,j.zX)(t),o=(0,j.Ql)(n);(0,r.useEffect)((function(){var t=new MutationObserver(a);return e&&t.observe(e,o),function(){return t.disconnect()}}),[e,a,o])}(a,(function(e){e.forEach((function(e){"attributes"===e.type&&"hidden"===e.attributeName&&(t(),l())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}const O={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 x={Prism:n(7410).Z,theme:O};function S(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}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)}var z=/\r\n|\r|\n/,A=function(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)},I=function(e,t){var n=e.length;return n>0&&e[n-1]===t?e:e.concat(t)},M=function(e,t){var n=e.plain,r=Object.create(null),a=e.styles.reduce((function(e,n){var r=n.languages,a=n.style;return r&&!r.includes(t)||n.types.forEach((function(t){var n=P({},e[t],a);e[t]=n})),e}),r);return a.root=n,a.plain=P({},n,{backgroundColor:null}),a};function D(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&-1===t.indexOf(r)&&(n[r]=e[r]);return n}const H=function(e){function t(){for(var t=this,n=[],r=arguments.length;r--;)n[r]=arguments[r];e.apply(this,n),S(this,"getThemeDict",(function(e){if(void 0!==t.themeDict&&e.theme===t.prevTheme&&e.language===t.prevLanguage)return t.themeDict;t.prevTheme=e.theme,t.prevLanguage=e.language;var n=e.theme?M(e.theme,e.language):void 0;return t.themeDict=n})),S(this,"getLineProps",(function(e){var n=e.key,r=e.className,a=e.style,o=P({},D(e,["key","className","style","line"]),{className:"token-line",style:void 0,key:void 0}),l=t.getThemeDict(t.props);return void 0!==l&&(o.style=l.plain),void 0!==a&&(o.style=void 0!==o.style?P({},o.style,a):a),void 0!==n&&(o.key=n),r&&(o.className+=" "+r),o})),S(this,"getStyleForToken",(function(e){var n=e.types,r=e.empty,a=n.length,o=t.getThemeDict(t.props);if(void 0!==o){if(1===a&&"plain"===n[0])return r?{display:"inline-block"}:void 0;if(1===a&&!r)return o[n[0]];var l=r?{display:"inline-block"}:{},i=n.map((function(e){return o[e]}));return Object.assign.apply(Object,[l].concat(i))}})),S(this,"getTokenProps",(function(e){var n=e.key,r=e.className,a=e.style,o=e.token,l=P({},D(e,["key","className","style","token"]),{className:"token "+o.types.join(" "),children:o.content,style:t.getStyleForToken(o),key:void 0});return void 0!==a&&(l.style=void 0!==l.style?P({},l.style,a):a),void 0!==n&&(l.key=n),r&&(l.className+=" "+r),l})),S(this,"tokenize",(function(e,t,n,r){var a={code:t,grammar:n,language:r,tokens:[]};e.hooks.run("before-tokenize",a);var o=a.tokens=e.tokenize(a.code,a.grammar,a.language);return e.hooks.run("after-tokenize",a),o}))}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.render=function(){var e=this.props,t=e.Prism,n=e.language,r=e.code,a=e.children,o=this.getThemeDict(this.props),l=t.languages[n];return a({tokens:function(e){for(var t=[[]],n=[e],r=[0],a=[e.length],o=0,l=0,i=[],c=[i];l>-1;){for(;(o=r[l]++)<a[l];){var s=void 0,u=t[l],m=n[l][o];if("string"==typeof m?(u=l>0?u:["plain"],s=m):(u=I(u,m.type),m.alias&&(u=I(u,m.alias)),s=m.content),"string"==typeof s){var d=s.split(z),p=d.length;i.push({types:u,content:d[0]});for(var f=1;f<p;f++)A(i),c.push(i=[]),i.push({types:u,content:d[f]})}else l++,t.push(u),n.push(s),r.push(0),a.push(s.length)}l--,t.pop(),n.pop(),r.pop(),a.pop()}return A(i),c}(void 0!==l?this.tokenize(t,r,l,n):[r]),className:"prism-code language-"+n,style:void 0!==o?o.root:{},getLineProps:this.getLineProps,getTokenProps:this.getTokenProps})},t}(r.Component),V="codeLine_lJS_",R="codeLineNumber_Tfdd",W="codeLineContent_feaV";function F(e){var t=e.line,n=e.classNames,a=e.showLineNumbers,l=e.getLineProps,i=e.getTokenProps;1===t.length&&"\n"===t[0].content&&(t[0].content="");var c=l({line:t,className:(0,u.Z)(n,a&&V)}),s=t.map((function(e,t){return r.createElement("span",(0,o.Z)({key:t},i({token:e,key:t})))}));return r.createElement("span",c,a?r.createElement(r.Fragment,null,r.createElement("span",{className:R}),r.createElement("span",{className:W},s)):s,r.createElement("br",null))}var q=n(5999);const G={copyButtonCopied:"copyButtonCopied_obH4",copyButtonIcons:"copyButtonIcons_eSgA",copyButtonIcon:"copyButtonIcon_y97N",copyButtonSuccessIcon:"copyButtonSuccessIcon_LjdS"};function U(e){var t=e.code,n=e.className,a=(0,r.useState)(!1),o=a[0],l=a[1],i=(0,r.useRef)(void 0),c=(0,r.useCallback)((function(){!function(e,t){var n=(void 0===t?{}:t).target,r=void 0===n?document.body:n,a=document.createElement("textarea"),o=document.activeElement;a.value=e,a.setAttribute("readonly",""),a.style.contain="strict",a.style.position="absolute",a.style.left="-9999px",a.style.fontSize="12pt";var l=document.getSelection(),i=!1;l.rangeCount>0&&(i=l.getRangeAt(0)),r.append(a),a.select(),a.selectionStart=0,a.selectionEnd=e.length;var c=!1;try{c=document.execCommand("copy")}catch(s){}a.remove(),i&&(l.removeAllRanges(),l.addRange(i)),o&&o.focus()}(t),l(!0),i.current=window.setTimeout((function(){l(!1)}),1e3)}),[t]);return(0,r.useEffect)((function(){return function(){return window.clearTimeout(i.current)}}),[]),r.createElement("button",{type:"button","aria-label":o?(0,q.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,q.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,q.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,u.Z)("clean-btn",n,G.copyButton,o&&G.copyButtonCopied),onClick:c},r.createElement("span",{className:G.copyButtonIcons,"aria-hidden":"true"},r.createElement("svg",{className:G.copyButtonIcon,viewBox:"0 0 24 24"},r.createElement("path",{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"})),r.createElement("svg",{className:G.copyButtonSuccessIcon,viewBox:"0 0 24 24"},r.createElement("path",{d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"}))))}const $="wordWrapButtonIcon_Bwma",Q="wordWrapButtonEnabled_EoeP";function X(e){var t=e.className,n=e.onClick,a=e.isEnabled,o=(0,q.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,u.Z)("clean-btn",t,a&&Q),"aria-label":o,title:o},r.createElement("svg",{className:$,viewBox:"0 0 24 24","aria-hidden":"true"},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"})))}function Y(e){var t,n,a,l,i,c,s,m,f,v,h,g=e.children,b=e.className,E=void 0===b?"":b,k=e.metastring,C=e.title,Z=e.showLineNumbers,B=e.language,j=(0,d.L)().prism,_=j.defaultLanguage,O=j.magicComments,S=null!=(t=null!=B?B:null==(n=E.split(" ").find((function(e){return e.startsWith("language-")})))?void 0:n.replace(/language-/,""))?t:_,P=p(),z=(a=(0,r.useState)(!1),l=a[0],i=a[1],c=(0,r.useState)(!1),s=c[0],m=c[1],f=(0,r.useRef)(null),v=(0,r.useCallback)((function(){var e=f.current.querySelector("code");l?e.removeAttribute("style"):(e.style.whiteSpace="pre-wrap",e.style.overflowWrap="anywhere"),i((function(e){return!e}))}),[f,l]),h=(0,r.useCallback)((function(){var e=f.current,t=e.scrollWidth>e.clientWidth||f.current.querySelector("code").hasAttribute("style");m(t)}),[f]),L(f,h),(0,r.useEffect)((function(){h()}),[l,h]),(0,r.useEffect)((function(){return window.addEventListener("resize",h,{passive:!0}),function(){window.removeEventListener("resize",h)}}),[h]),{codeBlockRef:f,isEnabled:l,isCodeScrollable:s,toggle:v}),A=function(e){var t,n;return null!=(t=null==e||null==(n=e.match(y))?void 0:n.groups.title)?t:""}(k)||C,I=N(g,{metastring:k,language:S,magicComments:O}),M=I.lineClassNames,D=I.code,V=null!=Z?Z:function(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}(k);return r.createElement(w,{as:"div",className:(0,u.Z)(E,S&&!E.includes("language-"+S)&&"language-"+S)},A&&r.createElement("div",{className:T.codeBlockTitle},A),r.createElement("div",{className:T.codeBlockContent},r.createElement(H,(0,o.Z)({},x,{theme:P,code:D,language:null!=S?S:"text"}),(function(e){var t=e.className,n=e.tokens,a=e.getLineProps,o=e.getTokenProps;return r.createElement("pre",{tabIndex:0,ref:z.codeBlockRef,className:(0,u.Z)(t,T.codeBlock,"thin-scrollbar")},r.createElement("code",{className:(0,u.Z)(T.codeBlockLines,V&&T.codeBlockLinesWithNumbering)},n.map((function(e,t){return r.createElement(F,{key:t,line:e,getLineProps:a,getTokenProps:o,classNames:M[t],showLineNumbers:V})}))))})),r.createElement("div",{className:T.buttonGroup},(z.isEnabled||z.isCodeScrollable)&&r.createElement(X,{className:T.codeButton,onClick:function(){return z.toggle()},isEnabled:z.isEnabled}),r.createElement(U,{className:T.codeButton,code:D}))))}var J=["children"];function K(e){var t=e.children,n=(0,l.Z)(e,J),a=(0,s.Z)(),i=function(e){return r.Children.toArray(e).some((function(e){return(0,r.isValidElement)(e)}))?e:Array.isArray(e)?e.join(""):e}(t),c="string"==typeof i?Y:B;return r.createElement(c,(0,o.Z)({key:String(a)},n),i)}var ee=n(9960);var te=n(6043);const ne="details_lb9f",re="isBrowser_bmU9",ae="collapsibleContent_i85q";var oe=["summary","children"];function le(e){return!!e&&("SUMMARY"===e.tagName||le(e.parentElement))}function ie(e,t){return!!e&&(e===t||ie(e.parentElement,t))}function ce(e){var t=e.summary,n=e.children,a=(0,l.Z)(e,oe),i=(0,s.Z)(),c=(0,r.useRef)(null),m=(0,te.u)({initialState:!a.open}),d=m.collapsed,p=m.setCollapsed,f=(0,r.useState)(a.open),v=f[0],h=f[1];return r.createElement("details",(0,o.Z)({},a,{ref:c,open:v,"data-collapsed":d,className:(0,u.Z)(ne,i&&re,a.className),onMouseDown:function(e){le(e.target)&&e.detail>1&&e.preventDefault()},onClick:function(e){e.stopPropagation();var t=e.target;le(t)&&ie(t,c.current)&&(e.preventDefault(),d?(p(!1),h(!0)):p(!0))}}),null!=t?t:r.createElement("summary",null,"Details"),r.createElement(te.z,{lazy:!1,collapsed:d,disableSSRStyle:!0,onCollapseTransitionEnd:function(e){p(e),h(!e)}},r.createElement("div",{className:ae},n)))}const se="details_b_Ee";function ue(e){var t=Object.assign({},(function(e){if(null==e)throw new TypeError("Cannot destructure "+e)}(e),e));return r.createElement(ce,(0,o.Z)({},t,{className:(0,u.Z)("alert alert--info",se,t.className)}))}var me=n(2503);function de(e){return r.createElement(me.Z,e)}const pe="containsTaskList_mC6p";const fe="img_ev3q";const ve="admonition_LlT9",he="admonitionHeading_tbUL",ge="admonitionIcon_kALy",ye="admonitionContent_S0QG";var be={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(q.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(q.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(q.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(q.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(q.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)"},"caution")}},Ee={secondary:"note",important:"info",success:"tip",warning:"danger"};function ke(e){var t,n=function(e){var t=r.Children.toArray(e),n=t.find((function(e){var t;return r.isValidElement(e)&&"mdxAdmonitionTitle"===(null==(t=e.props)?void 0:t.mdxType)})),a=r.createElement(r.Fragment,null,t.filter((function(e){return e!==n})));return{mdxAdmonitionTitle:n,rest:a}}(e.children),a=n.mdxAdmonitionTitle,o=n.rest;return Object.assign({},e,{title:null!=(t=e.title)?t:a,children:o})}const Ne={head:function(e){var t=r.Children.map(e.children,(function(e){return r.isValidElement(e)?function(e){var t;if(null!=(t=e.props)&&t.mdxType&&e.props.originalType){var n=e.props,a=(n.mdxType,n.originalType,(0,l.Z)(n,c));return r.createElement(e.props.originalType,a)}return e}(e):e}));return r.createElement(i.Z,e,t)},code:function(e){var t=["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(e.children).every((function(e){var n;return"string"==typeof e&&!e.includes("\n")||(0,r.isValidElement)(e)&&t.includes(null==(n=e.props)?void 0:n.mdxType)}))?r.createElement("code",e):r.createElement(K,e)},a:function(e){return r.createElement(ee.Z,e)},pre:function(e){var t;return r.createElement(K,(0,r.isValidElement)(e.children)&&"code"===(null==(t=e.children.props)?void 0:t.originalType)?e.children.props:Object.assign({},e))},details:function(e){var t=r.Children.toArray(e.children),n=t.find((function(e){var t;return r.isValidElement(e)&&"summary"===(null==(t=e.props)?void 0:t.mdxType)})),a=r.createElement(r.Fragment,null,t.filter((function(e){return e!==n})));return r.createElement(ue,(0,o.Z)({},e,{summary:n}),a)},ul:function(e){return r.createElement("ul",(0,o.Z)({},e,{className:(t=e.className,(0,u.Z)(t,(null==t?void 0:t.includes("contains-task-list"))&&pe))}));var t},img:function(e){return r.createElement("img",(0,o.Z)({loading:"lazy"},e,{className:(t=e.className,(0,u.Z)(t,fe))}));var t},h1:function(e){return r.createElement(de,(0,o.Z)({as:"h1"},e))},h2:function(e){return r.createElement(de,(0,o.Z)({as:"h2"},e))},h3:function(e){return r.createElement(de,(0,o.Z)({as:"h3"},e))},h4:function(e){return r.createElement(de,(0,o.Z)({as:"h4"},e))},h5:function(e){return r.createElement(de,(0,o.Z)({as:"h5"},e))},h6:function(e){return r.createElement(de,(0,o.Z)({as:"h6"},e))},admonition:function(e){var t=ke(e),n=t.children,a=t.type,o=t.title,l=t.icon,i=function(e){var t,n=null!=(t=Ee[e])?t:e,r=be[n];return r||(console.warn('No admonition config found for admonition type "'+n+'". Using Info as fallback.'),be.info)}(a),c=null!=o?o:i.label,s=i.iconComponent,m=null!=l?l:r.createElement(s,null);return r.createElement("div",{className:(0,u.Z)(f.k.common.admonition,f.k.common.admonitionType(e.type),"alert","alert--"+i.infimaClassName,ve)},r.createElement("div",{className:he},r.createElement("span",{className:ge},m),c),r.createElement("div",{className:ye},n))},mermaid:n(1875).Z};function Ce(e){var t=e.children;return r.createElement(a.Zo,{components:Ne},t)}},2244:(e,t,n)=>{"use strict";n.d(t,{Z:()=>l});var r=n(7294),a=n(6010),o=n(9960);function l(e){var t=e.permalink,n=e.title,l=e.subLabel,i=e.isNext;return r.createElement(o.Z,{className:(0,a.Z)("pagination-nav__link",i?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t},l&&r.createElement("div",{className:"pagination-nav__sublabel"},l),r.createElement("div",{className:"pagination-nav__label"},n))}},6233:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),a=n(6010),o=n(5999),l=n(9960);const i="tag_zVej",c="tagRegular_sFm0",s="tagWithCount_h2kH";function u(e){var t=e.permalink,n=e.label,o=e.count;return r.createElement(l.Z,{href:t,className:(0,a.Z)(i,o?s:c)},n,o&&r.createElement("span",null,o))}const m="tags_jXut",d="tag_QGVx";function p(e){var t=e.tags;return r.createElement(r.Fragment,null,r.createElement("b",null,r.createElement(o.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list"},"Tags:")),r.createElement("ul",{className:(0,a.Z)(m,"padding--none","margin-left--sm")},t.map((function(e){var t=e.label,n=e.permalink;return r.createElement("li",{key:n,className:d},r.createElement(u,{label:t,permalink:n}))}))))}},7594:(e,t)=>{function n(e){let t,n=[];for(let r of e.split(",").map((e=>e.trim())))if(/^-?\d+$/.test(r))n.push(parseInt(r,10));else if(t=r.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,r,a,o]=t;if(r&&o){r=parseInt(r),o=parseInt(o);const e=r<o?1:-1;"-"!==a&&".."!==a&&"\u2025"!==a||(o+=e);for(let t=r;t!==o;t+=e)n.push(t)}}return n}t.default=n,e.exports=n}}]);
\ No newline at end of file
diff --git a/assets/js/17896441.c1ba8144.js b/assets/js/17896441.c1ba8144.js
new file mode 100644
index 0000000..8f30371
--- /dev/null
+++ b/assets/js/17896441.c1ba8144.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7918],{9055:(e,t,a)=>{a.r(t),a.d(t,{default:()=>fe});var n=a(7294),r=a(1944),l=a(9688),i=n.createContext(null);function o(e){var t=e.children,a=function(e){return(0,n.useMemo)((function(){return{metadata:e.metadata,frontMatter:e.frontMatter,assets:e.assets,contentTitle:e.contentTitle,toc:e.toc}}),[e])}(e.content);return n.createElement(i.Provider,{value:a},t)}function s(){var e=(0,n.useContext)(i);if(null===e)throw new l.i6("DocProvider");return e}function c(){var e,t=s(),a=t.metadata,l=t.frontMatter,i=t.assets;return n.createElement(r.d,{title:a.title,description:a.description,keywords:l.keywords,image:null!=(e=i.image)?e:l.image})}var d=a(6010),m=a(7524),u=a(7462),v=a(5999),f=a(2244);function b(e){var t=e.previous,a=e.next;return n.createElement("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,v.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages navigation",description:"The ARIA label for the docs pagination"})},t&&n.createElement(f.Z,(0,u.Z)({},t,{subLabel:n.createElement(v.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc"},"Previous")})),a&&n.createElement(f.Z,(0,u.Z)({},a,{subLabel:n.createElement(v.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc"},"Next"),isNext:!0})))}function h(){var e=s().metadata;return n.createElement(b,{previous:e.previous,next:e.next})}var p=a(2263),E=a(9960),g=a(143),L=a(5281),N=a(373),k=a(4477);var Z={unreleased:function(e){var t=e.siteTitle,a=e.versionMetadata;return n.createElement(v.Z,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:t,versionLabel:n.createElement("b",null,a.label)}},"This is unreleased documentation for {siteTitle} {versionLabel} version.")},unmaintained:function(e){var t=e.siteTitle,a=e.versionMetadata;return n.createElement(v.Z,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:t,versionLabel:n.createElement("b",null,a.label)}},"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.")}};function C(e){var t=Z[e.versionMetadata.banner];return n.createElement(t,e)}function _(e){var t=e.versionLabel,a=e.to,r=e.onClick;return n.createElement(v.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:n.createElement("b",null,n.createElement(E.Z,{to:a,onClick:r},n.createElement(v.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 x(e){var t,a=e.className,r=e.versionMetadata,l=(0,p.Z)().siteConfig.title,i=(0,g.gA)({failfast:!0}).pluginId,o=(0,N.J)(i).savePreferredVersionName,s=(0,g.Jo)(i),c=s.latestDocSuggestion,m=s.latestVersionSuggestion,u=null!=c?c:(t=m).docs.find((function(e){return e.id===t.mainDocId}));return n.createElement("div",{className:(0,d.Z)(a,L.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert"},n.createElement("div",null,n.createElement(C,{siteTitle:l,versionMetadata:r})),n.createElement("div",{className:"margin-top--md"},n.createElement(_,{versionLabel:m.label,to:u.path,onClick:function(){return o(m.name)}})))}function H(e){var t=e.className,a=(0,k.E)();return a.banner?n.createElement(x,{className:t,versionMetadata:a}):null}function T(e){var t=e.className,a=(0,k.E)();return a.badge?n.createElement("span",{className:(0,d.Z)(t,L.k.docs.docVersionBadge,"badge badge--secondary")},n.createElement(v.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:a.label}},"Version: {versionLabel}")):null}function U(e){var t=e.lastUpdatedAt,a=e.formattedLastUpdatedAt;return n.createElement(v.Z,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:n.createElement("b",null,n.createElement("time",{dateTime:new Date(1e3*t).toISOString()},a))}}," on {date}")}function y(e){var t=e.lastUpdatedBy;return n.createElement(v.Z,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:n.createElement("b",null,t)}}," by {user}")}function A(e){var t=e.lastUpdatedAt,a=e.formattedLastUpdatedAt,r=e.lastUpdatedBy;return n.createElement("span",{className:L.k.common.lastUpdated},n.createElement(v.Z,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:t&&a?n.createElement(U,{lastUpdatedAt:t,formattedLastUpdatedAt:a}):"",byUser:r?n.createElement(y,{lastUpdatedBy:r}):""}},"Last updated{atDate}{byUser}"),!1)}var w=a(4881),M=a(6233);const I="lastUpdated_vwxv";function B(e){return n.createElement("div",{className:(0,d.Z)(L.k.docs.docFooterTagsRow,"row margin-bottom--sm")},n.createElement("div",{className:"col"},n.createElement(M.Z,e)))}function O(e){var t=e.editUrl,a=e.lastUpdatedAt,r=e.lastUpdatedBy,l=e.formattedLastUpdatedAt;return n.createElement("div",{className:(0,d.Z)(L.k.docs.docFooterEditMetaRow,"row")},n.createElement("div",{className:"col"},t&&n.createElement(w.Z,{editUrl:t})),n.createElement("div",{className:(0,d.Z)("col",I)},(a||r)&&n.createElement(A,{lastUpdatedAt:a,formattedLastUpdatedAt:l,lastUpdatedBy:r})))}function V(){var e=s().metadata,t=e.editUrl,a=e.lastUpdatedAt,r=e.formattedLastUpdatedAt,l=e.lastUpdatedBy,i=e.tags,o=i.length>0,c=!!(t||a||l);return o||c?n.createElement("footer",{className:(0,d.Z)(L.k.docs.docFooter,"docusaurus-mt-lg")},o&&n.createElement(B,{tags:i}),c&&n.createElement(O,{editUrl:t,lastUpdatedAt:a,lastUpdatedBy:l,formattedLastUpdatedAt:r})):null}var S=a(6043),P=a(3743),D=a(3366);const R="tocCollapsibleButton_TO0P",j="tocCollapsibleButtonExpanded_MG3E";var z=["collapsed"];function F(e){var t=e.collapsed,a=(0,D.Z)(e,z);return n.createElement("button",(0,u.Z)({type:"button"},a,{className:(0,d.Z)("clean-btn",R,!t&&j,a.className)}),n.createElement(v.Z,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component"},"On this page"))}const q="tocCollapsible_ETCw",G="tocCollapsibleContent_vkbj",J="tocCollapsibleExpanded_sAul";function K(e){var t=e.toc,a=e.className,r=e.minHeadingLevel,l=e.maxHeadingLevel,i=(0,S.u)({initialState:!0}),o=i.collapsed,s=i.toggleCollapsed;return n.createElement("div",{className:(0,d.Z)(q,!o&&J,a)},n.createElement(F,{collapsed:o,onClick:s}),n.createElement(S.z,{lazy:!0,className:G,collapsed:o},n.createElement(P.Z,{toc:t,minHeadingLevel:r,maxHeadingLevel:l})))}const Q="tocMobile_ITEo";function W(){var e=s(),t=e.toc,a=e.frontMatter;return n.createElement(K,{toc:t,minHeadingLevel:a.toc_min_heading_level,maxHeadingLevel:a.toc_max_heading_level,className:(0,d.Z)(L.k.docs.docTocMobile,Q)})}var X=a(9407);function Y(){var e=s(),t=e.toc,a=e.frontMatter;return n.createElement(X.Z,{toc:t,minHeadingLevel:a.toc_min_heading_level,maxHeadingLevel:a.toc_max_heading_level,className:L.k.docs.docTocDesktop})}var $=a(2503),ee=a(9334);function te(e){var t,a,r,l,i=e.children,o=(t=s(),a=t.metadata,r=t.frontMatter,l=t.contentTitle,r.hide_title||void 0!==l?null:a.title);return n.createElement("div",{className:(0,d.Z)(L.k.docs.docMarkdown,"markdown")},o&&n.createElement("header",null,n.createElement($.Z,{as:"h1"},o)),n.createElement(ee.Z,null,i))}var ae=a(8425),ne=a(8596),re=a(4996);function le(e){return n.createElement("svg",(0,u.Z)({viewBox:"0 0 24 24"},e),n.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 ie={breadcrumbsContainer:"breadcrumbsContainer_Z_bl",breadcrumbHomeIcon:"breadcrumbHomeIcon_OVgt"};function oe(e){var t=e.children,a=e.href,r="breadcrumbs__link";return e.isLast?n.createElement("span",{className:r,itemProp:"name"},t):a?n.createElement(E.Z,{className:r,href:a,itemProp:"item"},n.createElement("span",{itemProp:"name"},t)):n.createElement("span",{className:r},t)}function se(e){var t=e.children,a=e.active,r=e.index,l=e.addMicrodata;return n.createElement("li",(0,u.Z)({},l&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},{className:(0,d.Z)("breadcrumbs__item",{"breadcrumbs__item--active":a})}),t,n.createElement("meta",{itemProp:"position",content:String(r+1)}))}function ce(){var e=(0,re.Z)("/");return n.createElement("li",{className:"breadcrumbs__item"},n.createElement(E.Z,{"aria-label":(0,v.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:(0,d.Z)("breadcrumbs__link",ie.breadcrumbsItemLink),href:e},n.createElement(le,{className:ie.breadcrumbHomeIcon})))}function de(){var e=(0,ae.s1)(),t=(0,ne.Ns)();return e?n.createElement("nav",{className:(0,d.Z)(L.k.docs.docBreadcrumbs,ie.breadcrumbsContainer),"aria-label":(0,v.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"})},n.createElement("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList"},t&&n.createElement(ce,null),e.map((function(t,a){var r=a===e.length-1;return n.createElement(se,{key:a,active:r,index:a,addMicrodata:!!t.href},n.createElement(oe,{href:t.href,isLast:r},t.label))})))):null}const me="docItemContainer_Djhp",ue="docItemCol_VOVn";function ve(e){var t,a,r,l,i,o,c=e.children,u=(t=s(),a=t.frontMatter,r=t.toc,l=(0,m.i)(),i=a.hide_table_of_contents,o=!i&&r.length>0,{hidden:i,mobile:o?n.createElement(W,null):void 0,desktop:!o||"desktop"!==l&&"ssr"!==l?void 0:n.createElement(Y,null)});return n.createElement("div",{className:"row"},n.createElement("div",{className:(0,d.Z)("col",!u.hidden&&ue)},n.createElement(H,null),n.createElement("div",{className:me},n.createElement("article",null,n.createElement(de,null),n.createElement(T,null),u.mobile,n.createElement(te,null,c),n.createElement(V,null)),n.createElement(h,null))),u.desktop&&n.createElement("div",{className:"col col--3"},u.desktop))}function fe(e){var t="docs-doc-id-"+e.content.metadata.unversionedId,a=e.content;return n.createElement(o,{content:e.content},n.createElement(r.FG,{className:t},n.createElement(c,null),n.createElement(ve,null,n.createElement(a,null))))}},9407:(e,t,a)=>{a.d(t,{Z:()=>d});var n=a(7462),r=a(3366),l=a(7294),i=a(6010),o=a(3743);const s="tableOfContents_bqdL";var c=["className"];function d(e){var t=e.className,a=(0,r.Z)(e,c);return l.createElement("div",{className:(0,i.Z)(s,"thin-scrollbar",t)},l.createElement(o.Z,(0,n.Z)({},a,{linkClassName:"table-of-contents__link toc-highlight",linkActiveClassName:"table-of-contents__link--active"})))}},3743:(e,t,a)=>{a.d(t,{Z:()=>p});var n=a(7462),r=a(3366),l=a(7294),i=a(6668),o=["parentIndex"];function s(e){var t=e.map((function(e){return Object.assign({},e,{parentIndex:-1,children:[]})})),a=Array(7).fill(-1);t.forEach((function(e,t){var n=a.slice(2,e.level);e.parentIndex=Math.max.apply(Math,n),a[e.level]=t}));var n=[];return t.forEach((function(e){var a=e.parentIndex,l=(0,r.Z)(e,o);a>=0?t[a].children.push(l):n.push(l)})),n}function c(e){var t=e.toc,a=e.minHeadingLevel,n=e.maxHeadingLevel;return t.flatMap((function(e){var t=c({toc:e.children,minHeadingLevel:a,maxHeadingLevel:n});return function(e){return e.level>=a&&e.level<=n}(e)?[Object.assign({},e,{children:t})]:t}))}function d(e){var t=e.getBoundingClientRect();return t.top===t.bottom?d(e.parentNode):t}function m(e,t){var a,n,r=t.anchorTopOffset,l=e.find((function(e){return d(e).top>=r}));return l?function(e){return e.top>0&&e.bottom<window.innerHeight/2}(d(l))?l:null!=(n=e[e.indexOf(l)-1])?n:null:null!=(a=e[e.length-1])?a:null}function u(){var e=(0,l.useRef)(0),t=(0,i.L)().navbar.hideOnScroll;return(0,l.useEffect)((function(){e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function v(e){var t=(0,l.useRef)(void 0),a=u();(0,l.useEffect)((function(){if(!e)return function(){};var n=e.linkClassName,r=e.linkActiveClassName,l=e.minHeadingLevel,i=e.maxHeadingLevel;function o(){var e=function(e){return Array.from(document.getElementsByClassName(e))}(n),o=function(e){for(var t=e.minHeadingLevel,a=e.maxHeadingLevel,n=[],r=t;r<=a;r+=1)n.push("h"+r+".anchor");return Array.from(document.querySelectorAll(n.join()))}({minHeadingLevel:l,maxHeadingLevel:i}),s=m(o,{anchorTopOffset:a.current}),c=e.find((function(e){return s&&s.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)}));e.forEach((function(e){!function(e,a){a?(t.current&&t.current!==e&&t.current.classList.remove(r),e.classList.add(r),t.current=e):e.classList.remove(r)}(e,e===c)}))}return document.addEventListener("scroll",o),document.addEventListener("resize",o),o(),function(){document.removeEventListener("scroll",o),document.removeEventListener("resize",o)}}),[e,a])}function f(e){var t=e.toc,a=e.className,n=e.linkClassName,r=e.isChild;return t.length?l.createElement("ul",{className:r?void 0:a},t.map((function(e){return l.createElement("li",{key:e.id},l.createElement("a",{href:"#"+e.id,className:null!=n?n:void 0,dangerouslySetInnerHTML:{__html:e.value}}),l.createElement(f,{isChild:!0,toc:e.children,className:a,linkClassName:n}))}))):null}const b=l.memo(f);var h=["toc","className","linkClassName","linkActiveClassName","minHeadingLevel","maxHeadingLevel"];function p(e){var t=e.toc,a=e.className,o=void 0===a?"table-of-contents table-of-contents__left-border":a,d=e.linkClassName,m=void 0===d?"table-of-contents__link":d,u=e.linkActiveClassName,f=void 0===u?void 0:u,p=e.minHeadingLevel,E=e.maxHeadingLevel,g=(0,r.Z)(e,h),L=(0,i.L)(),N=null!=p?p:L.tableOfContents.minHeadingLevel,k=null!=E?E:L.tableOfContents.maxHeadingLevel,Z=function(e){var t=e.toc,a=e.minHeadingLevel,n=e.maxHeadingLevel;return(0,l.useMemo)((function(){return c({toc:s(t),minHeadingLevel:a,maxHeadingLevel:n})}),[t,a,n])}({toc:t,minHeadingLevel:N,maxHeadingLevel:k});return v((0,l.useMemo)((function(){if(m&&f)return{linkClassName:m,linkActiveClassName:f,minHeadingLevel:N,maxHeadingLevel:k}}),[m,f,N,k])),l.createElement(b,(0,n.Z)({toc:Z,className:o,linkClassName:m},g))}},4477:(e,t,a)=>{a.d(t,{E:()=>o,q:()=>i});var n=a(7294),r=a(9688),l=n.createContext(null);function i(e){var t=e.children,a=e.version;return n.createElement(l.Provider,{value:a},t)}function o(){var e=(0,n.useContext)(l);if(null===e)throw new r.i6("DocsVersionProvider");return e}}}]);
\ No newline at end of file
diff --git a/assets/js/1be78505.1ada61e8.js b/assets/js/1be78505.1ada61e8.js
new file mode 100644
index 0000000..babe3eb
--- /dev/null
+++ b/assets/js/1be78505.1ada61e8.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9514,4972],{9963:(e,t,n)=>{n.r(t),n.d(t,{default:()=>ye});var a=n(7294),r=n(6010),l=n(1944),o=n(5281),i=n(3320),c=n(8425),s=n(4477),d=n(1116),m=n(3285),u=n(5999),b=n(2466),p=n(5936);const v="backToTopButton_sjWU",h="backToTopButtonShow_xfvO";function E(){var e=function(e){var t=e.threshold,n=(0,a.useState)(!1),r=n[0],l=n[1],o=(0,a.useRef)(!1),i=(0,b.Ct)(),c=i.startScroll,s=i.cancelScroll;return(0,b.RF)((function(e,n){var a=e.scrollY,r=null==n?void 0:n.scrollY;r&&(o.current?o.current=!1:a>=r?(s(),l(!1)):a<t?l(!1):a+window.innerHeight<document.documentElement.scrollHeight&&l(!0))})),(0,p.S)((function(e){e.location.hash&&(o.current=!0,l(!1))})),{shown:r,scrollToTop:function(){return c(0)}}}({threshold:300}),t=e.shown,n=e.scrollToTop;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,r.Z)("clean-btn",o.k.common.backToTopButton,v,t&&h),type:"button",onClick:n})}var f=n(6550),g=n(7524),k=n(6668),_=n(1327),C=n(7462);function I(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 N="collapseSidebarButton_PEFL",S="collapseSidebarButtonIcon_kv0_";function Z(e){var t=e.onClick;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,r.Z)("button button--secondary button--outline",N),onClick:t},a.createElement(I,{className:S}))}var x=n(9689),y=n(3366),T=n(9688),w=Symbol("EmptyContext"),L=a.createContext(w);function M(e){var t=e.children,n=(0,a.useState)(null),r=n[0],l=n[1],o=(0,a.useMemo)((function(){return{expandedItem:r,setExpandedItem:l}}),[r]);return a.createElement(L.Provider,{value:o},t)}var A=n(6043),B=n(8596),F=n(9960),P=n(2389),H=["item","onItemClick","activePath","level","index"];function W(e){var t=e.categoryLabel,n=e.onClick;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 D(e){var t=e.item,n=e.onItemClick,l=e.activePath,i=e.level,s=e.index,d=(0,y.Z)(e,H),m=t.items,u=t.label,b=t.collapsible,p=t.className,v=t.href,h=(0,k.L)().docs.sidebar.autoCollapseCategories,E=function(e){var t=(0,P.Z)();return(0,a.useMemo)((function(){return e.href?e.href:!t&&e.collapsible?(0,c.Wl)(e):void 0}),[e,t])}(t),f=(0,c._F)(t,l),g=(0,B.Mg)(v,l),_=(0,A.u)({initialState:function(){return!!b&&(!f&&t.collapsed)}}),I=_.collapsed,N=_.setCollapsed,S=function(){var e=(0,a.useContext)(L);if(e===w)throw new T.i6("DocSidebarItemsExpandedStateProvider");return e}(),Z=S.expandedItem,x=S.setExpandedItem,M=function(e){void 0===e&&(e=!I),x(e?null:s),N(e)};return function(e){var t=e.isActive,n=e.collapsed,r=e.updateCollapsed,l=(0,T.D9)(t);(0,a.useEffect)((function(){t&&!l&&n&&r(!1)}),[t,l,n,r])}({isActive:f,collapsed:I,updateCollapsed:M}),(0,a.useEffect)((function(){b&&null!=Z&&Z!==s&&h&&N(!0)}),[b,Z,s,N,h]),a.createElement("li",{className:(0,r.Z)(o.k.docs.docSidebarItemCategory,o.k.docs.docSidebarItemCategoryLevel(i),"menu__list-item",{"menu__list-item--collapsed":I},p)},a.createElement("div",{className:(0,r.Z)("menu__list-item-collapsible",{"menu__list-item-collapsible--active":g})},a.createElement(F.Z,(0,C.Z)({className:(0,r.Z)("menu__link",{"menu__link--sublist":b,"menu__link--sublist-caret":!v&&b,"menu__link--active":f}),onClick:b?function(e){null==n||n(t),v?M(!1):(e.preventDefault(),M())}:function(){null==n||n(t)},"aria-current":g?"page":void 0,"aria-expanded":b?!I:void 0,href:b?null!=E?E:"#":E},d),u),v&&b&&a.createElement(W,{categoryLabel:u,onClick:function(e){e.preventDefault(),M()}})),a.createElement(A.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:I},a.createElement(J,{items:m,tabIndex:I?-1:0,onItemClick:n,activePath:l,level:i+1})))}var R=n(3919),z=n(9471);const U="menuExternalLink_NmtK";var V=["item","onItemClick","activePath","level","index"];function K(e){var t=e.item,n=e.onItemClick,l=e.activePath,i=e.level,s=(e.index,(0,y.Z)(e,V)),d=t.href,m=t.label,u=t.className,b=t.autoAddBaseUrl,p=(0,c._F)(t,l),v=(0,R.Z)(d);return a.createElement("li",{className:(0,r.Z)(o.k.docs.docSidebarItemLink,o.k.docs.docSidebarItemLinkLevel(i),"menu__list-item",u),key:m},a.createElement(F.Z,(0,C.Z)({className:(0,r.Z)("menu__link",!v&&U,{"menu__link--active":p}),autoAddBaseUrl:b,"aria-current":p?"page":void 0,to:d},v&&{onClick:n?function(){return n(t)}:void 0},s),m,!v&&a.createElement(z.Z,null)))}const j="menuHtmlItem_M9Kj";function q(e){var t=e.item,n=e.level,l=e.index,i=t.value,c=t.defaultStyle,s=t.className;return a.createElement("li",{className:(0,r.Z)(o.k.docs.docSidebarItemLink,o.k.docs.docSidebarItemLinkLevel(n),c&&[j,"menu__list-item"],s),key:l,dangerouslySetInnerHTML:{__html:i}})}var G=["item"];function Y(e){var t=e.item,n=(0,y.Z)(e,G);switch(t.type){case"category":return a.createElement(D,(0,C.Z)({item:t},n));case"html":return a.createElement(q,(0,C.Z)({item:t},n));default:return a.createElement(K,(0,C.Z)({item:t},n))}}var O=["items"];function X(e){var t=e.items,n=(0,y.Z)(e,O);return a.createElement(M,null,t.map((function(e,t){return a.createElement(Y,(0,C.Z)({key:t,item:e,index:t},n))})))}const J=(0,a.memo)(X),Q="menu_SIkG",$="menuWithAnnouncementBar_GW3s";function ee(e){var t=e.path,n=e.sidebar,l=e.className,i=function(){var e=(0,x.nT)().isActive,t=(0,a.useState)(e),n=t[0],r=t[1];return(0,b.RF)((function(t){var n=t.scrollY;e&&r(0===n)}),[e]),e&&n}();return a.createElement("nav",{className:(0,r.Z)("menu thin-scrollbar",Q,i&&$,l)},a.createElement("ul",{className:(0,r.Z)(o.k.docs.docSidebarMenu,"menu__list")},a.createElement(J,{items:n,activePath:t,level:1})))}const te="sidebar_njMd",ne="sidebarWithHideableNavbar_wUlq",ae="sidebarHidden_VK0M",re="sidebarLogo_isFc";function le(e){var t=e.path,n=e.sidebar,l=e.onCollapse,o=e.isHidden,i=(0,k.L)(),c=i.navbar.hideOnScroll,s=i.docs.sidebar.hideable;return a.createElement("div",{className:(0,r.Z)(te,c&&ne,o&&ae)},c&&a.createElement(_.Z,{tabIndex:-1,className:re}),a.createElement(ee,{path:t,sidebar:n}),s&&a.createElement(Z,{onClick:l}))}const oe=a.memo(le);var ie=n(3102),ce=n(2961),se=function(e){var t=e.sidebar,n=e.path,l=(0,ce.e)();return a.createElement("ul",{className:(0,r.Z)(o.k.docs.docSidebarMenu,"menu__list")},a.createElement(J,{items:t,activePath:n,onItemClick:function(e){"category"===e.type&&e.href&&l.toggle(),"link"===e.type&&l.toggle()},level:1}))};function de(e){return a.createElement(ie.Zo,{component:se,props:e})}const me=a.memo(de);function ue(e){var t=(0,g.i)(),n="desktop"===t||"ssr"===t,r="mobile"===t;return a.createElement(a.Fragment,null,n&&a.createElement(oe,e),r&&a.createElement(me,e))}const be="expandButton_m80_",pe="expandButtonIcon_BlDH";function ve(e){var t=e.toggleSidebar;return a.createElement("div",{className:be,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(I,{className:pe}))}const he="docSidebarContainer_b6E3",Ee="docSidebarContainerHidden_b3ry";function fe(e){var t,n=e.children,r=(0,d.V)();return a.createElement(a.Fragment,{key:null!=(t=null==r?void 0:r.name)?t:"noSidebar"},n)}function ge(e){var t=e.sidebar,n=e.hiddenSidebarContainer,l=e.setHiddenSidebarContainer,i=(0,f.TH)().pathname,c=(0,a.useState)(!1),s=c[0],d=c[1],m=(0,a.useCallback)((function(){s&&d(!1),l((function(e){return!e}))}),[l,s]);return a.createElement("aside",{className:(0,r.Z)(o.k.docs.docSidebarContainer,he,n&&Ee),onTransitionEnd:function(e){e.currentTarget.classList.contains(he)&&n&&d(!0)}},a.createElement(fe,null,a.createElement(ue,{sidebar:t,path:i,onCollapse:m,isHidden:s})),s&&a.createElement(ve,{toggleSidebar:m}))}const ke={docMainContainer:"docMainContainer_gTbr",docMainContainerEnhanced:"docMainContainerEnhanced_Uz_u",docItemWrapperEnhanced:"docItemWrapperEnhanced_czyv"};function _e(e){var t=e.hiddenSidebarContainer,n=e.children,l=(0,d.V)();return a.createElement("main",{className:(0,r.Z)(ke.docMainContainer,(t||!l)&&ke.docMainContainerEnhanced)},a.createElement("div",{className:(0,r.Z)("container padding-top--md padding-bottom--lg",ke.docItemWrapper,t&&ke.docItemWrapperEnhanced)},n))}const Ce="docPage__5DB",Ie="docsWrapper_BCFX";function Ne(e){var t=e.children,n=(0,d.V)(),r=(0,a.useState)(!1),l=r[0],o=r[1];return a.createElement(m.Z,{wrapperClassName:Ie},a.createElement(E,null),a.createElement("div",{className:Ce},n&&a.createElement(ge,{sidebar:n.items,hiddenSidebarContainer:l,setHiddenSidebarContainer:o}),a.createElement(_e,{hiddenSidebarContainer:l},t)))}var Se=n(4972),Ze=n(197);function xe(e){var t=e.versionMetadata;return a.createElement(a.Fragment,null,a.createElement(Ze.Z,{version:t.version,tag:(0,i.os)(t.pluginId,t.version)}),a.createElement(l.d,null,t.noIndex&&a.createElement("meta",{name:"robots",content:"noindex, nofollow"})))}function ye(e){var t=e.versionMetadata,n=(0,c.hI)(e);if(!n)return a.createElement(Se.default,null);var i=n.docElement,m=n.sidebarName,u=n.sidebarItems;return a.createElement(a.Fragment,null,a.createElement(xe,e),a.createElement(l.FG,{className:(0,r.Z)(o.k.wrapper.docsPages,o.k.page.docsDocPage,e.versionMetadata.className)},a.createElement(s.q,{version:t},a.createElement(d.b,{name:m,items:u},a.createElement(Ne,null,i)))))}},4972:(e,t,n)=>{n.r(t),n.d(t,{default:()=>i});var a=n(7294),r=n(5999),l=n(1944),o=n(3285);function i(){return a.createElement(a.Fragment,null,a.createElement(l.d,{title:(0,r.I)({id:"theme.NotFound.title",message:"Page Not Found"})}),a.createElement(o.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(r.Z,{id:"theme.NotFound.title",description:"The title of the 404 page"},"Page Not Found")),a.createElement("p",null,a.createElement(r.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(r.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.")))))))}},4477:(e,t,n)=>{n.d(t,{E:()=>i,q:()=>o});var a=n(7294),r=n(9688),l=a.createContext(null);function o(e){var t=e.children,n=e.version;return a.createElement(l.Provider,{value:n},t)}function i(){var e=(0,a.useContext)(l);if(null===e)throw new r.i6("DocsVersionProvider");return e}}}]);
\ No newline at end of file
diff --git a/assets/js/1f3f8b8d.b5a0f515.js b/assets/js/1f3f8b8d.b5a0f515.js
new file mode 100644
index 0000000..cf48fb3
--- /dev/null
+++ b/assets/js/1f3f8b8d.b5a0f515.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3590],{3905:(t,e,a)=>{a.d(e,{Zo:()=>o,kt:()=>N});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 p(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 i(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 k=n.createContext({}),m=function(t){var e=n.useContext(k),a=e;return t&&(a="function"==typeof t?t(e):p(p({},e),t)),a},o=function(t){var e=m(t.components);return n.createElement(k.Provider,{value:e},t.children)},u="mdxType",d={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},s=n.forwardRef((function(t,e){var a=t.components,l=t.mdxType,r=t.originalType,k=t.parentName,o=i(t,["components","mdxType","originalType","parentName"]),u=m(a),s=l,N=u["".concat(k,".").concat(s)]||u[s]||d[s]||r;return a?n.createElement(N,p(p({ref:e},o),{},{components:a})):n.createElement(N,p({ref:e},o))}));function N(t,e){var a=arguments,l=e&&e.mdxType;if("string"==typeof t||l){var r=a.length,p=new Array(r);p[0]=s;var i={};for(var k in e)hasOwnProperty.call(e,k)&&(i[k]=e[k]);i.originalType=t,i[u]="string"==typeof t?t:l,p[1]=i;for(var m=2;m<r;m++)p[m]=a[m];return n.createElement.apply(null,p)}return n.createElement.apply(null,a)}s.displayName="MDXCreateElement"},6640:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>o,contentTitle:()=>k,default:()=>s,frontMatter:()=>i,metadata:()=>m,toc:()=>u});var n=a(7462),l=a(3366),r=(a(7294),a(3905)),p=["components"],i={id:"fp4",title:"FP4",sidebar_label:"FP4"},k=void 0,m={unversionedId:"cryptojs/fp4",id:"cryptojs/fp4",title:"FP4",description:"FP4",source:"@site/../docs/cryptojs/fp4.md",sourceDirName:"cryptojs",slug:"/cryptojs/fp4",permalink:"/docs/cryptojs/fp4",draft:!1,tags:[],version:"current",frontMatter:{id:"fp4",title:"FP4",sidebar_label:"FP4"},sidebar:"docs",previous:{title:"FP2",permalink:"/docs/cryptojs/fp2"},next:{title:"FP8",permalink:"/docs/cryptojs/fp8"}},o={},u=[{value:"FP4",id:"fp4",level:2},{value:"new FP4()",id:"new-fp4",level:3},{value:"fP4.reduce()",id:"fp4reduce",level:3},{value:"fP4.norm()",id:"fp4norm",level:3},{value:"fP4.iszilch()",id:"fp4iszilch",level:3},{value:"fP4.isunity()",id:"fp4isunity",level:3},{value:"fP4.cmove(g, d)",id:"fp4cmoveg-d",level:3},{value:"fP4.isreal()",id:"fp4isreal",level:3},{value:"fP4.real()",id:"fp4real",level:3},{value:"fP4.geta()",id:"fp4geta",level:3},{value:"fP4.getb()",id:"fp4getb",level:3},{value:"fP4.equals(x)",id:"fp4equalsx",level:3},{value:"fP4.copy(x)",id:"fp4copyx",level:3},{value:"fP4.zero()",id:"fp4zero",level:3},{value:"fP4.one(x)",id:"fp4onex",level:3},{value:"fP4.set(c, d)",id:"fp4setc-d",level:3},{value:"fP4.seta(c)",id:"fp4setac",level:3},{value:"fP4.neg()",id:"fp4neg",level:3},{value:"fP4.conj()",id:"fp4conj",level:3},{value:"fP4.nconj()",id:"fp4nconj",level:3},{value:"fP4.add(x)",id:"fp4addx",level:3},{value:"fP4.sub(x)",id:"fp4subx",level:3},{value:"fP4.pmul(s)",id:"fp4pmuls",level:3},{value:"fP4.imul(s)",id:"fp4imuls",level:3},{value:"fP4.sqr()",id:"fp4sqr",level:3},{value:"fP4.mul(y)",id:"fp4muly",level:3},{value:"fP4.toString()",id:"fp4tostring",level:3},{value:"fP4.inverse()",id:"fp4inverse",level:3},{value:"fP4.times_i()",id:"fp4times_i",level:3},{value:"fP4.frob(f)",id:"fp4frobf",level:3},{value:"fP4.pow(e)",id:"fp4powe",level:3},{value:"fP4.xtr_A(w, y, z)",id:"fp4xtr_aw-y-z",level:3},{value:"fP4.xtr_D()",id:"fp4xtr_d",level:3},{value:"fP4.xtr_pow(n)",id:"fp4xtr_pown",level:3},{value:"fP4.xtr_pow2()",id:"fp4xtr_pow2",level:3},{value:"fP4.div2()",id:"fp4div2",level:3},{value:"fP4.div_i()",id:"fp4div_i",level:3},{value:"fP4.div_2i()",id:"fp4div_2i",level:3},{value:"fP4.qmul(s)",id:"fp4qmuls",level:3},{value:"fP4.sqrt()",id:"fp4sqrt",level:3}],d={toc:u};function s(t){var e=t.components,a=(0,l.Z)(t,p);return(0,r.kt)("wrapper",(0,n.Z)({},d,a,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("a",{name:"FP4"}),(0,r.kt)("h2",{id:"fp4"},"FP4"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": global class",(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP4{"}"}'),"  "),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP4"},"FP4"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#new_FP4_new"},"new FP4()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP4+reduce"},".reduce()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP4+norm"},".norm()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP4+iszilch"},".iszilch()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP4+isunity"},".isunity()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP4+cmove"},".cmove(g, d)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP4+isreal"},".isreal()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP4+real"},".real()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP4+geta"},".geta()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP4+getb"},".getb()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP4+equals"},".equals(x)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP4+copy"},".copy(x)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP4+zero"},".zero()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP4+one"},".one(x)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP4+set"},".set(c, d)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP4+seta"},".seta(c)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP4+neg"},".neg()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP4+conj"},".conj()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP4+nconj"},".nconj()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP4+add"},".add(x)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP4+sub"},".sub(x)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP4+pmul"},".pmul(s)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP4+imul"},".imul(s)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP4+sqr"},".sqr()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP4+mul"},".mul(y)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP4+toString"},".toString()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP4+inverse"},".inverse()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP4+times_i"},".times_i()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP4+frob"},".frob(f)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP4+pow"},".pow(e)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP4+xtr_A"},".xtr_A(w, y, z)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP4+xtr_D"},".xtr_D()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP4+xtr_pow"},".xtr_pow(n)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP4+xtr_pow2"},".xtr_pow2()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP4+div2"},".div2()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP4+div_i"},".div_i()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP4+div_2i"},".div_2i()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP4+qmul"},".qmul(s)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP4+sqrt"},".sqrt()"))))),(0,r.kt)("a",{name:"new_FP4_new"}),(0,r.kt)("h3",{id:"new-fp4"},"new FP4()"),(0,r.kt)("p",null,"Creates an instance of FP4"),(0,r.kt)("a",{name:"FP4+reduce"}),(0,r.kt)("h3",{id:"fp4reduce"},"fP4.reduce()"),(0,r.kt)("p",null,"Reduces all components of possibly unreduced FP4 mod Modulus"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP4"},(0,r.kt)("code",null,"FP4")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP4{"}"}'),"  "),(0,r.kt)("a",{name:"FP4+norm"}),(0,r.kt)("h3",{id:"fp4norm"},"fP4.norm()"),(0,r.kt)("p",null,"Normalises the components of an FP4"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP4"},(0,r.kt)("code",null,"FP4")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP4{"}"}'),"  "),(0,r.kt)("a",{name:"FP4+iszilch"}),(0,r.kt)("h3",{id:"fp4iszilch"},"fP4.iszilch()"),(0,r.kt)("p",null,"Tests for FP4 equal to zero"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP4"},(0,r.kt)("code",null,"FP4")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP4{"}"}'),"  "),(0,r.kt)("a",{name:"FP4+isunity"}),(0,r.kt)("h3",{id:"fp4isunity"},"fP4.isunity()"),(0,r.kt)("p",null,"Tests for FP4 equal to unity"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP4"},(0,r.kt)("code",null,"FP4")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP4{"}"}'),"  "),(0,r.kt)("a",{name:"FP4+cmove"}),(0,r.kt)("h3",{id:"fp4cmoveg-d"},"fP4.cmove(g, d)"),(0,r.kt)("p",null,"Conditional copy of FP4 number"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP4"},(0,r.kt)("code",null,"FP4")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP4{"}"}'),"  "),(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},"Param"),(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},"g"),(0,r.kt)("td",{parentName:"tr",align:null},"FP4 instance")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"d"),(0,r.kt)("td",{parentName:"tr",align:null},"copy depends on this value")))),(0,r.kt)("a",{name:"FP4+isreal"}),(0,r.kt)("h3",{id:"fp4isreal"},"fP4.isreal()"),(0,r.kt)("p",null,"test is w real? That is in a+ib test b is zero"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP4"},(0,r.kt)("code",null,"FP4")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP4{"}"}'),"  "),(0,r.kt)("a",{name:"FP4+real"}),(0,r.kt)("h3",{id:"fp4real"},"fP4.real()"),(0,r.kt)("p",null,"extract real part a"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP4"},(0,r.kt)("code",null,"FP4")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP4{"}"}'),"  "),(0,r.kt)("a",{name:"FP4+geta"}),(0,r.kt)("h3",{id:"fp4geta"},"fP4.geta()"),(0,r.kt)("p",null,"extract a from this"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP4"},(0,r.kt)("code",null,"FP4")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP4{"}"}'),"  "),(0,r.kt)("a",{name:"FP4+getb"}),(0,r.kt)("h3",{id:"fp4getb"},"fP4.getb()"),(0,r.kt)("p",null,"extract b from this"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP4"},(0,r.kt)("code",null,"FP4")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP4{"}"}'),"  "),(0,r.kt)("a",{name:"FP4+equals"}),(0,r.kt)("h3",{id:"fp4equalsx"},"fP4.equals(x)"),(0,r.kt)("p",null,"Tests for equality of two FP4s"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP4"},(0,r.kt)("code",null,"FP4")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP4{"}"}'),"  "),(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},"Param"),(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},"x"),(0,r.kt)("td",{parentName:"tr",align:null},"FP4 instance to compare")))),(0,r.kt)("a",{name:"FP4+copy"}),(0,r.kt)("h3",{id:"fp4copyx"},"fP4.copy(x)"),(0,r.kt)("p",null,"Copy FP4 to another FP4"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP4"},(0,r.kt)("code",null,"FP4")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP4{"}"}'),"  "),(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},"Param"),(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},"x"),(0,r.kt)("td",{parentName:"tr",align:null},"FP4 instance to be copied")))),(0,r.kt)("a",{name:"FP4+zero"}),(0,r.kt)("h3",{id:"fp4zero"},"fP4.zero()"),(0,r.kt)("p",null,"Set FP4 to zero"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP4"},(0,r.kt)("code",null,"FP4")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP4{"}"}'),"  "),(0,r.kt)("a",{name:"FP4+one"}),(0,r.kt)("h3",{id:"fp4onex"},"fP4.one(x)"),(0,r.kt)("p",null,"Set FP4 to unity"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP4"},(0,r.kt)("code",null,"FP4")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP4{"}"}'),"  "),(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},"Param"),(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},"x"),(0,r.kt)("td",{parentName:"tr",align:null},"FP4 instance to be set to one")))),(0,r.kt)("a",{name:"FP4+set"}),(0,r.kt)("h3",{id:"fp4setc-d"},"fP4.set(c, d)"),(0,r.kt)("p",null,"Set FP4 from two FP2 values"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP4"},(0,r.kt)("code",null,"FP4")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP4{"}"}'),"  "),(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},"Param"),(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},"c"),(0,r.kt)("td",{parentName:"tr",align:null},"FP2 instance")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"d"),(0,r.kt)("td",{parentName:"tr",align:null},"FP2 instance")))),(0,r.kt)("a",{name:"FP4+seta"}),(0,r.kt)("h3",{id:"fp4setac"},"fP4.seta(c)"),(0,r.kt)("p",null,"Set FP4 from one FP2 value"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP4"},(0,r.kt)("code",null,"FP4")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP4{"}"}'),"  "),(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},"Param"),(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},"c"),(0,r.kt)("td",{parentName:"tr",align:null},"FP2 instance")))),(0,r.kt)("a",{name:"FP4+neg"}),(0,r.kt)("h3",{id:"fp4neg"},"fP4.neg()"),(0,r.kt)("p",null,"Negation of FP4"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP4"},(0,r.kt)("code",null,"FP4")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP4{"}"}'),"  "),(0,r.kt)("a",{name:"FP4+conj"}),(0,r.kt)("h3",{id:"fp4conj"},"fP4.conj()"),(0,r.kt)("p",null,"Conjugation of FP4"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP4"},(0,r.kt)("code",null,"FP4")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP4{"}"}'),"  "),(0,r.kt)("a",{name:"FP4+nconj"}),(0,r.kt)("h3",{id:"fp4nconj"},"fP4.nconj()"),(0,r.kt)("p",null,"Negative conjugation of FP4"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP4"},(0,r.kt)("code",null,"FP4")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP4{"}"}'),"  "),(0,r.kt)("a",{name:"FP4+add"}),(0,r.kt)("h3",{id:"fp4addx"},"fP4.add(x)"),(0,r.kt)("p",null,"addition of two FP4s"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP4"},(0,r.kt)("code",null,"FP4")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP4{"}"}'),"  "),(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},"Param"),(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},"x"),(0,r.kt)("td",{parentName:"tr",align:null},"FP4 instance")))),(0,r.kt)("a",{name:"FP4+sub"}),(0,r.kt)("h3",{id:"fp4subx"},"fP4.sub(x)"),(0,r.kt)("p",null,"subtraction of two FP4s"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP4"},(0,r.kt)("code",null,"FP4")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP4{"}"}'),"  "),(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},"Param"),(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},"x"),(0,r.kt)("td",{parentName:"tr",align:null},"FP4 instance")))),(0,r.kt)("a",{name:"FP4+pmul"}),(0,r.kt)("h3",{id:"fp4pmuls"},"fP4.pmul(s)"),(0,r.kt)("p",null,"Multiplication of an FP4 by an FP8"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP4"},(0,r.kt)("code",null,"FP4")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP4{"}"}'),"  "),(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},"Param"),(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},"s"),(0,r.kt)("td",{parentName:"tr",align:null},"FP8 instance")))),(0,r.kt)("a",{name:"FP4+imul"}),(0,r.kt)("h3",{id:"fp4imuls"},"fP4.imul(s)"),(0,r.kt)("p",null,"Multiplication of an FP4 by an integer"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP4"},(0,r.kt)("code",null,"FP4")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP4{"}"}'),"  "),(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},"Param"),(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},"s"),(0,r.kt)("td",{parentName:"tr",align:null},"integer multiplier")))),(0,r.kt)("a",{name:"FP4+sqr"}),(0,r.kt)("h3",{id:"fp4sqr"},"fP4.sqr()"),(0,r.kt)("p",null,"Fast Squaring of an FP4"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP4"},(0,r.kt)("code",null,"FP4")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP4{"}"}'),"  "),(0,r.kt)("a",{name:"FP4+mul"}),(0,r.kt)("h3",{id:"fp4muly"},"fP4.mul(y)"),(0,r.kt)("p",null,"Full unconditional Multiplication of two FP4s"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP4"},(0,r.kt)("code",null,"FP4")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP4{"}"}'),"  "),(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},"Param"),(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},"y"),(0,r.kt)("td",{parentName:"tr",align:null},"FP4 instance, the multiplier")))),(0,r.kt)("a",{name:"FP4+toString"}),(0,r.kt)("h3",{id:"fp4tostring"},"fP4.toString()"),(0,r.kt)("p",null,"convert to hex string"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP4"},(0,r.kt)("code",null,"FP4")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP4{"}"}'),"  "),(0,r.kt)("a",{name:"FP4+inverse"}),(0,r.kt)("h3",{id:"fp4inverse"},"fP4.inverse()"),(0,r.kt)("p",null,"Inverting an FP4"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP4"},(0,r.kt)("code",null,"FP4")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP4{"}"}'),"  "),(0,r.kt)("a",{name:"FP4+times_i"}),(0,r.kt)("h3",{id:"fp4times_i"},"fP4.times_i()"),(0,r.kt)("p",null,"multiplies an FP4 instance by irreducible polynomial sqrt(1+sqrt(-1))"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP4"},(0,r.kt)("code",null,"FP4")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP4{"}"}'),"  "),(0,r.kt)("a",{name:"FP4+frob"}),(0,r.kt)("h3",{id:"fp4frobf"},"fP4.frob(f)"),(0,r.kt)("p",null,"Raises an FP4 to the power of the internal modulus p, using the Frobenius"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP4"},(0,r.kt)("code",null,"FP4")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP4{"}"}'),"  "),(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},"Param"),(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},"f"),(0,r.kt)("td",{parentName:"tr",align:null},"Modulus")))),(0,r.kt)("a",{name:"FP4+pow"}),(0,r.kt)("h3",{id:"fp4powe"},"fP4.pow(e)"),(0,r.kt)("p",null,"Raises an FP4 to the power of a BIG"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP4"},(0,r.kt)("code",null,"FP4")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP4{"}"}'),"  "),(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},"Param"),(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},"e"),(0,r.kt)("td",{parentName:"tr",align:null},"BIG instance exponent")))),(0,r.kt)("a",{name:"FP4+xtr_A"}),(0,r.kt)("h3",{id:"fp4xtr_aw-y-z"},"fP4.xtr_A(w, y, z)"),(0,r.kt)("p",null,"Calculates the XTR addition function r=w_x-conj(x)_y+z"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP4"},(0,r.kt)("code",null,"FP4")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP4{"}"}'),"  "),(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},"Param"),(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},"w"),(0,r.kt)("td",{parentName:"tr",align:null},"FP4 instance")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"y"),(0,r.kt)("td",{parentName:"tr",align:null},"FP4 instance")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"z"),(0,r.kt)("td",{parentName:"tr",align:null},"FP4 instance")))),(0,r.kt)("a",{name:"FP4+xtr_D"}),(0,r.kt)("h3",{id:"fp4xtr_d"},"fP4.xtr_D()"),(0,r.kt)("p",null,"Calculates the XTR doubling function r=x^2-2","*","conj(x)"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP4"},(0,r.kt)("code",null,"FP4")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP4{"}"}'),"  "),(0,r.kt)("a",{name:"FP4+xtr_pow"}),(0,r.kt)("h3",{id:"fp4xtr_pown"},"fP4.xtr_pow(n)"),(0,r.kt)("p",null,"Calculates FP4 trace of an FP4 raised to the power of a BIG number"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP4"},(0,r.kt)("code",null,"FP4")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP4{"}"}'),"  "),(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},"Param"),(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},"n"),(0,r.kt)("td",{parentName:"tr",align:null},"Big number")))),(0,r.kt)("a",{name:"FP4+xtr_pow2"}),(0,r.kt)("h3",{id:"fp4xtr_pow2"},"fP4.xtr_pow2()"),(0,r.kt)("p",null,"Calculates FP4 trace of c^a.d^b, where c and d are derived from FP4 traces of FP4s"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP4"},(0,r.kt)("code",null,"FP4")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP4{"}"}'),"  "),(0,r.kt)("a",{name:"FP4+div2"}),(0,r.kt)("h3",{id:"fp4div2"},"fP4.div2()"),(0,r.kt)("p",null,"Divide an FP4 by 2"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP4"},(0,r.kt)("code",null,"FP4")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP4{"}"}'),"  "),(0,r.kt)("a",{name:"FP4+div_i"}),(0,r.kt)("h3",{id:"fp4div_i"},"fP4.div_i()"),(0,r.kt)("p",null,"Divide FP4 number by QNR"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP4"},(0,r.kt)("code",null,"FP4")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP4{"}"}'),"  "),(0,r.kt)("a",{name:"FP4+div_2i"}),(0,r.kt)("h3",{id:"fp4div_2i"},"fP4.div_2i()"),(0,r.kt)("p",null,"Divide an FP4 by QNR/2"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP4"},(0,r.kt)("code",null,"FP4")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP4{"}"}'),"  "),(0,r.kt)("a",{name:"FP4+qmul"}),(0,r.kt)("h3",{id:"fp4qmuls"},"fP4.qmul(s)"),(0,r.kt)("p",null,"Multiplication of an FP4 by an FP"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP4"},(0,r.kt)("code",null,"FP4")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP4{"}"}'),"  "),(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},"Param"),(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},"s"),(0,r.kt)("td",{parentName:"tr",align:null},"FP multiplier")))),(0,r.kt)("a",{name:"FP4+sqrt"}),(0,r.kt)("h3",{id:"fp4sqrt"},"fP4.sqrt()"),(0,r.kt)("p",null,"Calculate square root of an FP4"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP4"},(0,r.kt)("code",null,"FP4")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP4{"}"}')))}s.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/2034d24c.869f46ab.js b/assets/js/2034d24c.869f46ab.js
new file mode 100644
index 0000000..9dec63f
--- /dev/null
+++ b/assets/js/2034d24c.869f46ab.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4075],{3905:(t,e,a)=>{a.d(e,{Zo:()=>m,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 p(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 k=n.createContext({}),i=function(t){var e=n.useContext(k),a=e;return t&&(a="function"==typeof t?t(e):p(p({},e),t)),a},m=function(t){var e=i(t.components);return n.createElement(k.Provider,{value:e},t.children)},u="mdxType",d={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},s=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,l=t.originalType,k=t.parentName,m=o(t,["components","mdxType","originalType","parentName"]),u=i(a),s=r,c=u["".concat(k,".").concat(s)]||u[s]||d[s]||l;return a?n.createElement(c,p(p({ref:e},m),{},{components:a})):n.createElement(c,p({ref:e},m))}));function c(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=a.length,p=new Array(l);p[0]=s;var o={};for(var k in e)hasOwnProperty.call(e,k)&&(o[k]=e[k]);o.originalType=t,o[u]="string"==typeof t?t:r,p[1]=o;for(var i=2;i<l;i++)p[i]=a[i];return n.createElement.apply(null,p)}return n.createElement.apply(null,a)}s.displayName="MDXCreateElement"},9661:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>m,contentTitle:()=>k,default:()=>s,frontMatter:()=>o,metadata:()=>i,toc:()=>u});var n=a(7462),r=a(3366),l=(a(7294),a(3905)),p=["components"],o={id:"fp",title:"FP",sidebar_label:"FP"},k=void 0,i={unversionedId:"cryptojs/fp",id:"cryptojs/fp",title:"FP",description:"FP",source:"@site/../docs/cryptojs/fp.md",sourceDirName:"cryptojs",slug:"/cryptojs/fp",permalink:"/docs/cryptojs/fp",draft:!1,tags:[],version:"current",frontMatter:{id:"fp",title:"FP",sidebar_label:"FP"},sidebar:"docs",previous:{title:"FF",permalink:"/docs/cryptojs/ff"},next:{title:"FP2",permalink:"/docs/cryptojs/fp2"}},m={},u=[{value:"FP",id:"fp",level:2},{value:"new FP(x)",id:"new-fpx",level:3},{value:"fP.zero()",id:"fpzero",level:3},{value:"fP.rcopy(x)",id:"fprcopyx",level:3},{value:"fP.bcopy(x)",id:"fpbcopyx",level:3},{value:"fP.copy(x)",id:"fpcopyx",level:3},{value:"fP.cswap()",id:"fpcswap",level:3},{value:"fP.cmove(g, d)",id:"fpcmoveg-d",level:3},{value:"fP.nres()",id:"fpnres",level:3},{value:"fP.redc()",id:"fpredc",level:3},{value:"fP.toString()",id:"fptostring",level:3},{value:"fP.iszilch()",id:"fpiszilch",level:3},{value:"fP.reduce()",id:"fpreduce",level:3},{value:"fP.one()",id:"fpone",level:3},{value:"fP.norm()",id:"fpnorm",level:3},{value:"fP.mul(b)",id:"fpmulb",level:3},{value:"fP.imul(s)",id:"fpimuls",level:3},{value:"fP.sqr()",id:"fpsqr",level:3},{value:"fP.neg(x)",id:"fpnegx",level:3},{value:"fP.sub(x)",id:"fpsubx",level:3},{value:"fP.div2()",id:"fpdiv2",level:3},{value:"fP.fpow()",id:"fpfpow",level:3},{value:"fP.inverse()",id:"fpinverse",level:3},{value:"fP.equals(x)",id:"fpequalsx",level:3},{value:"fP.pow(e)",id:"fppowe",level:3},{value:"fP.jacobi()",id:"fpjacobi",level:3},{value:"fP.sqrt()",id:"fpsqrt",level:3},{value:"FP.mod()",id:"fpmod",level:3}],d={toc:u};function s(t){var e=t.components,a=(0,r.Z)(t,p);return(0,l.kt)("wrapper",(0,n.Z)({},d,a,{components:e,mdxType:"MDXLayout"}),(0,l.kt)("a",{name:"FP"}),(0,l.kt)("h2",{id:"fp"},"FP"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": global class",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP{"}"}'),"  "),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP"},"FP"),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#new_FP_new"},"new FP(x)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("em",{parentName:"li"},"instance"),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP+zero"},".zero()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP+rcopy"},".rcopy(x)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP+bcopy"},".bcopy(x)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP+copy"},".copy(x)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP+cswap"},".cswap()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP+cmove"},".cmove(g, d)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP+nres"},".nres()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP+redc"},".redc()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP+toString"},".toString()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP+iszilch"},".iszilch()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP+reduce"},".reduce()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP+one"},".one()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP+norm"},".norm()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP+mul"},".mul(b)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP+imul"},".imul(s)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP+sqr"},".sqr()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP+neg"},".neg(x)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP+sub"},".sub(x)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP+div2"},".div2()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP+fpow"},".fpow()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP+inverse"},".inverse()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP+equals"},".equals(x)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP+pow"},".pow(e)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP+jacobi"},".jacobi()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP+sqrt"},".sqrt()")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("em",{parentName:"li"},"static"),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP.mod"},".mod()"))))))),(0,l.kt)("a",{name:"new_FP_new"}),(0,l.kt)("h3",{id:"new-fpx"},"new FP(x)"),(0,l.kt)("p",null,"Creates an instance of FP."),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"x"),(0,l.kt)("td",{parentName:"tr",align:null},"FP / BIG instance")))),(0,l.kt)("a",{name:"FP+zero"}),(0,l.kt)("h3",{id:"fpzero"},"fP.zero()"),(0,l.kt)("p",null,"Set FP to zero"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP"},(0,l.kt)("code",null,"FP")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP{"}"}'),"  "),(0,l.kt)("a",{name:"FP+rcopy"}),(0,l.kt)("h3",{id:"fprcopyx"},"fP.rcopy(x)"),(0,l.kt)("p",null,"copy from a ctx.BIG in ROM"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP"},(0,l.kt)("code",null,"FP")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"x"),(0,l.kt)("td",{parentName:"tr",align:null},"FP instance to be copied")))),(0,l.kt)("a",{name:"FP+bcopy"}),(0,l.kt)("h3",{id:"fpbcopyx"},"fP.bcopy(x)"),(0,l.kt)("p",null,"copy from another ctx.BIG"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP"},(0,l.kt)("code",null,"FP")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"x"),(0,l.kt)("td",{parentName:"tr",align:null},"FP instance to be copied")))),(0,l.kt)("a",{name:"FP+copy"}),(0,l.kt)("h3",{id:"fpcopyx"},"fP.copy(x)"),(0,l.kt)("p",null,"Copy FP to another FP"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP"},(0,l.kt)("code",null,"FP")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"x"),(0,l.kt)("td",{parentName:"tr",align:null},"FP instance to be copied")))),(0,l.kt)("a",{name:"FP+cswap"}),(0,l.kt)("h3",{id:"fpcswap"},"fP.cswap()"),(0,l.kt)("p",null,"Conditional constant time swap of two FP numbers"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP"},(0,l.kt)("code",null,"FP")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}BIG{"}"}'),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": b FP number",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": d Integer  "),(0,l.kt)("a",{name:"FP+cmove"}),(0,l.kt)("h3",{id:"fpcmoveg-d"},"fP.cmove(g, d)"),(0,l.kt)("p",null,"Conditional copy of FP number"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP"},(0,l.kt)("code",null,"FP")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"g"),(0,l.kt)("td",{parentName:"tr",align:null},"FP instance")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"d"),(0,l.kt)("td",{parentName:"tr",align:null},"copy depends on this value")))),(0,l.kt)("a",{name:"FP+nres"}),(0,l.kt)("h3",{id:"fpnres"},"fP.nres()"),(0,l.kt)("p",null,"Converts from BIG integer to residue form mod Modulus"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP"},(0,l.kt)("code",null,"FP")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP{"}"}'),"  "),(0,l.kt)("a",{name:"FP+redc"}),(0,l.kt)("h3",{id:"fpredc"},"fP.redc()"),(0,l.kt)("p",null,"Converts from residue form back to BIG integer form"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP"},(0,l.kt)("code",null,"FP")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP{"}"}'),"  "),(0,l.kt)("a",{name:"FP+toString"}),(0,l.kt)("h3",{id:"fptostring"},"fP.toString()"),(0,l.kt)("p",null,"convert to hex string"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP"},(0,l.kt)("code",null,"FP")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP{"}"}'),"  "),(0,l.kt)("a",{name:"FP+iszilch"}),(0,l.kt)("h3",{id:"fpiszilch"},"fP.iszilch()"),(0,l.kt)("p",null,"Tests for FP equal to zero"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP"},(0,l.kt)("code",null,"FP")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP{"}"}'),"  "),(0,l.kt)("a",{name:"FP+reduce"}),(0,l.kt)("h3",{id:"fpreduce"},"fP.reduce()"),(0,l.kt)("p",null,"Reduces all components of possibly unreduced FP mod Modulus"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP"},(0,l.kt)("code",null,"FP")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP{"}"}'),"  "),(0,l.kt)("a",{name:"FP+one"}),(0,l.kt)("h3",{id:"fpone"},"fP.one()"),(0,l.kt)("p",null,"Set FP to unity"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP"},(0,l.kt)("code",null,"FP")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP{"}"}'),"  "),(0,l.kt)("a",{name:"FP+norm"}),(0,l.kt)("h3",{id:"fpnorm"},"fP.norm()"),(0,l.kt)("p",null,"Normalises the components of an FP"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP"},(0,l.kt)("code",null,"FP")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP{"}"}'),"  "),(0,l.kt)("a",{name:"FP+mul"}),(0,l.kt)("h3",{id:"fpmulb"},"fP.mul(b)"),(0,l.kt)("p",null,"Fast Modular multiplication of two FPs, mod Modulus"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP"},(0,l.kt)("code",null,"FP")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"b"),(0,l.kt)("td",{parentName:"tr",align:null},"FP number, the multiplier")))),(0,l.kt)("a",{name:"FP+imul"}),(0,l.kt)("h3",{id:"fpimuls"},"fP.imul(s)"),(0,l.kt)("p",null,"Multiplication of an FP by a small integer"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP"},(0,l.kt)("code",null,"FP")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"s"),(0,l.kt)("td",{parentName:"tr",align:null},"integer")))),(0,l.kt)("a",{name:"FP+sqr"}),(0,l.kt)("h3",{id:"fpsqr"},"fP.sqr()"),(0,l.kt)("p",null,"Fast Squaring of an FP"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP"},(0,l.kt)("code",null,"FP")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP{"}"}'),"  "),(0,l.kt)("a",{name:"FP+neg"}),(0,l.kt)("h3",{id:"fpnegx"},"fP.neg(x)"),(0,l.kt)("p",null,"negate this"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP"},(0,l.kt)("code",null,"FP")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"x"),(0,l.kt)("td",{parentName:"tr",align:null},"FP instance to be set to one")))),(0,l.kt)("a",{name:"FP+sub"}),(0,l.kt)("h3",{id:"fpsubx"},"fP.sub(x)"),(0,l.kt)("p",null,"subtraction of two FPs"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP"},(0,l.kt)("code",null,"FP")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"x"),(0,l.kt)("td",{parentName:"tr",align:null},"FP instance")))),(0,l.kt)("a",{name:"FP+div2"}),(0,l.kt)("h3",{id:"fpdiv2"},"fP.div2()"),(0,l.kt)("p",null,"Divide an FP by 2"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP"},(0,l.kt)("code",null,"FP")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP{"}"}'),"  "),(0,l.kt)("a",{name:"FP+fpow"}),(0,l.kt)("h3",{id:"fpfpow"},"fP.fpow()"),(0,l.kt)("p",null,"return this^(p-3)/4 or this^(p-5)/8"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP"},(0,l.kt)("code",null,"FP")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP{"}"}'),"  "),(0,l.kt)("a",{name:"FP+inverse"}),(0,l.kt)("h3",{id:"fpinverse"},"fP.inverse()"),(0,l.kt)("p",null,"Inverting an FP"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP"},(0,l.kt)("code",null,"FP")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP{"}"}'),"  "),(0,l.kt)("a",{name:"FP+equals"}),(0,l.kt)("h3",{id:"fpequalsx"},"fP.equals(x)"),(0,l.kt)("p",null,"Tests for equality of two FP instances"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP"},(0,l.kt)("code",null,"FP")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"x"),(0,l.kt)("td",{parentName:"tr",align:null},"FP instance to compare")))),(0,l.kt)("a",{name:"FP+pow"}),(0,l.kt)("h3",{id:"fppowe"},"fP.pow(e)"),(0,l.kt)("p",null,"Raises an FP to the power of a BIG"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP"},(0,l.kt)("code",null,"FP")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"e"),(0,l.kt)("td",{parentName:"tr",align:null},"BIG instance exponent")))),(0,l.kt)("a",{name:"FP+jacobi"}),(0,l.kt)("h3",{id:"fpjacobi"},"fP.jacobi()"),(0,l.kt)("p",null,"return jacobi symbol (this/Modulus)"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP"},(0,l.kt)("code",null,"FP")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP{"}"}'),"  "),(0,l.kt)("a",{name:"FP+sqrt"}),(0,l.kt)("h3",{id:"fpsqrt"},"fP.sqrt()"),(0,l.kt)("p",null,"Fast Modular square root of a an FP, mod Modulus"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP"},(0,l.kt)("code",null,"FP")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP{"}"}'),"  "),(0,l.kt)("a",{name:"FP.mod"}),(0,l.kt)("h3",{id:"fpmod"},"FP.mod()"),(0,l.kt)("p",null,'reduce a ctx.DBIG to a ctx.BIG using a "special" modulus'),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#FP"},(0,l.kt)("code",null,"FP")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP{"}"}')))}s.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/2042cb3f.676a8636.js b/assets/js/2042cb3f.676a8636.js
new file mode 100644
index 0000000..fb1c195
--- /dev/null
+++ b/assets/js/2042cb3f.676a8636.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1599],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>k});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 l(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 p(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?l(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):l(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,r=function(e,t){if(null==e)return{};var a,n,r={},l=Object.keys(e);for(n=0;n<l.length;n++)a=l[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n<l.length;n++)a=l[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var o=n.createContext({}),i=function(e){var t=n.useContext(o),a=t;return e&&(a="function"==typeof e?e(t):p(p({},t),e)),a},c=function(e){var t=i(e.components);return n.createElement(o.Provider,{value:t},e.children)},h="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,l=e.originalType,o=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),h=i(a),u=r,k=h["".concat(o,".").concat(u)]||h[u]||m[u]||l;return a?n.createElement(k,p(p({ref:t},c),{},{components:a})):n.createElement(k,p({ref:t},c))}));function k(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=a.length,p=new Array(l);p[0]=u;var s={};for(var o in t)hasOwnProperty.call(t,o)&&(s[o]=t[o]);s.originalType=e,s[h]="string"==typeof e?e:r,p[1]=s;for(var i=2;i<l;i++)p[i]=a[i];return n.createElement.apply(null,p)}return n.createElement.apply(null,a)}u.displayName="MDXCreateElement"},21:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>s,metadata:()=>i,toc:()=>h});var n=a(7462),r=a(3366),l=(a(7294),a(3905)),p=["components"],s={id:"hash256",title:"HASH256",sidebar_label:"HASH256"},o=void 0,i={unversionedId:"cryptojs/hash256",id:"cryptojs/hash256",title:"HASH256",description:"HASH256",source:"@site/../docs/cryptojs/hash256.md",sourceDirName:"cryptojs",slug:"/cryptojs/hash256",permalink:"/docs/cryptojs/hash256",draft:!1,tags:[],version:"current",frontMatter:{id:"hash256",title:"HASH256",sidebar_label:"HASH256"},sidebar:"docs",previous:{title:"GCM",permalink:"/docs/cryptojs/gcm"},next:{title:"HASH384",permalink:"/docs/cryptojs/hash384"}},c={},h=[{value:"HASH256",id:"hash256",level:2},{value:"new HASH256()",id:"new-hash256",level:3},{value:"hasH256.init()",id:"hash256init",level:3},{value:"hasH256.process(byt)",id:"hash256processbyt",level:3},{value:"hasH256.process_array(b)",id:"hash256process_arrayb",level:3},{value:"hasH256.process_num(n)",id:"hash256process_numn",level:3},{value:"hasH256.hash() \u21d2",id:"hash256hash-",level:3}],m={toc:h};function u(e){var t=e.components,a=(0,r.Z)(e,p);return(0,l.kt)("wrapper",(0,n.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("a",{name:"HASH256"}),(0,l.kt)("h2",{id:"hash256"},"HASH256"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": global class",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}HASH256{"}"}'),"  "),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#HASH256"},"HASH256"),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#new_HASH256_new"},"new HASH256()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#HASH256+init"},".init()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#HASH256+process"},".process(byt)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#HASH256+process_array"},".process_array(b)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#HASH256+process_num"},".process_num(n)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#HASH256+hash"},".hash()")," \u21d2")))),(0,l.kt)("a",{name:"new_HASH256_new"}),(0,l.kt)("h3",{id:"new-hash256"},"new HASH256()"),(0,l.kt)("p",null,"Creates an instance of HASH256"),(0,l.kt)("a",{name:"HASH256+init"}),(0,l.kt)("h3",{id:"hash256init"},"hasH256.init()"),(0,l.kt)("p",null,"Initialise Hash function"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#HASH256"},(0,l.kt)("code",null,"HASH256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}HASH256{"}"}'),"  "),(0,l.kt)("a",{name:"HASH256+process"}),(0,l.kt)("h3",{id:"hash256processbyt"},"hasH256.process(byt)"),(0,l.kt)("p",null,"Process a single byte"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#HASH256"},(0,l.kt)("code",null,"HASH256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}HASH256{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"byt"),(0,l.kt)("td",{parentName:"tr",align:null},"byte to be included in hash")))),(0,l.kt)("a",{name:"HASH256+process_array"}),(0,l.kt)("h3",{id:"hash256process_arrayb"},"hasH256.process_array(b)"),(0,l.kt)("p",null,"Process an array of bytes"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#HASH256"},(0,l.kt)("code",null,"HASH256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}HASH256{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"b"),(0,l.kt)("td",{parentName:"tr",align:null},"byte arrray to be included in hash")))),(0,l.kt)("a",{name:"HASH256+process_num"}),(0,l.kt)("h3",{id:"hash256process_numn"},"hasH256.process_num(n)"),(0,l.kt)("p",null,"Process a 32-bit integer"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#HASH256"},(0,l.kt)("code",null,"HASH256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}HASH256{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"n"),(0,l.kt)("td",{parentName:"tr",align:null},"Integer to be included in hash")))),(0,l.kt)("a",{name:"HASH256+hash"}),(0,l.kt)("h3",{id:"hash256hash-"},"hasH256.hash() \u21d2"),(0,l.kt)("p",null,"Generate 32-byte hash"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#HASH256"},(0,l.kt)("code",null,"HASH256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": digest 32-byte hash",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}HASH256{"}"}')))}u.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/20cdd429.99859669.js b/assets/js/20cdd429.99859669.js
new file mode 100644
index 0000000..db6815a
--- /dev/null
+++ b/assets/js/20cdd429.99859669.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4926],{3905:(t,e,a)=>{a.d(e,{Zo:()=>m,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 p(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 k(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({}),i=function(t){var e=n.useContext(o),a=e;return t&&(a="function"==typeof t?t(e):p(p({},e),t)),a},m=function(t){var e=i(t.components);return n.createElement(o.Provider,{value:e},t.children)},u="mdxType",s={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},d=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,l=t.originalType,o=t.parentName,m=k(t,["components","mdxType","originalType","parentName"]),u=i(a),d=r,N=u["".concat(o,".").concat(d)]||u[d]||s[d]||l;return a?n.createElement(N,p(p({ref:e},m),{},{components:a})):n.createElement(N,p({ref:e},m))}));function N(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=a.length,p=new Array(l);p[0]=d;var k={};for(var o in e)hasOwnProperty.call(e,o)&&(k[o]=e[o]);k.originalType=t,k[u]="string"==typeof t?t:r,p[1]=k;for(var i=2;i<l;i++)p[i]=a[i];return n.createElement.apply(null,p)}return n.createElement.apply(null,a)}d.displayName="MDXCreateElement"},8605:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>m,contentTitle:()=>o,default:()=>d,frontMatter:()=>k,metadata:()=>i,toc:()=>u});var n=a(7462),r=a(3366),l=(a(7294),a(3905)),p=["components"],k={id:"fp48",title:"FP48",sidebar_label:"FP48"},o=void 0,i={unversionedId:"cryptojs/fp48",id:"cryptojs/fp48",title:"FP48",description:"FP48",source:"@site/../docs/cryptojs/fp48.md",sourceDirName:"cryptojs",slug:"/cryptojs/fp48",permalink:"/docs/cryptojs/fp48",draft:!1,tags:[],version:"current",frontMatter:{id:"fp48",title:"FP48",sidebar_label:"FP48"},sidebar:"docs",previous:{title:"FP24",permalink:"/docs/cryptojs/fp24"},next:{title:"GCM",permalink:"/docs/cryptojs/gcm"}},m={},u=[{value:"FP48",id:"fp48",level:2},{value:"new FP48()",id:"new-fp48",level:3},{value:"fP48.reduce()",id:"fp48reduce",level:3},{value:"fP48.norm()",id:"fp48norm",level:3},{value:"fP48.iszilch()",id:"fp48iszilch",level:3},{value:"fP48.isunity()",id:"fp48isunity",level:3},{value:"fP48.cmove(g, d)",id:"fp48cmoveg-d",level:3},{value:"fP48.select()",id:"fp48select",level:3},{value:"fP48.geta()",id:"fp48geta",level:3},{value:"fP48.getb()",id:"fp48getb",level:3},{value:"fP48.getc()",id:"fp48getc",level:3},{value:"fP48.equals(x)",id:"fp48equalsx",level:3},{value:"fP48.copy(x)",id:"fp48copyx",level:3},{value:"fP48.one(x)",id:"fp48onex",level:3},{value:"fP48.zero()",id:"fp48zero",level:3},{value:"fP48.conj()",id:"fp48conj",level:3},{value:"fP48.set(d, e, f)",id:"fp48setd-e-f",level:3},{value:"fP48.seta(c)",id:"fp48setac",level:3},{value:"fP48.usqr()",id:"fp48usqr",level:3},{value:"fP48.sqr()",id:"fp48sqr",level:3},{value:"fP48.mul(y)",id:"fp48muly",level:3},{value:"fP48.smul(y)",id:"fp48smuly",level:3},{value:"fP48.ssmul(y)",id:"fp48ssmuly",level:3},{value:"fP48.inverse()",id:"fp48inverse",level:3},{value:"fP48.frob(f)",id:"fp48frobf",level:3},{value:"fP48.trace()",id:"fp48trace",level:3},{value:"fP48.toString()",id:"fp48tostring",level:3},{value:"fP48.toBytes(w)",id:"fp48tobytesw",level:3},{value:"fP48.pow(e)",id:"fp48powe",level:3},{value:"fP48.pinpow(e, bts)",id:"fp48pinpowe-bts",level:3},{value:"fP48.compow(e, r)",id:"fp48compowe-r",level:3},{value:"FP48.fromBytes(w)",id:"fp48frombytesw",level:3},{value:"FP48.teq()",id:"fp48teq",level:3},{value:"FP48.pow16()",id:"fp48pow16",level:3}],s={toc:u};function d(t){var e=t.components,a=(0,r.Z)(t,p);return(0,l.kt)("wrapper",(0,n.Z)({},s,a,{components:e,mdxType:"MDXLayout"}),(0,l.kt)("a",{name:"FP48"}),(0,l.kt)("h2",{id:"fp48"},"FP48"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": global class",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP48{"}"}'),"  "),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP48"},"FP48"),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#new_FP48_new"},"new FP48()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("em",{parentName:"li"},"instance"),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP48+reduce"},".reduce()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP48+norm"},".norm()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP48+iszilch"},".iszilch()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP48+isunity"},".isunity()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP48+cmove"},".cmove(g, d)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP48+select"},".select()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP48+geta"},".geta()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP48+getb"},".getb()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP48+getc"},".getc()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP48+equals"},".equals(x)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP48+copy"},".copy(x)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP48+one"},".one(x)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP48+zero"},".zero()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP48+conj"},".conj()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP48+set"},".set(d, e, f)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP48+seta"},".seta(c)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP48+usqr"},".usqr()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP48+sqr"},".sqr()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP48+mul"},".mul(y)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP48+smul"},".smul(y)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP48+ssmul"},".ssmul(y)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP48+inverse"},".inverse()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP48+frob"},".frob(f)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP48+trace"},".trace()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP48+toString"},".toString()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP48+toBytes"},".toBytes(w)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP48+pow"},".pow(e)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP48+pinpow"},".pinpow(e, bts)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP48+compow"},".compow(e, r)")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("em",{parentName:"li"},"static"),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP48.fromBytes"},".fromBytes(w)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP48.teq"},".teq()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP48.pow16"},".pow16()"))))))),(0,l.kt)("a",{name:"new_FP48_new"}),(0,l.kt)("h3",{id:"new-fp48"},"new FP48()"),(0,l.kt)("p",null,"Creates an instance of FP48."),(0,l.kt)("a",{name:"FP48+reduce"}),(0,l.kt)("h3",{id:"fp48reduce"},"fP48.reduce()"),(0,l.kt)("p",null,"Reduces all components of possibly unreduced FP48 mod Modulus"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP48"},(0,l.kt)("code",null,"FP48")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP48{"}"}'),"  "),(0,l.kt)("a",{name:"FP48+norm"}),(0,l.kt)("h3",{id:"fp48norm"},"fP48.norm()"),(0,l.kt)("p",null,"Normalises the components of an FP48"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP48"},(0,l.kt)("code",null,"FP48")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP48{"}"}'),"  "),(0,l.kt)("a",{name:"FP48+iszilch"}),(0,l.kt)("h3",{id:"fp48iszilch"},"fP48.iszilch()"),(0,l.kt)("p",null,"Tests for FP48 equal to zero"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP48"},(0,l.kt)("code",null,"FP48")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP48{"}"}'),"  "),(0,l.kt)("a",{name:"FP48+isunity"}),(0,l.kt)("h3",{id:"fp48isunity"},"fP48.isunity()"),(0,l.kt)("p",null,"Tests for FP48 equal to unity"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP48"},(0,l.kt)("code",null,"FP48")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP48{"}"}'),"  "),(0,l.kt)("a",{name:"FP48+cmove"}),(0,l.kt)("h3",{id:"fp48cmoveg-d"},"fP48.cmove(g, d)"),(0,l.kt)("p",null,"Conditional copy of FP48 number"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP48"},(0,l.kt)("code",null,"FP48")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP48{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"g"),(0,l.kt)("td",{parentName:"tr",align:null},"FP48 instance")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"d"),(0,l.kt)("td",{parentName:"tr",align:null},"copy depends on this value")))),(0,l.kt)("a",{name:"FP48+select"}),(0,l.kt)("h3",{id:"fp48select"},"fP48.select()"),(0,l.kt)("p",null,"Constant time select from pre-computed table"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP48"},(0,l.kt)("code",null,"FP48")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP48{"}"}'),"  "),(0,l.kt)("a",{name:"FP48+geta"}),(0,l.kt)("h3",{id:"fp48geta"},"fP48.geta()"),(0,l.kt)("p",null,"extract a from this"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP48"},(0,l.kt)("code",null,"FP48")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP48{"}"}'),"  "),(0,l.kt)("a",{name:"FP48+getb"}),(0,l.kt)("h3",{id:"fp48getb"},"fP48.getb()"),(0,l.kt)("p",null,"extract b from this"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP48"},(0,l.kt)("code",null,"FP48")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP48{"}"}'),"  "),(0,l.kt)("a",{name:"FP48+getc"}),(0,l.kt)("h3",{id:"fp48getc"},"fP48.getc()"),(0,l.kt)("p",null,"extract c from this"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP48"},(0,l.kt)("code",null,"FP48")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP48{"}"}'),"  "),(0,l.kt)("a",{name:"FP48+equals"}),(0,l.kt)("h3",{id:"fp48equalsx"},"fP48.equals(x)"),(0,l.kt)("p",null,"Tests for equality of two FP48s"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP48"},(0,l.kt)("code",null,"FP48")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP48{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"x"),(0,l.kt)("td",{parentName:"tr",align:null},"FP48 instance to compare")))),(0,l.kt)("a",{name:"FP48+copy"}),(0,l.kt)("h3",{id:"fp48copyx"},"fP48.copy(x)"),(0,l.kt)("p",null,"Copy FP48 to another FP48"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP48"},(0,l.kt)("code",null,"FP48")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP48{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"x"),(0,l.kt)("td",{parentName:"tr",align:null},"FP48 instance to be copied")))),(0,l.kt)("a",{name:"FP48+one"}),(0,l.kt)("h3",{id:"fp48onex"},"fP48.one(x)"),(0,l.kt)("p",null,"Set FP48 to unity"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP48"},(0,l.kt)("code",null,"FP48")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP48{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"x"),(0,l.kt)("td",{parentName:"tr",align:null},"FP48 instance to be set to one")))),(0,l.kt)("a",{name:"FP48+zero"}),(0,l.kt)("h3",{id:"fp48zero"},"fP48.zero()"),(0,l.kt)("p",null,"Set FP48 to zero"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP48"},(0,l.kt)("code",null,"FP48")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP48{"}"}'),"  "),(0,l.kt)("a",{name:"FP48+conj"}),(0,l.kt)("h3",{id:"fp48conj"},"fP48.conj()"),(0,l.kt)("p",null,"Conjugation of FP48"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP48"},(0,l.kt)("code",null,"FP48")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP48{"}"}'),"  "),(0,l.kt)("a",{name:"FP48+set"}),(0,l.kt)("h3",{id:"fp48setd-e-f"},"fP48.set(d, e, f)"),(0,l.kt)("p",null,"Set FP48 from three FP16 values"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP48"},(0,l.kt)("code",null,"FP48")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP48{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"d"),(0,l.kt)("td",{parentName:"tr",align:null},"FP16 instance")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"e"),(0,l.kt)("td",{parentName:"tr",align:null},"FP16 instance")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"f"),(0,l.kt)("td",{parentName:"tr",align:null},"FP16 instance")))),(0,l.kt)("a",{name:"FP48+seta"}),(0,l.kt)("h3",{id:"fp48setac"},"fP48.seta(c)"),(0,l.kt)("p",null,"Set FP48 from one FP16 value"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP48"},(0,l.kt)("code",null,"FP48")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP48{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"c"),(0,l.kt)("td",{parentName:"tr",align:null},"FP16 instance")))),(0,l.kt)("a",{name:"FP48+usqr"}),(0,l.kt)("h3",{id:"fp48usqr"},"fP48.usqr()"),(0,l.kt)("p",null,'Fast Squaring of an FP48 in "unitary" form'),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP48"},(0,l.kt)("code",null,"FP48")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP48{"}"}'),"  "),(0,l.kt)("a",{name:"FP48+sqr"}),(0,l.kt)("h3",{id:"fp48sqr"},"fP48.sqr()"),(0,l.kt)("p",null,"Fast Squaring of an FP48"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP48"},(0,l.kt)("code",null,"FP48")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP48{"}"}'),"  "),(0,l.kt)("a",{name:"FP48+mul"}),(0,l.kt)("h3",{id:"fp48muly"},"fP48.mul(y)"),(0,l.kt)("p",null,"Full unconditional Multiplication of two FP48s"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP48"},(0,l.kt)("code",null,"FP48")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP48{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"y"),(0,l.kt)("td",{parentName:"tr",align:null},"FP48 instance, the multiplier")))),(0,l.kt)("a",{name:"FP48+smul"}),(0,l.kt)("h3",{id:"fp48smuly"},"fP48.smul(y)"),(0,l.kt)("p",null,"Fast multiplication of two sparse FP48s that arises from ATE pairing line functions"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP48"},(0,l.kt)("code",null,"FP48")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP48{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"y"),(0,l.kt)("td",{parentName:"tr",align:null},"FP48 instance, the multiplier")))),(0,l.kt)("a",{name:"FP48+ssmul"}),(0,l.kt)("h3",{id:"fp48ssmuly"},"fP48.ssmul(y)"),(0,l.kt)("p",null,"Fast multiplication of what may be sparse multiplicands"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP48"},(0,l.kt)("code",null,"FP48")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP48{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"y"),(0,l.kt)("td",{parentName:"tr",align:null},"FP48 instance, the multiplier")))),(0,l.kt)("a",{name:"FP48+inverse"}),(0,l.kt)("h3",{id:"fp48inverse"},"fP48.inverse()"),(0,l.kt)("p",null,"Inverting an FP48"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP48"},(0,l.kt)("code",null,"FP48")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP48{"}"}'),"  "),(0,l.kt)("a",{name:"FP48+frob"}),(0,l.kt)("h3",{id:"fp48frobf"},"fP48.frob(f)"),(0,l.kt)("p",null,"Raises an FP48 to the power of the internal modulus p, using the Frobenius"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP48"},(0,l.kt)("code",null,"FP48")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP48{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"f"),(0,l.kt)("td",{parentName:"tr",align:null},"Modulus")))),(0,l.kt)("a",{name:"FP48+trace"}),(0,l.kt)("h3",{id:"fp48trace"},"fP48.trace()"),(0,l.kt)("p",null,"Calculate the trace of an FP48"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP48"},(0,l.kt)("code",null,"FP48")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP48{"}"}'),"  "),(0,l.kt)("a",{name:"FP48+toString"}),(0,l.kt)("h3",{id:"fp48tostring"},"fP48.toString()"),(0,l.kt)("p",null,"convert this to hex string"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP48"},(0,l.kt)("code",null,"FP48")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP48{"}"}'),"  "),(0,l.kt)("a",{name:"FP48+toBytes"}),(0,l.kt)("h3",{id:"fp48tobytesw"},"fP48.toBytes(w)"),(0,l.kt)("p",null,"convert this to byte array"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP48"},(0,l.kt)("code",null,"FP48")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP48{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"w"),(0,l.kt)("td",{parentName:"tr",align:null},"Byte array")))),(0,l.kt)("a",{name:"FP48+pow"}),(0,l.kt)("h3",{id:"fp48powe"},"fP48.pow(e)"),(0,l.kt)("p",null,"Raises an FP48 to the power of a BIG"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP48"},(0,l.kt)("code",null,"FP48")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP48{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"e"),(0,l.kt)("td",{parentName:"tr",align:null},"BIG instance exponent")))),(0,l.kt)("a",{name:"FP48+pinpow"}),(0,l.kt)("h3",{id:"fp48pinpowe-bts"},"fP48.pinpow(e, bts)"),(0,l.kt)("p",null,"Raises an FP48 instance x to a small integer power, side-channel resistant"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP48"},(0,l.kt)("code",null,"FP48")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP48{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"e"),(0,l.kt)("td",{parentName:"tr",align:null},"small integer exponent")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"bts"),(0,l.kt)("td",{parentName:"tr",align:null},"maximum number of bits in exponent")))),(0,l.kt)("a",{name:"FP48+compow"}),(0,l.kt)("h3",{id:"fp48compowe-r"},"fP48.compow(e, r)"),(0,l.kt)("p",null,"Raises an FP48 instance to a BIG power, compressed to FP4"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP48"},(0,l.kt)("code",null,"FP48")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP48{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"e"),(0,l.kt)("td",{parentName:"tr",align:null},"BIG exponent")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"r"),(0,l.kt)("td",{parentName:"tr",align:null},"BIG group order")))),(0,l.kt)("a",{name:"FP48.fromBytes"}),(0,l.kt)("h3",{id:"fp48frombytesw"},"FP48.fromBytes(w)"),(0,l.kt)("p",null,"convert from byte array to FP48"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#FP48"},(0,l.kt)("code",null,"FP48")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP48{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"w"),(0,l.kt)("td",{parentName:"tr",align:null},"Byte array")))),(0,l.kt)("a",{name:"FP48.teq"}),(0,l.kt)("h3",{id:"fp48teq"},"FP48.teq()"),(0,l.kt)("p",null,"return 1 if b==c, no branching"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#FP48"},(0,l.kt)("code",null,"FP48")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP48{"}"}'),"  "),(0,l.kt)("a",{name:"FP48.pow16"}),(0,l.kt)("h3",{id:"fp48pow16"},"FP48.pow16()"),(0,l.kt)("p",null,"p=q0^u0.q1^u1.q2^u2.q3^u3..."),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#FP48"},(0,l.kt)("code",null,"FP48")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP48{"}"}')))}d.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/2374c105.f49d0982.js b/assets/js/2374c105.f49d0982.js
new file mode 100644
index 0000000..5e46855
--- /dev/null
+++ b/assets/js/2374c105.f49d0982.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6755],{3905:(t,e,a)=>{a.d(e,{Zo:()=>o,kt:()=>N});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 p(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 i(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 k=n.createContext({}),m=function(t){var e=n.useContext(k),a=e;return t&&(a="function"==typeof t?t(e):p(p({},e),t)),a},o=function(t){var e=m(t.components);return n.createElement(k.Provider,{value:e},t.children)},u="mdxType",d={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},s=n.forwardRef((function(t,e){var a=t.components,l=t.mdxType,r=t.originalType,k=t.parentName,o=i(t,["components","mdxType","originalType","parentName"]),u=m(a),s=l,N=u["".concat(k,".").concat(s)]||u[s]||d[s]||r;return a?n.createElement(N,p(p({ref:e},o),{},{components:a})):n.createElement(N,p({ref:e},o))}));function N(t,e){var a=arguments,l=e&&e.mdxType;if("string"==typeof t||l){var r=a.length,p=new Array(r);p[0]=s;var i={};for(var k in e)hasOwnProperty.call(e,k)&&(i[k]=e[k]);i.originalType=t,i[u]="string"==typeof t?t:l,p[1]=i;for(var m=2;m<r;m++)p[m]=a[m];return n.createElement.apply(null,p)}return n.createElement.apply(null,a)}s.displayName="MDXCreateElement"},842:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>o,contentTitle:()=>k,default:()=>s,frontMatter:()=>i,metadata:()=>m,toc:()=>u});var n=a(7462),l=a(3366),r=(a(7294),a(3905)),p=["components"],i={id:"fp8",title:"FP8",sidebar_label:"FP8"},k=void 0,m={unversionedId:"cryptojs/fp8",id:"cryptojs/fp8",title:"FP8",description:"FP8",source:"@site/../docs/cryptojs/fp8.md",sourceDirName:"cryptojs",slug:"/cryptojs/fp8",permalink:"/docs/cryptojs/fp8",draft:!1,tags:[],version:"current",frontMatter:{id:"fp8",title:"FP8",sidebar_label:"FP8"},sidebar:"docs",previous:{title:"FP4",permalink:"/docs/cryptojs/fp4"},next:{title:"FP12",permalink:"/docs/cryptojs/fp12"}},o={},u=[{value:"FP8",id:"fp8",level:2},{value:"new FP8(c, d)",id:"new-fp8c-d",level:3},{value:"fP8.reduce()",id:"fp8reduce",level:3},{value:"fP8.norm()",id:"fp8norm",level:3},{value:"fP8.iszilch()",id:"fp8iszilch",level:3},{value:"fP8.isunity()",id:"fp8isunity",level:3},{value:"fP8.cmove(g, d)",id:"fp8cmoveg-d",level:3},{value:"fP8.isreal()",id:"fp8isreal",level:3},{value:"fP8.real()",id:"fp8real",level:3},{value:"fP8.geta()",id:"fp8geta",level:3},{value:"fP8.getb()",id:"fp8getb",level:3},{value:"fP8.equals(x)",id:"fp8equalsx",level:3},{value:"fP8.copy(x)",id:"fp8copyx",level:3},{value:"fP8.zero()",id:"fp8zero",level:3},{value:"fP8.one(x)",id:"fp8onex",level:3},{value:"fP8.set(c, d)",id:"fp8setc-d",level:3},{value:"fP8.seta(c)",id:"fp8setac",level:3},{value:"fP8.neg()",id:"fp8neg",level:3},{value:"fP8.conj()",id:"fp8conj",level:3},{value:"fP8.nconj()",id:"fp8nconj",level:3},{value:"fP8.add(x)",id:"fp8addx",level:3},{value:"fP8.sub(x)",id:"fp8subx",level:3},{value:"fP8.pmul(s)",id:"fp8pmuls",level:3},{value:"fP8.imul(s)",id:"fp8imuls",level:3},{value:"fP8.sqr()",id:"fp8sqr",level:3},{value:"fP8.mul(y)",id:"fp8muly",level:3},{value:"fP8.toString()",id:"fp8tostring",level:3},{value:"fP8.inverse()",id:"fp8inverse",level:3},{value:"fP8.times_i()",id:"fp8times_i",level:3},{value:"fP8.times_i2()",id:"fp8times_i2",level:3},{value:"fP8.frob(f)",id:"fp8frobf",level:3},{value:"fP8.pow(e)",id:"fp8powe",level:3},{value:"fP8.xtr_A(w, y, z)",id:"fp8xtr_aw-y-z",level:3},{value:"fP8.xtr_D()",id:"fp8xtr_d",level:3},{value:"fP8.xtr_pow(n)",id:"fp8xtr_pown",level:3},{value:"fP8.xtr_pow2()",id:"fp8xtr_pow2",level:3},{value:"fP8.div2()",id:"fp8div2",level:3},{value:"fP8.div_i()",id:"fp8div_i",level:3},{value:"fP8.div_i2()",id:"fp8div_i2",level:3},{value:"fP8.div_2i()",id:"fp8div_2i",level:3},{value:"fP8.qmul(s)",id:"fp8qmuls",level:3},{value:"fP8.tmul(s)",id:"fp8tmuls",level:3},{value:"fP8.sqrt()",id:"fp8sqrt",level:3}],d={toc:u};function s(t){var e=t.components,a=(0,l.Z)(t,p);return(0,r.kt)("wrapper",(0,n.Z)({},d,a,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("a",{name:"FP8"}),(0,r.kt)("h2",{id:"fp8"},"FP8"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": global class",(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP4{"}"}'),"  "),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP8"},"FP8"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#new_FP8_new"},"new FP8(c, d)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP8+reduce"},".reduce()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP8+norm"},".norm()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP8+iszilch"},".iszilch()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP8+isunity"},".isunity()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP8+cmove"},".cmove(g, d)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP8+isreal"},".isreal()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP8+real"},".real()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP8+geta"},".geta()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP8+getb"},".getb()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP8+equals"},".equals(x)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP8+copy"},".copy(x)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP8+zero"},".zero()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP8+one"},".one(x)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP8+set"},".set(c, d)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP8+seta"},".seta(c)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP8+neg"},".neg()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP8+conj"},".conj()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP8+nconj"},".nconj()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP8+add"},".add(x)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP8+sub"},".sub(x)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP8+pmul"},".pmul(s)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP8+imul"},".imul(s)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP8+sqr"},".sqr()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP8+mul"},".mul(y)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP8+toString"},".toString()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP8+inverse"},".inverse()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP8+times_i"},".times_i()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP8+times_i2"},".times_i2()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP8+frob"},".frob(f)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP8+pow"},".pow(e)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP8+xtr_A"},".xtr_A(w, y, z)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP8+xtr_D"},".xtr_D()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP8+xtr_pow"},".xtr_pow(n)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP8+xtr_pow2"},".xtr_pow2()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP8+div2"},".div2()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP8+div_i"},".div_i()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP8+div_i2"},".div_i2()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP8+div_2i"},".div_2i()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP8+qmul"},".qmul(s)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP8+tmul"},".tmul(s)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP8+sqrt"},".sqrt()"))))),(0,r.kt)("a",{name:"new_FP8_new"}),(0,r.kt)("h3",{id:"new-fp8c-d"},"new FP8(c, d)"),(0,r.kt)("p",null,"Creates an instance of FP8"),(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},"Param"),(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},"c"),(0,r.kt)("td",{parentName:"tr",align:null},"FP8 / FP4 instance")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"d"),(0,r.kt)("td",{parentName:"tr",align:null},"FP4 instance")))),(0,r.kt)("a",{name:"FP8+reduce"}),(0,r.kt)("h3",{id:"fp8reduce"},"fP8.reduce()"),(0,r.kt)("p",null,"Reduces all components of possibly unreduced FP8 mod Modulus"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP8"},(0,r.kt)("code",null,"FP8")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP8{"}"}'),"  "),(0,r.kt)("a",{name:"FP8+norm"}),(0,r.kt)("h3",{id:"fp8norm"},"fP8.norm()"),(0,r.kt)("p",null,"Normalises the components of an FP8"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP8"},(0,r.kt)("code",null,"FP8")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP8{"}"}'),"  "),(0,r.kt)("a",{name:"FP8+iszilch"}),(0,r.kt)("h3",{id:"fp8iszilch"},"fP8.iszilch()"),(0,r.kt)("p",null,"Tests for FP8 equal to zero"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP8"},(0,r.kt)("code",null,"FP8")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP8{"}"}'),"  "),(0,r.kt)("a",{name:"FP8+isunity"}),(0,r.kt)("h3",{id:"fp8isunity"},"fP8.isunity()"),(0,r.kt)("p",null,"Tests for FP8 equal to unity"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP8"},(0,r.kt)("code",null,"FP8")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP8{"}"}'),"  "),(0,r.kt)("a",{name:"FP8+cmove"}),(0,r.kt)("h3",{id:"fp8cmoveg-d"},"fP8.cmove(g, d)"),(0,r.kt)("p",null,"Conditional copy of FP8 number"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP8"},(0,r.kt)("code",null,"FP8")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP8{"}"}'),"  "),(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},"Param"),(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},"g"),(0,r.kt)("td",{parentName:"tr",align:null},"FP8 instance")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"d"),(0,r.kt)("td",{parentName:"tr",align:null},"copy depends on this value")))),(0,r.kt)("a",{name:"FP8+isreal"}),(0,r.kt)("h3",{id:"fp8isreal"},"fP8.isreal()"),(0,r.kt)("p",null,"test is w real? That is in a+ib test b is zero"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP8"},(0,r.kt)("code",null,"FP8")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP8{"}"}'),"  "),(0,r.kt)("a",{name:"FP8+real"}),(0,r.kt)("h3",{id:"fp8real"},"fP8.real()"),(0,r.kt)("p",null,"extract real part a"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP8"},(0,r.kt)("code",null,"FP8")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP8{"}"}'),"  "),(0,r.kt)("a",{name:"FP8+geta"}),(0,r.kt)("h3",{id:"fp8geta"},"fP8.geta()"),(0,r.kt)("p",null,"extract a from this"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP8"},(0,r.kt)("code",null,"FP8")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP8{"}"}'),"  "),(0,r.kt)("a",{name:"FP8+getb"}),(0,r.kt)("h3",{id:"fp8getb"},"fP8.getb()"),(0,r.kt)("p",null,"extract b from this"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP8"},(0,r.kt)("code",null,"FP8")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP8{"}"}'),"  "),(0,r.kt)("a",{name:"FP8+equals"}),(0,r.kt)("h3",{id:"fp8equalsx"},"fP8.equals(x)"),(0,r.kt)("p",null,"Tests for equality of two FP8s"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP8"},(0,r.kt)("code",null,"FP8")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP8{"}"}'),"  "),(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},"Param"),(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},"x"),(0,r.kt)("td",{parentName:"tr",align:null},"FP8 instance to compare")))),(0,r.kt)("a",{name:"FP8+copy"}),(0,r.kt)("h3",{id:"fp8copyx"},"fP8.copy(x)"),(0,r.kt)("p",null,"Copy FP8 to another FP8"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP8"},(0,r.kt)("code",null,"FP8")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP8{"}"}'),"  "),(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},"Param"),(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},"x"),(0,r.kt)("td",{parentName:"tr",align:null},"FP8 instance to be copied")))),(0,r.kt)("a",{name:"FP8+zero"}),(0,r.kt)("h3",{id:"fp8zero"},"fP8.zero()"),(0,r.kt)("p",null,"Set FP8 to zero"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP8"},(0,r.kt)("code",null,"FP8")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP8{"}"}'),"  "),(0,r.kt)("a",{name:"FP8+one"}),(0,r.kt)("h3",{id:"fp8onex"},"fP8.one(x)"),(0,r.kt)("p",null,"Set FP8 to unity"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP8"},(0,r.kt)("code",null,"FP8")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP8{"}"}'),"  "),(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},"Param"),(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},"x"),(0,r.kt)("td",{parentName:"tr",align:null},"FP8 instance to be set to one")))),(0,r.kt)("a",{name:"FP8+set"}),(0,r.kt)("h3",{id:"fp8setc-d"},"fP8.set(c, d)"),(0,r.kt)("p",null,"Set FP8 from two FP4 values"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP8"},(0,r.kt)("code",null,"FP8")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP8{"}"}'),"  "),(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},"Param"),(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},"c"),(0,r.kt)("td",{parentName:"tr",align:null},"FP4 instance")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"d"),(0,r.kt)("td",{parentName:"tr",align:null},"FP4 instance")))),(0,r.kt)("a",{name:"FP8+seta"}),(0,r.kt)("h3",{id:"fp8setac"},"fP8.seta(c)"),(0,r.kt)("p",null,"Set FP8 from one FP4 value"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP8"},(0,r.kt)("code",null,"FP8")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP8{"}"}'),"  "),(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},"Param"),(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},"c"),(0,r.kt)("td",{parentName:"tr",align:null},"FP4 instance")))),(0,r.kt)("a",{name:"FP8+neg"}),(0,r.kt)("h3",{id:"fp8neg"},"fP8.neg()"),(0,r.kt)("p",null,"Negation of FP8"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP8"},(0,r.kt)("code",null,"FP8")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP8{"}"}'),"  "),(0,r.kt)("a",{name:"FP8+conj"}),(0,r.kt)("h3",{id:"fp8conj"},"fP8.conj()"),(0,r.kt)("p",null,"Conjugation of FP8"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP8"},(0,r.kt)("code",null,"FP8")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP8{"}"}'),"  "),(0,r.kt)("a",{name:"FP8+nconj"}),(0,r.kt)("h3",{id:"fp8nconj"},"fP8.nconj()"),(0,r.kt)("p",null,"Negative conjugation of FP8"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP8"},(0,r.kt)("code",null,"FP8")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP8{"}"}'),"  "),(0,r.kt)("a",{name:"FP8+add"}),(0,r.kt)("h3",{id:"fp8addx"},"fP8.add(x)"),(0,r.kt)("p",null,"addition of two FP8s"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP8"},(0,r.kt)("code",null,"FP8")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP8{"}"}'),"  "),(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},"Param"),(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},"x"),(0,r.kt)("td",{parentName:"tr",align:null},"FP8 instance")))),(0,r.kt)("a",{name:"FP8+sub"}),(0,r.kt)("h3",{id:"fp8subx"},"fP8.sub(x)"),(0,r.kt)("p",null,"subtraction of two FP8s"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP8"},(0,r.kt)("code",null,"FP8")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP8{"}"}'),"  "),(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},"Param"),(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},"x"),(0,r.kt)("td",{parentName:"tr",align:null},"FP8 instance")))),(0,r.kt)("a",{name:"FP8+pmul"}),(0,r.kt)("h3",{id:"fp8pmuls"},"fP8.pmul(s)"),(0,r.kt)("p",null,"Multiplication of an FP8 by an FP8"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP8"},(0,r.kt)("code",null,"FP8")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP8{"}"}'),"  "),(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},"Param"),(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},"s"),(0,r.kt)("td",{parentName:"tr",align:null},"FP8 instance")))),(0,r.kt)("a",{name:"FP8+imul"}),(0,r.kt)("h3",{id:"fp8imuls"},"fP8.imul(s)"),(0,r.kt)("p",null,"Multiplication of an FP8 by a small integer"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP8"},(0,r.kt)("code",null,"FP8")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP8{"}"}'),"  "),(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},"Param"),(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},"s"),(0,r.kt)("td",{parentName:"tr",align:null},"integer")))),(0,r.kt)("a",{name:"FP8+sqr"}),(0,r.kt)("h3",{id:"fp8sqr"},"fP8.sqr()"),(0,r.kt)("p",null,"Fast Squaring of an FP8"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP8"},(0,r.kt)("code",null,"FP8")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP8{"}"}'),"  "),(0,r.kt)("a",{name:"FP8+mul"}),(0,r.kt)("h3",{id:"fp8muly"},"fP8.mul(y)"),(0,r.kt)("p",null,"Full unconditional Multiplication of two FP8s"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP8"},(0,r.kt)("code",null,"FP8")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP8{"}"}'),"  "),(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},"Param"),(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},"y"),(0,r.kt)("td",{parentName:"tr",align:null},"FP8 instance, the multiplier")))),(0,r.kt)("a",{name:"FP8+toString"}),(0,r.kt)("h3",{id:"fp8tostring"},"fP8.toString()"),(0,r.kt)("p",null,"convert to hex string"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP8"},(0,r.kt)("code",null,"FP8")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP8{"}"}'),"  "),(0,r.kt)("a",{name:"FP8+inverse"}),(0,r.kt)("h3",{id:"fp8inverse"},"fP8.inverse()"),(0,r.kt)("p",null,"Inverting an FP8"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP8"},(0,r.kt)("code",null,"FP8")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP8{"}"}'),"  "),(0,r.kt)("a",{name:"FP8+times_i"}),(0,r.kt)("h3",{id:"fp8times_i"},"fP8.times_i()"),(0,r.kt)("p",null,"multiplies an FP8 instance by irreducible polynomial sqrt(1+sqrt(-1))"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP8"},(0,r.kt)("code",null,"FP8")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP8{"}"}'),"  "),(0,r.kt)("a",{name:"FP8+times_i2"}),(0,r.kt)("h3",{id:"fp8times_i2"},"fP8.times_i2()"),(0,r.kt)("p",null,"multiplies an FP8 instance by irreducible polynomial (1+sqrt(-1))"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP8"},(0,r.kt)("code",null,"FP8")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP8{"}"}'),"  "),(0,r.kt)("a",{name:"FP8+frob"}),(0,r.kt)("h3",{id:"fp8frobf"},"fP8.frob(f)"),(0,r.kt)("p",null,"Raises an FP8 to the power of the internal modulus p, using the Frobenius"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP8"},(0,r.kt)("code",null,"FP8")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP8{"}"}'),"  "),(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},"Param"),(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},"f"),(0,r.kt)("td",{parentName:"tr",align:null},"Modulus")))),(0,r.kt)("a",{name:"FP8+pow"}),(0,r.kt)("h3",{id:"fp8powe"},"fP8.pow(e)"),(0,r.kt)("p",null,"Raises an FP8 to the power of a BIG"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP8"},(0,r.kt)("code",null,"FP8")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP8{"}"}'),"  "),(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},"Param"),(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},"e"),(0,r.kt)("td",{parentName:"tr",align:null},"BIG instance exponent")))),(0,r.kt)("a",{name:"FP8+xtr_A"}),(0,r.kt)("h3",{id:"fp8xtr_aw-y-z"},"fP8.xtr_A(w, y, z)"),(0,r.kt)("p",null,"Calculates the XTR addition function r=w_x-conj(x)_y+z"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP8"},(0,r.kt)("code",null,"FP8")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP8{"}"}'),"  "),(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},"Param"),(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},"w"),(0,r.kt)("td",{parentName:"tr",align:null},"FP8 instance")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"y"),(0,r.kt)("td",{parentName:"tr",align:null},"FP8 instance")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"z"),(0,r.kt)("td",{parentName:"tr",align:null},"FP8 instance")))),(0,r.kt)("a",{name:"FP8+xtr_D"}),(0,r.kt)("h3",{id:"fp8xtr_d"},"fP8.xtr_D()"),(0,r.kt)("p",null,"Calculates the XTR doubling function r=x^2-2","*","conj(x)"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP8"},(0,r.kt)("code",null,"FP8")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP8{"}"}'),"  "),(0,r.kt)("a",{name:"FP8+xtr_pow"}),(0,r.kt)("h3",{id:"fp8xtr_pown"},"fP8.xtr_pow(n)"),(0,r.kt)("p",null,"Calculates FP8 trace of an FP8 raised to the power of a BIG number"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP8"},(0,r.kt)("code",null,"FP8")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP8{"}"}'),"  "),(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},"Param"),(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},"n"),(0,r.kt)("td",{parentName:"tr",align:null},"Big number")))),(0,r.kt)("a",{name:"FP8+xtr_pow2"}),(0,r.kt)("h3",{id:"fp8xtr_pow2"},"fP8.xtr_pow2()"),(0,r.kt)("p",null,"Calculates FP8 trace of c^a.d^b, where c and d are derived from FP8 traces of FP8s"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP8"},(0,r.kt)("code",null,"FP8")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP8{"}"}'),"  "),(0,r.kt)("a",{name:"FP8+div2"}),(0,r.kt)("h3",{id:"fp8div2"},"fP8.div2()"),(0,r.kt)("p",null,"Divide an FP8 by 2"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP8"},(0,r.kt)("code",null,"FP8")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP8{"}"}'),"  "),(0,r.kt)("a",{name:"FP8+div_i"}),(0,r.kt)("h3",{id:"fp8div_i"},"fP8.div_i()"),(0,r.kt)("p",null,"Divide FP8 number by QNR"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP8"},(0,r.kt)("code",null,"FP8")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP8{"}"}'),"  "),(0,r.kt)("a",{name:"FP8+div_i2"}),(0,r.kt)("h3",{id:"fp8div_i2"},"fP8.div_i2()"),(0,r.kt)("p",null,"Divide an FP8 by QNR twice"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP8"},(0,r.kt)("code",null,"FP8")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP8{"}"}'),"  "),(0,r.kt)("a",{name:"FP8+div_2i"}),(0,r.kt)("h3",{id:"fp8div_2i"},"fP8.div_2i()"),(0,r.kt)("p",null,"Divide an FP8 by QNR/2"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP8"},(0,r.kt)("code",null,"FP8")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP8{"}"}'),"  "),(0,r.kt)("a",{name:"FP8+qmul"}),(0,r.kt)("h3",{id:"fp8qmuls"},"fP8.qmul(s)"),(0,r.kt)("p",null,"Multiplication of an FP8 by an FP2"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP8"},(0,r.kt)("code",null,"FP8")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP8{"}"}'),"  "),(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},"Param"),(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},"s"),(0,r.kt)("td",{parentName:"tr",align:null},"FP2 multiplier")))),(0,r.kt)("a",{name:"FP8+tmul"}),(0,r.kt)("h3",{id:"fp8tmuls"},"fP8.tmul(s)"),(0,r.kt)("p",null,"Multiplication of an FP8 by an FP"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP8"},(0,r.kt)("code",null,"FP8")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP8{"}"}'),"  "),(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},"Param"),(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},"s"),(0,r.kt)("td",{parentName:"tr",align:null},"FP multiplier")))),(0,r.kt)("a",{name:"FP8+sqrt"}),(0,r.kt)("h3",{id:"fp8sqrt"},"fP8.sqrt()"),(0,r.kt)("p",null,"Calculate square root of an FP8"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP8"},(0,r.kt)("code",null,"FP8")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP8{"}"}')))}s.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/263768e1.7de5aad9.js b/assets/js/263768e1.7de5aad9.js
new file mode 100644
index 0000000..fdb013f
--- /dev/null
+++ b/assets/js/263768e1.7de5aad9.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3074],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>y});var r=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 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<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,r,i=function(e,t){if(null==e)return{};var n,r,i={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(i[n]=e[n]);return i}(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)&&(i[n]=e[n])}return i}var c=r.createContext({}),l=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},d=function(e){var t=l(e.components);return r.createElement(c.Provider,{value:t},e.children)},u="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,i=e.mdxType,o=e.originalType,c=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),u=l(n),m=i,y=u["".concat(c,".").concat(m)]||u[m]||p[m]||o;return n?r.createElement(y,a(a({ref:t},d),{},{components:n})):r.createElement(y,a({ref:t},d))}));function y(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,a=new Array(o);a[0]=m;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s[u]="string"==typeof e?e:i,a[1]=s;for(var l=2;l<o;l++)a[l]=n[l];return r.createElement.apply(null,a)}return r.createElement.apply(null,n)}m.displayName="MDXCreateElement"},1604:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>c,default:()=>m,frontMatter:()=>s,metadata:()=>l,toc:()=>u});var r=n(7462),i=n(3366),o=(n(7294),n(3905)),a=["components"],s={id:"identity-documents",title:"Identity Documents",sidebar_label:"Identity Documents"},c=void 0,l={unversionedId:"dta-details/identity-documents",id:"dta-details/identity-documents",title:"Identity Documents",description:"The first problem that a Milagro D-TA aims to solve is how entities in the system can identify and trust each other. In order to participate in the Milagro D-TA ecosystem each entity must publish a set of public keys into IPFS. The IPFS hash for an identity documents is then the ID for each entity running a D-TA.",source:"@site/../docs/dta-details/identity-documents.md",sourceDirName:"dta-details",slug:"/dta-details/identity-documents",permalink:"/docs/dta-details/identity-documents",draft:!1,tags:[],version:"current",frontMatter:{id:"identity-documents",title:"Identity Documents",sidebar_label:"Identity Documents"},sidebar:"docs",previous:{title:"Configuration",permalink:"/docs/dta-details/configuration"},next:{title:"Encrypted Envelope",permalink:"/docs/dta-details/encrypted-envelope"}},d={},u=[],p={toc:u};function m(e){var t=e.components,n=(0,i.Z)(e,a);return(0,o.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"The first problem that a Milagro D-TA aims to solve is how entities in the system can identify and trust each other. In order to participate in the Milagro D-TA ecosystem each entity must publish a set of public keys into IPFS. The IPFS hash for an identity documents is then the ID for each entity running a D-TA."),(0,o.kt)("p",null,"In order to create an identity document Milagro D-TA provides the following endpoint."),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"http://localhost:3000/swagger/index.html#/identity/createIdentity"},"POST: /identity")," - An Identity Document contains public keys for signing and key encapsulation. "),(0,o.kt)("admonition",{title:"The Milagro DTA communication protocol uses protobufs for serialization. ",type:"note"},(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("a",{parentName:"p",href:"https://developers.google.com/protocol-buffers/"},"Click here for more information about Protocol Buffers"),".")),(0,o.kt)("p",null,"The definition of an identity document is:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},"\nmessage IDDocument {\n    string IDDocumentCID            = 2 ;\n    string AuthenticationReference  = 3 ;\n    string BeneficiaryECPublicKey   = 4 ;    \n    string SikePublicKey            = 5 ;\n    string BlsPublicKey             = 6 ;\n    int64 Timestamp                 = 7 ;\n}\n\n\n")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"AuthenticationReference")," refers to Milagro's out of the box ",(0,o.kt)("a",{parentName:"li",href:"/docs/dta-details/authentication"},"oAuth integration"),".")),(0,o.kt)("p",null,"The node that is used to create an Identity Document will store the seed and secret keys associated with the Identity. In the RC1 release these will be stored as a JSON file in the key value store:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-json"},'\n//IdentitySecrets - keys required for decryption and signing\ntype IdentitySecrets struct {\n    Name            string `json:"name"`\n    Seed            string `json:"seed"`\n    SikeSecretKey   string `json:"sikeSecretKey"`\n    BlsSecretKey    string `json:"BlsSecretKey"`\n}\n\n')))}m.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/2797bd38.5d8e48a7.js b/assets/js/2797bd38.5d8e48a7.js
new file mode 100644
index 0000000..e43aa30
--- /dev/null
+++ b/assets/js/2797bd38.5d8e48a7.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4913],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>y});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 c(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 l=n.createContext({}),p=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},s="mdxType",f={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,o=e.originalType,l=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),s=p(r),m=a,y=s["".concat(l,".").concat(m)]||s[m]||f[m]||o;return r?n.createElement(y,i(i({ref:t},u),{},{components:r})):n.createElement(y,i({ref:t},u))}));function y(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=m;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c[s]="string"==typeof e?e:a,i[1]=c;for(var p=2;p<o;p++)i[p]=r[p];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},7525:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>m,frontMatter:()=>c,metadata:()=>p,toc:()=>s});var n=r(7462),a=r(3366),o=(r(7294),r(3905)),i=["components"],c={id:"amcl-c-api-2.0.0",title:"AMCL C API 2.0.0",sidebar_label:"AMCL C API 2.0.0"},l=void 0,p={unversionedId:"amcl-c-api-2.0.0",id:"amcl-c-api-2.0.0",title:"AMCL C API 2.0.0",description:"Doxygen support is available for Milagro Crypto Library.",source:"@site/../docs/amcl-c-api-2.0.0.md",sourceDirName:".",slug:"/amcl-c-api-2.0.0",permalink:"/docs/amcl-c-api-2.0.0",draft:!1,tags:[],version:"current",frontMatter:{id:"amcl-c-api-2.0.0",title:"AMCL C API 2.0.0",sidebar_label:"AMCL C API 2.0.0"},sidebar:"docs",previous:{title:"AMCL Overview",permalink:"/docs/amcl-overview"},next:{title:"AMCL JavaScript API",permalink:"/docs/cryptojs/amcl-javascript-api"}},u={},s=[],f={toc:s};function m(e){var t=e.components,r=(0,a.Z)(e,i);return(0,o.kt)("wrapper",(0,n.Z)({},f,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Doxygen support is available for Milagro Crypto Library."),(0,o.kt)("p",null,"An online version of the Doxygen output is available for viewing in a web browser ",(0,o.kt)("a",{href:"/cdocs/index.html",target:"_blank"},"here"),"."),(0,o.kt)("p",null,"PDF of the Doxygen output is available for download ",(0,o.kt)("a",{href:"/files/amcl-doxygen-2.0.0.pdf",target:"_blank"},"here"),"."),(0,o.kt)("p",null,"Supported admonition types are: caution, note, important, tip, warning."))}m.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/2dbc89af.1297ece8.js b/assets/js/2dbc89af.1297ece8.js
new file mode 100644
index 0000000..7210b35
--- /dev/null
+++ b/assets/js/2dbc89af.1297ece8.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9753],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>u});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 p(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 i=a.createContext({}),d=function(e){var t=a.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):p(p({},t),e)),n},c=function(e){var t=d(e.components);return a.createElement(i.Provider,{value:t},e.children)},m="mdxType",s={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},k=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,i=e.parentName,c=o(e,["components","mdxType","originalType","parentName"]),m=d(n),k=r,u=m["".concat(i,".").concat(k)]||m[k]||s[k]||l;return n?a.createElement(u,p(p({ref:t},c),{},{components:n})):a.createElement(u,p({ref:t},c))}));function u(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,p=new Array(l);p[0]=k;var o={};for(var i in t)hasOwnProperty.call(t,i)&&(o[i]=t[i]);o.originalType=e,o[m]="string"==typeof e?e:r,p[1]=o;for(var d=2;d<l;d++)p[d]=n[d];return a.createElement.apply(null,p)}return a.createElement.apply(null,n)}k.displayName="MDXCreateElement"},2401:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>k,frontMatter:()=>o,metadata:()=>d,toc:()=>m});var a=n(7462),r=n(3366),l=(n(7294),n(3905)),p=["components"],o={id:"rand",title:"RAND",sidebar_label:"RAND"},i=void 0,d={unversionedId:"cryptojs/rand",id:"cryptojs/rand",title:"RAND",description:"RAND",source:"@site/../docs/cryptojs/rand.md",sourceDirName:"cryptojs",slug:"/cryptojs/rand",permalink:"/docs/cryptojs/rand",draft:!1,tags:[],version:"current",frontMatter:{id:"rand",title:"RAND",sidebar_label:"RAND"},sidebar:"docs",previous:{title:"PAIR256",permalink:"/docs/cryptojs/pair256"},next:{title:"RSA",permalink:"/docs/cryptojs/rsa"}},c={},m=[{value:"RAND",id:"rand",level:2},{value:"new RAND()",id:"new-rand",level:3},{value:"ranD.clean()",id:"randclean",level:3},{value:"ranD.sbrand()",id:"randsbrand",level:3},{value:"ranD.seed(rawlen, raw)",id:"randseedrawlen-raw",level:3},{value:"ranD.getByte()",id:"randgetbyte",level:3},{value:"RAND.pack()",id:"randpack",level:3}],s={toc:m};function k(e){var t=e.components,n=(0,r.Z)(e,p);return(0,l.kt)("wrapper",(0,a.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("a",{name:"RAND"}),(0,l.kt)("h2",{id:"rand"},"RAND"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": global class",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}RAND{"}"}'),"  "),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#RAND"},"RAND"),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#new_RAND_new"},"new RAND()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("em",{parentName:"li"},"instance"),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#RAND+clean"},".clean()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#RAND+sbrand"},".sbrand()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#RAND+seed"},".seed(rawlen, raw)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#RAND+getByte"},".getByte()")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("em",{parentName:"li"},"static"),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#RAND.pack"},".pack()"))))))),(0,l.kt)("a",{name:"new_RAND_new"}),(0,l.kt)("h3",{id:"new-rand"},"new RAND()"),(0,l.kt)("p",null,"Creates an instance of RAND"),(0,l.kt)("a",{name:"RAND+clean"}),(0,l.kt)("h3",{id:"randclean"},"ranD.clean()"),(0,l.kt)("p",null,"Delete all internal state of a random number generator"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#RAND"},(0,l.kt)("code",null,"RAND")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}RAND{"}"}'),"  "),(0,l.kt)("a",{name:"RAND+sbrand"}),(0,l.kt)("h3",{id:"randsbrand"},"ranD.sbrand()"),(0,l.kt)("p",null,"Marsaglia & Zaman random number generator"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#RAND"},(0,l.kt)("code",null,"RAND")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}RAND{"}"}'),"  "),(0,l.kt)("a",{name:"RAND+seed"}),(0,l.kt)("h3",{id:"randseedrawlen-raw"},"ranD.seed(rawlen, raw)"),(0,l.kt)("p",null,"Initialize RNG with some real entropy from some external source"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#RAND"},(0,l.kt)("code",null,"RAND")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}RAND{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"rawlen"),(0,l.kt)("td",{parentName:"tr",align:null},"the number of seed bytes provided")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"raw"),(0,l.kt)("td",{parentName:"tr",align:null},"an array of seed bytes")))),(0,l.kt)("a",{name:"RAND+getByte"}),(0,l.kt)("h3",{id:"randgetbyte"},"ranD.getByte()"),(0,l.kt)("p",null,"Get random byte"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#RAND"},(0,l.kt)("code",null,"RAND")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}RAND{"}"}'),"  "),(0,l.kt)("a",{name:"RAND.pack"}),(0,l.kt)("h3",{id:"randpack"},"RAND.pack()"),(0,l.kt)("p",null,"Pack 4 bytes into a 32-bit Word"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#RAND"},(0,l.kt)("code",null,"RAND")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}RAND{"}"}')))}k.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/31ac37dd.1199d7fb.js b/assets/js/31ac37dd.1199d7fb.js
new file mode 100644
index 0000000..fa551a3
--- /dev/null
+++ b/assets/js/31ac37dd.1199d7fb.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4054],{3905:(e,t,r)=>{r.d(t,{Zo:()=>l,kt:()=>d});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(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?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(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,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(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)&&(o[r]=e[r])}return o}var c=n.createContext({}),p=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},l=function(e){var t=p(e.components);return n.createElement(c.Provider,{value:t},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,l=s(e,["components","mdxType","originalType","parentName"]),u=p(r),f=o,d=u["".concat(c,".").concat(f)]||u[f]||m[f]||a;return r?n.createElement(d,i(i({ref:t},l),{},{components:r})):n.createElement(d,i({ref:t},l))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=f;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s[u]="string"==typeof e?e:o,i[1]=s;for(var p=2;p<a;p++)i[p]=r[p];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}f.displayName="MDXCreateElement"},2279:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>c,default:()=>f,frontMatter:()=>s,metadata:()=>p,toc:()=>u});var n=r(7462),o=r(3366),a=(r(7294),r(3905)),i=["components"],s={title:"Miss us? We missed you.",author:"Brian Spector",authorURL:"http://twitter.com/bspector"},c=void 0,p={permalink:"/blog/2019/06/10/miss-me",source:"@site/blog/2019-06-10-miss-me.md",title:"Miss us? We missed you.",description:"It's not often that Apache Incubation projects start, lay dormant for three years, and then spring to life. Yet, it's really happening. I pleased to report that in the past two weeks Milagro has added three new contributors, one new PPMC member and one new mentor. We launched a spartan, yet esthetically pleasing, project website. And, we have a roadmap.....",date:"2019-06-10T00:00:00.000Z",formattedDate:"June 10, 2019",tags:[],readingTime:.315,hasTruncateMarker:!1,authors:[{name:"Brian Spector",url:"http://twitter.com/bspector"}],frontMatter:{title:"Miss us? We missed you.",author:"Brian Spector",authorURL:"http://twitter.com/bspector"}},l={authorsImageUrls:[void 0]},u=[],m={toc:u};function f(e){var t=e.components,r=(0,o.Z)(e,i);return(0,a.kt)("wrapper",(0,n.Z)({},m,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"It's not often that Apache Incubation projects start, lay dormant for three years, and then spring to life. Yet, it's really happening. I pleased to report that in the past two weeks Milagro has added three new contributors, one new PPMC member and one new mentor. We launched a spartan, yet esthetically pleasing, project website. And, we have a roadmap....."),(0,a.kt)("p",null,"More details soon."))}f.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/3512b277.fc607c19.js b/assets/js/3512b277.fc607c19.js
new file mode 100644
index 0000000..bb029b8
--- /dev/null
+++ b/assets/js/3512b277.fc607c19.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9602],{3905:(e,t,a)=>{a.d(t,{Zo:()=>h,kt:()=>k});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 l(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 p(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?l(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):l(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,r=function(e,t){if(null==e)return{};var a,n,r={},l=Object.keys(e);for(n=0;n<l.length;n++)a=l[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n<l.length;n++)a=l[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var o=n.createContext({}),i=function(e){var t=n.useContext(o),a=t;return e&&(a="function"==typeof e?e(t):p(p({},t),e)),a},h=function(e){var t=i(e.components);return n.createElement(o.Provider,{value:t},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,l=e.originalType,o=e.parentName,h=s(e,["components","mdxType","originalType","parentName"]),c=i(a),u=r,k=c["".concat(o,".").concat(u)]||c[u]||m[u]||l;return a?n.createElement(k,p(p({ref:t},h),{},{components:a})):n.createElement(k,p({ref:t},h))}));function k(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=a.length,p=new Array(l);p[0]=u;var s={};for(var o in t)hasOwnProperty.call(t,o)&&(s[o]=t[o]);s.originalType=e,s[c]="string"==typeof e?e:r,p[1]=s;for(var i=2;i<l;i++)p[i]=a[i];return n.createElement.apply(null,p)}return n.createElement.apply(null,a)}u.displayName="MDXCreateElement"},1596:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>h,contentTitle:()=>o,default:()=>u,frontMatter:()=>s,metadata:()=>i,toc:()=>c});var n=a(7462),r=a(3366),l=(a(7294),a(3905)),p=["components"],s={id:"hash512",title:"HASH512",sidebar_label:"HASH512"},o=void 0,i={unversionedId:"cryptojs/hash512",id:"cryptojs/hash512",title:"HASH512",description:"HASH512",source:"@site/../docs/cryptojs/hash512.md",sourceDirName:"cryptojs",slug:"/cryptojs/hash512",permalink:"/docs/cryptojs/hash512",draft:!1,tags:[],version:"current",frontMatter:{id:"hash512",title:"HASH512",sidebar_label:"HASH512"},sidebar:"docs",previous:{title:"HASH384",permalink:"/docs/cryptojs/hash384"},next:{title:"MPIN",permalink:"/docs/cryptojs/mpin"}},h={},c=[{value:"HASH512",id:"hash512",level:2},{value:"new HASH512()",id:"new-hash512",level:3},{value:"hasH512.init()",id:"hash512init",level:3},{value:"hasH512.process(byt)",id:"hash512processbyt",level:3},{value:"hasH512.process_array(b)",id:"hash512process_arrayb",level:3},{value:"hasH512.process_num(n)",id:"hash512process_numn",level:3},{value:"hasH512.hash() \u21d2",id:"hash512hash-",level:3}],m={toc:c};function u(e){var t=e.components,a=(0,r.Z)(e,p);return(0,l.kt)("wrapper",(0,n.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("a",{name:"HASH512"}),(0,l.kt)("h2",{id:"hash512"},"HASH512"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": global class",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}HASH512{"}"}'),"  "),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#HASH512"},"HASH512"),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#new_HASH512_new"},"new HASH512()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#HASH512+init"},".init()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#HASH512+process"},".process(byt)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#HASH512+process_array"},".process_array(b)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#HASH512+process_num"},".process_num(n)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#HASH512+hash"},".hash()")," \u21d2")))),(0,l.kt)("a",{name:"new_HASH512_new"}),(0,l.kt)("h3",{id:"new-hash512"},"new HASH512()"),(0,l.kt)("p",null,"Creates an instance of HASH512"),(0,l.kt)("a",{name:"HASH512+init"}),(0,l.kt)("h3",{id:"hash512init"},"hasH512.init()"),(0,l.kt)("p",null,"Initialise Hash function"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#HASH512"},(0,l.kt)("code",null,"HASH512")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}HASH512{"}"}'),"  "),(0,l.kt)("a",{name:"HASH512+process"}),(0,l.kt)("h3",{id:"hash512processbyt"},"hasH512.process(byt)"),(0,l.kt)("p",null,"Process a single byte"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#HASH512"},(0,l.kt)("code",null,"HASH512")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}HASH512{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"byt"),(0,l.kt)("td",{parentName:"tr",align:null},"byte to be included in hash")))),(0,l.kt)("a",{name:"HASH512+process_array"}),(0,l.kt)("h3",{id:"hash512process_arrayb"},"hasH512.process_array(b)"),(0,l.kt)("p",null,"Process an array of bytes"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#HASH512"},(0,l.kt)("code",null,"HASH512")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}HASH512{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"b"),(0,l.kt)("td",{parentName:"tr",align:null},"byte arrray to be included in hash")))),(0,l.kt)("a",{name:"HASH512+process_num"}),(0,l.kt)("h3",{id:"hash512process_numn"},"hasH512.process_num(n)"),(0,l.kt)("p",null,"Process a 32-bit integer"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#HASH512"},(0,l.kt)("code",null,"HASH512")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}HASH512{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"n"),(0,l.kt)("td",{parentName:"tr",align:null},"Integer to be included in hash")))),(0,l.kt)("a",{name:"HASH512+hash"}),(0,l.kt)("h3",{id:"hash512hash-"},"hasH512.hash() \u21d2"),(0,l.kt)("p",null,"Generate 32-byte hash"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#HASH512"},(0,l.kt)("code",null,"HASH512")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": digest 32-byte hash",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}HASH512{"}"}')))}u.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/3a69e0cd.e5b74282.js b/assets/js/3a69e0cd.e5b74282.js
new file mode 100644
index 0000000..81e7535
--- /dev/null
+++ b/assets/js/3a69e0cd.e5b74282.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[7735],{2727:(e,t,n)=>{n.r(t),n.d(t,{default:()=>m});var r=n(4578),a=n(3285),l=n(7294),o=function(e){return l.createElement("div",e)},i=function(e){return l.createElement("div",e)},c=function(e){return l.createElement("div",e)},u=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this.props,t=e.siteConfig,n=(e.language,t.baseUrl),r=(t.docsUrl,function(e){return l.createElement("div",{className:"homeContainer"},l.createElement("div",{className:"homeSplashFade"},l.createElement("div",{className:"wrapper homeWrapper"},e.children)))}),a=function(e){return l.createElement("div",{className:"projectLogo"},l.createElement("img",{src:e.img_src,alt:"Project Logo"}))},o=function(){return l.createElement("h2",{className:"projectTitle"},t.title,l.createElement("small",null,t.tagline))};return l.createElement(r,null,l.createElement(a,{img_src:n+"img/undraw_monitor.svg"}),l.createElement("div",{className:"inner"},l.createElement(o,{siteConfig:t})))},t}(l.Component),s=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this.props,t=e.config,n=e.language,r=void 0===n?"":n,a=t.baseUrl,s=function(e){return l.createElement(i,{padding:["bottom","top"],id:e.id,background:e.background},l.createElement(c,{align:"center",contents:e.children,layout:e.layout}))},m=function(){return l.createElement("div",{className:"productShowcaseSection paddingBottom",style:{textAlign:"center"}},l.createElement("h2",null,"Milagro Server"),l.createElement(o,null,"These are features of this project"))},g=function(){return l.createElement(s,{id:"try"},[{content:"To make your landing page more attractive, use illustrations! Check out [**unDraw**](https://undraw.co/) which provides you with customizable illustrations which are free to use. The illustrations you see on this page are from unDraw.",image:a+"img/undraw_code_review.svg",imageAlign:"left",title:"Wonderful SVG Illustrations"}])},d=function(){return l.createElement(s,{background:"light"},[{content:"Each new Docusaurus project has **randomly-generated** theme colors.",image:a+"img/undraw_youtube_tutorial.svg",imageAlign:"right",title:"Randomly Generated Theme Colors"}])},f=function(){return l.createElement(s,{layout:"fourColumn"},[{content:"This is the content of my feature",image:a+"img/undraw_react.svg",imageAlign:"top",title:"Zero-knowledge proof multi-factor authentication"},{content:"The content of my second feature",image:a+"img/undraw_operating_system.svg",imageAlign:"top",title:"Decentralized custody of digital assets"}])};return l.createElement("div",null,l.createElement(u,{siteConfig:t,language:r}),l.createElement("div",{className:"mainContainer"},l.createElement(f,null),l.createElement(m,null),l.createElement(d,null),l.createElement(g,null)))},t}(l.Component);const m=function(e){return l.createElement(a.Z,null,l.createElement(s,e))}}}]);
\ No newline at end of file
diff --git a/assets/js/4200b1a9.78b4ed6f.js b/assets/js/4200b1a9.78b4ed6f.js
new file mode 100644
index 0000000..1a619c3
--- /dev/null
+++ b/assets/js/4200b1a9.78b4ed6f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[866],{4612:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"/2019/06/10/miss-me","metadata":{"permalink":"/blog/2019/06/10/miss-me","source":"@site/blog/2019-06-10-miss-me.md","title":"Miss us? We missed you.","description":"It\'s not often that Apache Incubation projects start, lay dormant for three years, and then spring to life. Yet, it\'s really happening. I pleased to report that in the past two weeks Milagro has added three new contributors, one new PPMC member and one new mentor. We launched a spartan, yet esthetically pleasing, project website. And, we have a roadmap.....","date":"2019-06-10T00:00:00.000Z","formattedDate":"June 10, 2019","tags":[],"readingTime":0.315,"hasTruncateMarker":false,"authors":[{"name":"Brian Spector","url":"http://twitter.com/bspector"}],"frontMatter":{"title":"Miss us? We missed you.","author":"Brian Spector","authorURL":"http://twitter.com/bspector"}},"content":"It\'s not often that Apache Incubation projects start, lay dormant for three years, and then spring to life. Yet, it\'s really happening. I pleased to report that in the past two weeks Milagro has added three new contributors, one new PPMC member and one new mentor. We launched a spartan, yet esthetically pleasing, project website. And, we have a roadmap.....\\n\\nMore details soon."}]}')}}]);
\ No newline at end of file
diff --git a/assets/js/42231959.f1044068.js b/assets/js/42231959.f1044068.js
new file mode 100644
index 0000000..7e4edef
--- /dev/null
+++ b/assets/js/42231959.f1044068.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4975],{3905:(e,t,r)=>{r.d(t,{Zo:()=>m,kt:()=>d});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 p(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 l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?p(Object(r),!0).forEach((function(t){n(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):p(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={},p=Object.keys(e);for(a=0;a<p.length;a++)r=p[a],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var p=Object.getOwnPropertySymbols(e);for(a=0;a<p.length;a++)r=p[a],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var o=a.createContext({}),i=function(e){var t=a.useContext(o),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},m=function(e){var t=i(e.components);return a.createElement(o.Provider,{value:t},e.children)},k="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},b=a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,p=e.originalType,o=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),k=i(r),b=n,d=k["".concat(o,".").concat(b)]||k[b]||u[b]||p;return r?a.createElement(d,l(l({ref:t},m),{},{components:r})):a.createElement(d,l({ref:t},m))}));function d(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var p=r.length,l=new Array(p);l[0]=b;var s={};for(var o in t)hasOwnProperty.call(t,o)&&(s[o]=t[o]);s.originalType=e,s[k]="string"==typeof e?e:n,l[1]=s;for(var i=2;i<p;i++)l[i]=r[i];return a.createElement.apply(null,l)}return a.createElement.apply(null,r)}b.displayName="MDXCreateElement"},5193:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>m,contentTitle:()=>o,default:()=>b,frontMatter:()=>s,metadata:()=>i,toc:()=>k});var a=r(7462),n=r(3366),p=(r(7294),r(3905)),l=["components"],s={id:"bls192",title:"BLS192",sidebar_label:"BLS192"},o=void 0,i={unversionedId:"cryptojs/bls192",id:"cryptojs/bls192",title:"BLS192",description:"BLS192",source:"@site/../docs/cryptojs/bls192.md",sourceDirName:"cryptojs",slug:"/cryptojs/bls192",permalink:"/docs/cryptojs/bls192",draft:!1,tags:[],version:"current",frontMatter:{id:"bls192",title:"BLS192",sidebar_label:"BLS192"},sidebar:"docs",previous:{title:"BLS",permalink:"/docs/cryptojs/bls"},next:{title:"BLS256",permalink:"/docs/cryptojs/bls256"}},m={},k=[{value:"BLS192",id:"bls192",level:2},{value:"new BLS192()",id:"new-bls192",level:3},{value:"BLS192.bytestostring() \u21d2",id:"bls192bytestostring-",level:3},{value:"BLS192.stringtobytes() \u21d2",id:"bls192stringtobytes-",level:3},{value:"BLS192.bls_hashit() \u21d2",id:"bls192bls_hashit-",level:3},{value:"BLS192.KeyPairGenerate() \u21d2",id:"bls192keypairgenerate-",level:3},{value:"BLS192.sign() \u21d2",id:"bls192sign-",level:3},{value:"BLS192.verify() \u21d2",id:"bls192verify-",level:3},{value:"BLS192.add_G1() \u21d2",id:"bls192add_g1-",level:3},{value:"BLS192.add_G2() \u21d2",id:"bls192add_g2-",level:3}],u={toc:k};function b(e){var t=e.components,r=(0,n.Z)(e,l);return(0,p.kt)("wrapper",(0,a.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,p.kt)("a",{name:"BLS192"}),(0,p.kt)("h2",{id:"bls192"},"BLS192"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": global class",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BLS192{"}"}'),"  "),(0,p.kt)("ul",null,(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BLS192"},"BLS192"),(0,p.kt)("ul",{parentName:"li"},(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#new_BLS192_new"},"new BLS192()")),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BLS192.bytestostring"},".bytestostring()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BLS192.stringtobytes"},".stringtobytes()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BLS192.bls_hashit"},".bls_hashit()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BLS192.KeyPairGenerate"},".KeyPairGenerate()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BLS192.sign"},".sign()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BLS192.verify"},".verify()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BLS192.add_G1"},".add_G1()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BLS192.add_G2"},".add_G2()")," \u21d2")))),(0,p.kt)("a",{name:"new_BLS192_new"}),(0,p.kt)("h3",{id:"new-bls192"},"new BLS192()"),(0,p.kt)("p",null,"Creates an instance of BLS192"),(0,p.kt)("a",{name:"BLS192.bytestostring"}),(0,p.kt)("h3",{id:"bls192bytestostring-"},"BLS192.bytestostring() \u21d2"),(0,p.kt)("p",null,"Convert byte array to string"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#BLS192"},(0,p.kt)("code",null,"BLS192")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": string",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BLS192{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": b byte array  "),(0,p.kt)("a",{name:"BLS192.stringtobytes"}),(0,p.kt)("h3",{id:"bls192stringtobytes-"},"BLS192.stringtobytes() \u21d2"),(0,p.kt)("p",null,"Convert string to byte array"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#BLS192"},(0,p.kt)("code",null,"BLS192")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": byte array",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BLS192{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": s string  "),(0,p.kt)("a",{name:"BLS192.bls_hashit"}),(0,p.kt)("h3",{id:"bls192bls_hashit-"},"BLS192.bls_hashit() \u21d2"),(0,p.kt)("p",null,"hash a message to an ECP point, using SHA3"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#BLS192"},(0,p.kt)("code",null,"BLS192")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": ECP point",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BLS192{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": m message to be hashedstring  "),(0,p.kt)("a",{name:"BLS192.KeyPairGenerate"}),(0,p.kt)("h3",{id:"bls192keypairgenerate-"},"BLS192.KeyPairGenerate() \u21d2"),(0,p.kt)("p",null,"Generate key pair"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#BLS192"},(0,p.kt)("code",null,"BLS192")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": Error code",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BLS192{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": rng Cryptographically Secure Random Number Generator",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": S Private key",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": W Public key  "),(0,p.kt)("a",{name:"BLS192.sign"}),(0,p.kt)("h3",{id:"bls192sign-"},"BLS192.sign() \u21d2"),(0,p.kt)("p",null,"Sign message"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#BLS192"},(0,p.kt)("code",null,"BLS192")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": Error code",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BLS192{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": SIG Singature",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": m Message to sign",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": S Private key  "),(0,p.kt)("a",{name:"BLS192.verify"}),(0,p.kt)("h3",{id:"bls192verify-"},"BLS192.verify() \u21d2"),(0,p.kt)("p",null,"Verify message"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#BLS192"},(0,p.kt)("code",null,"BLS192")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": Error code",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BLS192{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": SIG Signature",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": m Message to sign",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": W Public key  "),(0,p.kt)("a",{name:"BLS192.add_G1"}),(0,p.kt)("h3",{id:"bls192add_g1-"},"BLS192.add_G1() \u21d2"),(0,p.kt)("p",null,"R=R1+R2 in group G1"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#BLS192"},(0,p.kt)("code",null,"BLS192")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": Error code",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BLS192{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": R1 G1 Point",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": R2 G1 Point",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": R G1 Point  "),(0,p.kt)("a",{name:"BLS192.add_G2"}),(0,p.kt)("h3",{id:"bls192add_g2-"},"BLS192.add_G2() \u21d2"),(0,p.kt)("p",null,"W=W1+W2 in group G2"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#BLS192"},(0,p.kt)("code",null,"BLS192")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": Error code",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BLS192{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": W1 G2 Point",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": W2 G2 Point",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": R G2 Point"))}b.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/492e7179.46f9d13b.js b/assets/js/492e7179.46f9d13b.js
new file mode 100644
index 0000000..e031a16
--- /dev/null
+++ b/assets/js/492e7179.46f9d13b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6409],{3905:(e,t,n)=>{n.d(t,{Zo:()=>l,kt:()=>h});var r=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 a(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?a(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(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,r,i=function(e,t){if(null==e)return{};var n,r,i={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var p=r.createContext({}),c=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},l=function(e){var t=c(e.components);return r.createElement(p.Provider,{value:t},e.children)},d="mdxType",u={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,i=e.mdxType,a=e.originalType,p=e.parentName,l=s(e,["components","mdxType","originalType","parentName"]),d=c(n),m=i,h=d["".concat(p,".").concat(m)]||d[m]||u[m]||a;return n?r.createElement(h,o(o({ref:t},l),{},{components:n})):r.createElement(h,o({ref:t},l))}));function h(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var a=n.length,o=new Array(a);o[0]=m;var s={};for(var p in t)hasOwnProperty.call(t,p)&&(s[p]=t[p]);s.originalType=e,s[d]="string"==typeof e?e:i,o[1]=s;for(var c=2;c<a;c++)o[c]=n[c];return r.createElement.apply(null,o)}return r.createElement.apply(null,n)}m.displayName="MDXCreateElement"},2979:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>p,default:()=>m,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var r=n(7462),i=n(3366),a=(n(7294),n(3905)),o=["components"],s={id:"encrypted-envelope",title:"Encrypted Envelope",sidebar_label:"Encrypted Envelope"},p=void 0,c={unversionedId:"dta-details/encrypted-envelope",id:"dta-details/encrypted-envelope",title:"Encrypted Envelope",description:'The Milagro D-TA enables Principals (who require secrets to be safeguarded) to communicate with Fiduciaries who provide custodian services for those secrets. To facilitate these transactions communication between the parties must be secure i.e., must have privacy, authentication, non-repudiation and message integrity. The Milagro D-TA delivers this using its "Encrypted Envelope" messaging format.',source:"@site/../docs/dta-details/encrypted-envelope.md",sourceDirName:"dta-details",slug:"/dta-details/encrypted-envelope",permalink:"/docs/dta-details/encrypted-envelope",draft:!1,tags:[],version:"current",frontMatter:{id:"encrypted-envelope",title:"Encrypted Envelope",sidebar_label:"Encrypted Envelope"},sidebar:"docs",previous:{title:"Identity Documents",permalink:"/docs/dta-details/identity-documents"},next:{title:"IPFS",permalink:"/docs/dta-details/ipfs"}},l={},d=[{value:"Overview",id:"overview",level:2},{value:"Multipart Messages",id:"multipart-messages",level:2}],u={toc:d};function m(e){var t=e.components,s=(0,i.Z)(e,o);return(0,a.kt)("wrapper",(0,r.Z)({},u,s,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,'The Milagro D-TA enables Principals (who require secrets to be safeguarded) to communicate with Fiduciaries who provide custodian services for those secrets. To facilitate these transactions communication between the parties must be secure i.e., must have privacy, authentication, non-repudiation and message integrity. The Milagro D-TA delivers this using its "Encrypted Envelope" messaging format.'),(0,a.kt)("admonition",{title:"The Milagro D-TA Encrypted Envelope format is conceptually similar to S/MIME and its cryptographic message format.",type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"For more information about ",(0,a.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/S/MIME"},"S/MIME, click here"),".")),(0,a.kt)("h2",{id:"overview"},"Overview"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"The message consists of a header and body."),(0,a.kt)("li",{parentName:"ol"},"The message body is encrypted with an AES key."),(0,a.kt)("li",{parentName:"ol"},'The AES key for decrypting ciphertext is "encapsulated" i.e. encrypted using each recipient\'s public key.'),(0,a.kt)("li",{parentName:"ol"},"The sender signs the message."),(0,a.kt)("li",{parentName:"ol"},"The message header contains a list of each recipient's encrypted version of the key."),(0,a.kt)("li",{parentName:"ol"},"The message is pushed to IPFS and the IPFS address hash is sent to the recipients."),(0,a.kt)("li",{parentName:"ol"},"The recipients verify the signature and then read the message."),(0,a.kt)("li",{parentName:"ol"},"Only recipients with the matching secret keys can decrypt the AES key and use it to read the encrypted message bodies.")),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"Figure 3",src:n(4695).Z,width:"760",height:"700"})),(0,a.kt)("admonition",{title:"Post Quantum Cryptography",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"At the time of writing the Milagro D-TA implements cryptographic routines from the ",(0,a.kt)("a",{parentName:"p",href:"https://csrc.nist.gov/Projects/Post-Quantum-Cryptography/Round-2-Submissions"},"NIST Post-Quantum Cryptography Standardization Project"),"."),(0,a.kt)("ul",{parentName:"admonition"},(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://sike.org/"},"SIKE")," - key encapsulation\nThis implementation is currently under review.\n:::"))),(0,a.kt)("p",null,"Milagro D-TAs use ",(0,a.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Boneh%E2%80%93Lynn%E2%80%93Shacham"},"BLS signatures")," to sign encrypted envelopes.\n:::"),(0,a.kt)("h2",{id:"multipart-messages"},"Multipart Messages"),(0,a.kt)("p",null,"The Milagro D-TA's Encrypted Envelopes are designed to facilitate a dialogue between the Principal, Fiduciary and Beneficiaries. Requests and responses are appended to the original document and published back to IPFS which returns new HASH address. "),(0,a.kt)("p",null,"In this way, an immutable copy of each transaction is maintained, but the intended recipients can view the entire history of the transaction if they have the required decryption keys. Each message can be seen within each update, providing additional assurance and verification and reducing round trips to IPFS."))}m.isMDXComponent=!0},4695:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/Envelope-2b64b60c67dc11eaa0e9f62058ff4134.png"}}]);
\ No newline at end of file
diff --git a/assets/js/4972.2177a3a5.js b/assets/js/4972.2177a3a5.js
new file mode 100644
index 0000000..17327f1
--- /dev/null
+++ b/assets/js/4972.2177a3a5.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4972],{4972:(e,t,n)=>{n.r(t),n.d(t,{default:()=>i});var a=n(7294),l=n(5999),o=n(1944),r=n(3285);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/510581aa.b4a34d92.js b/assets/js/510581aa.b4a34d92.js
new file mode 100644
index 0000000..0b48fcd
--- /dev/null
+++ b/assets/js/510581aa.b4a34d92.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1478],{3769:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]);
\ No newline at end of file
diff --git a/assets/js/5400f75f.11e02cec.js b/assets/js/5400f75f.11e02cec.js
new file mode 100644
index 0000000..b337e1f
--- /dev/null
+++ b/assets/js/5400f75f.11e02cec.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1605],{3905:(t,e,a)=>{a.d(e,{Zo:()=>o,kt:()=>s});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 p(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 i(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 k=n.createContext({}),m=function(t){var e=n.useContext(k),a=e;return t&&(a="function"==typeof t?t(e):p(p({},e),t)),a},o=function(t){var e=m(t.components);return n.createElement(k.Provider,{value:e},t.children)},c="mdxType",u={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},d=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,l=t.originalType,k=t.parentName,o=i(t,["components","mdxType","originalType","parentName"]),c=m(a),d=r,s=c["".concat(k,".").concat(d)]||c[d]||u[d]||l;return a?n.createElement(s,p(p({ref:e},o),{},{components:a})):n.createElement(s,p({ref:e},o))}));function s(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=a.length,p=new Array(l);p[0]=d;var i={};for(var k in e)hasOwnProperty.call(e,k)&&(i[k]=e[k]);i.originalType=t,i[c]="string"==typeof t?t:r,p[1]=i;for(var m=2;m<l;m++)p[m]=a[m];return n.createElement.apply(null,p)}return n.createElement.apply(null,a)}d.displayName="MDXCreateElement"},3394:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>o,contentTitle:()=>k,default:()=>d,frontMatter:()=>i,metadata:()=>m,toc:()=>c});var n=a(7462),r=a(3366),l=(a(7294),a(3905)),p=["components"],i={id:"ecp8",title:"ECP8",sidebar_label:"ECP8"},k=void 0,m={unversionedId:"cryptojs/ecp8",id:"cryptojs/ecp8",title:"ECP8",description:"ECP8",source:"@site/../docs/cryptojs/ecp8.md",sourceDirName:"cryptojs",slug:"/cryptojs/ecp8",permalink:"/docs/cryptojs/ecp8",draft:!1,tags:[],version:"current",frontMatter:{id:"ecp8",title:"ECP8",sidebar_label:"ECP8"},sidebar:"docs",previous:{title:"ECP4",permalink:"/docs/cryptojs/ecp4"},next:{title:"FF",permalink:"/docs/cryptojs/ff"}},o={},c=[{value:"ECP8",id:"ecp8",level:2},{value:"new ECP8()",id:"new-ecp8",level:3},{value:"ecP8.is_infinity(1)",id:"ecp8is_infinity1",level:3},{value:"ecP8.copy(P)",id:"ecp8copyp",level:3},{value:"ecP8.inf()",id:"ecp8inf",level:3},{value:"ecP8.cmove()",id:"ecp8cmove",level:3},{value:"ecP8.select()",id:"ecp8select",level:3},{value:"ecP8.equals(Q)",id:"ecp8equalsq",level:3},{value:"ecP8.neg()",id:"ecp8neg",level:3},{value:"ecP8.affine()",id:"ecp8affine",level:3},{value:"ecP8.getX()",id:"ecp8getx",level:3},{value:"ecP8.getY()",id:"ecp8gety",level:3},{value:"ecP8.getx()",id:"ecp8getx-1",level:3},{value:"ecP8.gety()",id:"ecp8gety-1",level:3},{value:"ecP8.getz()",id:"ecp8getz",level:3},{value:"ecP8.toBytes(b)",id:"ecp8tobytesb",level:3},{value:"ecP8.toString() \u21d2",id:"ecp8tostring-",level:3},{value:"ecP8.setxy(ix, iy)",id:"ecp8setxyix-iy",level:3},{value:"ecP8.setx(ix)",id:"ecp8setxix",level:3},{value:"ecP8.frob()",id:"ecp8frob",level:3},{value:"ecP8.dbl()",id:"ecp8dbl",level:3},{value:"ecP8.add()",id:"ecp8add",level:3},{value:"ecP8.sub(Q)",id:"ecp8subq",level:3},{value:"ecP8.mul(e)",id:"ecp8mule",level:3},{value:"ECP8.generator()",id:"ecp8generator",level:3},{value:"ECP8.fromBytes(b)",id:"ecp8frombytesb",level:3},{value:"ECP8.RHS(x)",id:"ecp8rhsx",level:3},{value:"ECP8.mul16()",id:"ecp8mul16",level:3}],u={toc:c};function d(t){var e=t.components,a=(0,r.Z)(t,p);return(0,l.kt)("wrapper",(0,n.Z)({},u,a,{components:e,mdxType:"MDXLayout"}),(0,l.kt)("a",{name:"ECP8"}),(0,l.kt)("h2",{id:"ecp8"},"ECP8"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": global class",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP8{"}"}'),"  "),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP8"},"ECP8"),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#new_ECP8_new"},"new ECP8()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("em",{parentName:"li"},"instance"),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP8+is_infinity"},".is_infinity(1)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP8+copy"},".copy(P)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP8+inf"},".inf()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP8+cmove"},".cmove()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP8+select"},".select()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP8+equals"},".equals(Q)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP8+neg"},".neg()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP8+affine"},".affine()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP8+getX"},".getX()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP8+getY"},".getY()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP8+getx"},".getx()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP8+gety"},".gety()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP8+getz"},".getz()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP8+toBytes"},".toBytes(b)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP8+toString"},".toString()")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP8+setxy"},".setxy(ix, iy)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP8+setx"},".setx(ix)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP8+frob"},".frob()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP8+dbl"},".dbl()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP8+add"},".add()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP8+sub"},".sub(Q)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP8+mul"},".mul(e)")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("em",{parentName:"li"},"static"),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP8.generator"},".generator()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP8.fromBytes"},".fromBytes(b)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP8.RHS"},".RHS(x)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP8.mul16"},".mul16()"))))))),(0,l.kt)("a",{name:"new_ECP8_new"}),(0,l.kt)("h3",{id:"new-ecp8"},"new ECP8()"),(0,l.kt)("p",null,"Creates an instance of ECP8"),(0,l.kt)("a",{name:"ECP8+is_infinity"}),(0,l.kt)("h3",{id:"ecp8is_infinity1"},"ecP8.is_infinity(1)"),(0,l.kt)("p",null,"Tests for ECP8 point equal to infinity"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP8"},(0,l.kt)("code",null,"ECP8")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP8{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(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},"if infinity, else returns 0")))),(0,l.kt)("a",{name:"ECP8+copy"}),(0,l.kt)("h3",{id:"ecp8copyp"},"ecP8.copy(P)"),(0,l.kt)("p",null,"Copy ECP8 point to another ECP8 point"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP8"},(0,l.kt)("code",null,"ECP8")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP8{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"P"),(0,l.kt)("td",{parentName:"tr",align:null},"ECP8 instance")))),(0,l.kt)("a",{name:"ECP8+inf"}),(0,l.kt)("h3",{id:"ecp8inf"},"ecP8.inf()"),(0,l.kt)("p",null,"Set ECP8 to point-at-infinity"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP8"},(0,l.kt)("code",null,"ECP8")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP8{"}"}'),"  "),(0,l.kt)("a",{name:"ECP8+cmove"}),(0,l.kt)("h3",{id:"ecp8cmove"},"ecP8.cmove()"),(0,l.kt)("p",null,"conditional move of Q to P dependant on d"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP8"},(0,l.kt)("code",null,"ECP8")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP8{"}"}'),"  "),(0,l.kt)("a",{name:"ECP8+select"}),(0,l.kt)("h3",{id:"ecp8select"},"ecP8.select()"),(0,l.kt)("p",null,"Constant time select from pre-computed table"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP8"},(0,l.kt)("code",null,"ECP8")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP8{"}"}'),"  "),(0,l.kt)("a",{name:"ECP8+equals"}),(0,l.kt)("h3",{id:"ecp8equalsq"},"ecP8.equals(Q)"),(0,l.kt)("p",null,"Test P == Q"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP8"},(0,l.kt)("code",null,"ECP8")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP8{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Q"),(0,l.kt)("td",{parentName:"tr",align:null},"ECP8 instance")))),(0,l.kt)("a",{name:"ECP8+neg"}),(0,l.kt)("h3",{id:"ecp8neg"},"ecP8.neg()"),(0,l.kt)("p",null,"set this=-this"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP8"},(0,l.kt)("code",null,"ECP8")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP8{"}"}'),"  "),(0,l.kt)("a",{name:"ECP8+affine"}),(0,l.kt)("h3",{id:"ecp8affine"},"ecP8.affine()"),(0,l.kt)("p",null,"convert this to affine, from (x,y,z) to (x,y)"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP8"},(0,l.kt)("code",null,"ECP8")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP8{"}"}'),"  "),(0,l.kt)("a",{name:"ECP8+getX"}),(0,l.kt)("h3",{id:"ecp8getx"},"ecP8.getX()"),(0,l.kt)("p",null,"extract affine x as ctx.FP2"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP8"},(0,l.kt)("code",null,"ECP8")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP8{"}"}'),"  "),(0,l.kt)("a",{name:"ECP8+getY"}),(0,l.kt)("h3",{id:"ecp8gety"},"ecP8.getY()"),(0,l.kt)("p",null,"extract affine y as ctx.FP2"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP8"},(0,l.kt)("code",null,"ECP8")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP8{"}"}'),"  "),(0,l.kt)("a",{name:"ECP8+getx"}),(0,l.kt)("h3",{id:"ecp8getx-1"},"ecP8.getx()"),(0,l.kt)("p",null,"extract projective x"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP8"},(0,l.kt)("code",null,"ECP8")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP8{"}"}'),"  "),(0,l.kt)("a",{name:"ECP8+gety"}),(0,l.kt)("h3",{id:"ecp8gety-1"},"ecP8.gety()"),(0,l.kt)("p",null,"extract projective y"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP8"},(0,l.kt)("code",null,"ECP8")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP8{"}"}'),"  "),(0,l.kt)("a",{name:"ECP8+getz"}),(0,l.kt)("h3",{id:"ecp8getz"},"ecP8.getz()"),(0,l.kt)("p",null,"extract projective z"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP8"},(0,l.kt)("code",null,"ECP8")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP8{"}"}'),"  "),(0,l.kt)("a",{name:"ECP8+toBytes"}),(0,l.kt)("h3",{id:"ecp8tobytesb"},"ecP8.toBytes(b)"),(0,l.kt)("p",null,"convert this to byte arrayextract projective x"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP8"},(0,l.kt)("code",null,"ECP8")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP8{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"b"),(0,l.kt)("td",{parentName:"tr",align:null},"byte array output")))),(0,l.kt)("a",{name:"ECP8+toString"}),(0,l.kt)("h3",{id:"ecp8tostring-"},"ecP8.toString() \u21d2"),(0,l.kt)("p",null,"convert this to hex string"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP8"},(0,l.kt)("code",null,"ECP8")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": hex string",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP8{"}"}'),"  "),(0,l.kt)("a",{name:"ECP8+setxy"}),(0,l.kt)("h3",{id:"ecp8setxyix-iy"},"ecP8.setxy(ix, iy)"),(0,l.kt)("p",null,"set this=(x,y)"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP8"},(0,l.kt)("code",null,"ECP8")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP8{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ix"),(0,l.kt)("td",{parentName:"tr",align:null},"x-value")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"iy"),(0,l.kt)("td",{parentName:"tr",align:null},"y-value")))),(0,l.kt)("a",{name:"ECP8+setx"}),(0,l.kt)("h3",{id:"ecp8setxix"},"ecP8.setx(ix)"),(0,l.kt)("p",null,"set this=(x,.)"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP8"},(0,l.kt)("code",null,"ECP8")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP8{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ix"),(0,l.kt)("td",{parentName:"tr",align:null},"x-value")))),(0,l.kt)("a",{name:"ECP8+frob"}),(0,l.kt)("h3",{id:"ecp8frob"},"ecP8.frob()"),(0,l.kt)("p",null,"set this","*","=q, where q is Modulus, using Frobenius"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP8"},(0,l.kt)("code",null,"ECP8")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP8{"}"}'),"  "),(0,l.kt)("a",{name:"ECP8+dbl"}),(0,l.kt)("h3",{id:"ecp8dbl"},"ecP8.dbl()"),(0,l.kt)("p",null,"this+=this"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP8"},(0,l.kt)("code",null,"ECP8")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP8{"}"}'),"  "),(0,l.kt)("a",{name:"ECP8+add"}),(0,l.kt)("h3",{id:"ecp8add"},"ecP8.add()"),(0,l.kt)("p",null,"Adds ECP8 instances"),(0,l.kt)("p",null,"param Q ECP8 instance"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP8"},(0,l.kt)("code",null,"ECP8")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP8{"}"}'),"  "),(0,l.kt)("a",{name:"ECP8+sub"}),(0,l.kt)("h3",{id:"ecp8subq"},"ecP8.sub(Q)"),(0,l.kt)("p",null,"Subtracts ECP instance Q  from this"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP8"},(0,l.kt)("code",null,"ECP8")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP8{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Q"),(0,l.kt)("td",{parentName:"tr",align:null},"ECP8 instance")))),(0,l.kt)("a",{name:"ECP8+mul"}),(0,l.kt)("h3",{id:"ecp8mule"},"ecP8.mul(e)"),(0,l.kt)("p",null,"Multiplies an ECP8 instance P by a BIG, side-channel resistant"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP8"},(0,l.kt)("code",null,"ECP8")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP8{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"e"),(0,l.kt)("td",{parentName:"tr",align:null},"BIG number multiplier")))),(0,l.kt)("a",{name:"ECP8.generator"}),(0,l.kt)("h3",{id:"ecp8generator"},"ECP8.generator()"),(0,l.kt)("p",null,"Set group generator"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP8"},(0,l.kt)("code",null,"ECP8")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP8{"}"}'),"  "),(0,l.kt)("a",{name:"ECP8.fromBytes"}),(0,l.kt)("h3",{id:"ecp8frombytesb"},"ECP8.fromBytes(b)"),(0,l.kt)("p",null,"convert from byte array to point"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP8"},(0,l.kt)("code",null,"ECP8")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP8{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"b"),(0,l.kt)("td",{parentName:"tr",align:null},"input byte array")))),(0,l.kt)("a",{name:"ECP8.RHS"}),(0,l.kt)("h3",{id:"ecp8rhsx"},"ECP8.RHS(x)"),(0,l.kt)("p",null,"Calculate RHS of curve equation x^3+B"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP8"},(0,l.kt)("code",null,"ECP8")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP8{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"x"),(0,l.kt)("td",{parentName:"tr",align:null},"x-value")))),(0,l.kt)("a",{name:"ECP8.mul16"}),(0,l.kt)("h3",{id:"ecp8mul16"},"ECP8.mul16()"),(0,l.kt)("p",null,"Calculate P=u0.Q0+u1_Q1+u2_Q2+u3","*","Q3..."),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP8"},(0,l.kt)("code",null,"ECP8")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP8{"}"}')))}d.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/5423.f5acf638.js b/assets/js/5423.f5acf638.js
new file mode 100644
index 0000000..b5adeb0
--- /dev/null
+++ b/assets/js/5423.f5acf638.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5423],{5423:function(e,t,r){var n,i="/index.js",a=this&&this.__spreadArray||function(e,t,r){if(r||2===arguments.length)for(var n,i=0,a=t.length;i<a;i++)!n&&i in t||(n||(n=Array.prototype.slice.call(t,0,i)),n[i]=t[i]);return e.concat(n||Array.prototype.slice.call(t))},o=this&&this.__assign||function(){return o=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var i in t=arguments[r])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},o.apply(this,arguments)},s=this&&this.__makeTemplateObject||function(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e},c=this&&this.__generator||function(e,t){var r,n,i,a,o={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return a={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function s(s){return function(c){return function(s){if(r)throw new TypeError("Generator is already executing.");for(;a&&(a=0,s[0]&&(o=0)),o;)try{if(r=1,n&&(i=2&s[0]?n.return:s[0]?n.throw||((i=n.return)&&i.call(n),0):n.next)&&!(i=i.call(n,s[1])).done)return i;switch(n=0,i&&(s=[2&s[0],i.value]),s[0]){case 0:case 1:i=s;break;case 4:return o.label++,{value:s[1],done:!1};case 5:o.label++,n=s[1],s=[0];continue;case 7:s=o.ops.pop(),o.trys.pop();continue;default:if(!(i=o.trys,(i=i.length>0&&i[i.length-1])||6!==s[0]&&2!==s[0])){o=0;continue}if(3===s[0]&&(!i||s[1]>i[0]&&s[1]<i[3])){o.label=s[1];break}if(6===s[0]&&o.label<i[1]){o.label=i[1],i=s;break}if(i&&o.label<i[2]){o.label=i[2],o.ops.push(s);break}i[2]&&o.ops.pop(),o.trys.pop();continue}s=t.call(e,o)}catch(c){s=[6,c],n=0}finally{r=i=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,c])}}},u=this&&this.__rest||function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(n=Object.getOwnPropertySymbols(e);i<n.length;i++)t.indexOf(n[i])<0&&Object.prototype.propertyIsEnumerable.call(e,n[i])&&(r[n[i]]=e[n[i]])}return r},l=this&&this.__extends||(n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])},n(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});!function(e){var t;e.versionMajorMinor="4.9",e.version="".concat(e.versionMajorMinor,".4"),function(e){e[e.LessThan=-1]="LessThan",e[e.EqualTo=0]="EqualTo",e[e.GreaterThan=1]="GreaterThan"}(e.Comparison||(e.Comparison={})),function(e){var t="undefined"!=typeof globalThis?globalThis:void 0!==r.g?r.g:"undefined"!=typeof self?self:void 0;e.tryGetNativeMap=function(){var e=null==t?void 0:t.Map,r=void 0!==e&&"entries"in e.prototype&&1===new e([[0,0]]).size?e:void 0;if(!r)throw new Error("No compatible Map implementation found.");return r},e.tryGetNativeSet=function(){var e=null==t?void 0:t.Set,r=void 0!==e&&"entries"in e.prototype&&1===new e([0]).size?e:void 0;if(!r)throw new Error("No compatible Set implementation found.");return r}}(t||(t={})),e.Map=t.tryGetNativeMap(),e.Set=t.tryGetNativeSet()}(_||(_={})),function(e){function t(e,t,r){if(void 0===r&&(r=I),e)for(var n=0,i=e;n<i.length;n++){if(r(i[n],t))return!0}return!1}function r(e,t){if(e){if(!t)return e.length>0;for(var r=0,n=e;r<n.length;r++){if(t(n[r]))return!0}}return!1}function n(e,t){return r(t)?r(e)?a(a([],e,!0),t,!0):t:e}function i(e,t){return t}function o(e){return e.map(i)}function s(e,t){return void 0===t?e:void 0===e?[t]:(e.push(t),e)}function c(e,t){return t<0?e.length+t:t}function u(e,t,r,n){if(void 0===t||0===t.length)return e;if(void 0===e)return t.slice(r,n);r=void 0===r?0:c(t,r),n=void 0===n?t.length:c(t,n);for(var i=r;i<n&&i<t.length;i++)void 0!==t[i]&&e.push(t[i]);return e}function l(e,r,n){return!t(e,r,n)&&(e.push(r),!0)}function _(e,t,r){t.sort((function(t,n){return r(e[t],e[n])||M(t,n)}))}function d(e,t){return 0===e.length?e:e.slice().sort(t)}function p(e){var t=0;return{next:function(){return t===e.length?{value:void 0,done:!0}:(t++,{value:e[t-1],done:!1})}}}function f(e){return e&&1===e.length?e[0]:void 0}function g(e,t,r,n,i){return m(e,r(t),r,n,i)}function m(e,t,n,i,a){if(!r(e))return-1;for(var o=a||0,s=e.length-1;o<=s;){var c=o+(s-o>>1);switch(i(n(e[c],c),t)){case-1:o=c+1;break;case 0:return c;case 1:s=c-1}}return~o}function y(e,t,r,n,i){if(e&&e.length>0){var a=e.length;if(a>0){var o=void 0===n||n<0?0:n,s=void 0===i||o+i>a-1?a-1:o+i,c=void 0;for(arguments.length<=2?(c=e[o],o++):c=r;o<=s;)c=t(c,e[o],o),o++;return c}}return r}e.getIterator=function(t){if(t){if(k(t))return p(t);if(t instanceof e.Map)return t.entries();if(t instanceof e.Set)return t.values();throw new Error("Iteration not supported.")}},e.emptyArray=[],e.emptyMap=new e.Map,e.emptySet=new e.Set,e.length=function(e){return e?e.length:0},e.forEach=function(e,t){if(e)for(var r=0;r<e.length;r++){var n=t(e[r],r);if(n)return n}},e.forEachRight=function(e,t){if(e)for(var r=e.length-1;r>=0;r--){var n=t(e[r],r);if(n)return n}},e.firstDefined=function(e,t){if(void 0!==e)for(var r=0;r<e.length;r++){var n=t(e[r],r);if(void 0!==n)return n}},e.firstDefinedIterator=function(e,t){for(;;){var r=e.next();if(r.done)return;var n=t(r.value);if(void 0!==n)return n}},e.reduceLeftIterator=function(e,t,r){var n=r;if(e)for(var i=e.next(),a=0;!i.done;i=e.next(),a++)n=t(n,i.value,a);return n},e.zipWith=function(t,r,n){var i=[];e.Debug.assertEqual(t.length,r.length);for(var a=0;a<t.length;a++)i.push(n(t[a],r[a],a));return i},e.zipToIterator=function(t,r){e.Debug.assertEqual(t.length,r.length);var n=0;return{next:function(){return n===t.length?{value:void 0,done:!0}:(n++,{value:[t[n-1],r[n-1]],done:!1})}}},e.zipToMap=function(t,r){e.Debug.assert(t.length===r.length);for(var n=new e.Map,i=0;i<t.length;++i)n.set(t[i],r[i]);return n},e.intersperse=function(e,t){if(e.length<=1)return e;for(var r=[],n=0,i=e.length;n<i;n++)n&&r.push(t),r.push(e[n]);return r},e.every=function(e,t){if(e)for(var r=0;r<e.length;r++)if(!t(e[r],r))return!1;return!0},e.find=function(e,t,r){if(void 0!==e)for(var n=null!=r?r:0;n<e.length;n++){var i=e[n];if(t(i,n))return i}},e.findLast=function(e,t,r){if(void 0!==e)for(var n=null!=r?r:e.length-1;n>=0;n--){var i=e[n];if(t(i,n))return i}},e.findIndex=function(e,t,r){if(void 0===e)return-1;for(var n=null!=r?r:0;n<e.length;n++)if(t(e[n],n))return n;return-1},e.findLastIndex=function(e,t,r){if(void 0===e)return-1;for(var n=null!=r?r:e.length-1;n>=0;n--)if(t(e[n],n))return n;return-1},e.findMap=function(t,r){for(var n=0;n<t.length;n++){var i=r(t[n],n);if(i)return i}return e.Debug.fail()},e.contains=t,e.arraysEqual=function(e,t,r){return void 0===r&&(r=I),e.length===t.length&&e.every((function(e,n){return r(e,t[n])}))},e.indexOfAnyCharCode=function(e,r,n){for(var i=n||0;i<e.length;i++)if(t(r,e.charCodeAt(i)))return i;return-1},e.countWhere=function(e,t){var r=0;if(e)for(var n=0;n<e.length;n++){t(e[n],n)&&r++}return r},e.filter=function(e,t){if(e){for(var r=e.length,n=0;n<r&&t(e[n]);)n++;if(n<r){var i=e.slice(0,n);for(n++;n<r;){var a=e[n];t(a)&&i.push(a),n++}return i}}return e},e.filterMutate=function(e,t){for(var r=0,n=0;n<e.length;n++)t(e[n],n,e)&&(e[r]=e[n],r++);e.length=r},e.clear=function(e){e.length=0},e.map=function(e,t){var r;if(e){r=[];for(var n=0;n<e.length;n++)r.push(t(e[n],n))}return r},e.mapIterator=function(e,t){return{next:function(){var r=e.next();return r.done?r:{value:t(r.value),done:!1}}}},e.sameMap=function(e,t){if(e)for(var r=0;r<e.length;r++){var n=e[r],i=t(n,r);if(n!==i){var a=e.slice(0,r);for(a.push(i),r++;r<e.length;r++)a.push(t(e[r],r));return a}}return e},e.flatten=function(e){for(var t=[],r=0,n=e;r<n.length;r++){var i=n[r];i&&(k(i)?u(t,i):t.push(i))}return t},e.flatMap=function(t,r){var n;if(t)for(var i=0;i<t.length;i++){var a=r(t[i],i);a&&(n=k(a)?u(n,a):s(n,a))}return n||e.emptyArray},e.flatMapToMutable=function(e,t){var r=[];if(e)for(var n=0;n<e.length;n++){var i=t(e[n],n);i&&(k(i)?u(r,i):r.push(i))}return r},e.flatMapIterator=function(t,r){var n=t.next();if(n.done)return e.emptyIterator;var i=a(n.value);return{next:function(){for(;;){var e=i.next();if(!e.done)return e;var r=t.next();if(r.done)return r;i=a(r.value)}}};function a(t){var n=r(t);return void 0===n?e.emptyIterator:k(n)?p(n):n}},e.sameFlatMap=function(e,t){var r;if(e)for(var n=0;n<e.length;n++){var i=e[n],a=t(i,n);(r||i!==a||k(a))&&(r||(r=e.slice(0,n)),k(a)?u(r,a):r.push(a))}return r||e},e.mapAllOrFail=function(e,t){for(var r=[],n=0;n<e.length;n++){var i=t(e[n],n);if(void 0===i)return;r.push(i)}return r},e.mapDefined=function(e,t){var r=[];if(e)for(var n=0;n<e.length;n++){var i=t(e[n],n);void 0!==i&&r.push(i)}return r},e.mapDefinedIterator=function(e,t){return{next:function(){for(;;){var r=e.next();if(r.done)return r;var n=t(r.value);if(void 0!==n)return{value:n,done:!1}}}}},e.mapDefinedEntries=function(t,r){if(t){var n=new e.Map;return t.forEach((function(e,t){var i=r(t,e);if(void 0!==i){var a=i[0],o=i[1];void 0!==a&&void 0!==o&&n.set(a,o)}})),n}},e.mapDefinedValues=function(t,r){if(t){var n=new e.Set;return t.forEach((function(e){var t=r(e);void 0!==t&&n.add(t)})),n}},e.getOrUpdate=function(e,t,r){if(e.has(t))return e.get(t);var n=r();return e.set(t,n),n},e.tryAddToSet=function(e,t){return!e.has(t)&&(e.add(t),!0)},e.emptyIterator={next:function(){return{value:void 0,done:!0}}},e.singleIterator=function(e){var t=!1;return{next:function(){var r=t;return t=!0,r?{value:void 0,done:!0}:{value:e,done:!1}}}},e.spanMap=function(e,t,r){var n;if(e){n=[];for(var i=e.length,a=void 0,o=void 0,s=0,c=0;s<i;){for(;c<i;){if(o=t(e[c],c),0===c)a=o;else if(o!==a)break;c++}if(s<c){var u=r(e.slice(s,c),a,s,c);u&&n.push(u),s=c}a=o,c++}}return n},e.mapEntries=function(t,r){if(t){var n=new e.Map;return t.forEach((function(e,t){var i=r(t,e),a=i[0],o=i[1];n.set(a,o)})),n}},e.some=r,e.getRangesWhere=function(e,t,r){for(var n,i=0;i<e.length;i++)t(e[i])?n=void 0===n?i:n:void 0!==n&&(r(n,i),n=void 0);void 0!==n&&r(n,e.length)},e.concatenate=n,e.indicesOf=o,e.deduplicate=function(e,t,r){return 0===e.length?[]:1===e.length?e.slice():r?function(e,t,r){var n=o(e);_(e,n,r);for(var i=e[n[0]],a=[n[0]],s=1;s<n.length;s++){var c=n[s],u=e[c];t(i,u)||(a.push(c),i=u)}return a.sort(),a.map((function(t){return e[t]}))}(e,t,r):function(e,t){for(var r=[],n=0,i=e;n<i.length;n++)l(r,i[n],t);return r}(e,t)},e.createSortedArray=function(){return[]},e.insertSorted=function(e,t,r,n){if(0===e.length)return e.push(t),!0;var i=g(e,t,A,r);return i<0?(e.splice(~i,0,t),!0):!!n&&(e.splice(i,0,t),!0)},e.sortAndDeduplicate=function(t,r,n){return function(t,r){if(0===t.length)return e.emptyArray;for(var n=t[0],i=[n],a=1;a<t.length;a++){var o=t[a];switch(r(o,n)){case!0:case 0:continue;case-1:return e.Debug.fail("Array is unsorted.")}i.push(n=o)}return i}(d(t,r),n||r||R)},e.arrayIsSorted=function(e,t){if(e.length<2)return!0;for(var r=e[0],n=0,i=e.slice(1);n<i.length;n++){var a=i[n];if(1===t(r,a))return!1;r=a}return!0},e.arrayIsEqualTo=function(e,t,r){if(void 0===r&&(r=I),!e||!t)return e===t;if(e.length!==t.length)return!1;for(var n=0;n<e.length;n++)if(!r(e[n],t[n],n))return!1;return!0},e.compact=function(e){var t;if(e)for(var r=0;r<e.length;r++){var n=e[r];!t&&n||(t||(t=e.slice(0,r)),n&&t.push(n))}return t||e},e.relativeComplement=function(t,r,n){if(!r||!t||0===r.length||0===t.length)return r;var i=[];e:for(var a=0,o=0;o<r.length;o++){o>0&&e.Debug.assertGreaterThanOrEqual(n(r[o],r[o-1]),0);t:for(var s=a;a<t.length;a++)switch(a>s&&e.Debug.assertGreaterThanOrEqual(n(t[a],t[a-1]),0),n(r[o],t[a])){case-1:i.push(r[o]);continue e;case 0:continue e;case 1:continue t}}return i},e.sum=function(e,t){for(var r=0,n=0,i=e;n<i.length;n++){r+=i[n][t]}return r},e.append=s,e.combine=function(e,t){return void 0===e?t:void 0===t?e:k(e)?k(t)?n(e,t):s(e,t):k(t)?s(t,e):[e,t]},e.addRange=u,e.pushIfUnique=l,e.appendIfUnique=function(e,t,r){return e?(l(e,t,r),e):[t]},e.sort=d,e.arrayIterator=p,e.arrayReverseIterator=function(e){var t=e.length;return{next:function(){return 0===t?{value:void 0,done:!0}:(t--,{value:e[t],done:!1})}}},e.stableSort=function(e,t){var r=o(e);return _(e,r,t),r.map((function(t){return e[t]}))},e.rangeEquals=function(e,t,r,n){for(;r<n;){if(e[r]!==t[r])return!1;r++}return!0},e.elementAt=function(e,t){if(e&&(t=c(e,t))<e.length)return e[t]},e.firstOrUndefined=function(e){return void 0===e||0===e.length?void 0:e[0]},e.first=function(t){return e.Debug.assert(0!==t.length),t[0]},e.lastOrUndefined=function(e){return void 0===e||0===e.length?void 0:e[e.length-1]},e.last=function(t){return e.Debug.assert(0!==t.length),t[t.length-1]},e.singleOrUndefined=f,e.single=function(t){return e.Debug.checkDefined(f(t))},e.singleOrMany=function(e){return e&&1===e.length?e[0]:e},e.replaceElement=function(e,t,r){var n=e.slice(0);return n[t]=r,n},e.binarySearch=g,e.binarySearchKey=m,e.reduceLeft=y;var v=Object.prototype.hasOwnProperty;function h(e,t){return v.call(e,t)}function b(e){var t=[];for(var r in e)v.call(e,r)&&t.push(r);return t}e.hasProperty=h,e.getProperty=function(e,t){return v.call(e,t)?e[t]:void 0},e.getOwnKeys=b,e.getAllKeys=function(e){var t=[];do{for(var r=0,n=Object.getOwnPropertyNames(e);r<n.length;r++){l(t,n[r])}}while(e=Object.getPrototypeOf(e));return t},e.getOwnValues=function(e){var t=[];for(var r in e)v.call(e,r)&&t.push(e[r]);return t};var x=Object.entries||function(e){for(var t=b(e),r=Array(t.length),n=0;n<t.length;n++)r[n]=[t[n],e[t[n]]];return r};function D(e,t){for(var r=[],n=e.next();!n.done;n=e.next())r.push(t?t(n.value):n.value);return r}function S(e,t,r){void 0===r&&(r=A);for(var n=T(),i=0,a=e;i<a.length;i++){var o=a[i];n.add(t(o),r(o))}return n}function T(){var t=new e.Map;return t.add=C,t.remove=E,t}function C(e,t){var r=this.get(e);return r?r.push(t):this.set(e,r=[t]),r}function E(e,t){var r=this.get(e);r&&(q(r,t),r.length||this.delete(e))}function k(e){return Array.isArray?Array.isArray(e):e instanceof Array}function N(e){}function A(e){return e}function F(e){return e.toLowerCase()}e.getEntries=function(e){return e?x(e):[]},e.arrayOf=function(e,t){for(var r=new Array(e),n=0;n<e;n++)r[n]=t(n);return r},e.arrayFrom=D,e.assign=function(e){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];for(var n=0,i=t;n<i.length;n++){var a=i[n];if(void 0!==a)for(var o in a)h(a,o)&&(e[o]=a[o])}return e},e.equalOwnProperties=function(e,t,r){if(void 0===r&&(r=I),e===t)return!0;if(!e||!t)return!1;for(var n in e)if(v.call(e,n)){if(!v.call(t,n))return!1;if(!r(e[n],t[n]))return!1}for(var n in t)if(v.call(t,n)&&!v.call(e,n))return!1;return!0},e.arrayToMap=function(t,r,n){void 0===n&&(n=A);for(var i=new e.Map,a=0,o=t;a<o.length;a++){var s=o[a],c=r(s);void 0!==c&&i.set(c,n(s))}return i},e.arrayToNumericMap=function(e,t,r){void 0===r&&(r=A);for(var n=[],i=0,a=e;i<a.length;i++){var o=a[i];n[t(o)]=r(o)}return n},e.arrayToMultiMap=S,e.group=function(e,t,r){return void 0===r&&(r=A),D(S(e,t).values(),r)},e.clone=function(e){var t={};for(var r in e)v.call(e,r)&&(t[r]=e[r]);return t},e.extend=function(e,t){var r={};for(var n in t)v.call(t,n)&&(r[n]=t[n]);for(var n in e)v.call(e,n)&&(r[n]=e[n]);return r},e.copyProperties=function(e,t){for(var r in t)v.call(t,r)&&(e[r]=t[r])},e.maybeBind=function(e,t){return t?t.bind(e):void 0},e.createMultiMap=T,e.createUnderscoreEscapedMultiMap=function(){return T()},e.createQueue=function(e){var t=(null==e?void 0:e.slice())||[],r=0;function n(){return r===t.length}return{enqueue:function(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];t.push.apply(t,e)},dequeue:function(){if(n())throw new Error("Queue is empty");var e=t[r];if(t[r]=void 0,++r>100&&r>t.length>>1){var i=t.length-r;t.copyWithin(0,r),t.length=i,r=0}return e},isEmpty:n}},e.createSet=function(r,n){var i=new e.Map,a=0;function o(){var e,t=i.values();return{next:function(){for(;;)if(e){if(!(r=e.next()).done)return{value:r.value};e=void 0}else{var r;if((r=t.next()).done)return{value:void 0,done:!0};if(!k(r.value))return{value:r.value};e=p(r.value)}}}}return{has:function(e){var t=r(e);if(!i.has(t))return!1;var a=i.get(t);if(!k(a))return n(a,e);for(var o=0,s=a;o<s.length;o++){var c=s[o];if(n(c,e))return!0}return!1},add:function(e){var o=r(e);if(i.has(o)){var s=i.get(o);if(k(s))t(s,e,n)||(s.push(e),a++);else{var c=s;n(c,e)||(i.set(o,[c,e]),a++)}}else i.set(o,e),a++;return this},delete:function(e){var t=r(e);if(!i.has(t))return!1;var o=i.get(t);if(k(o)){for(var s=0;s<o.length;s++)if(n(o[s],e))return 1===o.length?i.delete(t):2===o.length?i.set(t,o[1-s]):V(o,s),a--,!0}else if(n(o,e))return i.delete(t),a--,!0;return!1},clear:function(){i.clear(),a=0},get size(){return a},forEach:function(e){for(var t=0,r=D(i.values());t<r.length;t++){var n=r[t];if(k(n))for(var a=0,o=n;a<o.length;a++){var s;e(s=o[a],s)}else e(s=n,s)}},keys:function(){return o()},values:function(){return o()},entries:function(){var e=o();return{next:function(){var t=e.next();return t.done?t:{value:[t.value,t.value]}}}}}},e.isArray=k,e.toArray=function(e){return k(e)?e:[e]},e.isString=function(e){return"string"==typeof e},e.isNumber=function(e){return"number"==typeof e},e.tryCast=function(e,t){return void 0!==e&&t(e)?e:void 0},e.cast=function(t,r){return void 0!==t&&r(t)?t:e.Debug.fail("Invalid cast. The supplied value ".concat(t," did not pass the test '").concat(e.Debug.getFunctionName(r),"'."))},e.noop=N,e.noopPush={push:N,length:0},e.returnFalse=function(){return!1},e.returnTrue=function(){return!0},e.returnUndefined=function(){},e.identity=A,e.toLowerCase=F;var P=/[^\u0130\u0131\u00DFa-z0-9\\/:\-_\. ]+/g;function w(e){return P.test(e)?e.replace(P,F):e}function I(e,t){return e===t}function O(e,t){return e===t?0:void 0===e?-1:void 0===t?1:e<t?-1:1}function M(e,t){return O(e,t)}function L(e,t){return e===t?0:void 0===e?-1:void 0===t?1:(e=e.toUpperCase())<(t=t.toUpperCase())?-1:e>t?1:0}function R(e,t){return O(e,t)}e.toFileNameLowerCase=w,e.notImplemented=function(){throw new Error("Not implemented")},e.memoize=function(e){var t;return function(){return e&&(t=e(),e=void 0),t}},e.memoizeOne=function(t){var r=new e.Map;return function(e){var n="".concat(typeof e,":").concat(e),i=r.get(n);return void 0!==i||r.has(n)||(i=t(e),r.set(n,i)),i}},e.compose=function(e,t,r,n,i){if(i){for(var a=[],o=0;o<arguments.length;o++)a[o]=arguments[o];return function(e){return y(a,(function(e,t){return t(e)}),e)}}return n?function(i){return n(r(t(e(i))))}:r?function(n){return r(t(e(n)))}:t?function(r){return t(e(r))}:e?function(t){return e(t)}:function(e){return e}},function(e){e[e.None=0]="None",e[e.Normal=1]="Normal",e[e.Aggressive=2]="Aggressive",e[e.VeryAggressive=3]="VeryAggressive"}(e.AssertionLevel||(e.AssertionLevel={})),e.equateValues=I,e.equateStringsCaseInsensitive=function(e,t){return e===t||void 0!==e&&void 0!==t&&e.toUpperCase()===t.toUpperCase()},e.equateStringsCaseSensitive=function(e,t){return I(e,t)},e.compareValues=M,e.compareTextSpans=function(e,t){return M(null==e?void 0:e.start,null==t?void 0:t.start)||M(null==e?void 0:e.length,null==t?void 0:t.length)},e.min=function(e,t){return y(e,(function(e,r){return-1===t(e,r)?e:r}))},e.compareStringsCaseInsensitive=L,e.compareStringsCaseSensitive=R,e.getStringComparer=function(e){return e?L:R};var B,j,J=function(){var e,t,r=function(){if("object"==typeof Intl&&"function"==typeof Intl.Collator)return i;if("function"==typeof String.prototype.localeCompare&&"function"==typeof String.prototype.toLocaleUpperCase&&"a".localeCompare("B")<0)return a;return o}();return function(n){return void 0===n?e||(e=r(n)):"en-US"===n?t||(t=r(n)):r(n)};function n(e,t,r){if(e===t)return 0;if(void 0===e)return-1;if(void 0===t)return 1;var n=r(e,t);return n<0?-1:n>0?1:0}function i(e){var t=new Intl.Collator(e,{usage:"sort",sensitivity:"variant"}).compare;return function(e,r){return n(e,r,t)}}function a(e){return void 0!==e?o():function(e,r){return n(e,r,t)};function t(e,t){return e.localeCompare(t)}}function o(){return function(t,r){return n(t,r,e)};function e(e,r){return t(e.toUpperCase(),r.toUpperCase())||t(e,r)}function t(e,t){return e<t?-1:e>t?1:0}}}();function z(e,t,r){for(var n=new Array(t.length+1),i=new Array(t.length+1),a=r+.01,o=0;o<=t.length;o++)n[o]=o;for(o=1;o<=e.length;o++){var s=e.charCodeAt(o-1),c=Math.ceil(o>r?o-r:1),u=Math.floor(t.length>r+o?r+o:t.length);i[0]=o;for(var l=o,_=1;_<c;_++)i[_]=a;for(_=c;_<=u;_++){var d=e[o-1].toLowerCase()===t[_-1].toLowerCase()?n[_-1]+.1:n[_-1]+2,p=s===t.charCodeAt(_-1)?n[_-1]:Math.min(n[_]+1,i[_-1]+1,d);i[_]=p,l=Math.min(l,p)}for(_=u+1;_<=t.length;_++)i[_]=a;if(l>r)return;var f=n;n=i,i=f}var g=n[t.length];return g>r?void 0:g}function U(e,t){var r=e.length-t.length;return r>=0&&e.indexOf(t,r)===r}function K(e,t){for(var r=t;r<e.length-1;r++)e[r]=e[r+1];e.pop()}function V(e,t){e[t]=e[e.length-1],e.pop()}function q(e,t){return function(e,t){for(var r=0;r<e.length;r++)if(t(e[r]))return V(e,r),!0;return!1}(e,(function(e){return e===t}))}function W(e,t){return 0===e.lastIndexOf(t,0)}function H(e,t){var r=e.prefix,n=e.suffix;return t.length>=r.length+n.length&&W(t,r)&&U(t,n)}function G(e,t,r,n){for(var i=0,a=e[n];i<a.length;i++){var o=a[i],s=void 0;r?(s=r.slice()).push(o):s=[o],n===e.length-1?t.push(s):G(e,t,s,n+1)}}e.getUILocale=function(){return j},e.setUILocale=function(e){j!==e&&(j=e,B=void 0)},e.compareStringsCaseSensitiveUI=function(e,t){return(B||(B=J(j)))(e,t)},e.compareProperties=function(e,t,r,n){return e===t?0:void 0===e?-1:void 0===t?1:n(e[r],t[r])},e.compareBooleans=function(e,t){return M(e?1:0,t?1:0)},e.getSpellingSuggestion=function(t,r,n){for(var i,a=Math.max(2,Math.floor(.34*t.length)),o=Math.floor(.4*t.length)+1,s=0,c=r;s<c.length;s++){var u=c[s],l=n(u);if(void 0!==l&&Math.abs(l.length-t.length)<=a){if(l===t)continue;if(l.length<3&&l.toLowerCase()!==t.toLowerCase())continue;var _=z(t,l,o-.1);if(void 0===_)continue;e.Debug.assert(_<o),o=_,i=u}}return i},e.endsWith=U,e.removeSuffix=function(e,t){return U(e,t)?e.slice(0,e.length-t.length):e},e.tryRemoveSuffix=function(e,t){return U(e,t)?e.slice(0,e.length-t.length):void 0},e.stringContains=function(e,t){return-1!==e.indexOf(t)},e.removeMinAndVersionNumbers=function(e){for(var t=e.length,r=t-1;r>0;r--){var n=e.charCodeAt(r);if(n>=48&&n<=57)do{--r,n=e.charCodeAt(r)}while(r>0&&n>=48&&n<=57);else{if(!(r>4)||110!==n&&78!==n)break;if(--r,105!==(n=e.charCodeAt(r))&&73!==n)break;if(--r,109!==(n=e.charCodeAt(r))&&77!==n)break;--r,n=e.charCodeAt(r)}if(45!==n&&46!==n)break;t=r}return t===e.length?e:e.slice(0,t)},e.orderedRemoveItem=function(e,t){for(var r=0;r<e.length;r++)if(e[r]===t)return K(e,r),!0;return!1},e.orderedRemoveItemAt=K,e.unorderedRemoveItemAt=V,e.unorderedRemoveItem=q,e.createGetCanonicalFileName=function(e){return e?A:w},e.patternText=function(e){var t=e.prefix,r=e.suffix;return"".concat(t,"*").concat(r)},e.matchedText=function(t,r){return e.Debug.assert(H(t,r)),r.substring(t.prefix.length,r.length-t.suffix.length)},e.findBestPatternMatch=function(e,t,r){for(var n,i=-1,a=0,o=e;a<o.length;a++){var s=o[a],c=t(s);H(c,r)&&c.prefix.length>i&&(i=c.prefix.length,n=s)}return n},e.startsWith=W,e.removePrefix=function(e,t){return W(e,t)?e.substr(t.length):e},e.tryRemovePrefix=function(e,t,r){return void 0===r&&(r=A),W(r(e),r(t))?e.substring(t.length):void 0},e.isPatternMatch=H,e.and=function(e,t){return function(r){return e(r)&&t(r)}},e.or=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return function(){for(var t,r=[],n=0;n<arguments.length;n++)r[n]=arguments[n];for(var i=0,a=e;i<a.length;i++){var o=a[i];if(t=o.apply(void 0,r))return t}return t}},e.not=function(e){return function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return!e.apply(void 0,t)}},e.assertType=function(e){},e.singleElementArray=function(e){return void 0===e?void 0:[e]},e.enumerateInsertsAndDeletes=function(e,t,r,n,i,a){a=a||N;for(var o=0,s=0,c=e.length,u=t.length,l=!1;o<c&&s<u;){var _=e[o],d=t[s],p=r(_,d);-1===p?(n(_),o++,l=!0):1===p?(i(d),s++,l=!0):(a(d,_),o++,s++)}for(;o<c;)n(e[o++]),l=!0;for(;s<u;)i(t[s++]),l=!0;return l},e.fill=function(e,t){for(var r=Array(e),n=0;n<e;n++)r[n]=t(n);return r},e.cartesianProduct=function(e){var t=[];return G(e,t,void 0,0),t},e.padLeft=function(e,t,r){return void 0===r&&(r=" "),t<=e.length?e:r.repeat(t-e.length)+e},e.padRight=function(e,t,r){return void 0===r&&(r=" "),t<=e.length?e:e+r.repeat(t-e.length)},e.takeWhile=function(e,t){for(var r=e.length,n=0;n<r&&t(e[n]);)n++;return e.slice(0,n)},e.trimString=String.prototype.trim?function(e){return e.trim()}:function(t){return e.trimStringEnd(e.trimStringStart(t))},e.trimStringEnd=String.prototype.trimEnd?function(e){return e.trimEnd()}:function(t){var r=t.length-1;for(;r>=0&&e.isWhiteSpaceLike(t.charCodeAt(r));)r--;return t.slice(0,r+1)},e.trimStringStart=String.prototype.trimStart?function(e){return e.trimStart()}:function(e){return e.replace(/^\s+/g,"")}}(_||(_={})),function(e){var t;!function(e){e[e.Off=0]="Off",e[e.Error=1]="Error",e[e.Warning=2]="Warning",e[e.Info=3]="Info",e[e.Verbose=4]="Verbose"}(t=e.LogLevel||(e.LogLevel={})),function(r){var n,i,a=0;function o(){return null!=n?n:n=new e.Version(e.version)}function s(e){return r.currentLogLevel<=e}function c(e,t){r.loggingHost&&s(e)&&r.loggingHost.log(e,t)}function u(e){c(t.Info,e)}r.currentLogLevel=t.Warning,r.isDebugging=!1,r.enableDeprecationWarnings=!0,r.getTypeScriptVersion=o,r.shouldLog=s,r.log=u,(i=u=r.log||(r.log={})).error=function(e){c(t.Error,e)},i.warn=function(e){c(t.Warning,e)},i.log=function(e){c(t.Info,e)},i.trace=function(e){c(t.Verbose,e)};var l={};function _(e){return a>=e}function d(t,n){return!!_(t)||(l[n]={level:t,assertion:r[n]},r[n]=e.noop,!1)}function p(e,t){var r=new Error(e?"Debug Failure. ".concat(e):"Debug Failure.");throw Error.captureStackTrace&&Error.captureStackTrace(r,t||p),r}function f(e,t,r,n){e||(t=t?"False expression: ".concat(t):"False expression.",r&&(t+="\r\nVerbose Debug Information: "+("string"==typeof r?r:r())),p(t,n||f))}function g(e,t,r){null==e&&p(t,r||g)}function m(e,t,r){for(var n=0,i=e;n<i.length;n++){g(i[n],t,r||m)}}function y(t,r,n){void 0===r&&(r="Illegal value:");var i="object"==typeof t&&e.hasProperty(t,"kind")&&e.hasProperty(t,"pos")?"SyntaxKind: "+D(t.kind):JSON.stringify(t);return p("".concat(r," ").concat(i),n||y)}function v(e){}function h(t){if("function"!=typeof t)return"";if(e.hasProperty(t,"name"))return t.name;var r=Function.prototype.toString.call(t),n=/^function\s+([\w\$]+)\s*\(/.exec(r);return n?n[1]:""}function b(t,r,n){void 0===t&&(t=0);var i=function(t){var r=x.get(t);if(r)return r;var n=[];for(var i in t){var a=t[i];"number"==typeof a&&n.push([a,i])}var o=e.stableSort(n,(function(t,r){return e.compareValues(t[0],r[0])}));return x.set(t,o),o}(r);if(0===t)return i.length>0&&0===i[0][0]?i[0][1]:"0";if(n){for(var a=[],o=t,s=0,c=i;s<c.length;s++){var u=c[s],l=u[0],_=u[1];if(l>t)break;0!==l&&l&t&&(a.push(_),o&=~l)}if(0===o)return a.join("|")}else for(var d=0,p=i;d<p.length;d++){var f=p[d];l=f[0],_=f[1];if(l===t)return _}return t.toString()}r.getAssertionLevel=function(){return a},r.setAssertionLevel=function(t){var n=a;if(a=t,t>n)for(var i=0,o=e.getOwnKeys(l);i<o.length;i++){var s=o[i],c=l[s];void 0!==c&&r[s]!==c.assertion&&t>=c.level&&(r[s]=c,l[s]=void 0)}},r.shouldAssert=_,r.fail=p,r.failBadSyntaxKind=function e(t,r,n){return p("".concat(r||"Unexpected node.","\r\nNode ").concat(D(t.kind)," was unexpected."),n||e)},r.assert=f,r.assertEqual=function e(t,r,n,i,a){if(t!==r){var o=n?i?"".concat(n," ").concat(i):n:"";p("Expected ".concat(t," === ").concat(r,". ").concat(o),a||e)}},r.assertLessThan=function e(t,r,n,i){t>=r&&p("Expected ".concat(t," < ").concat(r,". ").concat(n||""),i||e)},r.assertLessThanOrEqual=function e(t,r,n){t>r&&p("Expected ".concat(t," <= ").concat(r),n||e)},r.assertGreaterThanOrEqual=function e(t,r,n){t<r&&p("Expected ".concat(t," >= ").concat(r),n||e)},r.assertIsDefined=g,r.checkDefined=function e(t,r,n){return g(t,r,n||e),t},r.assertEachIsDefined=m,r.checkEachDefined=function e(t,r,n){return m(t,r,n||e),t},r.assertNever=y,r.assertEachNode=function t(r,n,i,a){d(1,"assertEachNode")&&f(void 0===n||e.every(r,n),i||"Unexpected node.",(function(){return"Node array did not pass test '".concat(h(n),"'.")}),a||t)},r.assertNode=function e(t,r,n,i){d(1,"assertNode")&&f(void 0!==t&&(void 0===r||r(t)),n||"Unexpected node.",(function(){return"Node ".concat(D(null==t?void 0:t.kind)," did not pass test '").concat(h(r),"'.")}),i||e)},r.assertNotNode=function e(t,r,n,i){d(1,"assertNotNode")&&f(void 0===t||void 0===r||!r(t),n||"Unexpected node.",(function(){return"Node ".concat(D(t.kind)," should not have passed test '").concat(h(r),"'.")}),i||e)},r.assertOptionalNode=function e(t,r,n,i){d(1,"assertOptionalNode")&&f(void 0===r||void 0===t||r(t),n||"Unexpected node.",(function(){return"Node ".concat(D(null==t?void 0:t.kind)," did not pass test '").concat(h(r),"'.")}),i||e)},r.assertOptionalToken=function e(t,r,n,i){d(1,"assertOptionalToken")&&f(void 0===r||void 0===t||t.kind===r,n||"Unexpected node.",(function(){return"Node ".concat(D(null==t?void 0:t.kind)," was not a '").concat(D(r),"' token.")}),i||e)},r.assertMissingNode=function e(t,r,n){d(1,"assertMissingNode")&&f(void 0===t,r||"Unexpected node.",(function(){return"Node ".concat(D(t.kind)," was unexpected'.")}),n||e)},r.type=v,r.getFunctionName=h,r.formatSymbol=function(t){return"{ name: ".concat(e.unescapeLeadingUnderscores(t.escapedName),"; flags: ").concat(k(t.flags),"; declarations: ").concat(e.map(t.declarations,(function(e){return D(e.kind)}))," }")},r.formatEnum=b;var x=new e.Map;function D(t){return b(t,e.SyntaxKind,!1)}function S(t){return b(t,e.NodeFlags,!0)}function T(t){return b(t,e.ModifierFlags,!0)}function C(t){return b(t,e.TransformFlags,!0)}function E(t){return b(t,e.EmitFlags,!0)}function k(t){return b(t,e.SymbolFlags,!0)}function N(t){return b(t,e.TypeFlags,!0)}function A(t){return b(t,e.SignatureFlags,!0)}function F(t){return b(t,e.ObjectFlags,!0)}function P(t){return b(t,e.FlowFlags,!0)}r.formatSyntaxKind=D,r.formatSnippetKind=function(t){return b(t,e.SnippetKind,!1)},r.formatNodeFlags=S,r.formatModifierFlags=T,r.formatTransformFlags=C,r.formatEmitFlags=E,r.formatSymbolFlags=k,r.formatTypeFlags=N,r.formatSignatureFlags=A,r.formatObjectFlags=F,r.formatFlowFlags=P,r.formatRelationComparisonResult=function(t){return b(t,e.RelationComparisonResult,!0)},r.formatCheckMode=function(t){return b(t,e.CheckMode,!0)},r.formatSignatureCheckMode=function(t){return b(t,e.SignatureCheckMode,!0)},r.formatTypeFacts=function(t){return b(t,e.TypeFacts,!0)};var w,I,O,M=!1;function L(e){return function(){if(j(),!w)throw new Error("Debugging helpers could not be loaded.");return w}().formatControlFlowGraph(e)}function R(t){"__debugFlowFlags"in t||Object.defineProperties(t,{__tsDebuggerDisplay:{value:function(){var e=2&this.flags?"FlowStart":4&this.flags?"FlowBranchLabel":8&this.flags?"FlowLoopLabel":16&this.flags?"FlowAssignment":32&this.flags?"FlowTrueCondition":64&this.flags?"FlowFalseCondition":128&this.flags?"FlowSwitchClause":256&this.flags?"FlowArrayMutation":512&this.flags?"FlowCall":1024&this.flags?"FlowReduceLabel":1&this.flags?"FlowUnreachable":"UnknownFlow",t=-2048&this.flags;return"".concat(e).concat(t?" (".concat(P(t),")"):"")}},__debugFlowFlags:{get:function(){return b(this.flags,e.FlowFlags,!0)}},__debugToString:{value:function(){return L(this)}}})}function B(e){"__tsDebuggerDisplay"in e||Object.defineProperties(e,{__tsDebuggerDisplay:{value:function(e){return e=String(e).replace(/(?:,[\s\w\d_]+:[^,]+)+\]$/,"]"),"NodeArray ".concat(e)}}})}function j(){if(!M){var t,r;Object.defineProperties(e.objectAllocator.getSymbolConstructor().prototype,{__tsDebuggerDisplay:{value:function(){var t=33554432&this.flags?"TransientSymbol":"Symbol",r=-33554433&this.flags;return"".concat(t," '").concat(e.symbolName(this),"'").concat(r?" (".concat(k(r),")"):"")}},__debugFlags:{get:function(){return k(this.flags)}}}),Object.defineProperties(e.objectAllocator.getTypeConstructor().prototype,{__tsDebuggerDisplay:{value:function(){var t=98304&this.flags?"NullableType":384&this.flags?"LiteralType ".concat(JSON.stringify(this.value)):2048&this.flags?"LiteralType ".concat(this.value.negative?"-":"").concat(this.value.base10Value,"n"):8192&this.flags?"UniqueESSymbolType":32&this.flags?"EnumType":67359327&this.flags?"IntrinsicType ".concat(this.intrinsicName):1048576&this.flags?"UnionType":2097152&this.flags?"IntersectionType":4194304&this.flags?"IndexType":8388608&this.flags?"IndexedAccessType":16777216&this.flags?"ConditionalType":33554432&this.flags?"SubstitutionType":262144&this.flags?"TypeParameter":524288&this.flags?3&this.objectFlags?"InterfaceType":4&this.objectFlags?"TypeReference":8&this.objectFlags?"TupleType":16&this.objectFlags?"AnonymousType":32&this.objectFlags?"MappedType":1024&this.objectFlags?"ReverseMappedType":256&this.objectFlags?"EvolvingArrayType":"ObjectType":"Type",r=524288&this.flags?-1344&this.objectFlags:0;return"".concat(t).concat(this.symbol?" '".concat(e.symbolName(this.symbol),"'"):"").concat(r?" (".concat(F(r),")"):"")}},__debugFlags:{get:function(){return N(this.flags)}},__debugObjectFlags:{get:function(){return 524288&this.flags?F(this.objectFlags):""}},__debugTypeToString:{value:function(){var e=(void 0===t&&"function"==typeof WeakMap&&(t=new WeakMap),t),r=null==e?void 0:e.get(this);return void 0===r&&(r=this.checker.typeToString(this),null==e||e.set(this,r)),r}}}),Object.defineProperties(e.objectAllocator.getSignatureConstructor().prototype,{__debugFlags:{get:function(){return A(this.flags)}},__debugSignatureToString:{value:function(){var e;return null===(e=this.checker)||void 0===e?void 0:e.signatureToString(this)}}});for(var n=0,i=[e.objectAllocator.getNodeConstructor(),e.objectAllocator.getIdentifierConstructor(),e.objectAllocator.getTokenConstructor(),e.objectAllocator.getSourceFileConstructor()];n<i.length;n++){var a=i[n];e.hasProperty(a.prototype,"__debugKind")||Object.defineProperties(a.prototype,{__tsDebuggerDisplay:{value:function(){var t=e.isGeneratedIdentifier(this)?"GeneratedIdentifier":e.isIdentifier(this)?"Identifier '".concat(e.idText(this),"'"):e.isPrivateIdentifier(this)?"PrivateIdentifier '".concat(e.idText(this),"'"):e.isStringLiteral(this)?"StringLiteral ".concat(JSON.stringify(this.text.length<10?this.text:this.text.slice(10)+"...")):e.isNumericLiteral(this)?"NumericLiteral ".concat(this.text):e.isBigIntLiteral(this)?"BigIntLiteral ".concat(this.text,"n"):e.isTypeParameterDeclaration(this)?"TypeParameterDeclaration":e.isParameter(this)?"ParameterDeclaration":e.isConstructorDeclaration(this)?"ConstructorDeclaration":e.isGetAccessorDeclaration(this)?"GetAccessorDeclaration":e.isSetAccessorDeclaration(this)?"SetAccessorDeclaration":e.isCallSignatureDeclaration(this)?"CallSignatureDeclaration":e.isConstructSignatureDeclaration(this)?"ConstructSignatureDeclaration":e.isIndexSignatureDeclaration(this)?"IndexSignatureDeclaration":e.isTypePredicateNode(this)?"TypePredicateNode":e.isTypeReferenceNode(this)?"TypeReferenceNode":e.isFunctionTypeNode(this)?"FunctionTypeNode":e.isConstructorTypeNode(this)?"ConstructorTypeNode":e.isTypeQueryNode(this)?"TypeQueryNode":e.isTypeLiteralNode(this)?"TypeLiteralNode":e.isArrayTypeNode(this)?"ArrayTypeNode":e.isTupleTypeNode(this)?"TupleTypeNode":e.isOptionalTypeNode(this)?"OptionalTypeNode":e.isRestTypeNode(this)?"RestTypeNode":e.isUnionTypeNode(this)?"UnionTypeNode":e.isIntersectionTypeNode(this)?"IntersectionTypeNode":e.isConditionalTypeNode(this)?"ConditionalTypeNode":e.isInferTypeNode(this)?"InferTypeNode":e.isParenthesizedTypeNode(this)?"ParenthesizedTypeNode":e.isThisTypeNode(this)?"ThisTypeNode":e.isTypeOperatorNode(this)?"TypeOperatorNode":e.isIndexedAccessTypeNode(this)?"IndexedAccessTypeNode":e.isMappedTypeNode(this)?"MappedTypeNode":e.isLiteralTypeNode(this)?"LiteralTypeNode":e.isNamedTupleMember(this)?"NamedTupleMember":e.isImportTypeNode(this)?"ImportTypeNode":D(this.kind);return"".concat(t).concat(this.flags?" (".concat(S(this.flags),")"):"")}},__debugKind:{get:function(){return D(this.kind)}},__debugNodeFlags:{get:function(){return S(this.flags)}},__debugModifierFlags:{get:function(){return T(e.getEffectiveModifierFlagsNoCache(this))}},__debugTransformFlags:{get:function(){return C(this.transformFlags)}},__debugIsParseTreeNode:{get:function(){return e.isParseTreeNode(this)}},__debugEmitFlags:{get:function(){return E(e.getEmitFlags(this))}},__debugGetText:{value:function(t){if(e.nodeIsSynthesized(this))return"";var n=(void 0===r&&"function"==typeof WeakMap&&(r=new WeakMap),r),i=null==n?void 0:n.get(this);if(void 0===i){var a=e.getParseTreeNode(this),o=a&&e.getSourceFileOfNode(a);i=o?e.getSourceTextOfNodeFromSourceFile(o,a,t):"",null==n||n.set(this,i)}return i}}})}try{if(e.sys&&e.sys.require){var o=e.getDirectoryPath(e.resolvePath(e.sys.getExecutingFilePath())),s=e.sys.require(o,"./compiler-debug");s.error||(s.module.init(e),w=s.module)}}catch(c){}M=!0}}function J(t,r,n,i,a){var o=r?"DeprecationError: ":"DeprecationWarning: ";return o+="'".concat(t,"' "),o+=i?"has been deprecated since v".concat(i):"is deprecated",o+=r?" and can no longer be used.":n?" and will no longer be usable after v".concat(n,"."):".",o+=a?" ".concat(e.formatStringFromArgs(a,[t],0)):""}function z(t,n){var i,a;void 0===n&&(n={});var s="string"==typeof n.typeScriptVersion?new e.Version(n.typeScriptVersion):null!==(i=n.typeScriptVersion)&&void 0!==i?i:o(),c="string"==typeof n.errorAfter?new e.Version(n.errorAfter):n.errorAfter,l="string"==typeof n.warnAfter?new e.Version(n.warnAfter):n.warnAfter,_="string"==typeof n.since?new e.Version(n.since):null!==(a=n.since)&&void 0!==a?a:l,d=n.error||c&&s.compareTo(c)<=0,p=!l||s.compareTo(l)>=0;return d?function(e,t,r,n){var i=J(e,!0,t,r,n);return function(){throw new TypeError(i)}}(t,c,_,n.message):p?function(e,t,n,i){var a=!1;return function(){r.enableDeprecationWarnings&&!a&&(u.warn(J(e,!1,t,n,i)),a=!0)}}(t,c,_,n.message):e.noop}r.printControlFlowGraph=function(e){return console.log(L(e))},r.formatControlFlowGraph=L,r.attachFlowNodeDebugInfo=function(e){M&&("function"==typeof Object.setPrototypeOf?(I||R(I=Object.create(Object.prototype)),Object.setPrototypeOf(e,I)):R(e))},r.attachNodeArrayDebugInfo=function(e){M&&("function"==typeof Object.setPrototypeOf?(O||B(O=Object.create(Array.prototype)),Object.setPrototypeOf(e,O)):B(e))},r.enableDebugInfo=j,r.createDeprecation=z,r.deprecate=function(e,t){var r;return function(e,t){return function(){return e(),t.apply(this,arguments)}}(z(null!==(r=null==t?void 0:t.name)&&void 0!==r?r:h(e),t),e)},r.formatVariance=function(e){var t=7&e,r=0===t?"in out":3===t?"[bivariant]":2===t?"in":1===t?"out":4===t?"[independent]":"";return 8&e?r+=" (unmeasurable)":16&e&&(r+=" (unreliable)"),r};var U=function(){function t(){}return t.prototype.__debugToString=function(){var t;switch(this.kind){case 3:return(null===(t=this.debugInfo)||void 0===t?void 0:t.call(this))||"(function mapper)";case 0:return"".concat(this.source.__debugTypeToString()," -> ").concat(this.target.__debugTypeToString());case 1:return e.zipWith(this.sources,this.targets||e.map(this.sources,(function(){return"any"})),(function(e,t){return"".concat(e.__debugTypeToString()," -> ").concat("string"==typeof t?t:t.__debugTypeToString())})).join(", ");case 2:return e.zipWith(this.sources,this.targets,(function(e,t){return"".concat(e.__debugTypeToString()," -> ").concat(t().__debugTypeToString())})).join(", ");case 5:case 4:return"m1: ".concat(this.mapper1.__debugToString().split("\n").join("\n    "),"\nm2: ").concat(this.mapper2.__debugToString().split("\n").join("\n    "));default:return y(this)}},t}();r.DebugTypeMapper=U,r.attachDebugPrototypeIfDebug=function(e){return r.isDebugging?Object.setPrototypeOf(e,U.prototype):e}}(e.Debug||(e.Debug={}))}(_||(_={})),function(e){var t=/^(0|[1-9]\d*)(?:\.(0|[1-9]\d*)(?:\.(0|[1-9]\d*)(?:\-([a-z0-9-.]+))?(?:\+([a-z0-9-.]+))?)?)?$/i,r=/^(?:0|[1-9]\d*|[a-z-][a-z0-9-]*)(?:\.(?:0|[1-9]\d*|[a-z-][a-z0-9-]*))*$/i,n=/^(?:0|[1-9]\d*|[a-z-][a-z0-9-]*)$/i,i=/^[a-z0-9-]+(?:\.[a-z0-9-]+)*$/i,a=/^[a-z0-9-]+$/i,o=/^(0|[1-9]\d*)$/,s=function(){function t(t,r,i,o,s){if(void 0===r&&(r=0),void 0===i&&(i=0),void 0===o&&(o=""),void 0===s&&(s=""),"string"==typeof t){var u=e.Debug.checkDefined(c(t),"Invalid version");t=u.major,r=u.minor,i=u.patch,o=u.prerelease,s=u.build}e.Debug.assert(t>=0,"Invalid argument: major"),e.Debug.assert(r>=0,"Invalid argument: minor"),e.Debug.assert(i>=0,"Invalid argument: patch");var l=o?e.isArray(o)?o:o.split("."):e.emptyArray,_=s?e.isArray(s)?s:s.split("."):e.emptyArray;e.Debug.assert(e.every(l,(function(e){return n.test(e)})),"Invalid argument: prerelease"),e.Debug.assert(e.every(_,(function(e){return a.test(e)})),"Invalid argument: build"),this.major=t,this.minor=r,this.patch=i,this.prerelease=l,this.build=_}return t.tryParse=function(e){var r=c(e);if(r)return new t(r.major,r.minor,r.patch,r.prerelease,r.build)},t.prototype.compareTo=function(t){return this===t?0:void 0===t?1:e.compareValues(this.major,t.major)||e.compareValues(this.minor,t.minor)||e.compareValues(this.patch,t.patch)||function(t,r){if(t===r)return 0;if(0===t.length)return 0===r.length?0:1;if(0===r.length)return-1;for(var n=Math.min(t.length,r.length),i=0;i<n;i++){var a=t[i],s=r[i];if(a!==s){var c=o.test(a),u=o.test(s);if(c||u){if(c!==u)return c?-1:1;if(l=e.compareValues(+a,+s))return l}else{var l;if(l=e.compareStringsCaseSensitive(a,s))return l}}}return e.compareValues(t.length,r.length)}(this.prerelease,t.prerelease)},t.prototype.increment=function(r){switch(r){case"major":return new t(this.major+1,0,0);case"minor":return new t(this.major,this.minor+1,0);case"patch":return new t(this.major,this.minor,this.patch+1);default:return e.Debug.assertNever(r)}},t.prototype.with=function(e){var r=e.major,n=void 0===r?this.major:r,i=e.minor,a=void 0===i?this.minor:i,o=e.patch,s=void 0===o?this.patch:o,c=e.prerelease,u=void 0===c?this.prerelease:c,l=e.build;return new t(n,a,s,u,void 0===l?this.build:l)},t.prototype.toString=function(){var t="".concat(this.major,".").concat(this.minor,".").concat(this.patch);return e.some(this.prerelease)&&(t+="-".concat(this.prerelease.join("."))),e.some(this.build)&&(t+="+".concat(this.build.join("."))),t},t.zero=new t(0,0,0,["0"]),t}();function c(e){var n=t.exec(e);if(n){var a=n[1],o=n[2],s=void 0===o?"0":o,c=n[3],u=void 0===c?"0":c,l=n[4],_=void 0===l?"":l,d=n[5],p=void 0===d?"":d;if((!_||r.test(_))&&(!p||i.test(p)))return{major:parseInt(a,10),minor:parseInt(s,10),patch:parseInt(u,10),prerelease:_,build:p}}}e.Version=s;var u=function(){function t(t){this._alternatives=t?e.Debug.checkDefined(g(t),"Invalid range spec."):e.emptyArray}return t.tryParse=function(e){var r=g(e);if(r){var n=new t("");return n._alternatives=r,n}},t.prototype.test=function(e){return"string"==typeof e&&(e=new s(e)),function(e,t){if(0===t.length)return!0;for(var r=0,n=t;r<n.length;r++){if(x(e,n[r]))return!0}return!1}(e,this._alternatives)},t.prototype.toString=function(){return t=this._alternatives,e.map(t,S).join(" || ")||"*";var t},t}();e.VersionRange=u;var l=/\|\|/g,_=/\s+/g,d=/^([xX*0]|[1-9]\d*)(?:\.([xX*0]|[1-9]\d*)(?:\.([xX*0]|[1-9]\d*)(?:-([a-z0-9-.]+))?(?:\+([a-z0-9-.]+))?)?)?$/i,p=/^\s*([a-z0-9-+.*]+)\s+-\s+([a-z0-9-+.*]+)\s*$/i,f=/^(~|\^|<|<=|>|>=|=)?\s*([a-z0-9-+.*]+)$/i;function g(t){for(var r=[],n=0,i=e.trimString(t).split(l);n<i.length;n++){var a=i[n];if(a){var o=[];a=e.trimString(a);var s=p.exec(a);if(s){if(!y(s[1],s[2],o))return}else for(var c=0,u=a.split(_);c<u.length;c++){var d=u[c],g=f.exec(e.trimString(d));if(!g||!v(g[1],g[2],o))return}r.push(o)}}return r}function m(e){var t=d.exec(e);if(t){var r=t[1],n=t[2],i=void 0===n?"*":n,a=t[3],o=void 0===a?"*":a,c=t[4],u=t[5];return{version:new s(h(r)?0:parseInt(r,10),h(r)||h(i)?0:parseInt(i,10),h(r)||h(i)||h(o)?0:parseInt(o,10),c,u),major:r,minor:i,patch:o}}}function y(e,t,r){var n=m(e);if(!n)return!1;var i=m(t);return!!i&&(h(n.major)||r.push(b(">=",n.version)),h(i.major)||r.push(h(i.minor)?b("<",i.version.increment("major")):h(i.patch)?b("<",i.version.increment("minor")):b("<=",i.version)),!0)}function v(e,t,r){var n=m(t);if(!n)return!1;var i=n.version,a=n.major,o=n.minor,c=n.patch;if(h(a))"<"!==e&&">"!==e||r.push(b("<",s.zero));else switch(e){case"~":r.push(b(">=",i)),r.push(b("<",i.increment(h(o)?"major":"minor")));break;case"^":r.push(b(">=",i)),r.push(b("<",i.increment(i.major>0||h(o)?"major":i.minor>0||h(c)?"minor":"patch")));break;case"<":case">=":r.push(h(o)||h(c)?b(e,i.with({prerelease:"0"})):b(e,i));break;case"<=":case">":r.push(h(o)?b("<="===e?"<":">=",i.increment("major").with({prerelease:"0"})):h(c)?b("<="===e?"<":">=",i.increment("minor").with({prerelease:"0"})):b(e,i));break;case"=":case void 0:h(o)||h(c)?(r.push(b(">=",i.with({prerelease:"0"}))),r.push(b("<",i.increment(h(o)?"major":"minor").with({prerelease:"0"})))):r.push(b("=",i));break;default:return!1}return!0}function h(e){return"*"===e||"x"===e||"X"===e}function b(e,t){return{operator:e,operand:t}}function x(e,t){for(var r=0,n=t;r<n.length;r++){var i=n[r];if(!D(e,i.operator,i.operand))return!1}return!0}function D(t,r,n){var i=t.compareTo(n);switch(r){case"<":return i<0;case"<=":return i<=0;case">":return i>0;case">=":return i>=0;case"=":return 0===i;default:return e.Debug.assertNever(r)}}function S(t){return e.map(t,T).join(" ")}function T(e){return"".concat(e.operator).concat(e.operand)}}(_||(_={})),function(e){function t(e,t){return"object"==typeof e&&"number"==typeof e.timeOrigin&&"function"==typeof e.mark&&"function"==typeof e.measure&&"function"==typeof e.now&&"function"==typeof e.clearMarks&&"function"==typeof e.clearMeasures&&"function"==typeof t}var n=function(){if("object"==typeof performance&&"function"==typeof PerformanceObserver&&t(performance,PerformanceObserver))return{shouldWriteNativeEvents:!0,performance:performance,PerformanceObserver:PerformanceObserver}}()||function(){if("undefined"!=typeof process&&process.nextTick&&!process.browser)try{var n,i=r(Object(function(){var e=new Error("Cannot find module 'perf_hooks'");throw e.code="MODULE_NOT_FOUND",e}())),a=i.performance,o=i.PerformanceObserver;if(t(a,o)){n=a;var s=new e.Version(process.versions.node);return new e.VersionRange("<12.16.3 || 13 <13.13").test(s)&&(n={get timeOrigin(){return a.timeOrigin},now:function(){return a.now()},mark:function(e){return a.mark(e)},measure:function(e,t,r){void 0===t&&(t="nodeStart"),void 0===r&&(r="__performance.measure-fix__",a.mark(r)),a.measure(e,t,r),"__performance.measure-fix__"===r&&a.clearMarks("__performance.measure-fix__")},clearMarks:function(e){return a.clearMarks(e)},clearMeasures:function(e){return a.clearMeasures(e)}}),{shouldWriteNativeEvents:!1,performance:n,PerformanceObserver:o}}}catch(c){}}(),i=null==n?void 0:n.performance;e.tryGetNativePerformanceHooks=function(){return n},e.timestamp=i?function(){return i.now()}:Date.now?Date.now:function(){return+new Date}}(_||(_={})),function(e){!function(t){var r,n;function i(t,r,n){var i=0;return{enter:function(){1==++i&&l(r)},exit:function(){0==--i?(l(n),_(t,r,n)):i<0&&e.Debug.fail("enter/exit count does not match.")}}}t.createTimerIf=function(e,r,n,a){return e?i(r,n,a):t.nullTimer},t.createTimer=i,t.nullTimer={enter:e.noop,exit:e.noop};var a=!1,o=e.timestamp(),s=new e.Map,c=new e.Map,u=new e.Map;function l(t){var r;if(a){var i=null!==(r=c.get(t))&&void 0!==r?r:0;c.set(t,i+1),s.set(t,e.timestamp()),null==n||n.mark(t)}}function _(t,r,i){var c,l;if(a){var _=null!==(c=void 0!==i?s.get(i):void 0)&&void 0!==c?c:e.timestamp(),d=null!==(l=void 0!==r?s.get(r):void 0)&&void 0!==l?l:o,p=u.get(t)||0;u.set(t,p+(_-d)),null==n||n.measure(t,r,i)}}t.mark=l,t.measure=_,t.getCount=function(e){return c.get(e)||0},t.getDuration=function(e){return u.get(e)||0},t.forEachMeasure=function(e){u.forEach((function(t,r){return e(r,t)}))},t.forEachMark=function(e){s.forEach((function(t,r){return e(r)}))},t.clearMeasures=function(e){void 0!==e?u.delete(e):u.clear(),null==n||n.clearMeasures(e)},t.clearMarks=function(e){void 0!==e?(c.delete(e),s.delete(e)):(c.clear(),s.clear()),null==n||n.clearMarks(e)},t.isEnabled=function(){return a},t.enable=function(t){var i;return void 0===t&&(t=e.sys),a||(a=!0,r||(r=e.tryGetNativePerformanceHooks()),r&&(o=r.performance.timeOrigin,(r.shouldWriteNativeEvents||(null===(i=null==t?void 0:t.cpuProfilingEnabled)||void 0===i?void 0:i.call(t))||(null==t?void 0:t.debugMode))&&(n=r.performance))),!0},t.disable=function(){a&&(s.clear(),c.clear(),u.clear(),n=void 0,a=!1)}}(e.performance||(e.performance={}))}(_||(_={})),function(e){var t,n,i={logEvent:e.noop,logErrEvent:e.noop,logPerfEvent:e.noop,logInfoEvent:e.noop,logStartCommand:e.noop,logStopCommand:e.noop,logStartUpdateProgram:e.noop,logStopUpdateProgram:e.noop,logStartUpdateGraph:e.noop,logStopUpdateGraph:e.noop,logStartResolveModule:e.noop,logStopResolveModule:e.noop,logStartParseSourceFile:e.noop,logStopParseSourceFile:e.noop,logStartReadFile:e.noop,logStopReadFile:e.noop,logStartBindFile:e.noop,logStopBindFile:e.noop,logStartScheduledOperation:e.noop,logStopScheduledOperation:e.noop};try{var a=null!==(t=process.env.TS_ETW_MODULE_PATH)&&void 0!==t?t:"./node_modules/@microsoft/typescript-etw";n=r(3411)(a)}catch(o){n=void 0}e.perfLogger=n&&n.logEvent?n:i}(_||(_={})),function(e){var t;!function(t){var n,i,a,s=0,c=0,u=[],l=[];t.startTracing=function(_,d,p){if(e.Debug.assert(!e.tracing,"Tracing already started"),void 0===n)try{n=r(2715)}catch(v){throw new Error("tracing requires having fs\n(original error: ".concat(v.message||v,")"))}i=_,u.length=0,void 0===a&&(a=e.combinePaths(d,"legend.json")),n.existsSync(d)||n.mkdirSync(d,{recursive:!0});var f="build"===i?".".concat(process.pid,"-").concat(++s):"server"===i?".".concat(process.pid):"",g=e.combinePaths(d,"trace".concat(f,".json")),m=e.combinePaths(d,"types".concat(f,".json"));l.push({configFilePath:p,tracePath:g,typesPath:m}),c=n.openSync(g,"w"),e.tracing=t;var y={cat:"__metadata",ph:"M",ts:1e3*e.timestamp(),pid:1,tid:1};n.writeSync(c,"[\n"+[o({name:"process_name",args:{name:"tsc"}},y),o({name:"thread_name",args:{name:"Main"}},y),o(o({name:"TracingStartedInBrowser"},y),{cat:"disabled-by-default-devtools.timeline"})].map((function(e){return JSON.stringify(e)})).join(",\n"))},t.stopTracing=function(){e.Debug.assert(e.tracing,"Tracing is not in progress"),e.Debug.assert(!!u.length==("server"!==i)),n.writeSync(c,"\n]\n"),n.closeSync(c),e.tracing=void 0,u.length?function(t){var r,i,a,s,c,u,_,d,p,g,m,y,v,h,b,x,D,S,T,C,E,k;e.performance.mark("beginDumpTypes");var N=l[l.length-1].typesPath,A=n.openSync(N,"w"),F=new e.Map;n.writeSync(A,"[");for(var P=t.length,w=0;w<P;w++){var I=t[w],O=I.objectFlags,M=null!==(r=I.aliasSymbol)&&void 0!==r?r:I.symbol,L=void 0;if(16&O|2944&I.flags)try{L=null===(i=I.checker)||void 0===i?void 0:i.typeToString(I)}catch(Z){L=void 0}var R={};if(8388608&I.flags){var B=I;R={indexedAccessObjectType:null===(a=B.objectType)||void 0===a?void 0:a.id,indexedAccessIndexType:null===(s=B.indexType)||void 0===s?void 0:s.id}}var j={};if(4&O){var J=I;j={instantiatedType:null===(c=J.target)||void 0===c?void 0:c.id,typeArguments:null===(u=J.resolvedTypeArguments)||void 0===u?void 0:u.map((function(e){return e.id})),referenceLocation:f(J.node)}}var z={};if(16777216&I.flags){var U=I;z={conditionalCheckType:null===(_=U.checkType)||void 0===_?void 0:_.id,conditionalExtendsType:null===(d=U.extendsType)||void 0===d?void 0:d.id,conditionalTrueType:null!==(g=null===(p=U.resolvedTrueType)||void 0===p?void 0:p.id)&&void 0!==g?g:-1,conditionalFalseType:null!==(y=null===(m=U.resolvedFalseType)||void 0===m?void 0:m.id)&&void 0!==y?y:-1}}var K={};if(33554432&I.flags){var V=I;K={substitutionBaseType:null===(v=V.baseType)||void 0===v?void 0:v.id,constraintType:null===(h=V.constraint)||void 0===h?void 0:h.id}}var q={};if(1024&O){var W=I;q={reverseMappedSourceType:null===(b=W.source)||void 0===b?void 0:b.id,reverseMappedMappedType:null===(x=W.mappedType)||void 0===x?void 0:x.id,reverseMappedConstraintType:null===(D=W.constraintType)||void 0===D?void 0:D.id}}var H={};if(256&O){var G=I;H={evolvingArrayElementType:G.elementType.id,evolvingArrayFinalType:null===(S=G.finalArrayType)||void 0===S?void 0:S.id}}var Q=void 0,X=I.checker.getRecursionIdentity(I);X&&((Q=F.get(X))||(Q=F.size,F.set(X,Q)));var Y=o(o(o(o(o(o(o({id:I.id,intrinsicName:I.intrinsicName,symbolName:(null==M?void 0:M.escapedName)&&e.unescapeLeadingUnderscores(M.escapedName),recursionId:Q,isTuple:!!(8&O)||void 0,unionTypes:1048576&I.flags?null===(T=I.types)||void 0===T?void 0:T.map((function(e){return e.id})):void 0,intersectionTypes:2097152&I.flags?I.types.map((function(e){return e.id})):void 0,aliasTypeArguments:null===(C=I.aliasTypeArguments)||void 0===C?void 0:C.map((function(e){return e.id})),keyofType:4194304&I.flags?null===(E=I.type)||void 0===E?void 0:E.id:void 0},R),j),z),K),q),H),{destructuringPattern:f(I.pattern),firstDeclaration:f(null===(k=null==M?void 0:M.declarations)||void 0===k?void 0:k[0]),flags:e.Debug.formatTypeFlags(I.flags).split("|"),display:L});n.writeSync(A,JSON.stringify(Y)),w<P-1&&n.writeSync(A,",\n")}n.writeSync(A,"]\n"),n.closeSync(A),e.performance.mark("endDumpTypes"),e.performance.measure("Dump types","beginDumpTypes","endDumpTypes")}(u):l[l.length-1].typesPath=void 0},t.recordType=function(e){"server"!==i&&u.push(e)},function(e){e.Parse="parse",e.Program="program",e.Bind="bind",e.Check="check",e.CheckTypes="checkTypes",e.Emit="emit",e.Session="session"}(t.Phase||(t.Phase={})),t.instant=function(e,t,r){p("I",e,t,r,'"s":"g"')};var _=[];t.push=function(t,r,n,i){void 0===i&&(i=!1),i&&p("B",t,r,n),_.push({phase:t,name:r,args:n,time:1e3*e.timestamp(),separateBeginAndEnd:i})},t.pop=function(t){e.Debug.assert(_.length>0),d(_.length-1,1e3*e.timestamp(),t),_.length--},t.popAll=function(){for(var t=1e3*e.timestamp(),r=_.length-1;r>=0;r--)d(r,t);_.length=0};function d(t,r,n){var i=_[t],a=i.phase,s=i.name,c=i.args,u=i.time;i.separateBeginAndEnd?(e.Debug.assert(!n,"`results` are not supported for events with `separateBeginAndEnd`"),p("E",a,s,c,void 0,r)):1e4-u%1e4<=r-u&&p("X",a,s,o(o({},c),{results:n}),'"dur":'.concat(r-u),u)}function p(t,r,a,o,s,u){void 0===u&&(u=1e3*e.timestamp()),"server"===i&&"checkTypes"===r||(e.performance.mark("beginTracing"),n.writeSync(c,',\n{"pid":1,"tid":1,"ph":"'.concat(t,'","cat":"').concat(r,'","ts":').concat(u,',"name":"').concat(a,'"')),s&&n.writeSync(c,",".concat(s)),o&&n.writeSync(c,',"args":'.concat(JSON.stringify(o))),n.writeSync(c,"}"),e.performance.mark("endTracing"),e.performance.measure("Tracing","beginTracing","endTracing"))}function f(t){var r=e.getSourceFileOfNode(t);return r?{path:r.path,start:n(e.getLineAndCharacterOfPosition(r,t.pos)),end:n(e.getLineAndCharacterOfPosition(r,t.end))}:void 0;function n(e){return{line:e.line+1,character:e.character+1}}}t.dumpLegend=function(){a&&n.writeFileSync(a,JSON.stringify(l))}}(t||(t={})),e.startTracing=t.startTracing,e.dumpTracingLegend=t.dumpLegend}(_||(_={})),function(e){!function(e){e[e.Unknown=0]="Unknown",e[e.EndOfFileToken=1]="EndOfFileToken",e[e.SingleLineCommentTrivia=2]="SingleLineCommentTrivia",e[e.MultiLineCommentTrivia=3]="MultiLineCommentTrivia",e[e.NewLineTrivia=4]="NewLineTrivia",e[e.WhitespaceTrivia=5]="WhitespaceTrivia",e[e.ShebangTrivia=6]="ShebangTrivia",e[e.ConflictMarkerTrivia=7]="ConflictMarkerTrivia",e[e.NumericLiteral=8]="NumericLiteral",e[e.BigIntLiteral=9]="BigIntLiteral",e[e.StringLiteral=10]="StringLiteral",e[e.JsxText=11]="JsxText",e[e.JsxTextAllWhiteSpaces=12]="JsxTextAllWhiteSpaces",e[e.RegularExpressionLiteral=13]="RegularExpressionLiteral",e[e.NoSubstitutionTemplateLiteral=14]="NoSubstitutionTemplateLiteral",e[e.TemplateHead=15]="TemplateHead",e[e.TemplateMiddle=16]="TemplateMiddle",e[e.TemplateTail=17]="TemplateTail",e[e.OpenBraceToken=18]="OpenBraceToken",e[e.CloseBraceToken=19]="CloseBraceToken",e[e.OpenParenToken=20]="OpenParenToken",e[e.CloseParenToken=21]="CloseParenToken",e[e.OpenBracketToken=22]="OpenBracketToken",e[e.CloseBracketToken=23]="CloseBracketToken",e[e.DotToken=24]="DotToken",e[e.DotDotDotToken=25]="DotDotDotToken",e[e.SemicolonToken=26]="SemicolonToken",e[e.CommaToken=27]="CommaToken",e[e.QuestionDotToken=28]="QuestionDotToken",e[e.LessThanToken=29]="LessThanToken",e[e.LessThanSlashToken=30]="LessThanSlashToken",e[e.GreaterThanToken=31]="GreaterThanToken",e[e.LessThanEqualsToken=32]="LessThanEqualsToken",e[e.GreaterThanEqualsToken=33]="GreaterThanEqualsToken",e[e.EqualsEqualsToken=34]="EqualsEqualsToken",e[e.ExclamationEqualsToken=35]="ExclamationEqualsToken",e[e.EqualsEqualsEqualsToken=36]="EqualsEqualsEqualsToken",e[e.ExclamationEqualsEqualsToken=37]="ExclamationEqualsEqualsToken",e[e.EqualsGreaterThanToken=38]="EqualsGreaterThanToken",e[e.PlusToken=39]="PlusToken",e[e.MinusToken=40]="MinusToken",e[e.AsteriskToken=41]="AsteriskToken",e[e.AsteriskAsteriskToken=42]="AsteriskAsteriskToken",e[e.SlashToken=43]="SlashToken",e[e.PercentToken=44]="PercentToken",e[e.PlusPlusToken=45]="PlusPlusToken",e[e.MinusMinusToken=46]="MinusMinusToken",e[e.LessThanLessThanToken=47]="LessThanLessThanToken",e[e.GreaterThanGreaterThanToken=48]="GreaterThanGreaterThanToken",e[e.GreaterThanGreaterThanGreaterThanToken=49]="GreaterThanGreaterThanGreaterThanToken",e[e.AmpersandToken=50]="AmpersandToken",e[e.BarToken=51]="BarToken",e[e.CaretToken=52]="CaretToken",e[e.ExclamationToken=53]="ExclamationToken",e[e.TildeToken=54]="TildeToken",e[e.AmpersandAmpersandToken=55]="AmpersandAmpersandToken",e[e.BarBarToken=56]="BarBarToken",e[e.QuestionToken=57]="QuestionToken",e[e.ColonToken=58]="ColonToken",e[e.AtToken=59]="AtToken",e[e.QuestionQuestionToken=60]="QuestionQuestionToken",e[e.BacktickToken=61]="BacktickToken",e[e.HashToken=62]="HashToken",e[e.EqualsToken=63]="EqualsToken",e[e.PlusEqualsToken=64]="PlusEqualsToken",e[e.MinusEqualsToken=65]="MinusEqualsToken",e[e.AsteriskEqualsToken=66]="AsteriskEqualsToken",e[e.AsteriskAsteriskEqualsToken=67]="AsteriskAsteriskEqualsToken",e[e.SlashEqualsToken=68]="SlashEqualsToken",e[e.PercentEqualsToken=69]="PercentEqualsToken",e[e.LessThanLessThanEqualsToken=70]="LessThanLessThanEqualsToken",e[e.GreaterThanGreaterThanEqualsToken=71]="GreaterThanGreaterThanEqualsToken",e[e.GreaterThanGreaterThanGreaterThanEqualsToken=72]="GreaterThanGreaterThanGreaterThanEqualsToken",e[e.AmpersandEqualsToken=73]="AmpersandEqualsToken",e[e.BarEqualsToken=74]="BarEqualsToken",e[e.BarBarEqualsToken=75]="BarBarEqualsToken",e[e.AmpersandAmpersandEqualsToken=76]="AmpersandAmpersandEqualsToken",e[e.QuestionQuestionEqualsToken=77]="QuestionQuestionEqualsToken",e[e.CaretEqualsToken=78]="CaretEqualsToken",e[e.Identifier=79]="Identifier",e[e.PrivateIdentifier=80]="PrivateIdentifier",e[e.BreakKeyword=81]="BreakKeyword",e[e.CaseKeyword=82]="CaseKeyword",e[e.CatchKeyword=83]="CatchKeyword",e[e.ClassKeyword=84]="ClassKeyword",e[e.ConstKeyword=85]="ConstKeyword",e[e.ContinueKeyword=86]="ContinueKeyword",e[e.DebuggerKeyword=87]="DebuggerKeyword",e[e.DefaultKeyword=88]="DefaultKeyword",e[e.DeleteKeyword=89]="DeleteKeyword",e[e.DoKeyword=90]="DoKeyword",e[e.ElseKeyword=91]="ElseKeyword",e[e.EnumKeyword=92]="EnumKeyword",e[e.ExportKeyword=93]="ExportKeyword",e[e.ExtendsKeyword=94]="ExtendsKeyword",e[e.FalseKeyword=95]="FalseKeyword",e[e.FinallyKeyword=96]="FinallyKeyword",e[e.ForKeyword=97]="ForKeyword",e[e.FunctionKeyword=98]="FunctionKeyword",e[e.IfKeyword=99]="IfKeyword",e[e.ImportKeyword=100]="ImportKeyword",e[e.InKeyword=101]="InKeyword",e[e.InstanceOfKeyword=102]="InstanceOfKeyword",e[e.NewKeyword=103]="NewKeyword",e[e.NullKeyword=104]="NullKeyword",e[e.ReturnKeyword=105]="ReturnKeyword",e[e.SuperKeyword=106]="SuperKeyword",e[e.SwitchKeyword=107]="SwitchKeyword",e[e.ThisKeyword=108]="ThisKeyword",e[e.ThrowKeyword=109]="ThrowKeyword",e[e.TrueKeyword=110]="TrueKeyword",e[e.TryKeyword=111]="TryKeyword",e[e.TypeOfKeyword=112]="TypeOfKeyword",e[e.VarKeyword=113]="VarKeyword",e[e.VoidKeyword=114]="VoidKeyword",e[e.WhileKeyword=115]="WhileKeyword",e[e.WithKeyword=116]="WithKeyword",e[e.ImplementsKeyword=117]="ImplementsKeyword",e[e.InterfaceKeyword=118]="InterfaceKeyword",e[e.LetKeyword=119]="LetKeyword",e[e.PackageKeyword=120]="PackageKeyword",e[e.PrivateKeyword=121]="PrivateKeyword",e[e.ProtectedKeyword=122]="ProtectedKeyword",e[e.PublicKeyword=123]="PublicKeyword",e[e.StaticKeyword=124]="StaticKeyword",e[e.YieldKeyword=125]="YieldKeyword",e[e.AbstractKeyword=126]="AbstractKeyword",e[e.AccessorKeyword=127]="AccessorKeyword",e[e.AsKeyword=128]="AsKeyword",e[e.AssertsKeyword=129]="AssertsKeyword",e[e.AssertKeyword=130]="AssertKeyword",e[e.AnyKeyword=131]="AnyKeyword",e[e.AsyncKeyword=132]="AsyncKeyword",e[e.AwaitKeyword=133]="AwaitKeyword",e[e.BooleanKeyword=134]="BooleanKeyword",e[e.ConstructorKeyword=135]="ConstructorKeyword",e[e.DeclareKeyword=136]="DeclareKeyword",e[e.GetKeyword=137]="GetKeyword",e[e.InferKeyword=138]="InferKeyword",e[e.IntrinsicKeyword=139]="IntrinsicKeyword",e[e.IsKeyword=140]="IsKeyword",e[e.KeyOfKeyword=141]="KeyOfKeyword",e[e.ModuleKeyword=142]="ModuleKeyword",e[e.NamespaceKeyword=143]="NamespaceKeyword",e[e.NeverKeyword=144]="NeverKeyword",e[e.OutKeyword=145]="OutKeyword",e[e.ReadonlyKeyword=146]="ReadonlyKeyword",e[e.RequireKeyword=147]="RequireKeyword",e[e.NumberKeyword=148]="NumberKeyword",e[e.ObjectKeyword=149]="ObjectKeyword",e[e.SatisfiesKeyword=150]="SatisfiesKeyword",e[e.SetKeyword=151]="SetKeyword",e[e.StringKeyword=152]="StringKeyword",e[e.SymbolKeyword=153]="SymbolKeyword",e[e.TypeKeyword=154]="TypeKeyword",e[e.UndefinedKeyword=155]="UndefinedKeyword",e[e.UniqueKeyword=156]="UniqueKeyword",e[e.UnknownKeyword=157]="UnknownKeyword",e[e.FromKeyword=158]="FromKeyword",e[e.GlobalKeyword=159]="GlobalKeyword",e[e.BigIntKeyword=160]="BigIntKeyword",e[e.OverrideKeyword=161]="OverrideKeyword",e[e.OfKeyword=162]="OfKeyword",e[e.QualifiedName=163]="QualifiedName",e[e.ComputedPropertyName=164]="ComputedPropertyName",e[e.TypeParameter=165]="TypeParameter",e[e.Parameter=166]="Parameter",e[e.Decorator=167]="Decorator",e[e.PropertySignature=168]="PropertySignature",e[e.PropertyDeclaration=169]="PropertyDeclaration",e[e.MethodSignature=170]="MethodSignature",e[e.MethodDeclaration=171]="MethodDeclaration",e[e.ClassStaticBlockDeclaration=172]="ClassStaticBlockDeclaration",e[e.Constructor=173]="Constructor",e[e.GetAccessor=174]="GetAccessor",e[e.SetAccessor=175]="SetAccessor",e[e.CallSignature=176]="CallSignature",e[e.ConstructSignature=177]="ConstructSignature",e[e.IndexSignature=178]="IndexSignature",e[e.TypePredicate=179]="TypePredicate",e[e.TypeReference=180]="TypeReference",e[e.FunctionType=181]="FunctionType",e[e.ConstructorType=182]="ConstructorType",e[e.TypeQuery=183]="TypeQuery",e[e.TypeLiteral=184]="TypeLiteral",e[e.ArrayType=185]="ArrayType",e[e.TupleType=186]="TupleType",e[e.OptionalType=187]="OptionalType",e[e.RestType=188]="RestType",e[e.UnionType=189]="UnionType",e[e.IntersectionType=190]="IntersectionType",e[e.ConditionalType=191]="ConditionalType",e[e.InferType=192]="InferType",e[e.ParenthesizedType=193]="ParenthesizedType",e[e.ThisType=194]="ThisType",e[e.TypeOperator=195]="TypeOperator",e[e.IndexedAccessType=196]="IndexedAccessType",e[e.MappedType=197]="MappedType",e[e.LiteralType=198]="LiteralType",e[e.NamedTupleMember=199]="NamedTupleMember",e[e.TemplateLiteralType=200]="TemplateLiteralType",e[e.TemplateLiteralTypeSpan=201]="TemplateLiteralTypeSpan",e[e.ImportType=202]="ImportType",e[e.ObjectBindingPattern=203]="ObjectBindingPattern",e[e.ArrayBindingPattern=204]="ArrayBindingPattern",e[e.BindingElement=205]="BindingElement",e[e.ArrayLiteralExpression=206]="ArrayLiteralExpression",e[e.ObjectLiteralExpression=207]="ObjectLiteralExpression",e[e.PropertyAccessExpression=208]="PropertyAccessExpression",e[e.ElementAccessExpression=209]="ElementAccessExpression",e[e.CallExpression=210]="CallExpression",e[e.NewExpression=211]="NewExpression",e[e.TaggedTemplateExpression=212]="TaggedTemplateExpression",e[e.TypeAssertionExpression=213]="TypeAssertionExpression",e[e.ParenthesizedExpression=214]="ParenthesizedExpression",e[e.FunctionExpression=215]="FunctionExpression",e[e.ArrowFunction=216]="ArrowFunction",e[e.DeleteExpression=217]="DeleteExpression",e[e.TypeOfExpression=218]="TypeOfExpression",e[e.VoidExpression=219]="VoidExpression",e[e.AwaitExpression=220]="AwaitExpression",e[e.PrefixUnaryExpression=221]="PrefixUnaryExpression",e[e.PostfixUnaryExpression=222]="PostfixUnaryExpression",e[e.BinaryExpression=223]="BinaryExpression",e[e.ConditionalExpression=224]="ConditionalExpression",e[e.TemplateExpression=225]="TemplateExpression",e[e.YieldExpression=226]="YieldExpression",e[e.SpreadElement=227]="SpreadElement",e[e.ClassExpression=228]="ClassExpression",e[e.OmittedExpression=229]="OmittedExpression",e[e.ExpressionWithTypeArguments=230]="ExpressionWithTypeArguments",e[e.AsExpression=231]="AsExpression",e[e.NonNullExpression=232]="NonNullExpression",e[e.MetaProperty=233]="MetaProperty",e[e.SyntheticExpression=234]="SyntheticExpression",e[e.SatisfiesExpression=235]="SatisfiesExpression",e[e.TemplateSpan=236]="TemplateSpan",e[e.SemicolonClassElement=237]="SemicolonClassElement",e[e.Block=238]="Block",e[e.EmptyStatement=239]="EmptyStatement",e[e.VariableStatement=240]="VariableStatement",e[e.ExpressionStatement=241]="ExpressionStatement",e[e.IfStatement=242]="IfStatement",e[e.DoStatement=243]="DoStatement",e[e.WhileStatement=244]="WhileStatement",e[e.ForStatement=245]="ForStatement",e[e.ForInStatement=246]="ForInStatement",e[e.ForOfStatement=247]="ForOfStatement",e[e.ContinueStatement=248]="ContinueStatement",e[e.BreakStatement=249]="BreakStatement",e[e.ReturnStatement=250]="ReturnStatement",e[e.WithStatement=251]="WithStatement",e[e.SwitchStatement=252]="SwitchStatement",e[e.LabeledStatement=253]="LabeledStatement",e[e.ThrowStatement=254]="ThrowStatement",e[e.TryStatement=255]="TryStatement",e[e.DebuggerStatement=256]="DebuggerStatement",e[e.VariableDeclaration=257]="VariableDeclaration",e[e.VariableDeclarationList=258]="VariableDeclarationList",e[e.FunctionDeclaration=259]="FunctionDeclaration",e[e.ClassDeclaration=260]="ClassDeclaration",e[e.InterfaceDeclaration=261]="InterfaceDeclaration",e[e.TypeAliasDeclaration=262]="TypeAliasDeclaration",e[e.EnumDeclaration=263]="EnumDeclaration",e[e.ModuleDeclaration=264]="ModuleDeclaration",e[e.ModuleBlock=265]="ModuleBlock",e[e.CaseBlock=266]="CaseBlock",e[e.NamespaceExportDeclaration=267]="NamespaceExportDeclaration",e[e.ImportEqualsDeclaration=268]="ImportEqualsDeclaration",e[e.ImportDeclaration=269]="ImportDeclaration",e[e.ImportClause=270]="ImportClause",e[e.NamespaceImport=271]="NamespaceImport",e[e.NamedImports=272]="NamedImports",e[e.ImportSpecifier=273]="ImportSpecifier",e[e.ExportAssignment=274]="ExportAssignment",e[e.ExportDeclaration=275]="ExportDeclaration",e[e.NamedExports=276]="NamedExports",e[e.NamespaceExport=277]="NamespaceExport",e[e.ExportSpecifier=278]="ExportSpecifier",e[e.MissingDeclaration=279]="MissingDeclaration",e[e.ExternalModuleReference=280]="ExternalModuleReference",e[e.JsxElement=281]="JsxElement",e[e.JsxSelfClosingElement=282]="JsxSelfClosingElement",e[e.JsxOpeningElement=283]="JsxOpeningElement",e[e.JsxClosingElement=284]="JsxClosingElement",e[e.JsxFragment=285]="JsxFragment",e[e.JsxOpeningFragment=286]="JsxOpeningFragment",e[e.JsxClosingFragment=287]="JsxClosingFragment",e[e.JsxAttribute=288]="JsxAttribute",e[e.JsxAttributes=289]="JsxAttributes",e[e.JsxSpreadAttribute=290]="JsxSpreadAttribute",e[e.JsxExpression=291]="JsxExpression",e[e.CaseClause=292]="CaseClause",e[e.DefaultClause=293]="DefaultClause",e[e.HeritageClause=294]="HeritageClause",e[e.CatchClause=295]="CatchClause",e[e.AssertClause=296]="AssertClause",e[e.AssertEntry=297]="AssertEntry",e[e.ImportTypeAssertionContainer=298]="ImportTypeAssertionContainer",e[e.PropertyAssignment=299]="PropertyAssignment",e[e.ShorthandPropertyAssignment=300]="ShorthandPropertyAssignment",e[e.SpreadAssignment=301]="SpreadAssignment",e[e.EnumMember=302]="EnumMember",e[e.UnparsedPrologue=303]="UnparsedPrologue",e[e.UnparsedPrepend=304]="UnparsedPrepend",e[e.UnparsedText=305]="UnparsedText",e[e.UnparsedInternalText=306]="UnparsedInternalText",e[e.UnparsedSyntheticReference=307]="UnparsedSyntheticReference",e[e.SourceFile=308]="SourceFile",e[e.Bundle=309]="Bundle",e[e.UnparsedSource=310]="UnparsedSource",e[e.InputFiles=311]="InputFiles",e[e.JSDocTypeExpression=312]="JSDocTypeExpression",e[e.JSDocNameReference=313]="JSDocNameReference",e[e.JSDocMemberName=314]="JSDocMemberName",e[e.JSDocAllType=315]="JSDocAllType",e[e.JSDocUnknownType=316]="JSDocUnknownType",e[e.JSDocNullableType=317]="JSDocNullableType",e[e.JSDocNonNullableType=318]="JSDocNonNullableType",e[e.JSDocOptionalType=319]="JSDocOptionalType",e[e.JSDocFunctionType=320]="JSDocFunctionType",e[e.JSDocVariadicType=321]="JSDocVariadicType",e[e.JSDocNamepathType=322]="JSDocNamepathType",e[e.JSDoc=323]="JSDoc",e[e.JSDocComment=323]="JSDocComment",e[e.JSDocText=324]="JSDocText",e[e.JSDocTypeLiteral=325]="JSDocTypeLiteral",e[e.JSDocSignature=326]="JSDocSignature",e[e.JSDocLink=327]="JSDocLink",e[e.JSDocLinkCode=328]="JSDocLinkCode",e[e.JSDocLinkPlain=329]="JSDocLinkPlain",e[e.JSDocTag=330]="JSDocTag",e[e.JSDocAugmentsTag=331]="JSDocAugmentsTag",e[e.JSDocImplementsTag=332]="JSDocImplementsTag",e[e.JSDocAuthorTag=333]="JSDocAuthorTag",e[e.JSDocDeprecatedTag=334]="JSDocDeprecatedTag",e[e.JSDocClassTag=335]="JSDocClassTag",e[e.JSDocPublicTag=336]="JSDocPublicTag",e[e.JSDocPrivateTag=337]="JSDocPrivateTag",e[e.JSDocProtectedTag=338]="JSDocProtectedTag",e[e.JSDocReadonlyTag=339]="JSDocReadonlyTag",e[e.JSDocOverrideTag=340]="JSDocOverrideTag",e[e.JSDocCallbackTag=341]="JSDocCallbackTag",e[e.JSDocEnumTag=342]="JSDocEnumTag",e[e.JSDocParameterTag=343]="JSDocParameterTag",e[e.JSDocReturnTag=344]="JSDocReturnTag",e[e.JSDocThisTag=345]="JSDocThisTag",e[e.JSDocTypeTag=346]="JSDocTypeTag",e[e.JSDocTemplateTag=347]="JSDocTemplateTag",e[e.JSDocTypedefTag=348]="JSDocTypedefTag",e[e.JSDocSeeTag=349]="JSDocSeeTag",e[e.JSDocPropertyTag=350]="JSDocPropertyTag",e[e.SyntaxList=351]="SyntaxList",e[e.NotEmittedStatement=352]="NotEmittedStatement",e[e.PartiallyEmittedExpression=353]="PartiallyEmittedExpression",e[e.CommaListExpression=354]="CommaListExpression",e[e.MergeDeclarationMarker=355]="MergeDeclarationMarker",e[e.EndOfDeclarationMarker=356]="EndOfDeclarationMarker",e[e.SyntheticReferenceExpression=357]="SyntheticReferenceExpression",e[e.Count=358]="Count",e[e.FirstAssignment=63]="FirstAssignment",e[e.LastAssignment=78]="LastAssignment",e[e.FirstCompoundAssignment=64]="FirstCompoundAssignment",e[e.LastCompoundAssignment=78]="LastCompoundAssignment",e[e.FirstReservedWord=81]="FirstReservedWord",e[e.LastReservedWord=116]="LastReservedWord",e[e.FirstKeyword=81]="FirstKeyword",e[e.LastKeyword=162]="LastKeyword",e[e.FirstFutureReservedWord=117]="FirstFutureReservedWord",e[e.LastFutureReservedWord=125]="LastFutureReservedWord",e[e.FirstTypeNode=179]="FirstTypeNode",e[e.LastTypeNode=202]="LastTypeNode",e[e.FirstPunctuation=18]="FirstPunctuation",e[e.LastPunctuation=78]="LastPunctuation",e[e.FirstToken=0]="FirstToken",e[e.LastToken=162]="LastToken",e[e.FirstTriviaToken=2]="FirstTriviaToken",e[e.LastTriviaToken=7]="LastTriviaToken",e[e.FirstLiteralToken=8]="FirstLiteralToken",e[e.LastLiteralToken=14]="LastLiteralToken",e[e.FirstTemplateToken=14]="FirstTemplateToken",e[e.LastTemplateToken=17]="LastTemplateToken",e[e.FirstBinaryOperator=29]="FirstBinaryOperator",e[e.LastBinaryOperator=78]="LastBinaryOperator",e[e.FirstStatement=240]="FirstStatement",e[e.LastStatement=256]="LastStatement",e[e.FirstNode=163]="FirstNode",e[e.FirstJSDocNode=312]="FirstJSDocNode",e[e.LastJSDocNode=350]="LastJSDocNode",e[e.FirstJSDocTagNode=330]="FirstJSDocTagNode",e[e.LastJSDocTagNode=350]="LastJSDocTagNode",e[e.FirstContextualKeyword=126]="FirstContextualKeyword",e[e.LastContextualKeyword=162]="LastContextualKeyword"}(e.SyntaxKind||(e.SyntaxKind={})),function(e){e[e.None=0]="None",e[e.Let=1]="Let",e[e.Const=2]="Const",e[e.NestedNamespace=4]="NestedNamespace",e[e.Synthesized=8]="Synthesized",e[e.Namespace=16]="Namespace",e[e.OptionalChain=32]="OptionalChain",e[e.ExportContext=64]="ExportContext",e[e.ContainsThis=128]="ContainsThis",e[e.HasImplicitReturn=256]="HasImplicitReturn",e[e.HasExplicitReturn=512]="HasExplicitReturn",e[e.GlobalAugmentation=1024]="GlobalAugmentation",e[e.HasAsyncFunctions=2048]="HasAsyncFunctions",e[e.DisallowInContext=4096]="DisallowInContext",e[e.YieldContext=8192]="YieldContext",e[e.DecoratorContext=16384]="DecoratorContext",e[e.AwaitContext=32768]="AwaitContext",e[e.DisallowConditionalTypesContext=65536]="DisallowConditionalTypesContext",e[e.ThisNodeHasError=131072]="ThisNodeHasError",e[e.JavaScriptFile=262144]="JavaScriptFile",e[e.ThisNodeOrAnySubNodesHasError=524288]="ThisNodeOrAnySubNodesHasError",e[e.HasAggregatedChildData=1048576]="HasAggregatedChildData",e[e.PossiblyContainsDynamicImport=2097152]="PossiblyContainsDynamicImport",e[e.PossiblyContainsImportMeta=4194304]="PossiblyContainsImportMeta",e[e.JSDoc=8388608]="JSDoc",e[e.Ambient=16777216]="Ambient",e[e.InWithStatement=33554432]="InWithStatement",e[e.JsonFile=67108864]="JsonFile",e[e.TypeCached=134217728]="TypeCached",e[e.Deprecated=268435456]="Deprecated",e[e.BlockScoped=3]="BlockScoped",e[e.ReachabilityCheckFlags=768]="ReachabilityCheckFlags",e[e.ReachabilityAndEmitFlags=2816]="ReachabilityAndEmitFlags",e[e.ContextFlags=50720768]="ContextFlags",e[e.TypeExcludesFlags=40960]="TypeExcludesFlags",e[e.PermanentlySetIncrementalFlags=6291456]="PermanentlySetIncrementalFlags"}(e.NodeFlags||(e.NodeFlags={})),function(e){e[e.None=0]="None",e[e.Export=1]="Export",e[e.Ambient=2]="Ambient",e[e.Public=4]="Public",e[e.Private=8]="Private",e[e.Protected=16]="Protected",e[e.Static=32]="Static",e[e.Readonly=64]="Readonly",e[e.Accessor=128]="Accessor",e[e.Abstract=256]="Abstract",e[e.Async=512]="Async",e[e.Default=1024]="Default",e[e.Const=2048]="Const",e[e.HasComputedJSDocModifiers=4096]="HasComputedJSDocModifiers",e[e.Deprecated=8192]="Deprecated",e[e.Override=16384]="Override",e[e.In=32768]="In",e[e.Out=65536]="Out",e[e.Decorator=131072]="Decorator",e[e.HasComputedFlags=536870912]="HasComputedFlags",e[e.AccessibilityModifier=28]="AccessibilityModifier",e[e.ParameterPropertyModifier=16476]="ParameterPropertyModifier",e[e.NonPublicAccessibilityModifier=24]="NonPublicAccessibilityModifier",e[e.TypeScriptModifier=117086]="TypeScriptModifier",e[e.ExportDefault=1025]="ExportDefault",e[e.All=258047]="All",e[e.Modifier=126975]="Modifier"}(e.ModifierFlags||(e.ModifierFlags={})),function(e){e[e.None=0]="None",e[e.IntrinsicNamedElement=1]="IntrinsicNamedElement",e[e.IntrinsicIndexedElement=2]="IntrinsicIndexedElement",e[e.IntrinsicElement=3]="IntrinsicElement"}(e.JsxFlags||(e.JsxFlags={})),function(e){e[e.Succeeded=1]="Succeeded",e[e.Failed=2]="Failed",e[e.Reported=4]="Reported",e[e.ReportsUnmeasurable=8]="ReportsUnmeasurable",e[e.ReportsUnreliable=16]="ReportsUnreliable",e[e.ReportsMask=24]="ReportsMask"}(e.RelationComparisonResult||(e.RelationComparisonResult={})),function(e){e[e.None=0]="None",e[e.Auto=1]="Auto",e[e.Loop=2]="Loop",e[e.Unique=3]="Unique",e[e.Node=4]="Node",e[e.KindMask=7]="KindMask",e[e.ReservedInNestedScopes=8]="ReservedInNestedScopes",e[e.Optimistic=16]="Optimistic",e[e.FileLevel=32]="FileLevel",e[e.AllowNameSubstitution=64]="AllowNameSubstitution"}(e.GeneratedIdentifierFlags||(e.GeneratedIdentifierFlags={})),function(e){e[e.None=0]="None",e[e.PrecedingLineBreak=1]="PrecedingLineBreak",e[e.PrecedingJSDocComment=2]="PrecedingJSDocComment",e[e.Unterminated=4]="Unterminated",e[e.ExtendedUnicodeEscape=8]="ExtendedUnicodeEscape",e[e.Scientific=16]="Scientific",e[e.Octal=32]="Octal",e[e.HexSpecifier=64]="HexSpecifier",e[e.BinarySpecifier=128]="BinarySpecifier",e[e.OctalSpecifier=256]="OctalSpecifier",e[e.ContainsSeparator=512]="ContainsSeparator",e[e.UnicodeEscape=1024]="UnicodeEscape",e[e.ContainsInvalidEscape=2048]="ContainsInvalidEscape",e[e.BinaryOrOctalSpecifier=384]="BinaryOrOctalSpecifier",e[e.NumericLiteralFlags=1008]="NumericLiteralFlags",e[e.TemplateLiteralLikeFlags=2048]="TemplateLiteralLikeFlags"}(e.TokenFlags||(e.TokenFlags={})),function(e){e[e.Unreachable=1]="Unreachable",e[e.Start=2]="Start",e[e.BranchLabel=4]="BranchLabel",e[e.LoopLabel=8]="LoopLabel",e[e.Assignment=16]="Assignment",e[e.TrueCondition=32]="TrueCondition",e[e.FalseCondition=64]="FalseCondition",e[e.SwitchClause=128]="SwitchClause",e[e.ArrayMutation=256]="ArrayMutation",e[e.Call=512]="Call",e[e.ReduceLabel=1024]="ReduceLabel",e[e.Referenced=2048]="Referenced",e[e.Shared=4096]="Shared",e[e.Label=12]="Label",e[e.Condition=96]="Condition"}(e.FlowFlags||(e.FlowFlags={})),function(e){e[e.ExpectError=0]="ExpectError",e[e.Ignore=1]="Ignore"}(e.CommentDirectiveType||(e.CommentDirectiveType={}));var t,r=function(){};e.OperationCanceledException=r,function(e){e[e.RootFile=0]="RootFile",e[e.SourceFromProjectReference=1]="SourceFromProjectReference",e[e.OutputFromProjectReference=2]="OutputFromProjectReference",e[e.Import=3]="Import",e[e.ReferenceFile=4]="ReferenceFile",e[e.TypeReferenceDirective=5]="TypeReferenceDirective",e[e.LibFile=6]="LibFile",e[e.LibReferenceDirective=7]="LibReferenceDirective",e[e.AutomaticTypeDirectiveFile=8]="AutomaticTypeDirectiveFile"}(e.FileIncludeKind||(e.FileIncludeKind={})),function(e){e[e.FilePreprocessingReferencedDiagnostic=0]="FilePreprocessingReferencedDiagnostic",e[e.FilePreprocessingFileExplainingDiagnostic=1]="FilePreprocessingFileExplainingDiagnostic"}(e.FilePreprocessingDiagnosticsKind||(e.FilePreprocessingDiagnosticsKind={})),function(e){e[e.Not=0]="Not",e[e.SafeModules=1]="SafeModules",e[e.Completely=2]="Completely"}(e.StructureIsReused||(e.StructureIsReused={})),function(e){e[e.Success=0]="Success",e[e.DiagnosticsPresent_OutputsSkipped=1]="DiagnosticsPresent_OutputsSkipped",e[e.DiagnosticsPresent_OutputsGenerated=2]="DiagnosticsPresent_OutputsGenerated",e[e.InvalidProject_OutputsSkipped=3]="InvalidProject_OutputsSkipped",e[e.ProjectReferenceCycle_OutputsSkipped=4]="ProjectReferenceCycle_OutputsSkipped",e[e.ProjectReferenceCycle_OutputsSkupped=4]="ProjectReferenceCycle_OutputsSkupped"}(e.ExitStatus||(e.ExitStatus={})),function(e){e[e.Ok=0]="Ok",e[e.NeedsOverride=1]="NeedsOverride",e[e.HasInvalidOverride=2]="HasInvalidOverride"}(e.MemberOverrideStatus||(e.MemberOverrideStatus={})),function(e){e[e.None=0]="None",e[e.Literal=1]="Literal",e[e.Subtype=2]="Subtype"}(e.UnionReduction||(e.UnionReduction={})),function(e){e[e.None=0]="None",e[e.Signature=1]="Signature",e[e.NoConstraints=2]="NoConstraints",e[e.Completions=4]="Completions",e[e.SkipBindingPatterns=8]="SkipBindingPatterns"}(e.ContextFlags||(e.ContextFlags={})),function(e){e[e.None=0]="None",e[e.NoTruncation=1]="NoTruncation",e[e.WriteArrayAsGenericType=2]="WriteArrayAsGenericType",e[e.GenerateNamesForShadowedTypeParams=4]="GenerateNamesForShadowedTypeParams",e[e.UseStructuralFallback=8]="UseStructuralFallback",e[e.ForbidIndexedAccessSymbolReferences=16]="ForbidIndexedAccessSymbolReferences",e[e.WriteTypeArgumentsOfSignature=32]="WriteTypeArgumentsOfSignature",e[e.UseFullyQualifiedType=64]="UseFullyQualifiedType",e[e.UseOnlyExternalAliasing=128]="UseOnlyExternalAliasing",e[e.SuppressAnyReturnType=256]="SuppressAnyReturnType",e[e.WriteTypeParametersInQualifiedName=512]="WriteTypeParametersInQualifiedName",e[e.MultilineObjectLiterals=1024]="MultilineObjectLiterals",e[e.WriteClassExpressionAsTypeLiteral=2048]="WriteClassExpressionAsTypeLiteral",e[e.UseTypeOfFunction=4096]="UseTypeOfFunction",e[e.OmitParameterModifiers=8192]="OmitParameterModifiers",e[e.UseAliasDefinedOutsideCurrentScope=16384]="UseAliasDefinedOutsideCurrentScope",e[e.UseSingleQuotesForStringLiteralType=268435456]="UseSingleQuotesForStringLiteralType",e[e.NoTypeReduction=536870912]="NoTypeReduction",e[e.OmitThisParameter=33554432]="OmitThisParameter",e[e.AllowThisInObjectLiteral=32768]="AllowThisInObjectLiteral",e[e.AllowQualifiedNameInPlaceOfIdentifier=65536]="AllowQualifiedNameInPlaceOfIdentifier",e[e.AllowQualifedNameInPlaceOfIdentifier=65536]="AllowQualifedNameInPlaceOfIdentifier",e[e.AllowAnonymousIdentifier=131072]="AllowAnonymousIdentifier",e[e.AllowEmptyUnionOrIntersection=262144]="AllowEmptyUnionOrIntersection",e[e.AllowEmptyTuple=524288]="AllowEmptyTuple",e[e.AllowUniqueESSymbolType=1048576]="AllowUniqueESSymbolType",e[e.AllowEmptyIndexInfoType=2097152]="AllowEmptyIndexInfoType",e[e.WriteComputedProps=1073741824]="WriteComputedProps",e[e.AllowNodeModulesRelativePaths=67108864]="AllowNodeModulesRelativePaths",e[e.DoNotIncludeSymbolChain=134217728]="DoNotIncludeSymbolChain",e[e.IgnoreErrors=70221824]="IgnoreErrors",e[e.InObjectTypeLiteral=4194304]="InObjectTypeLiteral",e[e.InTypeAlias=8388608]="InTypeAlias",e[e.InInitialEntityName=16777216]="InInitialEntityName"}(e.NodeBuilderFlags||(e.NodeBuilderFlags={})),function(e){e[e.None=0]="None",e[e.NoTruncation=1]="NoTruncation",e[e.WriteArrayAsGenericType=2]="WriteArrayAsGenericType",e[e.UseStructuralFallback=8]="UseStructuralFallback",e[e.WriteTypeArgumentsOfSignature=32]="WriteTypeArgumentsOfSignature",e[e.UseFullyQualifiedType=64]="UseFullyQualifiedType",e[e.SuppressAnyReturnType=256]="SuppressAnyReturnType",e[e.MultilineObjectLiterals=1024]="MultilineObjectLiterals",e[e.WriteClassExpressionAsTypeLiteral=2048]="WriteClassExpressionAsTypeLiteral",e[e.UseTypeOfFunction=4096]="UseTypeOfFunction",e[e.OmitParameterModifiers=8192]="OmitParameterModifiers",e[e.UseAliasDefinedOutsideCurrentScope=16384]="UseAliasDefinedOutsideCurrentScope",e[e.UseSingleQuotesForStringLiteralType=268435456]="UseSingleQuotesForStringLiteralType",e[e.NoTypeReduction=536870912]="NoTypeReduction",e[e.OmitThisParameter=33554432]="OmitThisParameter",e[e.AllowUniqueESSymbolType=1048576]="AllowUniqueESSymbolType",e[e.AddUndefined=131072]="AddUndefined",e[e.WriteArrowStyleSignature=262144]="WriteArrowStyleSignature",e[e.InArrayType=524288]="InArrayType",e[e.InElementType=2097152]="InElementType",e[e.InFirstTypeArgument=4194304]="InFirstTypeArgument",e[e.InTypeAlias=8388608]="InTypeAlias",e[e.WriteOwnNameForAnyLike=0]="WriteOwnNameForAnyLike",e[e.NodeBuilderFlagsMask=848330091]="NodeBuilderFlagsMask"}(e.TypeFormatFlags||(e.TypeFormatFlags={})),function(e){e[e.None=0]="None",e[e.WriteTypeParametersOrArguments=1]="WriteTypeParametersOrArguments",e[e.UseOnlyExternalAliasing=2]="UseOnlyExternalAliasing",e[e.AllowAnyNodeKind=4]="AllowAnyNodeKind",e[e.UseAliasDefinedOutsideCurrentScope=8]="UseAliasDefinedOutsideCurrentScope",e[e.WriteComputedProps=16]="WriteComputedProps",e[e.DoNotIncludeSymbolChain=32]="DoNotIncludeSymbolChain"}(e.SymbolFormatFlags||(e.SymbolFormatFlags={})),function(e){e[e.Accessible=0]="Accessible",e[e.NotAccessible=1]="NotAccessible",e[e.CannotBeNamed=2]="CannotBeNamed"}(e.SymbolAccessibility||(e.SymbolAccessibility={})),function(e){e[e.UnionOrIntersection=0]="UnionOrIntersection",e[e.Spread=1]="Spread"}(e.SyntheticSymbolKind||(e.SyntheticSymbolKind={})),function(e){e[e.This=0]="This",e[e.Identifier=1]="Identifier",e[e.AssertsThis=2]="AssertsThis",e[e.AssertsIdentifier=3]="AssertsIdentifier"}(e.TypePredicateKind||(e.TypePredicateKind={})),function(e){e[e.Unknown=0]="Unknown",e[e.TypeWithConstructSignatureAndValue=1]="TypeWithConstructSignatureAndValue",e[e.VoidNullableOrNeverType=2]="VoidNullableOrNeverType",e[e.NumberLikeType=3]="NumberLikeType",e[e.BigIntLikeType=4]="BigIntLikeType",e[e.StringLikeType=5]="StringLikeType",e[e.BooleanType=6]="BooleanType",e[e.ArrayLikeType=7]="ArrayLikeType",e[e.ESSymbolType=8]="ESSymbolType",e[e.Promise=9]="Promise",e[e.TypeWithCallSignature=10]="TypeWithCallSignature",e[e.ObjectType=11]="ObjectType"}(e.TypeReferenceSerializationKind||(e.TypeReferenceSerializationKind={})),function(e){e[e.None=0]="None",e[e.FunctionScopedVariable=1]="FunctionScopedVariable",e[e.BlockScopedVariable=2]="BlockScopedVariable",e[e.Property=4]="Property",e[e.EnumMember=8]="EnumMember",e[e.Function=16]="Function",e[e.Class=32]="Class",e[e.Interface=64]="Interface",e[e.ConstEnum=128]="ConstEnum",e[e.RegularEnum=256]="RegularEnum",e[e.ValueModule=512]="ValueModule",e[e.NamespaceModule=1024]="NamespaceModule",e[e.TypeLiteral=2048]="TypeLiteral",e[e.ObjectLiteral=4096]="ObjectLiteral",e[e.Method=8192]="Method",e[e.Constructor=16384]="Constructor",e[e.GetAccessor=32768]="GetAccessor",e[e.SetAccessor=65536]="SetAccessor",e[e.Signature=131072]="Signature",e[e.TypeParameter=262144]="TypeParameter",e[e.TypeAlias=524288]="TypeAlias",e[e.ExportValue=1048576]="ExportValue",e[e.Alias=2097152]="Alias",e[e.Prototype=4194304]="Prototype",e[e.ExportStar=8388608]="ExportStar",e[e.Optional=16777216]="Optional",e[e.Transient=33554432]="Transient",e[e.Assignment=67108864]="Assignment",e[e.ModuleExports=134217728]="ModuleExports",e[e.All=67108863]="All",e[e.Enum=384]="Enum",e[e.Variable=3]="Variable",e[e.Value=111551]="Value",e[e.Type=788968]="Type",e[e.Namespace=1920]="Namespace",e[e.Module=1536]="Module",e[e.Accessor=98304]="Accessor",e[e.FunctionScopedVariableExcludes=111550]="FunctionScopedVariableExcludes",e[e.BlockScopedVariableExcludes=111551]="BlockScopedVariableExcludes",e[e.ParameterExcludes=111551]="ParameterExcludes",e[e.PropertyExcludes=0]="PropertyExcludes",e[e.EnumMemberExcludes=900095]="EnumMemberExcludes",e[e.FunctionExcludes=110991]="FunctionExcludes",e[e.ClassExcludes=899503]="ClassExcludes",e[e.InterfaceExcludes=788872]="InterfaceExcludes",e[e.RegularEnumExcludes=899327]="RegularEnumExcludes",e[e.ConstEnumExcludes=899967]="ConstEnumExcludes",e[e.ValueModuleExcludes=110735]="ValueModuleExcludes",e[e.NamespaceModuleExcludes=0]="NamespaceModuleExcludes",e[e.MethodExcludes=103359]="MethodExcludes",e[e.GetAccessorExcludes=46015]="GetAccessorExcludes",e[e.SetAccessorExcludes=78783]="SetAccessorExcludes",e[e.AccessorExcludes=13247]="AccessorExcludes",e[e.TypeParameterExcludes=526824]="TypeParameterExcludes",e[e.TypeAliasExcludes=788968]="TypeAliasExcludes",e[e.AliasExcludes=2097152]="AliasExcludes",e[e.ModuleMember=2623475]="ModuleMember",e[e.ExportHasLocal=944]="ExportHasLocal",e[e.BlockScoped=418]="BlockScoped",e[e.PropertyOrAccessor=98308]="PropertyOrAccessor",e[e.ClassMember=106500]="ClassMember",e[e.ExportSupportsDefaultModifier=112]="ExportSupportsDefaultModifier",e[e.ExportDoesNotSupportDefaultModifier=-113]="ExportDoesNotSupportDefaultModifier",e[e.Classifiable=2885600]="Classifiable",e[e.LateBindingContainer=6256]="LateBindingContainer"}(e.SymbolFlags||(e.SymbolFlags={})),function(e){e[e.Numeric=0]="Numeric",e[e.Literal=1]="Literal"}(e.EnumKind||(e.EnumKind={})),function(e){e[e.Instantiated=1]="Instantiated",e[e.SyntheticProperty=2]="SyntheticProperty",e[e.SyntheticMethod=4]="SyntheticMethod",e[e.Readonly=8]="Readonly",e[e.ReadPartial=16]="ReadPartial",e[e.WritePartial=32]="WritePartial",e[e.HasNonUniformType=64]="HasNonUniformType",e[e.HasLiteralType=128]="HasLiteralType",e[e.ContainsPublic=256]="ContainsPublic",e[e.ContainsProtected=512]="ContainsProtected",e[e.ContainsPrivate=1024]="ContainsPrivate",e[e.ContainsStatic=2048]="ContainsStatic",e[e.Late=4096]="Late",e[e.ReverseMapped=8192]="ReverseMapped",e[e.OptionalParameter=16384]="OptionalParameter",e[e.RestParameter=32768]="RestParameter",e[e.DeferredType=65536]="DeferredType",e[e.HasNeverType=131072]="HasNeverType",e[e.Mapped=262144]="Mapped",e[e.StripOptional=524288]="StripOptional",e[e.Unresolved=1048576]="Unresolved",e[e.Synthetic=6]="Synthetic",e[e.Discriminant=192]="Discriminant",e[e.Partial=48]="Partial"}(e.CheckFlags||(e.CheckFlags={})),function(e){e.Call="__call",e.Constructor="__constructor",e.New="__new",e.Index="__index",e.ExportStar="__export",e.Global="__global",e.Missing="__missing",e.Type="__type",e.Object="__object",e.JSXAttributes="__jsxAttributes",e.Class="__class",e.Function="__function",e.Computed="__computed",e.Resolving="__resolving__",e.ExportEquals="export=",e.Default="default",e.This="this"}(e.InternalSymbolName||(e.InternalSymbolName={})),function(e){e[e.TypeChecked=1]="TypeChecked",e[e.LexicalThis=2]="LexicalThis",e[e.CaptureThis=4]="CaptureThis",e[e.CaptureNewTarget=8]="CaptureNewTarget",e[e.SuperInstance=256]="SuperInstance",e[e.SuperStatic=512]="SuperStatic",e[e.ContextChecked=1024]="ContextChecked",e[e.MethodWithSuperPropertyAccessInAsync=2048]="MethodWithSuperPropertyAccessInAsync",e[e.MethodWithSuperPropertyAssignmentInAsync=4096]="MethodWithSuperPropertyAssignmentInAsync",e[e.CaptureArguments=8192]="CaptureArguments",e[e.EnumValuesComputed=16384]="EnumValuesComputed",e[e.LexicalModuleMergesWithClass=32768]="LexicalModuleMergesWithClass",e[e.LoopWithCapturedBlockScopedBinding=65536]="LoopWithCapturedBlockScopedBinding",e[e.ContainsCapturedBlockScopeBinding=131072]="ContainsCapturedBlockScopeBinding",e[e.CapturedBlockScopedBinding=262144]="CapturedBlockScopedBinding",e[e.BlockScopedBindingInLoop=524288]="BlockScopedBindingInLoop",e[e.ClassWithBodyScopedClassBinding=1048576]="ClassWithBodyScopedClassBinding",e[e.BodyScopedClassBinding=2097152]="BodyScopedClassBinding",e[e.NeedsLoopOutParameter=4194304]="NeedsLoopOutParameter",e[e.AssignmentsMarked=8388608]="AssignmentsMarked",e[e.ClassWithConstructorReference=16777216]="ClassWithConstructorReference",e[e.ConstructorReferenceInClass=33554432]="ConstructorReferenceInClass",e[e.ContainsClassWithPrivateIdentifiers=67108864]="ContainsClassWithPrivateIdentifiers",e[e.ContainsSuperPropertyInStaticInitializer=134217728]="ContainsSuperPropertyInStaticInitializer",e[e.InCheckIdentifier=268435456]="InCheckIdentifier"}(e.NodeCheckFlags||(e.NodeCheckFlags={})),function(e){e[e.Any=1]="Any",e[e.Unknown=2]="Unknown",e[e.String=4]="String",e[e.Number=8]="Number",e[e.Boolean=16]="Boolean",e[e.Enum=32]="Enum",e[e.BigInt=64]="BigInt",e[e.StringLiteral=128]="StringLiteral",e[e.NumberLiteral=256]="NumberLiteral",e[e.BooleanLiteral=512]="BooleanLiteral",e[e.EnumLiteral=1024]="EnumLiteral",e[e.BigIntLiteral=2048]="BigIntLiteral",e[e.ESSymbol=4096]="ESSymbol",e[e.UniqueESSymbol=8192]="UniqueESSymbol",e[e.Void=16384]="Void",e[e.Undefined=32768]="Undefined",e[e.Null=65536]="Null",e[e.Never=131072]="Never",e[e.TypeParameter=262144]="TypeParameter",e[e.Object=524288]="Object",e[e.Union=1048576]="Union",e[e.Intersection=2097152]="Intersection",e[e.Index=4194304]="Index",e[e.IndexedAccess=8388608]="IndexedAccess",e[e.Conditional=16777216]="Conditional",e[e.Substitution=33554432]="Substitution",e[e.NonPrimitive=67108864]="NonPrimitive",e[e.TemplateLiteral=134217728]="TemplateLiteral",e[e.StringMapping=268435456]="StringMapping",e[e.AnyOrUnknown=3]="AnyOrUnknown",e[e.Nullable=98304]="Nullable",e[e.Literal=2944]="Literal",e[e.Unit=109440]="Unit",e[e.StringOrNumberLiteral=384]="StringOrNumberLiteral",e[e.StringOrNumberLiteralOrUnique=8576]="StringOrNumberLiteralOrUnique",e[e.DefinitelyFalsy=117632]="DefinitelyFalsy",e[e.PossiblyFalsy=117724]="PossiblyFalsy",e[e.Intrinsic=67359327]="Intrinsic",e[e.Primitive=131068]="Primitive",e[e.StringLike=402653316]="StringLike",e[e.NumberLike=296]="NumberLike",e[e.BigIntLike=2112]="BigIntLike",e[e.BooleanLike=528]="BooleanLike",e[e.EnumLike=1056]="EnumLike",e[e.ESSymbolLike=12288]="ESSymbolLike",e[e.VoidLike=49152]="VoidLike",e[e.DefinitelyNonNullable=470302716]="DefinitelyNonNullable",e[e.DisjointDomains=469892092]="DisjointDomains",e[e.UnionOrIntersection=3145728]="UnionOrIntersection",e[e.StructuredType=3670016]="StructuredType",e[e.TypeVariable=8650752]="TypeVariable",e[e.InstantiableNonPrimitive=58982400]="InstantiableNonPrimitive",e[e.InstantiablePrimitive=406847488]="InstantiablePrimitive",e[e.Instantiable=465829888]="Instantiable",e[e.StructuredOrInstantiable=469499904]="StructuredOrInstantiable",e[e.ObjectFlagsType=3899393]="ObjectFlagsType",e[e.Simplifiable=25165824]="Simplifiable",e[e.Singleton=67358815]="Singleton",e[e.Narrowable=536624127]="Narrowable",e[e.IncludesMask=205258751]="IncludesMask",e[e.IncludesMissingType=262144]="IncludesMissingType",e[e.IncludesNonWideningType=4194304]="IncludesNonWideningType",e[e.IncludesWildcard=8388608]="IncludesWildcard",e[e.IncludesEmptyObject=16777216]="IncludesEmptyObject",e[e.IncludesInstantiable=33554432]="IncludesInstantiable",e[e.NotPrimitiveUnion=36323363]="NotPrimitiveUnion"}(e.TypeFlags||(e.TypeFlags={})),function(e){e[e.Class=1]="Class",e[e.Interface=2]="Interface",e[e.Reference=4]="Reference",e[e.Tuple=8]="Tuple",e[e.Anonymous=16]="Anonymous",e[e.Mapped=32]="Mapped",e[e.Instantiated=64]="Instantiated",e[e.ObjectLiteral=128]="ObjectLiteral",e[e.EvolvingArray=256]="EvolvingArray",e[e.ObjectLiteralPatternWithComputedProperties=512]="ObjectLiteralPatternWithComputedProperties",e[e.ReverseMapped=1024]="ReverseMapped",e[e.JsxAttributes=2048]="JsxAttributes",e[e.JSLiteral=4096]="JSLiteral",e[e.FreshLiteral=8192]="FreshLiteral",e[e.ArrayLiteral=16384]="ArrayLiteral",e[e.PrimitiveUnion=32768]="PrimitiveUnion",e[e.ContainsWideningType=65536]="ContainsWideningType",e[e.ContainsObjectOrArrayLiteral=131072]="ContainsObjectOrArrayLiteral",e[e.NonInferrableType=262144]="NonInferrableType",e[e.CouldContainTypeVariablesComputed=524288]="CouldContainTypeVariablesComputed",e[e.CouldContainTypeVariables=1048576]="CouldContainTypeVariables",e[e.ClassOrInterface=3]="ClassOrInterface",e[e.RequiresWidening=196608]="RequiresWidening",e[e.PropagatingFlags=458752]="PropagatingFlags",e[e.ObjectTypeKindMask=1343]="ObjectTypeKindMask",e[e.ContainsSpread=2097152]="ContainsSpread",e[e.ObjectRestType=4194304]="ObjectRestType",e[e.InstantiationExpressionType=8388608]="InstantiationExpressionType",e[e.IsClassInstanceClone=16777216]="IsClassInstanceClone",e[e.IdenticalBaseTypeCalculated=33554432]="IdenticalBaseTypeCalculated",e[e.IdenticalBaseTypeExists=67108864]="IdenticalBaseTypeExists",e[e.IsGenericTypeComputed=2097152]="IsGenericTypeComputed",e[e.IsGenericObjectType=4194304]="IsGenericObjectType",e[e.IsGenericIndexType=8388608]="IsGenericIndexType",e[e.IsGenericType=12582912]="IsGenericType",e[e.ContainsIntersections=16777216]="ContainsIntersections",e[e.IsUnknownLikeUnionComputed=33554432]="IsUnknownLikeUnionComputed",e[e.IsUnknownLikeUnion=67108864]="IsUnknownLikeUnion",e[e.IsNeverIntersectionComputed=16777216]="IsNeverIntersectionComputed",e[e.IsNeverIntersection=33554432]="IsNeverIntersection"}(e.ObjectFlags||(e.ObjectFlags={})),function(e){e[e.Invariant=0]="Invariant",e[e.Covariant=1]="Covariant",e[e.Contravariant=2]="Contravariant",e[e.Bivariant=3]="Bivariant",e[e.Independent=4]="Independent",e[e.VarianceMask=7]="VarianceMask",e[e.Unmeasurable=8]="Unmeasurable",e[e.Unreliable=16]="Unreliable",e[e.AllowsStructuralFallback=24]="AllowsStructuralFallback"}(e.VarianceFlags||(e.VarianceFlags={})),function(e){e[e.Required=1]="Required",e[e.Optional=2]="Optional",e[e.Rest=4]="Rest",e[e.Variadic=8]="Variadic",e[e.Fixed=3]="Fixed",e[e.Variable=12]="Variable",e[e.NonRequired=14]="NonRequired",e[e.NonRest=11]="NonRest"}(e.ElementFlags||(e.ElementFlags={})),function(e){e[e.None=0]="None",e[e.IncludeUndefined=1]="IncludeUndefined",e[e.NoIndexSignatures=2]="NoIndexSignatures",e[e.Writing=4]="Writing",e[e.CacheSymbol=8]="CacheSymbol",e[e.NoTupleBoundsCheck=16]="NoTupleBoundsCheck",e[e.ExpressionPosition=32]="ExpressionPosition",e[e.ReportDeprecated=64]="ReportDeprecated",e[e.SuppressNoImplicitAnyError=128]="SuppressNoImplicitAnyError",e[e.Contextual=256]="Contextual",e[e.Persistent=1]="Persistent"}(e.AccessFlags||(e.AccessFlags={})),function(e){e[e.Component=0]="Component",e[e.Function=1]="Function",e[e.Mixed=2]="Mixed"}(e.JsxReferenceKind||(e.JsxReferenceKind={})),function(e){e[e.Call=0]="Call",e[e.Construct=1]="Construct"}(e.SignatureKind||(e.SignatureKind={})),function(e){e[e.None=0]="None",e[e.HasRestParameter=1]="HasRestParameter",e[e.HasLiteralTypes=2]="HasLiteralTypes",e[e.Abstract=4]="Abstract",e[e.IsInnerCallChain=8]="IsInnerCallChain",e[e.IsOuterCallChain=16]="IsOuterCallChain",e[e.IsUntypedSignatureInJSFile=32]="IsUntypedSignatureInJSFile",e[e.PropagatingFlags=39]="PropagatingFlags",e[e.CallChainFlags=24]="CallChainFlags"}(e.SignatureFlags||(e.SignatureFlags={})),function(e){e[e.String=0]="String",e[e.Number=1]="Number"}(e.IndexKind||(e.IndexKind={})),function(e){e[e.Simple=0]="Simple",e[e.Array=1]="Array",e[e.Deferred=2]="Deferred",e[e.Function=3]="Function",e[e.Composite=4]="Composite",e[e.Merged=5]="Merged"}(e.TypeMapKind||(e.TypeMapKind={})),function(e){e[e.NakedTypeVariable=1]="NakedTypeVariable",e[e.SpeculativeTuple=2]="SpeculativeTuple",e[e.SubstituteSource=4]="SubstituteSource",e[e.HomomorphicMappedType=8]="HomomorphicMappedType",e[e.PartialHomomorphicMappedType=16]="PartialHomomorphicMappedType",e[e.MappedTypeConstraint=32]="MappedTypeConstraint",e[e.ContravariantConditional=64]="ContravariantConditional",e[e.ReturnType=128]="ReturnType",e[e.LiteralKeyof=256]="LiteralKeyof",e[e.NoConstraints=512]="NoConstraints",e[e.AlwaysStrict=1024]="AlwaysStrict",e[e.MaxValue=2048]="MaxValue",e[e.PriorityImpliesCombination=416]="PriorityImpliesCombination",e[e.Circularity=-1]="Circularity"}(e.InferencePriority||(e.InferencePriority={})),function(e){e[e.None=0]="None",e[e.NoDefault=1]="NoDefault",e[e.AnyDefault=2]="AnyDefault",e[e.SkippedGenericFunction=4]="SkippedGenericFunction"}(e.InferenceFlags||(e.InferenceFlags={})),function(e){e[e.False=0]="False",e[e.Unknown=1]="Unknown",e[e.Maybe=3]="Maybe",e[e.True=-1]="True"}(e.Ternary||(e.Ternary={})),function(e){e[e.None=0]="None",e[e.ExportsProperty=1]="ExportsProperty",e[e.ModuleExports=2]="ModuleExports",e[e.PrototypeProperty=3]="PrototypeProperty",e[e.ThisProperty=4]="ThisProperty",e[e.Property=5]="Property",e[e.Prototype=6]="Prototype",e[e.ObjectDefinePropertyValue=7]="ObjectDefinePropertyValue",e[e.ObjectDefinePropertyExports=8]="ObjectDefinePropertyExports",e[e.ObjectDefinePrototypeProperty=9]="ObjectDefinePrototypeProperty"}(e.AssignmentDeclarationKind||(e.AssignmentDeclarationKind={})),function(e){e[e.Warning=0]="Warning",e[e.Error=1]="Error",e[e.Suggestion=2]="Suggestion",e[e.Message=3]="Message"}(t=e.DiagnosticCategory||(e.DiagnosticCategory={})),e.diagnosticCategoryName=function(e,r){void 0===r&&(r=!0);var n=t[e.category];return r?n.toLowerCase():n},function(e){e[e.Classic=1]="Classic",e[e.NodeJs=2]="NodeJs",e[e.Node16=3]="Node16",e[e.NodeNext=99]="NodeNext"}(e.ModuleResolutionKind||(e.ModuleResolutionKind={})),function(e){e[e.Legacy=1]="Legacy",e[e.Auto=2]="Auto",e[e.Force=3]="Force"}(e.ModuleDetectionKind||(e.ModuleDetectionKind={})),function(e){e[e.FixedPollingInterval=0]="FixedPollingInterval",e[e.PriorityPollingInterval=1]="PriorityPollingInterval",e[e.DynamicPriorityPolling=2]="DynamicPriorityPolling",e[e.FixedChunkSizePolling=3]="FixedChunkSizePolling",e[e.UseFsEvents=4]="UseFsEvents",e[e.UseFsEventsOnParentDirectory=5]="UseFsEventsOnParentDirectory"}(e.WatchFileKind||(e.WatchFileKind={})),function(e){e[e.UseFsEvents=0]="UseFsEvents",e[e.FixedPollingInterval=1]="FixedPollingInterval",e[e.DynamicPriorityPolling=2]="DynamicPriorityPolling",e[e.FixedChunkSizePolling=3]="FixedChunkSizePolling"}(e.WatchDirectoryKind||(e.WatchDirectoryKind={})),function(e){e[e.FixedInterval=0]="FixedInterval",e[e.PriorityInterval=1]="PriorityInterval",e[e.DynamicPriority=2]="DynamicPriority",e[e.FixedChunkSize=3]="FixedChunkSize"}(e.PollingWatchKind||(e.PollingWatchKind={})),function(e){e[e.None=0]="None",e[e.CommonJS=1]="CommonJS",e[e.AMD=2]="AMD",e[e.UMD=3]="UMD",e[e.System=4]="System",e[e.ES2015=5]="ES2015",e[e.ES2020=6]="ES2020",e[e.ES2022=7]="ES2022",e[e.ESNext=99]="ESNext",e[e.Node16=100]="Node16",e[e.NodeNext=199]="NodeNext"}(e.ModuleKind||(e.ModuleKind={})),function(e){e[e.None=0]="None",e[e.Preserve=1]="Preserve",e[e.React=2]="React",e[e.ReactNative=3]="ReactNative",e[e.ReactJSX=4]="ReactJSX",e[e.ReactJSXDev=5]="ReactJSXDev"}(e.JsxEmit||(e.JsxEmit={})),function(e){e[e.Remove=0]="Remove",e[e.Preserve=1]="Preserve",e[e.Error=2]="Error"}(e.ImportsNotUsedAsValues||(e.ImportsNotUsedAsValues={})),function(e){e[e.CarriageReturnLineFeed=0]="CarriageReturnLineFeed",e[e.LineFeed=1]="LineFeed"}(e.NewLineKind||(e.NewLineKind={})),function(e){e[e.Unknown=0]="Unknown",e[e.JS=1]="JS",e[e.JSX=2]="JSX",e[e.TS=3]="TS",e[e.TSX=4]="TSX",e[e.External=5]="External",e[e.JSON=6]="JSON",e[e.Deferred=7]="Deferred"}(e.ScriptKind||(e.ScriptKind={})),function(e){e[e.ES3=0]="ES3",e[e.ES5=1]="ES5",e[e.ES2015=2]="ES2015",e[e.ES2016=3]="ES2016",e[e.ES2017=4]="ES2017",e[e.ES2018=5]="ES2018",e[e.ES2019=6]="ES2019",e[e.ES2020=7]="ES2020",e[e.ES2021=8]="ES2021",e[e.ES2022=9]="ES2022",e[e.ESNext=99]="ESNext",e[e.JSON=100]="JSON",e[e.Latest=99]="Latest"}(e.ScriptTarget||(e.ScriptTarget={})),function(e){e[e.Standard=0]="Standard",e[e.JSX=1]="JSX"}(e.LanguageVariant||(e.LanguageVariant={})),function(e){e[e.None=0]="None",e[e.Recursive=1]="Recursive"}(e.WatchDirectoryFlags||(e.WatchDirectoryFlags={})),function(e){e[e.nullCharacter=0]="nullCharacter",e[e.maxAsciiCharacter=127]="maxAsciiCharacter",e[e.lineFeed=10]="lineFeed",e[e.carriageReturn=13]="carriageReturn",e[e.lineSeparator=8232]="lineSeparator",e[e.paragraphSeparator=8233]="paragraphSeparator",e[e.nextLine=133]="nextLine",e[e.space=32]="space",e[e.nonBreakingSpace=160]="nonBreakingSpace",e[e.enQuad=8192]="enQuad",e[e.emQuad=8193]="emQuad",e[e.enSpace=8194]="enSpace",e[e.emSpace=8195]="emSpace",e[e.threePerEmSpace=8196]="threePerEmSpace",e[e.fourPerEmSpace=8197]="fourPerEmSpace",e[e.sixPerEmSpace=8198]="sixPerEmSpace",e[e.figureSpace=8199]="figureSpace",e[e.punctuationSpace=8200]="punctuationSpace",e[e.thinSpace=8201]="thinSpace",e[e.hairSpace=8202]="hairSpace",e[e.zeroWidthSpace=8203]="zeroWidthSpace",e[e.narrowNoBreakSpace=8239]="narrowNoBreakSpace",e[e.ideographicSpace=12288]="ideographicSpace",e[e.mathematicalSpace=8287]="mathematicalSpace",e[e.ogham=5760]="ogham",e[e._=95]="_",e[e.$=36]="$",e[e._0=48]="_0",e[e._1=49]="_1",e[e._2=50]="_2",e[e._3=51]="_3",e[e._4=52]="_4",e[e._5=53]="_5",e[e._6=54]="_6",e[e._7=55]="_7",e[e._8=56]="_8",e[e._9=57]="_9",e[e.a=97]="a",e[e.b=98]="b",e[e.c=99]="c",e[e.d=100]="d",e[e.e=101]="e",e[e.f=102]="f",e[e.g=103]="g",e[e.h=104]="h",e[e.i=105]="i",e[e.j=106]="j",e[e.k=107]="k",e[e.l=108]="l",e[e.m=109]="m",e[e.n=110]="n",e[e.o=111]="o",e[e.p=112]="p",e[e.q=113]="q",e[e.r=114]="r",e[e.s=115]="s",e[e.t=116]="t",e[e.u=117]="u",e[e.v=118]="v",e[e.w=119]="w",e[e.x=120]="x",e[e.y=121]="y",e[e.z=122]="z",e[e.A=65]="A",e[e.B=66]="B",e[e.C=67]="C",e[e.D=68]="D",e[e.E=69]="E",e[e.F=70]="F",e[e.G=71]="G",e[e.H=72]="H",e[e.I=73]="I",e[e.J=74]="J",e[e.K=75]="K",e[e.L=76]="L",e[e.M=77]="M",e[e.N=78]="N",e[e.O=79]="O",e[e.P=80]="P",e[e.Q=81]="Q",e[e.R=82]="R",e[e.S=83]="S",e[e.T=84]="T",e[e.U=85]="U",e[e.V=86]="V",e[e.W=87]="W",e[e.X=88]="X",e[e.Y=89]="Y",e[e.Z=90]="Z",e[e.ampersand=38]="ampersand",e[e.asterisk=42]="asterisk",e[e.at=64]="at",e[e.backslash=92]="backslash",e[e.backtick=96]="backtick",e[e.bar=124]="bar",e[e.caret=94]="caret",e[e.closeBrace=125]="closeBrace",e[e.closeBracket=93]="closeBracket",e[e.closeParen=41]="closeParen",e[e.colon=58]="colon",e[e.comma=44]="comma",e[e.dot=46]="dot",e[e.doubleQuote=34]="doubleQuote",e[e.equals=61]="equals",e[e.exclamation=33]="exclamation",e[e.greaterThan=62]="greaterThan",e[e.hash=35]="hash",e[e.lessThan=60]="lessThan",e[e.minus=45]="minus",e[e.openBrace=123]="openBrace",e[e.openBracket=91]="openBracket",e[e.openParen=40]="openParen",e[e.percent=37]="percent",e[e.plus=43]="plus",e[e.question=63]="question",e[e.semicolon=59]="semicolon",e[e.singleQuote=39]="singleQuote",e[e.slash=47]="slash",e[e.tilde=126]="tilde",e[e.backspace=8]="backspace",e[e.formFeed=12]="formFeed",e[e.byteOrderMark=65279]="byteOrderMark",e[e.tab=9]="tab",e[e.verticalTab=11]="verticalTab"}(e.CharacterCodes||(e.CharacterCodes={})),function(e){e.Ts=".ts",e.Tsx=".tsx",e.Dts=".d.ts",e.Js=".js",e.Jsx=".jsx",e.Json=".json",e.TsBuildInfo=".tsbuildinfo",e.Mjs=".mjs",e.Mts=".mts",e.Dmts=".d.mts",e.Cjs=".cjs",e.Cts=".cts",e.Dcts=".d.cts"}(e.Extension||(e.Extension={})),function(e){e[e.None=0]="None",e[e.ContainsTypeScript=1]="ContainsTypeScript",e[e.ContainsJsx=2]="ContainsJsx",e[e.ContainsESNext=4]="ContainsESNext",e[e.ContainsES2022=8]="ContainsES2022",e[e.ContainsES2021=16]="ContainsES2021",e[e.ContainsES2020=32]="ContainsES2020",e[e.ContainsES2019=64]="ContainsES2019",e[e.ContainsES2018=128]="ContainsES2018",e[e.ContainsES2017=256]="ContainsES2017",e[e.ContainsES2016=512]="ContainsES2016",e[e.ContainsES2015=1024]="ContainsES2015",e[e.ContainsGenerator=2048]="ContainsGenerator",e[e.ContainsDestructuringAssignment=4096]="ContainsDestructuringAssignment",e[e.ContainsTypeScriptClassSyntax=8192]="ContainsTypeScriptClassSyntax",e[e.ContainsLexicalThis=16384]="ContainsLexicalThis",e[e.ContainsRestOrSpread=32768]="ContainsRestOrSpread",e[e.ContainsObjectRestOrSpread=65536]="ContainsObjectRestOrSpread",e[e.ContainsComputedPropertyName=131072]="ContainsComputedPropertyName",e[e.ContainsBlockScopedBinding=262144]="ContainsBlockScopedBinding",e[e.ContainsBindingPattern=524288]="ContainsBindingPattern",e[e.ContainsYield=1048576]="ContainsYield",e[e.ContainsAwait=2097152]="ContainsAwait",e[e.ContainsHoistedDeclarationOrCompletion=4194304]="ContainsHoistedDeclarationOrCompletion",e[e.ContainsDynamicImport=8388608]="ContainsDynamicImport",e[e.ContainsClassFields=16777216]="ContainsClassFields",e[e.ContainsDecorators=33554432]="ContainsDecorators",e[e.ContainsPossibleTopLevelAwait=67108864]="ContainsPossibleTopLevelAwait",e[e.ContainsLexicalSuper=134217728]="ContainsLexicalSuper",e[e.ContainsUpdateExpressionForIdentifier=268435456]="ContainsUpdateExpressionForIdentifier",e[e.ContainsPrivateIdentifierInExpression=536870912]="ContainsPrivateIdentifierInExpression",e[e.HasComputedFlags=-2147483648]="HasComputedFlags",e[e.AssertTypeScript=1]="AssertTypeScript",e[e.AssertJsx=2]="AssertJsx",e[e.AssertESNext=4]="AssertESNext",e[e.AssertES2022=8]="AssertES2022",e[e.AssertES2021=16]="AssertES2021",e[e.AssertES2020=32]="AssertES2020",e[e.AssertES2019=64]="AssertES2019",e[e.AssertES2018=128]="AssertES2018",e[e.AssertES2017=256]="AssertES2017",e[e.AssertES2016=512]="AssertES2016",e[e.AssertES2015=1024]="AssertES2015",e[e.AssertGenerator=2048]="AssertGenerator",e[e.AssertDestructuringAssignment=4096]="AssertDestructuringAssignment",e[e.OuterExpressionExcludes=-2147483648]="OuterExpressionExcludes",e[e.PropertyAccessExcludes=-2147483648]="PropertyAccessExcludes",e[e.NodeExcludes=-2147483648]="NodeExcludes",e[e.ArrowFunctionExcludes=-2072174592]="ArrowFunctionExcludes",e[e.FunctionExcludes=-1937940480]="FunctionExcludes",e[e.ConstructorExcludes=-1937948672]="ConstructorExcludes",e[e.MethodOrAccessorExcludes=-2005057536]="MethodOrAccessorExcludes",e[e.PropertyExcludes=-2013249536]="PropertyExcludes",e[e.ClassExcludes=-2147344384]="ClassExcludes",e[e.ModuleExcludes=-1941676032]="ModuleExcludes",e[e.TypeExcludes=-2]="TypeExcludes",e[e.ObjectLiteralExcludes=-2147278848]="ObjectLiteralExcludes",e[e.ArrayLiteralOrCallOrNewExcludes=-2147450880]="ArrayLiteralOrCallOrNewExcludes",e[e.VariableDeclarationListExcludes=-2146893824]="VariableDeclarationListExcludes",e[e.ParameterExcludes=-2147483648]="ParameterExcludes",e[e.CatchClauseExcludes=-2147418112]="CatchClauseExcludes",e[e.BindingPatternExcludes=-2147450880]="BindingPatternExcludes",e[e.ContainsLexicalThisOrSuper=134234112]="ContainsLexicalThisOrSuper",e[e.PropertyNamePropagatingFlags=134234112]="PropertyNamePropagatingFlags"}(e.TransformFlags||(e.TransformFlags={})),function(e){e[e.TabStop=0]="TabStop",e[e.Placeholder=1]="Placeholder",e[e.Choice=2]="Choice",e[e.Variable=3]="Variable"}(e.SnippetKind||(e.SnippetKind={})),function(e){e[e.None=0]="None",e[e.SingleLine=1]="SingleLine",e[e.AdviseOnEmitNode=2]="AdviseOnEmitNode",e[e.NoSubstitution=4]="NoSubstitution",e[e.CapturesThis=8]="CapturesThis",e[e.NoLeadingSourceMap=16]="NoLeadingSourceMap",e[e.NoTrailingSourceMap=32]="NoTrailingSourceMap",e[e.NoSourceMap=48]="NoSourceMap",e[e.NoNestedSourceMaps=64]="NoNestedSourceMaps",e[e.NoTokenLeadingSourceMaps=128]="NoTokenLeadingSourceMaps",e[e.NoTokenTrailingSourceMaps=256]="NoTokenTrailingSourceMaps",e[e.NoTokenSourceMaps=384]="NoTokenSourceMaps",e[e.NoLeadingComments=512]="NoLeadingComments",e[e.NoTrailingComments=1024]="NoTrailingComments",e[e.NoComments=1536]="NoComments",e[e.NoNestedComments=2048]="NoNestedComments",e[e.HelperName=4096]="HelperName",e[e.ExportName=8192]="ExportName",e[e.LocalName=16384]="LocalName",e[e.InternalName=32768]="InternalName",e[e.Indented=65536]="Indented",e[e.NoIndentation=131072]="NoIndentation",e[e.AsyncFunctionBody=262144]="AsyncFunctionBody",e[e.ReuseTempVariableScope=524288]="ReuseTempVariableScope",e[e.CustomPrologue=1048576]="CustomPrologue",e[e.NoHoisting=2097152]="NoHoisting",e[e.HasEndOfDeclarationMarker=4194304]="HasEndOfDeclarationMarker",e[e.Iterator=8388608]="Iterator",e[e.NoAsciiEscaping=16777216]="NoAsciiEscaping",e[e.TypeScriptClassWrapper=33554432]="TypeScriptClassWrapper",e[e.NeverApplyImportHelper=67108864]="NeverApplyImportHelper",e[e.IgnoreSourceNewlines=134217728]="IgnoreSourceNewlines",e[e.Immutable=268435456]="Immutable",e[e.IndirectCall=536870912]="IndirectCall"}(e.EmitFlags||(e.EmitFlags={})),function(e){e[e.Extends=1]="Extends",e[e.Assign=2]="Assign",e[e.Rest=4]="Rest",e[e.Decorate=8]="Decorate",e[e.Metadata=16]="Metadata",e[e.Param=32]="Param",e[e.Awaiter=64]="Awaiter",e[e.Generator=128]="Generator",e[e.Values=256]="Values",e[e.Read=512]="Read",e[e.SpreadArray=1024]="SpreadArray",e[e.Await=2048]="Await",e[e.AsyncGenerator=4096]="AsyncGenerator",e[e.AsyncDelegator=8192]="AsyncDelegator",e[e.AsyncValues=16384]="AsyncValues",e[e.ExportStar=32768]="ExportStar",e[e.ImportStar=65536]="ImportStar",e[e.ImportDefault=131072]="ImportDefault",e[e.MakeTemplateObject=262144]="MakeTemplateObject",e[e.ClassPrivateFieldGet=524288]="ClassPrivateFieldGet",e[e.ClassPrivateFieldSet=1048576]="ClassPrivateFieldSet",e[e.ClassPrivateFieldIn=2097152]="ClassPrivateFieldIn",e[e.CreateBinding=4194304]="CreateBinding",e[e.FirstEmitHelper=1]="FirstEmitHelper",e[e.LastEmitHelper=4194304]="LastEmitHelper",e[e.ForOfIncludes=256]="ForOfIncludes",e[e.ForAwaitOfIncludes=16384]="ForAwaitOfIncludes",e[e.AsyncGeneratorIncludes=6144]="AsyncGeneratorIncludes",e[e.AsyncDelegatorIncludes=26624]="AsyncDelegatorIncludes",e[e.SpreadIncludes=1536]="SpreadIncludes"}(e.ExternalEmitHelpers||(e.ExternalEmitHelpers={})),function(e){e[e.SourceFile=0]="SourceFile",e[e.Expression=1]="Expression",e[e.IdentifierName=2]="IdentifierName",e[e.MappedTypeParameter=3]="MappedTypeParameter",e[e.Unspecified=4]="Unspecified",e[e.EmbeddedStatement=5]="EmbeddedStatement",e[e.JsxAttributeValue=6]="JsxAttributeValue"}(e.EmitHint||(e.EmitHint={})),function(e){e[e.Parentheses=1]="Parentheses",e[e.TypeAssertions=2]="TypeAssertions",e[e.NonNullAssertions=4]="NonNullAssertions",e[e.PartiallyEmittedExpressions=8]="PartiallyEmittedExpressions",e[e.Assertions=6]="Assertions",e[e.All=15]="All",e[e.ExcludeJSDocTypeAssertion=16]="ExcludeJSDocTypeAssertion"}(e.OuterExpressionKinds||(e.OuterExpressionKinds={})),function(e){e[e.None=0]="None",e[e.InParameters=1]="InParameters",e[e.VariablesHoistedInParameters=2]="VariablesHoistedInParameters"}(e.LexicalEnvironmentFlags||(e.LexicalEnvironmentFlags={})),function(e){e.Prologue="prologue",e.EmitHelpers="emitHelpers",e.NoDefaultLib="no-default-lib",e.Reference="reference",e.Type="type",e.TypeResolutionModeRequire="type-require",e.TypeResolutionModeImport="type-import",e.Lib="lib",e.Prepend="prepend",e.Text="text",e.Internal="internal"}(e.BundleFileSectionKind||(e.BundleFileSectionKind={})),function(e){e[e.None=0]="None",e[e.SingleLine=0]="SingleLine",e[e.MultiLine=1]="MultiLine",e[e.PreserveLines=2]="PreserveLines",e[e.LinesMask=3]="LinesMask",e[e.NotDelimited=0]="NotDelimited",e[e.BarDelimited=4]="BarDelimited",e[e.AmpersandDelimited=8]="AmpersandDelimited",e[e.CommaDelimited=16]="CommaDelimited",e[e.AsteriskDelimited=32]="AsteriskDelimited",e[e.DelimitersMask=60]="DelimitersMask",e[e.AllowTrailingComma=64]="AllowTrailingComma",e[e.Indented=128]="Indented",e[e.SpaceBetweenBraces=256]="SpaceBetweenBraces",e[e.SpaceBetweenSiblings=512]="SpaceBetweenSiblings",e[e.Braces=1024]="Braces",e[e.Parenthesis=2048]="Parenthesis",e[e.AngleBrackets=4096]="AngleBrackets",e[e.SquareBrackets=8192]="SquareBrackets",e[e.BracketsMask=15360]="BracketsMask",e[e.OptionalIfUndefined=16384]="OptionalIfUndefined",e[e.OptionalIfEmpty=32768]="OptionalIfEmpty",e[e.Optional=49152]="Optional",e[e.PreferNewLine=65536]="PreferNewLine",e[e.NoTrailingNewLine=131072]="NoTrailingNewLine",e[e.NoInterveningComments=262144]="NoInterveningComments",e[e.NoSpaceIfEmpty=524288]="NoSpaceIfEmpty",e[e.SingleElement=1048576]="SingleElement",e[e.SpaceAfterList=2097152]="SpaceAfterList",e[e.Modifiers=2359808]="Modifiers",e[e.HeritageClauses=512]="HeritageClauses",e[e.SingleLineTypeLiteralMembers=768]="SingleLineTypeLiteralMembers",e[e.MultiLineTypeLiteralMembers=32897]="MultiLineTypeLiteralMembers",e[e.SingleLineTupleTypeElements=528]="SingleLineTupleTypeElements",e[e.MultiLineTupleTypeElements=657]="MultiLineTupleTypeElements",e[e.UnionTypeConstituents=516]="UnionTypeConstituents",e[e.IntersectionTypeConstituents=520]="IntersectionTypeConstituents",e[e.ObjectBindingPatternElements=525136]="ObjectBindingPatternElements",e[e.ArrayBindingPatternElements=524880]="ArrayBindingPatternElements",e[e.ObjectLiteralExpressionProperties=526226]="ObjectLiteralExpressionProperties",e[e.ImportClauseEntries=526226]="ImportClauseEntries",e[e.ArrayLiteralExpressionElements=8914]="ArrayLiteralExpressionElements",e[e.CommaListElements=528]="CommaListElements",e[e.CallExpressionArguments=2576]="CallExpressionArguments",e[e.NewExpressionArguments=18960]="NewExpressionArguments",e[e.TemplateExpressionSpans=262144]="TemplateExpressionSpans",e[e.SingleLineBlockStatements=768]="SingleLineBlockStatements",e[e.MultiLineBlockStatements=129]="MultiLineBlockStatements",e[e.VariableDeclarationList=528]="VariableDeclarationList",e[e.SingleLineFunctionBodyStatements=768]="SingleLineFunctionBodyStatements",e[e.MultiLineFunctionBodyStatements=1]="MultiLineFunctionBodyStatements",e[e.ClassHeritageClauses=0]="ClassHeritageClauses",e[e.ClassMembers=129]="ClassMembers",e[e.InterfaceMembers=129]="InterfaceMembers",e[e.EnumMembers=145]="EnumMembers",e[e.CaseBlockClauses=129]="CaseBlockClauses",e[e.NamedImportsOrExportsElements=525136]="NamedImportsOrExportsElements",e[e.JsxElementOrFragmentChildren=262144]="JsxElementOrFragmentChildren",e[e.JsxElementAttributes=262656]="JsxElementAttributes",e[e.CaseOrDefaultClauseStatements=163969]="CaseOrDefaultClauseStatements",e[e.HeritageClauseTypes=528]="HeritageClauseTypes",e[e.SourceFileStatements=131073]="SourceFileStatements",e[e.Decorators=2146305]="Decorators",e[e.TypeArguments=53776]="TypeArguments",e[e.TypeParameters=53776]="TypeParameters",e[e.Parameters=2576]="Parameters",e[e.IndexSignatureParameters=8848]="IndexSignatureParameters",e[e.JSDocComment=33]="JSDocComment"}(e.ListFormat||(e.ListFormat={})),function(e){e[e.None=0]="None",e[e.TripleSlashXML=1]="TripleSlashXML",e[e.SingleLine=2]="SingleLine",e[e.MultiLine=4]="MultiLine",e[e.All=7]="All",e[e.Default=7]="Default"}(e.PragmaKindFlags||(e.PragmaKindFlags={})),e.commentPragmas={reference:{args:[{name:"types",optional:!0,captureSpan:!0},{name:"lib",optional:!0,captureSpan:!0},{name:"path",optional:!0,captureSpan:!0},{name:"no-default-lib",optional:!0},{name:"resolution-mode",optional:!0}],kind:1},"amd-dependency":{args:[{name:"path"},{name:"name",optional:!0}],kind:1},"amd-module":{args:[{name:"name"}],kind:1},"ts-check":{kind:2},"ts-nocheck":{kind:2},jsx:{args:[{name:"factory"}],kind:4},jsxfrag:{args:[{name:"factory"}],kind:4},jsximportsource:{args:[{name:"factory"}],kind:4},jsxruntime:{args:[{name:"factory"}],kind:4}}}(_||(_={})),function(e){function t(e){for(var t=5381,r=0;r<e.length;r++)t=(t<<5)+t+e.charCodeAt(r);return t.toString()}var n,a;function s(t,r){return t.getModifiedTime(r)||e.missingFileModifiedTime}function c(e){var t;return(t={})[a.Low]=e.Low,t[a.Medium]=e.Medium,t[a.High]=e.High,t}e.generateDjb2Hash=t,e.setStackTraceLimit=function(){Error.stackTraceLimit<100&&(Error.stackTraceLimit=100)},function(e){e[e.Created=0]="Created",e[e.Changed=1]="Changed",e[e.Deleted=2]="Deleted"}(n=e.FileWatcherEventKind||(e.FileWatcherEventKind={})),function(e){e[e.High=2e3]="High",e[e.Medium=500]="Medium",e[e.Low=250]="Low"}(a=e.PollingInterval||(e.PollingInterval={})),e.missingFileModifiedTime=new Date(0),e.getModifiedTime=s;var u={Low:32,Medium:64,High:256},l=c(u);function _(e,t,r,n,i){for(var a=r,o=t.length;n&&o;l(),o--){var c=t[r];if(c)if(c.isClosed)t[r]=void 0;else{n--;var u=m(c,s(e,c.fileName));c.isClosed?t[r]=void 0:(null==i||i(c,r,u),t[r]&&(a<r&&(t[a]=c,t[r]=void 0),a++))}}return r;function l(){++r===t.length&&(a<r&&(t.length=a),r=0,a=0)}}function d(t){var r=[],n=[],i=u(a.Low),o=u(a.Medium),c=u(a.High);return function(n,i,a){var o={fileName:n,callback:i,unchangedPolls:0,mtime:s(t,n)};return r.push(o),m(o,a),{close:function(){o.isClosed=!0,e.unorderedRemoveItem(r,o)}}};function u(e){var t=[];return t.pollingInterval=e,t.pollIndex=0,t.pollScheduled=!1,t}function d(t){t.pollIndex=f(t,t.pollingInterval,t.pollIndex,l[t.pollingInterval]),t.length?v(t.pollingInterval):(e.Debug.assert(0===t.pollIndex),t.pollScheduled=!1)}function p(e){f(n,a.Low,0,n.length),d(e),!e.pollScheduled&&n.length&&v(a.Low)}function f(r,i,o,s){return _(t,r,o,s,(function(t,o,s){s?(t.unchangedPolls=0,r!==n&&(r[o]=void 0,c=t,n.push(c),y(a.Low))):t.unchangedPolls!==e.unchangedPollThresholds[i]?t.unchangedPolls++:r===n?(t.unchangedPolls=1,r[o]=void 0,m(t,a.Low)):i!==a.High&&(t.unchangedPolls++,r[o]=void 0,m(t,i===a.Low?a.Medium:a.High));var c}))}function g(e){switch(e){case a.Low:return i;case a.Medium:return o;case a.High:return c}}function m(e,t){g(t).push(e),y(t)}function y(e){g(e).pollScheduled||v(e)}function v(e){g(e).pollScheduled=t.setTimeout(e===a.Low?p:d,e,g(e))}}function p(t,r){var i=e.createMultiMap(),o=new e.Map,s=e.createGetCanonicalFileName(r);return function(r,c,u,l){var _=s(r);i.add(_,c);var d=e.getDirectoryPath(_)||".",p=o.get(d)||function(r,c,u){var l=t(r,1,(function(t,a,o){if(e.isString(a)){var c=e.getNormalizedAbsolutePath(a,r),u=c&&i.get(s(c));if(u)for(var l=0,_=u;l<_.length;l++){(0,_[l])(c,n.Changed,o)}}}),!1,a.Medium,u);return l.referenceCount=0,o.set(c,l),l}(e.getDirectoryPath(r)||".",d,l);return p.referenceCount++,{close:function(){1===p.referenceCount?(p.close(),o.delete(d)):p.referenceCount--,i.remove(_,c)}}}}function f(t){var r,n=[],i=0;return function(r,i){var a={fileName:r,callback:i,mtime:s(t,r)};return n.push(a),c(),{close:function(){a.isClosed=!0,e.unorderedRemoveItem(n,a)}}};function o(){r=void 0,i=_(t,n,i,l[a.Low]),c()}function c(){n.length&&!r&&(r=t.setTimeout(o,a.High))}}function g(t,r,n,i,a){var o=e.createGetCanonicalFileName(r)(n),s=t.get(o);return s?s.callbacks.push(i):t.set(o,{watcher:a((function(e,r,n){var i;return null===(i=t.get(o))||void 0===i?void 0:i.callbacks.slice().forEach((function(t){return t(e,r,n)}))})),callbacks:[i]}),{close:function(){var r=t.get(o);r&&e.orderedRemoveItem(r.callbacks,i)&&!r.callbacks.length&&(t.delete(o),e.closeFileWatcherOf(r))}}}function m(e,t){var r=e.mtime.getTime(),n=t.getTime();return r!==n&&(e.mtime=t,e.callback(e.fileName,y(r,n),t),!0)}function y(e,t){return 0===e?n.Created:0===t?n.Deleted:n.Changed}e.unchangedPollThresholds=c(u),e.getFileWatcherEventKind=y,e.ignoredPaths=["/node_modules/.","/.git","/.#"];var v,h=e.noop;function b(e){return h(e)}function x(t){var r,n=t.watchDirectory,i=t.useCaseSensitiveFileNames,a=t.getCurrentDirectory,o=t.getAccessibleSortedChildDirectories,s=t.fileSystemEntryExists,c=t.realpath,u=t.setTimeout,l=t.clearTimeout,_=new e.Map,d=e.createMultiMap(),p=new e.Map,f=e.getStringComparer(!i),g=e.createGetCanonicalFileName(i);return function(e,t,r,i){return r?m(e,i,t):n(e,t,r,i)};function m(t,i,a){var o=g(t),c=_.get(o);c?c.refCount++:(c={watcher:n(t,(function(e){S(e,i)||((null==i?void 0:i.synchronousWatchDirectory)?(y(o,e),x(t,o,i)):function(e,t,n,i){var a=_.get(t);if(a&&s(e,1))return void function(e,t,n,i){var a=p.get(t);a?a.fileNames.push(n):p.set(t,{dirName:e,options:i,fileNames:[n]});r&&(l(r),r=void 0);r=u(v,1e3)}(e,t,n,i);y(t,n),h(a)}(t,o,e,i))}),!1,i),refCount:1,childWatches:e.emptyArray},_.set(o,c),x(t,o,i));var f=a&&{dirName:t,callback:a};return f&&d.add(o,f),{dirName:t,close:function(){var t=e.Debug.checkDefined(_.get(o));f&&d.remove(o,f),t.refCount--,t.refCount||(_.delete(o),e.closeFileWatcherOf(t),t.childWatches.forEach(e.closeFileWatcher))}}}function y(t,r,n){var i,a;e.isString(r)?i=r:a=r,d.forEach((function(r,o){var s;if((!a||!0!==a.get(o))&&(o===t||e.startsWith(t,o)&&t[o.length]===e.directorySeparator))if(a)if(n){var c=a.get(o);c?(s=c).push.apply(s,n):a.set(o,n.slice())}else a.set(o,!0);else r.forEach((function(e){return(0,e.callback)(i)}))}))}function v(){r=void 0,b("sysLog:: onTimerToUpdateChildWatches:: ".concat(p.size));for(var t=e.timestamp(),n=new e.Map;!r&&p.size;){var i=p.entries().next();e.Debug.assert(!i.done);var a=i.value,o=a[0],s=a[1],c=s.dirName,u=s.options,l=s.fileNames;p.delete(o);var _=x(c,o,u);y(o,n,_?void 0:l)}b("sysLog:: invokingWatchers:: Elapsed:: ".concat(e.timestamp()-t,"ms:: ").concat(p.size)),d.forEach((function(t,r){var i=n.get(r);i&&t.forEach((function(t){var r=t.callback,n=t.dirName;e.isArray(i)?i.forEach(r):r(n)}))}));var f=e.timestamp()-t;b("sysLog:: Elapsed:: ".concat(f,"ms:: onTimerToUpdateChildWatches:: ").concat(p.size," ").concat(r))}function h(t){if(t){var r=t.childWatches;t.childWatches=e.emptyArray;for(var n=0,i=r;n<i.length;n++){var a=i[n];a.close(),h(_.get(g(a.dirName)))}}}function x(t,r,n){var i,a=_.get(r);if(!a)return!1;var u=e.enumerateInsertsAndDeletes(s(t,1)?e.mapDefined(o(t),(function(r){var i=e.getNormalizedAbsolutePath(r,t);return S(i,n)||0!==f(i,e.normalizePath(c(i)))?void 0:i})):e.emptyArray,a.childWatches,(function(e,t){return f(e,t.dirName)}),(function(e){l(m(e,n))}),e.closeFileWatcher,l);return a.childWatches=i||e.emptyArray,u;function l(e){(i||(i=[])).push(e)}}function S(t,r){return e.some(e.ignoredPaths,(function(r){return function(t,r){return!!e.stringContains(t,r)||!i&&e.stringContains(g(t),r)}(t,r)}))||D(t,r,i,a)}}function D(t,r,n,i){return((null==r?void 0:r.excludeDirectories)||(null==r?void 0:r.excludeFiles))&&(e.matchesExclude(t,null==r?void 0:r.excludeFiles,n,i())||e.matchesExclude(t,null==r?void 0:r.excludeDirectories,n,i()))}function S(t,r,n,i,a){return function(o,s){if("rename"===o){var c=s?e.normalizePath(e.combinePaths(t,s)):t;s&&D(c,n,i,a)||r(c)}}}function T(t){var r,i,o,s,c=t.pollingWatchFileWorker,u=t.getModifiedTime,l=t.setTimeout,_=t.clearTimeout,m=t.fsWatchWorker,y=t.fileSystemEntryExists,v=t.useCaseSensitiveFileNames,h=t.getCurrentDirectory,b=t.fsSupportsRecursiveFsWatch,D=t.getAccessibleSortedChildDirectories,T=t.realpath,C=t.tscWatchFile,E=t.useNonPollingWatchers,k=t.tscWatchDirectory,N=t.inodeWatching,A=t.sysLog,F=new e.Map,P=new e.Map,w=new e.Map,I=!1;return{watchFile:O,watchDirectory:function(t,r,n,i){if(b)return J(t,1,S(t,r,i,v,h),n,a.Medium,e.getFallbackOptions(i));s||(s=x({useCaseSensitiveFileNames:v,getCurrentDirectory:h,fileSystemEntryExists:y,getAccessibleSortedChildDirectories:D,watchDirectory:B,realpath:T,setTimeout:l,clearTimeout:_}));return s(t,r,n,i)}};function O(t,r,i,s){s=function(t,r){if(t&&void 0!==t.watchFile)return t;switch(C){case"PriorityPollingInterval":return{watchFile:e.WatchFileKind.PriorityPollingInterval};case"DynamicPriorityPolling":return{watchFile:e.WatchFileKind.DynamicPriorityPolling};case"UseFsEvents":return R(e.WatchFileKind.UseFsEvents,e.PollingWatchKind.PriorityInterval,t);case"UseFsEventsWithFallbackDynamicPolling":return R(e.WatchFileKind.UseFsEvents,e.PollingWatchKind.DynamicPriority,t);case"UseFsEventsOnParentDirectory":r=!0;default:return r?R(e.WatchFileKind.UseFsEventsOnParentDirectory,e.PollingWatchKind.PriorityInterval,t):{watchFile:e.WatchFileKind.UseFsEvents}}}(s,E);var c=e.Debug.checkDefined(s.watchFile);switch(c){case e.WatchFileKind.FixedPollingInterval:return j(t,r,a.Low,void 0);case e.WatchFileKind.PriorityPollingInterval:return j(t,r,i,void 0);case e.WatchFileKind.DynamicPriorityPolling:return M()(t,r,i,void 0);case e.WatchFileKind.FixedChunkSizePolling:return L()(t,r,void 0,void 0);case e.WatchFileKind.UseFsEvents:return J(t,0,function(t,r,i){return function(a,o,s){"rename"===a?(s||(s=i(t)||e.missingFileModifiedTime),r(t,s!==e.missingFileModifiedTime?n.Created:n.Deleted,s)):r(t,n.Changed,s)}}(t,r,u),!1,i,e.getFallbackOptions(s));case e.WatchFileKind.UseFsEventsOnParentDirectory:return o||(o=p(J,v)),o(t,r,i,e.getFallbackOptions(s));default:e.Debug.assertNever(c)}}function M(){return r||(r=d({getModifiedTime:u,setTimeout:l}))}function L(){return i||(i=f({getModifiedTime:u,setTimeout:l}))}function R(e,t,r){var n=null==r?void 0:r.fallbackPolling;return{watchFile:e,fallbackPolling:void 0===n?t:n}}function B(t,r,n,i){e.Debug.assert(!n);var o=function(t){if(t&&void 0!==t.watchDirectory)return t;switch(k){case"RecursiveDirectoryUsingFsWatchFile":return{watchDirectory:e.WatchDirectoryKind.FixedPollingInterval};case"RecursiveDirectoryUsingDynamicPriorityPolling":return{watchDirectory:e.WatchDirectoryKind.DynamicPriorityPolling};default:var r=null==t?void 0:t.fallbackPolling;return{watchDirectory:e.WatchDirectoryKind.UseFsEvents,fallbackPolling:void 0!==r?r:void 0}}}(i),s=e.Debug.checkDefined(o.watchDirectory);switch(s){case e.WatchDirectoryKind.FixedPollingInterval:return j(t,(function(){return r(t)}),a.Medium,void 0);case e.WatchDirectoryKind.DynamicPriorityPolling:return M()(t,(function(){return r(t)}),a.Medium,void 0);case e.WatchDirectoryKind.FixedChunkSizePolling:return L()(t,(function(){return r(t)}),void 0,void 0);case e.WatchDirectoryKind.UseFsEvents:return J(t,1,S(t,r,i,v,h),n,a.Medium,e.getFallbackOptions(o));default:e.Debug.assertNever(s)}}function j(e,t,r,n){return g(F,v,e,t,(function(t){return c(e,t,r,n)}))}function J(t,r,i,a,o,s){return g(a?w:P,v,t,i,(function(i){return function(t,r,i,a,o,s){var c,l;N&&(c=t.substring(t.lastIndexOf(e.directorySeparator)),l=c.slice(e.directorySeparator.length));var _=y(t,r)?p():v();return{close:function(){_&&(_.close(),_=void 0)}};function d(e){_&&(A("sysLog:: ".concat(t,":: Changing watcher to ").concat(e===p?"Present":"Missing","FileSystemEntryWatcher")),_.close(),_=e())}function p(){if(I)return A("sysLog:: ".concat(t,":: Defaulting to watchFile")),g();try{var e=m(t,a,N?f:i);return e.on("error",(function(){i("rename",""),d(v)})),e}catch(r){return I||(I="ENOSPC"===r.code),A("sysLog:: ".concat(t,":: Changing to watchFile")),g()}}function f(r,n){var a;if(n&&e.endsWith(n,"~")&&(a=n,n=n.slice(0,n.length-1)),"rename"!==r||n&&n!==l&&!e.endsWith(n,c))a&&i(r,a),i(r,n);else{var o=u(t)||e.missingFileModifiedTime;a&&i(r,a,o),i(r,n,o),N?d(o===e.missingFileModifiedTime?v:p):o===e.missingFileModifiedTime&&d(v)}}function g(){return O(t,function(e){return function(t,r,i){return e(r===n.Changed?"change":"rename","",i)}}(i),o,s)}function v(){return O(t,(function(r,a,o){a===n.Created&&(o||(o=u(t)||e.missingFileModifiedTime),o!==e.missingFileModifiedTime&&(i("rename","",o),d(p)))}),o,s)}}(t,r,i,a,o,s)}))}}function C(t){var r=t.writeFile;t.writeFile=function(n,i,a){return e.writeFileEnsuringDirectories(n,i,!!a,(function(e,n,i){return r.call(t,e,n,i)}),(function(e){return t.createDirectory(e)}),(function(e){return t.directoryExists(e)}))}}function E(){if("undefined"!=typeof process){var e=process.version;if(e){var t=e.indexOf(".");if(-1!==t)return parseInt(e.substring(1,t))}}}e.sysLog=b,e.setSysLog=function(e){h=e},function(e){e[e.File=0]="File",e[e.Directory=1]="Directory"}(e.FileSystemEntryKind||(e.FileSystemEntryKind={})),e.createSystemWatchFunctions=T,e.patchWriteFileEnsuringDirectory=C,e.getNodeMajorVersion=E,e.sys=("undefined"!=typeof process&&process.nextTick&&!process.browser&&(v=function(){var a,o,s=/^native |^\([^)]+\)$|^(internal[\\/]|[a-zA-Z0-9_\s]+(\.js)?$)/,c=r(2715),u=r(1210),l=r(8353);try{a=r(3024)}catch(R){a=void 0}var _,d="./profile.cpuprofile",p=r(2183).Buffer,f=E()>=4,g="linux"===process.platform||"darwin"===process.platform,m=l.platform(),y="win32"!==m&&"win64"!==m&&!I((_=i,_.replace(/\w/g,(function(e){var t=e.toUpperCase();return e===t?e.toLowerCase():t})))),v=c.realpathSync.native?"win32"===process.platform?function(e){return e.length<260?c.realpathSync.native(e):c.realpathSync(e)}:c.realpathSync.native:c.realpathSync,h=f&&("win32"===process.platform||"darwin"===process.platform),x=e.memoize((function(){return process.cwd()})),D=T({pollingWatchFileWorker:function(e,t,r){var i;return c.watchFile(e,{persistent:!0,interval:r},a),{close:function(){return c.unwatchFile(e,a)}};function a(r,a){var o=0==+a.mtime||i===n.Deleted;if(0==+r.mtime){if(o)return;i=n.Deleted}else if(o)i=n.Created;else{if(+r.mtime==+a.mtime)return;i=n.Changed}t(e,i,r.mtime)}},getModifiedTime:M,setTimeout:setTimeout,clearTimeout:clearTimeout,fsWatchWorker:function(e,t,r){return c.watch(e,h?{persistent:!0,recursive:!!t}:{persistent:!0},r)},useCaseSensitiveFileNames:y,getCurrentDirectory:x,fileSystemEntryExists:w,fsSupportsRecursiveFsWatch:h,getAccessibleSortedChildDirectories:function(e){return P(e).directories},realpath:O,tscWatchFile:process.env.TSC_WATCHFILE,useNonPollingWatchers:process.env.TSC_NONPOLLING_WATCHER,tscWatchDirectory:process.env.TSC_WATCHDIRECTORY,inodeWatching:g,sysLog:b}),S=D.watchFile,C=D.watchDirectory,k={args:process.argv.slice(2),newLine:l.EOL,useCaseSensitiveFileNames:y,write:function(e){process.stdout.write(e)},getWidthOfTerminal:function(){return process.stdout.columns},writeOutputIsTTY:function(){return process.stdout.isTTY},readFile:function(t,r){e.perfLogger.logStartReadFile(t);var n=function(e,t){var r;try{r=c.readFileSync(e)}catch(o){return}var n=r.length;if(n>=2&&254===r[0]&&255===r[1]){n&=-2;for(var i=0;i<n;i+=2){var a=r[i];r[i]=r[i+1],r[i+1]=a}return r.toString("utf16le",2)}return n>=2&&255===r[0]&&254===r[1]?r.toString("utf16le",2):n>=3&&239===r[0]&&187===r[1]&&191===r[2]?r.toString("utf8",3):r.toString("utf8")}(t);return e.perfLogger.logStopReadFile(),n},writeFile:function(t,r,n){var i;e.perfLogger.logEvent("WriteFile: "+t),n&&(r="\ufeff"+r);try{i=c.openSync(t,"w"),c.writeSync(i,r,void 0,"utf8")}finally{void 0!==i&&c.closeSync(i)}},watchFile:S,watchDirectory:C,resolvePath:function(e){return u.resolve(e)},fileExists:I,directoryExists:function(e){return w(e,1)},createDirectory:function(e){if(!k.directoryExists(e))try{c.mkdirSync(e)}catch(t){if("EEXIST"!==t.code)throw t}},getExecutingFilePath:function(){return i},getCurrentDirectory:x,getDirectories:function(e){return P(e).directories.slice()},getEnvironmentVariable:function(e){return process.env[e]||""},readDirectory:function(t,r,n,i,a){return e.matchFiles(t,r,n,i,y,process.cwd(),a,P,O)},getModifiedTime:M,setModifiedTime:function(e,t){try{c.utimesSync(e,t,t)}catch(r){return}},deleteFile:function(e){try{return c.unlinkSync(e)}catch(t){return}},createHash:a?L:t,createSHA256Hash:a?L:void 0,getMemoryUsage:function(){return r.g.gc&&r.g.gc(),process.memoryUsage().heapUsed},getFileSize:function(e){try{var t=N(e);if(null==t?void 0:t.isFile())return t.size}catch(R){}return 0},exit:function(e){A((function(){return process.exit(e)}))},enableCPUProfiler:function(e,t){if(o)return t(),!1;var n=r(3611);if(!n||!n.Session)return t(),!1;var i=new n.Session;return i.connect(),i.post("Profiler.enable",(function(){i.post("Profiler.start",(function(){o=i,d=e,t()}))})),!0},disableCPUProfiler:A,cpuProfilingEnabled:function(){return!!o||e.contains(process.execArgv,"--cpu-prof")||e.contains(process.execArgv,"--prof")},realpath:O,debugMode:!!process.env.NODE_INSPECTOR_IPC||!!process.env.VSCODE_INSPECTOR_OPTIONS||e.some(process.execArgv,(function(e){return/^--(inspect|debug)(-brk)?(=\d+)?$/i.test(e)})),tryEnableSourceMapsForHost:function(){try{r(3454).install()}catch(R){}},setTimeout:setTimeout,clearTimeout:clearTimeout,clearScreen:function(){process.stdout.write("\x1bc")},setBlocking:function(){process.stdout&&process.stdout._handle&&process.stdout._handle.setBlocking&&process.stdout._handle.setBlocking(!0)},bufferFrom:F,base64decode:function(e){return F(e,"base64").toString("utf8")},base64encode:function(e){return F(e).toString("base64")},require:function(t,n){try{var i=e.resolveJSModule(n,t,k);return{module:r(3411)(i),modulePath:i,error:void 0}}catch(a){return{module:void 0,modulePath:void 0,error:a}}}};return k;function N(e){return c.statSync(e,{throwIfNoEntry:!1})}function A(t){if(o&&"stopping"!==o){var r=o;return o.post("Profiler.stop",(function(n,i){var a,l=i.profile;if(!n){try{(null===(a=N(d))||void 0===a?void 0:a.isDirectory())&&(d=u.join(d,"".concat((new Date).toISOString().replace(/:/g,"-"),"+P").concat(process.pid,".cpuprofile")))}catch(_){}try{c.mkdirSync(u.dirname(d),{recursive:!0})}catch(p){}c.writeFileSync(d,JSON.stringify(function(t){for(var r=0,n=new e.Map,i=e.normalizeSlashes("/"),a="file://".concat(1===e.getRootLength(i)?"":"/").concat(i),o=0,c=t.nodes;o<c.length;o++){var u=c[o];if(u.callFrame.url){var l=e.normalizeSlashes(u.callFrame.url);e.containsPath(a,l,y)?u.callFrame.url=e.getRelativePathToDirectoryOrUrl(a,l,a,e.createGetCanonicalFileName(y),!0):s.test(l)||(u.callFrame.url=(n.has(l)?n:n.set(l,"external".concat(r,".js"))).get(l),r++)}}return t}(l)))}o=void 0,r.disconnect(),t()})),o="stopping",!0}return t(),!1}function F(e,t){return p.from&&p.from!==Int8Array.from?p.from(e,t):new p(e,t)}function P(t){e.perfLogger.logEvent("ReadDir: "+(t||"."));try{for(var r=c.readdirSync(t||".",{withFileTypes:!0}),n=[],i=[],a=0,o=r;a<o.length;a++){var s=o[a],u="string"==typeof s?s:s.name;if("."!==u&&".."!==u){var l=void 0;if("string"==typeof s||s.isSymbolicLink()){var _=e.combinePaths(t,u);try{if(!(l=N(_)))continue}catch(d){continue}}else l=s;l.isFile()?n.push(u):l.isDirectory()&&i.push(u)}}return n.sort(),i.sort(),{files:n,directories:i}}catch(d){return e.emptyFileSystemEntries}}function w(e,t){var r=Error.stackTraceLimit;Error.stackTraceLimit=0;try{var n=N(e);if(!n)return!1;switch(t){case 0:return n.isFile();case 1:return n.isDirectory();default:return!1}}catch(i){return!1}finally{Error.stackTraceLimit=r}}function I(e){return w(e,0)}function O(e){try{return v(e)}catch(R){return e}}function M(e){var t,r=Error.stackTraceLimit;Error.stackTraceLimit=0;try{return null===(t=N(e))||void 0===t?void 0:t.mtime}catch(n){return}finally{Error.stackTraceLimit=r}}function L(e){var t=a.createHash("sha256");return t.update(e),t.digest("hex")}}()),v&&C(v),v),e.setSys=function(t){e.sys=t},e.sys&&e.sys.getEnvironmentVariable&&(!function(t){if(t.getEnvironmentVariable){var r=function(e,t){var r=n("TSC_WATCH_POLLINGINTERVAL");return!!r&&(i("Low"),i("Medium"),i("High"),!0);function i(e){t[e]=r[e]||t[e]}}(0,a);l=i("TSC_WATCH_POLLINGCHUNKSIZE",u)||l,e.unchangedPollThresholds=i("TSC_WATCH_UNCHANGEDPOLLTHRESHOLDS",u)||e.unchangedPollThresholds}function n(e){var r;return n("Low"),n("Medium"),n("High"),r;function n(n){var i=function(e,r){return t.getEnvironmentVariable("".concat(e,"_").concat(r.toUpperCase()))}(e,n);i&&((r||(r={}))[n]=Number(i))}}function i(e,t){var i=n(e);return(r||i)&&c(i?o(o({},t),i):t)}}(e.sys),e.Debug.setAssertionLevel(/^development$/i.test(e.sys.getEnvironmentVariable("NODE_ENV"))?1:0)),e.sys&&e.sys.debugMode&&(e.Debug.isDebugging=!0)}(_||(_={})),function(e){e.directorySeparator="/",e.altDirectorySeparator="\\";var t=/\\/g;function r(e){return 47===e||92===e}function n(e){return l(e)>0}function i(e){return 0!==l(e)}function o(e){return/^\.\.?($|[\\/])/.test(e)}function s(t,r){return t.length>r.length&&e.endsWith(t,r)}function c(e){return e.length>0&&r(e.charCodeAt(e.length-1))}function u(e){return e>=97&&e<=122||e>=65&&e<=90}function l(t){if(!t)return 0;var r=t.charCodeAt(0);if(47===r||92===r){if(t.charCodeAt(1)!==r)return 1;var n=t.indexOf(47===r?e.directorySeparator:e.altDirectorySeparator,2);return n<0?t.length:n+1}if(u(r)&&58===t.charCodeAt(1)){var i=t.charCodeAt(2);if(47===i||92===i)return 3;if(2===t.length)return 2}var a=t.indexOf("://");if(-1!==a){var o=a+"://".length,s=t.indexOf(e.directorySeparator,o);if(-1!==s){var c=t.slice(0,a),l=t.slice(o,s);if("file"===c&&(""===l||"localhost"===l)&&u(t.charCodeAt(s+1))){var _=function(e,t){var r=e.charCodeAt(t);if(58===r)return t+1;if(37===r&&51===e.charCodeAt(t+1)){var n=e.charCodeAt(t+2);if(97===n||65===n)return t+3}return-1}(t,s+2);if(-1!==_){if(47===t.charCodeAt(_))return~(_+1);if(_===t.length)return~_}}return~(s+1)}return~t.length}return 0}function _(e){var t=l(e);return t<0?~t:t}function d(t){var r=_(t=v(t));return r===t.length?t:(t=C(t)).slice(0,Math.max(r,t.lastIndexOf(e.directorySeparator)))}function p(t,r,n){if(_(t=v(t))===t.length)return"";var i=(t=C(t)).slice(Math.max(_(t),t.lastIndexOf(e.directorySeparator)+1)),a=void 0!==r&&void 0!==n?g(i,r,n):void 0;return a?i.slice(0,i.length-a.length):i}function f(t,r,n){if(e.startsWith(r,".")||(r="."+r),t.length>=r.length&&46===t.charCodeAt(t.length-r.length)){var i=t.slice(t.length-r.length);if(n(i,r))return i}}function g(t,r,n){if(r)return function(e,t,r){if("string"==typeof t)return f(e,t,r)||"";for(var n=0,i=t;n<i.length;n++){var a=f(e,i[n],r);if(a)return a}return""}(C(t),r,n?e.equateStringsCaseInsensitive:e.equateStringsCaseSensitive);var i=p(t),a=i.lastIndexOf(".");return a>=0?i.substring(a):""}function m(t,r){return void 0===r&&(r=""),function(t,r){var n=t.substring(0,r),i=t.substring(r).split(e.directorySeparator);return i.length&&!e.lastOrUndefined(i)&&i.pop(),a([n],i,!0)}(t=b(r,t),_(t))}function y(t){return 0===t.length?"":(t[0]&&E(t[0]))+t.slice(1).join(e.directorySeparator)}function v(r){return-1!==r.indexOf("\\")?r.replace(t,e.directorySeparator):r}function h(t){if(!e.some(t))return[];for(var r=[t[0]],n=1;n<t.length;n++){var i=t[n];if(i&&"."!==i){if(".."===i)if(r.length>1){if(".."!==r[r.length-1]){r.pop();continue}}else if(r[0])continue;r.push(i)}}return r}function b(e){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];e&&(e=v(e));for(var n=0,i=t;n<i.length;n++){var a=i[n];a&&(a=v(a),e=e&&0===_(a)?E(e)+a:a)}return e}function x(t){for(var r=[],n=1;n<arguments.length;n++)r[n-1]=arguments[n];return T(e.some(r)?b.apply(void 0,a([t],r,!1)):v(t))}function D(e,t){return h(m(e,t))}function S(e,t){return y(D(e,t))}function T(e){if(e=v(e),!N.test(e))return e;var t=e.replace(/\/\.\//g,"/").replace(/^\.\//,"");if(t!==e&&(e=t,!N.test(e)))return e;var r=y(h(m(e)));return r&&c(e)?E(r):r}function C(e){return c(e)?e.substr(0,e.length-1):e}function E(t){return c(t)?t:t+e.directorySeparator}function k(e){return i(e)||o(e)?e:"./"+e}e.isAnyDirectorySeparator=r,e.isUrl=function(e){return l(e)<0},e.isRootedDiskPath=n,e.isDiskPathRoot=function(e){var t=l(e);return t>0&&t===e.length},e.pathIsAbsolute=i,e.pathIsRelative=o,e.pathIsBareSpecifier=function(e){return!i(e)&&!o(e)},e.hasExtension=function(t){return e.stringContains(p(t),".")},e.fileExtensionIs=s,e.fileExtensionIsOneOf=function(e,t){for(var r=0,n=t;r<n.length;r++){if(s(e,n[r]))return!0}return!1},e.hasTrailingDirectorySeparator=c,e.getRootLength=_,e.getDirectoryPath=d,e.getBaseFileName=p,e.getAnyExtensionFromPath=g,e.getPathComponents=m,e.getPathFromPathComponents=y,e.normalizeSlashes=v,e.reducePathComponents=h,e.combinePaths=b,e.resolvePath=x,e.getNormalizedPathComponents=D,e.getNormalizedAbsolutePath=S,e.normalizePath=T,e.getNormalizedAbsolutePathWithoutRoot=function(t,r){return function(t){return 0===t.length?"":t.slice(1).join(e.directorySeparator)}(D(t,r))},e.toPath=function(e,t,r){return r(n(e)?T(e):S(e,t))},e.removeTrailingDirectorySeparator=C,e.ensureTrailingDirectorySeparator=E,e.ensurePathIsNonModuleName=k,e.changeAnyExtension=function(t,r,n,i){var a=void 0!==n&&void 0!==i?g(t,n,i):g(t);return a?t.slice(0,t.length-a.length)+(e.startsWith(r,".")?r:"."+r):t};var N=/(?:\/\/)|(?:^|\/)\.\.?(?:$|\/)/;function A(t,r,n){if(t===r)return 0;if(void 0===t)return-1;if(void 0===r)return 1;var i=t.substring(0,_(t)),a=r.substring(0,_(r)),o=e.compareStringsCaseInsensitive(i,a);if(0!==o)return o;var s=t.substring(i.length),c=r.substring(a.length);if(!N.test(s)&&!N.test(c))return n(s,c);for(var u=h(m(t)),l=h(m(r)),d=Math.min(u.length,l.length),p=1;p<d;p++){var f=n(u[p],l[p]);if(0!==f)return f}return e.compareValues(u.length,l.length)}function F(t,r,n,i){var o,s=h(m(t)),c=h(m(r));for(o=0;o<s.length&&o<c.length;o++){var u=i(s[o]),l=i(c[o]);if(!(0===o?e.equateStringsCaseInsensitive:n)(u,l))break}if(0===o)return c;for(var _=c.slice(o),d=[];o<s.length;o++)d.push("..");return a(a([""],d,!0),_,!0)}function P(t,r,n){e.Debug.assert(_(t)>0==_(r)>0,"Paths must either both be absolute or both be relative");var i="function"==typeof n?n:e.identity;return y(F(t,r,"boolean"==typeof n&&n?e.equateStringsCaseInsensitive:e.equateStringsCaseSensitive,i))}function w(t,r,i,a,o){var s=F(x(i,t),x(i,r),e.equateStringsCaseSensitive,a),c=s[0];if(o&&n(c)){var u=c.charAt(0)===e.directorySeparator?"file://":"file:///";s[0]=u+c}return y(s)}e.comparePathsCaseSensitive=function(t,r){return A(t,r,e.compareStringsCaseSensitive)},e.comparePathsCaseInsensitive=function(t,r){return A(t,r,e.compareStringsCaseInsensitive)},e.comparePaths=function(t,r,n,i){return"string"==typeof n?(t=b(n,t),r=b(n,r)):"boolean"==typeof n&&(i=n),A(t,r,e.getStringComparer(i))},e.containsPath=function(t,r,n,i){if("string"==typeof n?(t=b(n,t),r=b(n,r)):"boolean"==typeof n&&(i=n),void 0===t||void 0===r)return!1;if(t===r)return!0;var a=h(m(t)),o=h(m(r));if(o.length<a.length)return!1;for(var s=i?e.equateStringsCaseInsensitive:e.equateStringsCaseSensitive,c=0;c<a.length;c++){if(!(0===c?e.equateStringsCaseInsensitive:s)(a[c],o[c]))return!1}return!0},e.startsWithDirectory=function(t,r,n){var i=n(t),a=n(r);return e.startsWith(i,a+"/")||e.startsWith(i,a+"\\")},e.getPathComponentsRelativeTo=F,e.getRelativePathFromDirectory=P,e.convertToRelativePath=function(e,t,r){return n(e)?w(t,e,t,r,!1):e},e.getRelativePathFromFile=function(e,t,r){return k(P(d(e),t,r))},e.getRelativePathToDirectoryOrUrl=w,e.forEachAncestorDirectory=function(e,t){for(;;){var r=t(e);if(void 0!==r)return r;var n=d(e);if(n===e)return;e=n}},e.isNodeModulesDirectory=function(t){return e.endsWith(t,"/node_modules")}}(_||(_={})),function(e){function t(e,t,r,n,i,a,o){return{code:e,category:t,key:r,message:n,reportsUnnecessary:i,elidedInCompatabilityPyramid:a,reportsDeprecated:o}}e.Diagnostics={Unterminated_string_literal:t(1002,e.DiagnosticCategory.Error,"Unterminated_string_literal_1002","Unterminated string literal."),Identifier_expected:t(1003,e.DiagnosticCategory.Error,"Identifier_expected_1003","Identifier expected."),_0_expected:t(1005,e.DiagnosticCategory.Error,"_0_expected_1005","'{0}' expected."),A_file_cannot_have_a_reference_to_itself:t(1006,e.DiagnosticCategory.Error,"A_file_cannot_have_a_reference_to_itself_1006","A file cannot have a reference to itself."),The_parser_expected_to_find_a_1_to_match_the_0_token_here:t(1007,e.DiagnosticCategory.Error,"The_parser_expected_to_find_a_1_to_match_the_0_token_here_1007","The parser expected to find a '{1}' to match the '{0}' token here."),Trailing_comma_not_allowed:t(1009,e.DiagnosticCategory.Error,"Trailing_comma_not_allowed_1009","Trailing comma not allowed."),Asterisk_Slash_expected:t(1010,e.DiagnosticCategory.Error,"Asterisk_Slash_expected_1010","'*/' expected."),An_element_access_expression_should_take_an_argument:t(1011,e.DiagnosticCategory.Error,"An_element_access_expression_should_take_an_argument_1011","An element access expression should take an argument."),Unexpected_token:t(1012,e.DiagnosticCategory.Error,"Unexpected_token_1012","Unexpected token."),A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma:t(1013,e.DiagnosticCategory.Error,"A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013","A rest parameter or binding pattern may not have a trailing comma."),A_rest_parameter_must_be_last_in_a_parameter_list:t(1014,e.DiagnosticCategory.Error,"A_rest_parameter_must_be_last_in_a_parameter_list_1014","A rest parameter must be last in a parameter list."),Parameter_cannot_have_question_mark_and_initializer:t(1015,e.DiagnosticCategory.Error,"Parameter_cannot_have_question_mark_and_initializer_1015","Parameter cannot have question mark and initializer."),A_required_parameter_cannot_follow_an_optional_parameter:t(1016,e.DiagnosticCategory.Error,"A_required_parameter_cannot_follow_an_optional_parameter_1016","A required parameter cannot follow an optional parameter."),An_index_signature_cannot_have_a_rest_parameter:t(1017,e.DiagnosticCategory.Error,"An_index_signature_cannot_have_a_rest_parameter_1017","An index signature cannot have a rest parameter."),An_index_signature_parameter_cannot_have_an_accessibility_modifier:t(1018,e.DiagnosticCategory.Error,"An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018","An index signature parameter cannot have an accessibility modifier."),An_index_signature_parameter_cannot_have_a_question_mark:t(1019,e.DiagnosticCategory.Error,"An_index_signature_parameter_cannot_have_a_question_mark_1019","An index signature parameter cannot have a question mark."),An_index_signature_parameter_cannot_have_an_initializer:t(1020,e.DiagnosticCategory.Error,"An_index_signature_parameter_cannot_have_an_initializer_1020","An index signature parameter cannot have an initializer."),An_index_signature_must_have_a_type_annotation:t(1021,e.DiagnosticCategory.Error,"An_index_signature_must_have_a_type_annotation_1021","An index signature must have a type annotation."),An_index_signature_parameter_must_have_a_type_annotation:t(1022,e.DiagnosticCategory.Error,"An_index_signature_parameter_must_have_a_type_annotation_1022","An index signature parameter must have a type annotation."),readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature:t(1024,e.DiagnosticCategory.Error,"readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024","'readonly' modifier can only appear on a property declaration or index signature."),An_index_signature_cannot_have_a_trailing_comma:t(1025,e.DiagnosticCategory.Error,"An_index_signature_cannot_have_a_trailing_comma_1025","An index signature cannot have a trailing comma."),Accessibility_modifier_already_seen:t(1028,e.DiagnosticCategory.Error,"Accessibility_modifier_already_seen_1028","Accessibility modifier already seen."),_0_modifier_must_precede_1_modifier:t(1029,e.DiagnosticCategory.Error,"_0_modifier_must_precede_1_modifier_1029","'{0}' modifier must precede '{1}' modifier."),_0_modifier_already_seen:t(1030,e.DiagnosticCategory.Error,"_0_modifier_already_seen_1030","'{0}' modifier already seen."),_0_modifier_cannot_appear_on_class_elements_of_this_kind:t(1031,e.DiagnosticCategory.Error,"_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031","'{0}' modifier cannot appear on class elements of this kind."),super_must_be_followed_by_an_argument_list_or_member_access:t(1034,e.DiagnosticCategory.Error,"super_must_be_followed_by_an_argument_list_or_member_access_1034","'super' must be followed by an argument list or member access."),Only_ambient_modules_can_use_quoted_names:t(1035,e.DiagnosticCategory.Error,"Only_ambient_modules_can_use_quoted_names_1035","Only ambient modules can use quoted names."),Statements_are_not_allowed_in_ambient_contexts:t(1036,e.DiagnosticCategory.Error,"Statements_are_not_allowed_in_ambient_contexts_1036","Statements are not allowed in ambient contexts."),A_declare_modifier_cannot_be_used_in_an_already_ambient_context:t(1038,e.DiagnosticCategory.Error,"A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038","A 'declare' modifier cannot be used in an already ambient context."),Initializers_are_not_allowed_in_ambient_contexts:t(1039,e.DiagnosticCategory.Error,"Initializers_are_not_allowed_in_ambient_contexts_1039","Initializers are not allowed in ambient contexts."),_0_modifier_cannot_be_used_in_an_ambient_context:t(1040,e.DiagnosticCategory.Error,"_0_modifier_cannot_be_used_in_an_ambient_context_1040","'{0}' modifier cannot be used in an ambient context."),_0_modifier_cannot_be_used_here:t(1042,e.DiagnosticCategory.Error,"_0_modifier_cannot_be_used_here_1042","'{0}' modifier cannot be used here."),_0_modifier_cannot_appear_on_a_module_or_namespace_element:t(1044,e.DiagnosticCategory.Error,"_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044","'{0}' modifier cannot appear on a module or namespace element."),Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier:t(1046,e.DiagnosticCategory.Error,"Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046","Top-level declarations in .d.ts files must start with either a 'declare' or 'export' modifier."),A_rest_parameter_cannot_be_optional:t(1047,e.DiagnosticCategory.Error,"A_rest_parameter_cannot_be_optional_1047","A rest parameter cannot be optional."),A_rest_parameter_cannot_have_an_initializer:t(1048,e.DiagnosticCategory.Error,"A_rest_parameter_cannot_have_an_initializer_1048","A rest parameter cannot have an initializer."),A_set_accessor_must_have_exactly_one_parameter:t(1049,e.DiagnosticCategory.Error,"A_set_accessor_must_have_exactly_one_parameter_1049","A 'set' accessor must have exactly one parameter."),A_set_accessor_cannot_have_an_optional_parameter:t(1051,e.DiagnosticCategory.Error,"A_set_accessor_cannot_have_an_optional_parameter_1051","A 'set' accessor cannot have an optional parameter."),A_set_accessor_parameter_cannot_have_an_initializer:t(1052,e.DiagnosticCategory.Error,"A_set_accessor_parameter_cannot_have_an_initializer_1052","A 'set' accessor parameter cannot have an initializer."),A_set_accessor_cannot_have_rest_parameter:t(1053,e.DiagnosticCategory.Error,"A_set_accessor_cannot_have_rest_parameter_1053","A 'set' accessor cannot have rest parameter."),A_get_accessor_cannot_have_parameters:t(1054,e.DiagnosticCategory.Error,"A_get_accessor_cannot_have_parameters_1054","A 'get' accessor cannot have parameters."),Type_0_is_not_a_valid_async_function_return_type_in_ES5_SlashES3_because_it_does_not_refer_to_a_Promise_compatible_constructor_value:t(1055,e.DiagnosticCategory.Error,"Type_0_is_not_a_valid_async_function_return_type_in_ES5_SlashES3_because_it_does_not_refer_to_a_Prom_1055","Type '{0}' is not a valid async function return type in ES5/ES3 because it does not refer to a Promise-compatible constructor value."),Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher:t(1056,e.DiagnosticCategory.Error,"Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056","Accessors are only available when targeting ECMAScript 5 and higher."),The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member:t(1058,e.DiagnosticCategory.Error,"The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058","The return type of an async function must either be a valid promise or must not contain a callable 'then' member."),A_promise_must_have_a_then_method:t(1059,e.DiagnosticCategory.Error,"A_promise_must_have_a_then_method_1059","A promise must have a 'then' method."),The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback:t(1060,e.DiagnosticCategory.Error,"The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060","The first parameter of the 'then' method of a promise must be a callback."),Enum_member_must_have_initializer:t(1061,e.DiagnosticCategory.Error,"Enum_member_must_have_initializer_1061","Enum member must have initializer."),Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method:t(1062,e.DiagnosticCategory.Error,"Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062","Type is referenced directly or indirectly in the fulfillment callback of its own 'then' method."),An_export_assignment_cannot_be_used_in_a_namespace:t(1063,e.DiagnosticCategory.Error,"An_export_assignment_cannot_be_used_in_a_namespace_1063","An export assignment cannot be used in a namespace."),The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_write_Promise_0:t(1064,e.DiagnosticCategory.Error,"The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064","The return type of an async function or method must be the global Promise<T> type. Did you mean to write 'Promise<{0}>'?"),In_ambient_enum_declarations_member_initializer_must_be_constant_expression:t(1066,e.DiagnosticCategory.Error,"In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066","In ambient enum declarations member initializer must be constant expression."),Unexpected_token_A_constructor_method_accessor_or_property_was_expected:t(1068,e.DiagnosticCategory.Error,"Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068","Unexpected token. A constructor, method, accessor, or property was expected."),Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces:t(1069,e.DiagnosticCategory.Error,"Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069","Unexpected token. A type parameter name was expected without curly braces."),_0_modifier_cannot_appear_on_a_type_member:t(1070,e.DiagnosticCategory.Error,"_0_modifier_cannot_appear_on_a_type_member_1070","'{0}' modifier cannot appear on a type member."),_0_modifier_cannot_appear_on_an_index_signature:t(1071,e.DiagnosticCategory.Error,"_0_modifier_cannot_appear_on_an_index_signature_1071","'{0}' modifier cannot appear on an index signature."),A_0_modifier_cannot_be_used_with_an_import_declaration:t(1079,e.DiagnosticCategory.Error,"A_0_modifier_cannot_be_used_with_an_import_declaration_1079","A '{0}' modifier cannot be used with an import declaration."),Invalid_reference_directive_syntax:t(1084,e.DiagnosticCategory.Error,"Invalid_reference_directive_syntax_1084","Invalid 'reference' directive syntax."),Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher_Use_the_syntax_0:t(1085,e.DiagnosticCategory.Error,"Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher_Use_the_syntax_0_1085","Octal literals are not available when targeting ECMAScript 5 and higher. Use the syntax '{0}'."),_0_modifier_cannot_appear_on_a_constructor_declaration:t(1089,e.DiagnosticCategory.Error,"_0_modifier_cannot_appear_on_a_constructor_declaration_1089","'{0}' modifier cannot appear on a constructor declaration."),_0_modifier_cannot_appear_on_a_parameter:t(1090,e.DiagnosticCategory.Error,"_0_modifier_cannot_appear_on_a_parameter_1090","'{0}' modifier cannot appear on a parameter."),Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement:t(1091,e.DiagnosticCategory.Error,"Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091","Only a single variable declaration is allowed in a 'for...in' statement."),Type_parameters_cannot_appear_on_a_constructor_declaration:t(1092,e.DiagnosticCategory.Error,"Type_parameters_cannot_appear_on_a_constructor_declaration_1092","Type parameters cannot appear on a constructor declaration."),Type_annotation_cannot_appear_on_a_constructor_declaration:t(1093,e.DiagnosticCategory.Error,"Type_annotation_cannot_appear_on_a_constructor_declaration_1093","Type annotation cannot appear on a constructor declaration."),An_accessor_cannot_have_type_parameters:t(1094,e.DiagnosticCategory.Error,"An_accessor_cannot_have_type_parameters_1094","An accessor cannot have type parameters."),A_set_accessor_cannot_have_a_return_type_annotation:t(1095,e.DiagnosticCategory.Error,"A_set_accessor_cannot_have_a_return_type_annotation_1095","A 'set' accessor cannot have a return type annotation."),An_index_signature_must_have_exactly_one_parameter:t(1096,e.DiagnosticCategory.Error,"An_index_signature_must_have_exactly_one_parameter_1096","An index signature must have exactly one parameter."),_0_list_cannot_be_empty:t(1097,e.DiagnosticCategory.Error,"_0_list_cannot_be_empty_1097","'{0}' list cannot be empty."),Type_parameter_list_cannot_be_empty:t(1098,e.DiagnosticCategory.Error,"Type_parameter_list_cannot_be_empty_1098","Type parameter list cannot be empty."),Type_argument_list_cannot_be_empty:t(1099,e.DiagnosticCategory.Error,"Type_argument_list_cannot_be_empty_1099","Type argument list cannot be empty."),Invalid_use_of_0_in_strict_mode:t(1100,e.DiagnosticCategory.Error,"Invalid_use_of_0_in_strict_mode_1100","Invalid use of '{0}' in strict mode."),with_statements_are_not_allowed_in_strict_mode:t(1101,e.DiagnosticCategory.Error,"with_statements_are_not_allowed_in_strict_mode_1101","'with' statements are not allowed in strict mode."),delete_cannot_be_called_on_an_identifier_in_strict_mode:t(1102,e.DiagnosticCategory.Error,"delete_cannot_be_called_on_an_identifier_in_strict_mode_1102","'delete' cannot be called on an identifier in strict mode."),for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules:t(1103,e.DiagnosticCategory.Error,"for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103","'for await' loops are only allowed within async functions and at the top levels of modules."),A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement:t(1104,e.DiagnosticCategory.Error,"A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104","A 'continue' statement can only be used within an enclosing iteration statement."),A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement:t(1105,e.DiagnosticCategory.Error,"A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105","A 'break' statement can only be used within an enclosing iteration or switch statement."),The_left_hand_side_of_a_for_of_statement_may_not_be_async:t(1106,e.DiagnosticCategory.Error,"The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106","The left-hand side of a 'for...of' statement may not be 'async'."),Jump_target_cannot_cross_function_boundary:t(1107,e.DiagnosticCategory.Error,"Jump_target_cannot_cross_function_boundary_1107","Jump target cannot cross function boundary."),A_return_statement_can_only_be_used_within_a_function_body:t(1108,e.DiagnosticCategory.Error,"A_return_statement_can_only_be_used_within_a_function_body_1108","A 'return' statement can only be used within a function body."),Expression_expected:t(1109,e.DiagnosticCategory.Error,"Expression_expected_1109","Expression expected."),Type_expected:t(1110,e.DiagnosticCategory.Error,"Type_expected_1110","Type expected."),A_default_clause_cannot_appear_more_than_once_in_a_switch_statement:t(1113,e.DiagnosticCategory.Error,"A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113","A 'default' clause cannot appear more than once in a 'switch' statement."),Duplicate_label_0:t(1114,e.DiagnosticCategory.Error,"Duplicate_label_0_1114","Duplicate label '{0}'."),A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement:t(1115,e.DiagnosticCategory.Error,"A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115","A 'continue' statement can only jump to a label of an enclosing iteration statement."),A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement:t(1116,e.DiagnosticCategory.Error,"A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116","A 'break' statement can only jump to a label of an enclosing statement."),An_object_literal_cannot_have_multiple_properties_with_the_same_name:t(1117,e.DiagnosticCategory.Error,"An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117","An object literal cannot have multiple properties with the same name."),An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name:t(1118,e.DiagnosticCategory.Error,"An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name_1118","An object literal cannot have multiple get/set accessors with the same name."),An_object_literal_cannot_have_property_and_accessor_with_the_same_name:t(1119,e.DiagnosticCategory.Error,"An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119","An object literal cannot have property and accessor with the same name."),An_export_assignment_cannot_have_modifiers:t(1120,e.DiagnosticCategory.Error,"An_export_assignment_cannot_have_modifiers_1120","An export assignment cannot have modifiers."),Octal_literals_are_not_allowed_in_strict_mode:t(1121,e.DiagnosticCategory.Error,"Octal_literals_are_not_allowed_in_strict_mode_1121","Octal literals are not allowed in strict mode."),Variable_declaration_list_cannot_be_empty:t(1123,e.DiagnosticCategory.Error,"Variable_declaration_list_cannot_be_empty_1123","Variable declaration list cannot be empty."),Digit_expected:t(1124,e.DiagnosticCategory.Error,"Digit_expected_1124","Digit expected."),Hexadecimal_digit_expected:t(1125,e.DiagnosticCategory.Error,"Hexadecimal_digit_expected_1125","Hexadecimal digit expected."),Unexpected_end_of_text:t(1126,e.DiagnosticCategory.Error,"Unexpected_end_of_text_1126","Unexpected end of text."),Invalid_character:t(1127,e.DiagnosticCategory.Error,"Invalid_character_1127","Invalid character."),Declaration_or_statement_expected:t(1128,e.DiagnosticCategory.Error,"Declaration_or_statement_expected_1128","Declaration or statement expected."),Statement_expected:t(1129,e.DiagnosticCategory.Error,"Statement_expected_1129","Statement expected."),case_or_default_expected:t(1130,e.DiagnosticCategory.Error,"case_or_default_expected_1130","'case' or 'default' expected."),Property_or_signature_expected:t(1131,e.DiagnosticCategory.Error,"Property_or_signature_expected_1131","Property or signature expected."),Enum_member_expected:t(1132,e.DiagnosticCategory.Error,"Enum_member_expected_1132","Enum member expected."),Variable_declaration_expected:t(1134,e.DiagnosticCategory.Error,"Variable_declaration_expected_1134","Variable declaration expected."),Argument_expression_expected:t(1135,e.DiagnosticCategory.Error,"Argument_expression_expected_1135","Argument expression expected."),Property_assignment_expected:t(1136,e.DiagnosticCategory.Error,"Property_assignment_expected_1136","Property assignment expected."),Expression_or_comma_expected:t(1137,e.DiagnosticCategory.Error,"Expression_or_comma_expected_1137","Expression or comma expected."),Parameter_declaration_expected:t(1138,e.DiagnosticCategory.Error,"Parameter_declaration_expected_1138","Parameter declaration expected."),Type_parameter_declaration_expected:t(1139,e.DiagnosticCategory.Error,"Type_parameter_declaration_expected_1139","Type parameter declaration expected."),Type_argument_expected:t(1140,e.DiagnosticCategory.Error,"Type_argument_expected_1140","Type argument expected."),String_literal_expected:t(1141,e.DiagnosticCategory.Error,"String_literal_expected_1141","String literal expected."),Line_break_not_permitted_here:t(1142,e.DiagnosticCategory.Error,"Line_break_not_permitted_here_1142","Line break not permitted here."),or_expected:t(1144,e.DiagnosticCategory.Error,"or_expected_1144","'{' or ';' expected."),or_JSX_element_expected:t(1145,e.DiagnosticCategory.Error,"or_JSX_element_expected_1145","'{' or JSX element expected."),Declaration_expected:t(1146,e.DiagnosticCategory.Error,"Declaration_expected_1146","Declaration expected."),Import_declarations_in_a_namespace_cannot_reference_a_module:t(1147,e.DiagnosticCategory.Error,"Import_declarations_in_a_namespace_cannot_reference_a_module_1147","Import declarations in a namespace cannot reference a module."),Cannot_use_imports_exports_or_module_augmentations_when_module_is_none:t(1148,e.DiagnosticCategory.Error,"Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148","Cannot use imports, exports, or module augmentations when '--module' is 'none'."),File_name_0_differs_from_already_included_file_name_1_only_in_casing:t(1149,e.DiagnosticCategory.Error,"File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149","File name '{0}' differs from already included file name '{1}' only in casing."),const_declarations_must_be_initialized:t(1155,e.DiagnosticCategory.Error,"const_declarations_must_be_initialized_1155","'const' declarations must be initialized."),const_declarations_can_only_be_declared_inside_a_block:t(1156,e.DiagnosticCategory.Error,"const_declarations_can_only_be_declared_inside_a_block_1156","'const' declarations can only be declared inside a block."),let_declarations_can_only_be_declared_inside_a_block:t(1157,e.DiagnosticCategory.Error,"let_declarations_can_only_be_declared_inside_a_block_1157","'let' declarations can only be declared inside a block."),Unterminated_template_literal:t(1160,e.DiagnosticCategory.Error,"Unterminated_template_literal_1160","Unterminated template literal."),Unterminated_regular_expression_literal:t(1161,e.DiagnosticCategory.Error,"Unterminated_regular_expression_literal_1161","Unterminated regular expression literal."),An_object_member_cannot_be_declared_optional:t(1162,e.DiagnosticCategory.Error,"An_object_member_cannot_be_declared_optional_1162","An object member cannot be declared optional."),A_yield_expression_is_only_allowed_in_a_generator_body:t(1163,e.DiagnosticCategory.Error,"A_yield_expression_is_only_allowed_in_a_generator_body_1163","A 'yield' expression is only allowed in a generator body."),Computed_property_names_are_not_allowed_in_enums:t(1164,e.DiagnosticCategory.Error,"Computed_property_names_are_not_allowed_in_enums_1164","Computed property names are not allowed in enums."),A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type:t(1165,e.DiagnosticCategory.Error,"A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165","A computed property name in an ambient context must refer to an expression whose type is a literal type or a 'unique symbol' type."),A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_symbol_type:t(1166,e.DiagnosticCategory.Error,"A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166","A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type."),A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type:t(1168,e.DiagnosticCategory.Error,"A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168","A computed property name in a method overload must refer to an expression whose type is a literal type or a 'unique symbol' type."),A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type:t(1169,e.DiagnosticCategory.Error,"A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_1169","A computed property name in an interface must refer to an expression whose type is a literal type or a 'unique symbol' type."),A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type:t(1170,e.DiagnosticCategory.Error,"A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170","A computed property name in a type literal must refer to an expression whose type is a literal type or a 'unique symbol' type."),A_comma_expression_is_not_allowed_in_a_computed_property_name:t(1171,e.DiagnosticCategory.Error,"A_comma_expression_is_not_allowed_in_a_computed_property_name_1171","A comma expression is not allowed in a computed property name."),extends_clause_already_seen:t(1172,e.DiagnosticCategory.Error,"extends_clause_already_seen_1172","'extends' clause already seen."),extends_clause_must_precede_implements_clause:t(1173,e.DiagnosticCategory.Error,"extends_clause_must_precede_implements_clause_1173","'extends' clause must precede 'implements' clause."),Classes_can_only_extend_a_single_class:t(1174,e.DiagnosticCategory.Error,"Classes_can_only_extend_a_single_class_1174","Classes can only extend a single class."),implements_clause_already_seen:t(1175,e.DiagnosticCategory.Error,"implements_clause_already_seen_1175","'implements' clause already seen."),Interface_declaration_cannot_have_implements_clause:t(1176,e.DiagnosticCategory.Error,"Interface_declaration_cannot_have_implements_clause_1176","Interface declaration cannot have 'implements' clause."),Binary_digit_expected:t(1177,e.DiagnosticCategory.Error,"Binary_digit_expected_1177","Binary digit expected."),Octal_digit_expected:t(1178,e.DiagnosticCategory.Error,"Octal_digit_expected_1178","Octal digit expected."),Unexpected_token_expected:t(1179,e.DiagnosticCategory.Error,"Unexpected_token_expected_1179","Unexpected token. '{' expected."),Property_destructuring_pattern_expected:t(1180,e.DiagnosticCategory.Error,"Property_destructuring_pattern_expected_1180","Property destructuring pattern expected."),Array_element_destructuring_pattern_expected:t(1181,e.DiagnosticCategory.Error,"Array_element_destructuring_pattern_expected_1181","Array element destructuring pattern expected."),A_destructuring_declaration_must_have_an_initializer:t(1182,e.DiagnosticCategory.Error,"A_destructuring_declaration_must_have_an_initializer_1182","A destructuring declaration must have an initializer."),An_implementation_cannot_be_declared_in_ambient_contexts:t(1183,e.DiagnosticCategory.Error,"An_implementation_cannot_be_declared_in_ambient_contexts_1183","An implementation cannot be declared in ambient contexts."),Modifiers_cannot_appear_here:t(1184,e.DiagnosticCategory.Error,"Modifiers_cannot_appear_here_1184","Modifiers cannot appear here."),Merge_conflict_marker_encountered:t(1185,e.DiagnosticCategory.Error,"Merge_conflict_marker_encountered_1185","Merge conflict marker encountered."),A_rest_element_cannot_have_an_initializer:t(1186,e.DiagnosticCategory.Error,"A_rest_element_cannot_have_an_initializer_1186","A rest element cannot have an initializer."),A_parameter_property_may_not_be_declared_using_a_binding_pattern:t(1187,e.DiagnosticCategory.Error,"A_parameter_property_may_not_be_declared_using_a_binding_pattern_1187","A parameter property may not be declared using a binding pattern."),Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement:t(1188,e.DiagnosticCategory.Error,"Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188","Only a single variable declaration is allowed in a 'for...of' statement."),The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer:t(1189,e.DiagnosticCategory.Error,"The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189","The variable declaration of a 'for...in' statement cannot have an initializer."),The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer:t(1190,e.DiagnosticCategory.Error,"The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190","The variable declaration of a 'for...of' statement cannot have an initializer."),An_import_declaration_cannot_have_modifiers:t(1191,e.DiagnosticCategory.Error,"An_import_declaration_cannot_have_modifiers_1191","An import declaration cannot have modifiers."),Module_0_has_no_default_export:t(1192,e.DiagnosticCategory.Error,"Module_0_has_no_default_export_1192","Module '{0}' has no default export."),An_export_declaration_cannot_have_modifiers:t(1193,e.DiagnosticCategory.Error,"An_export_declaration_cannot_have_modifiers_1193","An export declaration cannot have modifiers."),Export_declarations_are_not_permitted_in_a_namespace:t(1194,e.DiagnosticCategory.Error,"Export_declarations_are_not_permitted_in_a_namespace_1194","Export declarations are not permitted in a namespace."),export_Asterisk_does_not_re_export_a_default:t(1195,e.DiagnosticCategory.Error,"export_Asterisk_does_not_re_export_a_default_1195","'export *' does not re-export a default."),Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified:t(1196,e.DiagnosticCategory.Error,"Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified_1196","Catch clause variable type annotation must be 'any' or 'unknown' if specified."),Catch_clause_variable_cannot_have_an_initializer:t(1197,e.DiagnosticCategory.Error,"Catch_clause_variable_cannot_have_an_initializer_1197","Catch clause variable cannot have an initializer."),An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive:t(1198,e.DiagnosticCategory.Error,"An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198","An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive."),Unterminated_Unicode_escape_sequence:t(1199,e.DiagnosticCategory.Error,"Unterminated_Unicode_escape_sequence_1199","Unterminated Unicode escape sequence."),Line_terminator_not_permitted_before_arrow:t(1200,e.DiagnosticCategory.Error,"Line_terminator_not_permitted_before_arrow_1200","Line terminator not permitted before arrow."),Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_ns_from_mod_import_a_from_mod_import_d_from_mod_or_another_module_format_instead:t(1202,e.DiagnosticCategory.Error,"Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202","Import assignment cannot be used when targeting ECMAScript modules. Consider using 'import * as ns from \"mod\"', 'import {a} from \"mod\"', 'import d from \"mod\"', or another module format instead."),Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or_another_module_format_instead:t(1203,e.DiagnosticCategory.Error,"Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or__1203","Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead."),Re_exporting_a_type_when_the_isolatedModules_flag_is_provided_requires_using_export_type:t(1205,e.DiagnosticCategory.Error,"Re_exporting_a_type_when_the_isolatedModules_flag_is_provided_requires_using_export_type_1205","Re-exporting a type when the '--isolatedModules' flag is provided requires using 'export type'."),Decorators_are_not_valid_here:t(1206,e.DiagnosticCategory.Error,"Decorators_are_not_valid_here_1206","Decorators are not valid here."),Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name:t(1207,e.DiagnosticCategory.Error,"Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207","Decorators cannot be applied to multiple get/set accessors of the same name."),_0_cannot_be_compiled_under_isolatedModules_because_it_is_considered_a_global_script_file_Add_an_import_export_or_an_empty_export_statement_to_make_it_a_module:t(1208,e.DiagnosticCategory.Error,"_0_cannot_be_compiled_under_isolatedModules_because_it_is_considered_a_global_script_file_Add_an_imp_1208","'{0}' cannot be compiled under '--isolatedModules' because it is considered a global script file. Add an import, export, or an empty 'export {}' statement to make it a module."),Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0:t(1209,e.DiagnosticCategory.Error,"Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209","Invalid optional chain from new expression. Did you mean to call '{0}()'?"),Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of_0_For_more_information_see_https_Colon_Slash_Slashdeveloper_mozilla_org_Slashen_US_Slashdocs_SlashWeb_SlashJavaScript_SlashReference_SlashStrict_mode:t(1210,e.DiagnosticCategory.Error,"Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of__1210","Code contained in a class is evaluated in JavaScript's strict mode which does not allow this use of '{0}'. For more information, see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode."),A_class_declaration_without_the_default_modifier_must_have_a_name:t(1211,e.DiagnosticCategory.Error,"A_class_declaration_without_the_default_modifier_must_have_a_name_1211","A class declaration without the 'default' modifier must have a name."),Identifier_expected_0_is_a_reserved_word_in_strict_mode:t(1212,e.DiagnosticCategory.Error,"Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212","Identifier expected. '{0}' is a reserved word in strict mode."),Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_strict_mode:t(1213,e.DiagnosticCategory.Error,"Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213","Identifier expected. '{0}' is a reserved word in strict mode. Class definitions are automatically in strict mode."),Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode:t(1214,e.DiagnosticCategory.Error,"Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode_1214","Identifier expected. '{0}' is a reserved word in strict mode. Modules are automatically in strict mode."),Invalid_use_of_0_Modules_are_automatically_in_strict_mode:t(1215,e.DiagnosticCategory.Error,"Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215","Invalid use of '{0}'. Modules are automatically in strict mode."),Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules:t(1216,e.DiagnosticCategory.Error,"Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216","Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules."),Export_assignment_is_not_supported_when_module_flag_is_system:t(1218,e.DiagnosticCategory.Error,"Export_assignment_is_not_supported_when_module_flag_is_system_1218","Export assignment is not supported when '--module' flag is 'system'."),Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_the_experimentalDecorators_option_in_your_tsconfig_or_jsconfig_to_remove_this_warning:t(1219,e.DiagnosticCategory.Error,"Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_t_1219","Experimental support for decorators is a feature that is subject to change in a future release. Set the 'experimentalDecorators' option in your 'tsconfig' or 'jsconfig' to remove this warning."),Generators_are_not_allowed_in_an_ambient_context:t(1221,e.DiagnosticCategory.Error,"Generators_are_not_allowed_in_an_ambient_context_1221","Generators are not allowed in an ambient context."),An_overload_signature_cannot_be_declared_as_a_generator:t(1222,e.DiagnosticCategory.Error,"An_overload_signature_cannot_be_declared_as_a_generator_1222","An overload signature cannot be declared as a generator."),_0_tag_already_specified:t(1223,e.DiagnosticCategory.Error,"_0_tag_already_specified_1223","'{0}' tag already specified."),Signature_0_must_be_a_type_predicate:t(1224,e.DiagnosticCategory.Error,"Signature_0_must_be_a_type_predicate_1224","Signature '{0}' must be a type predicate."),Cannot_find_parameter_0:t(1225,e.DiagnosticCategory.Error,"Cannot_find_parameter_0_1225","Cannot find parameter '{0}'."),Type_predicate_0_is_not_assignable_to_1:t(1226,e.DiagnosticCategory.Error,"Type_predicate_0_is_not_assignable_to_1_1226","Type predicate '{0}' is not assignable to '{1}'."),Parameter_0_is_not_in_the_same_position_as_parameter_1:t(1227,e.DiagnosticCategory.Error,"Parameter_0_is_not_in_the_same_position_as_parameter_1_1227","Parameter '{0}' is not in the same position as parameter '{1}'."),A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods:t(1228,e.DiagnosticCategory.Error,"A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods_1228","A type predicate is only allowed in return type position for functions and methods."),A_type_predicate_cannot_reference_a_rest_parameter:t(1229,e.DiagnosticCategory.Error,"A_type_predicate_cannot_reference_a_rest_parameter_1229","A type predicate cannot reference a rest parameter."),A_type_predicate_cannot_reference_element_0_in_a_binding_pattern:t(1230,e.DiagnosticCategory.Error,"A_type_predicate_cannot_reference_element_0_in_a_binding_pattern_1230","A type predicate cannot reference element '{0}' in a binding pattern."),An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration:t(1231,e.DiagnosticCategory.Error,"An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231","An export assignment must be at the top level of a file or module declaration."),An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module:t(1232,e.DiagnosticCategory.Error,"An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232","An import declaration can only be used at the top level of a namespace or module."),An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module:t(1233,e.DiagnosticCategory.Error,"An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233","An export declaration can only be used at the top level of a namespace or module."),An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file:t(1234,e.DiagnosticCategory.Error,"An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234","An ambient module declaration is only allowed at the top level in a file."),A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module:t(1235,e.DiagnosticCategory.Error,"A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235","A namespace declaration is only allowed at the top level of a namespace or module."),The_return_type_of_a_property_decorator_function_must_be_either_void_or_any:t(1236,e.DiagnosticCategory.Error,"The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236","The return type of a property decorator function must be either 'void' or 'any'."),The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any:t(1237,e.DiagnosticCategory.Error,"The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237","The return type of a parameter decorator function must be either 'void' or 'any'."),Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression:t(1238,e.DiagnosticCategory.Error,"Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression_1238","Unable to resolve signature of class decorator when called as an expression."),Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression:t(1239,e.DiagnosticCategory.Error,"Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239","Unable to resolve signature of parameter decorator when called as an expression."),Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression:t(1240,e.DiagnosticCategory.Error,"Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240","Unable to resolve signature of property decorator when called as an expression."),Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression:t(1241,e.DiagnosticCategory.Error,"Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241","Unable to resolve signature of method decorator when called as an expression."),abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration:t(1242,e.DiagnosticCategory.Error,"abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242","'abstract' modifier can only appear on a class, method, or property declaration."),_0_modifier_cannot_be_used_with_1_modifier:t(1243,e.DiagnosticCategory.Error,"_0_modifier_cannot_be_used_with_1_modifier_1243","'{0}' modifier cannot be used with '{1}' modifier."),Abstract_methods_can_only_appear_within_an_abstract_class:t(1244,e.DiagnosticCategory.Error,"Abstract_methods_can_only_appear_within_an_abstract_class_1244","Abstract methods can only appear within an abstract class."),Method_0_cannot_have_an_implementation_because_it_is_marked_abstract:t(1245,e.DiagnosticCategory.Error,"Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245","Method '{0}' cannot have an implementation because it is marked abstract."),An_interface_property_cannot_have_an_initializer:t(1246,e.DiagnosticCategory.Error,"An_interface_property_cannot_have_an_initializer_1246","An interface property cannot have an initializer."),A_type_literal_property_cannot_have_an_initializer:t(1247,e.DiagnosticCategory.Error,"A_type_literal_property_cannot_have_an_initializer_1247","A type literal property cannot have an initializer."),A_class_member_cannot_have_the_0_keyword:t(1248,e.DiagnosticCategory.Error,"A_class_member_cannot_have_the_0_keyword_1248","A class member cannot have the '{0}' keyword."),A_decorator_can_only_decorate_a_method_implementation_not_an_overload:t(1249,e.DiagnosticCategory.Error,"A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249","A decorator can only decorate a method implementation, not an overload."),Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5:t(1250,e.DiagnosticCategory.Error,"Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_1250","Function declarations are not allowed inside blocks in strict mode when targeting 'ES3' or 'ES5'."),Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_definitions_are_automatically_in_strict_mode:t(1251,e.DiagnosticCategory.Error,"Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_d_1251","Function declarations are not allowed inside blocks in strict mode when targeting 'ES3' or 'ES5'. Class definitions are automatically in strict mode."),Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_are_automatically_in_strict_mode:t(1252,e.DiagnosticCategory.Error,"Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_1252","Function declarations are not allowed inside blocks in strict mode when targeting 'ES3' or 'ES5'. Modules are automatically in strict mode."),A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_reference:t(1254,e.DiagnosticCategory.Error,"A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_refere_1254","A 'const' initializer in an ambient context must be a string or numeric literal or literal enum reference."),A_definite_assignment_assertion_is_not_permitted_in_this_context:t(1255,e.DiagnosticCategory.Error,"A_definite_assignment_assertion_is_not_permitted_in_this_context_1255","A definite assignment assertion '!' is not permitted in this context."),A_required_element_cannot_follow_an_optional_element:t(1257,e.DiagnosticCategory.Error,"A_required_element_cannot_follow_an_optional_element_1257","A required element cannot follow an optional element."),A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration:t(1258,e.DiagnosticCategory.Error,"A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258","A default export must be at the top level of a file or module declaration."),Module_0_can_only_be_default_imported_using_the_1_flag:t(1259,e.DiagnosticCategory.Error,"Module_0_can_only_be_default_imported_using_the_1_flag_1259","Module '{0}' can only be default-imported using the '{1}' flag"),Keywords_cannot_contain_escape_characters:t(1260,e.DiagnosticCategory.Error,"Keywords_cannot_contain_escape_characters_1260","Keywords cannot contain escape characters."),Already_included_file_name_0_differs_from_file_name_1_only_in_casing:t(1261,e.DiagnosticCategory.Error,"Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261","Already included file name '{0}' differs from file name '{1}' only in casing."),Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module:t(1262,e.DiagnosticCategory.Error,"Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262","Identifier expected. '{0}' is a reserved word at the top-level of a module."),Declarations_with_initializers_cannot_also_have_definite_assignment_assertions:t(1263,e.DiagnosticCategory.Error,"Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263","Declarations with initializers cannot also have definite assignment assertions."),Declarations_with_definite_assignment_assertions_must_also_have_type_annotations:t(1264,e.DiagnosticCategory.Error,"Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264","Declarations with definite assignment assertions must also have type annotations."),A_rest_element_cannot_follow_another_rest_element:t(1265,e.DiagnosticCategory.Error,"A_rest_element_cannot_follow_another_rest_element_1265","A rest element cannot follow another rest element."),An_optional_element_cannot_follow_a_rest_element:t(1266,e.DiagnosticCategory.Error,"An_optional_element_cannot_follow_a_rest_element_1266","An optional element cannot follow a rest element."),Property_0_cannot_have_an_initializer_because_it_is_marked_abstract:t(1267,e.DiagnosticCategory.Error,"Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267","Property '{0}' cannot have an initializer because it is marked abstract."),An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type:t(1268,e.DiagnosticCategory.Error,"An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268","An index signature parameter type must be 'string', 'number', 'symbol', or a template literal type."),Cannot_use_export_import_on_a_type_or_type_only_namespace_when_the_isolatedModules_flag_is_provided:t(1269,e.DiagnosticCategory.Error,"Cannot_use_export_import_on_a_type_or_type_only_namespace_when_the_isolatedModules_flag_is_provided_1269","Cannot use 'export import' on a type or type-only namespace when the '--isolatedModules' flag is provided."),Decorator_function_return_type_0_is_not_assignable_to_type_1:t(1270,e.DiagnosticCategory.Error,"Decorator_function_return_type_0_is_not_assignable_to_type_1_1270","Decorator function return type '{0}' is not assignable to type '{1}'."),Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any:t(1271,e.DiagnosticCategory.Error,"Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271","Decorator function return type is '{0}' but is expected to be 'void' or 'any'."),A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_when_isolatedModules_and_emitDecoratorMetadata_are_enabled:t(1272,e.DiagnosticCategory.Error,"A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_w_1272","A type referenced in a decorated signature must be imported with 'import type' or a namespace import when 'isolatedModules' and 'emitDecoratorMetadata' are enabled."),_0_modifier_cannot_appear_on_a_type_parameter:t(1273,e.DiagnosticCategory.Error,"_0_modifier_cannot_appear_on_a_type_parameter_1273","'{0}' modifier cannot appear on a type parameter"),_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias:t(1274,e.DiagnosticCategory.Error,"_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274","'{0}' modifier can only appear on a type parameter of a class, interface or type alias"),accessor_modifier_can_only_appear_on_a_property_declaration:t(1275,e.DiagnosticCategory.Error,"accessor_modifier_can_only_appear_on_a_property_declaration_1275","'accessor' modifier can only appear on a property declaration."),An_accessor_property_cannot_be_declared_optional:t(1276,e.DiagnosticCategory.Error,"An_accessor_property_cannot_be_declared_optional_1276","An 'accessor' property cannot be declared optional."),with_statements_are_not_allowed_in_an_async_function_block:t(1300,e.DiagnosticCategory.Error,"with_statements_are_not_allowed_in_an_async_function_block_1300","'with' statements are not allowed in an async function block."),await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules:t(1308,e.DiagnosticCategory.Error,"await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308","'await' expressions are only allowed within async functions and at the top levels of modules."),The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level:t(1309,e.DiagnosticCategory.Error,"The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level_1309","The current file is a CommonJS module and cannot use 'await' at the top level."),Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_part_of_a_destructuring_pattern:t(1312,e.DiagnosticCategory.Error,"Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_1312","Did you mean to use a ':'? An '=' can only follow a property name when the containing object literal is part of a destructuring pattern."),The_body_of_an_if_statement_cannot_be_the_empty_statement:t(1313,e.DiagnosticCategory.Error,"The_body_of_an_if_statement_cannot_be_the_empty_statement_1313","The body of an 'if' statement cannot be the empty statement."),Global_module_exports_may_only_appear_in_module_files:t(1314,e.DiagnosticCategory.Error,"Global_module_exports_may_only_appear_in_module_files_1314","Global module exports may only appear in module files."),Global_module_exports_may_only_appear_in_declaration_files:t(1315,e.DiagnosticCategory.Error,"Global_module_exports_may_only_appear_in_declaration_files_1315","Global module exports may only appear in declaration files."),Global_module_exports_may_only_appear_at_top_level:t(1316,e.DiagnosticCategory.Error,"Global_module_exports_may_only_appear_at_top_level_1316","Global module exports may only appear at top level."),A_parameter_property_cannot_be_declared_using_a_rest_parameter:t(1317,e.DiagnosticCategory.Error,"A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317","A parameter property cannot be declared using a rest parameter."),An_abstract_accessor_cannot_have_an_implementation:t(1318,e.DiagnosticCategory.Error,"An_abstract_accessor_cannot_have_an_implementation_1318","An abstract accessor cannot have an implementation."),A_default_export_can_only_be_used_in_an_ECMAScript_style_module:t(1319,e.DiagnosticCategory.Error,"A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319","A default export can only be used in an ECMAScript-style module."),Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member:t(1320,e.DiagnosticCategory.Error,"Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320","Type of 'await' operand must either be a valid promise or must not contain a callable 'then' member."),Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member:t(1321,e.DiagnosticCategory.Error,"Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_cal_1321","Type of 'yield' operand in an async generator must either be a valid promise or must not contain a callable 'then' member."),Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member:t(1322,e.DiagnosticCategory.Error,"Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322","Type of iterated elements of a 'yield*' operand must either be a valid promise or must not contain a callable 'then' member."),Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd_system_umd_node16_or_nodenext:t(1323,e.DiagnosticCategory.Error,"Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323","Dynamic imports are only supported when the '--module' flag is set to 'es2020', 'es2022', 'esnext', 'commonjs', 'amd', 'system', 'umd', 'node16', or 'nodenext'."),Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_or_nodenext:t(1324,e.DiagnosticCategory.Error,"Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_or_nod_1324","Dynamic imports only support a second argument when the '--module' option is set to 'esnext', 'node16', or 'nodenext'."),Argument_of_dynamic_import_cannot_be_spread_element:t(1325,e.DiagnosticCategory.Error,"Argument_of_dynamic_import_cannot_be_spread_element_1325","Argument of dynamic import cannot be spread element."),This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot_have_type_arguments:t(1326,e.DiagnosticCategory.Error,"This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot__1326","This use of 'import' is invalid. 'import()' calls can be written, but they must have parentheses and cannot have type arguments."),String_literal_with_double_quotes_expected:t(1327,e.DiagnosticCategory.Error,"String_literal_with_double_quotes_expected_1327","String literal with double quotes expected."),Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_literal:t(1328,e.DiagnosticCategory.Error,"Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328","Property value can only be string literal, numeric literal, 'true', 'false', 'null', object literal or array literal."),_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write_0:t(1329,e.DiagnosticCategory.Error,"_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329","'{0}' accepts too few arguments to be used as a decorator here. Did you mean to call it first and write '@{0}()'?"),A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly:t(1330,e.DiagnosticCategory.Error,"A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly_1330","A property of an interface or type literal whose type is a 'unique symbol' type must be 'readonly'."),A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly:t(1331,e.DiagnosticCategory.Error,"A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly_1331","A property of a class whose type is a 'unique symbol' type must be both 'static' and 'readonly'."),A_variable_whose_type_is_a_unique_symbol_type_must_be_const:t(1332,e.DiagnosticCategory.Error,"A_variable_whose_type_is_a_unique_symbol_type_must_be_const_1332","A variable whose type is a 'unique symbol' type must be 'const'."),unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name:t(1333,e.DiagnosticCategory.Error,"unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333","'unique symbol' types may not be used on a variable declaration with a binding name."),unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement:t(1334,e.DiagnosticCategory.Error,"unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334","'unique symbol' types are only allowed on variables in a variable statement."),unique_symbol_types_are_not_allowed_here:t(1335,e.DiagnosticCategory.Error,"unique_symbol_types_are_not_allowed_here_1335","'unique symbol' types are not allowed here."),An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_object_type_instead:t(1337,e.DiagnosticCategory.Error,"An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337","An index signature parameter type cannot be a literal type or generic type. Consider using a mapped object type instead."),infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type:t(1338,e.DiagnosticCategory.Error,"infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338","'infer' declarations are only permitted in the 'extends' clause of a conditional type."),Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here:t(1339,e.DiagnosticCategory.Error,"Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here_1339","Module '{0}' does not refer to a value, but is used as a value here."),Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0:t(1340,e.DiagnosticCategory.Error,"Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0_1340","Module '{0}' does not refer to a type, but is used as a type here. Did you mean 'typeof import('{0}')'?"),Class_constructor_may_not_be_an_accessor:t(1341,e.DiagnosticCategory.Error,"Class_constructor_may_not_be_an_accessor_1341","Class constructor may not be an accessor."),Type_arguments_cannot_be_used_here:t(1342,e.DiagnosticCategory.Error,"Type_arguments_cannot_be_used_here_1342","Type arguments cannot be used here."),The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system_node16_or_nodenext:t(1343,e.DiagnosticCategory.Error,"The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system__1343","The 'import.meta' meta-property is only allowed when the '--module' option is 'es2020', 'es2022', 'esnext', 'system', 'node16', or 'nodenext'."),A_label_is_not_allowed_here:t(1344,e.DiagnosticCategory.Error,"A_label_is_not_allowed_here_1344","'A label is not allowed here."),An_expression_of_type_void_cannot_be_tested_for_truthiness:t(1345,e.DiagnosticCategory.Error,"An_expression_of_type_void_cannot_be_tested_for_truthiness_1345","An expression of type 'void' cannot be tested for truthiness."),This_parameter_is_not_allowed_with_use_strict_directive:t(1346,e.DiagnosticCategory.Error,"This_parameter_is_not_allowed_with_use_strict_directive_1346","This parameter is not allowed with 'use strict' directive."),use_strict_directive_cannot_be_used_with_non_simple_parameter_list:t(1347,e.DiagnosticCategory.Error,"use_strict_directive_cannot_be_used_with_non_simple_parameter_list_1347","'use strict' directive cannot be used with non-simple parameter list."),Non_simple_parameter_declared_here:t(1348,e.DiagnosticCategory.Error,"Non_simple_parameter_declared_here_1348","Non-simple parameter declared here."),use_strict_directive_used_here:t(1349,e.DiagnosticCategory.Error,"use_strict_directive_used_here_1349","'use strict' directive used here."),Print_the_final_configuration_instead_of_building:t(1350,e.DiagnosticCategory.Message,"Print_the_final_configuration_instead_of_building_1350","Print the final configuration instead of building."),An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal:t(1351,e.DiagnosticCategory.Error,"An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351","An identifier or keyword cannot immediately follow a numeric literal."),A_bigint_literal_cannot_use_exponential_notation:t(1352,e.DiagnosticCategory.Error,"A_bigint_literal_cannot_use_exponential_notation_1352","A bigint literal cannot use exponential notation."),A_bigint_literal_must_be_an_integer:t(1353,e.DiagnosticCategory.Error,"A_bigint_literal_must_be_an_integer_1353","A bigint literal must be an integer."),readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types:t(1354,e.DiagnosticCategory.Error,"readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354","'readonly' type modifier is only permitted on array and tuple literal types."),A_const_assertions_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array_or_object_literals:t(1355,e.DiagnosticCategory.Error,"A_const_assertions_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array__1355","A 'const' assertions can only be applied to references to enum members, or string, number, boolean, array, or object literals."),Did_you_mean_to_mark_this_function_as_async:t(1356,e.DiagnosticCategory.Error,"Did_you_mean_to_mark_this_function_as_async_1356","Did you mean to mark this function as 'async'?"),An_enum_member_name_must_be_followed_by_a_or:t(1357,e.DiagnosticCategory.Error,"An_enum_member_name_must_be_followed_by_a_or_1357","An enum member name must be followed by a ',', '=', or '}'."),Tagged_template_expressions_are_not_permitted_in_an_optional_chain:t(1358,e.DiagnosticCategory.Error,"Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358","Tagged template expressions are not permitted in an optional chain."),Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here:t(1359,e.DiagnosticCategory.Error,"Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here_1359","Identifier expected. '{0}' is a reserved word that cannot be used here."),Type_0_does_not_satisfy_the_expected_type_1:t(1360,e.DiagnosticCategory.Error,"Type_0_does_not_satisfy_the_expected_type_1_1360","Type '{0}' does not satisfy the expected type '{1}'."),_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type:t(1361,e.DiagnosticCategory.Error,"_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361","'{0}' cannot be used as a value because it was imported using 'import type'."),_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type:t(1362,e.DiagnosticCategory.Error,"_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362","'{0}' cannot be used as a value because it was exported using 'export type'."),A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both:t(1363,e.DiagnosticCategory.Error,"A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both_1363","A type-only import can specify a default import or named bindings, but not both."),Convert_to_type_only_export:t(1364,e.DiagnosticCategory.Message,"Convert_to_type_only_export_1364","Convert to type-only export"),Convert_all_re_exported_types_to_type_only_exports:t(1365,e.DiagnosticCategory.Message,"Convert_all_re_exported_types_to_type_only_exports_1365","Convert all re-exported types to type-only exports"),Split_into_two_separate_import_declarations:t(1366,e.DiagnosticCategory.Message,"Split_into_two_separate_import_declarations_1366","Split into two separate import declarations"),Split_all_invalid_type_only_imports:t(1367,e.DiagnosticCategory.Message,"Split_all_invalid_type_only_imports_1367","Split all invalid type-only imports"),Class_constructor_may_not_be_a_generator:t(1368,e.DiagnosticCategory.Error,"Class_constructor_may_not_be_a_generator_1368","Class constructor may not be a generator."),Did_you_mean_0:t(1369,e.DiagnosticCategory.Message,"Did_you_mean_0_1369","Did you mean '{0}'?"),This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set_to_error:t(1371,e.DiagnosticCategory.Error,"This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set__1371","This import is never used as a value and must use 'import type' because 'importsNotUsedAsValues' is set to 'error'."),Convert_to_type_only_import:t(1373,e.DiagnosticCategory.Message,"Convert_to_type_only_import_1373","Convert to type-only import"),Convert_all_imports_not_used_as_a_value_to_type_only_imports:t(1374,e.DiagnosticCategory.Message,"Convert_all_imports_not_used_as_a_value_to_type_only_imports_1374","Convert all imports not used as a value to type-only imports"),await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_has_no_imports_or_exports_Consider_adding_an_empty_export_to_make_this_file_a_module:t(1375,e.DiagnosticCategory.Error,"await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375","'await' expressions are only allowed at the top level of a file when that file is a module, but this file has no imports or exports. Consider adding an empty 'export {}' to make this file a module."),_0_was_imported_here:t(1376,e.DiagnosticCategory.Message,"_0_was_imported_here_1376","'{0}' was imported here."),_0_was_exported_here:t(1377,e.DiagnosticCategory.Message,"_0_was_exported_here_1377","'{0}' was exported here."),Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_or_nodenext_and_the_target_option_is_set_to_es2017_or_higher:t(1378,e.DiagnosticCategory.Error,"Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378","Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', or 'nodenext', and the 'target' option is set to 'es2017' or higher."),An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type:t(1379,e.DiagnosticCategory.Error,"An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379","An import alias cannot reference a declaration that was exported using 'export type'."),An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type:t(1380,e.DiagnosticCategory.Error,"An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380","An import alias cannot reference a declaration that was imported using 'import type'."),Unexpected_token_Did_you_mean_or_rbrace:t(1381,e.DiagnosticCategory.Error,"Unexpected_token_Did_you_mean_or_rbrace_1381","Unexpected token. Did you mean `{'}'}` or `&rbrace;`?"),Unexpected_token_Did_you_mean_or_gt:t(1382,e.DiagnosticCategory.Error,"Unexpected_token_Did_you_mean_or_gt_1382","Unexpected token. Did you mean `{'>'}` or `&gt;`?"),Only_named_exports_may_use_export_type:t(1383,e.DiagnosticCategory.Error,"Only_named_exports_may_use_export_type_1383","Only named exports may use 'export type'."),Function_type_notation_must_be_parenthesized_when_used_in_a_union_type:t(1385,e.DiagnosticCategory.Error,"Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385","Function type notation must be parenthesized when used in a union type."),Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type:t(1386,e.DiagnosticCategory.Error,"Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type_1386","Constructor type notation must be parenthesized when used in a union type."),Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type:t(1387,e.DiagnosticCategory.Error,"Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387","Function type notation must be parenthesized when used in an intersection type."),Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type:t(1388,e.DiagnosticCategory.Error,"Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1388","Constructor type notation must be parenthesized when used in an intersection type."),_0_is_not_allowed_as_a_variable_declaration_name:t(1389,e.DiagnosticCategory.Error,"_0_is_not_allowed_as_a_variable_declaration_name_1389","'{0}' is not allowed as a variable declaration name."),_0_is_not_allowed_as_a_parameter_name:t(1390,e.DiagnosticCategory.Error,"_0_is_not_allowed_as_a_parameter_name_1390","'{0}' is not allowed as a parameter name."),An_import_alias_cannot_use_import_type:t(1392,e.DiagnosticCategory.Error,"An_import_alias_cannot_use_import_type_1392","An import alias cannot use 'import type'"),Imported_via_0_from_file_1:t(1393,e.DiagnosticCategory.Message,"Imported_via_0_from_file_1_1393","Imported via {0} from file '{1}'"),Imported_via_0_from_file_1_with_packageId_2:t(1394,e.DiagnosticCategory.Message,"Imported_via_0_from_file_1_with_packageId_2_1394","Imported via {0} from file '{1}' with packageId '{2}'"),Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions:t(1395,e.DiagnosticCategory.Message,"Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395","Imported via {0} from file '{1}' to import 'importHelpers' as specified in compilerOptions"),Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions:t(1396,e.DiagnosticCategory.Message,"Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396","Imported via {0} from file '{1}' with packageId '{2}' to import 'importHelpers' as specified in compilerOptions"),Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions:t(1397,e.DiagnosticCategory.Message,"Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397","Imported via {0} from file '{1}' to import 'jsx' and 'jsxs' factory functions"),Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions:t(1398,e.DiagnosticCategory.Message,"Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398","Imported via {0} from file '{1}' with packageId '{2}' to import 'jsx' and 'jsxs' factory functions"),File_is_included_via_import_here:t(1399,e.DiagnosticCategory.Message,"File_is_included_via_import_here_1399","File is included via import here."),Referenced_via_0_from_file_1:t(1400,e.DiagnosticCategory.Message,"Referenced_via_0_from_file_1_1400","Referenced via '{0}' from file '{1}'"),File_is_included_via_reference_here:t(1401,e.DiagnosticCategory.Message,"File_is_included_via_reference_here_1401","File is included via reference here."),Type_library_referenced_via_0_from_file_1:t(1402,e.DiagnosticCategory.Message,"Type_library_referenced_via_0_from_file_1_1402","Type library referenced via '{0}' from file '{1}'"),Type_library_referenced_via_0_from_file_1_with_packageId_2:t(1403,e.DiagnosticCategory.Message,"Type_library_referenced_via_0_from_file_1_with_packageId_2_1403","Type library referenced via '{0}' from file '{1}' with packageId '{2}'"),File_is_included_via_type_library_reference_here:t(1404,e.DiagnosticCategory.Message,"File_is_included_via_type_library_reference_here_1404","File is included via type library reference here."),Library_referenced_via_0_from_file_1:t(1405,e.DiagnosticCategory.Message,"Library_referenced_via_0_from_file_1_1405","Library referenced via '{0}' from file '{1}'"),File_is_included_via_library_reference_here:t(1406,e.DiagnosticCategory.Message,"File_is_included_via_library_reference_here_1406","File is included via library reference here."),Matched_by_include_pattern_0_in_1:t(1407,e.DiagnosticCategory.Message,"Matched_by_include_pattern_0_in_1_1407","Matched by include pattern '{0}' in '{1}'"),File_is_matched_by_include_pattern_specified_here:t(1408,e.DiagnosticCategory.Message,"File_is_matched_by_include_pattern_specified_here_1408","File is matched by include pattern specified here."),Part_of_files_list_in_tsconfig_json:t(1409,e.DiagnosticCategory.Message,"Part_of_files_list_in_tsconfig_json_1409","Part of 'files' list in tsconfig.json"),File_is_matched_by_files_list_specified_here:t(1410,e.DiagnosticCategory.Message,"File_is_matched_by_files_list_specified_here_1410","File is matched by 'files' list specified here."),Output_from_referenced_project_0_included_because_1_specified:t(1411,e.DiagnosticCategory.Message,"Output_from_referenced_project_0_included_because_1_specified_1411","Output from referenced project '{0}' included because '{1}' specified"),Output_from_referenced_project_0_included_because_module_is_specified_as_none:t(1412,e.DiagnosticCategory.Message,"Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412","Output from referenced project '{0}' included because '--module' is specified as 'none'"),File_is_output_from_referenced_project_specified_here:t(1413,e.DiagnosticCategory.Message,"File_is_output_from_referenced_project_specified_here_1413","File is output from referenced project specified here."),Source_from_referenced_project_0_included_because_1_specified:t(1414,e.DiagnosticCategory.Message,"Source_from_referenced_project_0_included_because_1_specified_1414","Source from referenced project '{0}' included because '{1}' specified"),Source_from_referenced_project_0_included_because_module_is_specified_as_none:t(1415,e.DiagnosticCategory.Message,"Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415","Source from referenced project '{0}' included because '--module' is specified as 'none'"),File_is_source_from_referenced_project_specified_here:t(1416,e.DiagnosticCategory.Message,"File_is_source_from_referenced_project_specified_here_1416","File is source from referenced project specified here."),Entry_point_of_type_library_0_specified_in_compilerOptions:t(1417,e.DiagnosticCategory.Message,"Entry_point_of_type_library_0_specified_in_compilerOptions_1417","Entry point of type library '{0}' specified in compilerOptions"),Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1:t(1418,e.DiagnosticCategory.Message,"Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418","Entry point of type library '{0}' specified in compilerOptions with packageId '{1}'"),File_is_entry_point_of_type_library_specified_here:t(1419,e.DiagnosticCategory.Message,"File_is_entry_point_of_type_library_specified_here_1419","File is entry point of type library specified here."),Entry_point_for_implicit_type_library_0:t(1420,e.DiagnosticCategory.Message,"Entry_point_for_implicit_type_library_0_1420","Entry point for implicit type library '{0}'"),Entry_point_for_implicit_type_library_0_with_packageId_1:t(1421,e.DiagnosticCategory.Message,"Entry_point_for_implicit_type_library_0_with_packageId_1_1421","Entry point for implicit type library '{0}' with packageId '{1}'"),Library_0_specified_in_compilerOptions:t(1422,e.DiagnosticCategory.Message,"Library_0_specified_in_compilerOptions_1422","Library '{0}' specified in compilerOptions"),File_is_library_specified_here:t(1423,e.DiagnosticCategory.Message,"File_is_library_specified_here_1423","File is library specified here."),Default_library:t(1424,e.DiagnosticCategory.Message,"Default_library_1424","Default library"),Default_library_for_target_0:t(1425,e.DiagnosticCategory.Message,"Default_library_for_target_0_1425","Default library for target '{0}'"),File_is_default_library_for_target_specified_here:t(1426,e.DiagnosticCategory.Message,"File_is_default_library_for_target_specified_here_1426","File is default library for target specified here."),Root_file_specified_for_compilation:t(1427,e.DiagnosticCategory.Message,"Root_file_specified_for_compilation_1427","Root file specified for compilation"),File_is_output_of_project_reference_source_0:t(1428,e.DiagnosticCategory.Message,"File_is_output_of_project_reference_source_0_1428","File is output of project reference source '{0}'"),File_redirects_to_file_0:t(1429,e.DiagnosticCategory.Message,"File_redirects_to_file_0_1429","File redirects to file '{0}'"),The_file_is_in_the_program_because_Colon:t(1430,e.DiagnosticCategory.Message,"The_file_is_in_the_program_because_Colon_1430","The file is in the program because:"),for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_has_no_imports_or_exports_Consider_adding_an_empty_export_to_make_this_file_a_module:t(1431,e.DiagnosticCategory.Error,"for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431","'for await' loops are only allowed at the top level of a file when that file is a module, but this file has no imports or exports. Consider adding an empty 'export {}' to make this file a module."),Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_or_nodenext_and_the_target_option_is_set_to_es2017_or_higher:t(1432,e.DiagnosticCategory.Error,"Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432","Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', or 'nodenext', and the 'target' option is set to 'es2017' or higher."),Decorators_may_not_be_applied_to_this_parameters:t(1433,e.DiagnosticCategory.Error,"Decorators_may_not_be_applied_to_this_parameters_1433","Decorators may not be applied to 'this' parameters."),Unexpected_keyword_or_identifier:t(1434,e.DiagnosticCategory.Error,"Unexpected_keyword_or_identifier_1434","Unexpected keyword or identifier."),Unknown_keyword_or_identifier_Did_you_mean_0:t(1435,e.DiagnosticCategory.Error,"Unknown_keyword_or_identifier_Did_you_mean_0_1435","Unknown keyword or identifier. Did you mean '{0}'?"),Decorators_must_precede_the_name_and_all_keywords_of_property_declarations:t(1436,e.DiagnosticCategory.Error,"Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436","Decorators must precede the name and all keywords of property declarations."),Namespace_must_be_given_a_name:t(1437,e.DiagnosticCategory.Error,"Namespace_must_be_given_a_name_1437","Namespace must be given a name."),Interface_must_be_given_a_name:t(1438,e.DiagnosticCategory.Error,"Interface_must_be_given_a_name_1438","Interface must be given a name."),Type_alias_must_be_given_a_name:t(1439,e.DiagnosticCategory.Error,"Type_alias_must_be_given_a_name_1439","Type alias must be given a name."),Variable_declaration_not_allowed_at_this_location:t(1440,e.DiagnosticCategory.Error,"Variable_declaration_not_allowed_at_this_location_1440","Variable declaration not allowed at this location."),Cannot_start_a_function_call_in_a_type_annotation:t(1441,e.DiagnosticCategory.Error,"Cannot_start_a_function_call_in_a_type_annotation_1441","Cannot start a function call in a type annotation."),Expected_for_property_initializer:t(1442,e.DiagnosticCategory.Error,"Expected_for_property_initializer_1442","Expected '=' for property initializer."),Module_declaration_names_may_only_use_or_quoted_strings:t(1443,e.DiagnosticCategory.Error,"Module_declaration_names_may_only_use_or_quoted_strings_1443","Module declaration names may only use ' or \" quoted strings."),_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_preserveValueImports_and_isolatedModules_are_both_enabled:t(1444,e.DiagnosticCategory.Error,"_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_preserveValueImports_and_isolatedMod_1444","'{0}' is a type and must be imported using a type-only import when 'preserveValueImports' and 'isolatedModules' are both enabled."),_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_preserveValueImports_and_isolatedModules_are_both_enabled:t(1446,e.DiagnosticCategory.Error,"_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_preserveVa_1446","'{0}' resolves to a type-only declaration and must be imported using a type-only import when 'preserveValueImports' and 'isolatedModules' are both enabled."),_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_isolatedModules_is_enabled:t(1448,e.DiagnosticCategory.Error,"_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_isol_1448","'{0}' resolves to a type-only declaration and must be re-exported using a type-only re-export when 'isolatedModules' is enabled."),Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed:t(1449,e.DiagnosticCategory.Message,"Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed_1449","Preserve unused imported values in the JavaScript output that would otherwise be removed."),Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_assertion_as_arguments:t(1450,e.DiagnosticCategory.Message,"Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_assertion_as_arguments_1450","Dynamic imports can only accept a module specifier and an optional assertion as arguments"),Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member_declaration_property_access_or_on_the_left_hand_side_of_an_in_expression:t(1451,e.DiagnosticCategory.Error,"Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451","Private identifiers are only allowed in class bodies and may only be used as part of a class member declaration, property access, or on the left-hand-side of an 'in' expression"),resolution_mode_assertions_are_only_supported_when_moduleResolution_is_node16_or_nodenext:t(1452,e.DiagnosticCategory.Error,"resolution_mode_assertions_are_only_supported_when_moduleResolution_is_node16_or_nodenext_1452","'resolution-mode' assertions are only supported when `moduleResolution` is `node16` or `nodenext`."),resolution_mode_should_be_either_require_or_import:t(1453,e.DiagnosticCategory.Error,"resolution_mode_should_be_either_require_or_import_1453","`resolution-mode` should be either `require` or `import`."),resolution_mode_can_only_be_set_for_type_only_imports:t(1454,e.DiagnosticCategory.Error,"resolution_mode_can_only_be_set_for_type_only_imports_1454","`resolution-mode` can only be set for type-only imports."),resolution_mode_is_the_only_valid_key_for_type_import_assertions:t(1455,e.DiagnosticCategory.Error,"resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455","`resolution-mode` is the only valid key for type import assertions."),Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require:t(1456,e.DiagnosticCategory.Error,"Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456","Type import assertions should have exactly one key - `resolution-mode` - with value `import` or `require`."),Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk:t(1457,e.DiagnosticCategory.Message,"Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457","Matched by default include pattern '**/*'"),File_is_ECMAScript_module_because_0_has_field_type_with_value_module:t(1458,e.DiagnosticCategory.Message,"File_is_ECMAScript_module_because_0_has_field_type_with_value_module_1458",'File is ECMAScript module because \'{0}\' has field "type" with value "module"'),File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module:t(1459,e.DiagnosticCategory.Message,"File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459",'File is CommonJS module because \'{0}\' has field "type" whose value is not "module"'),File_is_CommonJS_module_because_0_does_not_have_field_type:t(1460,e.DiagnosticCategory.Message,"File_is_CommonJS_module_because_0_does_not_have_field_type_1460","File is CommonJS module because '{0}' does not have field \"type\""),File_is_CommonJS_module_because_package_json_was_not_found:t(1461,e.DiagnosticCategory.Message,"File_is_CommonJS_module_because_package_json_was_not_found_1461","File is CommonJS module because 'package.json' was not found"),The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output:t(1470,e.DiagnosticCategory.Error,"The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output_1470","The 'import.meta' meta-property is not allowed in files which will build into CommonJS output."),Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_cannot_be_imported_with_require_Use_an_ECMAScript_import_instead:t(1471,e.DiagnosticCategory.Error,"Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_c_1471","Module '{0}' cannot be imported using this construct. The specifier only resolves to an ES module, which cannot be imported with 'require'. Use an ECMAScript import instead."),catch_or_finally_expected:t(1472,e.DiagnosticCategory.Error,"catch_or_finally_expected_1472","'catch' or 'finally' expected."),An_import_declaration_can_only_be_used_at_the_top_level_of_a_module:t(1473,e.DiagnosticCategory.Error,"An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473","An import declaration can only be used at the top level of a module."),An_export_declaration_can_only_be_used_at_the_top_level_of_a_module:t(1474,e.DiagnosticCategory.Error,"An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474","An export declaration can only be used at the top level of a module."),Control_what_method_is_used_to_detect_module_format_JS_files:t(1475,e.DiagnosticCategory.Message,"Control_what_method_is_used_to_detect_module_format_JS_files_1475","Control what method is used to detect module-format JS files."),auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_with_module_Colon_node16_as_modules:t(1476,e.DiagnosticCategory.Message,"auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476",'"auto": Treat files with imports, exports, import.meta, jsx (with jsx: react-jsx), or esm format (with module: node16+) as modules.'),An_instantiation_expression_cannot_be_followed_by_a_property_access:t(1477,e.DiagnosticCategory.Error,"An_instantiation_expression_cannot_be_followed_by_a_property_access_1477","An instantiation expression cannot be followed by a property access."),Identifier_or_string_literal_expected:t(1478,e.DiagnosticCategory.Error,"Identifier_or_string_literal_expected_1478","Identifier or string literal expected."),The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_referenced_file_is_an_ECMAScript_module_and_cannot_be_imported_with_require_Consider_writing_a_dynamic_import_0_call_instead:t(1479,e.DiagnosticCategory.Error,"The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_reference_1479","The current file is a CommonJS module whose imports will produce 'require' calls; however, the referenced file is an ECMAScript module and cannot be imported with 'require'. Consider writing a dynamic 'import(\"{0}\")' call instead."),To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_package_json_file_with_type_Colon_module:t(1480,e.DiagnosticCategory.Message,"To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480",'To convert this file to an ECMAScript module, change its file extension to \'{0}\' or create a local package.json file with `{ "type": "module" }`.'),To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Colon_module_to_1:t(1481,e.DiagnosticCategory.Message,"To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481","To convert this file to an ECMAScript module, change its file extension to '{0}', or add the field `\"type\": \"module\"` to '{1}'."),To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0:t(1482,e.DiagnosticCategory.Message,"To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0_1482",'To convert this file to an ECMAScript module, add the field `"type": "module"` to \'{0}\'.'),To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module:t(1483,e.DiagnosticCategory.Message,"To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483",'To convert this file to an ECMAScript module, create a local package.json file with `{ "type": "module" }`.'),The_types_of_0_are_incompatible_between_these_types:t(2200,e.DiagnosticCategory.Error,"The_types_of_0_are_incompatible_between_these_types_2200","The types of '{0}' are incompatible between these types."),The_types_returned_by_0_are_incompatible_between_these_types:t(2201,e.DiagnosticCategory.Error,"The_types_returned_by_0_are_incompatible_between_these_types_2201","The types returned by '{0}' are incompatible between these types."),Call_signature_return_types_0_and_1_are_incompatible:t(2202,e.DiagnosticCategory.Error,"Call_signature_return_types_0_and_1_are_incompatible_2202","Call signature return types '{0}' and '{1}' are incompatible.",void 0,!0),Construct_signature_return_types_0_and_1_are_incompatible:t(2203,e.DiagnosticCategory.Error,"Construct_signature_return_types_0_and_1_are_incompatible_2203","Construct signature return types '{0}' and '{1}' are incompatible.",void 0,!0),Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1:t(2204,e.DiagnosticCategory.Error,"Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204","Call signatures with no arguments have incompatible return types '{0}' and '{1}'.",void 0,!0),Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1:t(2205,e.DiagnosticCategory.Error,"Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205","Construct signatures with no arguments have incompatible return types '{0}' and '{1}'.",void 0,!0),The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement:t(2206,e.DiagnosticCategory.Error,"The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206","The 'type' modifier cannot be used on a named import when 'import type' is used on its import statement."),The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement:t(2207,e.DiagnosticCategory.Error,"The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207","The 'type' modifier cannot be used on a named export when 'export type' is used on its export statement."),This_type_parameter_might_need_an_extends_0_constraint:t(2208,e.DiagnosticCategory.Error,"This_type_parameter_might_need_an_extends_0_constraint_2208","This type parameter might need an `extends {0}` constraint."),The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_rootDir_compiler_option_to_disambiguate:t(2209,e.DiagnosticCategory.Error,"The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209","The project root is ambiguous, but is required to resolve export map entry '{0}' in file '{1}'. Supply the `rootDir` compiler option to disambiguate."),The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_rootDir_compiler_option_to_disambiguate:t(2210,e.DiagnosticCategory.Error,"The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210","The project root is ambiguous, but is required to resolve import map entry '{0}' in file '{1}'. Supply the `rootDir` compiler option to disambiguate."),Add_extends_constraint:t(2211,e.DiagnosticCategory.Message,"Add_extends_constraint_2211","Add `extends` constraint."),Add_extends_constraint_to_all_type_parameters:t(2212,e.DiagnosticCategory.Message,"Add_extends_constraint_to_all_type_parameters_2212","Add `extends` constraint to all type parameters"),Duplicate_identifier_0:t(2300,e.DiagnosticCategory.Error,"Duplicate_identifier_0_2300","Duplicate identifier '{0}'."),Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor:t(2301,e.DiagnosticCategory.Error,"Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301","Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor."),Static_members_cannot_reference_class_type_parameters:t(2302,e.DiagnosticCategory.Error,"Static_members_cannot_reference_class_type_parameters_2302","Static members cannot reference class type parameters."),Circular_definition_of_import_alias_0:t(2303,e.DiagnosticCategory.Error,"Circular_definition_of_import_alias_0_2303","Circular definition of import alias '{0}'."),Cannot_find_name_0:t(2304,e.DiagnosticCategory.Error,"Cannot_find_name_0_2304","Cannot find name '{0}'."),Module_0_has_no_exported_member_1:t(2305,e.DiagnosticCategory.Error,"Module_0_has_no_exported_member_1_2305","Module '{0}' has no exported member '{1}'."),File_0_is_not_a_module:t(2306,e.DiagnosticCategory.Error,"File_0_is_not_a_module_2306","File '{0}' is not a module."),Cannot_find_module_0_or_its_corresponding_type_declarations:t(2307,e.DiagnosticCategory.Error,"Cannot_find_module_0_or_its_corresponding_type_declarations_2307","Cannot find module '{0}' or its corresponding type declarations."),Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambiguity:t(2308,e.DiagnosticCategory.Error,"Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambig_2308","Module {0} has already exported a member named '{1}'. Consider explicitly re-exporting to resolve the ambiguity."),An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements:t(2309,e.DiagnosticCategory.Error,"An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309","An export assignment cannot be used in a module with other exported elements."),Type_0_recursively_references_itself_as_a_base_type:t(2310,e.DiagnosticCategory.Error,"Type_0_recursively_references_itself_as_a_base_type_2310","Type '{0}' recursively references itself as a base type."),Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function:t(2311,e.DiagnosticCategory.Error,"Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311","Cannot find name '{0}'. Did you mean to write this in an async function?"),An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_members:t(2312,e.DiagnosticCategory.Error,"An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312","An interface can only extend an object type or intersection of object types with statically known members."),Type_parameter_0_has_a_circular_constraint:t(2313,e.DiagnosticCategory.Error,"Type_parameter_0_has_a_circular_constraint_2313","Type parameter '{0}' has a circular constraint."),Generic_type_0_requires_1_type_argument_s:t(2314,e.DiagnosticCategory.Error,"Generic_type_0_requires_1_type_argument_s_2314","Generic type '{0}' requires {1} type argument(s)."),Type_0_is_not_generic:t(2315,e.DiagnosticCategory.Error,"Type_0_is_not_generic_2315","Type '{0}' is not generic."),Global_type_0_must_be_a_class_or_interface_type:t(2316,e.DiagnosticCategory.Error,"Global_type_0_must_be_a_class_or_interface_type_2316","Global type '{0}' must be a class or interface type."),Global_type_0_must_have_1_type_parameter_s:t(2317,e.DiagnosticCategory.Error,"Global_type_0_must_have_1_type_parameter_s_2317","Global type '{0}' must have {1} type parameter(s)."),Cannot_find_global_type_0:t(2318,e.DiagnosticCategory.Error,"Cannot_find_global_type_0_2318","Cannot find global type '{0}'."),Named_property_0_of_types_1_and_2_are_not_identical:t(2319,e.DiagnosticCategory.Error,"Named_property_0_of_types_1_and_2_are_not_identical_2319","Named property '{0}' of types '{1}' and '{2}' are not identical."),Interface_0_cannot_simultaneously_extend_types_1_and_2:t(2320,e.DiagnosticCategory.Error,"Interface_0_cannot_simultaneously_extend_types_1_and_2_2320","Interface '{0}' cannot simultaneously extend types '{1}' and '{2}'."),Excessive_stack_depth_comparing_types_0_and_1:t(2321,e.DiagnosticCategory.Error,"Excessive_stack_depth_comparing_types_0_and_1_2321","Excessive stack depth comparing types '{0}' and '{1}'."),Type_0_is_not_assignable_to_type_1:t(2322,e.DiagnosticCategory.Error,"Type_0_is_not_assignable_to_type_1_2322","Type '{0}' is not assignable to type '{1}'."),Cannot_redeclare_exported_variable_0:t(2323,e.DiagnosticCategory.Error,"Cannot_redeclare_exported_variable_0_2323","Cannot redeclare exported variable '{0}'."),Property_0_is_missing_in_type_1:t(2324,e.DiagnosticCategory.Error,"Property_0_is_missing_in_type_1_2324","Property '{0}' is missing in type '{1}'."),Property_0_is_private_in_type_1_but_not_in_type_2:t(2325,e.DiagnosticCategory.Error,"Property_0_is_private_in_type_1_but_not_in_type_2_2325","Property '{0}' is private in type '{1}' but not in type '{2}'."),Types_of_property_0_are_incompatible:t(2326,e.DiagnosticCategory.Error,"Types_of_property_0_are_incompatible_2326","Types of property '{0}' are incompatible."),Property_0_is_optional_in_type_1_but_required_in_type_2:t(2327,e.DiagnosticCategory.Error,"Property_0_is_optional_in_type_1_but_required_in_type_2_2327","Property '{0}' is optional in type '{1}' but required in type '{2}'."),Types_of_parameters_0_and_1_are_incompatible:t(2328,e.DiagnosticCategory.Error,"Types_of_parameters_0_and_1_are_incompatible_2328","Types of parameters '{0}' and '{1}' are incompatible."),Index_signature_for_type_0_is_missing_in_type_1:t(2329,e.DiagnosticCategory.Error,"Index_signature_for_type_0_is_missing_in_type_1_2329","Index signature for type '{0}' is missing in type '{1}'."),_0_and_1_index_signatures_are_incompatible:t(2330,e.DiagnosticCategory.Error,"_0_and_1_index_signatures_are_incompatible_2330","'{0}' and '{1}' index signatures are incompatible."),this_cannot_be_referenced_in_a_module_or_namespace_body:t(2331,e.DiagnosticCategory.Error,"this_cannot_be_referenced_in_a_module_or_namespace_body_2331","'this' cannot be referenced in a module or namespace body."),this_cannot_be_referenced_in_current_location:t(2332,e.DiagnosticCategory.Error,"this_cannot_be_referenced_in_current_location_2332","'this' cannot be referenced in current location."),this_cannot_be_referenced_in_constructor_arguments:t(2333,e.DiagnosticCategory.Error,"this_cannot_be_referenced_in_constructor_arguments_2333","'this' cannot be referenced in constructor arguments."),this_cannot_be_referenced_in_a_static_property_initializer:t(2334,e.DiagnosticCategory.Error,"this_cannot_be_referenced_in_a_static_property_initializer_2334","'this' cannot be referenced in a static property initializer."),super_can_only_be_referenced_in_a_derived_class:t(2335,e.DiagnosticCategory.Error,"super_can_only_be_referenced_in_a_derived_class_2335","'super' can only be referenced in a derived class."),super_cannot_be_referenced_in_constructor_arguments:t(2336,e.DiagnosticCategory.Error,"super_cannot_be_referenced_in_constructor_arguments_2336","'super' cannot be referenced in constructor arguments."),Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors:t(2337,e.DiagnosticCategory.Error,"Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337","Super calls are not permitted outside constructors or in nested functions inside constructors."),super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class:t(2338,e.DiagnosticCategory.Error,"super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_der_2338","'super' property access is permitted only in a constructor, member function, or member accessor of a derived class."),Property_0_does_not_exist_on_type_1:t(2339,e.DiagnosticCategory.Error,"Property_0_does_not_exist_on_type_1_2339","Property '{0}' does not exist on type '{1}'."),Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword:t(2340,e.DiagnosticCategory.Error,"Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340","Only public and protected methods of the base class are accessible via the 'super' keyword."),Property_0_is_private_and_only_accessible_within_class_1:t(2341,e.DiagnosticCategory.Error,"Property_0_is_private_and_only_accessible_within_class_1_2341","Property '{0}' is private and only accessible within class '{1}'."),This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_version_of_0:t(2343,e.DiagnosticCategory.Error,"This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343","This syntax requires an imported helper named '{1}' which does not exist in '{0}'. Consider upgrading your version of '{0}'."),Type_0_does_not_satisfy_the_constraint_1:t(2344,e.DiagnosticCategory.Error,"Type_0_does_not_satisfy_the_constraint_1_2344","Type '{0}' does not satisfy the constraint '{1}'."),Argument_of_type_0_is_not_assignable_to_parameter_of_type_1:t(2345,e.DiagnosticCategory.Error,"Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345","Argument of type '{0}' is not assignable to parameter of type '{1}'."),Call_target_does_not_contain_any_signatures:t(2346,e.DiagnosticCategory.Error,"Call_target_does_not_contain_any_signatures_2346","Call target does not contain any signatures."),Untyped_function_calls_may_not_accept_type_arguments:t(2347,e.DiagnosticCategory.Error,"Untyped_function_calls_may_not_accept_type_arguments_2347","Untyped function calls may not accept type arguments."),Value_of_type_0_is_not_callable_Did_you_mean_to_include_new:t(2348,e.DiagnosticCategory.Error,"Value_of_type_0_is_not_callable_Did_you_mean_to_include_new_2348","Value of type '{0}' is not callable. Did you mean to include 'new'?"),This_expression_is_not_callable:t(2349,e.DiagnosticCategory.Error,"This_expression_is_not_callable_2349","This expression is not callable."),Only_a_void_function_can_be_called_with_the_new_keyword:t(2350,e.DiagnosticCategory.Error,"Only_a_void_function_can_be_called_with_the_new_keyword_2350","Only a void function can be called with the 'new' keyword."),This_expression_is_not_constructable:t(2351,e.DiagnosticCategory.Error,"This_expression_is_not_constructable_2351","This expression is not constructable."),Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the_other_If_this_was_intentional_convert_the_expression_to_unknown_first:t(2352,e.DiagnosticCategory.Error,"Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the__2352","Conversion of type '{0}' to type '{1}' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first."),Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1:t(2353,e.DiagnosticCategory.Error,"Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353","Object literal may only specify known properties, and '{0}' does not exist in type '{1}'."),This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found:t(2354,e.DiagnosticCategory.Error,"This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354","This syntax requires an imported helper but module '{0}' cannot be found."),A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value:t(2355,e.DiagnosticCategory.Error,"A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value_2355","A function whose declared type is neither 'void' nor 'any' must return a value."),An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type:t(2356,e.DiagnosticCategory.Error,"An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356","An arithmetic operand must be of type 'any', 'number', 'bigint' or an enum type."),The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access:t(2357,e.DiagnosticCategory.Error,"The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access_2357","The operand of an increment or decrement operator must be a variable or a property access."),The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter:t(2358,e.DiagnosticCategory.Error,"The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358","The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter."),The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type:t(2359,e.DiagnosticCategory.Error,"The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_F_2359","The right-hand side of an 'instanceof' expression must be of type 'any' or of a type assignable to the 'Function' interface type."),The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type:t(2362,e.DiagnosticCategory.Error,"The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362","The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type."),The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type:t(2363,e.DiagnosticCategory.Error,"The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363","The right-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type."),The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access:t(2364,e.DiagnosticCategory.Error,"The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364","The left-hand side of an assignment expression must be a variable or a property access."),Operator_0_cannot_be_applied_to_types_1_and_2:t(2365,e.DiagnosticCategory.Error,"Operator_0_cannot_be_applied_to_types_1_and_2_2365","Operator '{0}' cannot be applied to types '{1}' and '{2}'."),Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined:t(2366,e.DiagnosticCategory.Error,"Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366","Function lacks ending return statement and return type does not include 'undefined'."),This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap:t(2367,e.DiagnosticCategory.Error,"This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367","This comparison appears to be unintentional because the types '{0}' and '{1}' have no overlap."),Type_parameter_name_cannot_be_0:t(2368,e.DiagnosticCategory.Error,"Type_parameter_name_cannot_be_0_2368","Type parameter name cannot be '{0}'."),A_parameter_property_is_only_allowed_in_a_constructor_implementation:t(2369,e.DiagnosticCategory.Error,"A_parameter_property_is_only_allowed_in_a_constructor_implementation_2369","A parameter property is only allowed in a constructor implementation."),A_rest_parameter_must_be_of_an_array_type:t(2370,e.DiagnosticCategory.Error,"A_rest_parameter_must_be_of_an_array_type_2370","A rest parameter must be of an array type."),A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation:t(2371,e.DiagnosticCategory.Error,"A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371","A parameter initializer is only allowed in a function or constructor implementation."),Parameter_0_cannot_reference_itself:t(2372,e.DiagnosticCategory.Error,"Parameter_0_cannot_reference_itself_2372","Parameter '{0}' cannot reference itself."),Parameter_0_cannot_reference_identifier_1_declared_after_it:t(2373,e.DiagnosticCategory.Error,"Parameter_0_cannot_reference_identifier_1_declared_after_it_2373","Parameter '{0}' cannot reference identifier '{1}' declared after it."),Duplicate_index_signature_for_type_0:t(2374,e.DiagnosticCategory.Error,"Duplicate_index_signature_for_type_0_2374","Duplicate index signature for type '{0}'."),Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_types_of_the_target_s_properties:t(2375,e.DiagnosticCategory.Error,"Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375","Type '{0}' is not assignable to type '{1}' with 'exactOptionalPropertyTypes: true'. Consider adding 'undefined' to the types of the target's properties."),A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_class_contains_initialized_properties_parameter_properties_or_private_identifiers:t(2376,e.DiagnosticCategory.Error,"A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376","A 'super' call must be the first statement in the constructor to refer to 'super' or 'this' when a derived class contains initialized properties, parameter properties, or private identifiers."),Constructors_for_derived_classes_must_contain_a_super_call:t(2377,e.DiagnosticCategory.Error,"Constructors_for_derived_classes_must_contain_a_super_call_2377","Constructors for derived classes must contain a 'super' call."),A_get_accessor_must_return_a_value:t(2378,e.DiagnosticCategory.Error,"A_get_accessor_must_return_a_value_2378","A 'get' accessor must return a value."),Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_types_of_the_target_s_properties:t(2379,e.DiagnosticCategory.Error,"Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379","Argument of type '{0}' is not assignable to parameter of type '{1}' with 'exactOptionalPropertyTypes: true'. Consider adding 'undefined' to the types of the target's properties."),The_return_type_of_a_get_accessor_must_be_assignable_to_its_set_accessor_type:t(2380,e.DiagnosticCategory.Error,"The_return_type_of_a_get_accessor_must_be_assignable_to_its_set_accessor_type_2380","The return type of a 'get' accessor must be assignable to its 'set' accessor type"),Overload_signatures_must_all_be_exported_or_non_exported:t(2383,e.DiagnosticCategory.Error,"Overload_signatures_must_all_be_exported_or_non_exported_2383","Overload signatures must all be exported or non-exported."),Overload_signatures_must_all_be_ambient_or_non_ambient:t(2384,e.DiagnosticCategory.Error,"Overload_signatures_must_all_be_ambient_or_non_ambient_2384","Overload signatures must all be ambient or non-ambient."),Overload_signatures_must_all_be_public_private_or_protected:t(2385,e.DiagnosticCategory.Error,"Overload_signatures_must_all_be_public_private_or_protected_2385","Overload signatures must all be public, private or protected."),Overload_signatures_must_all_be_optional_or_required:t(2386,e.DiagnosticCategory.Error,"Overload_signatures_must_all_be_optional_or_required_2386","Overload signatures must all be optional or required."),Function_overload_must_be_static:t(2387,e.DiagnosticCategory.Error,"Function_overload_must_be_static_2387","Function overload must be static."),Function_overload_must_not_be_static:t(2388,e.DiagnosticCategory.Error,"Function_overload_must_not_be_static_2388","Function overload must not be static."),Function_implementation_name_must_be_0:t(2389,e.DiagnosticCategory.Error,"Function_implementation_name_must_be_0_2389","Function implementation name must be '{0}'."),Constructor_implementation_is_missing:t(2390,e.DiagnosticCategory.Error,"Constructor_implementation_is_missing_2390","Constructor implementation is missing."),Function_implementation_is_missing_or_not_immediately_following_the_declaration:t(2391,e.DiagnosticCategory.Error,"Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391","Function implementation is missing or not immediately following the declaration."),Multiple_constructor_implementations_are_not_allowed:t(2392,e.DiagnosticCategory.Error,"Multiple_constructor_implementations_are_not_allowed_2392","Multiple constructor implementations are not allowed."),Duplicate_function_implementation:t(2393,e.DiagnosticCategory.Error,"Duplicate_function_implementation_2393","Duplicate function implementation."),This_overload_signature_is_not_compatible_with_its_implementation_signature:t(2394,e.DiagnosticCategory.Error,"This_overload_signature_is_not_compatible_with_its_implementation_signature_2394","This overload signature is not compatible with its implementation signature."),Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local:t(2395,e.DiagnosticCategory.Error,"Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395","Individual declarations in merged declaration '{0}' must be all exported or all local."),Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters:t(2396,e.DiagnosticCategory.Error,"Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396","Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters."),Declaration_name_conflicts_with_built_in_global_identifier_0:t(2397,e.DiagnosticCategory.Error,"Declaration_name_conflicts_with_built_in_global_identifier_0_2397","Declaration name conflicts with built-in global identifier '{0}'."),constructor_cannot_be_used_as_a_parameter_property_name:t(2398,e.DiagnosticCategory.Error,"constructor_cannot_be_used_as_a_parameter_property_name_2398","'constructor' cannot be used as a parameter property name."),Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference:t(2399,e.DiagnosticCategory.Error,"Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399","Duplicate identifier '_this'. Compiler uses variable declaration '_this' to capture 'this' reference."),Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference:t(2400,e.DiagnosticCategory.Error,"Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400","Expression resolves to variable declaration '_this' that compiler uses to capture 'this' reference."),A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_initialized_properties_parameter_properties_or_private_identifiers:t(2401,e.DiagnosticCategory.Error,"A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_in_2401","A 'super' call must be a root-level statement within a constructor of a derived class that contains initialized properties, parameter properties, or private identifiers."),Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference:t(2402,e.DiagnosticCategory.Error,"Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402","Expression resolves to '_super' that compiler uses to capture base class reference."),Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2:t(2403,e.DiagnosticCategory.Error,"Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403","Subsequent variable declarations must have the same type.  Variable '{0}' must be of type '{1}', but here has type '{2}'."),The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation:t(2404,e.DiagnosticCategory.Error,"The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404","The left-hand side of a 'for...in' statement cannot use a type annotation."),The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any:t(2405,e.DiagnosticCategory.Error,"The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405","The left-hand side of a 'for...in' statement must be of type 'string' or 'any'."),The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access:t(2406,e.DiagnosticCategory.Error,"The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406","The left-hand side of a 'for...in' statement must be a variable or a property access."),The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_here_has_type_0:t(2407,e.DiagnosticCategory.Error,"The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407","The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter, but here has type '{0}'."),Setters_cannot_return_a_value:t(2408,e.DiagnosticCategory.Error,"Setters_cannot_return_a_value_2408","Setters cannot return a value."),Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class:t(2409,e.DiagnosticCategory.Error,"Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409","Return type of constructor signature must be assignable to the instance type of the class."),The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any:t(2410,e.DiagnosticCategory.Error,"The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410","The 'with' statement is not supported. All symbols in a 'with' block will have type 'any'."),Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_type_of_the_target:t(2412,e.DiagnosticCategory.Error,"Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412","Type '{0}' is not assignable to type '{1}' with 'exactOptionalPropertyTypes: true'. Consider adding 'undefined' to the type of the target."),Property_0_of_type_1_is_not_assignable_to_2_index_type_3:t(2411,e.DiagnosticCategory.Error,"Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411","Property '{0}' of type '{1}' is not assignable to '{2}' index type '{3}'."),_0_index_type_1_is_not_assignable_to_2_index_type_3:t(2413,e.DiagnosticCategory.Error,"_0_index_type_1_is_not_assignable_to_2_index_type_3_2413","'{0}' index type '{1}' is not assignable to '{2}' index type '{3}'."),Class_name_cannot_be_0:t(2414,e.DiagnosticCategory.Error,"Class_name_cannot_be_0_2414","Class name cannot be '{0}'."),Class_0_incorrectly_extends_base_class_1:t(2415,e.DiagnosticCategory.Error,"Class_0_incorrectly_extends_base_class_1_2415","Class '{0}' incorrectly extends base class '{1}'."),Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2:t(2416,e.DiagnosticCategory.Error,"Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2_2416","Property '{0}' in type '{1}' is not assignable to the same property in base type '{2}'."),Class_static_side_0_incorrectly_extends_base_class_static_side_1:t(2417,e.DiagnosticCategory.Error,"Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417","Class static side '{0}' incorrectly extends base class static side '{1}'."),Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1:t(2418,e.DiagnosticCategory.Error,"Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418","Type of computed property's value is '{0}', which is not assignable to type '{1}'."),Types_of_construct_signatures_are_incompatible:t(2419,e.DiagnosticCategory.Error,"Types_of_construct_signatures_are_incompatible_2419","Types of construct signatures are incompatible."),Class_0_incorrectly_implements_interface_1:t(2420,e.DiagnosticCategory.Error,"Class_0_incorrectly_implements_interface_1_2420","Class '{0}' incorrectly implements interface '{1}'."),A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_members:t(2422,e.DiagnosticCategory.Error,"A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422","A class can only implement an object type or intersection of object types with statically known members."),Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor:t(2423,e.DiagnosticCategory.Error,"Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_access_2423","Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member accessor."),Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function:t(2425,e.DiagnosticCategory.Error,"Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_functi_2425","Class '{0}' defines instance member property '{1}', but extended class '{2}' defines it as instance member function."),Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function:t(2426,e.DiagnosticCategory.Error,"Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_functi_2426","Class '{0}' defines instance member accessor '{1}', but extended class '{2}' defines it as instance member function."),Interface_name_cannot_be_0:t(2427,e.DiagnosticCategory.Error,"Interface_name_cannot_be_0_2427","Interface name cannot be '{0}'."),All_declarations_of_0_must_have_identical_type_parameters:t(2428,e.DiagnosticCategory.Error,"All_declarations_of_0_must_have_identical_type_parameters_2428","All declarations of '{0}' must have identical type parameters."),Interface_0_incorrectly_extends_interface_1:t(2430,e.DiagnosticCategory.Error,"Interface_0_incorrectly_extends_interface_1_2430","Interface '{0}' incorrectly extends interface '{1}'."),Enum_name_cannot_be_0:t(2431,e.DiagnosticCategory.Error,"Enum_name_cannot_be_0_2431","Enum name cannot be '{0}'."),In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enum_element:t(2432,e.DiagnosticCategory.Error,"In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432","In an enum with multiple declarations, only one declaration can omit an initializer for its first enum element."),A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged:t(2433,e.DiagnosticCategory.Error,"A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433","A namespace declaration cannot be in a different file from a class or function with which it is merged."),A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged:t(2434,e.DiagnosticCategory.Error,"A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434","A namespace declaration cannot be located prior to a class or function with which it is merged."),Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces:t(2435,e.DiagnosticCategory.Error,"Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435","Ambient modules cannot be nested in other modules or namespaces."),Ambient_module_declaration_cannot_specify_relative_module_name:t(2436,e.DiagnosticCategory.Error,"Ambient_module_declaration_cannot_specify_relative_module_name_2436","Ambient module declaration cannot specify relative module name."),Module_0_is_hidden_by_a_local_declaration_with_the_same_name:t(2437,e.DiagnosticCategory.Error,"Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437","Module '{0}' is hidden by a local declaration with the same name."),Import_name_cannot_be_0:t(2438,e.DiagnosticCategory.Error,"Import_name_cannot_be_0_2438","Import name cannot be '{0}'."),Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relative_module_name:t(2439,e.DiagnosticCategory.Error,"Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439","Import or export declaration in an ambient module declaration cannot reference module through relative module name."),Import_declaration_conflicts_with_local_declaration_of_0:t(2440,e.DiagnosticCategory.Error,"Import_declaration_conflicts_with_local_declaration_of_0_2440","Import declaration conflicts with local declaration of '{0}'."),Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module:t(2441,e.DiagnosticCategory.Error,"Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441","Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of a module."),Types_have_separate_declarations_of_a_private_property_0:t(2442,e.DiagnosticCategory.Error,"Types_have_separate_declarations_of_a_private_property_0_2442","Types have separate declarations of a private property '{0}'."),Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2:t(2443,e.DiagnosticCategory.Error,"Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443","Property '{0}' is protected but type '{1}' is not a class derived from '{2}'."),Property_0_is_protected_in_type_1_but_public_in_type_2:t(2444,e.DiagnosticCategory.Error,"Property_0_is_protected_in_type_1_but_public_in_type_2_2444","Property '{0}' is protected in type '{1}' but public in type '{2}'."),Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses:t(2445,e.DiagnosticCategory.Error,"Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445","Property '{0}' is protected and only accessible within class '{1}' and its subclasses."),Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_class_2:t(2446,e.DiagnosticCategory.Error,"Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446","Property '{0}' is protected and only accessible through an instance of class '{1}'. This is an instance of class '{2}'."),The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead:t(2447,e.DiagnosticCategory.Error,"The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447","The '{0}' operator is not allowed for boolean types. Consider using '{1}' instead."),Block_scoped_variable_0_used_before_its_declaration:t(2448,e.DiagnosticCategory.Error,"Block_scoped_variable_0_used_before_its_declaration_2448","Block-scoped variable '{0}' used before its declaration."),Class_0_used_before_its_declaration:t(2449,e.DiagnosticCategory.Error,"Class_0_used_before_its_declaration_2449","Class '{0}' used before its declaration."),Enum_0_used_before_its_declaration:t(2450,e.DiagnosticCategory.Error,"Enum_0_used_before_its_declaration_2450","Enum '{0}' used before its declaration."),Cannot_redeclare_block_scoped_variable_0:t(2451,e.DiagnosticCategory.Error,"Cannot_redeclare_block_scoped_variable_0_2451","Cannot redeclare block-scoped variable '{0}'."),An_enum_member_cannot_have_a_numeric_name:t(2452,e.DiagnosticCategory.Error,"An_enum_member_cannot_have_a_numeric_name_2452","An enum member cannot have a numeric name."),Variable_0_is_used_before_being_assigned:t(2454,e.DiagnosticCategory.Error,"Variable_0_is_used_before_being_assigned_2454","Variable '{0}' is used before being assigned."),Type_alias_0_circularly_references_itself:t(2456,e.DiagnosticCategory.Error,"Type_alias_0_circularly_references_itself_2456","Type alias '{0}' circularly references itself."),Type_alias_name_cannot_be_0:t(2457,e.DiagnosticCategory.Error,"Type_alias_name_cannot_be_0_2457","Type alias name cannot be '{0}'."),An_AMD_module_cannot_have_multiple_name_assignments:t(2458,e.DiagnosticCategory.Error,"An_AMD_module_cannot_have_multiple_name_assignments_2458","An AMD module cannot have multiple name assignments."),Module_0_declares_1_locally_but_it_is_not_exported:t(2459,e.DiagnosticCategory.Error,"Module_0_declares_1_locally_but_it_is_not_exported_2459","Module '{0}' declares '{1}' locally, but it is not exported."),Module_0_declares_1_locally_but_it_is_exported_as_2:t(2460,e.DiagnosticCategory.Error,"Module_0_declares_1_locally_but_it_is_exported_as_2_2460","Module '{0}' declares '{1}' locally, but it is exported as '{2}'."),Type_0_is_not_an_array_type:t(2461,e.DiagnosticCategory.Error,"Type_0_is_not_an_array_type_2461","Type '{0}' is not an array type."),A_rest_element_must_be_last_in_a_destructuring_pattern:t(2462,e.DiagnosticCategory.Error,"A_rest_element_must_be_last_in_a_destructuring_pattern_2462","A rest element must be last in a destructuring pattern."),A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature:t(2463,e.DiagnosticCategory.Error,"A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463","A binding pattern parameter cannot be optional in an implementation signature."),A_computed_property_name_must_be_of_type_string_number_symbol_or_any:t(2464,e.DiagnosticCategory.Error,"A_computed_property_name_must_be_of_type_string_number_symbol_or_any_2464","A computed property name must be of type 'string', 'number', 'symbol', or 'any'."),this_cannot_be_referenced_in_a_computed_property_name:t(2465,e.DiagnosticCategory.Error,"this_cannot_be_referenced_in_a_computed_property_name_2465","'this' cannot be referenced in a computed property name."),super_cannot_be_referenced_in_a_computed_property_name:t(2466,e.DiagnosticCategory.Error,"super_cannot_be_referenced_in_a_computed_property_name_2466","'super' cannot be referenced in a computed property name."),A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type:t(2467,e.DiagnosticCategory.Error,"A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467","A computed property name cannot reference a type parameter from its containing type."),Cannot_find_global_value_0:t(2468,e.DiagnosticCategory.Error,"Cannot_find_global_value_0_2468","Cannot find global value '{0}'."),The_0_operator_cannot_be_applied_to_type_symbol:t(2469,e.DiagnosticCategory.Error,"The_0_operator_cannot_be_applied_to_type_symbol_2469","The '{0}' operator cannot be applied to type 'symbol'."),Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher:t(2472,e.DiagnosticCategory.Error,"Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472","Spread operator in 'new' expressions is only available when targeting ECMAScript 5 and higher."),Enum_declarations_must_all_be_const_or_non_const:t(2473,e.DiagnosticCategory.Error,"Enum_declarations_must_all_be_const_or_non_const_2473","Enum declarations must all be const or non-const."),const_enum_member_initializers_can_only_contain_literal_values_and_other_computed_enum_values:t(2474,e.DiagnosticCategory.Error,"const_enum_member_initializers_can_only_contain_literal_values_and_other_computed_enum_values_2474","const enum member initializers can only contain literal values and other computed enum values."),const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_import_declaration_or_export_assignment_or_type_query:t(2475,e.DiagnosticCategory.Error,"const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475","'const' enums can only be used in property or index access expressions or the right hand side of an import declaration or export assignment or type query."),A_const_enum_member_can_only_be_accessed_using_a_string_literal:t(2476,e.DiagnosticCategory.Error,"A_const_enum_member_can_only_be_accessed_using_a_string_literal_2476","A const enum member can only be accessed using a string literal."),const_enum_member_initializer_was_evaluated_to_a_non_finite_value:t(2477,e.DiagnosticCategory.Error,"const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477","'const' enum member initializer was evaluated to a non-finite value."),const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN:t(2478,e.DiagnosticCategory.Error,"const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478","'const' enum member initializer was evaluated to disallowed value 'NaN'."),let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations:t(2480,e.DiagnosticCategory.Error,"let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480","'let' is not allowed to be used as a name in 'let' or 'const' declarations."),Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1:t(2481,e.DiagnosticCategory.Error,"Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1_2481","Cannot initialize outer scoped variable '{0}' in the same scope as block scoped declaration '{1}'."),The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation:t(2483,e.DiagnosticCategory.Error,"The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483","The left-hand side of a 'for...of' statement cannot use a type annotation."),Export_declaration_conflicts_with_exported_declaration_of_0:t(2484,e.DiagnosticCategory.Error,"Export_declaration_conflicts_with_exported_declaration_of_0_2484","Export declaration conflicts with exported declaration of '{0}'."),The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access:t(2487,e.DiagnosticCategory.Error,"The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487","The left-hand side of a 'for...of' statement must be a variable or a property access."),Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator:t(2488,e.DiagnosticCategory.Error,"Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488","Type '{0}' must have a '[Symbol.iterator]()' method that returns an iterator."),An_iterator_must_have_a_next_method:t(2489,e.DiagnosticCategory.Error,"An_iterator_must_have_a_next_method_2489","An iterator must have a 'next()' method."),The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property:t(2490,e.DiagnosticCategory.Error,"The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490","The type returned by the '{0}()' method of an iterator must have a 'value' property."),The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern:t(2491,e.DiagnosticCategory.Error,"The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491","The left-hand side of a 'for...in' statement cannot be a destructuring pattern."),Cannot_redeclare_identifier_0_in_catch_clause:t(2492,e.DiagnosticCategory.Error,"Cannot_redeclare_identifier_0_in_catch_clause_2492","Cannot redeclare identifier '{0}' in catch clause."),Tuple_type_0_of_length_1_has_no_element_at_index_2:t(2493,e.DiagnosticCategory.Error,"Tuple_type_0_of_length_1_has_no_element_at_index_2_2493","Tuple type '{0}' of length '{1}' has no element at index '{2}'."),Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher:t(2494,e.DiagnosticCategory.Error,"Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494","Using a string in a 'for...of' statement is only supported in ECMAScript 5 and higher."),Type_0_is_not_an_array_type_or_a_string_type:t(2495,e.DiagnosticCategory.Error,"Type_0_is_not_an_array_type_or_a_string_type_2495","Type '{0}' is not an array type or a string type."),The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_standard_function_expression:t(2496,e.DiagnosticCategory.Error,"The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_stand_2496","The 'arguments' object cannot be referenced in an arrow function in ES3 and ES5. Consider using a standard function expression."),This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_referencing_its_default_export:t(2497,e.DiagnosticCategory.Error,"This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497","This module can only be referenced with ECMAScript imports/exports by turning on the '{0}' flag and referencing its default export."),Module_0_uses_export_and_cannot_be_used_with_export_Asterisk:t(2498,e.DiagnosticCategory.Error,"Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498","Module '{0}' uses 'export =' and cannot be used with 'export *'."),An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments:t(2499,e.DiagnosticCategory.Error,"An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499","An interface can only extend an identifier/qualified-name with optional type arguments."),A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments:t(2500,e.DiagnosticCategory.Error,"A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500","A class can only implement an identifier/qualified-name with optional type arguments."),A_rest_element_cannot_contain_a_binding_pattern:t(2501,e.DiagnosticCategory.Error,"A_rest_element_cannot_contain_a_binding_pattern_2501","A rest element cannot contain a binding pattern."),_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation:t(2502,e.DiagnosticCategory.Error,"_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation_2502","'{0}' is referenced directly or indirectly in its own type annotation."),Cannot_find_namespace_0:t(2503,e.DiagnosticCategory.Error,"Cannot_find_namespace_0_2503","Cannot find namespace '{0}'."),Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator:t(2504,e.DiagnosticCategory.Error,"Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator_2504","Type '{0}' must have a '[Symbol.asyncIterator]()' method that returns an async iterator."),A_generator_cannot_have_a_void_type_annotation:t(2505,e.DiagnosticCategory.Error,"A_generator_cannot_have_a_void_type_annotation_2505","A generator cannot have a 'void' type annotation."),_0_is_referenced_directly_or_indirectly_in_its_own_base_expression:t(2506,e.DiagnosticCategory.Error,"_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506","'{0}' is referenced directly or indirectly in its own base expression."),Type_0_is_not_a_constructor_function_type:t(2507,e.DiagnosticCategory.Error,"Type_0_is_not_a_constructor_function_type_2507","Type '{0}' is not a constructor function type."),No_base_constructor_has_the_specified_number_of_type_arguments:t(2508,e.DiagnosticCategory.Error,"No_base_constructor_has_the_specified_number_of_type_arguments_2508","No base constructor has the specified number of type arguments."),Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_known_members:t(2509,e.DiagnosticCategory.Error,"Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509","Base constructor return type '{0}' is not an object type or intersection of object types with statically known members."),Base_constructors_must_all_have_the_same_return_type:t(2510,e.DiagnosticCategory.Error,"Base_constructors_must_all_have_the_same_return_type_2510","Base constructors must all have the same return type."),Cannot_create_an_instance_of_an_abstract_class:t(2511,e.DiagnosticCategory.Error,"Cannot_create_an_instance_of_an_abstract_class_2511","Cannot create an instance of an abstract class."),Overload_signatures_must_all_be_abstract_or_non_abstract:t(2512,e.DiagnosticCategory.Error,"Overload_signatures_must_all_be_abstract_or_non_abstract_2512","Overload signatures must all be abstract or non-abstract."),Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression:t(2513,e.DiagnosticCategory.Error,"Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513","Abstract method '{0}' in class '{1}' cannot be accessed via super expression."),A_tuple_type_cannot_be_indexed_with_a_negative_value:t(2514,e.DiagnosticCategory.Error,"A_tuple_type_cannot_be_indexed_with_a_negative_value_2514","A tuple type cannot be indexed with a negative value."),Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2:t(2515,e.DiagnosticCategory.Error,"Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515","Non-abstract class '{0}' does not implement inherited abstract member '{1}' from class '{2}'."),All_declarations_of_an_abstract_method_must_be_consecutive:t(2516,e.DiagnosticCategory.Error,"All_declarations_of_an_abstract_method_must_be_consecutive_2516","All declarations of an abstract method must be consecutive."),Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type:t(2517,e.DiagnosticCategory.Error,"Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517","Cannot assign an abstract constructor type to a non-abstract constructor type."),A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard:t(2518,e.DiagnosticCategory.Error,"A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518","A 'this'-based type guard is not compatible with a parameter-based type guard."),An_async_iterator_must_have_a_next_method:t(2519,e.DiagnosticCategory.Error,"An_async_iterator_must_have_a_next_method_2519","An async iterator must have a 'next()' method."),Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions:t(2520,e.DiagnosticCategory.Error,"Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520","Duplicate identifier '{0}'. Compiler uses declaration '{1}' to support async functions."),The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES3_and_ES5_Consider_using_a_standard_function_or_method:t(2522,e.DiagnosticCategory.Error,"The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES3_and_ES5_Consider_usi_2522","The 'arguments' object cannot be referenced in an async function or method in ES3 and ES5. Consider using a standard function or method."),yield_expressions_cannot_be_used_in_a_parameter_initializer:t(2523,e.DiagnosticCategory.Error,"yield_expressions_cannot_be_used_in_a_parameter_initializer_2523","'yield' expressions cannot be used in a parameter initializer."),await_expressions_cannot_be_used_in_a_parameter_initializer:t(2524,e.DiagnosticCategory.Error,"await_expressions_cannot_be_used_in_a_parameter_initializer_2524","'await' expressions cannot be used in a parameter initializer."),Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value:t(2525,e.DiagnosticCategory.Error,"Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value_2525","Initializer provides no value for this binding element and the binding element has no default value."),A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface:t(2526,e.DiagnosticCategory.Error,"A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526","A 'this' type is available only in a non-static member of a class or interface."),The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary:t(2527,e.DiagnosticCategory.Error,"The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527","The inferred type of '{0}' references an inaccessible '{1}' type. A type annotation is necessary."),A_module_cannot_have_multiple_default_exports:t(2528,e.DiagnosticCategory.Error,"A_module_cannot_have_multiple_default_exports_2528","A module cannot have multiple default exports."),Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_functions:t(2529,e.DiagnosticCategory.Error,"Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529","Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of a module containing async functions."),Property_0_is_incompatible_with_index_signature:t(2530,e.DiagnosticCategory.Error,"Property_0_is_incompatible_with_index_signature_2530","Property '{0}' is incompatible with index signature."),Object_is_possibly_null:t(2531,e.DiagnosticCategory.Error,"Object_is_possibly_null_2531","Object is possibly 'null'."),Object_is_possibly_undefined:t(2532,e.DiagnosticCategory.Error,"Object_is_possibly_undefined_2532","Object is possibly 'undefined'."),Object_is_possibly_null_or_undefined:t(2533,e.DiagnosticCategory.Error,"Object_is_possibly_null_or_undefined_2533","Object is possibly 'null' or 'undefined'."),A_function_returning_never_cannot_have_a_reachable_end_point:t(2534,e.DiagnosticCategory.Error,"A_function_returning_never_cannot_have_a_reachable_end_point_2534","A function returning 'never' cannot have a reachable end point."),Enum_type_0_has_members_with_initializers_that_are_not_literals:t(2535,e.DiagnosticCategory.Error,"Enum_type_0_has_members_with_initializers_that_are_not_literals_2535","Enum type '{0}' has members with initializers that are not literals."),Type_0_cannot_be_used_to_index_type_1:t(2536,e.DiagnosticCategory.Error,"Type_0_cannot_be_used_to_index_type_1_2536","Type '{0}' cannot be used to index type '{1}'."),Type_0_has_no_matching_index_signature_for_type_1:t(2537,e.DiagnosticCategory.Error,"Type_0_has_no_matching_index_signature_for_type_1_2537","Type '{0}' has no matching index signature for type '{1}'."),Type_0_cannot_be_used_as_an_index_type:t(2538,e.DiagnosticCategory.Error,"Type_0_cannot_be_used_as_an_index_type_2538","Type '{0}' cannot be used as an index type."),Cannot_assign_to_0_because_it_is_not_a_variable:t(2539,e.DiagnosticCategory.Error,"Cannot_assign_to_0_because_it_is_not_a_variable_2539","Cannot assign to '{0}' because it is not a variable."),Cannot_assign_to_0_because_it_is_a_read_only_property:t(2540,e.DiagnosticCategory.Error,"Cannot_assign_to_0_because_it_is_a_read_only_property_2540","Cannot assign to '{0}' because it is a read-only property."),Index_signature_in_type_0_only_permits_reading:t(2542,e.DiagnosticCategory.Error,"Index_signature_in_type_0_only_permits_reading_2542","Index signature in type '{0}' only permits reading."),Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_meta_property_reference:t(2543,e.DiagnosticCategory.Error,"Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543","Duplicate identifier '_newTarget'. Compiler uses variable declaration '_newTarget' to capture 'new.target' meta-property reference."),Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta_property_reference:t(2544,e.DiagnosticCategory.Error,"Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544","Expression resolves to variable declaration '_newTarget' that compiler uses to capture 'new.target' meta-property reference."),A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any:t(2545,e.DiagnosticCategory.Error,"A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545","A mixin class must have a constructor with a single rest parameter of type 'any[]'."),The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_property:t(2547,e.DiagnosticCategory.Error,"The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547","The type returned by the '{0}()' method of an async iterator must be a promise for a type with a 'value' property."),Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator:t(2548,e.DiagnosticCategory.Error,"Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator_2548","Type '{0}' is not an array type or does not have a '[Symbol.iterator]()' method that returns an iterator."),Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator:t(2549,e.DiagnosticCategory.Error,"Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549","Type '{0}' is not an array type or a string type or does not have a '[Symbol.iterator]()' method that returns an iterator."),Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2_or_later:t(2550,e.DiagnosticCategory.Error,"Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550","Property '{0}' does not exist on type '{1}'. Do you need to change your target library? Try changing the 'lib' compiler option to '{2}' or later."),Property_0_does_not_exist_on_type_1_Did_you_mean_2:t(2551,e.DiagnosticCategory.Error,"Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551","Property '{0}' does not exist on type '{1}'. Did you mean '{2}'?"),Cannot_find_name_0_Did_you_mean_1:t(2552,e.DiagnosticCategory.Error,"Cannot_find_name_0_Did_you_mean_1_2552","Cannot find name '{0}'. Did you mean '{1}'?"),Computed_values_are_not_permitted_in_an_enum_with_string_valued_members:t(2553,e.DiagnosticCategory.Error,"Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553","Computed values are not permitted in an enum with string valued members."),Expected_0_arguments_but_got_1:t(2554,e.DiagnosticCategory.Error,"Expected_0_arguments_but_got_1_2554","Expected {0} arguments, but got {1}."),Expected_at_least_0_arguments_but_got_1:t(2555,e.DiagnosticCategory.Error,"Expected_at_least_0_arguments_but_got_1_2555","Expected at least {0} arguments, but got {1}."),A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter:t(2556,e.DiagnosticCategory.Error,"A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556","A spread argument must either have a tuple type or be passed to a rest parameter."),Expected_0_type_arguments_but_got_1:t(2558,e.DiagnosticCategory.Error,"Expected_0_type_arguments_but_got_1_2558","Expected {0} type arguments, but got {1}."),Type_0_has_no_properties_in_common_with_type_1:t(2559,e.DiagnosticCategory.Error,"Type_0_has_no_properties_in_common_with_type_1_2559","Type '{0}' has no properties in common with type '{1}'."),Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it:t(2560,e.DiagnosticCategory.Error,"Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560","Value of type '{0}' has no properties in common with type '{1}'. Did you mean to call it?"),Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_write_2:t(2561,e.DiagnosticCategory.Error,"Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561","Object literal may only specify known properties, but '{0}' does not exist in type '{1}'. Did you mean to write '{2}'?"),Base_class_expressions_cannot_reference_class_type_parameters:t(2562,e.DiagnosticCategory.Error,"Base_class_expressions_cannot_reference_class_type_parameters_2562","Base class expressions cannot reference class type parameters."),The_containing_function_or_module_body_is_too_large_for_control_flow_analysis:t(2563,e.DiagnosticCategory.Error,"The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563","The containing function or module body is too large for control flow analysis."),Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor:t(2564,e.DiagnosticCategory.Error,"Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564","Property '{0}' has no initializer and is not definitely assigned in the constructor."),Property_0_is_used_before_being_assigned:t(2565,e.DiagnosticCategory.Error,"Property_0_is_used_before_being_assigned_2565","Property '{0}' is used before being assigned."),A_rest_element_cannot_have_a_property_name:t(2566,e.DiagnosticCategory.Error,"A_rest_element_cannot_have_a_property_name_2566","A rest element cannot have a property name."),Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations:t(2567,e.DiagnosticCategory.Error,"Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567","Enum declarations can only merge with namespace or other enum declarations."),Property_0_may_not_exist_on_type_1_Did_you_mean_2:t(2568,e.DiagnosticCategory.Error,"Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568","Property '{0}' may not exist on type '{1}'. Did you mean '{2}'?"),Could_not_find_name_0_Did_you_mean_1:t(2570,e.DiagnosticCategory.Error,"Could_not_find_name_0_Did_you_mean_1_2570","Could not find name '{0}'. Did you mean '{1}'?"),Object_is_of_type_unknown:t(2571,e.DiagnosticCategory.Error,"Object_is_of_type_unknown_2571","Object is of type 'unknown'."),A_rest_element_type_must_be_an_array_type:t(2574,e.DiagnosticCategory.Error,"A_rest_element_type_must_be_an_array_type_2574","A rest element type must be an array type."),No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments:t(2575,e.DiagnosticCategory.Error,"No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575","No overload expects {0} arguments, but overloads do exist that expect either {1} or {2} arguments."),Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead:t(2576,e.DiagnosticCategory.Error,"Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576","Property '{0}' does not exist on type '{1}'. Did you mean to access the static member '{2}' instead?"),Return_type_annotation_circularly_references_itself:t(2577,e.DiagnosticCategory.Error,"Return_type_annotation_circularly_references_itself_2577","Return type annotation circularly references itself."),Unused_ts_expect_error_directive:t(2578,e.DiagnosticCategory.Error,"Unused_ts_expect_error_directive_2578","Unused '@ts-expect-error' directive."),Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashnode:t(2580,e.DiagnosticCategory.Error,"Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580","Cannot find name '{0}'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`."),Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slashjquery:t(2581,e.DiagnosticCategory.Error,"Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581","Cannot find name '{0}'. Do you need to install type definitions for jQuery? Try `npm i --save-dev @types/jquery`."),Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_types_Slashjest_or_npm_i_save_dev_types_Slashmocha:t(2582,e.DiagnosticCategory.Error,"Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582","Cannot find name '{0}'. Do you need to install type definitions for a test runner? Try `npm i --save-dev @types/jest` or `npm i --save-dev @types/mocha`."),Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_1_or_later:t(2583,e.DiagnosticCategory.Error,"Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583","Cannot find name '{0}'. Do you need to change your target library? Try changing the 'lib' compiler option to '{1}' or later."),Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_include_dom:t(2584,e.DiagnosticCategory.Error,"Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584","Cannot find name '{0}'. Do you need to change your target library? Try changing the 'lib' compiler option to include 'dom'."),_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_es2015_or_later:t(2585,e.DiagnosticCategory.Error,"_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585","'{0}' only refers to a type, but is being used as a value here. Do you need to change your target library? Try changing the 'lib' compiler option to es2015 or later."),Cannot_assign_to_0_because_it_is_a_constant:t(2588,e.DiagnosticCategory.Error,"Cannot_assign_to_0_because_it_is_a_constant_2588","Cannot assign to '{0}' because it is a constant."),Type_instantiation_is_excessively_deep_and_possibly_infinite:t(2589,e.DiagnosticCategory.Error,"Type_instantiation_is_excessively_deep_and_possibly_infinite_2589","Type instantiation is excessively deep and possibly infinite."),Expression_produces_a_union_type_that_is_too_complex_to_represent:t(2590,e.DiagnosticCategory.Error,"Expression_produces_a_union_type_that_is_too_complex_to_represent_2590","Expression produces a union type that is too complex to represent."),Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashnode_and_then_add_node_to_the_types_field_in_your_tsconfig:t(2591,e.DiagnosticCategory.Error,"Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591","Cannot find name '{0}'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node` and then add 'node' to the types field in your tsconfig."),Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slashjquery_and_then_add_jquery_to_the_types_field_in_your_tsconfig:t(2592,e.DiagnosticCategory.Error,"Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592","Cannot find name '{0}'. Do you need to install type definitions for jQuery? Try `npm i --save-dev @types/jquery` and then add 'jquery' to the types field in your tsconfig."),Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_types_Slashjest_or_npm_i_save_dev_types_Slashmocha_and_then_add_jest_or_mocha_to_the_types_field_in_your_tsconfig:t(2593,e.DiagnosticCategory.Error,"Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593","Cannot find name '{0}'. Do you need to install type definitions for a test runner? Try `npm i --save-dev @types/jest` or `npm i --save-dev @types/mocha` and then add 'jest' or 'mocha' to the types field in your tsconfig."),This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag:t(2594,e.DiagnosticCategory.Error,"This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594","This module is declared with 'export =', and can only be used with a default import when using the '{0}' flag."),_0_can_only_be_imported_by_using_a_default_import:t(2595,e.DiagnosticCategory.Error,"_0_can_only_be_imported_by_using_a_default_import_2595","'{0}' can only be imported by using a default import."),_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import:t(2596,e.DiagnosticCategory.Error,"_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596","'{0}' can only be imported by turning on the 'esModuleInterop' flag and using a default import."),_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import:t(2597,e.DiagnosticCategory.Error,"_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597","'{0}' can only be imported by using a 'require' call or by using a default import."),_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import:t(2598,e.DiagnosticCategory.Error,"_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598","'{0}' can only be imported by using a 'require' call or by turning on the 'esModuleInterop' flag and using a default import."),JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist:t(2602,e.DiagnosticCategory.Error,"JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist_2602","JSX element implicitly has type 'any' because the global type 'JSX.Element' does not exist."),Property_0_in_type_1_is_not_assignable_to_type_2:t(2603,e.DiagnosticCategory.Error,"Property_0_in_type_1_is_not_assignable_to_type_2_2603","Property '{0}' in type '{1}' is not assignable to type '{2}'."),JSX_element_type_0_does_not_have_any_construct_or_call_signatures:t(2604,e.DiagnosticCategory.Error,"JSX_element_type_0_does_not_have_any_construct_or_call_signatures_2604","JSX element type '{0}' does not have any construct or call signatures."),Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property:t(2606,e.DiagnosticCategory.Error,"Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606","Property '{0}' of JSX spread attribute is not assignable to target property."),JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property:t(2607,e.DiagnosticCategory.Error,"JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property_2607","JSX element class does not support attributes because it does not have a '{0}' property."),The_global_type_JSX_0_may_not_have_more_than_one_property:t(2608,e.DiagnosticCategory.Error,"The_global_type_JSX_0_may_not_have_more_than_one_property_2608","The global type 'JSX.{0}' may not have more than one property."),JSX_spread_child_must_be_an_array_type:t(2609,e.DiagnosticCategory.Error,"JSX_spread_child_must_be_an_array_type_2609","JSX spread child must be an array type."),_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property:t(2610,e.DiagnosticCategory.Error,"_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610","'{0}' is defined as an accessor in class '{1}', but is overridden here in '{2}' as an instance property."),_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor:t(2611,e.DiagnosticCategory.Error,"_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611","'{0}' is defined as a property in class '{1}', but is overridden here in '{2}' as an accessor."),Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_add_a_declare_modifier_or_remove_the_redundant_declaration:t(2612,e.DiagnosticCategory.Error,"Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612","Property '{0}' will overwrite the base property in '{1}'. If this is intentional, add an initializer. Otherwise, add a 'declare' modifier or remove the redundant declaration."),Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead:t(2613,e.DiagnosticCategory.Error,"Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead_2613","Module '{0}' has no default export. Did you mean to use 'import { {1} } from {0}' instead?"),Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead:t(2614,e.DiagnosticCategory.Error,"Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614","Module '{0}' has no exported member '{1}'. Did you mean to use 'import {1} from {0}' instead?"),Type_of_property_0_circularly_references_itself_in_mapped_type_1:t(2615,e.DiagnosticCategory.Error,"Type_of_property_0_circularly_references_itself_in_mapped_type_1_2615","Type of property '{0}' circularly references itself in mapped type '{1}'."),_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import:t(2616,e.DiagnosticCategory.Error,"_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616","'{0}' can only be imported by using 'import {1} = require({2})' or a default import."),_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import:t(2617,e.DiagnosticCategory.Error,"_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617","'{0}' can only be imported by using 'import {1} = require({2})' or by turning on the 'esModuleInterop' flag and using a default import."),Source_has_0_element_s_but_target_requires_1:t(2618,e.DiagnosticCategory.Error,"Source_has_0_element_s_but_target_requires_1_2618","Source has {0} element(s) but target requires {1}."),Source_has_0_element_s_but_target_allows_only_1:t(2619,e.DiagnosticCategory.Error,"Source_has_0_element_s_but_target_allows_only_1_2619","Source has {0} element(s) but target allows only {1}."),Target_requires_0_element_s_but_source_may_have_fewer:t(2620,e.DiagnosticCategory.Error,"Target_requires_0_element_s_but_source_may_have_fewer_2620","Target requires {0} element(s) but source may have fewer."),Target_allows_only_0_element_s_but_source_may_have_more:t(2621,e.DiagnosticCategory.Error,"Target_allows_only_0_element_s_but_source_may_have_more_2621","Target allows only {0} element(s) but source may have more."),Source_provides_no_match_for_required_element_at_position_0_in_target:t(2623,e.DiagnosticCategory.Error,"Source_provides_no_match_for_required_element_at_position_0_in_target_2623","Source provides no match for required element at position {0} in target."),Source_provides_no_match_for_variadic_element_at_position_0_in_target:t(2624,e.DiagnosticCategory.Error,"Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624","Source provides no match for variadic element at position {0} in target."),Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target:t(2625,e.DiagnosticCategory.Error,"Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625","Variadic element at position {0} in source does not match element at position {1} in target."),Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target:t(2626,e.DiagnosticCategory.Error,"Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626","Type at position {0} in source is not compatible with type at position {1} in target."),Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target:t(2627,e.DiagnosticCategory.Error,"Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627","Type at positions {0} through {1} in source is not compatible with type at position {2} in target."),Cannot_assign_to_0_because_it_is_an_enum:t(2628,e.DiagnosticCategory.Error,"Cannot_assign_to_0_because_it_is_an_enum_2628","Cannot assign to '{0}' because it is an enum."),Cannot_assign_to_0_because_it_is_a_class:t(2629,e.DiagnosticCategory.Error,"Cannot_assign_to_0_because_it_is_a_class_2629","Cannot assign to '{0}' because it is a class."),Cannot_assign_to_0_because_it_is_a_function:t(2630,e.DiagnosticCategory.Error,"Cannot_assign_to_0_because_it_is_a_function_2630","Cannot assign to '{0}' because it is a function."),Cannot_assign_to_0_because_it_is_a_namespace:t(2631,e.DiagnosticCategory.Error,"Cannot_assign_to_0_because_it_is_a_namespace_2631","Cannot assign to '{0}' because it is a namespace."),Cannot_assign_to_0_because_it_is_an_import:t(2632,e.DiagnosticCategory.Error,"Cannot_assign_to_0_because_it_is_an_import_2632","Cannot assign to '{0}' because it is an import."),JSX_property_access_expressions_cannot_include_JSX_namespace_names:t(2633,e.DiagnosticCategory.Error,"JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633","JSX property access expressions cannot include JSX namespace names"),_0_index_signatures_are_incompatible:t(2634,e.DiagnosticCategory.Error,"_0_index_signatures_are_incompatible_2634","'{0}' index signatures are incompatible."),Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable:t(2635,e.DiagnosticCategory.Error,"Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635","Type '{0}' has no signatures for which the type argument list is applicable."),Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation:t(2636,e.DiagnosticCategory.Error,"Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636","Type '{0}' is not assignable to type '{1}' as implied by variance annotation."),Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_types:t(2637,e.DiagnosticCategory.Error,"Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637","Variance annotations are only supported in type aliases for object, function, constructor, and mapped types."),Type_0_may_represent_a_primitive_value_which_is_not_permitted_as_the_right_operand_of_the_in_operator:t(2638,e.DiagnosticCategory.Error,"Type_0_may_represent_a_primitive_value_which_is_not_permitted_as_the_right_operand_of_the_in_operato_2638","Type '{0}' may represent a primitive value, which is not permitted as the right operand of the 'in' operator."),Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity:t(2649,e.DiagnosticCategory.Error,"Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649","Cannot augment module '{0}' with value exports because it resolves to a non-module entity."),A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums:t(2651,e.DiagnosticCategory.Error,"A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651","A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums."),Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_default_0_declaration_instead:t(2652,e.DiagnosticCategory.Error,"Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652","Merged declaration '{0}' cannot include a default export declaration. Consider adding a separate 'export default {0}' declaration instead."),Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1:t(2653,e.DiagnosticCategory.Error,"Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653","Non-abstract class expression does not implement inherited abstract member '{0}' from class '{1}'."),JSX_expressions_must_have_one_parent_element:t(2657,e.DiagnosticCategory.Error,"JSX_expressions_must_have_one_parent_element_2657","JSX expressions must have one parent element."),Type_0_provides_no_match_for_the_signature_1:t(2658,e.DiagnosticCategory.Error,"Type_0_provides_no_match_for_the_signature_1_2658","Type '{0}' provides no match for the signature '{1}'."),super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_higher:t(2659,e.DiagnosticCategory.Error,"super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_highe_2659","'super' is only allowed in members of object literal expressions when option 'target' is 'ES2015' or higher."),super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions:t(2660,e.DiagnosticCategory.Error,"super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions_2660","'super' can only be referenced in members of derived classes or object literal expressions."),Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module:t(2661,e.DiagnosticCategory.Error,"Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module_2661","Cannot export '{0}'. Only local declarations can be exported from a module."),Cannot_find_name_0_Did_you_mean_the_static_member_1_0:t(2662,e.DiagnosticCategory.Error,"Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662","Cannot find name '{0}'. Did you mean the static member '{1}.{0}'?"),Cannot_find_name_0_Did_you_mean_the_instance_member_this_0:t(2663,e.DiagnosticCategory.Error,"Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663","Cannot find name '{0}'. Did you mean the instance member 'this.{0}'?"),Invalid_module_name_in_augmentation_module_0_cannot_be_found:t(2664,e.DiagnosticCategory.Error,"Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664","Invalid module name in augmentation, module '{0}' cannot be found."),Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augmented:t(2665,e.DiagnosticCategory.Error,"Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665","Invalid module name in augmentation. Module '{0}' resolves to an untyped module at '{1}', which cannot be augmented."),Exports_and_export_assignments_are_not_permitted_in_module_augmentations:t(2666,e.DiagnosticCategory.Error,"Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666","Exports and export assignments are not permitted in module augmentations."),Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_module:t(2667,e.DiagnosticCategory.Error,"Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667","Imports are not permitted in module augmentations. Consider moving them to the enclosing external module."),export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always_visible:t(2668,e.DiagnosticCategory.Error,"export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668","'export' modifier cannot be applied to ambient modules and module augmentations since they are always visible."),Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_declarations:t(2669,e.DiagnosticCategory.Error,"Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669","Augmentations for the global scope can only be directly nested in external modules or ambient module declarations."),Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambient_context:t(2670,e.DiagnosticCategory.Error,"Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670","Augmentations for the global scope should have 'declare' modifier unless they appear in already ambient context."),Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity:t(2671,e.DiagnosticCategory.Error,"Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671","Cannot augment module '{0}' because it resolves to a non-module entity."),Cannot_assign_a_0_constructor_type_to_a_1_constructor_type:t(2672,e.DiagnosticCategory.Error,"Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672","Cannot assign a '{0}' constructor type to a '{1}' constructor type."),Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration:t(2673,e.DiagnosticCategory.Error,"Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration_2673","Constructor of class '{0}' is private and only accessible within the class declaration."),Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration:t(2674,e.DiagnosticCategory.Error,"Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674","Constructor of class '{0}' is protected and only accessible within the class declaration."),Cannot_extend_a_class_0_Class_constructor_is_marked_as_private:t(2675,e.DiagnosticCategory.Error,"Cannot_extend_a_class_0_Class_constructor_is_marked_as_private_2675","Cannot extend a class '{0}'. Class constructor is marked as private."),Accessors_must_both_be_abstract_or_non_abstract:t(2676,e.DiagnosticCategory.Error,"Accessors_must_both_be_abstract_or_non_abstract_2676","Accessors must both be abstract or non-abstract."),A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type:t(2677,e.DiagnosticCategory.Error,"A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type_2677","A type predicate's type must be assignable to its parameter's type."),Type_0_is_not_comparable_to_type_1:t(2678,e.DiagnosticCategory.Error,"Type_0_is_not_comparable_to_type_1_2678","Type '{0}' is not comparable to type '{1}'."),A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void:t(2679,e.DiagnosticCategory.Error,"A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679","A function that is called with the 'new' keyword cannot have a 'this' type that is 'void'."),A_0_parameter_must_be_the_first_parameter:t(2680,e.DiagnosticCategory.Error,"A_0_parameter_must_be_the_first_parameter_2680","A '{0}' parameter must be the first parameter."),A_constructor_cannot_have_a_this_parameter:t(2681,e.DiagnosticCategory.Error,"A_constructor_cannot_have_a_this_parameter_2681","A constructor cannot have a 'this' parameter."),this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation:t(2683,e.DiagnosticCategory.Error,"this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683","'this' implicitly has type 'any' because it does not have a type annotation."),The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1:t(2684,e.DiagnosticCategory.Error,"The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684","The 'this' context of type '{0}' is not assignable to method's 'this' of type '{1}'."),The_this_types_of_each_signature_are_incompatible:t(2685,e.DiagnosticCategory.Error,"The_this_types_of_each_signature_are_incompatible_2685","The 'this' types of each signature are incompatible."),_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead:t(2686,e.DiagnosticCategory.Error,"_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686","'{0}' refers to a UMD global, but the current file is a module. Consider adding an import instead."),All_declarations_of_0_must_have_identical_modifiers:t(2687,e.DiagnosticCategory.Error,"All_declarations_of_0_must_have_identical_modifiers_2687","All declarations of '{0}' must have identical modifiers."),Cannot_find_type_definition_file_for_0:t(2688,e.DiagnosticCategory.Error,"Cannot_find_type_definition_file_for_0_2688","Cannot find type definition file for '{0}'."),Cannot_extend_an_interface_0_Did_you_mean_implements:t(2689,e.DiagnosticCategory.Error,"Cannot_extend_an_interface_0_Did_you_mean_implements_2689","Cannot extend an interface '{0}'. Did you mean 'implements'?"),_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0:t(2690,e.DiagnosticCategory.Error,"_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690","'{0}' only refers to a type, but is being used as a value here. Did you mean to use '{1} in {0}'?"),An_import_path_cannot_end_with_a_0_extension_Consider_importing_1_instead:t(2691,e.DiagnosticCategory.Error,"An_import_path_cannot_end_with_a_0_extension_Consider_importing_1_instead_2691","An import path cannot end with a '{0}' extension. Consider importing '{1}' instead."),_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible:t(2692,e.DiagnosticCategory.Error,"_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692","'{0}' is a primitive, but '{1}' is a wrapper object. Prefer using '{0}' when possible."),_0_only_refers_to_a_type_but_is_being_used_as_a_value_here:t(2693,e.DiagnosticCategory.Error,"_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693","'{0}' only refers to a type, but is being used as a value here."),Namespace_0_has_no_exported_member_1:t(2694,e.DiagnosticCategory.Error,"Namespace_0_has_no_exported_member_1_2694","Namespace '{0}' has no exported member '{1}'."),Left_side_of_comma_operator_is_unused_and_has_no_side_effects:t(2695,e.DiagnosticCategory.Error,"Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695","Left side of comma operator is unused and has no side effects.",!0),The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead:t(2696,e.DiagnosticCategory.Error,"The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696","The 'Object' type is assignable to very few other types. Did you mean to use the 'any' type instead?"),An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES2015_in_your_lib_option:t(2697,e.DiagnosticCategory.Error,"An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697","An async function or method must return a 'Promise'. Make sure you have a declaration for 'Promise' or include 'ES2015' in your '--lib' option."),Spread_types_may_only_be_created_from_object_types:t(2698,e.DiagnosticCategory.Error,"Spread_types_may_only_be_created_from_object_types_2698","Spread types may only be created from object types."),Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1:t(2699,e.DiagnosticCategory.Error,"Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699","Static property '{0}' conflicts with built-in property 'Function.{0}' of constructor function '{1}'."),Rest_types_may_only_be_created_from_object_types:t(2700,e.DiagnosticCategory.Error,"Rest_types_may_only_be_created_from_object_types_2700","Rest types may only be created from object types."),The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access:t(2701,e.DiagnosticCategory.Error,"The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access_2701","The target of an object rest assignment must be a variable or a property access."),_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here:t(2702,e.DiagnosticCategory.Error,"_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702","'{0}' only refers to a type, but is being used as a namespace here."),The_operand_of_a_delete_operator_must_be_a_property_reference:t(2703,e.DiagnosticCategory.Error,"The_operand_of_a_delete_operator_must_be_a_property_reference_2703","The operand of a 'delete' operator must be a property reference."),The_operand_of_a_delete_operator_cannot_be_a_read_only_property:t(2704,e.DiagnosticCategory.Error,"The_operand_of_a_delete_operator_cannot_be_a_read_only_property_2704","The operand of a 'delete' operator cannot be a read-only property."),An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_the_Promise_constructor_or_include_ES2015_in_your_lib_option:t(2705,e.DiagnosticCategory.Error,"An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_de_2705","An async function or method in ES5/ES3 requires the 'Promise' constructor.  Make sure you have a declaration for the 'Promise' constructor or include 'ES2015' in your '--lib' option."),Required_type_parameters_may_not_follow_optional_type_parameters:t(2706,e.DiagnosticCategory.Error,"Required_type_parameters_may_not_follow_optional_type_parameters_2706","Required type parameters may not follow optional type parameters."),Generic_type_0_requires_between_1_and_2_type_arguments:t(2707,e.DiagnosticCategory.Error,"Generic_type_0_requires_between_1_and_2_type_arguments_2707","Generic type '{0}' requires between {1} and {2} type arguments."),Cannot_use_namespace_0_as_a_value:t(2708,e.DiagnosticCategory.Error,"Cannot_use_namespace_0_as_a_value_2708","Cannot use namespace '{0}' as a value."),Cannot_use_namespace_0_as_a_type:t(2709,e.DiagnosticCategory.Error,"Cannot_use_namespace_0_as_a_type_2709","Cannot use namespace '{0}' as a type."),_0_are_specified_twice_The_attribute_named_0_will_be_overwritten:t(2710,e.DiagnosticCategory.Error,"_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710","'{0}' are specified twice. The attribute named '{0}' will be overwritten."),A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES2015_in_your_lib_option:t(2711,e.DiagnosticCategory.Error,"A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711","A dynamic import call returns a 'Promise'. Make sure you have a declaration for 'Promise' or include 'ES2015' in your '--lib' option."),A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_the_Promise_constructor_or_include_ES2015_in_your_lib_option:t(2712,e.DiagnosticCategory.Error,"A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declarat_2712","A dynamic import call in ES5/ES3 requires the 'Promise' constructor.  Make sure you have a declaration for the 'Promise' constructor or include 'ES2015' in your '--lib' option."),Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_property_1_in_0_with_0_1:t(2713,e.DiagnosticCategory.Error,"Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713","Cannot access '{0}.{1}' because '{0}' is a type, but not a namespace. Did you mean to retrieve the type of the property '{1}' in '{0}' with '{0}[\"{1}\"]'?"),The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context:t(2714,e.DiagnosticCategory.Error,"The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714","The expression of an export assignment must be an identifier or qualified name in an ambient context."),Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor:t(2715,e.DiagnosticCategory.Error,"Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715","Abstract property '{0}' in class '{1}' cannot be accessed in the constructor."),Type_parameter_0_has_a_circular_default:t(2716,e.DiagnosticCategory.Error,"Type_parameter_0_has_a_circular_default_2716","Type parameter '{0}' has a circular default."),Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_type_2:t(2717,e.DiagnosticCategory.Error,"Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717","Subsequent property declarations must have the same type.  Property '{0}' must be of type '{1}', but here has type '{2}'."),Duplicate_property_0:t(2718,e.DiagnosticCategory.Error,"Duplicate_property_0_2718","Duplicate property '{0}'."),Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated:t(2719,e.DiagnosticCategory.Error,"Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719","Type '{0}' is not assignable to type '{1}'. Two different types with this name exist, but they are unrelated."),Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclass:t(2720,e.DiagnosticCategory.Error,"Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720","Class '{0}' incorrectly implements class '{1}'. Did you mean to extend '{1}' and inherit its members as a subclass?"),Cannot_invoke_an_object_which_is_possibly_null:t(2721,e.DiagnosticCategory.Error,"Cannot_invoke_an_object_which_is_possibly_null_2721","Cannot invoke an object which is possibly 'null'."),Cannot_invoke_an_object_which_is_possibly_undefined:t(2722,e.DiagnosticCategory.Error,"Cannot_invoke_an_object_which_is_possibly_undefined_2722","Cannot invoke an object which is possibly 'undefined'."),Cannot_invoke_an_object_which_is_possibly_null_or_undefined:t(2723,e.DiagnosticCategory.Error,"Cannot_invoke_an_object_which_is_possibly_null_or_undefined_2723","Cannot invoke an object which is possibly 'null' or 'undefined'."),_0_has_no_exported_member_named_1_Did_you_mean_2:t(2724,e.DiagnosticCategory.Error,"_0_has_no_exported_member_named_1_Did_you_mean_2_2724","'{0}' has no exported member named '{1}'. Did you mean '{2}'?"),Class_name_cannot_be_Object_when_targeting_ES5_with_module_0:t(2725,e.DiagnosticCategory.Error,"Class_name_cannot_be_Object_when_targeting_ES5_with_module_0_2725","Class name cannot be 'Object' when targeting ES5 with module {0}."),Cannot_find_lib_definition_for_0:t(2726,e.DiagnosticCategory.Error,"Cannot_find_lib_definition_for_0_2726","Cannot find lib definition for '{0}'."),Cannot_find_lib_definition_for_0_Did_you_mean_1:t(2727,e.DiagnosticCategory.Error,"Cannot_find_lib_definition_for_0_Did_you_mean_1_2727","Cannot find lib definition for '{0}'. Did you mean '{1}'?"),_0_is_declared_here:t(2728,e.DiagnosticCategory.Message,"_0_is_declared_here_2728","'{0}' is declared here."),Property_0_is_used_before_its_initialization:t(2729,e.DiagnosticCategory.Error,"Property_0_is_used_before_its_initialization_2729","Property '{0}' is used before its initialization."),An_arrow_function_cannot_have_a_this_parameter:t(2730,e.DiagnosticCategory.Error,"An_arrow_function_cannot_have_a_this_parameter_2730","An arrow function cannot have a 'this' parameter."),Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_in_String:t(2731,e.DiagnosticCategory.Error,"Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731","Implicit conversion of a 'symbol' to a 'string' will fail at runtime. Consider wrapping this expression in 'String(...)'."),Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension:t(2732,e.DiagnosticCategory.Error,"Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732","Cannot find module '{0}'. Consider using '--resolveJsonModule' to import module with '.json' extension."),Property_0_was_also_declared_here:t(2733,e.DiagnosticCategory.Error,"Property_0_was_also_declared_here_2733","Property '{0}' was also declared here."),Are_you_missing_a_semicolon:t(2734,e.DiagnosticCategory.Error,"Are_you_missing_a_semicolon_2734","Are you missing a semicolon?"),Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1:t(2735,e.DiagnosticCategory.Error,"Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735","Did you mean for '{0}' to be constrained to type 'new (...args: any[]) => {1}'?"),Operator_0_cannot_be_applied_to_type_1:t(2736,e.DiagnosticCategory.Error,"Operator_0_cannot_be_applied_to_type_1_2736","Operator '{0}' cannot be applied to type '{1}'."),BigInt_literals_are_not_available_when_targeting_lower_than_ES2020:t(2737,e.DiagnosticCategory.Error,"BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737","BigInt literals are not available when targeting lower than ES2020."),An_outer_value_of_this_is_shadowed_by_this_container:t(2738,e.DiagnosticCategory.Message,"An_outer_value_of_this_is_shadowed_by_this_container_2738","An outer value of 'this' is shadowed by this container."),Type_0_is_missing_the_following_properties_from_type_1_Colon_2:t(2739,e.DiagnosticCategory.Error,"Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739","Type '{0}' is missing the following properties from type '{1}': {2}"),Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more:t(2740,e.DiagnosticCategory.Error,"Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740","Type '{0}' is missing the following properties from type '{1}': {2}, and {3} more."),Property_0_is_missing_in_type_1_but_required_in_type_2:t(2741,e.DiagnosticCategory.Error,"Property_0_is_missing_in_type_1_but_required_in_type_2_2741","Property '{0}' is missing in type '{1}' but required in type '{2}'."),The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_annotation_is_necessary:t(2742,e.DiagnosticCategory.Error,"The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_a_2742","The inferred type of '{0}' cannot be named without a reference to '{1}'. This is likely not portable. A type annotation is necessary."),No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments:t(2743,e.DiagnosticCategory.Error,"No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743","No overload expects {0} type arguments, but overloads do exist that expect either {1} or {2} type arguments."),Type_parameter_defaults_can_only_reference_previously_declared_type_parameters:t(2744,e.DiagnosticCategory.Error,"Type_parameter_defaults_can_only_reference_previously_declared_type_parameters_2744","Type parameter defaults can only reference previously declared type parameters."),This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_provided:t(2745,e.DiagnosticCategory.Error,"This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745","This JSX tag's '{0}' prop expects type '{1}' which requires multiple children, but only a single child was provided."),This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided:t(2746,e.DiagnosticCategory.Error,"This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746","This JSX tag's '{0}' prop expects a single child of type '{1}', but multiple children were provided."),_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_type_of_1_is_2:t(2747,e.DiagnosticCategory.Error,"_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747","'{0}' components don't accept text as child elements. Text in JSX has the type 'string', but the expected type of '{1}' is '{2}'."),Cannot_access_ambient_const_enums_when_the_isolatedModules_flag_is_provided:t(2748,e.DiagnosticCategory.Error,"Cannot_access_ambient_const_enums_when_the_isolatedModules_flag_is_provided_2748","Cannot access ambient const enums when the '--isolatedModules' flag is provided."),_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0:t(2749,e.DiagnosticCategory.Error,"_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749","'{0}' refers to a value, but is being used as a type here. Did you mean 'typeof {0}'?"),The_implementation_signature_is_declared_here:t(2750,e.DiagnosticCategory.Error,"The_implementation_signature_is_declared_here_2750","The implementation signature is declared here."),Circularity_originates_in_type_at_this_location:t(2751,e.DiagnosticCategory.Error,"Circularity_originates_in_type_at_this_location_2751","Circularity originates in type at this location."),The_first_export_default_is_here:t(2752,e.DiagnosticCategory.Error,"The_first_export_default_is_here_2752","The first export default is here."),Another_export_default_is_here:t(2753,e.DiagnosticCategory.Error,"Another_export_default_is_here_2753","Another export default is here."),super_may_not_use_type_arguments:t(2754,e.DiagnosticCategory.Error,"super_may_not_use_type_arguments_2754","'super' may not use type arguments."),No_constituent_of_type_0_is_callable:t(2755,e.DiagnosticCategory.Error,"No_constituent_of_type_0_is_callable_2755","No constituent of type '{0}' is callable."),Not_all_constituents_of_type_0_are_callable:t(2756,e.DiagnosticCategory.Error,"Not_all_constituents_of_type_0_are_callable_2756","Not all constituents of type '{0}' are callable."),Type_0_has_no_call_signatures:t(2757,e.DiagnosticCategory.Error,"Type_0_has_no_call_signatures_2757","Type '{0}' has no call signatures."),Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_other:t(2758,e.DiagnosticCategory.Error,"Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758","Each member of the union type '{0}' has signatures, but none of those signatures are compatible with each other."),No_constituent_of_type_0_is_constructable:t(2759,e.DiagnosticCategory.Error,"No_constituent_of_type_0_is_constructable_2759","No constituent of type '{0}' is constructable."),Not_all_constituents_of_type_0_are_constructable:t(2760,e.DiagnosticCategory.Error,"Not_all_constituents_of_type_0_are_constructable_2760","Not all constituents of type '{0}' are constructable."),Type_0_has_no_construct_signatures:t(2761,e.DiagnosticCategory.Error,"Type_0_has_no_construct_signatures_2761","Type '{0}' has no construct signatures."),Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_with_each_other:t(2762,e.DiagnosticCategory.Error,"Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762","Each member of the union type '{0}' has construct signatures, but none of those signatures are compatible with each other."),Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_send_0:t(2763,e.DiagnosticCategory.Error,"Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763","Cannot iterate value because the 'next' method of its iterator expects type '{1}', but for-of will always send '{0}'."),Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_always_send_0:t(2764,e.DiagnosticCategory.Error,"Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764","Cannot iterate value because the 'next' method of its iterator expects type '{1}', but array spread will always send '{0}'."),Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring_will_always_send_0:t(2765,e.DiagnosticCategory.Error,"Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765","Cannot iterate value because the 'next' method of its iterator expects type '{1}', but array destructuring will always send '{0}'."),Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_containing_generator_will_always_send_0:t(2766,e.DiagnosticCategory.Error,"Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_co_2766","Cannot delegate iteration to value because the 'next' method of its iterator expects type '{1}', but the containing generator will always send '{0}'."),The_0_property_of_an_iterator_must_be_a_method:t(2767,e.DiagnosticCategory.Error,"The_0_property_of_an_iterator_must_be_a_method_2767","The '{0}' property of an iterator must be a method."),The_0_property_of_an_async_iterator_must_be_a_method:t(2768,e.DiagnosticCategory.Error,"The_0_property_of_an_async_iterator_must_be_a_method_2768","The '{0}' property of an async iterator must be a method."),No_overload_matches_this_call:t(2769,e.DiagnosticCategory.Error,"No_overload_matches_this_call_2769","No overload matches this call."),The_last_overload_gave_the_following_error:t(2770,e.DiagnosticCategory.Error,"The_last_overload_gave_the_following_error_2770","The last overload gave the following error."),The_last_overload_is_declared_here:t(2771,e.DiagnosticCategory.Error,"The_last_overload_is_declared_here_2771","The last overload is declared here."),Overload_0_of_1_2_gave_the_following_error:t(2772,e.DiagnosticCategory.Error,"Overload_0_of_1_2_gave_the_following_error_2772","Overload {0} of {1}, '{2}', gave the following error."),Did_you_forget_to_use_await:t(2773,e.DiagnosticCategory.Error,"Did_you_forget_to_use_await_2773","Did you forget to use 'await'?"),This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_instead:t(2774,e.DiagnosticCategory.Error,"This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774","This condition will always return true since this function is always defined. Did you mean to call it instead?"),Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation:t(2775,e.DiagnosticCategory.Error,"Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775","Assertions require every name in the call target to be declared with an explicit type annotation."),Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name:t(2776,e.DiagnosticCategory.Error,"Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776","Assertions require the call target to be an identifier or qualified name."),The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access:t(2777,e.DiagnosticCategory.Error,"The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access_2777","The operand of an increment or decrement operator may not be an optional property access."),The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access:t(2778,e.DiagnosticCategory.Error,"The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access_2778","The target of an object rest assignment may not be an optional property access."),The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access:t(2779,e.DiagnosticCategory.Error,"The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779","The left-hand side of an assignment expression may not be an optional property access."),The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access:t(2780,e.DiagnosticCategory.Error,"The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780","The left-hand side of a 'for...in' statement may not be an optional property access."),The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access:t(2781,e.DiagnosticCategory.Error,"The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781","The left-hand side of a 'for...of' statement may not be an optional property access."),_0_needs_an_explicit_type_annotation:t(2782,e.DiagnosticCategory.Message,"_0_needs_an_explicit_type_annotation_2782","'{0}' needs an explicit type annotation."),_0_is_specified_more_than_once_so_this_usage_will_be_overwritten:t(2783,e.DiagnosticCategory.Error,"_0_is_specified_more_than_once_so_this_usage_will_be_overwritten_2783","'{0}' is specified more than once, so this usage will be overwritten."),get_and_set_accessors_cannot_declare_this_parameters:t(2784,e.DiagnosticCategory.Error,"get_and_set_accessors_cannot_declare_this_parameters_2784","'get' and 'set' accessors cannot declare 'this' parameters."),This_spread_always_overwrites_this_property:t(2785,e.DiagnosticCategory.Error,"This_spread_always_overwrites_this_property_2785","This spread always overwrites this property."),_0_cannot_be_used_as_a_JSX_component:t(2786,e.DiagnosticCategory.Error,"_0_cannot_be_used_as_a_JSX_component_2786","'{0}' cannot be used as a JSX component."),Its_return_type_0_is_not_a_valid_JSX_element:t(2787,e.DiagnosticCategory.Error,"Its_return_type_0_is_not_a_valid_JSX_element_2787","Its return type '{0}' is not a valid JSX element."),Its_instance_type_0_is_not_a_valid_JSX_element:t(2788,e.DiagnosticCategory.Error,"Its_instance_type_0_is_not_a_valid_JSX_element_2788","Its instance type '{0}' is not a valid JSX element."),Its_element_type_0_is_not_a_valid_JSX_element:t(2789,e.DiagnosticCategory.Error,"Its_element_type_0_is_not_a_valid_JSX_element_2789","Its element type '{0}' is not a valid JSX element."),The_operand_of_a_delete_operator_must_be_optional:t(2790,e.DiagnosticCategory.Error,"The_operand_of_a_delete_operator_must_be_optional_2790","The operand of a 'delete' operator must be optional."),Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_later:t(2791,e.DiagnosticCategory.Error,"Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791","Exponentiation cannot be performed on 'bigint' values unless the 'target' option is set to 'es2016' or later."),Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_node_or_to_add_aliases_to_the_paths_option:t(2792,e.DiagnosticCategory.Error,"Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_node_or_to_add_aliases_to_th_2792","Cannot find module '{0}'. Did you mean to set the 'moduleResolution' option to 'node', or to add aliases to the 'paths' option?"),The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_are_not_externally_visible:t(2793,e.DiagnosticCategory.Error,"The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793","The call would have succeeded against this implementation, but implementation signatures of overloads are not externally visible."),Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise:t(2794,e.DiagnosticCategory.Error,"Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794","Expected {0} arguments, but got {1}. Did you forget to include 'void' in your type argument to 'Promise'?"),The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types:t(2795,e.DiagnosticCategory.Error,"The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795","The 'intrinsic' keyword can only be used to declare compiler provided intrinsic types."),It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tagged_template_expression_which_cannot_be_invoked:t(2796,e.DiagnosticCategory.Error,"It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tag_2796","It is likely that you are missing a comma to separate these two template expressions. They form a tagged template expression which cannot be invoked."),A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_be_declared_abstract:t(2797,e.DiagnosticCategory.Error,"A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797","A mixin class that extends from a type variable containing an abstract construct signature must also be declared 'abstract'."),The_declaration_was_marked_as_deprecated_here:t(2798,e.DiagnosticCategory.Error,"The_declaration_was_marked_as_deprecated_here_2798","The declaration was marked as deprecated here."),Type_produces_a_tuple_type_that_is_too_large_to_represent:t(2799,e.DiagnosticCategory.Error,"Type_produces_a_tuple_type_that_is_too_large_to_represent_2799","Type produces a tuple type that is too large to represent."),Expression_produces_a_tuple_type_that_is_too_large_to_represent:t(2800,e.DiagnosticCategory.Error,"Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800","Expression produces a tuple type that is too large to represent."),This_condition_will_always_return_true_since_this_0_is_always_defined:t(2801,e.DiagnosticCategory.Error,"This_condition_will_always_return_true_since_this_0_is_always_defined_2801","This condition will always return true since this '{0}' is always defined."),Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es2015_or_higher:t(2802,e.DiagnosticCategory.Error,"Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802","Type '{0}' can only be iterated through when using the '--downlevelIteration' flag or with a '--target' of 'es2015' or higher."),Cannot_assign_to_private_method_0_Private_methods_are_not_writable:t(2803,e.DiagnosticCategory.Error,"Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803","Cannot assign to private method '{0}'. Private methods are not writable."),Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name:t(2804,e.DiagnosticCategory.Error,"Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804","Duplicate identifier '{0}'. Static and instance elements cannot share the same private name."),Private_accessor_was_defined_without_a_getter:t(2806,e.DiagnosticCategory.Error,"Private_accessor_was_defined_without_a_getter_2806","Private accessor was defined without a getter."),This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_one_in_0_Consider_upgrading_your_version_of_0:t(2807,e.DiagnosticCategory.Error,"This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807","This syntax requires an imported helper named '{1}' with {2} parameters, which is not compatible with the one in '{0}'. Consider upgrading your version of '{0}'."),A_get_accessor_must_be_at_least_as_accessible_as_the_setter:t(2808,e.DiagnosticCategory.Error,"A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808","A get accessor must be at least as accessible as the setter"),Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_destructuring_assignment_you_might_need_to_wrap_the_the_whole_assignment_in_parentheses:t(2809,e.DiagnosticCategory.Error,"Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809","Declaration or statement expected. This '=' follows a block of statements, so if you intended to write a destructuring assignment, you might need to wrap the the whole assignment in parentheses."),Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_without_arguments:t(2810,e.DiagnosticCategory.Error,"Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810","Expected 1 argument, but got 0. 'new Promise()' needs a JSDoc hint to produce a 'resolve' that can be called without arguments."),Initializer_for_property_0:t(2811,e.DiagnosticCategory.Error,"Initializer_for_property_0_2811","Initializer for property '{0}'"),Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom:t(2812,e.DiagnosticCategory.Error,"Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812","Property '{0}' does not exist on type '{1}'. Try changing the 'lib' compiler option to include 'dom'."),Class_declaration_cannot_implement_overload_list_for_0:t(2813,e.DiagnosticCategory.Error,"Class_declaration_cannot_implement_overload_list_for_0_2813","Class declaration cannot implement overload list for '{0}'."),Function_with_bodies_can_only_merge_with_classes_that_are_ambient:t(2814,e.DiagnosticCategory.Error,"Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814","Function with bodies can only merge with classes that are ambient."),arguments_cannot_be_referenced_in_property_initializers:t(2815,e.DiagnosticCategory.Error,"arguments_cannot_be_referenced_in_property_initializers_2815","'arguments' cannot be referenced in property initializers."),Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class:t(2816,e.DiagnosticCategory.Error,"Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816","Cannot use 'this' in a static property initializer of a decorated class."),Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block:t(2817,e.DiagnosticCategory.Error,"Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817","Property '{0}' has no initializer and is not definitely assigned in a class static block."),Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializers:t(2818,e.DiagnosticCategory.Error,"Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818","Duplicate identifier '{0}'. Compiler reserves name '{1}' when emitting 'super' references in static initializers."),Namespace_name_cannot_be_0:t(2819,e.DiagnosticCategory.Error,"Namespace_name_cannot_be_0_2819","Namespace name cannot be '{0}'."),Type_0_is_not_assignable_to_type_1_Did_you_mean_2:t(2820,e.DiagnosticCategory.Error,"Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820","Type '{0}' is not assignable to type '{1}'. Did you mean '{2}'?"),Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_or_nodenext:t(2821,e.DiagnosticCategory.Error,"Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_or_nodenext_2821","Import assertions are only supported when the '--module' option is set to 'esnext' or 'nodenext'."),Import_assertions_cannot_be_used_with_type_only_imports_or_exports:t(2822,e.DiagnosticCategory.Error,"Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822","Import assertions cannot be used with type-only imports or exports."),Cannot_find_namespace_0_Did_you_mean_1:t(2833,e.DiagnosticCategory.Error,"Cannot_find_namespace_0_Did_you_mean_1_2833","Cannot find namespace '{0}'. Did you mean '{1}'?"),Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_node16_or_nodenext_Consider_adding_an_extension_to_the_import_path:t(2834,e.DiagnosticCategory.Error,"Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_n_2834","Relative import paths need explicit file extensions in EcmaScript imports when '--moduleResolution' is 'node16' or 'nodenext'. Consider adding an extension to the import path."),Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_node16_or_nodenext_Did_you_mean_0:t(2835,e.DiagnosticCategory.Error,"Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_n_2835","Relative import paths need explicit file extensions in EcmaScript imports when '--moduleResolution' is 'node16' or 'nodenext'. Did you mean '{0}'?"),Import_assertions_are_not_allowed_on_statements_that_transpile_to_commonjs_require_calls:t(2836,e.DiagnosticCategory.Error,"Import_assertions_are_not_allowed_on_statements_that_transpile_to_commonjs_require_calls_2836","Import assertions are not allowed on statements that transpile to commonjs 'require' calls."),Import_assertion_values_must_be_string_literal_expressions:t(2837,e.DiagnosticCategory.Error,"Import_assertion_values_must_be_string_literal_expressions_2837","Import assertion values must be string literal expressions."),All_declarations_of_0_must_have_identical_constraints:t(2838,e.DiagnosticCategory.Error,"All_declarations_of_0_must_have_identical_constraints_2838","All declarations of '{0}' must have identical constraints."),This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value:t(2839,e.DiagnosticCategory.Error,"This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839","This condition will always return '{0}' since JavaScript compares objects by reference, not value."),An_interface_cannot_extend_a_primitive_type_like_0_an_interface_can_only_extend_named_types_and_classes:t(2840,e.DiagnosticCategory.Error,"An_interface_cannot_extend_a_primitive_type_like_0_an_interface_can_only_extend_named_types_and_clas_2840","An interface cannot extend a primitive type like '{0}'; an interface can only extend named types and classes"),The_type_of_this_expression_cannot_be_named_without_a_resolution_mode_assertion_which_is_an_unstable_feature_Use_nightly_TypeScript_to_silence_this_error_Try_updating_with_npm_install_D_typescript_next:t(2841,e.DiagnosticCategory.Error,"The_type_of_this_expression_cannot_be_named_without_a_resolution_mode_assertion_which_is_an_unstable_2841","The type of this expression cannot be named without a 'resolution-mode' assertion, which is an unstable feature. Use nightly TypeScript to silence this error. Try updating with 'npm install -D typescript@next'."),_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation:t(2842,e.DiagnosticCategory.Error,"_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842","'{0}' is an unused renaming of '{1}'. Did you intend to use it as a type annotation?"),We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here:t(2843,e.DiagnosticCategory.Error,"We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here_2843","We can only write a type for '{0}' by adding a type for the entire parameter here."),Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor:t(2844,e.DiagnosticCategory.Error,"Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2844","Type of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor."),This_condition_will_always_return_0:t(2845,e.DiagnosticCategory.Error,"This_condition_will_always_return_0_2845","This condition will always return '{0}'."),Import_declaration_0_is_using_private_name_1:t(4e3,e.DiagnosticCategory.Error,"Import_declaration_0_is_using_private_name_1_4000","Import declaration '{0}' is using private name '{1}'."),Type_parameter_0_of_exported_class_has_or_is_using_private_name_1:t(4002,e.DiagnosticCategory.Error,"Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002","Type parameter '{0}' of exported class has or is using private name '{1}'."),Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1:t(4004,e.DiagnosticCategory.Error,"Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004","Type parameter '{0}' of exported interface has or is using private name '{1}'."),Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1:t(4006,e.DiagnosticCategory.Error,"Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4006","Type parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'."),Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1:t(4008,e.DiagnosticCategory.Error,"Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4008","Type parameter '{0}' of call signature from exported interface has or is using private name '{1}'."),Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1:t(4010,e.DiagnosticCategory.Error,"Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4010","Type parameter '{0}' of public static method from exported class has or is using private name '{1}'."),Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1:t(4012,e.DiagnosticCategory.Error,"Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4012","Type parameter '{0}' of public method from exported class has or is using private name '{1}'."),Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1:t(4014,e.DiagnosticCategory.Error,"Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4014","Type parameter '{0}' of method from exported interface has or is using private name '{1}'."),Type_parameter_0_of_exported_function_has_or_is_using_private_name_1:t(4016,e.DiagnosticCategory.Error,"Type_parameter_0_of_exported_function_has_or_is_using_private_name_1_4016","Type parameter '{0}' of exported function has or is using private name '{1}'."),Implements_clause_of_exported_class_0_has_or_is_using_private_name_1:t(4019,e.DiagnosticCategory.Error,"Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019","Implements clause of exported class '{0}' has or is using private name '{1}'."),extends_clause_of_exported_class_0_has_or_is_using_private_name_1:t(4020,e.DiagnosticCategory.Error,"extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020","'extends' clause of exported class '{0}' has or is using private name '{1}'."),extends_clause_of_exported_class_has_or_is_using_private_name_0:t(4021,e.DiagnosticCategory.Error,"extends_clause_of_exported_class_has_or_is_using_private_name_0_4021","'extends' clause of exported class has or is using private name '{0}'."),extends_clause_of_exported_interface_0_has_or_is_using_private_name_1:t(4022,e.DiagnosticCategory.Error,"extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022","'extends' clause of exported interface '{0}' has or is using private name '{1}'."),Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:t(4023,e.DiagnosticCategory.Error,"Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023","Exported variable '{0}' has or is using name '{1}' from external module {2} but cannot be named."),Exported_variable_0_has_or_is_using_name_1_from_private_module_2:t(4024,e.DiagnosticCategory.Error,"Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024","Exported variable '{0}' has or is using name '{1}' from private module '{2}'."),Exported_variable_0_has_or_is_using_private_name_1:t(4025,e.DiagnosticCategory.Error,"Exported_variable_0_has_or_is_using_private_name_1_4025","Exported variable '{0}' has or is using private name '{1}'."),Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:t(4026,e.DiagnosticCategory.Error,"Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot__4026","Public static property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named."),Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2:t(4027,e.DiagnosticCategory.Error,"Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027","Public static property '{0}' of exported class has or is using name '{1}' from private module '{2}'."),Public_static_property_0_of_exported_class_has_or_is_using_private_name_1:t(4028,e.DiagnosticCategory.Error,"Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028","Public static property '{0}' of exported class has or is using private name '{1}'."),Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:t(4029,e.DiagnosticCategory.Error,"Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_name_4029","Public property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named."),Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2:t(4030,e.DiagnosticCategory.Error,"Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4030","Public property '{0}' of exported class has or is using name '{1}' from private module '{2}'."),Public_property_0_of_exported_class_has_or_is_using_private_name_1:t(4031,e.DiagnosticCategory.Error,"Public_property_0_of_exported_class_has_or_is_using_private_name_1_4031","Public property '{0}' of exported class has or is using private name '{1}'."),Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2:t(4032,e.DiagnosticCategory.Error,"Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032","Property '{0}' of exported interface has or is using name '{1}' from private module '{2}'."),Property_0_of_exported_interface_has_or_is_using_private_name_1:t(4033,e.DiagnosticCategory.Error,"Property_0_of_exported_interface_has_or_is_using_private_name_1_4033","Property '{0}' of exported interface has or is using private name '{1}'."),Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2:t(4034,e.DiagnosticCategory.Error,"Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034","Parameter type of public static setter '{0}' from exported class has or is using name '{1}' from private module '{2}'."),Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1:t(4035,e.DiagnosticCategory.Error,"Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035","Parameter type of public static setter '{0}' from exported class has or is using private name '{1}'."),Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2:t(4036,e.DiagnosticCategory.Error,"Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036","Parameter type of public setter '{0}' from exported class has or is using name '{1}' from private module '{2}'."),Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1:t(4037,e.DiagnosticCategory.Error,"Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037","Parameter type of public setter '{0}' from exported class has or is using private name '{1}'."),Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:t(4038,e.DiagnosticCategory.Error,"Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_modul_4038","Return type of public static getter '{0}' from exported class has or is using name '{1}' from external module {2} but cannot be named."),Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2:t(4039,e.DiagnosticCategory.Error,"Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_4039","Return type of public static getter '{0}' from exported class has or is using name '{1}' from private module '{2}'."),Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1:t(4040,e.DiagnosticCategory.Error,"Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1_4040","Return type of public static getter '{0}' from exported class has or is using private name '{1}'."),Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:t(4041,e.DiagnosticCategory.Error,"Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_4041","Return type of public getter '{0}' from exported class has or is using name '{1}' from external module {2} but cannot be named."),Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2:t(4042,e.DiagnosticCategory.Error,"Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4042","Return type of public getter '{0}' from exported class has or is using name '{1}' from private module '{2}'."),Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1:t(4043,e.DiagnosticCategory.Error,"Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1_4043","Return type of public getter '{0}' from exported class has or is using private name '{1}'."),Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1:t(4044,e.DiagnosticCategory.Error,"Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044","Return type of constructor signature from exported interface has or is using name '{0}' from private module '{1}'."),Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0:t(4045,e.DiagnosticCategory.Error,"Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0_4045","Return type of constructor signature from exported interface has or is using private name '{0}'."),Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1:t(4046,e.DiagnosticCategory.Error,"Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046","Return type of call signature from exported interface has or is using name '{0}' from private module '{1}'."),Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0:t(4047,e.DiagnosticCategory.Error,"Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047","Return type of call signature from exported interface has or is using private name '{0}'."),Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1:t(4048,e.DiagnosticCategory.Error,"Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4048","Return type of index signature from exported interface has or is using name '{0}' from private module '{1}'."),Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0:t(4049,e.DiagnosticCategory.Error,"Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0_4049","Return type of index signature from exported interface has or is using private name '{0}'."),Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named:t(4050,e.DiagnosticCategory.Error,"Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050","Return type of public static method from exported class has or is using name '{0}' from external module {1} but cannot be named."),Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1:t(4051,e.DiagnosticCategory.Error,"Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051","Return type of public static method from exported class has or is using name '{0}' from private module '{1}'."),Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0:t(4052,e.DiagnosticCategory.Error,"Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052","Return type of public static method from exported class has or is using private name '{0}'."),Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named:t(4053,e.DiagnosticCategory.Error,"Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_c_4053","Return type of public method from exported class has or is using name '{0}' from external module {1} but cannot be named."),Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1:t(4054,e.DiagnosticCategory.Error,"Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4054","Return type of public method from exported class has or is using name '{0}' from private module '{1}'."),Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0:t(4055,e.DiagnosticCategory.Error,"Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0_4055","Return type of public method from exported class has or is using private name '{0}'."),Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1:t(4056,e.DiagnosticCategory.Error,"Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4056","Return type of method from exported interface has or is using name '{0}' from private module '{1}'."),Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0:t(4057,e.DiagnosticCategory.Error,"Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0_4057","Return type of method from exported interface has or is using private name '{0}'."),Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named:t(4058,e.DiagnosticCategory.Error,"Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named_4058","Return type of exported function has or is using name '{0}' from external module {1} but cannot be named."),Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1:t(4059,e.DiagnosticCategory.Error,"Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1_4059","Return type of exported function has or is using name '{0}' from private module '{1}'."),Return_type_of_exported_function_has_or_is_using_private_name_0:t(4060,e.DiagnosticCategory.Error,"Return_type_of_exported_function_has_or_is_using_private_name_0_4060","Return type of exported function has or is using private name '{0}'."),Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:t(4061,e.DiagnosticCategory.Error,"Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_can_4061","Parameter '{0}' of constructor from exported class has or is using name '{1}' from external module {2} but cannot be named."),Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2:t(4062,e.DiagnosticCategory.Error,"Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2_4062","Parameter '{0}' of constructor from exported class has or is using name '{1}' from private module '{2}'."),Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1:t(4063,e.DiagnosticCategory.Error,"Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1_4063","Parameter '{0}' of constructor from exported class has or is using private name '{1}'."),Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2:t(4064,e.DiagnosticCategory.Error,"Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_mod_4064","Parameter '{0}' of constructor signature from exported interface has or is using name '{1}' from private module '{2}'."),Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1:t(4065,e.DiagnosticCategory.Error,"Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4065","Parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'."),Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2:t(4066,e.DiagnosticCategory.Error,"Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4066","Parameter '{0}' of call signature from exported interface has or is using name '{1}' from private module '{2}'."),Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1:t(4067,e.DiagnosticCategory.Error,"Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4067","Parameter '{0}' of call signature from exported interface has or is using private name '{1}'."),Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:t(4068,e.DiagnosticCategory.Error,"Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module__4068","Parameter '{0}' of public static method from exported class has or is using name '{1}' from external module {2} but cannot be named."),Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2:t(4069,e.DiagnosticCategory.Error,"Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4069","Parameter '{0}' of public static method from exported class has or is using name '{1}' from private module '{2}'."),Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1:t(4070,e.DiagnosticCategory.Error,"Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4070","Parameter '{0}' of public static method from exported class has or is using private name '{1}'."),Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:t(4071,e.DiagnosticCategory.Error,"Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_c_4071","Parameter '{0}' of public method from exported class has or is using name '{1}' from external module {2} but cannot be named."),Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2:t(4072,e.DiagnosticCategory.Error,"Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4072","Parameter '{0}' of public method from exported class has or is using name '{1}' from private module '{2}'."),Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1:t(4073,e.DiagnosticCategory.Error,"Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4073","Parameter '{0}' of public method from exported class has or is using private name '{1}'."),Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2:t(4074,e.DiagnosticCategory.Error,"Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4074","Parameter '{0}' of method from exported interface has or is using name '{1}' from private module '{2}'."),Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1:t(4075,e.DiagnosticCategory.Error,"Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4075","Parameter '{0}' of method from exported interface has or is using private name '{1}'."),Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:t(4076,e.DiagnosticCategory.Error,"Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4076","Parameter '{0}' of exported function has or is using name '{1}' from external module {2} but cannot be named."),Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2:t(4077,e.DiagnosticCategory.Error,"Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2_4077","Parameter '{0}' of exported function has or is using name '{1}' from private module '{2}'."),Parameter_0_of_exported_function_has_or_is_using_private_name_1:t(4078,e.DiagnosticCategory.Error,"Parameter_0_of_exported_function_has_or_is_using_private_name_1_4078","Parameter '{0}' of exported function has or is using private name '{1}'."),Exported_type_alias_0_has_or_is_using_private_name_1:t(4081,e.DiagnosticCategory.Error,"Exported_type_alias_0_has_or_is_using_private_name_1_4081","Exported type alias '{0}' has or is using private name '{1}'."),Default_export_of_the_module_has_or_is_using_private_name_0:t(4082,e.DiagnosticCategory.Error,"Default_export_of_the_module_has_or_is_using_private_name_0_4082","Default export of the module has or is using private name '{0}'."),Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1:t(4083,e.DiagnosticCategory.Error,"Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1_4083","Type parameter '{0}' of exported type alias has or is using private name '{1}'."),Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2:t(4084,e.DiagnosticCategory.Error,"Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084","Exported type alias '{0}' has or is using private name '{1}' from module {2}."),Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_library_to_resolve_the_conflict:t(4090,e.DiagnosticCategory.Error,"Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_librar_4090","Conflicting definitions for '{0}' found at '{1}' and '{2}'. Consider installing a specific version of this library to resolve the conflict."),Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2:t(4091,e.DiagnosticCategory.Error,"Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4091","Parameter '{0}' of index signature from exported interface has or is using name '{1}' from private module '{2}'."),Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1:t(4092,e.DiagnosticCategory.Error,"Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1_4092","Parameter '{0}' of index signature from exported interface has or is using private name '{1}'."),Property_0_of_exported_class_expression_may_not_be_private_or_protected:t(4094,e.DiagnosticCategory.Error,"Property_0_of_exported_class_expression_may_not_be_private_or_protected_4094","Property '{0}' of exported class expression may not be private or protected."),Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:t(4095,e.DiagnosticCategory.Error,"Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_4095","Public static method '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named."),Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2:t(4096,e.DiagnosticCategory.Error,"Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4096","Public static method '{0}' of exported class has or is using name '{1}' from private module '{2}'."),Public_static_method_0_of_exported_class_has_or_is_using_private_name_1:t(4097,e.DiagnosticCategory.Error,"Public_static_method_0_of_exported_class_has_or_is_using_private_name_1_4097","Public static method '{0}' of exported class has or is using private name '{1}'."),Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:t(4098,e.DiagnosticCategory.Error,"Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098","Public method '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named."),Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2:t(4099,e.DiagnosticCategory.Error,"Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099","Public method '{0}' of exported class has or is using name '{1}' from private module '{2}'."),Public_method_0_of_exported_class_has_or_is_using_private_name_1:t(4100,e.DiagnosticCategory.Error,"Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100","Public method '{0}' of exported class has or is using private name '{1}'."),Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2:t(4101,e.DiagnosticCategory.Error,"Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101","Method '{0}' of exported interface has or is using name '{1}' from private module '{2}'."),Method_0_of_exported_interface_has_or_is_using_private_name_1:t(4102,e.DiagnosticCategory.Error,"Method_0_of_exported_interface_has_or_is_using_private_name_1_4102","Method '{0}' of exported interface has or is using private name '{1}'."),Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1:t(4103,e.DiagnosticCategory.Error,"Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1_4103","Type parameter '{0}' of exported mapped object type is using private name '{1}'."),The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1:t(4104,e.DiagnosticCategory.Error,"The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104","The type '{0}' is 'readonly' and cannot be assigned to the mutable type '{1}'."),Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter:t(4105,e.DiagnosticCategory.Error,"Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105","Private or protected member '{0}' cannot be accessed on a type parameter."),Parameter_0_of_accessor_has_or_is_using_private_name_1:t(4106,e.DiagnosticCategory.Error,"Parameter_0_of_accessor_has_or_is_using_private_name_1_4106","Parameter '{0}' of accessor has or is using private name '{1}'."),Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2:t(4107,e.DiagnosticCategory.Error,"Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2_4107","Parameter '{0}' of accessor has or is using name '{1}' from private module '{2}'."),Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:t(4108,e.DiagnosticCategory.Error,"Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4108","Parameter '{0}' of accessor has or is using name '{1}' from external module '{2}' but cannot be named."),Type_arguments_for_0_circularly_reference_themselves:t(4109,e.DiagnosticCategory.Error,"Type_arguments_for_0_circularly_reference_themselves_4109","Type arguments for '{0}' circularly reference themselves."),Tuple_type_arguments_circularly_reference_themselves:t(4110,e.DiagnosticCategory.Error,"Tuple_type_arguments_circularly_reference_themselves_4110","Tuple type arguments circularly reference themselves."),Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0:t(4111,e.DiagnosticCategory.Error,"Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111","Property '{0}' comes from an index signature, so it must be accessed with ['{0}']."),This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another_class:t(4112,e.DiagnosticCategory.Error,"This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112","This member cannot have an 'override' modifier because its containing class '{0}' does not extend another class."),This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0:t(4113,e.DiagnosticCategory.Error,"This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113","This member cannot have an 'override' modifier because it is not declared in the base class '{0}'."),This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0:t(4114,e.DiagnosticCategory.Error,"This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114","This member must have an 'override' modifier because it overrides a member in the base class '{0}'."),This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0:t(4115,e.DiagnosticCategory.Error,"This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115","This parameter property must have an 'override' modifier because it overrides a member in base class '{0}'."),This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared_in_the_base_class_0:t(4116,e.DiagnosticCategory.Error,"This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116","This member must have an 'override' modifier because it overrides an abstract method that is declared in the base class '{0}'."),This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1:t(4117,e.DiagnosticCategory.Error,"This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117","This member cannot have an 'override' modifier because it is not declared in the base class '{0}'. Did you mean '{1}'?"),The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized:t(4118,e.DiagnosticCategory.Error,"The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118","The type of this node cannot be serialized because its property '{0}' cannot be serialized."),This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0:t(4119,e.DiagnosticCategory.Error,"This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_4119","This member must have a JSDoc comment with an '@override' tag because it overrides a member in the base class '{0}'."),This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0:t(4120,e.DiagnosticCategory.Error,"This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120","This parameter property must have a JSDoc comment with an '@override' tag because it overrides a member in the base class '{0}'."),This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_extend_another_class:t(4121,e.DiagnosticCategory.Error,"This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_4121","This member cannot have a JSDoc comment with an '@override' tag because its containing class '{0}' does not extend another class."),This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0:t(4122,e.DiagnosticCategory.Error,"This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122","This member cannot have a JSDoc comment with an '@override' tag because it is not declared in the base class '{0}'."),This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1:t(4123,e.DiagnosticCategory.Error,"This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123","This member cannot have a JSDoc comment with an 'override' tag because it is not declared in the base class '{0}'. Did you mean '{1}'?"),Compiler_option_0_of_value_1_is_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_with_npm_install_D_typescript_next:t(4124,e.DiagnosticCategory.Error,"Compiler_option_0_of_value_1_is_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_w_4124","Compiler option '{0}' of value '{1}' is unstable. Use nightly TypeScript to silence this error. Try updating with 'npm install -D typescript@next'."),resolution_mode_assertions_are_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_with_npm_install_D_typescript_next:t(4125,e.DiagnosticCategory.Error,"resolution_mode_assertions_are_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_wi_4125","'resolution-mode' assertions are unstable. Use nightly TypeScript to silence this error. Try updating with 'npm install -D typescript@next'."),The_current_host_does_not_support_the_0_option:t(5001,e.DiagnosticCategory.Error,"The_current_host_does_not_support_the_0_option_5001","The current host does not support the '{0}' option."),Cannot_find_the_common_subdirectory_path_for_the_input_files:t(5009,e.DiagnosticCategory.Error,"Cannot_find_the_common_subdirectory_path_for_the_input_files_5009","Cannot find the common subdirectory path for the input files."),File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0:t(5010,e.DiagnosticCategory.Error,"File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010","File specification cannot end in a recursive directory wildcard ('**'): '{0}'."),Cannot_read_file_0_Colon_1:t(5012,e.DiagnosticCategory.Error,"Cannot_read_file_0_Colon_1_5012","Cannot read file '{0}': {1}."),Failed_to_parse_file_0_Colon_1:t(5014,e.DiagnosticCategory.Error,"Failed_to_parse_file_0_Colon_1_5014","Failed to parse file '{0}': {1}."),Unknown_compiler_option_0:t(5023,e.DiagnosticCategory.Error,"Unknown_compiler_option_0_5023","Unknown compiler option '{0}'."),Compiler_option_0_requires_a_value_of_type_1:t(5024,e.DiagnosticCategory.Error,"Compiler_option_0_requires_a_value_of_type_1_5024","Compiler option '{0}' requires a value of type {1}."),Unknown_compiler_option_0_Did_you_mean_1:t(5025,e.DiagnosticCategory.Error,"Unknown_compiler_option_0_Did_you_mean_1_5025","Unknown compiler option '{0}'. Did you mean '{1}'?"),Could_not_write_file_0_Colon_1:t(5033,e.DiagnosticCategory.Error,"Could_not_write_file_0_Colon_1_5033","Could not write file '{0}': {1}."),Option_project_cannot_be_mixed_with_source_files_on_a_command_line:t(5042,e.DiagnosticCategory.Error,"Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042","Option 'project' cannot be mixed with source files on a command line."),Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES2015_or_higher:t(5047,e.DiagnosticCategory.Error,"Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047","Option 'isolatedModules' can only be used when either option '--module' is provided or option 'target' is 'ES2015' or higher."),Option_0_cannot_be_specified_when_option_target_is_ES3:t(5048,e.DiagnosticCategory.Error,"Option_0_cannot_be_specified_when_option_target_is_ES3_5048","Option '{0}' cannot be specified when option 'target' is 'ES3'."),Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided:t(5051,e.DiagnosticCategory.Error,"Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051","Option '{0} can only be used when either option '--inlineSourceMap' or option '--sourceMap' is provided."),Option_0_cannot_be_specified_without_specifying_option_1:t(5052,e.DiagnosticCategory.Error,"Option_0_cannot_be_specified_without_specifying_option_1_5052","Option '{0}' cannot be specified without specifying option '{1}'."),Option_0_cannot_be_specified_with_option_1:t(5053,e.DiagnosticCategory.Error,"Option_0_cannot_be_specified_with_option_1_5053","Option '{0}' cannot be specified with option '{1}'."),A_tsconfig_json_file_is_already_defined_at_Colon_0:t(5054,e.DiagnosticCategory.Error,"A_tsconfig_json_file_is_already_defined_at_Colon_0_5054","A 'tsconfig.json' file is already defined at: '{0}'."),Cannot_write_file_0_because_it_would_overwrite_input_file:t(5055,e.DiagnosticCategory.Error,"Cannot_write_file_0_because_it_would_overwrite_input_file_5055","Cannot write file '{0}' because it would overwrite input file."),Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files:t(5056,e.DiagnosticCategory.Error,"Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056","Cannot write file '{0}' because it would be overwritten by multiple input files."),Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0:t(5057,e.DiagnosticCategory.Error,"Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0_5057","Cannot find a tsconfig.json file at the specified directory: '{0}'."),The_specified_path_does_not_exist_Colon_0:t(5058,e.DiagnosticCategory.Error,"The_specified_path_does_not_exist_Colon_0_5058","The specified path does not exist: '{0}'."),Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier:t(5059,e.DiagnosticCategory.Error,"Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059","Invalid value for '--reactNamespace'. '{0}' is not a valid identifier."),Pattern_0_can_have_at_most_one_Asterisk_character:t(5061,e.DiagnosticCategory.Error,"Pattern_0_can_have_at_most_one_Asterisk_character_5061","Pattern '{0}' can have at most one '*' character."),Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character:t(5062,e.DiagnosticCategory.Error,"Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character_5062","Substitution '{0}' in pattern '{1}' can have at most one '*' character."),Substitutions_for_pattern_0_should_be_an_array:t(5063,e.DiagnosticCategory.Error,"Substitutions_for_pattern_0_should_be_an_array_5063","Substitutions for pattern '{0}' should be an array."),Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2:t(5064,e.DiagnosticCategory.Error,"Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064","Substitution '{0}' for pattern '{1}' has incorrect type, expected 'string', got '{2}'."),File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0:t(5065,e.DiagnosticCategory.Error,"File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065","File specification cannot contain a parent directory ('..') that appears after a recursive directory wildcard ('**'): '{0}'."),Substitutions_for_pattern_0_shouldn_t_be_an_empty_array:t(5066,e.DiagnosticCategory.Error,"Substitutions_for_pattern_0_shouldn_t_be_an_empty_array_5066","Substitutions for pattern '{0}' shouldn't be an empty array."),Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name:t(5067,e.DiagnosticCategory.Error,"Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067","Invalid value for 'jsxFactory'. '{0}' is not a valid identifier or qualified-name."),Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript_files_Learn_more_at_https_Colon_Slash_Slashaka_ms_Slashtsconfig:t(5068,e.DiagnosticCategory.Error,"Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068","Adding a tsconfig.json file will help organize projects that contain both TypeScript and JavaScript files. Learn more at https://aka.ms/tsconfig."),Option_0_cannot_be_specified_without_specifying_option_1_or_option_2:t(5069,e.DiagnosticCategory.Error,"Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069","Option '{0}' cannot be specified without specifying option '{1}' or option '{2}'."),Option_resolveJsonModule_cannot_be_specified_without_node_module_resolution_strategy:t(5070,e.DiagnosticCategory.Error,"Option_resolveJsonModule_cannot_be_specified_without_node_module_resolution_strategy_5070","Option '--resolveJsonModule' cannot be specified without 'node' module resolution strategy."),Option_resolveJsonModule_can_only_be_specified_when_module_code_generation_is_commonjs_amd_es2015_or_esNext:t(5071,e.DiagnosticCategory.Error,"Option_resolveJsonModule_can_only_be_specified_when_module_code_generation_is_commonjs_amd_es2015_or_5071","Option '--resolveJsonModule' can only be specified when module code generation is 'commonjs', 'amd', 'es2015' or 'esNext'."),Unknown_build_option_0:t(5072,e.DiagnosticCategory.Error,"Unknown_build_option_0_5072","Unknown build option '{0}'."),Build_option_0_requires_a_value_of_type_1:t(5073,e.DiagnosticCategory.Error,"Build_option_0_requires_a_value_of_type_1_5073","Build option '{0}' requires a value of type {1}."),Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBuildInfoFile_is_specified:t(5074,e.DiagnosticCategory.Error,"Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074","Option '--incremental' can only be specified using tsconfig, emitting to single file or when option '--tsBuildInfoFile' is specified."),_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_constraint_2:t(5075,e.DiagnosticCategory.Error,"_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075","'{0}' is assignable to the constraint of type '{1}', but '{1}' could be instantiated with a different subtype of constraint '{2}'."),_0_and_1_operations_cannot_be_mixed_without_parentheses:t(5076,e.DiagnosticCategory.Error,"_0_and_1_operations_cannot_be_mixed_without_parentheses_5076","'{0}' and '{1}' operations cannot be mixed without parentheses."),Unknown_build_option_0_Did_you_mean_1:t(5077,e.DiagnosticCategory.Error,"Unknown_build_option_0_Did_you_mean_1_5077","Unknown build option '{0}'. Did you mean '{1}'?"),Unknown_watch_option_0:t(5078,e.DiagnosticCategory.Error,"Unknown_watch_option_0_5078","Unknown watch option '{0}'."),Unknown_watch_option_0_Did_you_mean_1:t(5079,e.DiagnosticCategory.Error,"Unknown_watch_option_0_Did_you_mean_1_5079","Unknown watch option '{0}'. Did you mean '{1}'?"),Watch_option_0_requires_a_value_of_type_1:t(5080,e.DiagnosticCategory.Error,"Watch_option_0_requires_a_value_of_type_1_5080","Watch option '{0}' requires a value of type {1}."),Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0:t(5081,e.DiagnosticCategory.Error,"Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0_5081","Cannot find a tsconfig.json file at the current directory: {0}."),_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1:t(5082,e.DiagnosticCategory.Error,"_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082","'{0}' could be instantiated with an arbitrary type which could be unrelated to '{1}'."),Cannot_read_file_0:t(5083,e.DiagnosticCategory.Error,"Cannot_read_file_0_5083","Cannot read file '{0}'."),Tuple_members_must_all_have_names_or_all_not_have_names:t(5084,e.DiagnosticCategory.Error,"Tuple_members_must_all_have_names_or_all_not_have_names_5084","Tuple members must all have names or all not have names."),A_tuple_member_cannot_be_both_optional_and_rest:t(5085,e.DiagnosticCategory.Error,"A_tuple_member_cannot_be_both_optional_and_rest_5085","A tuple member cannot be both optional and rest."),A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_colon_rather_than_after_the_type:t(5086,e.DiagnosticCategory.Error,"A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086","A labeled tuple element is declared as optional with a question mark after the name and before the colon, rather than after the type."),A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type:t(5087,e.DiagnosticCategory.Error,"A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087","A labeled tuple element is declared as rest with a '...' before the name, rather than before the type."),The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialized_A_type_annotation_is_necessary:t(5088,e.DiagnosticCategory.Error,"The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088","The inferred type of '{0}' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary."),Option_0_cannot_be_specified_when_option_jsx_is_1:t(5089,e.DiagnosticCategory.Error,"Option_0_cannot_be_specified_when_option_jsx_is_1_5089","Option '{0}' cannot be specified when option 'jsx' is '{1}'."),Non_relative_paths_are_not_allowed_when_baseUrl_is_not_set_Did_you_forget_a_leading_Slash:t(5090,e.DiagnosticCategory.Error,"Non_relative_paths_are_not_allowed_when_baseUrl_is_not_set_Did_you_forget_a_leading_Slash_5090","Non-relative paths are not allowed when 'baseUrl' is not set. Did you forget a leading './'?"),Option_preserveConstEnums_cannot_be_disabled_when_isolatedModules_is_enabled:t(5091,e.DiagnosticCategory.Error,"Option_preserveConstEnums_cannot_be_disabled_when_isolatedModules_is_enabled_5091","Option 'preserveConstEnums' cannot be disabled when 'isolatedModules' is enabled."),The_root_value_of_a_0_file_must_be_an_object:t(5092,e.DiagnosticCategory.Error,"The_root_value_of_a_0_file_must_be_an_object_5092","The root value of a '{0}' file must be an object."),Compiler_option_0_may_only_be_used_with_build:t(5093,e.DiagnosticCategory.Error,"Compiler_option_0_may_only_be_used_with_build_5093","Compiler option '--{0}' may only be used with '--build'."),Compiler_option_0_may_not_be_used_with_build:t(5094,e.DiagnosticCategory.Error,"Compiler_option_0_may_not_be_used_with_build_5094","Compiler option '--{0}' may not be used with '--build'."),Option_preserveValueImports_can_only_be_used_when_module_is_set_to_es2015_or_later:t(5095,e.DiagnosticCategory.Error,"Option_preserveValueImports_can_only_be_used_when_module_is_set_to_es2015_or_later_5095","Option 'preserveValueImports' can only be used when 'module' is set to 'es2015' or later."),Generates_a_sourcemap_for_each_corresponding_d_ts_file:t(6e3,e.DiagnosticCategory.Message,"Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000","Generates a sourcemap for each corresponding '.d.ts' file."),Concatenate_and_emit_output_to_single_file:t(6001,e.DiagnosticCategory.Message,"Concatenate_and_emit_output_to_single_file_6001","Concatenate and emit output to single file."),Generates_corresponding_d_ts_file:t(6002,e.DiagnosticCategory.Message,"Generates_corresponding_d_ts_file_6002","Generates corresponding '.d.ts' file."),Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations:t(6004,e.DiagnosticCategory.Message,"Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004","Specify the location where debugger should locate TypeScript files instead of source locations."),Watch_input_files:t(6005,e.DiagnosticCategory.Message,"Watch_input_files_6005","Watch input files."),Redirect_output_structure_to_the_directory:t(6006,e.DiagnosticCategory.Message,"Redirect_output_structure_to_the_directory_6006","Redirect output structure to the directory."),Do_not_erase_const_enum_declarations_in_generated_code:t(6007,e.DiagnosticCategory.Message,"Do_not_erase_const_enum_declarations_in_generated_code_6007","Do not erase const enum declarations in generated code."),Do_not_emit_outputs_if_any_errors_were_reported:t(6008,e.DiagnosticCategory.Message,"Do_not_emit_outputs_if_any_errors_were_reported_6008","Do not emit outputs if any errors were reported."),Do_not_emit_comments_to_output:t(6009,e.DiagnosticCategory.Message,"Do_not_emit_comments_to_output_6009","Do not emit comments to output."),Do_not_emit_outputs:t(6010,e.DiagnosticCategory.Message,"Do_not_emit_outputs_6010","Do not emit outputs."),Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typechecking:t(6011,e.DiagnosticCategory.Message,"Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011","Allow default imports from modules with no default export. This does not affect code emit, just typechecking."),Skip_type_checking_of_declaration_files:t(6012,e.DiagnosticCategory.Message,"Skip_type_checking_of_declaration_files_6012","Skip type checking of declaration files."),Do_not_resolve_the_real_path_of_symlinks:t(6013,e.DiagnosticCategory.Message,"Do_not_resolve_the_real_path_of_symlinks_6013","Do not resolve the real path of symlinks."),Only_emit_d_ts_declaration_files:t(6014,e.DiagnosticCategory.Message,"Only_emit_d_ts_declaration_files_6014","Only emit '.d.ts' declaration files."),Specify_ECMAScript_target_version:t(6015,e.DiagnosticCategory.Message,"Specify_ECMAScript_target_version_6015","Specify ECMAScript target version."),Specify_module_code_generation:t(6016,e.DiagnosticCategory.Message,"Specify_module_code_generation_6016","Specify module code generation."),Print_this_message:t(6017,e.DiagnosticCategory.Message,"Print_this_message_6017","Print this message."),Print_the_compiler_s_version:t(6019,e.DiagnosticCategory.Message,"Print_the_compiler_s_version_6019","Print the compiler's version."),Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json:t(6020,e.DiagnosticCategory.Message,"Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020","Compile the project given the path to its configuration file, or to a folder with a 'tsconfig.json'."),Syntax_Colon_0:t(6023,e.DiagnosticCategory.Message,"Syntax_Colon_0_6023","Syntax: {0}"),options:t(6024,e.DiagnosticCategory.Message,"options_6024","options"),file:t(6025,e.DiagnosticCategory.Message,"file_6025","file"),Examples_Colon_0:t(6026,e.DiagnosticCategory.Message,"Examples_Colon_0_6026","Examples: {0}"),Options_Colon:t(6027,e.DiagnosticCategory.Message,"Options_Colon_6027","Options:"),Version_0:t(6029,e.DiagnosticCategory.Message,"Version_0_6029","Version {0}"),Insert_command_line_options_and_files_from_a_file:t(6030,e.DiagnosticCategory.Message,"Insert_command_line_options_and_files_from_a_file_6030","Insert command line options and files from a file."),Starting_compilation_in_watch_mode:t(6031,e.DiagnosticCategory.Message,"Starting_compilation_in_watch_mode_6031","Starting compilation in watch mode..."),File_change_detected_Starting_incremental_compilation:t(6032,e.DiagnosticCategory.Message,"File_change_detected_Starting_incremental_compilation_6032","File change detected. Starting incremental compilation..."),KIND:t(6034,e.DiagnosticCategory.Message,"KIND_6034","KIND"),FILE:t(6035,e.DiagnosticCategory.Message,"FILE_6035","FILE"),VERSION:t(6036,e.DiagnosticCategory.Message,"VERSION_6036","VERSION"),LOCATION:t(6037,e.DiagnosticCategory.Message,"LOCATION_6037","LOCATION"),DIRECTORY:t(6038,e.DiagnosticCategory.Message,"DIRECTORY_6038","DIRECTORY"),STRATEGY:t(6039,e.DiagnosticCategory.Message,"STRATEGY_6039","STRATEGY"),FILE_OR_DIRECTORY:t(6040,e.DiagnosticCategory.Message,"FILE_OR_DIRECTORY_6040","FILE OR DIRECTORY"),Errors_Files:t(6041,e.DiagnosticCategory.Message,"Errors_Files_6041","Errors  Files"),Generates_corresponding_map_file:t(6043,e.DiagnosticCategory.Message,"Generates_corresponding_map_file_6043","Generates corresponding '.map' file."),Compiler_option_0_expects_an_argument:t(6044,e.DiagnosticCategory.Error,"Compiler_option_0_expects_an_argument_6044","Compiler option '{0}' expects an argument."),Unterminated_quoted_string_in_response_file_0:t(6045,e.DiagnosticCategory.Error,"Unterminated_quoted_string_in_response_file_0_6045","Unterminated quoted string in response file '{0}'."),Argument_for_0_option_must_be_Colon_1:t(6046,e.DiagnosticCategory.Error,"Argument_for_0_option_must_be_Colon_1_6046","Argument for '{0}' option must be: {1}."),Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1:t(6048,e.DiagnosticCategory.Error,"Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1_6048","Locale must be of the form <language> or <language>-<territory>. For example '{0}' or '{1}'."),Unable_to_open_file_0:t(6050,e.DiagnosticCategory.Error,"Unable_to_open_file_0_6050","Unable to open file '{0}'."),Corrupted_locale_file_0:t(6051,e.DiagnosticCategory.Error,"Corrupted_locale_file_0_6051","Corrupted locale file {0}."),Raise_error_on_expressions_and_declarations_with_an_implied_any_type:t(6052,e.DiagnosticCategory.Message,"Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052","Raise error on expressions and declarations with an implied 'any' type."),File_0_not_found:t(6053,e.DiagnosticCategory.Error,"File_0_not_found_6053","File '{0}' not found."),File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1:t(6054,e.DiagnosticCategory.Error,"File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054","File '{0}' has an unsupported extension. The only supported extensions are {1}."),Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures:t(6055,e.DiagnosticCategory.Message,"Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055","Suppress noImplicitAny errors for indexing objects lacking index signatures."),Do_not_emit_declarations_for_code_that_has_an_internal_annotation:t(6056,e.DiagnosticCategory.Message,"Do_not_emit_declarations_for_code_that_has_an_internal_annotation_6056","Do not emit declarations for code that has an '@internal' annotation."),Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir:t(6058,e.DiagnosticCategory.Message,"Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058","Specify the root directory of input files. Use to control the output directory structure with --outDir."),File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files:t(6059,e.DiagnosticCategory.Error,"File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059","File '{0}' is not under 'rootDir' '{1}'. 'rootDir' is expected to contain all source files."),Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix:t(6060,e.DiagnosticCategory.Message,"Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060","Specify the end of line sequence to be used when emitting files: 'CRLF' (dos) or 'LF' (unix)."),NEWLINE:t(6061,e.DiagnosticCategory.Message,"NEWLINE_6061","NEWLINE"),Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line:t(6064,e.DiagnosticCategory.Error,"Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064","Option '{0}' can only be specified in 'tsconfig.json' file or set to 'null' on command line."),Enables_experimental_support_for_ES7_decorators:t(6065,e.DiagnosticCategory.Message,"Enables_experimental_support_for_ES7_decorators_6065","Enables experimental support for ES7 decorators."),Enables_experimental_support_for_emitting_type_metadata_for_decorators:t(6066,e.DiagnosticCategory.Message,"Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066","Enables experimental support for emitting type metadata for decorators."),Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6:t(6069,e.DiagnosticCategory.Message,"Specify_module_resolution_strategy_Colon_node_Node_js_or_classic_TypeScript_pre_1_6_6069","Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6)."),Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file:t(6070,e.DiagnosticCategory.Message,"Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070","Initializes a TypeScript project and creates a tsconfig.json file."),Successfully_created_a_tsconfig_json_file:t(6071,e.DiagnosticCategory.Message,"Successfully_created_a_tsconfig_json_file_6071","Successfully created a tsconfig.json file."),Suppress_excess_property_checks_for_object_literals:t(6072,e.DiagnosticCategory.Message,"Suppress_excess_property_checks_for_object_literals_6072","Suppress excess property checks for object literals."),Stylize_errors_and_messages_using_color_and_context_experimental:t(6073,e.DiagnosticCategory.Message,"Stylize_errors_and_messages_using_color_and_context_experimental_6073","Stylize errors and messages using color and context (experimental)."),Do_not_report_errors_on_unused_labels:t(6074,e.DiagnosticCategory.Message,"Do_not_report_errors_on_unused_labels_6074","Do not report errors on unused labels."),Report_error_when_not_all_code_paths_in_function_return_a_value:t(6075,e.DiagnosticCategory.Message,"Report_error_when_not_all_code_paths_in_function_return_a_value_6075","Report error when not all code paths in function return a value."),Report_errors_for_fallthrough_cases_in_switch_statement:t(6076,e.DiagnosticCategory.Message,"Report_errors_for_fallthrough_cases_in_switch_statement_6076","Report errors for fallthrough cases in switch statement."),Do_not_report_errors_on_unreachable_code:t(6077,e.DiagnosticCategory.Message,"Do_not_report_errors_on_unreachable_code_6077","Do not report errors on unreachable code."),Disallow_inconsistently_cased_references_to_the_same_file:t(6078,e.DiagnosticCategory.Message,"Disallow_inconsistently_cased_references_to_the_same_file_6078","Disallow inconsistently-cased references to the same file."),Specify_library_files_to_be_included_in_the_compilation:t(6079,e.DiagnosticCategory.Message,"Specify_library_files_to_be_included_in_the_compilation_6079","Specify library files to be included in the compilation."),Specify_JSX_code_generation:t(6080,e.DiagnosticCategory.Message,"Specify_JSX_code_generation_6080","Specify JSX code generation."),File_0_has_an_unsupported_extension_so_skipping_it:t(6081,e.DiagnosticCategory.Message,"File_0_has_an_unsupported_extension_so_skipping_it_6081","File '{0}' has an unsupported extension, so skipping it."),Only_amd_and_system_modules_are_supported_alongside_0:t(6082,e.DiagnosticCategory.Error,"Only_amd_and_system_modules_are_supported_alongside_0_6082","Only 'amd' and 'system' modules are supported alongside --{0}."),Base_directory_to_resolve_non_absolute_module_names:t(6083,e.DiagnosticCategory.Message,"Base_directory_to_resolve_non_absolute_module_names_6083","Base directory to resolve non-absolute module names."),Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react_JSX_emit:t(6084,e.DiagnosticCategory.Message,"Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084","[Deprecated] Use '--jsxFactory' instead. Specify the object invoked for createElement when targeting 'react' JSX emit"),Enable_tracing_of_the_name_resolution_process:t(6085,e.DiagnosticCategory.Message,"Enable_tracing_of_the_name_resolution_process_6085","Enable tracing of the name resolution process."),Resolving_module_0_from_1:t(6086,e.DiagnosticCategory.Message,"Resolving_module_0_from_1_6086","======== Resolving module '{0}' from '{1}'. ========"),Explicitly_specified_module_resolution_kind_Colon_0:t(6087,e.DiagnosticCategory.Message,"Explicitly_specified_module_resolution_kind_Colon_0_6087","Explicitly specified module resolution kind: '{0}'."),Module_resolution_kind_is_not_specified_using_0:t(6088,e.DiagnosticCategory.Message,"Module_resolution_kind_is_not_specified_using_0_6088","Module resolution kind is not specified, using '{0}'."),Module_name_0_was_successfully_resolved_to_1:t(6089,e.DiagnosticCategory.Message,"Module_name_0_was_successfully_resolved_to_1_6089","======== Module name '{0}' was successfully resolved to '{1}'. ========"),Module_name_0_was_not_resolved:t(6090,e.DiagnosticCategory.Message,"Module_name_0_was_not_resolved_6090","======== Module name '{0}' was not resolved. ========"),paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0:t(6091,e.DiagnosticCategory.Message,"paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091","'paths' option is specified, looking for a pattern to match module name '{0}'."),Module_name_0_matched_pattern_1:t(6092,e.DiagnosticCategory.Message,"Module_name_0_matched_pattern_1_6092","Module name '{0}', matched pattern '{1}'."),Trying_substitution_0_candidate_module_location_Colon_1:t(6093,e.DiagnosticCategory.Message,"Trying_substitution_0_candidate_module_location_Colon_1_6093","Trying substitution '{0}', candidate module location: '{1}'."),Resolving_module_name_0_relative_to_base_url_1_2:t(6094,e.DiagnosticCategory.Message,"Resolving_module_name_0_relative_to_base_url_1_2_6094","Resolving module name '{0}' relative to base url '{1}' - '{2}'."),Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_type_1:t(6095,e.DiagnosticCategory.Message,"Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_type_1_6095","Loading module as file / folder, candidate module location '{0}', target file type '{1}'."),File_0_does_not_exist:t(6096,e.DiagnosticCategory.Message,"File_0_does_not_exist_6096","File '{0}' does not exist."),File_0_exist_use_it_as_a_name_resolution_result:t(6097,e.DiagnosticCategory.Message,"File_0_exist_use_it_as_a_name_resolution_result_6097","File '{0}' exist - use it as a name resolution result."),Loading_module_0_from_node_modules_folder_target_file_type_1:t(6098,e.DiagnosticCategory.Message,"Loading_module_0_from_node_modules_folder_target_file_type_1_6098","Loading module '{0}' from 'node_modules' folder, target file type '{1}'."),Found_package_json_at_0:t(6099,e.DiagnosticCategory.Message,"Found_package_json_at_0_6099","Found 'package.json' at '{0}'."),package_json_does_not_have_a_0_field:t(6100,e.DiagnosticCategory.Message,"package_json_does_not_have_a_0_field_6100","'package.json' does not have a '{0}' field."),package_json_has_0_field_1_that_references_2:t(6101,e.DiagnosticCategory.Message,"package_json_has_0_field_1_that_references_2_6101","'package.json' has '{0}' field '{1}' that references '{2}'."),Allow_javascript_files_to_be_compiled:t(6102,e.DiagnosticCategory.Message,"Allow_javascript_files_to_be_compiled_6102","Allow javascript files to be compiled."),Checking_if_0_is_the_longest_matching_prefix_for_1_2:t(6104,e.DiagnosticCategory.Message,"Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104","Checking if '{0}' is the longest matching prefix for '{1}' - '{2}'."),Expected_type_of_0_field_in_package_json_to_be_1_got_2:t(6105,e.DiagnosticCategory.Message,"Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105","Expected type of '{0}' field in 'package.json' to be '{1}', got '{2}'."),baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1:t(6106,e.DiagnosticCategory.Message,"baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106","'baseUrl' option is set to '{0}', using this value to resolve non-relative module name '{1}'."),rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0:t(6107,e.DiagnosticCategory.Message,"rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107","'rootDirs' option is set, using it to resolve relative module name '{0}'."),Longest_matching_prefix_for_0_is_1:t(6108,e.DiagnosticCategory.Message,"Longest_matching_prefix_for_0_is_1_6108","Longest matching prefix for '{0}' is '{1}'."),Loading_0_from_the_root_dir_1_candidate_location_2:t(6109,e.DiagnosticCategory.Message,"Loading_0_from_the_root_dir_1_candidate_location_2_6109","Loading '{0}' from the root dir '{1}', candidate location '{2}'."),Trying_other_entries_in_rootDirs:t(6110,e.DiagnosticCategory.Message,"Trying_other_entries_in_rootDirs_6110","Trying other entries in 'rootDirs'."),Module_resolution_using_rootDirs_has_failed:t(6111,e.DiagnosticCategory.Message,"Module_resolution_using_rootDirs_has_failed_6111","Module resolution using 'rootDirs' has failed."),Do_not_emit_use_strict_directives_in_module_output:t(6112,e.DiagnosticCategory.Message,"Do_not_emit_use_strict_directives_in_module_output_6112","Do not emit 'use strict' directives in module output."),Enable_strict_null_checks:t(6113,e.DiagnosticCategory.Message,"Enable_strict_null_checks_6113","Enable strict null checks."),Unknown_option_excludes_Did_you_mean_exclude:t(6114,e.DiagnosticCategory.Error,"Unknown_option_excludes_Did_you_mean_exclude_6114","Unknown option 'excludes'. Did you mean 'exclude'?"),Raise_error_on_this_expressions_with_an_implied_any_type:t(6115,e.DiagnosticCategory.Message,"Raise_error_on_this_expressions_with_an_implied_any_type_6115","Raise error on 'this' expressions with an implied 'any' type."),Resolving_type_reference_directive_0_containing_file_1_root_directory_2:t(6116,e.DiagnosticCategory.Message,"Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116","======== Resolving type reference directive '{0}', containing file '{1}', root directory '{2}'. ========"),Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2:t(6119,e.DiagnosticCategory.Message,"Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119","======== Type reference directive '{0}' was successfully resolved to '{1}', primary: {2}. ========"),Type_reference_directive_0_was_not_resolved:t(6120,e.DiagnosticCategory.Message,"Type_reference_directive_0_was_not_resolved_6120","======== Type reference directive '{0}' was not resolved. ========"),Resolving_with_primary_search_path_0:t(6121,e.DiagnosticCategory.Message,"Resolving_with_primary_search_path_0_6121","Resolving with primary search path '{0}'."),Root_directory_cannot_be_determined_skipping_primary_search_paths:t(6122,e.DiagnosticCategory.Message,"Root_directory_cannot_be_determined_skipping_primary_search_paths_6122","Root directory cannot be determined, skipping primary search paths."),Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set:t(6123,e.DiagnosticCategory.Message,"Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123","======== Resolving type reference directive '{0}', containing file '{1}', root directory not set. ========"),Type_declaration_files_to_be_included_in_compilation:t(6124,e.DiagnosticCategory.Message,"Type_declaration_files_to_be_included_in_compilation_6124","Type declaration files to be included in compilation."),Looking_up_in_node_modules_folder_initial_location_0:t(6125,e.DiagnosticCategory.Message,"Looking_up_in_node_modules_folder_initial_location_0_6125","Looking up in 'node_modules' folder, initial location '{0}'."),Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_modules_folder:t(6126,e.DiagnosticCategory.Message,"Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126","Containing file is not specified and root directory cannot be determined, skipping lookup in 'node_modules' folder."),Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1:t(6127,e.DiagnosticCategory.Message,"Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127","======== Resolving type reference directive '{0}', containing file not set, root directory '{1}'. ========"),Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set:t(6128,e.DiagnosticCategory.Message,"Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128","======== Resolving type reference directive '{0}', containing file not set, root directory not set. ========"),Resolving_real_path_for_0_result_1:t(6130,e.DiagnosticCategory.Message,"Resolving_real_path_for_0_result_1_6130","Resolving real path for '{0}', result '{1}'."),Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system:t(6131,e.DiagnosticCategory.Error,"Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131","Cannot compile modules using option '{0}' unless the '--module' flag is 'amd' or 'system'."),File_name_0_has_a_1_extension_stripping_it:t(6132,e.DiagnosticCategory.Message,"File_name_0_has_a_1_extension_stripping_it_6132","File name '{0}' has a '{1}' extension - stripping it."),_0_is_declared_but_its_value_is_never_read:t(6133,e.DiagnosticCategory.Error,"_0_is_declared_but_its_value_is_never_read_6133","'{0}' is declared but its value is never read.",!0),Report_errors_on_unused_locals:t(6134,e.DiagnosticCategory.Message,"Report_errors_on_unused_locals_6134","Report errors on unused locals."),Report_errors_on_unused_parameters:t(6135,e.DiagnosticCategory.Message,"Report_errors_on_unused_parameters_6135","Report errors on unused parameters."),The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files:t(6136,e.DiagnosticCategory.Message,"The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136","The maximum dependency depth to search under node_modules and load JavaScript files."),Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1:t(6137,e.DiagnosticCategory.Error,"Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1_6137","Cannot import type declaration files. Consider importing '{0}' instead of '{1}'."),Property_0_is_declared_but_its_value_is_never_read:t(6138,e.DiagnosticCategory.Error,"Property_0_is_declared_but_its_value_is_never_read_6138","Property '{0}' is declared but its value is never read.",!0),Import_emit_helpers_from_tslib:t(6139,e.DiagnosticCategory.Message,"Import_emit_helpers_from_tslib_6139","Import emit helpers from 'tslib'."),Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using_cache_location_2:t(6140,e.DiagnosticCategory.Error,"Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140","Auto discovery for typings is enabled in project '{0}'. Running extra resolution pass for module '{1}' using cache location '{2}'."),Parse_in_strict_mode_and_emit_use_strict_for_each_source_file:t(6141,e.DiagnosticCategory.Message,"Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141",'Parse in strict mode and emit "use strict" for each source file.'),Module_0_was_resolved_to_1_but_jsx_is_not_set:t(6142,e.DiagnosticCategory.Error,"Module_0_was_resolved_to_1_but_jsx_is_not_set_6142","Module '{0}' was resolved to '{1}', but '--jsx' is not set."),Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1:t(6144,e.DiagnosticCategory.Message,"Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144","Module '{0}' was resolved as locally declared ambient module in file '{1}'."),Module_0_was_resolved_as_ambient_module_declared_in_1_since_this_file_was_not_modified:t(6145,e.DiagnosticCategory.Message,"Module_0_was_resolved_as_ambient_module_declared_in_1_since_this_file_was_not_modified_6145","Module '{0}' was resolved as ambient module declared in '{1}' since this file was not modified."),Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h:t(6146,e.DiagnosticCategory.Message,"Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146","Specify the JSX factory function to use when targeting 'react' JSX emit, e.g. 'React.createElement' or 'h'."),Resolution_for_module_0_was_found_in_cache_from_location_1:t(6147,e.DiagnosticCategory.Message,"Resolution_for_module_0_was_found_in_cache_from_location_1_6147","Resolution for module '{0}' was found in cache from location '{1}'."),Directory_0_does_not_exist_skipping_all_lookups_in_it:t(6148,e.DiagnosticCategory.Message,"Directory_0_does_not_exist_skipping_all_lookups_in_it_6148","Directory '{0}' does not exist, skipping all lookups in it."),Show_diagnostic_information:t(6149,e.DiagnosticCategory.Message,"Show_diagnostic_information_6149","Show diagnostic information."),Show_verbose_diagnostic_information:t(6150,e.DiagnosticCategory.Message,"Show_verbose_diagnostic_information_6150","Show verbose diagnostic information."),Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file:t(6151,e.DiagnosticCategory.Message,"Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151","Emit a single file with source maps instead of having a separate file."),Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap_to_be_set:t(6152,e.DiagnosticCategory.Message,"Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152","Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set."),Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule:t(6153,e.DiagnosticCategory.Message,"Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153","Transpile each file as a separate module (similar to 'ts.transpileModule')."),Print_names_of_generated_files_part_of_the_compilation:t(6154,e.DiagnosticCategory.Message,"Print_names_of_generated_files_part_of_the_compilation_6154","Print names of generated files part of the compilation."),Print_names_of_files_part_of_the_compilation:t(6155,e.DiagnosticCategory.Message,"Print_names_of_files_part_of_the_compilation_6155","Print names of files part of the compilation."),The_locale_used_when_displaying_messages_to_the_user_e_g_en_us:t(6156,e.DiagnosticCategory.Message,"The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156","The locale used when displaying messages to the user (e.g. 'en-us')"),Do_not_generate_custom_helper_functions_like_extends_in_compiled_output:t(6157,e.DiagnosticCategory.Message,"Do_not_generate_custom_helper_functions_like_extends_in_compiled_output_6157","Do not generate custom helper functions like '__extends' in compiled output."),Do_not_include_the_default_library_file_lib_d_ts:t(6158,e.DiagnosticCategory.Message,"Do_not_include_the_default_library_file_lib_d_ts_6158","Do not include the default library file (lib.d.ts)."),Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files:t(6159,e.DiagnosticCategory.Message,"Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159","Do not add triple-slash references or imported modules to the list of compiled files."),Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files:t(6160,e.DiagnosticCategory.Message,"Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160","[Deprecated] Use '--skipLibCheck' instead. Skip type checking of default library declaration files."),List_of_folders_to_include_type_definitions_from:t(6161,e.DiagnosticCategory.Message,"List_of_folders_to_include_type_definitions_from_6161","List of folders to include type definitions from."),Disable_size_limitations_on_JavaScript_projects:t(6162,e.DiagnosticCategory.Message,"Disable_size_limitations_on_JavaScript_projects_6162","Disable size limitations on JavaScript projects."),The_character_set_of_the_input_files:t(6163,e.DiagnosticCategory.Message,"The_character_set_of_the_input_files_6163","The character set of the input files."),Do_not_truncate_error_messages:t(6165,e.DiagnosticCategory.Message,"Do_not_truncate_error_messages_6165","Do not truncate error messages."),Output_directory_for_generated_declaration_files:t(6166,e.DiagnosticCategory.Message,"Output_directory_for_generated_declaration_files_6166","Output directory for generated declaration files."),A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl:t(6167,e.DiagnosticCategory.Message,"A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167","A series of entries which re-map imports to lookup locations relative to the 'baseUrl'."),List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime:t(6168,e.DiagnosticCategory.Message,"List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168","List of root folders whose combined content represents the structure of the project at runtime."),Show_all_compiler_options:t(6169,e.DiagnosticCategory.Message,"Show_all_compiler_options_6169","Show all compiler options."),Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file:t(6170,e.DiagnosticCategory.Message,"Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170","[Deprecated] Use '--outFile' instead. Concatenate and emit output to single file"),Command_line_Options:t(6171,e.DiagnosticCategory.Message,"Command_line_Options_6171","Command-line Options"),Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3:t(6179,e.DiagnosticCategory.Message,"Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_or_ES3_6179","Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'."),Enable_all_strict_type_checking_options:t(6180,e.DiagnosticCategory.Message,"Enable_all_strict_type_checking_options_6180","Enable all strict type-checking options."),Scoped_package_detected_looking_in_0:t(6182,e.DiagnosticCategory.Message,"Scoped_package_detected_looking_in_0_6182","Scoped package detected, looking in '{0}'"),Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2:t(6183,e.DiagnosticCategory.Message,"Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183","Reusing resolution of module '{0}' from '{1}' of old program, it was successfully resolved to '{2}'."),Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3:t(6184,e.DiagnosticCategory.Message,"Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184","Reusing resolution of module '{0}' from '{1}' of old program, it was successfully resolved to '{2}' with Package ID '{3}'."),Enable_strict_checking_of_function_types:t(6186,e.DiagnosticCategory.Message,"Enable_strict_checking_of_function_types_6186","Enable strict checking of function types."),Enable_strict_checking_of_property_initialization_in_classes:t(6187,e.DiagnosticCategory.Message,"Enable_strict_checking_of_property_initialization_in_classes_6187","Enable strict checking of property initialization in classes."),Numeric_separators_are_not_allowed_here:t(6188,e.DiagnosticCategory.Error,"Numeric_separators_are_not_allowed_here_6188","Numeric separators are not allowed here."),Multiple_consecutive_numeric_separators_are_not_permitted:t(6189,e.DiagnosticCategory.Error,"Multiple_consecutive_numeric_separators_are_not_permitted_6189","Multiple consecutive numeric separators are not permitted."),Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen:t(6191,e.DiagnosticCategory.Message,"Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191","Whether to keep outdated console output in watch mode instead of clearing the screen."),All_imports_in_import_declaration_are_unused:t(6192,e.DiagnosticCategory.Error,"All_imports_in_import_declaration_are_unused_6192","All imports in import declaration are unused.",!0),Found_1_error_Watching_for_file_changes:t(6193,e.DiagnosticCategory.Message,"Found_1_error_Watching_for_file_changes_6193","Found 1 error. Watching for file changes."),Found_0_errors_Watching_for_file_changes:t(6194,e.DiagnosticCategory.Message,"Found_0_errors_Watching_for_file_changes_6194","Found {0} errors. Watching for file changes."),Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols:t(6195,e.DiagnosticCategory.Message,"Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195","Resolve 'keyof' to string valued property names only (no numbers or symbols)."),_0_is_declared_but_never_used:t(6196,e.DiagnosticCategory.Error,"_0_is_declared_but_never_used_6196","'{0}' is declared but never used.",!0),Include_modules_imported_with_json_extension:t(6197,e.DiagnosticCategory.Message,"Include_modules_imported_with_json_extension_6197","Include modules imported with '.json' extension"),All_destructured_elements_are_unused:t(6198,e.DiagnosticCategory.Error,"All_destructured_elements_are_unused_6198","All destructured elements are unused.",!0),All_variables_are_unused:t(6199,e.DiagnosticCategory.Error,"All_variables_are_unused_6199","All variables are unused.",!0),Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0:t(6200,e.DiagnosticCategory.Error,"Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200","Definitions of the following identifiers conflict with those in another file: {0}"),Conflicts_are_in_this_file:t(6201,e.DiagnosticCategory.Message,"Conflicts_are_in_this_file_6201","Conflicts are in this file."),Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0:t(6202,e.DiagnosticCategory.Error,"Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202","Project references may not form a circular graph. Cycle detected: {0}"),_0_was_also_declared_here:t(6203,e.DiagnosticCategory.Message,"_0_was_also_declared_here_6203","'{0}' was also declared here."),and_here:t(6204,e.DiagnosticCategory.Message,"and_here_6204","and here."),All_type_parameters_are_unused:t(6205,e.DiagnosticCategory.Error,"All_type_parameters_are_unused_6205","All type parameters are unused."),package_json_has_a_typesVersions_field_with_version_specific_path_mappings:t(6206,e.DiagnosticCategory.Message,"package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206","'package.json' has a 'typesVersions' field with version-specific path mappings."),package_json_does_not_have_a_typesVersions_entry_that_matches_version_0:t(6207,e.DiagnosticCategory.Message,"package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207","'package.json' does not have a 'typesVersions' entry that matches version '{0}'."),package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_match_module_name_2:t(6208,e.DiagnosticCategory.Message,"package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208","'package.json' has a 'typesVersions' entry '{0}' that matches compiler version '{1}', looking for a pattern to match module name '{2}'."),package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range:t(6209,e.DiagnosticCategory.Message,"package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209","'package.json' has a 'typesVersions' entry '{0}' that is not a valid semver range."),An_argument_for_0_was_not_provided:t(6210,e.DiagnosticCategory.Message,"An_argument_for_0_was_not_provided_6210","An argument for '{0}' was not provided."),An_argument_matching_this_binding_pattern_was_not_provided:t(6211,e.DiagnosticCategory.Message,"An_argument_matching_this_binding_pattern_was_not_provided_6211","An argument matching this binding pattern was not provided."),Did_you_mean_to_call_this_expression:t(6212,e.DiagnosticCategory.Message,"Did_you_mean_to_call_this_expression_6212","Did you mean to call this expression?"),Did_you_mean_to_use_new_with_this_expression:t(6213,e.DiagnosticCategory.Message,"Did_you_mean_to_use_new_with_this_expression_6213","Did you mean to use 'new' with this expression?"),Enable_strict_bind_call_and_apply_methods_on_functions:t(6214,e.DiagnosticCategory.Message,"Enable_strict_bind_call_and_apply_methods_on_functions_6214","Enable strict 'bind', 'call', and 'apply' methods on functions."),Using_compiler_options_of_project_reference_redirect_0:t(6215,e.DiagnosticCategory.Message,"Using_compiler_options_of_project_reference_redirect_0_6215","Using compiler options of project reference redirect '{0}'."),Found_1_error:t(6216,e.DiagnosticCategory.Message,"Found_1_error_6216","Found 1 error."),Found_0_errors:t(6217,e.DiagnosticCategory.Message,"Found_0_errors_6217","Found {0} errors."),Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2:t(6218,e.DiagnosticCategory.Message,"Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218","======== Module name '{0}' was successfully resolved to '{1}' with Package ID '{2}'. ========"),Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3:t(6219,e.DiagnosticCategory.Message,"Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219","======== Type reference directive '{0}' was successfully resolved to '{1}' with Package ID '{2}', primary: {3}. ========"),package_json_had_a_falsy_0_field:t(6220,e.DiagnosticCategory.Message,"package_json_had_a_falsy_0_field_6220","'package.json' had a falsy '{0}' field."),Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects:t(6221,e.DiagnosticCategory.Message,"Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221","Disable use of source files instead of declaration files from referenced projects."),Emit_class_fields_with_Define_instead_of_Set:t(6222,e.DiagnosticCategory.Message,"Emit_class_fields_with_Define_instead_of_Set_6222","Emit class fields with Define instead of Set."),Generates_a_CPU_profile:t(6223,e.DiagnosticCategory.Message,"Generates_a_CPU_profile_6223","Generates a CPU profile."),Disable_solution_searching_for_this_project:t(6224,e.DiagnosticCategory.Message,"Disable_solution_searching_for_this_project_6224","Disable solution searching for this project."),Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_DynamicPriorityPolling_FixedChunkSizePolling_UseFsEvents_UseFsEventsOnParentDirectory:t(6225,e.DiagnosticCategory.Message,"Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225","Specify strategy for watching file: 'FixedPollingInterval' (default), 'PriorityPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling', 'UseFsEvents', 'UseFsEventsOnParentDirectory'."),Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively_Colon_UseFsEvents_default_FixedPollingInterval_DynamicPriorityPolling_FixedChunkSizePolling:t(6226,e.DiagnosticCategory.Message,"Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226","Specify strategy for watching directory on platforms that don't support recursive watching natively: 'UseFsEvents' (default), 'FixedPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling'."),Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_FixedInterval_default_PriorityInterval_DynamicPriority_FixedChunkSize:t(6227,e.DiagnosticCategory.Message,"Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227","Specify strategy for creating a polling watch when it fails to create using file system events: 'FixedInterval' (default), 'PriorityInterval', 'DynamicPriority', 'FixedChunkSize'."),Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3:t(6229,e.DiagnosticCategory.Error,"Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229","Tag '{0}' expects at least '{1}' arguments, but the JSX factory '{2}' provides at most '{3}'."),Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line:t(6230,e.DiagnosticCategory.Error,"Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230","Option '{0}' can only be specified in 'tsconfig.json' file or set to 'false' or 'null' on command line."),Could_not_resolve_the_path_0_with_the_extensions_Colon_1:t(6231,e.DiagnosticCategory.Error,"Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231","Could not resolve the path '{0}' with the extensions: {1}."),Declaration_augments_declaration_in_another_file_This_cannot_be_serialized:t(6232,e.DiagnosticCategory.Error,"Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232","Declaration augments declaration in another file. This cannot be serialized."),This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_file:t(6233,e.DiagnosticCategory.Error,"This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233","This is the declaration being augmented. Consider moving the augmenting declaration into the same file."),This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without:t(6234,e.DiagnosticCategory.Error,"This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234","This expression is not callable because it is a 'get' accessor. Did you mean to use it without '()'?"),Disable_loading_referenced_projects:t(6235,e.DiagnosticCategory.Message,"Disable_loading_referenced_projects_6235","Disable loading referenced projects."),Arguments_for_the_rest_parameter_0_were_not_provided:t(6236,e.DiagnosticCategory.Error,"Arguments_for_the_rest_parameter_0_were_not_provided_6236","Arguments for the rest parameter '{0}' were not provided."),Generates_an_event_trace_and_a_list_of_types:t(6237,e.DiagnosticCategory.Message,"Generates_an_event_trace_and_a_list_of_types_6237","Generates an event trace and a list of types."),Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react:t(6238,e.DiagnosticCategory.Error,"Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238","Specify the module specifier to be used to import the 'jsx' and 'jsxs' factory functions from. eg, react"),File_0_exists_according_to_earlier_cached_lookups:t(6239,e.DiagnosticCategory.Message,"File_0_exists_according_to_earlier_cached_lookups_6239","File '{0}' exists according to earlier cached lookups."),File_0_does_not_exist_according_to_earlier_cached_lookups:t(6240,e.DiagnosticCategory.Message,"File_0_does_not_exist_according_to_earlier_cached_lookups_6240","File '{0}' does not exist according to earlier cached lookups."),Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1:t(6241,e.DiagnosticCategory.Message,"Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241","Resolution for type reference directive '{0}' was found in cache from location '{1}'."),Resolving_type_reference_directive_0_containing_file_1:t(6242,e.DiagnosticCategory.Message,"Resolving_type_reference_directive_0_containing_file_1_6242","======== Resolving type reference directive '{0}', containing file '{1}'. ========"),Interpret_optional_property_types_as_written_rather_than_adding_undefined:t(6243,e.DiagnosticCategory.Message,"Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243","Interpret optional property types as written, rather than adding 'undefined'."),Modules:t(6244,e.DiagnosticCategory.Message,"Modules_6244","Modules"),File_Management:t(6245,e.DiagnosticCategory.Message,"File_Management_6245","File Management"),Emit:t(6246,e.DiagnosticCategory.Message,"Emit_6246","Emit"),JavaScript_Support:t(6247,e.DiagnosticCategory.Message,"JavaScript_Support_6247","JavaScript Support"),Type_Checking:t(6248,e.DiagnosticCategory.Message,"Type_Checking_6248","Type Checking"),Editor_Support:t(6249,e.DiagnosticCategory.Message,"Editor_Support_6249","Editor Support"),Watch_and_Build_Modes:t(6250,e.DiagnosticCategory.Message,"Watch_and_Build_Modes_6250","Watch and Build Modes"),Compiler_Diagnostics:t(6251,e.DiagnosticCategory.Message,"Compiler_Diagnostics_6251","Compiler Diagnostics"),Interop_Constraints:t(6252,e.DiagnosticCategory.Message,"Interop_Constraints_6252","Interop Constraints"),Backwards_Compatibility:t(6253,e.DiagnosticCategory.Message,"Backwards_Compatibility_6253","Backwards Compatibility"),Language_and_Environment:t(6254,e.DiagnosticCategory.Message,"Language_and_Environment_6254","Language and Environment"),Projects:t(6255,e.DiagnosticCategory.Message,"Projects_6255","Projects"),Output_Formatting:t(6256,e.DiagnosticCategory.Message,"Output_Formatting_6256","Output Formatting"),Completeness:t(6257,e.DiagnosticCategory.Message,"Completeness_6257","Completeness"),_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file:t(6258,e.DiagnosticCategory.Error,"_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258","'{0}' should be set inside the 'compilerOptions' object of the config json file"),Found_1_error_in_1:t(6259,e.DiagnosticCategory.Message,"Found_1_error_in_1_6259","Found 1 error in {1}"),Found_0_errors_in_the_same_file_starting_at_Colon_1:t(6260,e.DiagnosticCategory.Message,"Found_0_errors_in_the_same_file_starting_at_Colon_1_6260","Found {0} errors in the same file, starting at: {1}"),Found_0_errors_in_1_files:t(6261,e.DiagnosticCategory.Message,"Found_0_errors_in_1_files_6261","Found {0} errors in {1} files."),Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve:t(6270,e.DiagnosticCategory.Message,"Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve_6270","Directory '{0}' has no containing package.json scope. Imports will not resolve."),Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1:t(6271,e.DiagnosticCategory.Message,"Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6271","Import specifier '{0}' does not exist in package.json scope at path '{1}'."),Invalid_import_specifier_0_has_no_possible_resolutions:t(6272,e.DiagnosticCategory.Message,"Invalid_import_specifier_0_has_no_possible_resolutions_6272","Invalid import specifier '{0}' has no possible resolutions."),package_json_scope_0_has_no_imports_defined:t(6273,e.DiagnosticCategory.Message,"package_json_scope_0_has_no_imports_defined_6273","package.json scope '{0}' has no imports defined."),package_json_scope_0_explicitly_maps_specifier_1_to_null:t(6274,e.DiagnosticCategory.Message,"package_json_scope_0_explicitly_maps_specifier_1_to_null_6274","package.json scope '{0}' explicitly maps specifier '{1}' to null."),package_json_scope_0_has_invalid_type_for_target_of_specifier_1:t(6275,e.DiagnosticCategory.Message,"package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275","package.json scope '{0}' has invalid type for target of specifier '{1}'"),Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1:t(6276,e.DiagnosticCategory.Message,"Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6276","Export specifier '{0}' does not exist in package.json scope at path '{1}'."),Enable_project_compilation:t(6302,e.DiagnosticCategory.Message,"Enable_project_compilation_6302","Enable project compilation"),Composite_projects_may_not_disable_declaration_emit:t(6304,e.DiagnosticCategory.Error,"Composite_projects_may_not_disable_declaration_emit_6304","Composite projects may not disable declaration emit."),Output_file_0_has_not_been_built_from_source_file_1:t(6305,e.DiagnosticCategory.Error,"Output_file_0_has_not_been_built_from_source_file_1_6305","Output file '{0}' has not been built from source file '{1}'."),Referenced_project_0_must_have_setting_composite_Colon_true:t(6306,e.DiagnosticCategory.Error,"Referenced_project_0_must_have_setting_composite_Colon_true_6306","Referenced project '{0}' must have setting \"composite\": true."),File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_include_pattern:t(6307,e.DiagnosticCategory.Error,"File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307","File '{0}' is not listed within the file list of project '{1}'. Projects must list all files or use an 'include' pattern."),Cannot_prepend_project_0_because_it_does_not_have_outFile_set:t(6308,e.DiagnosticCategory.Error,"Cannot_prepend_project_0_because_it_does_not_have_outFile_set_6308","Cannot prepend project '{0}' because it does not have 'outFile' set"),Output_file_0_from_project_1_does_not_exist:t(6309,e.DiagnosticCategory.Error,"Output_file_0_from_project_1_does_not_exist_6309","Output file '{0}' from project '{1}' does not exist"),Referenced_project_0_may_not_disable_emit:t(6310,e.DiagnosticCategory.Error,"Referenced_project_0_may_not_disable_emit_6310","Referenced project '{0}' may not disable emit."),Project_0_is_out_of_date_because_output_1_is_older_than_input_2:t(6350,e.DiagnosticCategory.Message,"Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350","Project '{0}' is out of date because output '{1}' is older than input '{2}'"),Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2:t(6351,e.DiagnosticCategory.Message,"Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351","Project '{0}' is up to date because newest input '{1}' is older than output '{2}'"),Project_0_is_out_of_date_because_output_file_1_does_not_exist:t(6352,e.DiagnosticCategory.Message,"Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352","Project '{0}' is out of date because output file '{1}' does not exist"),Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date:t(6353,e.DiagnosticCategory.Message,"Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date_6353","Project '{0}' is out of date because its dependency '{1}' is out of date"),Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies:t(6354,e.DiagnosticCategory.Message,"Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354","Project '{0}' is up to date with .d.ts files from its dependencies"),Projects_in_this_build_Colon_0:t(6355,e.DiagnosticCategory.Message,"Projects_in_this_build_Colon_0_6355","Projects in this build: {0}"),A_non_dry_build_would_delete_the_following_files_Colon_0:t(6356,e.DiagnosticCategory.Message,"A_non_dry_build_would_delete_the_following_files_Colon_0_6356","A non-dry build would delete the following files: {0}"),A_non_dry_build_would_build_project_0:t(6357,e.DiagnosticCategory.Message,"A_non_dry_build_would_build_project_0_6357","A non-dry build would build project '{0}'"),Building_project_0:t(6358,e.DiagnosticCategory.Message,"Building_project_0_6358","Building project '{0}'..."),Updating_output_timestamps_of_project_0:t(6359,e.DiagnosticCategory.Message,"Updating_output_timestamps_of_project_0_6359","Updating output timestamps of project '{0}'..."),Project_0_is_up_to_date:t(6361,e.DiagnosticCategory.Message,"Project_0_is_up_to_date_6361","Project '{0}' is up to date"),Skipping_build_of_project_0_because_its_dependency_1_has_errors:t(6362,e.DiagnosticCategory.Message,"Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362","Skipping build of project '{0}' because its dependency '{1}' has errors"),Project_0_can_t_be_built_because_its_dependency_1_has_errors:t(6363,e.DiagnosticCategory.Message,"Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363","Project '{0}' can't be built because its dependency '{1}' has errors"),Build_one_or_more_projects_and_their_dependencies_if_out_of_date:t(6364,e.DiagnosticCategory.Message,"Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364","Build one or more projects and their dependencies, if out of date"),Delete_the_outputs_of_all_projects:t(6365,e.DiagnosticCategory.Message,"Delete_the_outputs_of_all_projects_6365","Delete the outputs of all projects."),Show_what_would_be_built_or_deleted_if_specified_with_clean:t(6367,e.DiagnosticCategory.Message,"Show_what_would_be_built_or_deleted_if_specified_with_clean_6367","Show what would be built (or deleted, if specified with '--clean')"),Option_build_must_be_the_first_command_line_argument:t(6369,e.DiagnosticCategory.Error,"Option_build_must_be_the_first_command_line_argument_6369","Option '--build' must be the first command line argument."),Options_0_and_1_cannot_be_combined:t(6370,e.DiagnosticCategory.Error,"Options_0_and_1_cannot_be_combined_6370","Options '{0}' and '{1}' cannot be combined."),Updating_unchanged_output_timestamps_of_project_0:t(6371,e.DiagnosticCategory.Message,"Updating_unchanged_output_timestamps_of_project_0_6371","Updating unchanged output timestamps of project '{0}'..."),Project_0_is_out_of_date_because_output_of_its_dependency_1_has_changed:t(6372,e.DiagnosticCategory.Message,"Project_0_is_out_of_date_because_output_of_its_dependency_1_has_changed_6372","Project '{0}' is out of date because output of its dependency '{1}' has changed"),Updating_output_of_project_0:t(6373,e.DiagnosticCategory.Message,"Updating_output_of_project_0_6373","Updating output of project '{0}'..."),A_non_dry_build_would_update_timestamps_for_output_of_project_0:t(6374,e.DiagnosticCategory.Message,"A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374","A non-dry build would update timestamps for output of project '{0}'"),A_non_dry_build_would_update_output_of_project_0:t(6375,e.DiagnosticCategory.Message,"A_non_dry_build_would_update_output_of_project_0_6375","A non-dry build would update output of project '{0}'"),Cannot_update_output_of_project_0_because_there_was_error_reading_file_1:t(6376,e.DiagnosticCategory.Message,"Cannot_update_output_of_project_0_because_there_was_error_reading_file_1_6376","Cannot update output of project '{0}' because there was error reading file '{1}'"),Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1:t(6377,e.DiagnosticCategory.Error,"Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377","Cannot write file '{0}' because it will overwrite '.tsbuildinfo' file generated by referenced project '{1}'"),Composite_projects_may_not_disable_incremental_compilation:t(6379,e.DiagnosticCategory.Error,"Composite_projects_may_not_disable_incremental_compilation_6379","Composite projects may not disable incremental compilation."),Specify_file_to_store_incremental_compilation_information:t(6380,e.DiagnosticCategory.Message,"Specify_file_to_store_incremental_compilation_information_6380","Specify file to store incremental compilation information"),Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_current_version_2:t(6381,e.DiagnosticCategory.Message,"Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381","Project '{0}' is out of date because output for it was generated with version '{1}' that differs with current version '{2}'"),Skipping_build_of_project_0_because_its_dependency_1_was_not_built:t(6382,e.DiagnosticCategory.Message,"Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382","Skipping build of project '{0}' because its dependency '{1}' was not built"),Project_0_can_t_be_built_because_its_dependency_1_was_not_built:t(6383,e.DiagnosticCategory.Message,"Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383","Project '{0}' can't be built because its dependency '{1}' was not built"),Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_directly_depending_on_it:t(6384,e.DiagnosticCategory.Message,"Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384","Have recompiles in '--incremental' and '--watch' assume that changes within a file will only affect files directly depending on it."),_0_is_deprecated:t(6385,e.DiagnosticCategory.Suggestion,"_0_is_deprecated_6385","'{0}' is deprecated.",void 0,void 0,!0),Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_native_implementation_of_the_Web_Performance_API_could_not_be_found:t(6386,e.DiagnosticCategory.Message,"Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386","Performance timings for '--diagnostics' or '--extendedDiagnostics' are not available in this session. A native implementation of the Web Performance API could not be found."),The_signature_0_of_1_is_deprecated:t(6387,e.DiagnosticCategory.Suggestion,"The_signature_0_of_1_is_deprecated_6387","The signature '{0}' of '{1}' is deprecated.",void 0,void 0,!0),Project_0_is_being_forcibly_rebuilt:t(6388,e.DiagnosticCategory.Message,"Project_0_is_being_forcibly_rebuilt_6388","Project '{0}' is being forcibly rebuilt"),Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved:t(6389,e.DiagnosticCategory.Message,"Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389","Reusing resolution of module '{0}' from '{1}' of old program, it was not resolved."),Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2:t(6390,e.DiagnosticCategory.Message,"Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390","Reusing resolution of type reference directive '{0}' from '{1}' of old program, it was successfully resolved to '{2}'."),Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3:t(6391,e.DiagnosticCategory.Message,"Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391","Reusing resolution of type reference directive '{0}' from '{1}' of old program, it was successfully resolved to '{2}' with Package ID '{3}'."),Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved:t(6392,e.DiagnosticCategory.Message,"Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392","Reusing resolution of type reference directive '{0}' from '{1}' of old program, it was not resolved."),Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3:t(6393,e.DiagnosticCategory.Message,"Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393","Reusing resolution of module '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}'."),Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3_with_Package_ID_4:t(6394,e.DiagnosticCategory.Message,"Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394","Reusing resolution of module '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}' with Package ID '{4}'."),Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved:t(6395,e.DiagnosticCategory.Message,"Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395","Reusing resolution of module '{0}' from '{1}' found in cache from location '{2}', it was not resolved."),Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3:t(6396,e.DiagnosticCategory.Message,"Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396","Reusing resolution of type reference directive '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}'."),Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3_with_Package_ID_4:t(6397,e.DiagnosticCategory.Message,"Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397","Reusing resolution of type reference directive '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}' with Package ID '{4}'."),Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_resolved:t(6398,e.DiagnosticCategory.Message,"Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398","Reusing resolution of type reference directive '{0}' from '{1}' found in cache from location '{2}', it was not resolved."),Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitted:t(6399,e.DiagnosticCategory.Message,"Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399","Project '{0}' is out of date because buildinfo file '{1}' indicates that some of the changes were not emitted"),Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_files:t(6400,e.DiagnosticCategory.Message,"Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_fil_6400","Project '{0}' is up to date but needs to update timestamps of output files that are older than input files"),Project_0_is_out_of_date_because_there_was_error_reading_file_1:t(6401,e.DiagnosticCategory.Message,"Project_0_is_out_of_date_because_there_was_error_reading_file_1_6401","Project '{0}' is out of date because there was error reading file '{1}'"),Resolving_in_0_mode_with_conditions_1:t(6402,e.DiagnosticCategory.Message,"Resolving_in_0_mode_with_conditions_1_6402","Resolving in {0} mode with conditions {1}."),Matched_0_condition_1:t(6403,e.DiagnosticCategory.Message,"Matched_0_condition_1_6403","Matched '{0}' condition '{1}'."),Using_0_subpath_1_with_target_2:t(6404,e.DiagnosticCategory.Message,"Using_0_subpath_1_with_target_2_6404","Using '{0}' subpath '{1}' with target '{2}'."),Saw_non_matching_condition_0:t(6405,e.DiagnosticCategory.Message,"Saw_non_matching_condition_0_6405","Saw non-matching condition '{0}'."),The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1:t(6500,e.DiagnosticCategory.Message,"The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500","The expected type comes from property '{0}' which is declared here on type '{1}'"),The_expected_type_comes_from_this_index_signature:t(6501,e.DiagnosticCategory.Message,"The_expected_type_comes_from_this_index_signature_6501","The expected type comes from this index signature."),The_expected_type_comes_from_the_return_type_of_this_signature:t(6502,e.DiagnosticCategory.Message,"The_expected_type_comes_from_the_return_type_of_this_signature_6502","The expected type comes from the return type of this signature."),Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing:t(6503,e.DiagnosticCategory.Message,"Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503","Print names of files that are part of the compilation and then stop processing."),File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option:t(6504,e.DiagnosticCategory.Error,"File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504","File '{0}' is a JavaScript file. Did you mean to enable the 'allowJs' option?"),Print_names_of_files_and_the_reason_they_are_part_of_the_compilation:t(6505,e.DiagnosticCategory.Message,"Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505","Print names of files and the reason they are part of the compilation."),Consider_adding_a_declare_modifier_to_this_class:t(6506,e.DiagnosticCategory.Message,"Consider_adding_a_declare_modifier_to_this_class_6506","Consider adding a 'declare' modifier to this class."),Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJS_option_to_get_errors_from_these_files:t(6600,e.DiagnosticCategory.Message,"Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJS_option_to_get_errors_from_these__6600","Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files."),Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export:t(6601,e.DiagnosticCategory.Message,"Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601","Allow 'import x from y' when a module doesn't have a default export."),Allow_accessing_UMD_globals_from_modules:t(6602,e.DiagnosticCategory.Message,"Allow_accessing_UMD_globals_from_modules_6602","Allow accessing UMD globals from modules."),Disable_error_reporting_for_unreachable_code:t(6603,e.DiagnosticCategory.Message,"Disable_error_reporting_for_unreachable_code_6603","Disable error reporting for unreachable code."),Disable_error_reporting_for_unused_labels:t(6604,e.DiagnosticCategory.Message,"Disable_error_reporting_for_unused_labels_6604","Disable error reporting for unused labels."),Ensure_use_strict_is_always_emitted:t(6605,e.DiagnosticCategory.Message,"Ensure_use_strict_is_always_emitted_6605","Ensure 'use strict' is always emitted."),Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_will_only_affect_files_directly_depending_on_it:t(6606,e.DiagnosticCategory.Message,"Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606","Have recompiles in projects that use 'incremental' and 'watch' mode assume that changes within a file will only affect files directly depending on it."),Specify_the_base_directory_to_resolve_non_relative_module_names:t(6607,e.DiagnosticCategory.Message,"Specify_the_base_directory_to_resolve_non_relative_module_names_6607","Specify the base directory to resolve non-relative module names."),No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files:t(6608,e.DiagnosticCategory.Message,"No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608","No longer supported. In early versions, manually set the text encoding for reading files."),Enable_error_reporting_in_type_checked_JavaScript_files:t(6609,e.DiagnosticCategory.Message,"Enable_error_reporting_in_type_checked_JavaScript_files_6609","Enable error reporting in type-checked JavaScript files."),Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references:t(6611,e.DiagnosticCategory.Message,"Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611","Enable constraints that allow a TypeScript project to be used with project references."),Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project:t(6612,e.DiagnosticCategory.Message,"Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612","Generate .d.ts files from TypeScript and JavaScript files in your project."),Specify_the_output_directory_for_generated_declaration_files:t(6613,e.DiagnosticCategory.Message,"Specify_the_output_directory_for_generated_declaration_files_6613","Specify the output directory for generated declaration files."),Create_sourcemaps_for_d_ts_files:t(6614,e.DiagnosticCategory.Message,"Create_sourcemaps_for_d_ts_files_6614","Create sourcemaps for d.ts files."),Output_compiler_performance_information_after_building:t(6615,e.DiagnosticCategory.Message,"Output_compiler_performance_information_after_building_6615","Output compiler performance information after building."),Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project:t(6616,e.DiagnosticCategory.Message,"Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616","Disables inference for type acquisition by looking at filenames in a project."),Reduce_the_number_of_projects_loaded_automatically_by_TypeScript:t(6617,e.DiagnosticCategory.Message,"Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617","Reduce the number of projects loaded automatically by TypeScript."),Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server:t(6618,e.DiagnosticCategory.Message,"Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618","Remove the 20mb cap on total source code size for JavaScript files in the TypeScript language server."),Opt_a_project_out_of_multi_project_reference_checking_when_editing:t(6619,e.DiagnosticCategory.Message,"Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619","Opt a project out of multi-project reference checking when editing."),Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects:t(6620,e.DiagnosticCategory.Message,"Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620","Disable preferring source files instead of declaration files when referencing composite projects."),Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration:t(6621,e.DiagnosticCategory.Message,"Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621","Emit more compliant, but verbose and less performant JavaScript for iteration."),Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files:t(6622,e.DiagnosticCategory.Message,"Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622","Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files."),Only_output_d_ts_files_and_not_JavaScript_files:t(6623,e.DiagnosticCategory.Message,"Only_output_d_ts_files_and_not_JavaScript_files_6623","Only output d.ts files and not JavaScript files."),Emit_design_type_metadata_for_decorated_declarations_in_source_files:t(6624,e.DiagnosticCategory.Message,"Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624","Emit design-type metadata for decorated declarations in source files."),Disable_the_type_acquisition_for_JavaScript_projects:t(6625,e.DiagnosticCategory.Message,"Disable_the_type_acquisition_for_JavaScript_projects_6625","Disable the type acquisition for JavaScript projects"),Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheticDefaultImports_for_type_compatibility:t(6626,e.DiagnosticCategory.Message,"Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626","Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility."),Filters_results_from_the_include_option:t(6627,e.DiagnosticCategory.Message,"Filters_results_from_the_include_option_6627","Filters results from the `include` option."),Remove_a_list_of_directories_from_the_watch_process:t(6628,e.DiagnosticCategory.Message,"Remove_a_list_of_directories_from_the_watch_process_6628","Remove a list of directories from the watch process."),Remove_a_list_of_files_from_the_watch_mode_s_processing:t(6629,e.DiagnosticCategory.Message,"Remove_a_list_of_files_from_the_watch_mode_s_processing_6629","Remove a list of files from the watch mode's processing."),Enable_experimental_support_for_TC39_stage_2_draft_decorators:t(6630,e.DiagnosticCategory.Message,"Enable_experimental_support_for_TC39_stage_2_draft_decorators_6630","Enable experimental support for TC39 stage 2 draft decorators."),Print_files_read_during_the_compilation_including_why_it_was_included:t(6631,e.DiagnosticCategory.Message,"Print_files_read_during_the_compilation_including_why_it_was_included_6631","Print files read during the compilation including why it was included."),Output_more_detailed_compiler_performance_information_after_building:t(6632,e.DiagnosticCategory.Message,"Output_more_detailed_compiler_performance_information_after_building_6632","Output more detailed compiler performance information after building."),Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_are_inherited:t(6633,e.DiagnosticCategory.Message,"Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633","Specify one or more path or node module references to base configuration files from which settings are inherited."),Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers:t(6634,e.DiagnosticCategory.Message,"Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634","Specify what approach the watcher should use if the system runs out of native file watchers."),Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include:t(6635,e.DiagnosticCategory.Message,"Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635","Include a list of files. This does not support glob patterns, as opposed to `include`."),Build_all_projects_including_those_that_appear_to_be_up_to_date:t(6636,e.DiagnosticCategory.Message,"Build_all_projects_including_those_that_appear_to_be_up_to_date_6636","Build all projects, including those that appear to be up to date."),Ensure_that_casing_is_correct_in_imports:t(6637,e.DiagnosticCategory.Message,"Ensure_that_casing_is_correct_in_imports_6637","Ensure that casing is correct in imports."),Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging:t(6638,e.DiagnosticCategory.Message,"Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638","Emit a v8 CPU profile of the compiler run for debugging."),Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file:t(6639,e.DiagnosticCategory.Message,"Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639","Allow importing helper functions from tslib once per project, instead of including them per-file."),Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation:t(6641,e.DiagnosticCategory.Message,"Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641","Specify a list of glob patterns that match files to be included in compilation."),Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects:t(6642,e.DiagnosticCategory.Message,"Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642","Save .tsbuildinfo files to allow for incremental compilation of projects."),Include_sourcemap_files_inside_the_emitted_JavaScript:t(6643,e.DiagnosticCategory.Message,"Include_sourcemap_files_inside_the_emitted_JavaScript_6643","Include sourcemap files inside the emitted JavaScript."),Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript:t(6644,e.DiagnosticCategory.Message,"Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644","Include source code in the sourcemaps inside the emitted JavaScript."),Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports:t(6645,e.DiagnosticCategory.Message,"Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645","Ensure that each file can be safely transpiled without relying on other imports."),Specify_what_JSX_code_is_generated:t(6646,e.DiagnosticCategory.Message,"Specify_what_JSX_code_is_generated_6646","Specify what JSX code is generated."),Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h:t(6647,e.DiagnosticCategory.Message,"Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647","Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'."),Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragment_or_Fragment:t(6648,e.DiagnosticCategory.Message,"Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648","Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'."),Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Asterisk:t(6649,e.DiagnosticCategory.Message,"Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649","Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'."),Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option:t(6650,e.DiagnosticCategory.Message,"Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650","Make keyof only return strings instead of string, numbers or symbols. Legacy option."),Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment:t(6651,e.DiagnosticCategory.Message,"Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651","Specify a set of bundled library declaration files that describe the target runtime environment."),Print_the_names_of_emitted_files_after_a_compilation:t(6652,e.DiagnosticCategory.Message,"Print_the_names_of_emitted_files_after_a_compilation_6652","Print the names of emitted files after a compilation."),Print_all_of_the_files_read_during_the_compilation:t(6653,e.DiagnosticCategory.Message,"Print_all_of_the_files_read_during_the_compilation_6653","Print all of the files read during the compilation."),Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit:t(6654,e.DiagnosticCategory.Message,"Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654","Set the language of the messaging from TypeScript. This does not affect emit."),Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations:t(6655,e.DiagnosticCategory.Message,"Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655","Specify the location where debugger should locate map files instead of generated locations."),Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicable_with_allowJs:t(6656,e.DiagnosticCategory.Message,"Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656","Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'."),Specify_what_module_code_is_generated:t(6657,e.DiagnosticCategory.Message,"Specify_what_module_code_is_generated_6657","Specify what module code is generated."),Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier:t(6658,e.DiagnosticCategory.Message,"Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658","Specify how TypeScript looks up a file from a given module specifier."),Set_the_newline_character_for_emitting_files:t(6659,e.DiagnosticCategory.Message,"Set_the_newline_character_for_emitting_files_6659","Set the newline character for emitting files."),Disable_emitting_files_from_a_compilation:t(6660,e.DiagnosticCategory.Message,"Disable_emitting_files_from_a_compilation_6660","Disable emitting files from a compilation."),Disable_generating_custom_helper_functions_like_extends_in_compiled_output:t(6661,e.DiagnosticCategory.Message,"Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661","Disable generating custom helper functions like '__extends' in compiled output."),Disable_emitting_files_if_any_type_checking_errors_are_reported:t(6662,e.DiagnosticCategory.Message,"Disable_emitting_files_if_any_type_checking_errors_are_reported_6662","Disable emitting files if any type checking errors are reported."),Disable_truncating_types_in_error_messages:t(6663,e.DiagnosticCategory.Message,"Disable_truncating_types_in_error_messages_6663","Disable truncating types in error messages."),Enable_error_reporting_for_fallthrough_cases_in_switch_statements:t(6664,e.DiagnosticCategory.Message,"Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664","Enable error reporting for fallthrough cases in switch statements."),Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type:t(6665,e.DiagnosticCategory.Message,"Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665","Enable error reporting for expressions and declarations with an implied 'any' type."),Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier:t(6666,e.DiagnosticCategory.Message,"Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666","Ensure overriding members in derived classes are marked with an override modifier."),Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function:t(6667,e.DiagnosticCategory.Message,"Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667","Enable error reporting for codepaths that do not explicitly return in a function."),Enable_error_reporting_when_this_is_given_the_type_any:t(6668,e.DiagnosticCategory.Message,"Enable_error_reporting_when_this_is_given_the_type_any_6668","Enable error reporting when 'this' is given the type 'any'."),Disable_adding_use_strict_directives_in_emitted_JavaScript_files:t(6669,e.DiagnosticCategory.Message,"Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669","Disable adding 'use strict' directives in emitted JavaScript files."),Disable_including_any_library_files_including_the_default_lib_d_ts:t(6670,e.DiagnosticCategory.Message,"Disable_including_any_library_files_including_the_default_lib_d_ts_6670","Disable including any library files, including the default lib.d.ts."),Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type:t(6671,e.DiagnosticCategory.Message,"Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671","Enforces using indexed accessors for keys declared using an indexed type."),Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add_to_a_project:t(6672,e.DiagnosticCategory.Message,"Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672","Disallow 'import's, 'require's or '<reference>'s from expanding the number of files TypeScript should add to a project."),Disable_strict_checking_of_generic_signatures_in_function_types:t(6673,e.DiagnosticCategory.Message,"Disable_strict_checking_of_generic_signatures_in_function_types_6673","Disable strict checking of generic signatures in function types."),Add_undefined_to_a_type_when_accessed_using_an_index:t(6674,e.DiagnosticCategory.Message,"Add_undefined_to_a_type_when_accessed_using_an_index_6674","Add 'undefined' to a type when accessed using an index."),Enable_error_reporting_when_local_variables_aren_t_read:t(6675,e.DiagnosticCategory.Message,"Enable_error_reporting_when_local_variables_aren_t_read_6675","Enable error reporting when local variables aren't read."),Raise_an_error_when_a_function_parameter_isn_t_read:t(6676,e.DiagnosticCategory.Message,"Raise_an_error_when_a_function_parameter_isn_t_read_6676","Raise an error when a function parameter isn't read."),Deprecated_setting_Use_outFile_instead:t(6677,e.DiagnosticCategory.Message,"Deprecated_setting_Use_outFile_instead_6677","Deprecated setting. Use 'outFile' instead."),Specify_an_output_folder_for_all_emitted_files:t(6678,e.DiagnosticCategory.Message,"Specify_an_output_folder_for_all_emitted_files_6678","Specify an output folder for all emitted files."),Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designates_a_file_that_bundles_all_d_ts_output:t(6679,e.DiagnosticCategory.Message,"Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679","Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output."),Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations:t(6680,e.DiagnosticCategory.Message,"Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680","Specify a set of entries that re-map imports to additional lookup locations."),Specify_a_list_of_language_service_plugins_to_include:t(6681,e.DiagnosticCategory.Message,"Specify_a_list_of_language_service_plugins_to_include_6681","Specify a list of language service plugins to include."),Disable_erasing_const_enum_declarations_in_generated_code:t(6682,e.DiagnosticCategory.Message,"Disable_erasing_const_enum_declarations_in_generated_code_6682","Disable erasing 'const enum' declarations in generated code."),Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node:t(6683,e.DiagnosticCategory.Message,"Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683","Disable resolving symlinks to their realpath. This correlates to the same flag in node."),Disable_wiping_the_console_in_watch_mode:t(6684,e.DiagnosticCategory.Message,"Disable_wiping_the_console_in_watch_mode_6684","Disable wiping the console in watch mode."),Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read:t(6685,e.DiagnosticCategory.Message,"Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read_6685","Enable color and formatting in TypeScript's output to make compiler errors easier to read."),Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit:t(6686,e.DiagnosticCategory.Message,"Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686","Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit."),Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references:t(6687,e.DiagnosticCategory.Message,"Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687","Specify an array of objects that specify paths for projects. Used in project references."),Disable_emitting_comments:t(6688,e.DiagnosticCategory.Message,"Disable_emitting_comments_6688","Disable emitting comments."),Enable_importing_json_files:t(6689,e.DiagnosticCategory.Message,"Enable_importing_json_files_6689","Enable importing .json files."),Specify_the_root_folder_within_your_source_files:t(6690,e.DiagnosticCategory.Message,"Specify_the_root_folder_within_your_source_files_6690","Specify the root folder within your source files."),Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules:t(6691,e.DiagnosticCategory.Message,"Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691","Allow multiple folders to be treated as one when resolving modules."),Skip_type_checking_d_ts_files_that_are_included_with_TypeScript:t(6692,e.DiagnosticCategory.Message,"Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692","Skip type checking .d.ts files that are included with TypeScript."),Skip_type_checking_all_d_ts_files:t(6693,e.DiagnosticCategory.Message,"Skip_type_checking_all_d_ts_files_6693","Skip type checking all .d.ts files."),Create_source_map_files_for_emitted_JavaScript_files:t(6694,e.DiagnosticCategory.Message,"Create_source_map_files_for_emitted_JavaScript_files_6694","Create source map files for emitted JavaScript files."),Specify_the_root_path_for_debuggers_to_find_the_reference_source_code:t(6695,e.DiagnosticCategory.Message,"Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695","Specify the root path for debuggers to find the reference source code."),Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function:t(6697,e.DiagnosticCategory.Message,"Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697","Check that the arguments for 'bind', 'call', and 'apply' methods match the original function."),When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible:t(6698,e.DiagnosticCategory.Message,"When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698","When assigning functions, check to ensure parameters and the return values are subtype-compatible."),When_type_checking_take_into_account_null_and_undefined:t(6699,e.DiagnosticCategory.Message,"When_type_checking_take_into_account_null_and_undefined_6699","When type checking, take into account 'null' and 'undefined'."),Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor:t(6700,e.DiagnosticCategory.Message,"Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700","Check for class properties that are declared but not set in the constructor."),Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments:t(6701,e.DiagnosticCategory.Message,"Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701","Disable emitting declarations that have '@internal' in their JSDoc comments."),Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals:t(6702,e.DiagnosticCategory.Message,"Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702","Disable reporting of excess property errors during the creation of object literals."),Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures:t(6703,e.DiagnosticCategory.Message,"Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703","Suppress 'noImplicitAny' errors when indexing objects that lack index signatures."),Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_support_recursive_watching_natively:t(6704,e.DiagnosticCategory.Message,"Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704","Synchronously call callbacks and update the state of directory watchers on platforms that don`t support recursive watching natively."),Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declarations:t(6705,e.DiagnosticCategory.Message,"Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705","Set the JavaScript language version for emitted JavaScript and include compatible library declarations."),Log_paths_used_during_the_moduleResolution_process:t(6706,e.DiagnosticCategory.Message,"Log_paths_used_during_the_moduleResolution_process_6706","Log paths used during the 'moduleResolution' process."),Specify_the_path_to_tsbuildinfo_incremental_compilation_file:t(6707,e.DiagnosticCategory.Message,"Specify_the_path_to_tsbuildinfo_incremental_compilation_file_6707","Specify the path to .tsbuildinfo incremental compilation file."),Specify_options_for_automatic_acquisition_of_declaration_files:t(6709,e.DiagnosticCategory.Message,"Specify_options_for_automatic_acquisition_of_declaration_files_6709","Specify options for automatic acquisition of declaration files."),Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types:t(6710,e.DiagnosticCategory.Message,"Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710","Specify multiple folders that act like './node_modules/@types'."),Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file:t(6711,e.DiagnosticCategory.Message,"Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711","Specify type package names to be included without being referenced in a source file."),Emit_ECMAScript_standard_compliant_class_fields:t(6712,e.DiagnosticCategory.Message,"Emit_ECMAScript_standard_compliant_class_fields_6712","Emit ECMAScript-standard-compliant class fields."),Enable_verbose_logging:t(6713,e.DiagnosticCategory.Message,"Enable_verbose_logging_6713","Enable verbose logging."),Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality:t(6714,e.DiagnosticCategory.Message,"Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714","Specify how directories are watched on systems that lack recursive file-watching functionality."),Specify_how_the_TypeScript_watch_mode_works:t(6715,e.DiagnosticCategory.Message,"Specify_how_the_TypeScript_watch_mode_works_6715","Specify how the TypeScript watch mode works."),Require_undeclared_properties_from_index_signatures_to_use_element_accesses:t(6717,e.DiagnosticCategory.Message,"Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717","Require undeclared properties from index signatures to use element accesses."),Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types:t(6718,e.DiagnosticCategory.Message,"Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718","Specify emit/checking behavior for imports that are only used for types."),Default_catch_clause_variables_as_unknown_instead_of_any:t(6803,e.DiagnosticCategory.Message,"Default_catch_clause_variables_as_unknown_instead_of_any_6803","Default catch clause variables as 'unknown' instead of 'any'."),one_of_Colon:t(6900,e.DiagnosticCategory.Message,"one_of_Colon_6900","one of:"),one_or_more_Colon:t(6901,e.DiagnosticCategory.Message,"one_or_more_Colon_6901","one or more:"),type_Colon:t(6902,e.DiagnosticCategory.Message,"type_Colon_6902","type:"),default_Colon:t(6903,e.DiagnosticCategory.Message,"default_Colon_6903","default:"),module_system_or_esModuleInterop:t(6904,e.DiagnosticCategory.Message,"module_system_or_esModuleInterop_6904",'module === "system" or esModuleInterop'),false_unless_strict_is_set:t(6905,e.DiagnosticCategory.Message,"false_unless_strict_is_set_6905","`false`, unless `strict` is set"),false_unless_composite_is_set:t(6906,e.DiagnosticCategory.Message,"false_unless_composite_is_set_6906","`false`, unless `composite` is set"),node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified:t(6907,e.DiagnosticCategory.Message,"node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907",'`["node_modules", "bower_components", "jspm_packages"]`, plus the value of `outDir` if one is specified.'),if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk:t(6908,e.DiagnosticCategory.Message,"if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908",'`[]` if `files` is specified, otherwise `["**/*"]`'),true_if_composite_false_otherwise:t(6909,e.DiagnosticCategory.Message,"true_if_composite_false_otherwise_6909","`true` if `composite`, `false` otherwise"),module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node:t(69010,e.DiagnosticCategory.Message,"module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node_69010","module === `AMD` or `UMD` or `System` or `ES6`, then `Classic`, Otherwise `Node`"),Computed_from_the_list_of_input_files:t(6911,e.DiagnosticCategory.Message,"Computed_from_the_list_of_input_files_6911","Computed from the list of input files"),Platform_specific:t(6912,e.DiagnosticCategory.Message,"Platform_specific_6912","Platform specific"),You_can_learn_about_all_of_the_compiler_options_at_0:t(6913,e.DiagnosticCategory.Message,"You_can_learn_about_all_of_the_compiler_options_at_0_6913","You can learn about all of the compiler options at {0}"),Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_config_watch_mode_with_Colon:t(6914,e.DiagnosticCategory.Message,"Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914","Including --watch, -w will start watching the current project for the file changes. Once set, you can config watch mode with:"),Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_trigger_building_composite_projects_which_you_can_learn_more_about_at_0:t(6915,e.DiagnosticCategory.Message,"Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915","Using --build, -b will make tsc behave more like a build orchestrator than a compiler. This is used to trigger building composite projects which you can learn more about at {0}"),COMMON_COMMANDS:t(6916,e.DiagnosticCategory.Message,"COMMON_COMMANDS_6916","COMMON COMMANDS"),ALL_COMPILER_OPTIONS:t(6917,e.DiagnosticCategory.Message,"ALL_COMPILER_OPTIONS_6917","ALL COMPILER OPTIONS"),WATCH_OPTIONS:t(6918,e.DiagnosticCategory.Message,"WATCH_OPTIONS_6918","WATCH OPTIONS"),BUILD_OPTIONS:t(6919,e.DiagnosticCategory.Message,"BUILD_OPTIONS_6919","BUILD OPTIONS"),COMMON_COMPILER_OPTIONS:t(6920,e.DiagnosticCategory.Message,"COMMON_COMPILER_OPTIONS_6920","COMMON COMPILER OPTIONS"),COMMAND_LINE_FLAGS:t(6921,e.DiagnosticCategory.Message,"COMMAND_LINE_FLAGS_6921","COMMAND LINE FLAGS"),tsc_Colon_The_TypeScript_Compiler:t(6922,e.DiagnosticCategory.Message,"tsc_Colon_The_TypeScript_Compiler_6922","tsc: The TypeScript Compiler"),Compiles_the_current_project_tsconfig_json_in_the_working_directory:t(6923,e.DiagnosticCategory.Message,"Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923","Compiles the current project (tsconfig.json in the working directory.)"),Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options:t(6924,e.DiagnosticCategory.Message,"Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924","Ignoring tsconfig.json, compiles the specified files with default compiler options."),Build_a_composite_project_in_the_working_directory:t(6925,e.DiagnosticCategory.Message,"Build_a_composite_project_in_the_working_directory_6925","Build a composite project in the working directory."),Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory:t(6926,e.DiagnosticCategory.Message,"Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926","Creates a tsconfig.json with the recommended settings in the working directory."),Compiles_the_TypeScript_project_located_at_the_specified_path:t(6927,e.DiagnosticCategory.Message,"Compiles_the_TypeScript_project_located_at_the_specified_path_6927","Compiles the TypeScript project located at the specified path."),An_expanded_version_of_this_information_showing_all_possible_compiler_options:t(6928,e.DiagnosticCategory.Message,"An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928","An expanded version of this information, showing all possible compiler options"),Compiles_the_current_project_with_additional_settings:t(6929,e.DiagnosticCategory.Message,"Compiles_the_current_project_with_additional_settings_6929","Compiles the current project, with additional settings."),true_for_ES2022_and_above_including_ESNext:t(6930,e.DiagnosticCategory.Message,"true_for_ES2022_and_above_including_ESNext_6930","`true` for ES2022 and above, including ESNext."),List_of_file_name_suffixes_to_search_when_resolving_a_module:t(6931,e.DiagnosticCategory.Error,"List_of_file_name_suffixes_to_search_when_resolving_a_module_6931","List of file name suffixes to search when resolving a module."),Variable_0_implicitly_has_an_1_type:t(7005,e.DiagnosticCategory.Error,"Variable_0_implicitly_has_an_1_type_7005","Variable '{0}' implicitly has an '{1}' type."),Parameter_0_implicitly_has_an_1_type:t(7006,e.DiagnosticCategory.Error,"Parameter_0_implicitly_has_an_1_type_7006","Parameter '{0}' implicitly has an '{1}' type."),Member_0_implicitly_has_an_1_type:t(7008,e.DiagnosticCategory.Error,"Member_0_implicitly_has_an_1_type_7008","Member '{0}' implicitly has an '{1}' type."),new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type:t(7009,e.DiagnosticCategory.Error,"new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009","'new' expression, whose target lacks a construct signature, implicitly has an 'any' type."),_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type:t(7010,e.DiagnosticCategory.Error,"_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type_7010","'{0}', which lacks return-type annotation, implicitly has an '{1}' return type."),Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type:t(7011,e.DiagnosticCategory.Error,"Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011","Function expression, which lacks return-type annotation, implicitly has an '{0}' return type."),Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type:t(7013,e.DiagnosticCategory.Error,"Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013","Construct signature, which lacks return-type annotation, implicitly has an 'any' return type."),Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type:t(7014,e.DiagnosticCategory.Error,"Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014","Function type, which lacks return-type annotation, implicitly has an '{0}' return type."),Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number:t(7015,e.DiagnosticCategory.Error,"Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015","Element implicitly has an 'any' type because index expression is not of type 'number'."),Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type:t(7016,e.DiagnosticCategory.Error,"Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016","Could not find a declaration file for module '{0}'. '{1}' implicitly has an 'any' type."),Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature:t(7017,e.DiagnosticCategory.Error,"Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017","Element implicitly has an 'any' type because type '{0}' has no index signature."),Object_literal_s_property_0_implicitly_has_an_1_type:t(7018,e.DiagnosticCategory.Error,"Object_literal_s_property_0_implicitly_has_an_1_type_7018","Object literal's property '{0}' implicitly has an '{1}' type."),Rest_parameter_0_implicitly_has_an_any_type:t(7019,e.DiagnosticCategory.Error,"Rest_parameter_0_implicitly_has_an_any_type_7019","Rest parameter '{0}' implicitly has an 'any[]' type."),Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type:t(7020,e.DiagnosticCategory.Error,"Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020","Call signature, which lacks return-type annotation, implicitly has an 'any' return type."),_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or_indirectly_in_its_own_initializer:t(7022,e.DiagnosticCategory.Error,"_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022","'{0}' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer."),_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions:t(7023,e.DiagnosticCategory.Error,"_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023","'{0}' implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions."),Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions:t(7024,e.DiagnosticCategory.Error,"Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024","Function implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions."),Generator_implicitly_has_yield_type_0_because_it_does_not_yield_any_values_Consider_supplying_a_return_type_annotation:t(7025,e.DiagnosticCategory.Error,"Generator_implicitly_has_yield_type_0_because_it_does_not_yield_any_values_Consider_supplying_a_retu_7025","Generator implicitly has yield type '{0}' because it does not yield any values. Consider supplying a return type annotation."),JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists:t(7026,e.DiagnosticCategory.Error,"JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists_7026","JSX element implicitly has type 'any' because no interface 'JSX.{0}' exists."),Unreachable_code_detected:t(7027,e.DiagnosticCategory.Error,"Unreachable_code_detected_7027","Unreachable code detected.",!0),Unused_label:t(7028,e.DiagnosticCategory.Error,"Unused_label_7028","Unused label.",!0),Fallthrough_case_in_switch:t(7029,e.DiagnosticCategory.Error,"Fallthrough_case_in_switch_7029","Fallthrough case in switch."),Not_all_code_paths_return_a_value:t(7030,e.DiagnosticCategory.Error,"Not_all_code_paths_return_a_value_7030","Not all code paths return a value."),Binding_element_0_implicitly_has_an_1_type:t(7031,e.DiagnosticCategory.Error,"Binding_element_0_implicitly_has_an_1_type_7031","Binding element '{0}' implicitly has an '{1}' type."),Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation:t(7032,e.DiagnosticCategory.Error,"Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032","Property '{0}' implicitly has type 'any', because its set accessor lacks a parameter type annotation."),Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation:t(7033,e.DiagnosticCategory.Error,"Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033","Property '{0}' implicitly has type 'any', because its get accessor lacks a return type annotation."),Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined:t(7034,e.DiagnosticCategory.Error,"Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined_7034","Variable '{0}' implicitly has type '{1}' in some locations where its type cannot be determined."),Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare_module_0:t(7035,e.DiagnosticCategory.Error,"Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035","Try `npm i --save-dev @types/{1}` if it exists or add a new declaration (.d.ts) file containing `declare module '{0}';`"),Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0:t(7036,e.DiagnosticCategory.Error,"Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036","Dynamic import's specifier must be of type 'string', but here has type '{0}'."),Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for_all_imports_Implies_allowSyntheticDefaultImports:t(7037,e.DiagnosticCategory.Message,"Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037","Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'."),Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cause_a_failure_at_runtime_Consider_using_a_default_import_or_import_require_here_instead:t(7038,e.DiagnosticCategory.Message,"Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cau_7038","Type originates at this import. A namespace-style import cannot be called or constructed, and will cause a failure at runtime. Consider using a default import or import require here instead."),Mapped_object_type_implicitly_has_an_any_template_type:t(7039,e.DiagnosticCategory.Error,"Mapped_object_type_implicitly_has_an_any_template_type_7039","Mapped object type implicitly has an 'any' template type."),If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_Slash_Slashgithub_com_SlashDefinitelyTyped_SlashDefinitelyTyped_Slashtree_Slashmaster_Slashtypes_Slash_1:t(7040,e.DiagnosticCategory.Error,"If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040","If the '{0}' package actually exposes this module, consider sending a pull request to amend 'https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}'"),The_containing_arrow_function_captures_the_global_value_of_this:t(7041,e.DiagnosticCategory.Error,"The_containing_arrow_function_captures_the_global_value_of_this_7041","The containing arrow function captures the global value of 'this'."),Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used:t(7042,e.DiagnosticCategory.Error,"Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042","Module '{0}' was resolved to '{1}', but '--resolveJsonModule' is not used."),Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage:t(7043,e.DiagnosticCategory.Suggestion,"Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7043","Variable '{0}' implicitly has an '{1}' type, but a better type may be inferred from usage."),Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage:t(7044,e.DiagnosticCategory.Suggestion,"Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7044","Parameter '{0}' implicitly has an '{1}' type, but a better type may be inferred from usage."),Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage:t(7045,e.DiagnosticCategory.Suggestion,"Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045","Member '{0}' implicitly has an '{1}' type, but a better type may be inferred from usage."),Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage:t(7046,e.DiagnosticCategory.Suggestion,"Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage_7046","Variable '{0}' implicitly has type '{1}' in some locations, but a better type may be inferred from usage."),Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage:t(7047,e.DiagnosticCategory.Suggestion,"Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047","Rest parameter '{0}' implicitly has an 'any[]' type, but a better type may be inferred from usage."),Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage:t(7048,e.DiagnosticCategory.Suggestion,"Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage_7048","Property '{0}' implicitly has type 'any', but a better type for its get accessor may be inferred from usage."),Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage:t(7049,e.DiagnosticCategory.Suggestion,"Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage_7049","Property '{0}' implicitly has type 'any', but a better type for its set accessor may be inferred from usage."),_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage:t(7050,e.DiagnosticCategory.Suggestion,"_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050","'{0}' implicitly has an '{1}' return type, but a better type may be inferred from usage."),Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1:t(7051,e.DiagnosticCategory.Error,"Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051","Parameter has a name but no type. Did you mean '{0}: {1}'?"),Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1:t(7052,e.DiagnosticCategory.Error,"Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052","Element implicitly has an 'any' type because type '{0}' has no index signature. Did you mean to call '{1}'?"),Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1:t(7053,e.DiagnosticCategory.Error,"Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053","Element implicitly has an 'any' type because expression of type '{0}' can't be used to index type '{1}'."),No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1:t(7054,e.DiagnosticCategory.Error,"No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054","No index signature with a parameter of type '{0}' was found on type '{1}'."),_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type:t(7055,e.DiagnosticCategory.Error,"_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055","'{0}', which lacks return-type annotation, implicitly has an '{1}' yield type."),The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_type_annotation_is_needed:t(7056,e.DiagnosticCategory.Error,"The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056","The inferred type of this node exceeds the maximum length the compiler will serialize. An explicit type annotation is needed."),yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_type_annotation:t(7057,e.DiagnosticCategory.Error,"yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057","'yield' expression implicitly results in an 'any' type because its containing generator lacks a return-type annotation."),If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_declare_module_1:t(7058,e.DiagnosticCategory.Error,"If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058","If the '{0}' package actually exposes this module, try adding a new declaration (.d.ts) file containing `declare module '{1}';`"),This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead:t(7059,e.DiagnosticCategory.Error,"This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059","This syntax is reserved in files with the .mts or .cts extension. Use an `as` expression instead."),This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_constraint:t(7060,e.DiagnosticCategory.Error,"This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060","This syntax is reserved in files with the .mts or .cts extension. Add a trailing comma or explicit constraint."),A_mapped_type_may_not_declare_properties_or_methods:t(7061,e.DiagnosticCategory.Error,"A_mapped_type_may_not_declare_properties_or_methods_7061","A mapped type may not declare properties or methods."),You_cannot_rename_this_element:t(8e3,e.DiagnosticCategory.Error,"You_cannot_rename_this_element_8000","You cannot rename this element."),You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library:t(8001,e.DiagnosticCategory.Error,"You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001","You cannot rename elements that are defined in the standard TypeScript library."),import_can_only_be_used_in_TypeScript_files:t(8002,e.DiagnosticCategory.Error,"import_can_only_be_used_in_TypeScript_files_8002","'import ... =' can only be used in TypeScript files."),export_can_only_be_used_in_TypeScript_files:t(8003,e.DiagnosticCategory.Error,"export_can_only_be_used_in_TypeScript_files_8003","'export =' can only be used in TypeScript files."),Type_parameter_declarations_can_only_be_used_in_TypeScript_files:t(8004,e.DiagnosticCategory.Error,"Type_parameter_declarations_can_only_be_used_in_TypeScript_files_8004","Type parameter declarations can only be used in TypeScript files."),implements_clauses_can_only_be_used_in_TypeScript_files:t(8005,e.DiagnosticCategory.Error,"implements_clauses_can_only_be_used_in_TypeScript_files_8005","'implements' clauses can only be used in TypeScript files."),_0_declarations_can_only_be_used_in_TypeScript_files:t(8006,e.DiagnosticCategory.Error,"_0_declarations_can_only_be_used_in_TypeScript_files_8006","'{0}' declarations can only be used in TypeScript files."),Type_aliases_can_only_be_used_in_TypeScript_files:t(8008,e.DiagnosticCategory.Error,"Type_aliases_can_only_be_used_in_TypeScript_files_8008","Type aliases can only be used in TypeScript files."),The_0_modifier_can_only_be_used_in_TypeScript_files:t(8009,e.DiagnosticCategory.Error,"The_0_modifier_can_only_be_used_in_TypeScript_files_8009","The '{0}' modifier can only be used in TypeScript files."),Type_annotations_can_only_be_used_in_TypeScript_files:t(8010,e.DiagnosticCategory.Error,"Type_annotations_can_only_be_used_in_TypeScript_files_8010","Type annotations can only be used in TypeScript files."),Type_arguments_can_only_be_used_in_TypeScript_files:t(8011,e.DiagnosticCategory.Error,"Type_arguments_can_only_be_used_in_TypeScript_files_8011","Type arguments can only be used in TypeScript files."),Parameter_modifiers_can_only_be_used_in_TypeScript_files:t(8012,e.DiagnosticCategory.Error,"Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012","Parameter modifiers can only be used in TypeScript files."),Non_null_assertions_can_only_be_used_in_TypeScript_files:t(8013,e.DiagnosticCategory.Error,"Non_null_assertions_can_only_be_used_in_TypeScript_files_8013","Non-null assertions can only be used in TypeScript files."),Type_assertion_expressions_can_only_be_used_in_TypeScript_files:t(8016,e.DiagnosticCategory.Error,"Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016","Type assertion expressions can only be used in TypeScript files."),Octal_literal_types_must_use_ES2015_syntax_Use_the_syntax_0:t(8017,e.DiagnosticCategory.Error,"Octal_literal_types_must_use_ES2015_syntax_Use_the_syntax_0_8017","Octal literal types must use ES2015 syntax. Use the syntax '{0}'."),Octal_literals_are_not_allowed_in_enums_members_initializer_Use_the_syntax_0:t(8018,e.DiagnosticCategory.Error,"Octal_literals_are_not_allowed_in_enums_members_initializer_Use_the_syntax_0_8018","Octal literals are not allowed in enums members initializer. Use the syntax '{0}'."),Report_errors_in_js_files:t(8019,e.DiagnosticCategory.Message,"Report_errors_in_js_files_8019","Report errors in .js files."),JSDoc_types_can_only_be_used_inside_documentation_comments:t(8020,e.DiagnosticCategory.Error,"JSDoc_types_can_only_be_used_inside_documentation_comments_8020","JSDoc types can only be used inside documentation comments."),JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags:t(8021,e.DiagnosticCategory.Error,"JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021","JSDoc '@typedef' tag should either have a type annotation or be followed by '@property' or '@member' tags."),JSDoc_0_is_not_attached_to_a_class:t(8022,e.DiagnosticCategory.Error,"JSDoc_0_is_not_attached_to_a_class_8022","JSDoc '@{0}' is not attached to a class."),JSDoc_0_1_does_not_match_the_extends_2_clause:t(8023,e.DiagnosticCategory.Error,"JSDoc_0_1_does_not_match_the_extends_2_clause_8023","JSDoc '@{0} {1}' does not match the 'extends {2}' clause."),JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name:t(8024,e.DiagnosticCategory.Error,"JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024","JSDoc '@param' tag has name '{0}', but there is no parameter with that name."),Class_declarations_cannot_have_more_than_one_augments_or_extends_tag:t(8025,e.DiagnosticCategory.Error,"Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025","Class declarations cannot have more than one '@augments' or '@extends' tag."),Expected_0_type_arguments_provide_these_with_an_extends_tag:t(8026,e.DiagnosticCategory.Error,"Expected_0_type_arguments_provide_these_with_an_extends_tag_8026","Expected {0} type arguments; provide these with an '@extends' tag."),Expected_0_1_type_arguments_provide_these_with_an_extends_tag:t(8027,e.DiagnosticCategory.Error,"Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027","Expected {0}-{1} type arguments; provide these with an '@extends' tag."),JSDoc_may_only_appear_in_the_last_parameter_of_a_signature:t(8028,e.DiagnosticCategory.Error,"JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028","JSDoc '...' may only appear in the last parameter of a signature."),JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_had_an_array_type:t(8029,e.DiagnosticCategory.Error,"JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029","JSDoc '@param' tag has name '{0}', but there is no parameter with that name. It would match 'arguments' if it had an array type."),The_type_of_a_function_declaration_must_match_the_function_s_signature:t(8030,e.DiagnosticCategory.Error,"The_type_of_a_function_declaration_must_match_the_function_s_signature_8030","The type of a function declaration must match the function's signature."),You_cannot_rename_a_module_via_a_global_import:t(8031,e.DiagnosticCategory.Error,"You_cannot_rename_a_module_via_a_global_import_8031","You cannot rename a module via a global import."),Qualified_name_0_is_not_allowed_without_a_leading_param_object_1:t(8032,e.DiagnosticCategory.Error,"Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032","Qualified name '{0}' is not allowed without a leading '@param {object} {1}'."),A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags:t(8033,e.DiagnosticCategory.Error,"A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033","A JSDoc '@typedef' comment may not contain multiple '@type' tags."),The_tag_was_first_specified_here:t(8034,e.DiagnosticCategory.Error,"The_tag_was_first_specified_here_8034","The tag was first specified here."),You_cannot_rename_elements_that_are_defined_in_a_node_modules_folder:t(8035,e.DiagnosticCategory.Error,"You_cannot_rename_elements_that_are_defined_in_a_node_modules_folder_8035","You cannot rename elements that are defined in a 'node_modules' folder."),You_cannot_rename_elements_that_are_defined_in_another_node_modules_folder:t(8036,e.DiagnosticCategory.Error,"You_cannot_rename_elements_that_are_defined_in_another_node_modules_folder_8036","You cannot rename elements that are defined in another 'node_modules' folder."),Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files:t(8037,e.DiagnosticCategory.Error,"Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files_8037","Type satisfaction expressions can only be used in TypeScript files."),Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_declaration_emit:t(9005,e.DiagnosticCategory.Error,"Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005","Declaration emit for this file requires using private name '{0}'. An explicit type annotation may unblock declaration emit."),Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotation_may_unblock_declaration_emit:t(9006,e.DiagnosticCategory.Error,"Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006","Declaration emit for this file requires using private name '{0}' from module '{1}'. An explicit type annotation may unblock declaration emit."),JSX_attributes_must_only_be_assigned_a_non_empty_expression:t(17e3,e.DiagnosticCategory.Error,"JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000","JSX attributes must only be assigned a non-empty 'expression'."),JSX_elements_cannot_have_multiple_attributes_with_the_same_name:t(17001,e.DiagnosticCategory.Error,"JSX_elements_cannot_have_multiple_attributes_with_the_same_name_17001","JSX elements cannot have multiple attributes with the same name."),Expected_corresponding_JSX_closing_tag_for_0:t(17002,e.DiagnosticCategory.Error,"Expected_corresponding_JSX_closing_tag_for_0_17002","Expected corresponding JSX closing tag for '{0}'."),Cannot_use_JSX_unless_the_jsx_flag_is_provided:t(17004,e.DiagnosticCategory.Error,"Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004","Cannot use JSX unless the '--jsx' flag is provided."),A_constructor_cannot_contain_a_super_call_when_its_class_extends_null:t(17005,e.DiagnosticCategory.Error,"A_constructor_cannot_contain_a_super_call_when_its_class_extends_null_17005","A constructor cannot contain a 'super' call when its class extends 'null'."),An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses:t(17006,e.DiagnosticCategory.Error,"An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006","An unary expression with the '{0}' operator is not allowed in the left-hand side of an exponentiation expression. Consider enclosing the expression in parentheses."),A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses:t(17007,e.DiagnosticCategory.Error,"A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Con_17007","A type assertion expression is not allowed in the left-hand side of an exponentiation expression. Consider enclosing the expression in parentheses."),JSX_element_0_has_no_corresponding_closing_tag:t(17008,e.DiagnosticCategory.Error,"JSX_element_0_has_no_corresponding_closing_tag_17008","JSX element '{0}' has no corresponding closing tag."),super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class:t(17009,e.DiagnosticCategory.Error,"super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class_17009","'super' must be called before accessing 'this' in the constructor of a derived class."),Unknown_type_acquisition_option_0:t(17010,e.DiagnosticCategory.Error,"Unknown_type_acquisition_option_0_17010","Unknown type acquisition option '{0}'."),super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class:t(17011,e.DiagnosticCategory.Error,"super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class_17011","'super' must be called before accessing a property of 'super' in the constructor of a derived class."),_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2:t(17012,e.DiagnosticCategory.Error,"_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012","'{0}' is not a valid meta-property for keyword '{1}'. Did you mean '{2}'?"),Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constructor:t(17013,e.DiagnosticCategory.Error,"Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constru_17013","Meta-property '{0}' is only allowed in the body of a function declaration, function expression, or constructor."),JSX_fragment_has_no_corresponding_closing_tag:t(17014,e.DiagnosticCategory.Error,"JSX_fragment_has_no_corresponding_closing_tag_17014","JSX fragment has no corresponding closing tag."),Expected_corresponding_closing_tag_for_JSX_fragment:t(17015,e.DiagnosticCategory.Error,"Expected_corresponding_closing_tag_for_JSX_fragment_17015","Expected corresponding closing tag for JSX fragment."),The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_compiler_option:t(17016,e.DiagnosticCategory.Error,"The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_com_17016","The 'jsxFragmentFactory' compiler option must be provided to use JSX fragments with the 'jsxFactory' compiler option."),An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments:t(17017,e.DiagnosticCategory.Error,"An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017","An @jsxFrag pragma is required when using an @jsx pragma with JSX fragments."),Unknown_type_acquisition_option_0_Did_you_mean_1:t(17018,e.DiagnosticCategory.Error,"Unknown_type_acquisition_option_0_Did_you_mean_1_17018","Unknown type acquisition option '{0}'. Did you mean '{1}'?"),Circularity_detected_while_resolving_configuration_Colon_0:t(18e3,e.DiagnosticCategory.Error,"Circularity_detected_while_resolving_configuration_Colon_0_18000","Circularity detected while resolving configuration: {0}"),The_files_list_in_config_file_0_is_empty:t(18002,e.DiagnosticCategory.Error,"The_files_list_in_config_file_0_is_empty_18002","The 'files' list in config file '{0}' is empty."),No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2:t(18003,e.DiagnosticCategory.Error,"No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003","No inputs were found in config file '{0}'. Specified 'include' paths were '{1}' and 'exclude' paths were '{2}'."),File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module:t(80001,e.DiagnosticCategory.Suggestion,"File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module_80001","File is a CommonJS module; it may be converted to an ES module."),This_constructor_function_may_be_converted_to_a_class_declaration:t(80002,e.DiagnosticCategory.Suggestion,"This_constructor_function_may_be_converted_to_a_class_declaration_80002","This constructor function may be converted to a class declaration."),Import_may_be_converted_to_a_default_import:t(80003,e.DiagnosticCategory.Suggestion,"Import_may_be_converted_to_a_default_import_80003","Import may be converted to a default import."),JSDoc_types_may_be_moved_to_TypeScript_types:t(80004,e.DiagnosticCategory.Suggestion,"JSDoc_types_may_be_moved_to_TypeScript_types_80004","JSDoc types may be moved to TypeScript types."),require_call_may_be_converted_to_an_import:t(80005,e.DiagnosticCategory.Suggestion,"require_call_may_be_converted_to_an_import_80005","'require' call may be converted to an import."),This_may_be_converted_to_an_async_function:t(80006,e.DiagnosticCategory.Suggestion,"This_may_be_converted_to_an_async_function_80006","This may be converted to an async function."),await_has_no_effect_on_the_type_of_this_expression:t(80007,e.DiagnosticCategory.Suggestion,"await_has_no_effect_on_the_type_of_this_expression_80007","'await' has no effect on the type of this expression."),Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accurately_as_integers:t(80008,e.DiagnosticCategory.Suggestion,"Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008","Numeric literals with absolute values equal to 2^53 or greater are too large to be represented accurately as integers."),Add_missing_super_call:t(90001,e.DiagnosticCategory.Message,"Add_missing_super_call_90001","Add missing 'super()' call"),Make_super_call_the_first_statement_in_the_constructor:t(90002,e.DiagnosticCategory.Message,"Make_super_call_the_first_statement_in_the_constructor_90002","Make 'super()' call the first statement in the constructor"),Change_extends_to_implements:t(90003,e.DiagnosticCategory.Message,"Change_extends_to_implements_90003","Change 'extends' to 'implements'"),Remove_unused_declaration_for_Colon_0:t(90004,e.DiagnosticCategory.Message,"Remove_unused_declaration_for_Colon_0_90004","Remove unused declaration for: '{0}'"),Remove_import_from_0:t(90005,e.DiagnosticCategory.Message,"Remove_import_from_0_90005","Remove import from '{0}'"),Implement_interface_0:t(90006,e.DiagnosticCategory.Message,"Implement_interface_0_90006","Implement interface '{0}'"),Implement_inherited_abstract_class:t(90007,e.DiagnosticCategory.Message,"Implement_inherited_abstract_class_90007","Implement inherited abstract class"),Add_0_to_unresolved_variable:t(90008,e.DiagnosticCategory.Message,"Add_0_to_unresolved_variable_90008","Add '{0}.' to unresolved variable"),Remove_variable_statement:t(90010,e.DiagnosticCategory.Message,"Remove_variable_statement_90010","Remove variable statement"),Remove_template_tag:t(90011,e.DiagnosticCategory.Message,"Remove_template_tag_90011","Remove template tag"),Remove_type_parameters:t(90012,e.DiagnosticCategory.Message,"Remove_type_parameters_90012","Remove type parameters"),Import_0_from_1:t(90013,e.DiagnosticCategory.Message,"Import_0_from_1_90013","Import '{0}' from \"{1}\""),Change_0_to_1:t(90014,e.DiagnosticCategory.Message,"Change_0_to_1_90014","Change '{0}' to '{1}'"),Declare_property_0:t(90016,e.DiagnosticCategory.Message,"Declare_property_0_90016","Declare property '{0}'"),Add_index_signature_for_property_0:t(90017,e.DiagnosticCategory.Message,"Add_index_signature_for_property_0_90017","Add index signature for property '{0}'"),Disable_checking_for_this_file:t(90018,e.DiagnosticCategory.Message,"Disable_checking_for_this_file_90018","Disable checking for this file"),Ignore_this_error_message:t(90019,e.DiagnosticCategory.Message,"Ignore_this_error_message_90019","Ignore this error message"),Initialize_property_0_in_the_constructor:t(90020,e.DiagnosticCategory.Message,"Initialize_property_0_in_the_constructor_90020","Initialize property '{0}' in the constructor"),Initialize_static_property_0:t(90021,e.DiagnosticCategory.Message,"Initialize_static_property_0_90021","Initialize static property '{0}'"),Change_spelling_to_0:t(90022,e.DiagnosticCategory.Message,"Change_spelling_to_0_90022","Change spelling to '{0}'"),Declare_method_0:t(90023,e.DiagnosticCategory.Message,"Declare_method_0_90023","Declare method '{0}'"),Declare_static_method_0:t(90024,e.DiagnosticCategory.Message,"Declare_static_method_0_90024","Declare static method '{0}'"),Prefix_0_with_an_underscore:t(90025,e.DiagnosticCategory.Message,"Prefix_0_with_an_underscore_90025","Prefix '{0}' with an underscore"),Rewrite_as_the_indexed_access_type_0:t(90026,e.DiagnosticCategory.Message,"Rewrite_as_the_indexed_access_type_0_90026","Rewrite as the indexed access type '{0}'"),Declare_static_property_0:t(90027,e.DiagnosticCategory.Message,"Declare_static_property_0_90027","Declare static property '{0}'"),Call_decorator_expression:t(90028,e.DiagnosticCategory.Message,"Call_decorator_expression_90028","Call decorator expression"),Add_async_modifier_to_containing_function:t(90029,e.DiagnosticCategory.Message,"Add_async_modifier_to_containing_function_90029","Add async modifier to containing function"),Replace_infer_0_with_unknown:t(90030,e.DiagnosticCategory.Message,"Replace_infer_0_with_unknown_90030","Replace 'infer {0}' with 'unknown'"),Replace_all_unused_infer_with_unknown:t(90031,e.DiagnosticCategory.Message,"Replace_all_unused_infer_with_unknown_90031","Replace all unused 'infer' with 'unknown'"),Add_parameter_name:t(90034,e.DiagnosticCategory.Message,"Add_parameter_name_90034","Add parameter name"),Declare_private_property_0:t(90035,e.DiagnosticCategory.Message,"Declare_private_property_0_90035","Declare private property '{0}'"),Replace_0_with_Promise_1:t(90036,e.DiagnosticCategory.Message,"Replace_0_with_Promise_1_90036","Replace '{0}' with 'Promise<{1}>'"),Fix_all_incorrect_return_type_of_an_async_functions:t(90037,e.DiagnosticCategory.Message,"Fix_all_incorrect_return_type_of_an_async_functions_90037","Fix all incorrect return type of an async functions"),Declare_private_method_0:t(90038,e.DiagnosticCategory.Message,"Declare_private_method_0_90038","Declare private method '{0}'"),Remove_unused_destructuring_declaration:t(90039,e.DiagnosticCategory.Message,"Remove_unused_destructuring_declaration_90039","Remove unused destructuring declaration"),Remove_unused_declarations_for_Colon_0:t(90041,e.DiagnosticCategory.Message,"Remove_unused_declarations_for_Colon_0_90041","Remove unused declarations for: '{0}'"),Declare_a_private_field_named_0:t(90053,e.DiagnosticCategory.Message,"Declare_a_private_field_named_0_90053","Declare a private field named '{0}'."),Includes_imports_of_types_referenced_by_0:t(90054,e.DiagnosticCategory.Message,"Includes_imports_of_types_referenced_by_0_90054","Includes imports of types referenced by '{0}'"),Remove_type_from_import_declaration_from_0:t(90055,e.DiagnosticCategory.Message,"Remove_type_from_import_declaration_from_0_90055","Remove 'type' from import declaration from \"{0}\""),Remove_type_from_import_of_0_from_1:t(90056,e.DiagnosticCategory.Message,"Remove_type_from_import_of_0_from_1_90056","Remove 'type' from import of '{0}' from \"{1}\""),Add_import_from_0:t(90057,e.DiagnosticCategory.Message,"Add_import_from_0_90057",'Add import from "{0}"'),Update_import_from_0:t(90058,e.DiagnosticCategory.Message,"Update_import_from_0_90058",'Update import from "{0}"'),Export_0_from_module_1:t(90059,e.DiagnosticCategory.Message,"Export_0_from_module_1_90059","Export '{0}' from module '{1}'"),Export_all_referenced_locals:t(90060,e.DiagnosticCategory.Message,"Export_all_referenced_locals_90060","Export all referenced locals"),Convert_function_to_an_ES2015_class:t(95001,e.DiagnosticCategory.Message,"Convert_function_to_an_ES2015_class_95001","Convert function to an ES2015 class"),Convert_0_to_1_in_0:t(95003,e.DiagnosticCategory.Message,"Convert_0_to_1_in_0_95003","Convert '{0}' to '{1} in {0}'"),Extract_to_0_in_1:t(95004,e.DiagnosticCategory.Message,"Extract_to_0_in_1_95004","Extract to {0} in {1}"),Extract_function:t(95005,e.DiagnosticCategory.Message,"Extract_function_95005","Extract function"),Extract_constant:t(95006,e.DiagnosticCategory.Message,"Extract_constant_95006","Extract constant"),Extract_to_0_in_enclosing_scope:t(95007,e.DiagnosticCategory.Message,"Extract_to_0_in_enclosing_scope_95007","Extract to {0} in enclosing scope"),Extract_to_0_in_1_scope:t(95008,e.DiagnosticCategory.Message,"Extract_to_0_in_1_scope_95008","Extract to {0} in {1} scope"),Annotate_with_type_from_JSDoc:t(95009,e.DiagnosticCategory.Message,"Annotate_with_type_from_JSDoc_95009","Annotate with type from JSDoc"),Infer_type_of_0_from_usage:t(95011,e.DiagnosticCategory.Message,"Infer_type_of_0_from_usage_95011","Infer type of '{0}' from usage"),Infer_parameter_types_from_usage:t(95012,e.DiagnosticCategory.Message,"Infer_parameter_types_from_usage_95012","Infer parameter types from usage"),Convert_to_default_import:t(95013,e.DiagnosticCategory.Message,"Convert_to_default_import_95013","Convert to default import"),Install_0:t(95014,e.DiagnosticCategory.Message,"Install_0_95014","Install '{0}'"),Replace_import_with_0:t(95015,e.DiagnosticCategory.Message,"Replace_import_with_0_95015","Replace import with '{0}'."),Use_synthetic_default_member:t(95016,e.DiagnosticCategory.Message,"Use_synthetic_default_member_95016","Use synthetic 'default' member."),Convert_to_ES_module:t(95017,e.DiagnosticCategory.Message,"Convert_to_ES_module_95017","Convert to ES module"),Add_undefined_type_to_property_0:t(95018,e.DiagnosticCategory.Message,"Add_undefined_type_to_property_0_95018","Add 'undefined' type to property '{0}'"),Add_initializer_to_property_0:t(95019,e.DiagnosticCategory.Message,"Add_initializer_to_property_0_95019","Add initializer to property '{0}'"),Add_definite_assignment_assertion_to_property_0:t(95020,e.DiagnosticCategory.Message,"Add_definite_assignment_assertion_to_property_0_95020","Add definite assignment assertion to property '{0}'"),Convert_all_type_literals_to_mapped_type:t(95021,e.DiagnosticCategory.Message,"Convert_all_type_literals_to_mapped_type_95021","Convert all type literals to mapped type"),Add_all_missing_members:t(95022,e.DiagnosticCategory.Message,"Add_all_missing_members_95022","Add all missing members"),Infer_all_types_from_usage:t(95023,e.DiagnosticCategory.Message,"Infer_all_types_from_usage_95023","Infer all types from usage"),Delete_all_unused_declarations:t(95024,e.DiagnosticCategory.Message,"Delete_all_unused_declarations_95024","Delete all unused declarations"),Prefix_all_unused_declarations_with_where_possible:t(95025,e.DiagnosticCategory.Message,"Prefix_all_unused_declarations_with_where_possible_95025","Prefix all unused declarations with '_' where possible"),Fix_all_detected_spelling_errors:t(95026,e.DiagnosticCategory.Message,"Fix_all_detected_spelling_errors_95026","Fix all detected spelling errors"),Add_initializers_to_all_uninitialized_properties:t(95027,e.DiagnosticCategory.Message,"Add_initializers_to_all_uninitialized_properties_95027","Add initializers to all uninitialized properties"),Add_definite_assignment_assertions_to_all_uninitialized_properties:t(95028,e.DiagnosticCategory.Message,"Add_definite_assignment_assertions_to_all_uninitialized_properties_95028","Add definite assignment assertions to all uninitialized properties"),Add_undefined_type_to_all_uninitialized_properties:t(95029,e.DiagnosticCategory.Message,"Add_undefined_type_to_all_uninitialized_properties_95029","Add undefined type to all uninitialized properties"),Change_all_jsdoc_style_types_to_TypeScript:t(95030,e.DiagnosticCategory.Message,"Change_all_jsdoc_style_types_to_TypeScript_95030","Change all jsdoc-style types to TypeScript"),Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types:t(95031,e.DiagnosticCategory.Message,"Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031","Change all jsdoc-style types to TypeScript (and add '| undefined' to nullable types)"),Implement_all_unimplemented_interfaces:t(95032,e.DiagnosticCategory.Message,"Implement_all_unimplemented_interfaces_95032","Implement all unimplemented interfaces"),Install_all_missing_types_packages:t(95033,e.DiagnosticCategory.Message,"Install_all_missing_types_packages_95033","Install all missing types packages"),Rewrite_all_as_indexed_access_types:t(95034,e.DiagnosticCategory.Message,"Rewrite_all_as_indexed_access_types_95034","Rewrite all as indexed access types"),Convert_all_to_default_imports:t(95035,e.DiagnosticCategory.Message,"Convert_all_to_default_imports_95035","Convert all to default imports"),Make_all_super_calls_the_first_statement_in_their_constructor:t(95036,e.DiagnosticCategory.Message,"Make_all_super_calls_the_first_statement_in_their_constructor_95036","Make all 'super()' calls the first statement in their constructor"),Add_qualifier_to_all_unresolved_variables_matching_a_member_name:t(95037,e.DiagnosticCategory.Message,"Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037","Add qualifier to all unresolved variables matching a member name"),Change_all_extended_interfaces_to_implements:t(95038,e.DiagnosticCategory.Message,"Change_all_extended_interfaces_to_implements_95038","Change all extended interfaces to 'implements'"),Add_all_missing_super_calls:t(95039,e.DiagnosticCategory.Message,"Add_all_missing_super_calls_95039","Add all missing super calls"),Implement_all_inherited_abstract_classes:t(95040,e.DiagnosticCategory.Message,"Implement_all_inherited_abstract_classes_95040","Implement all inherited abstract classes"),Add_all_missing_async_modifiers:t(95041,e.DiagnosticCategory.Message,"Add_all_missing_async_modifiers_95041","Add all missing 'async' modifiers"),Add_ts_ignore_to_all_error_messages:t(95042,e.DiagnosticCategory.Message,"Add_ts_ignore_to_all_error_messages_95042","Add '@ts-ignore' to all error messages"),Annotate_everything_with_types_from_JSDoc:t(95043,e.DiagnosticCategory.Message,"Annotate_everything_with_types_from_JSDoc_95043","Annotate everything with types from JSDoc"),Add_to_all_uncalled_decorators:t(95044,e.DiagnosticCategory.Message,"Add_to_all_uncalled_decorators_95044","Add '()' to all uncalled decorators"),Convert_all_constructor_functions_to_classes:t(95045,e.DiagnosticCategory.Message,"Convert_all_constructor_functions_to_classes_95045","Convert all constructor functions to classes"),Generate_get_and_set_accessors:t(95046,e.DiagnosticCategory.Message,"Generate_get_and_set_accessors_95046","Generate 'get' and 'set' accessors"),Convert_require_to_import:t(95047,e.DiagnosticCategory.Message,"Convert_require_to_import_95047","Convert 'require' to 'import'"),Convert_all_require_to_import:t(95048,e.DiagnosticCategory.Message,"Convert_all_require_to_import_95048","Convert all 'require' to 'import'"),Move_to_a_new_file:t(95049,e.DiagnosticCategory.Message,"Move_to_a_new_file_95049","Move to a new file"),Remove_unreachable_code:t(95050,e.DiagnosticCategory.Message,"Remove_unreachable_code_95050","Remove unreachable code"),Remove_all_unreachable_code:t(95051,e.DiagnosticCategory.Message,"Remove_all_unreachable_code_95051","Remove all unreachable code"),Add_missing_typeof:t(95052,e.DiagnosticCategory.Message,"Add_missing_typeof_95052","Add missing 'typeof'"),Remove_unused_label:t(95053,e.DiagnosticCategory.Message,"Remove_unused_label_95053","Remove unused label"),Remove_all_unused_labels:t(95054,e.DiagnosticCategory.Message,"Remove_all_unused_labels_95054","Remove all unused labels"),Convert_0_to_mapped_object_type:t(95055,e.DiagnosticCategory.Message,"Convert_0_to_mapped_object_type_95055","Convert '{0}' to mapped object type"),Convert_namespace_import_to_named_imports:t(95056,e.DiagnosticCategory.Message,"Convert_namespace_import_to_named_imports_95056","Convert namespace import to named imports"),Convert_named_imports_to_namespace_import:t(95057,e.DiagnosticCategory.Message,"Convert_named_imports_to_namespace_import_95057","Convert named imports to namespace import"),Add_or_remove_braces_in_an_arrow_function:t(95058,e.DiagnosticCategory.Message,"Add_or_remove_braces_in_an_arrow_function_95058","Add or remove braces in an arrow function"),Add_braces_to_arrow_function:t(95059,e.DiagnosticCategory.Message,"Add_braces_to_arrow_function_95059","Add braces to arrow function"),Remove_braces_from_arrow_function:t(95060,e.DiagnosticCategory.Message,"Remove_braces_from_arrow_function_95060","Remove braces from arrow function"),Convert_default_export_to_named_export:t(95061,e.DiagnosticCategory.Message,"Convert_default_export_to_named_export_95061","Convert default export to named export"),Convert_named_export_to_default_export:t(95062,e.DiagnosticCategory.Message,"Convert_named_export_to_default_export_95062","Convert named export to default export"),Add_missing_enum_member_0:t(95063,e.DiagnosticCategory.Message,"Add_missing_enum_member_0_95063","Add missing enum member '{0}'"),Add_all_missing_imports:t(95064,e.DiagnosticCategory.Message,"Add_all_missing_imports_95064","Add all missing imports"),Convert_to_async_function:t(95065,e.DiagnosticCategory.Message,"Convert_to_async_function_95065","Convert to async function"),Convert_all_to_async_functions:t(95066,e.DiagnosticCategory.Message,"Convert_all_to_async_functions_95066","Convert all to async functions"),Add_missing_call_parentheses:t(95067,e.DiagnosticCategory.Message,"Add_missing_call_parentheses_95067","Add missing call parentheses"),Add_all_missing_call_parentheses:t(95068,e.DiagnosticCategory.Message,"Add_all_missing_call_parentheses_95068","Add all missing call parentheses"),Add_unknown_conversion_for_non_overlapping_types:t(95069,e.DiagnosticCategory.Message,"Add_unknown_conversion_for_non_overlapping_types_95069","Add 'unknown' conversion for non-overlapping types"),Add_unknown_to_all_conversions_of_non_overlapping_types:t(95070,e.DiagnosticCategory.Message,"Add_unknown_to_all_conversions_of_non_overlapping_types_95070","Add 'unknown' to all conversions of non-overlapping types"),Add_missing_new_operator_to_call:t(95071,e.DiagnosticCategory.Message,"Add_missing_new_operator_to_call_95071","Add missing 'new' operator to call"),Add_missing_new_operator_to_all_calls:t(95072,e.DiagnosticCategory.Message,"Add_missing_new_operator_to_all_calls_95072","Add missing 'new' operator to all calls"),Add_names_to_all_parameters_without_names:t(95073,e.DiagnosticCategory.Message,"Add_names_to_all_parameters_without_names_95073","Add names to all parameters without names"),Enable_the_experimentalDecorators_option_in_your_configuration_file:t(95074,e.DiagnosticCategory.Message,"Enable_the_experimentalDecorators_option_in_your_configuration_file_95074","Enable the 'experimentalDecorators' option in your configuration file"),Convert_parameters_to_destructured_object:t(95075,e.DiagnosticCategory.Message,"Convert_parameters_to_destructured_object_95075","Convert parameters to destructured object"),Extract_type:t(95077,e.DiagnosticCategory.Message,"Extract_type_95077","Extract type"),Extract_to_type_alias:t(95078,e.DiagnosticCategory.Message,"Extract_to_type_alias_95078","Extract to type alias"),Extract_to_typedef:t(95079,e.DiagnosticCategory.Message,"Extract_to_typedef_95079","Extract to typedef"),Infer_this_type_of_0_from_usage:t(95080,e.DiagnosticCategory.Message,"Infer_this_type_of_0_from_usage_95080","Infer 'this' type of '{0}' from usage"),Add_const_to_unresolved_variable:t(95081,e.DiagnosticCategory.Message,"Add_const_to_unresolved_variable_95081","Add 'const' to unresolved variable"),Add_const_to_all_unresolved_variables:t(95082,e.DiagnosticCategory.Message,"Add_const_to_all_unresolved_variables_95082","Add 'const' to all unresolved variables"),Add_await:t(95083,e.DiagnosticCategory.Message,"Add_await_95083","Add 'await'"),Add_await_to_initializer_for_0:t(95084,e.DiagnosticCategory.Message,"Add_await_to_initializer_for_0_95084","Add 'await' to initializer for '{0}'"),Fix_all_expressions_possibly_missing_await:t(95085,e.DiagnosticCategory.Message,"Fix_all_expressions_possibly_missing_await_95085","Fix all expressions possibly missing 'await'"),Remove_unnecessary_await:t(95086,e.DiagnosticCategory.Message,"Remove_unnecessary_await_95086","Remove unnecessary 'await'"),Remove_all_unnecessary_uses_of_await:t(95087,e.DiagnosticCategory.Message,"Remove_all_unnecessary_uses_of_await_95087","Remove all unnecessary uses of 'await'"),Enable_the_jsx_flag_in_your_configuration_file:t(95088,e.DiagnosticCategory.Message,"Enable_the_jsx_flag_in_your_configuration_file_95088","Enable the '--jsx' flag in your configuration file"),Add_await_to_initializers:t(95089,e.DiagnosticCategory.Message,"Add_await_to_initializers_95089","Add 'await' to initializers"),Extract_to_interface:t(95090,e.DiagnosticCategory.Message,"Extract_to_interface_95090","Extract to interface"),Convert_to_a_bigint_numeric_literal:t(95091,e.DiagnosticCategory.Message,"Convert_to_a_bigint_numeric_literal_95091","Convert to a bigint numeric literal"),Convert_all_to_bigint_numeric_literals:t(95092,e.DiagnosticCategory.Message,"Convert_all_to_bigint_numeric_literals_95092","Convert all to bigint numeric literals"),Convert_const_to_let:t(95093,e.DiagnosticCategory.Message,"Convert_const_to_let_95093","Convert 'const' to 'let'"),Prefix_with_declare:t(95094,e.DiagnosticCategory.Message,"Prefix_with_declare_95094","Prefix with 'declare'"),Prefix_all_incorrect_property_declarations_with_declare:t(95095,e.DiagnosticCategory.Message,"Prefix_all_incorrect_property_declarations_with_declare_95095","Prefix all incorrect property declarations with 'declare'"),Convert_to_template_string:t(95096,e.DiagnosticCategory.Message,"Convert_to_template_string_95096","Convert to template string"),Add_export_to_make_this_file_into_a_module:t(95097,e.DiagnosticCategory.Message,"Add_export_to_make_this_file_into_a_module_95097","Add 'export {}' to make this file into a module"),Set_the_target_option_in_your_configuration_file_to_0:t(95098,e.DiagnosticCategory.Message,"Set_the_target_option_in_your_configuration_file_to_0_95098","Set the 'target' option in your configuration file to '{0}'"),Set_the_module_option_in_your_configuration_file_to_0:t(95099,e.DiagnosticCategory.Message,"Set_the_module_option_in_your_configuration_file_to_0_95099","Set the 'module' option in your configuration file to '{0}'"),Convert_invalid_character_to_its_html_entity_code:t(95100,e.DiagnosticCategory.Message,"Convert_invalid_character_to_its_html_entity_code_95100","Convert invalid character to its html entity code"),Convert_all_invalid_characters_to_HTML_entity_code:t(95101,e.DiagnosticCategory.Message,"Convert_all_invalid_characters_to_HTML_entity_code_95101","Convert all invalid characters to HTML entity code"),Convert_all_const_to_let:t(95102,e.DiagnosticCategory.Message,"Convert_all_const_to_let_95102","Convert all 'const' to 'let'"),Convert_function_expression_0_to_arrow_function:t(95105,e.DiagnosticCategory.Message,"Convert_function_expression_0_to_arrow_function_95105","Convert function expression '{0}' to arrow function"),Convert_function_declaration_0_to_arrow_function:t(95106,e.DiagnosticCategory.Message,"Convert_function_declaration_0_to_arrow_function_95106","Convert function declaration '{0}' to arrow function"),Fix_all_implicit_this_errors:t(95107,e.DiagnosticCategory.Message,"Fix_all_implicit_this_errors_95107","Fix all implicit-'this' errors"),Wrap_invalid_character_in_an_expression_container:t(95108,e.DiagnosticCategory.Message,"Wrap_invalid_character_in_an_expression_container_95108","Wrap invalid character in an expression container"),Wrap_all_invalid_characters_in_an_expression_container:t(95109,e.DiagnosticCategory.Message,"Wrap_all_invalid_characters_in_an_expression_container_95109","Wrap all invalid characters in an expression container"),Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file:t(95110,e.DiagnosticCategory.Message,"Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file_95110","Visit https://aka.ms/tsconfig to read more about this file"),Add_a_return_statement:t(95111,e.DiagnosticCategory.Message,"Add_a_return_statement_95111","Add a return statement"),Remove_braces_from_arrow_function_body:t(95112,e.DiagnosticCategory.Message,"Remove_braces_from_arrow_function_body_95112","Remove braces from arrow function body"),Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal:t(95113,e.DiagnosticCategory.Message,"Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113","Wrap the following body with parentheses which should be an object literal"),Add_all_missing_return_statement:t(95114,e.DiagnosticCategory.Message,"Add_all_missing_return_statement_95114","Add all missing return statement"),Remove_braces_from_all_arrow_function_bodies_with_relevant_issues:t(95115,e.DiagnosticCategory.Message,"Remove_braces_from_all_arrow_function_bodies_with_relevant_issues_95115","Remove braces from all arrow function bodies with relevant issues"),Wrap_all_object_literal_with_parentheses:t(95116,e.DiagnosticCategory.Message,"Wrap_all_object_literal_with_parentheses_95116","Wrap all object literal with parentheses"),Move_labeled_tuple_element_modifiers_to_labels:t(95117,e.DiagnosticCategory.Message,"Move_labeled_tuple_element_modifiers_to_labels_95117","Move labeled tuple element modifiers to labels"),Convert_overload_list_to_single_signature:t(95118,e.DiagnosticCategory.Message,"Convert_overload_list_to_single_signature_95118","Convert overload list to single signature"),Generate_get_and_set_accessors_for_all_overriding_properties:t(95119,e.DiagnosticCategory.Message,"Generate_get_and_set_accessors_for_all_overriding_properties_95119","Generate 'get' and 'set' accessors for all overriding properties"),Wrap_in_JSX_fragment:t(95120,e.DiagnosticCategory.Message,"Wrap_in_JSX_fragment_95120","Wrap in JSX fragment"),Wrap_all_unparented_JSX_in_JSX_fragment:t(95121,e.DiagnosticCategory.Message,"Wrap_all_unparented_JSX_in_JSX_fragment_95121","Wrap all unparented JSX in JSX fragment"),Convert_arrow_function_or_function_expression:t(95122,e.DiagnosticCategory.Message,"Convert_arrow_function_or_function_expression_95122","Convert arrow function or function expression"),Convert_to_anonymous_function:t(95123,e.DiagnosticCategory.Message,"Convert_to_anonymous_function_95123","Convert to anonymous function"),Convert_to_named_function:t(95124,e.DiagnosticCategory.Message,"Convert_to_named_function_95124","Convert to named function"),Convert_to_arrow_function:t(95125,e.DiagnosticCategory.Message,"Convert_to_arrow_function_95125","Convert to arrow function"),Remove_parentheses:t(95126,e.DiagnosticCategory.Message,"Remove_parentheses_95126","Remove parentheses"),Could_not_find_a_containing_arrow_function:t(95127,e.DiagnosticCategory.Message,"Could_not_find_a_containing_arrow_function_95127","Could not find a containing arrow function"),Containing_function_is_not_an_arrow_function:t(95128,e.DiagnosticCategory.Message,"Containing_function_is_not_an_arrow_function_95128","Containing function is not an arrow function"),Could_not_find_export_statement:t(95129,e.DiagnosticCategory.Message,"Could_not_find_export_statement_95129","Could not find export statement"),This_file_already_has_a_default_export:t(95130,e.DiagnosticCategory.Message,"This_file_already_has_a_default_export_95130","This file already has a default export"),Could_not_find_import_clause:t(95131,e.DiagnosticCategory.Message,"Could_not_find_import_clause_95131","Could not find import clause"),Could_not_find_namespace_import_or_named_imports:t(95132,e.DiagnosticCategory.Message,"Could_not_find_namespace_import_or_named_imports_95132","Could not find namespace import or named imports"),Selection_is_not_a_valid_type_node:t(95133,e.DiagnosticCategory.Message,"Selection_is_not_a_valid_type_node_95133","Selection is not a valid type node"),No_type_could_be_extracted_from_this_type_node:t(95134,e.DiagnosticCategory.Message,"No_type_could_be_extracted_from_this_type_node_95134","No type could be extracted from this type node"),Could_not_find_property_for_which_to_generate_accessor:t(95135,e.DiagnosticCategory.Message,"Could_not_find_property_for_which_to_generate_accessor_95135","Could not find property for which to generate accessor"),Name_is_not_valid:t(95136,e.DiagnosticCategory.Message,"Name_is_not_valid_95136","Name is not valid"),Can_only_convert_property_with_modifier:t(95137,e.DiagnosticCategory.Message,"Can_only_convert_property_with_modifier_95137","Can only convert property with modifier"),Switch_each_misused_0_to_1:t(95138,e.DiagnosticCategory.Message,"Switch_each_misused_0_to_1_95138","Switch each misused '{0}' to '{1}'"),Convert_to_optional_chain_expression:t(95139,e.DiagnosticCategory.Message,"Convert_to_optional_chain_expression_95139","Convert to optional chain expression"),Could_not_find_convertible_access_expression:t(95140,e.DiagnosticCategory.Message,"Could_not_find_convertible_access_expression_95140","Could not find convertible access expression"),Could_not_find_matching_access_expressions:t(95141,e.DiagnosticCategory.Message,"Could_not_find_matching_access_expressions_95141","Could not find matching access expressions"),Can_only_convert_logical_AND_access_chains:t(95142,e.DiagnosticCategory.Message,"Can_only_convert_logical_AND_access_chains_95142","Can only convert logical AND access chains"),Add_void_to_Promise_resolved_without_a_value:t(95143,e.DiagnosticCategory.Message,"Add_void_to_Promise_resolved_without_a_value_95143","Add 'void' to Promise resolved without a value"),Add_void_to_all_Promises_resolved_without_a_value:t(95144,e.DiagnosticCategory.Message,"Add_void_to_all_Promises_resolved_without_a_value_95144","Add 'void' to all Promises resolved without a value"),Use_element_access_for_0:t(95145,e.DiagnosticCategory.Message,"Use_element_access_for_0_95145","Use element access for '{0}'"),Use_element_access_for_all_undeclared_properties:t(95146,e.DiagnosticCategory.Message,"Use_element_access_for_all_undeclared_properties_95146","Use element access for all undeclared properties."),Delete_all_unused_imports:t(95147,e.DiagnosticCategory.Message,"Delete_all_unused_imports_95147","Delete all unused imports"),Infer_function_return_type:t(95148,e.DiagnosticCategory.Message,"Infer_function_return_type_95148","Infer function return type"),Return_type_must_be_inferred_from_a_function:t(95149,e.DiagnosticCategory.Message,"Return_type_must_be_inferred_from_a_function_95149","Return type must be inferred from a function"),Could_not_determine_function_return_type:t(95150,e.DiagnosticCategory.Message,"Could_not_determine_function_return_type_95150","Could not determine function return type"),Could_not_convert_to_arrow_function:t(95151,e.DiagnosticCategory.Message,"Could_not_convert_to_arrow_function_95151","Could not convert to arrow function"),Could_not_convert_to_named_function:t(95152,e.DiagnosticCategory.Message,"Could_not_convert_to_named_function_95152","Could not convert to named function"),Could_not_convert_to_anonymous_function:t(95153,e.DiagnosticCategory.Message,"Could_not_convert_to_anonymous_function_95153","Could not convert to anonymous function"),Can_only_convert_string_concatenation:t(95154,e.DiagnosticCategory.Message,"Can_only_convert_string_concatenation_95154","Can only convert string concatenation"),Selection_is_not_a_valid_statement_or_statements:t(95155,e.DiagnosticCategory.Message,"Selection_is_not_a_valid_statement_or_statements_95155","Selection is not a valid statement or statements"),Add_missing_function_declaration_0:t(95156,e.DiagnosticCategory.Message,"Add_missing_function_declaration_0_95156","Add missing function declaration '{0}'"),Add_all_missing_function_declarations:t(95157,e.DiagnosticCategory.Message,"Add_all_missing_function_declarations_95157","Add all missing function declarations"),Method_not_implemented:t(95158,e.DiagnosticCategory.Message,"Method_not_implemented_95158","Method not implemented."),Function_not_implemented:t(95159,e.DiagnosticCategory.Message,"Function_not_implemented_95159","Function not implemented."),Add_override_modifier:t(95160,e.DiagnosticCategory.Message,"Add_override_modifier_95160","Add 'override' modifier"),Remove_override_modifier:t(95161,e.DiagnosticCategory.Message,"Remove_override_modifier_95161","Remove 'override' modifier"),Add_all_missing_override_modifiers:t(95162,e.DiagnosticCategory.Message,"Add_all_missing_override_modifiers_95162","Add all missing 'override' modifiers"),Remove_all_unnecessary_override_modifiers:t(95163,e.DiagnosticCategory.Message,"Remove_all_unnecessary_override_modifiers_95163","Remove all unnecessary 'override' modifiers"),Can_only_convert_named_export:t(95164,e.DiagnosticCategory.Message,"Can_only_convert_named_export_95164","Can only convert named export"),Add_missing_properties:t(95165,e.DiagnosticCategory.Message,"Add_missing_properties_95165","Add missing properties"),Add_all_missing_properties:t(95166,e.DiagnosticCategory.Message,"Add_all_missing_properties_95166","Add all missing properties"),Add_missing_attributes:t(95167,e.DiagnosticCategory.Message,"Add_missing_attributes_95167","Add missing attributes"),Add_all_missing_attributes:t(95168,e.DiagnosticCategory.Message,"Add_all_missing_attributes_95168","Add all missing attributes"),Add_undefined_to_optional_property_type:t(95169,e.DiagnosticCategory.Message,"Add_undefined_to_optional_property_type_95169","Add 'undefined' to optional property type"),Convert_named_imports_to_default_import:t(95170,e.DiagnosticCategory.Message,"Convert_named_imports_to_default_import_95170","Convert named imports to default import"),Delete_unused_param_tag_0:t(95171,e.DiagnosticCategory.Message,"Delete_unused_param_tag_0_95171","Delete unused '@param' tag '{0}'"),Delete_all_unused_param_tags:t(95172,e.DiagnosticCategory.Message,"Delete_all_unused_param_tags_95172","Delete all unused '@param' tags"),Rename_param_tag_name_0_to_1:t(95173,e.DiagnosticCategory.Message,"Rename_param_tag_name_0_to_1_95173","Rename '@param' tag name '{0}' to '{1}'"),Use_0:t(95174,e.DiagnosticCategory.Message,"Use_0_95174","Use `{0}`."),Use_Number_isNaN_in_all_conditions:t(95175,e.DiagnosticCategory.Message,"Use_Number_isNaN_in_all_conditions_95175","Use `Number.isNaN` in all conditions."),No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer:t(18004,e.DiagnosticCategory.Error,"No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004","No value exists in scope for the shorthand property '{0}'. Either declare one or provide an initializer."),Classes_may_not_have_a_field_named_constructor:t(18006,e.DiagnosticCategory.Error,"Classes_may_not_have_a_field_named_constructor_18006","Classes may not have a field named 'constructor'."),JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array:t(18007,e.DiagnosticCategory.Error,"JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007","JSX expressions may not use the comma operator. Did you mean to write an array?"),Private_identifiers_cannot_be_used_as_parameters:t(18009,e.DiagnosticCategory.Error,"Private_identifiers_cannot_be_used_as_parameters_18009","Private identifiers cannot be used as parameters."),An_accessibility_modifier_cannot_be_used_with_a_private_identifier:t(18010,e.DiagnosticCategory.Error,"An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010","An accessibility modifier cannot be used with a private identifier."),The_operand_of_a_delete_operator_cannot_be_a_private_identifier:t(18011,e.DiagnosticCategory.Error,"The_operand_of_a_delete_operator_cannot_be_a_private_identifier_18011","The operand of a 'delete' operator cannot be a private identifier."),constructor_is_a_reserved_word:t(18012,e.DiagnosticCategory.Error,"constructor_is_a_reserved_word_18012","'#constructor' is a reserved word."),Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier:t(18013,e.DiagnosticCategory.Error,"Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier_18013","Property '{0}' is not accessible outside class '{1}' because it has a private identifier."),The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_private_identifier_with_the_same_spelling:t(18014,e.DiagnosticCategory.Error,"The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014","The property '{0}' cannot be accessed on type '{1}' within this class because it is shadowed by another private identifier with the same spelling."),Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2:t(18015,e.DiagnosticCategory.Error,"Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2_18015","Property '{0}' in type '{1}' refers to a different member that cannot be accessed from within type '{2}'."),Private_identifiers_are_not_allowed_outside_class_bodies:t(18016,e.DiagnosticCategory.Error,"Private_identifiers_are_not_allowed_outside_class_bodies_18016","Private identifiers are not allowed outside class bodies."),The_shadowing_declaration_of_0_is_defined_here:t(18017,e.DiagnosticCategory.Error,"The_shadowing_declaration_of_0_is_defined_here_18017","The shadowing declaration of '{0}' is defined here"),The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here:t(18018,e.DiagnosticCategory.Error,"The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018","The declaration of '{0}' that you probably intended to use is defined here"),_0_modifier_cannot_be_used_with_a_private_identifier:t(18019,e.DiagnosticCategory.Error,"_0_modifier_cannot_be_used_with_a_private_identifier_18019","'{0}' modifier cannot be used with a private identifier."),An_enum_member_cannot_be_named_with_a_private_identifier:t(18024,e.DiagnosticCategory.Error,"An_enum_member_cannot_be_named_with_a_private_identifier_18024","An enum member cannot be named with a private identifier."),can_only_be_used_at_the_start_of_a_file:t(18026,e.DiagnosticCategory.Error,"can_only_be_used_at_the_start_of_a_file_18026","'#!' can only be used at the start of a file."),Compiler_reserves_name_0_when_emitting_private_identifier_downlevel:t(18027,e.DiagnosticCategory.Error,"Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027","Compiler reserves name '{0}' when emitting private identifier downlevel."),Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher:t(18028,e.DiagnosticCategory.Error,"Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028","Private identifiers are only available when targeting ECMAScript 2015 and higher."),Private_identifiers_are_not_allowed_in_variable_declarations:t(18029,e.DiagnosticCategory.Error,"Private_identifiers_are_not_allowed_in_variable_declarations_18029","Private identifiers are not allowed in variable declarations."),An_optional_chain_cannot_contain_private_identifiers:t(18030,e.DiagnosticCategory.Error,"An_optional_chain_cannot_contain_private_identifiers_18030","An optional chain cannot contain private identifiers."),The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituents:t(18031,e.DiagnosticCategory.Error,"The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031","The intersection '{0}' was reduced to 'never' because property '{1}' has conflicting types in some constituents."),The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_private_in_some:t(18032,e.DiagnosticCategory.Error,"The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032","The intersection '{0}' was reduced to 'never' because property '{1}' exists in multiple constituents and is private in some."),Only_numeric_enums_can_have_computed_members_but_this_expression_has_type_0_If_you_do_not_need_exhaustiveness_checks_consider_using_an_object_literal_instead:t(18033,e.DiagnosticCategory.Error,"Only_numeric_enums_can_have_computed_members_but_this_expression_has_type_0_If_you_do_not_need_exhau_18033","Only numeric enums can have computed members, but this expression has type '{0}'. If you do not need exhaustiveness checks, consider using an object literal instead."),Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compiler_option_is_specified_e_g_Fragment:t(18034,e.DiagnosticCategory.Message,"Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034","Specify the JSX fragment factory function to use when targeting 'react' JSX emit with 'jsxFactory' compiler option is specified, e.g. 'Fragment'."),Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name:t(18035,e.DiagnosticCategory.Error,"Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035","Invalid value for 'jsxFragmentFactory'. '{0}' is not a valid identifier or qualified-name."),Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_decorator:t(18036,e.DiagnosticCategory.Error,"Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036","Class decorators can't be used with static private identifier. Consider removing the experimental decorator."),Await_expression_cannot_be_used_inside_a_class_static_block:t(18037,e.DiagnosticCategory.Error,"Await_expression_cannot_be_used_inside_a_class_static_block_18037","Await expression cannot be used inside a class static block."),For_await_loops_cannot_be_used_inside_a_class_static_block:t(18038,e.DiagnosticCategory.Error,"For_await_loops_cannot_be_used_inside_a_class_static_block_18038","'For await' loops cannot be used inside a class static block."),Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block:t(18039,e.DiagnosticCategory.Error,"Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039","Invalid use of '{0}'. It cannot be used inside a class static block."),A_return_statement_cannot_be_used_inside_a_class_static_block:t(18041,e.DiagnosticCategory.Error,"A_return_statement_cannot_be_used_inside_a_class_static_block_18041","A 'return' statement cannot be used inside a class static block."),_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation:t(18042,e.DiagnosticCategory.Error,"_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042","'{0}' is a type and cannot be imported in JavaScript files. Use '{1}' in a JSDoc type annotation."),Types_cannot_appear_in_export_declarations_in_JavaScript_files:t(18043,e.DiagnosticCategory.Error,"Types_cannot_appear_in_export_declarations_in_JavaScript_files_18043","Types cannot appear in export declarations in JavaScript files."),_0_is_automatically_exported_here:t(18044,e.DiagnosticCategory.Message,"_0_is_automatically_exported_here_18044","'{0}' is automatically exported here."),Properties_with_the_accessor_modifier_are_only_available_when_targeting_ECMAScript_2015_and_higher:t(18045,e.DiagnosticCategory.Error,"Properties_with_the_accessor_modifier_are_only_available_when_targeting_ECMAScript_2015_and_higher_18045","Properties with the 'accessor' modifier are only available when targeting ECMAScript 2015 and higher."),_0_is_of_type_unknown:t(18046,e.DiagnosticCategory.Error,"_0_is_of_type_unknown_18046","'{0}' is of type 'unknown'."),_0_is_possibly_null:t(18047,e.DiagnosticCategory.Error,"_0_is_possibly_null_18047","'{0}' is possibly 'null'."),_0_is_possibly_undefined:t(18048,e.DiagnosticCategory.Error,"_0_is_possibly_undefined_18048","'{0}' is possibly 'undefined'."),_0_is_possibly_null_or_undefined:t(18049,e.DiagnosticCategory.Error,"_0_is_possibly_null_or_undefined_18049","'{0}' is possibly 'null' or 'undefined'."),The_value_0_cannot_be_used_here:t(18050,e.DiagnosticCategory.Error,"The_value_0_cannot_be_used_here_18050","The value '{0}' cannot be used here.")}}(_||(_={})),function(e){var t;function r(e){return e>=79}e.tokenIsIdentifierOrKeyword=r,e.tokenIsIdentifierOrKeywordOrGreaterThan=function(e){return 31===e||r(e)},e.textToKeywordObj=((t={abstract:126,accessor:127,any:131,as:128,asserts:129,assert:130,bigint:160,boolean:134,break:81,case:82,catch:83,class:84,continue:86,const:85}).constructor=135,t.debugger=87,t.declare=136,t.default=88,t.delete=89,t.do=90,t.else=91,t.enum=92,t.export=93,t.extends=94,t.false=95,t.finally=96,t.for=97,t.from=158,t.function=98,t.get=137,t.if=99,t.implements=117,t.import=100,t.in=101,t.infer=138,t.instanceof=102,t.interface=118,t.intrinsic=139,t.is=140,t.keyof=141,t.let=119,t.module=142,t.namespace=143,t.never=144,t.new=103,t.null=104,t.number=148,t.object=149,t.package=120,t.private=121,t.protected=122,t.public=123,t.override=161,t.out=145,t.readonly=146,t.require=147,t.global=159,t.return=105,t.satisfies=150,t.set=151,t.static=124,t.string=152,t.super=106,t.switch=107,t.symbol=153,t.this=108,t.throw=109,t.true=110,t.try=111,t.type=154,t.typeof=112,t.undefined=155,t.unique=156,t.unknown=157,t.var=113,t.void=114,t.while=115,t.with=116,t.yield=125,t.async=132,t.await=133,t.of=162,t);var n=new e.Map(e.getEntries(e.textToKeywordObj)),i=new e.Map(e.getEntries(o(o({},e.textToKeywordObj),{"{":18,"}":19,"(":20,")":21,"[":22,"]":23,".":24,"...":25,";":26,",":27,"<":29,">":31,"<=":32,">=":33,"==":34,"!=":35,"===":36,"!==":37,"=>":38,"+":39,"-":40,"**":42,"*":41,"/":43,"%":44,"++":45,"--":46,"<<":47,"</":30,">>":48,">>>":49,"&":50,"|":51,"^":52,"!":53,"~":54,"&&":55,"||":56,"?":57,"??":60,"?.":28,":":58,"=":63,"+=":64,"-=":65,"*=":66,"**=":67,"/=":68,"%=":69,"<<=":70,">>=":71,">>>=":72,"&=":73,"|=":74,"^=":78,"||=":75,"&&=":76,"??=":77,"@":59,"#":62,"`":61}))),a=[170,170,181,181,186,186,192,214,216,246,248,543,546,563,592,685,688,696,699,705,720,721,736,740,750,750,890,890,902,902,904,906,908,908,910,929,931,974,976,983,986,1011,1024,1153,1164,1220,1223,1224,1227,1228,1232,1269,1272,1273,1329,1366,1369,1369,1377,1415,1488,1514,1520,1522,1569,1594,1600,1610,1649,1747,1749,1749,1765,1766,1786,1788,1808,1808,1810,1836,1920,1957,2309,2361,2365,2365,2384,2384,2392,2401,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2524,2525,2527,2529,2544,2545,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2649,2652,2654,2654,2674,2676,2693,2699,2701,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2749,2749,2768,2768,2784,2784,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2870,2873,2877,2877,2908,2909,2911,2913,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,2997,2999,3001,3077,3084,3086,3088,3090,3112,3114,3123,3125,3129,3168,3169,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3294,3294,3296,3297,3333,3340,3342,3344,3346,3368,3370,3385,3424,3425,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3585,3632,3634,3635,3648,3654,3713,3714,3716,3716,3719,3720,3722,3722,3725,3725,3732,3735,3737,3743,3745,3747,3749,3749,3751,3751,3754,3755,3757,3760,3762,3763,3773,3773,3776,3780,3782,3782,3804,3805,3840,3840,3904,3911,3913,3946,3976,3979,4096,4129,4131,4135,4137,4138,4176,4181,4256,4293,4304,4342,4352,4441,4447,4514,4520,4601,4608,4614,4616,4678,4680,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4742,4744,4744,4746,4749,4752,4782,4784,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4814,4816,4822,4824,4846,4848,4878,4880,4880,4882,4885,4888,4894,4896,4934,4936,4954,5024,5108,5121,5740,5743,5750,5761,5786,5792,5866,6016,6067,6176,6263,6272,6312,7680,7835,7840,7929,7936,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8319,8319,8450,8450,8455,8455,8458,8467,8469,8469,8473,8477,8484,8484,8486,8486,8488,8488,8490,8493,8495,8497,8499,8505,8544,8579,12293,12295,12321,12329,12337,12341,12344,12346,12353,12436,12445,12446,12449,12538,12540,12542,12549,12588,12593,12686,12704,12727,13312,19893,19968,40869,40960,42124,44032,55203,63744,64045,64256,64262,64275,64279,64285,64285,64287,64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,65008,65019,65136,65138,65140,65140,65142,65276,65313,65338,65345,65370,65382,65470,65474,65479,65482,65487,65490,65495,65498,65500],s=[170,170,181,181,186,186,192,214,216,246,248,543,546,563,592,685,688,696,699,705,720,721,736,740,750,750,768,846,864,866,890,890,902,902,904,906,908,908,910,929,931,974,976,983,986,1011,1024,1153,1155,1158,1164,1220,1223,1224,1227,1228,1232,1269,1272,1273,1329,1366,1369,1369,1377,1415,1425,1441,1443,1465,1467,1469,1471,1471,1473,1474,1476,1476,1488,1514,1520,1522,1569,1594,1600,1621,1632,1641,1648,1747,1749,1756,1759,1768,1770,1773,1776,1788,1808,1836,1840,1866,1920,1968,2305,2307,2309,2361,2364,2381,2384,2388,2392,2403,2406,2415,2433,2435,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2492,2492,2494,2500,2503,2504,2507,2509,2519,2519,2524,2525,2527,2531,2534,2545,2562,2562,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2620,2620,2622,2626,2631,2632,2635,2637,2649,2652,2654,2654,2662,2676,2689,2691,2693,2699,2701,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2748,2757,2759,2761,2763,2765,2768,2768,2784,2784,2790,2799,2817,2819,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2870,2873,2876,2883,2887,2888,2891,2893,2902,2903,2908,2909,2911,2913,2918,2927,2946,2947,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,2997,2999,3001,3006,3010,3014,3016,3018,3021,3031,3031,3047,3055,3073,3075,3077,3084,3086,3088,3090,3112,3114,3123,3125,3129,3134,3140,3142,3144,3146,3149,3157,3158,3168,3169,3174,3183,3202,3203,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3262,3268,3270,3272,3274,3277,3285,3286,3294,3294,3296,3297,3302,3311,3330,3331,3333,3340,3342,3344,3346,3368,3370,3385,3390,3395,3398,3400,3402,3405,3415,3415,3424,3425,3430,3439,3458,3459,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3530,3530,3535,3540,3542,3542,3544,3551,3570,3571,3585,3642,3648,3662,3664,3673,3713,3714,3716,3716,3719,3720,3722,3722,3725,3725,3732,3735,3737,3743,3745,3747,3749,3749,3751,3751,3754,3755,3757,3769,3771,3773,3776,3780,3782,3782,3784,3789,3792,3801,3804,3805,3840,3840,3864,3865,3872,3881,3893,3893,3895,3895,3897,3897,3902,3911,3913,3946,3953,3972,3974,3979,3984,3991,3993,4028,4038,4038,4096,4129,4131,4135,4137,4138,4140,4146,4150,4153,4160,4169,4176,4185,4256,4293,4304,4342,4352,4441,4447,4514,4520,4601,4608,4614,4616,4678,4680,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4742,4744,4744,4746,4749,4752,4782,4784,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4814,4816,4822,4824,4846,4848,4878,4880,4880,4882,4885,4888,4894,4896,4934,4936,4954,4969,4977,5024,5108,5121,5740,5743,5750,5761,5786,5792,5866,6016,6099,6112,6121,6160,6169,6176,6263,6272,6313,7680,7835,7840,7929,7936,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8255,8256,8319,8319,8400,8412,8417,8417,8450,8450,8455,8455,8458,8467,8469,8469,8473,8477,8484,8484,8486,8486,8488,8488,8490,8493,8495,8497,8499,8505,8544,8579,12293,12295,12321,12335,12337,12341,12344,12346,12353,12436,12441,12442,12445,12446,12449,12542,12549,12588,12593,12686,12704,12727,13312,19893,19968,40869,40960,42124,44032,55203,63744,64045,64256,64262,64275,64279,64285,64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,65008,65019,65056,65059,65075,65076,65101,65103,65136,65138,65140,65140,65142,65276,65296,65305,65313,65338,65343,65343,65345,65370,65381,65470,65474,65479,65482,65487,65490,65495,65498,65500],c=[170,170,181,181,186,186,192,214,216,246,248,705,710,721,736,740,748,748,750,750,880,884,886,887,890,893,902,902,904,906,908,908,910,929,931,1013,1015,1153,1162,1319,1329,1366,1369,1369,1377,1415,1488,1514,1520,1522,1568,1610,1646,1647,1649,1747,1749,1749,1765,1766,1774,1775,1786,1788,1791,1791,1808,1808,1810,1839,1869,1957,1969,1969,1994,2026,2036,2037,2042,2042,2048,2069,2074,2074,2084,2084,2088,2088,2112,2136,2208,2208,2210,2220,2308,2361,2365,2365,2384,2384,2392,2401,2417,2423,2425,2431,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2493,2493,2510,2510,2524,2525,2527,2529,2544,2545,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2649,2652,2654,2654,2674,2676,2693,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2749,2749,2768,2768,2784,2785,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2869,2873,2877,2877,2908,2909,2911,2913,2929,2929,2947,2947,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,3001,3024,3024,3077,3084,3086,3088,3090,3112,3114,3123,3125,3129,3133,3133,3160,3161,3168,3169,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3261,3261,3294,3294,3296,3297,3313,3314,3333,3340,3342,3344,3346,3386,3389,3389,3406,3406,3424,3425,3450,3455,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3585,3632,3634,3635,3648,3654,3713,3714,3716,3716,3719,3720,3722,3722,3725,3725,3732,3735,3737,3743,3745,3747,3749,3749,3751,3751,3754,3755,3757,3760,3762,3763,3773,3773,3776,3780,3782,3782,3804,3807,3840,3840,3904,3911,3913,3948,3976,3980,4096,4138,4159,4159,4176,4181,4186,4189,4193,4193,4197,4198,4206,4208,4213,4225,4238,4238,4256,4293,4295,4295,4301,4301,4304,4346,4348,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4744,4746,4749,4752,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4822,4824,4880,4882,4885,4888,4954,4992,5007,5024,5108,5121,5740,5743,5759,5761,5786,5792,5866,5870,5872,5888,5900,5902,5905,5920,5937,5952,5969,5984,5996,5998,6e3,6016,6067,6103,6103,6108,6108,6176,6263,6272,6312,6314,6314,6320,6389,6400,6428,6480,6509,6512,6516,6528,6571,6593,6599,6656,6678,6688,6740,6823,6823,6917,6963,6981,6987,7043,7072,7086,7087,7098,7141,7168,7203,7245,7247,7258,7293,7401,7404,7406,7409,7413,7414,7424,7615,7680,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8305,8305,8319,8319,8336,8348,8450,8450,8455,8455,8458,8467,8469,8469,8473,8477,8484,8484,8486,8486,8488,8488,8490,8493,8495,8505,8508,8511,8517,8521,8526,8526,8544,8584,11264,11310,11312,11358,11360,11492,11499,11502,11506,11507,11520,11557,11559,11559,11565,11565,11568,11623,11631,11631,11648,11670,11680,11686,11688,11694,11696,11702,11704,11710,11712,11718,11720,11726,11728,11734,11736,11742,11823,11823,12293,12295,12321,12329,12337,12341,12344,12348,12353,12438,12445,12447,12449,12538,12540,12543,12549,12589,12593,12686,12704,12730,12784,12799,13312,19893,19968,40908,40960,42124,42192,42237,42240,42508,42512,42527,42538,42539,42560,42606,42623,42647,42656,42735,42775,42783,42786,42888,42891,42894,42896,42899,42912,42922,43e3,43009,43011,43013,43015,43018,43020,43042,43072,43123,43138,43187,43250,43255,43259,43259,43274,43301,43312,43334,43360,43388,43396,43442,43471,43471,43520,43560,43584,43586,43588,43595,43616,43638,43642,43642,43648,43695,43697,43697,43701,43702,43705,43709,43712,43712,43714,43714,43739,43741,43744,43754,43762,43764,43777,43782,43785,43790,43793,43798,43808,43814,43816,43822,43968,44002,44032,55203,55216,55238,55243,55291,63744,64109,64112,64217,64256,64262,64275,64279,64285,64285,64287,64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,65008,65019,65136,65140,65142,65276,65313,65338,65345,65370,65382,65470,65474,65479,65482,65487,65490,65495,65498,65500],u=[170,170,181,181,186,186,192,214,216,246,248,705,710,721,736,740,748,748,750,750,768,884,886,887,890,893,902,902,904,906,908,908,910,929,931,1013,1015,1153,1155,1159,1162,1319,1329,1366,1369,1369,1377,1415,1425,1469,1471,1471,1473,1474,1476,1477,1479,1479,1488,1514,1520,1522,1552,1562,1568,1641,1646,1747,1749,1756,1759,1768,1770,1788,1791,1791,1808,1866,1869,1969,1984,2037,2042,2042,2048,2093,2112,2139,2208,2208,2210,2220,2276,2302,2304,2403,2406,2415,2417,2423,2425,2431,2433,2435,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2492,2500,2503,2504,2507,2510,2519,2519,2524,2525,2527,2531,2534,2545,2561,2563,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2620,2620,2622,2626,2631,2632,2635,2637,2641,2641,2649,2652,2654,2654,2662,2677,2689,2691,2693,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2748,2757,2759,2761,2763,2765,2768,2768,2784,2787,2790,2799,2817,2819,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2869,2873,2876,2884,2887,2888,2891,2893,2902,2903,2908,2909,2911,2915,2918,2927,2929,2929,2946,2947,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,3001,3006,3010,3014,3016,3018,3021,3024,3024,3031,3031,3046,3055,3073,3075,3077,3084,3086,3088,3090,3112,3114,3123,3125,3129,3133,3140,3142,3144,3146,3149,3157,3158,3160,3161,3168,3171,3174,3183,3202,3203,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3260,3268,3270,3272,3274,3277,3285,3286,3294,3294,3296,3299,3302,3311,3313,3314,3330,3331,3333,3340,3342,3344,3346,3386,3389,3396,3398,3400,3402,3406,3415,3415,3424,3427,3430,3439,3450,3455,3458,3459,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3530,3530,3535,3540,3542,3542,3544,3551,3570,3571,3585,3642,3648,3662,3664,3673,3713,3714,3716,3716,3719,3720,3722,3722,3725,3725,3732,3735,3737,3743,3745,3747,3749,3749,3751,3751,3754,3755,3757,3769,3771,3773,3776,3780,3782,3782,3784,3789,3792,3801,3804,3807,3840,3840,3864,3865,3872,3881,3893,3893,3895,3895,3897,3897,3902,3911,3913,3948,3953,3972,3974,3991,3993,4028,4038,4038,4096,4169,4176,4253,4256,4293,4295,4295,4301,4301,4304,4346,4348,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4744,4746,4749,4752,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4822,4824,4880,4882,4885,4888,4954,4957,4959,4992,5007,5024,5108,5121,5740,5743,5759,5761,5786,5792,5866,5870,5872,5888,5900,5902,5908,5920,5940,5952,5971,5984,5996,5998,6e3,6002,6003,6016,6099,6103,6103,6108,6109,6112,6121,6155,6157,6160,6169,6176,6263,6272,6314,6320,6389,6400,6428,6432,6443,6448,6459,6470,6509,6512,6516,6528,6571,6576,6601,6608,6617,6656,6683,6688,6750,6752,6780,6783,6793,6800,6809,6823,6823,6912,6987,6992,7001,7019,7027,7040,7155,7168,7223,7232,7241,7245,7293,7376,7378,7380,7414,7424,7654,7676,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8204,8205,8255,8256,8276,8276,8305,8305,8319,8319,8336,8348,8400,8412,8417,8417,8421,8432,8450,8450,8455,8455,8458,8467,8469,8469,8473,8477,8484,8484,8486,8486,8488,8488,8490,8493,8495,8505,8508,8511,8517,8521,8526,8526,8544,8584,11264,11310,11312,11358,11360,11492,11499,11507,11520,11557,11559,11559,11565,11565,11568,11623,11631,11631,11647,11670,11680,11686,11688,11694,11696,11702,11704,11710,11712,11718,11720,11726,11728,11734,11736,11742,11744,11775,11823,11823,12293,12295,12321,12335,12337,12341,12344,12348,12353,12438,12441,12442,12445,12447,12449,12538,12540,12543,12549,12589,12593,12686,12704,12730,12784,12799,13312,19893,19968,40908,40960,42124,42192,42237,42240,42508,42512,42539,42560,42607,42612,42621,42623,42647,42655,42737,42775,42783,42786,42888,42891,42894,42896,42899,42912,42922,43e3,43047,43072,43123,43136,43204,43216,43225,43232,43255,43259,43259,43264,43309,43312,43347,43360,43388,43392,43456,43471,43481,43520,43574,43584,43597,43600,43609,43616,43638,43642,43643,43648,43714,43739,43741,43744,43759,43762,43766,43777,43782,43785,43790,43793,43798,43808,43814,43816,43822,43968,44010,44012,44013,44016,44025,44032,55203,55216,55238,55243,55291,63744,64109,64112,64217,64256,64262,64275,64279,64285,64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,65008,65019,65024,65039,65056,65062,65075,65076,65101,65103,65136,65140,65142,65276,65296,65305,65313,65338,65343,65343,65345,65370,65382,65470,65474,65479,65482,65487,65490,65495,65498,65500],l=[65,90,97,122,170,170,181,181,186,186,192,214,216,246,248,705,710,721,736,740,748,748,750,750,880,884,886,887,890,893,895,895,902,902,904,906,908,908,910,929,931,1013,1015,1153,1162,1327,1329,1366,1369,1369,1376,1416,1488,1514,1519,1522,1568,1610,1646,1647,1649,1747,1749,1749,1765,1766,1774,1775,1786,1788,1791,1791,1808,1808,1810,1839,1869,1957,1969,1969,1994,2026,2036,2037,2042,2042,2048,2069,2074,2074,2084,2084,2088,2088,2112,2136,2144,2154,2208,2228,2230,2237,2308,2361,2365,2365,2384,2384,2392,2401,2417,2432,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2493,2493,2510,2510,2524,2525,2527,2529,2544,2545,2556,2556,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2649,2652,2654,2654,2674,2676,2693,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2749,2749,2768,2768,2784,2785,2809,2809,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2869,2873,2877,2877,2908,2909,2911,2913,2929,2929,2947,2947,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,3001,3024,3024,3077,3084,3086,3088,3090,3112,3114,3129,3133,3133,3160,3162,3168,3169,3200,3200,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3261,3261,3294,3294,3296,3297,3313,3314,3333,3340,3342,3344,3346,3386,3389,3389,3406,3406,3412,3414,3423,3425,3450,3455,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3585,3632,3634,3635,3648,3654,3713,3714,3716,3716,3718,3722,3724,3747,3749,3749,3751,3760,3762,3763,3773,3773,3776,3780,3782,3782,3804,3807,3840,3840,3904,3911,3913,3948,3976,3980,4096,4138,4159,4159,4176,4181,4186,4189,4193,4193,4197,4198,4206,4208,4213,4225,4238,4238,4256,4293,4295,4295,4301,4301,4304,4346,4348,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4744,4746,4749,4752,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4822,4824,4880,4882,4885,4888,4954,4992,5007,5024,5109,5112,5117,5121,5740,5743,5759,5761,5786,5792,5866,5870,5880,5888,5900,5902,5905,5920,5937,5952,5969,5984,5996,5998,6e3,6016,6067,6103,6103,6108,6108,6176,6264,6272,6312,6314,6314,6320,6389,6400,6430,6480,6509,6512,6516,6528,6571,6576,6601,6656,6678,6688,6740,6823,6823,6917,6963,6981,6987,7043,7072,7086,7087,7098,7141,7168,7203,7245,7247,7258,7293,7296,7304,7312,7354,7357,7359,7401,7404,7406,7411,7413,7414,7418,7418,7424,7615,7680,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8305,8305,8319,8319,8336,8348,8450,8450,8455,8455,8458,8467,8469,8469,8472,8477,8484,8484,8486,8486,8488,8488,8490,8505,8508,8511,8517,8521,8526,8526,8544,8584,11264,11310,11312,11358,11360,11492,11499,11502,11506,11507,11520,11557,11559,11559,11565,11565,11568,11623,11631,11631,11648,11670,11680,11686,11688,11694,11696,11702,11704,11710,11712,11718,11720,11726,11728,11734,11736,11742,12293,12295,12321,12329,12337,12341,12344,12348,12353,12438,12443,12447,12449,12538,12540,12543,12549,12591,12593,12686,12704,12730,12784,12799,13312,19893,19968,40943,40960,42124,42192,42237,42240,42508,42512,42527,42538,42539,42560,42606,42623,42653,42656,42735,42775,42783,42786,42888,42891,42943,42946,42950,42999,43009,43011,43013,43015,43018,43020,43042,43072,43123,43138,43187,43250,43255,43259,43259,43261,43262,43274,43301,43312,43334,43360,43388,43396,43442,43471,43471,43488,43492,43494,43503,43514,43518,43520,43560,43584,43586,43588,43595,43616,43638,43642,43642,43646,43695,43697,43697,43701,43702,43705,43709,43712,43712,43714,43714,43739,43741,43744,43754,43762,43764,43777,43782,43785,43790,43793,43798,43808,43814,43816,43822,43824,43866,43868,43879,43888,44002,44032,55203,55216,55238,55243,55291,63744,64109,64112,64217,64256,64262,64275,64279,64285,64285,64287,64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,65008,65019,65136,65140,65142,65276,65313,65338,65345,65370,65382,65470,65474,65479,65482,65487,65490,65495,65498,65500,65536,65547,65549,65574,65576,65594,65596,65597,65599,65613,65616,65629,65664,65786,65856,65908,66176,66204,66208,66256,66304,66335,66349,66378,66384,66421,66432,66461,66464,66499,66504,66511,66513,66517,66560,66717,66736,66771,66776,66811,66816,66855,66864,66915,67072,67382,67392,67413,67424,67431,67584,67589,67592,67592,67594,67637,67639,67640,67644,67644,67647,67669,67680,67702,67712,67742,67808,67826,67828,67829,67840,67861,67872,67897,67968,68023,68030,68031,68096,68096,68112,68115,68117,68119,68121,68149,68192,68220,68224,68252,68288,68295,68297,68324,68352,68405,68416,68437,68448,68466,68480,68497,68608,68680,68736,68786,68800,68850,68864,68899,69376,69404,69415,69415,69424,69445,69600,69622,69635,69687,69763,69807,69840,69864,69891,69926,69956,69956,69968,70002,70006,70006,70019,70066,70081,70084,70106,70106,70108,70108,70144,70161,70163,70187,70272,70278,70280,70280,70282,70285,70287,70301,70303,70312,70320,70366,70405,70412,70415,70416,70419,70440,70442,70448,70450,70451,70453,70457,70461,70461,70480,70480,70493,70497,70656,70708,70727,70730,70751,70751,70784,70831,70852,70853,70855,70855,71040,71086,71128,71131,71168,71215,71236,71236,71296,71338,71352,71352,71424,71450,71680,71723,71840,71903,71935,71935,72096,72103,72106,72144,72161,72161,72163,72163,72192,72192,72203,72242,72250,72250,72272,72272,72284,72329,72349,72349,72384,72440,72704,72712,72714,72750,72768,72768,72818,72847,72960,72966,72968,72969,72971,73008,73030,73030,73056,73061,73063,73064,73066,73097,73112,73112,73440,73458,73728,74649,74752,74862,74880,75075,77824,78894,82944,83526,92160,92728,92736,92766,92880,92909,92928,92975,92992,92995,93027,93047,93053,93071,93760,93823,93952,94026,94032,94032,94099,94111,94176,94177,94179,94179,94208,100343,100352,101106,110592,110878,110928,110930,110948,110951,110960,111355,113664,113770,113776,113788,113792,113800,113808,113817,119808,119892,119894,119964,119966,119967,119970,119970,119973,119974,119977,119980,119982,119993,119995,119995,119997,120003,120005,120069,120071,120074,120077,120084,120086,120092,120094,120121,120123,120126,120128,120132,120134,120134,120138,120144,120146,120485,120488,120512,120514,120538,120540,120570,120572,120596,120598,120628,120630,120654,120656,120686,120688,120712,120714,120744,120746,120770,120772,120779,123136,123180,123191,123197,123214,123214,123584,123627,124928,125124,125184,125251,125259,125259,126464,126467,126469,126495,126497,126498,126500,126500,126503,126503,126505,126514,126516,126519,126521,126521,126523,126523,126530,126530,126535,126535,126537,126537,126539,126539,126541,126543,126545,126546,126548,126548,126551,126551,126553,126553,126555,126555,126557,126557,126559,126559,126561,126562,126564,126564,126567,126570,126572,126578,126580,126583,126585,126588,126590,126590,126592,126601,126603,126619,126625,126627,126629,126633,126635,126651,131072,173782,173824,177972,177984,178205,178208,183969,183984,191456,194560,195101],_=[48,57,65,90,95,95,97,122,170,170,181,181,183,183,186,186,192,214,216,246,248,705,710,721,736,740,748,748,750,750,768,884,886,887,890,893,895,895,902,906,908,908,910,929,931,1013,1015,1153,1155,1159,1162,1327,1329,1366,1369,1369,1376,1416,1425,1469,1471,1471,1473,1474,1476,1477,1479,1479,1488,1514,1519,1522,1552,1562,1568,1641,1646,1747,1749,1756,1759,1768,1770,1788,1791,1791,1808,1866,1869,1969,1984,2037,2042,2042,2045,2045,2048,2093,2112,2139,2144,2154,2208,2228,2230,2237,2259,2273,2275,2403,2406,2415,2417,2435,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2492,2500,2503,2504,2507,2510,2519,2519,2524,2525,2527,2531,2534,2545,2556,2556,2558,2558,2561,2563,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2620,2620,2622,2626,2631,2632,2635,2637,2641,2641,2649,2652,2654,2654,2662,2677,2689,2691,2693,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2748,2757,2759,2761,2763,2765,2768,2768,2784,2787,2790,2799,2809,2815,2817,2819,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2869,2873,2876,2884,2887,2888,2891,2893,2902,2903,2908,2909,2911,2915,2918,2927,2929,2929,2946,2947,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,3001,3006,3010,3014,3016,3018,3021,3024,3024,3031,3031,3046,3055,3072,3084,3086,3088,3090,3112,3114,3129,3133,3140,3142,3144,3146,3149,3157,3158,3160,3162,3168,3171,3174,3183,3200,3203,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3260,3268,3270,3272,3274,3277,3285,3286,3294,3294,3296,3299,3302,3311,3313,3314,3328,3331,3333,3340,3342,3344,3346,3396,3398,3400,3402,3406,3412,3415,3423,3427,3430,3439,3450,3455,3458,3459,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3530,3530,3535,3540,3542,3542,3544,3551,3558,3567,3570,3571,3585,3642,3648,3662,3664,3673,3713,3714,3716,3716,3718,3722,3724,3747,3749,3749,3751,3773,3776,3780,3782,3782,3784,3789,3792,3801,3804,3807,3840,3840,3864,3865,3872,3881,3893,3893,3895,3895,3897,3897,3902,3911,3913,3948,3953,3972,3974,3991,3993,4028,4038,4038,4096,4169,4176,4253,4256,4293,4295,4295,4301,4301,4304,4346,4348,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4744,4746,4749,4752,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4822,4824,4880,4882,4885,4888,4954,4957,4959,4969,4977,4992,5007,5024,5109,5112,5117,5121,5740,5743,5759,5761,5786,5792,5866,5870,5880,5888,5900,5902,5908,5920,5940,5952,5971,5984,5996,5998,6e3,6002,6003,6016,6099,6103,6103,6108,6109,6112,6121,6155,6157,6160,6169,6176,6264,6272,6314,6320,6389,6400,6430,6432,6443,6448,6459,6470,6509,6512,6516,6528,6571,6576,6601,6608,6618,6656,6683,6688,6750,6752,6780,6783,6793,6800,6809,6823,6823,6832,6845,6912,6987,6992,7001,7019,7027,7040,7155,7168,7223,7232,7241,7245,7293,7296,7304,7312,7354,7357,7359,7376,7378,7380,7418,7424,7673,7675,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8255,8256,8276,8276,8305,8305,8319,8319,8336,8348,8400,8412,8417,8417,8421,8432,8450,8450,8455,8455,8458,8467,8469,8469,8472,8477,8484,8484,8486,8486,8488,8488,8490,8505,8508,8511,8517,8521,8526,8526,8544,8584,11264,11310,11312,11358,11360,11492,11499,11507,11520,11557,11559,11559,11565,11565,11568,11623,11631,11631,11647,11670,11680,11686,11688,11694,11696,11702,11704,11710,11712,11718,11720,11726,11728,11734,11736,11742,11744,11775,12293,12295,12321,12335,12337,12341,12344,12348,12353,12438,12441,12447,12449,12538,12540,12543,12549,12591,12593,12686,12704,12730,12784,12799,13312,19893,19968,40943,40960,42124,42192,42237,42240,42508,42512,42539,42560,42607,42612,42621,42623,42737,42775,42783,42786,42888,42891,42943,42946,42950,42999,43047,43072,43123,43136,43205,43216,43225,43232,43255,43259,43259,43261,43309,43312,43347,43360,43388,43392,43456,43471,43481,43488,43518,43520,43574,43584,43597,43600,43609,43616,43638,43642,43714,43739,43741,43744,43759,43762,43766,43777,43782,43785,43790,43793,43798,43808,43814,43816,43822,43824,43866,43868,43879,43888,44010,44012,44013,44016,44025,44032,55203,55216,55238,55243,55291,63744,64109,64112,64217,64256,64262,64275,64279,64285,64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,65008,65019,65024,65039,65056,65071,65075,65076,65101,65103,65136,65140,65142,65276,65296,65305,65313,65338,65343,65343,65345,65370,65382,65470,65474,65479,65482,65487,65490,65495,65498,65500,65536,65547,65549,65574,65576,65594,65596,65597,65599,65613,65616,65629,65664,65786,65856,65908,66045,66045,66176,66204,66208,66256,66272,66272,66304,66335,66349,66378,66384,66426,66432,66461,66464,66499,66504,66511,66513,66517,66560,66717,66720,66729,66736,66771,66776,66811,66816,66855,66864,66915,67072,67382,67392,67413,67424,67431,67584,67589,67592,67592,67594,67637,67639,67640,67644,67644,67647,67669,67680,67702,67712,67742,67808,67826,67828,67829,67840,67861,67872,67897,67968,68023,68030,68031,68096,68099,68101,68102,68108,68115,68117,68119,68121,68149,68152,68154,68159,68159,68192,68220,68224,68252,68288,68295,68297,68326,68352,68405,68416,68437,68448,68466,68480,68497,68608,68680,68736,68786,68800,68850,68864,68903,68912,68921,69376,69404,69415,69415,69424,69456,69600,69622,69632,69702,69734,69743,69759,69818,69840,69864,69872,69881,69888,69940,69942,69951,69956,69958,69968,70003,70006,70006,70016,70084,70089,70092,70096,70106,70108,70108,70144,70161,70163,70199,70206,70206,70272,70278,70280,70280,70282,70285,70287,70301,70303,70312,70320,70378,70384,70393,70400,70403,70405,70412,70415,70416,70419,70440,70442,70448,70450,70451,70453,70457,70459,70468,70471,70472,70475,70477,70480,70480,70487,70487,70493,70499,70502,70508,70512,70516,70656,70730,70736,70745,70750,70751,70784,70853,70855,70855,70864,70873,71040,71093,71096,71104,71128,71133,71168,71232,71236,71236,71248,71257,71296,71352,71360,71369,71424,71450,71453,71467,71472,71481,71680,71738,71840,71913,71935,71935,72096,72103,72106,72151,72154,72161,72163,72164,72192,72254,72263,72263,72272,72345,72349,72349,72384,72440,72704,72712,72714,72758,72760,72768,72784,72793,72818,72847,72850,72871,72873,72886,72960,72966,72968,72969,72971,73014,73018,73018,73020,73021,73023,73031,73040,73049,73056,73061,73063,73064,73066,73102,73104,73105,73107,73112,73120,73129,73440,73462,73728,74649,74752,74862,74880,75075,77824,78894,82944,83526,92160,92728,92736,92766,92768,92777,92880,92909,92912,92916,92928,92982,92992,92995,93008,93017,93027,93047,93053,93071,93760,93823,93952,94026,94031,94087,94095,94111,94176,94177,94179,94179,94208,100343,100352,101106,110592,110878,110928,110930,110948,110951,110960,111355,113664,113770,113776,113788,113792,113800,113808,113817,113821,113822,119141,119145,119149,119154,119163,119170,119173,119179,119210,119213,119362,119364,119808,119892,119894,119964,119966,119967,119970,119970,119973,119974,119977,119980,119982,119993,119995,119995,119997,120003,120005,120069,120071,120074,120077,120084,120086,120092,120094,120121,120123,120126,120128,120132,120134,120134,120138,120144,120146,120485,120488,120512,120514,120538,120540,120570,120572,120596,120598,120628,120630,120654,120656,120686,120688,120712,120714,120744,120746,120770,120772,120779,120782,120831,121344,121398,121403,121452,121461,121461,121476,121476,121499,121503,121505,121519,122880,122886,122888,122904,122907,122913,122915,122916,122918,122922,123136,123180,123184,123197,123200,123209,123214,123214,123584,123641,124928,125124,125136,125142,125184,125259,125264,125273,126464,126467,126469,126495,126497,126498,126500,126500,126503,126503,126505,126514,126516,126519,126521,126521,126523,126523,126530,126530,126535,126535,126537,126537,126539,126539,126541,126543,126545,126546,126548,126548,126551,126551,126553,126553,126555,126555,126557,126557,126559,126559,126561,126562,126564,126564,126567,126570,126572,126578,126580,126583,126585,126588,126590,126590,126592,126601,126603,126619,126625,126627,126629,126633,126635,126651,131072,173782,173824,177972,177984,178205,178208,183969,183984,191456,194560,195101,917760,917999],d=/^\/\/\/?\s*@(ts-expect-error|ts-ignore)/,p=/^(?:\/|\*)*\s*@(ts-expect-error|ts-ignore)/;function f(e,t){if(e<t[0])return!1;for(var r,n=0,i=t.length;n+1<i;){if(r=n+(i-n)/2,t[r-=r%2]<=e&&e<=t[r+1])return!0;e<t[r]?i=r:n=r+2}return!1}function g(e,t){return f(e,t>=2?l:1===t?c:a)}e.isUnicodeIdentifierStart=g;var m,y=(m=[],i.forEach((function(e,t){m[e]=t})),m);function v(e){for(var t=[],r=0,n=0;r<e.length;){var i=e.charCodeAt(r);switch(r++,i){case 13:10===e.charCodeAt(r)&&r++;case 10:t.push(n),n=r;break;default:i>127&&C(i)&&(t.push(n),n=r)}}return t.push(n),t}function h(t,r,n,i,a){(r<0||r>=t.length)&&(a?r=r<0?0:r>=t.length?t.length-1:r:e.Debug.fail("Bad line number. Line: ".concat(r,", lineStarts.length: ").concat(t.length," , line map is correct? ").concat(void 0!==i?e.arraysEqual(t,v(i)):"unknown")));var o=t[r]+n;return a?o>t[r+1]?t[r+1]:"string"==typeof i&&o>i.length?i.length:o:(r<t.length-1?e.Debug.assert(o<t[r+1]):void 0!==i&&e.Debug.assert(o<=i.length),o)}function b(e){return e.lineMap||(e.lineMap=v(e.text))}function x(e,t){var r=D(e,t);return{line:r,character:t-e[r]}}function D(t,r,n){var i=e.binarySearch(t,r,e.identity,e.compareValues,n);return i<0&&(i=~i-1,e.Debug.assert(-1!==i,"position cannot precede the beginning of the file")),i}function S(e){return T(e)||C(e)}function T(e){return 32===e||9===e||11===e||12===e||160===e||133===e||5760===e||e>=8192&&e<=8203||8239===e||8287===e||12288===e||65279===e}function C(e){return 10===e||13===e||8232===e||8233===e}function E(e){return e>=48&&e<=57}function k(e){return E(e)||e>=65&&e<=70||e>=97&&e<=102}function N(e){return e>=48&&e<=55}e.tokenToString=function(e){return y[e]},e.stringToToken=function(e){return i.get(e)},e.computeLineStarts=v,e.getPositionOfLineAndCharacter=function(e,t,r,n){return e.getPositionOfLineAndCharacter?e.getPositionOfLineAndCharacter(t,r,n):h(b(e),t,r,e.text,n)},e.computePositionOfLineAndCharacter=h,e.getLineStarts=b,e.computeLineAndCharacterOfPosition=x,e.computeLineOfPosition=D,e.getLinesBetweenPositions=function(e,t,r){if(t===r)return 0;var n=b(e),i=Math.min(t,r),a=i===r,o=a?t:r,s=D(n,i),c=D(n,o,s);return a?s-c:c-s},e.getLineAndCharacterOfPosition=function(e,t){return x(b(e),t)},e.isWhiteSpaceLike=S,e.isWhiteSpaceSingleLine=T,e.isLineBreak=C,e.isOctalDigit=N,e.couldStartTrivia=function(e,t){var r=e.charCodeAt(t);switch(r){case 13:case 10:case 9:case 11:case 12:case 32:case 47:case 60:case 124:case 61:case 62:return!0;case 35:return 0===t;default:return r>127}},e.skipTrivia=function(t,r,n,i,a){if(e.positionIsSynthesized(r))return r;for(var o=!1;;){var s=t.charCodeAt(r);switch(s){case 13:10===t.charCodeAt(r+1)&&r++;case 10:if(r++,n)return r;o=!!a;continue;case 9:case 11:case 12:case 32:r++;continue;case 47:if(i)break;if(47===t.charCodeAt(r+1)){for(r+=2;r<t.length&&!C(t.charCodeAt(r));)r++;o=!1;continue}if(42===t.charCodeAt(r+1)){for(r+=2;r<t.length;){if(42===t.charCodeAt(r)&&47===t.charCodeAt(r+1)){r+=2;break}r++}o=!1;continue}break;case 60:case 124:case 61:case 62:if(F(t,r)){r=P(t,r),o=!1;continue}break;case 35:if(0===r&&I(t,r)){r=O(t,r),o=!1;continue}break;case 42:if(o){r++,o=!1;continue}break;default:if(s>127&&S(s)){r++;continue}}return r}};var A="<<<<<<<".length;function F(t,r){if(e.Debug.assert(r>=0),0===r||C(t.charCodeAt(r-1))){var n=t.charCodeAt(r);if(r+A<t.length){for(var i=0;i<A;i++)if(t.charCodeAt(r+i)!==n)return!1;return 61===n||32===t.charCodeAt(r+A)}}return!1}function P(t,r,n){n&&n(e.Diagnostics.Merge_conflict_marker_encountered,r,A);var i=t.charCodeAt(r),a=t.length;if(60===i||62===i)for(;r<a&&!C(t.charCodeAt(r));)r++;else for(e.Debug.assert(124===i||61===i);r<a;){var o=t.charCodeAt(r);if((61===o||62===o)&&o!==i&&F(t,r))break;r++}return r}var w=/^#!.*/;function I(t,r){return e.Debug.assert(0===r),w.test(t)}function O(e,t){return t+=w.exec(e)[0].length}function M(e,t,r,n,i,a,o){var s,c,u,l,_=!1,d=n,p=o;if(0===r){d=!0;var f=j(t);f&&(r=f.length)}e:for(;r>=0&&r<t.length;){var g=t.charCodeAt(r);switch(g){case 13:10===t.charCodeAt(r+1)&&r++;case 10:if(r++,n)break e;d=!0,_&&(l=!0);continue;case 9:case 11:case 12:case 32:r++;continue;case 47:var m=t.charCodeAt(r+1),y=!1;if(47===m||42===m){var v=47===m?2:3,h=r;if(r+=2,47===m)for(;r<t.length;){if(C(t.charCodeAt(r))){y=!0;break}r++}else for(;r<t.length;){if(42===t.charCodeAt(r)&&47===t.charCodeAt(r+1)){r+=2;break}r++}if(d){if(_&&(p=i(s,c,u,l,a,p),!e&&p))return p;s=h,c=r,u=v,l=y,_=!0}continue}break e;default:if(g>127&&S(g)){_&&C(g)&&(l=!0),r++;continue}break e}}return _&&(p=i(s,c,u,l,a,p)),p}function L(e,t,r,n,i){return M(!0,e,t,!1,r,n,i)}function R(e,t,r,n,i){return M(!0,e,t,!0,r,n,i)}function B(e,t,r,n,i,a){return a||(a=[]),a.push({kind:r,pos:e,end:t,hasTrailingNewLine:n}),a}function j(e){var t=w.exec(e);if(t)return t[0]}function J(e,t){return e>=65&&e<=90||e>=97&&e<=122||36===e||95===e||e>127&&g(e,t)}function z(e,t,r){return e>=65&&e<=90||e>=97&&e<=122||e>=48&&e<=57||36===e||95===e||1===r&&(45===e||58===e)||e>127&&function(e,t){return f(e,t>=2?_:1===t?u:s)}(e,t)}e.isShebangTrivia=I,e.scanShebangTrivia=O,e.forEachLeadingCommentRange=function(e,t,r,n){return M(!1,e,t,!1,r,n)},e.forEachTrailingCommentRange=function(e,t,r,n){return M(!1,e,t,!0,r,n)},e.reduceEachLeadingCommentRange=L,e.reduceEachTrailingCommentRange=R,e.getLeadingCommentRanges=function(e,t){return L(e,t,B,void 0,void 0)},e.getTrailingCommentRanges=function(e,t){return R(e,t,B,void 0,void 0)},e.getShebang=j,e.isIdentifierStart=J,e.isIdentifierPart=z,e.isIdentifierText=function(e,t,r){var n=U(e,0);if(!J(n,t))return!1;for(var i=K(n);i<e.length;i+=K(n))if(!z(n=U(e,i),t,r))return!1;return!0},e.createScanner=function(t,i,a,o,s,c,u){void 0===a&&(a=0);var l,_,f,g,m,y,v,h,b=o,x=0;ue(b,c,u);var D={getStartPos:function(){return f},getTextPos:function(){return l},getToken:function(){return m},getTokenPos:function(){return g},getTokenText:function(){return b.substring(g,l)},getTokenValue:function(){return y},hasUnicodeEscape:function(){return 0!=(1024&v)},hasExtendedUnicodeEscape:function(){return 0!=(8&v)},hasPrecedingLineBreak:function(){return 0!=(1&v)},hasPrecedingJSDocComment:function(){return 0!=(2&v)},isIdentifier:function(){return 79===m||m>116},isReservedWord:function(){return m>=81&&m<=116},isUnterminated:function(){return 0!=(4&v)},getCommentDirectives:function(){return h},getNumericLiteralFlags:function(){return 1008&v},getTokenFlags:function(){return v},reScanGreaterToken:function(){if(31===m){if(62===b.charCodeAt(l))return 62===b.charCodeAt(l+1)?61===b.charCodeAt(l+2)?(l+=3,m=72):(l+=2,m=49):61===b.charCodeAt(l+1)?(l+=2,m=71):(l++,m=48);if(61===b.charCodeAt(l))return l++,m=33}return m},reScanAsteriskEqualsToken:function(){return e.Debug.assert(66===m,"'reScanAsteriskEqualsToken' should only be called on a '*='"),l=g+1,m=63},reScanSlashToken:function(){if(43===m||68===m){for(var r=g+1,n=!1,i=!1;;){if(r>=_){v|=4,A(e.Diagnostics.Unterminated_regular_expression_literal);break}var a=b.charCodeAt(r);if(C(a)){v|=4,A(e.Diagnostics.Unterminated_regular_expression_literal);break}if(n)n=!1;else{if(47===a&&!i){r++;break}91===a?i=!0:92===a?n=!0:93===a&&(i=!1)}r++}for(;r<_&&z(b.charCodeAt(r),t);)r++;l=r,y=b.substring(g,l),m=13}return m},reScanTemplateToken:function(t){return e.Debug.assert(19===m,"'reScanTemplateToken' should only be called on a '}'"),l=g,m=H(t)},reScanTemplateHeadOrNoSubstitutionTemplate:function(){return l=g,m=H(!0)},scanJsxIdentifier:function(){if(r(m)){for(var e=!1;l<_;){var t=b.charCodeAt(l);if(45!==t)if(58!==t||e){var n=l;if(y+=$(),l===n)break}else y+=":",l++,e=!0,m=79;else y+="-",l++}return":"===y.slice(-1)&&(y=y.slice(0,-1),l--),ee()}return m},scanJsxAttributeValue:se,reScanJsxAttributeValue:function(){return l=g=f,se()},reScanJsxToken:function(e){void 0===e&&(e=!0);return l=g=f,m=oe(e)},reScanLessThanToken:function(){if(47===m)return l=g+1,m=29;return m},reScanHashToken:function(){if(80===m)return l=g+1,m=62;return m},reScanQuestionToken:function(){return e.Debug.assert(60===m,"'reScanQuestionToken' should only be called on a '??'"),l=g+1,m=57},reScanInvalidIdentifier:function(){e.Debug.assert(0===m,"'reScanInvalidIdentifier' should only be called when the current token is 'SyntaxKind.Unknown'."),l=g=f,v=0;var t=U(b,l),r=ie(t,99);if(r)return m=r;return l+=K(t),m},scanJsxToken:oe,scanJsDocToken:function(){if(f=g=l,v=0,l>=_)return m=1;var e=U(b,l);switch(l+=K(e),e){case 9:case 11:case 12:case 32:for(;l<_&&T(b.charCodeAt(l));)l++;return m=5;case 64:return m=59;case 13:10===b.charCodeAt(l)&&l++;case 10:return v|=1,m=4;case 42:return m=41;case 123:return m=18;case 125:return m=19;case 91:return m=22;case 93:return m=23;case 60:return m=29;case 62:return m=31;case 61:return m=63;case 44:return m=27;case 46:return m=24;case 96:return m=61;case 35:return m=62;case 92:l--;var r=Z();if(r>=0&&J(r,t))return l+=3,v|=8,y=X()+$(),m=ee();var n=Y();return n>=0&&J(n,t)?(l+=6,v|=1024,y=String.fromCharCode(n)+$(),m=ee()):(l++,m=0)}if(J(e,t)){for(var i=e;l<_&&z(i=U(b,l),t)||45===b.charCodeAt(l);)l+=K(i);return y=b.substring(g,l),92===i&&(y+=$()),m=ee()}return m=0},scan:ne,getText:function(){return b},clearCommentDirectives:function(){h=void 0},setText:ue,setScriptTarget:function(e){t=e},setLanguageVariant:function(e){a=e},setOnError:function(e){s=e},setTextPos:le,setInJSDocType:function(e){x+=e?1:-1},tryScan:function(e){return ce(e,!1)},lookAhead:function(e){return ce(e,!0)},scanRange:function(e,t,r){var n=_,i=l,a=f,o=g,s=m,c=y,u=v,d=h;ue(b,e,t);var p=r();return _=n,l=i,f=a,g=o,m=s,y=c,v=u,h=d,p}};return e.Debug.isDebugging&&Object.defineProperty(D,"__debugShowCurrentPositionInText",{get:function(){var e=D.getText();return e.slice(0,D.getStartPos())+"\u2551"+e.slice(D.getStartPos())}}),D;function A(e,t,r){if(void 0===t&&(t=l),s){var n=l;l=t,s(e,r||0),l=n}}function w(){for(var t=l,r=!1,n=!1,i="";;){var a=b.charCodeAt(l);if(95!==a){if(!E(a))break;r=!0,n=!1,l++}else v|=512,r?(r=!1,n=!0,i+=b.substring(t,l)):A(n?e.Diagnostics.Multiple_consecutive_numeric_separators_are_not_permitted:e.Diagnostics.Numeric_separators_are_not_allowed_here,l,1),t=++l}return 95===b.charCodeAt(l-1)&&A(e.Diagnostics.Numeric_separators_are_not_allowed_here,l-1,1),i+b.substring(t,l)}function M(){var t,r,n=l,i=w();46===b.charCodeAt(l)&&(l++,t=w());var a,o=l;if(69===b.charCodeAt(l)||101===b.charCodeAt(l)){l++,v|=16,43!==b.charCodeAt(l)&&45!==b.charCodeAt(l)||l++;var s=l,c=w();c?(r=b.substring(o,s)+c,o=l):A(e.Diagnostics.Digit_expected)}if(512&v?(a=i,t&&(a+="."+t),r&&(a+=r)):a=b.substring(n,o),void 0!==t||16&v)return L(n,void 0===t&&!!(16&v)),{type:8,value:""+ +a};y=a;var u=re();return L(n),{type:u,value:y}}function L(r,n){if(J(U(b,l),t)){var i=l,a=$().length;1===a&&"n"===b[i]?A(n?e.Diagnostics.A_bigint_literal_cannot_use_exponential_notation:e.Diagnostics.A_bigint_literal_must_be_an_integer,r,i-r+1):(A(e.Diagnostics.An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal,i,a),l=i)}}function R(){for(var e=l;N(b.charCodeAt(l));)l++;return+b.substring(e,l)}function B(e,t){var r=V(e,!1,t);return r?parseInt(r,16):-1}function j(e,t){return V(e,!0,t)}function V(t,r,n){for(var i=[],a=!1,o=!1;i.length<t||r;){var s=b.charCodeAt(l);if(n&&95===s)v|=512,a?(a=!1,o=!0):A(o?e.Diagnostics.Multiple_consecutive_numeric_separators_are_not_permitted:e.Diagnostics.Numeric_separators_are_not_allowed_here,l,1),l++;else{if(a=n,s>=65&&s<=70)s+=32;else if(!(s>=48&&s<=57||s>=97&&s<=102))break;i.push(s),l++,o=!1}}return i.length<t&&(i=[]),95===b.charCodeAt(l-1)&&A(e.Diagnostics.Numeric_separators_are_not_allowed_here,l-1,1),String.fromCharCode.apply(String,i)}function W(t){void 0===t&&(t=!1);for(var r=b.charCodeAt(l),n="",i=++l;;){if(l>=_){n+=b.substring(i,l),v|=4,A(e.Diagnostics.Unterminated_string_literal);break}var a=b.charCodeAt(l);if(a===r){n+=b.substring(i,l),l++;break}if(92!==a||t){if(C(a)&&!t){n+=b.substring(i,l),v|=4,A(e.Diagnostics.Unterminated_string_literal);break}l++}else n+=b.substring(i,l),n+=G(),i=l}return n}function H(t){for(var r,n=96===b.charCodeAt(l),i=++l,a="";;){if(l>=_){a+=b.substring(i,l),v|=4,A(e.Diagnostics.Unterminated_template_literal),r=n?14:17;break}var o=b.charCodeAt(l);if(96===o){a+=b.substring(i,l),l++,r=n?14:17;break}if(36===o&&l+1<_&&123===b.charCodeAt(l+1)){a+=b.substring(i,l),l+=2,r=n?15:16;break}92!==o?13!==o?l++:(a+=b.substring(i,l),++l<_&&10===b.charCodeAt(l)&&l++,a+="\n",i=l):(a+=b.substring(i,l),a+=G(t),i=l)}return e.Debug.assert(void 0!==r),y=a,r}function G(t){var r=l;if(++l>=_)return A(e.Diagnostics.Unexpected_end_of_text),"";var n=b.charCodeAt(l);switch(l++,n){case 48:return t&&l<_&&E(b.charCodeAt(l))?(l++,v|=2048,b.substring(r,l)):"\0";case 98:return"\b";case 116:return"\t";case 110:return"\n";case 118:return"\v";case 102:return"\f";case 114:return"\r";case 39:return"'";case 34:return'"';case 117:if(t)for(var i=l;i<l+4;i++)if(i<_&&!k(b.charCodeAt(i))&&123!==b.charCodeAt(i))return l=i,v|=2048,b.substring(r,l);if(l<_&&123===b.charCodeAt(l)){if(l++,t&&!k(b.charCodeAt(l)))return v|=2048,b.substring(r,l);if(t){var a=l,o=j(1,!1),s=o?parseInt(o,16):-1;if(!(s<=1114111&&125===b.charCodeAt(l)))return v|=2048,b.substring(r,l);l=a}return v|=8,X()}return v|=1024,Q(4);case 120:if(t){if(!k(b.charCodeAt(l)))return v|=2048,b.substring(r,l);if(!k(b.charCodeAt(l+1)))return l++,v|=2048,b.substring(r,l)}return Q(2);case 13:l<_&&10===b.charCodeAt(l)&&l++;case 10:case 8232:case 8233:return"";default:return String.fromCharCode(n)}}function Q(t){var r=B(t,!1);return r>=0?String.fromCharCode(r):(A(e.Diagnostics.Hexadecimal_digit_expected),"")}function X(){var t=j(1,!1),r=t?parseInt(t,16):-1,n=!1;return r<0?(A(e.Diagnostics.Hexadecimal_digit_expected),n=!0):r>1114111&&(A(e.Diagnostics.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive),n=!0),l>=_?(A(e.Diagnostics.Unexpected_end_of_text),n=!0):125===b.charCodeAt(l)?l++:(A(e.Diagnostics.Unterminated_Unicode_escape_sequence),n=!0),n?"":q(r)}function Y(){if(l+5<_&&117===b.charCodeAt(l+1)){var e=l;l+=2;var t=B(4,!1);return l=e,t}return-1}function Z(){if(117===U(b,l+1)&&123===U(b,l+2)){var e=l;l+=3;var t=j(1,!1),r=t?parseInt(t,16):-1;return l=e,r}return-1}function $(){for(var e="",r=l;l<_;){var n=U(b,l);if(z(n,t))l+=K(n);else{if(92!==n)break;if((n=Z())>=0&&z(n,t)){l+=3,v|=8,e+=X(),r=l;continue}if(!((n=Y())>=0&&z(n,t)))break;v|=1024,e+=b.substring(r,l),e+=q(n),r=l+=6}}return e+=b.substring(r,l)}function ee(){var e=y.length;if(e>=2&&e<=12){var t=y.charCodeAt(0);if(t>=97&&t<=122){var r=n.get(y);if(void 0!==r)return m=r}}return m=79}function te(t){for(var r="",n=!1,i=!1;;){var a=b.charCodeAt(l);if(95!==a){if(n=!0,!E(a)||a-48>=t)break;r+=b[l],l++,i=!1}else v|=512,n?(n=!1,i=!0):A(i?e.Diagnostics.Multiple_consecutive_numeric_separators_are_not_permitted:e.Diagnostics.Numeric_separators_are_not_allowed_here,l,1),l++}return 95===b.charCodeAt(l-1)&&A(e.Diagnostics.Numeric_separators_are_not_allowed_here,l-1,1),r}function re(){if(110===b.charCodeAt(l))return y+="n",384&v&&(y=e.parsePseudoBigInt(y)+"n"),l++,9;var t=128&v?parseInt(y.slice(2),2):256&v?parseInt(y.slice(2),8):+y;return y=""+t,8}function ne(){var r;f=l,v=0;for(var n=!1;;){if(g=l,l>=_)return m=1;var o=U(b,l);if(35===o&&0===l&&I(b,l)){if(l=O(b,l),i)continue;return m=6}switch(o){case 10:case 13:if(v|=1,i){l++;continue}return 13===o&&l+1<_&&10===b.charCodeAt(l+1)?l+=2:l++,m=4;case 9:case 11:case 12:case 32:case 160:case 5760:case 8192:case 8193:case 8194:case 8195:case 8196:case 8197:case 8198:case 8199:case 8200:case 8201:case 8202:case 8203:case 8239:case 8287:case 12288:case 65279:if(i){l++;continue}for(;l<_&&T(b.charCodeAt(l));)l++;return m=5;case 33:return 61===b.charCodeAt(l+1)?61===b.charCodeAt(l+2)?(l+=3,m=37):(l+=2,m=35):(l++,m=53);case 34:case 39:return y=W(),m=10;case 96:return m=H(!1);case 37:return 61===b.charCodeAt(l+1)?(l+=2,m=69):(l++,m=44);case 38:return 38===b.charCodeAt(l+1)?61===b.charCodeAt(l+2)?(l+=3,m=76):(l+=2,m=55):61===b.charCodeAt(l+1)?(l+=2,m=73):(l++,m=50);case 40:return l++,m=20;case 41:return l++,m=21;case 42:if(61===b.charCodeAt(l+1))return l+=2,m=66;if(42===b.charCodeAt(l+1))return 61===b.charCodeAt(l+2)?(l+=3,m=67):(l+=2,m=42);if(l++,x&&!n&&1&v){n=!0;continue}return m=41;case 43:return 43===b.charCodeAt(l+1)?(l+=2,m=45):61===b.charCodeAt(l+1)?(l+=2,m=64):(l++,m=39);case 44:return l++,m=27;case 45:return 45===b.charCodeAt(l+1)?(l+=2,m=46):61===b.charCodeAt(l+1)?(l+=2,m=65):(l++,m=40);case 46:return E(b.charCodeAt(l+1))?(y=M().value,m=8):46===b.charCodeAt(l+1)&&46===b.charCodeAt(l+2)?(l+=3,m=25):(l++,m=24);case 47:if(47===b.charCodeAt(l+1)){for(l+=2;l<_&&!C(b.charCodeAt(l));)l++;if(h=ae(h,b.slice(g,l),d,g),i)continue;return m=2}if(42===b.charCodeAt(l+1)){l+=2,42===b.charCodeAt(l)&&47!==b.charCodeAt(l+1)&&(v|=2);for(var s=!1,c=g;l<_;){var u=b.charCodeAt(l);if(42===u&&47===b.charCodeAt(l+1)){l+=2,s=!0;break}l++,C(u)&&(c=l,v|=1)}if(h=ae(h,b.slice(c,l),p,c),s||A(e.Diagnostics.Asterisk_Slash_expected),i)continue;return s||(v|=4),m=3}return 61===b.charCodeAt(l+1)?(l+=2,m=68):(l++,m=43);case 48:if(l+2<_&&(88===b.charCodeAt(l+1)||120===b.charCodeAt(l+1)))return l+=2,(y=j(1,!0))||(A(e.Diagnostics.Hexadecimal_digit_expected),y="0"),y="0x"+y,v|=64,m=re();if(l+2<_&&(66===b.charCodeAt(l+1)||98===b.charCodeAt(l+1)))return l+=2,(y=te(2))||(A(e.Diagnostics.Binary_digit_expected),y="0"),y="0b"+y,v|=128,m=re();if(l+2<_&&(79===b.charCodeAt(l+1)||111===b.charCodeAt(l+1)))return l+=2,(y=te(8))||(A(e.Diagnostics.Octal_digit_expected),y="0"),y="0o"+y,v|=256,m=re();if(l+1<_&&N(b.charCodeAt(l+1)))return y=""+R(),v|=32,m=8;case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return r=M(),m=r.type,y=r.value,m;case 58:return l++,m=58;case 59:return l++,m=26;case 60:if(F(b,l)){if(l=P(b,l,A),i)continue;return m=7}return 60===b.charCodeAt(l+1)?61===b.charCodeAt(l+2)?(l+=3,m=70):(l+=2,m=47):61===b.charCodeAt(l+1)?(l+=2,m=32):1===a&&47===b.charCodeAt(l+1)&&42!==b.charCodeAt(l+2)?(l+=2,m=30):(l++,m=29);case 61:if(F(b,l)){if(l=P(b,l,A),i)continue;return m=7}return 61===b.charCodeAt(l+1)?61===b.charCodeAt(l+2)?(l+=3,m=36):(l+=2,m=34):62===b.charCodeAt(l+1)?(l+=2,m=38):(l++,m=63);case 62:if(F(b,l)){if(l=P(b,l,A),i)continue;return m=7}return l++,m=31;case 63:return 46!==b.charCodeAt(l+1)||E(b.charCodeAt(l+2))?63===b.charCodeAt(l+1)?61===b.charCodeAt(l+2)?(l+=3,m=77):(l+=2,m=60):(l++,m=57):(l+=2,m=28);case 91:return l++,m=22;case 93:return l++,m=23;case 94:return 61===b.charCodeAt(l+1)?(l+=2,m=78):(l++,m=52);case 123:return l++,m=18;case 124:if(F(b,l)){if(l=P(b,l,A),i)continue;return m=7}return 124===b.charCodeAt(l+1)?61===b.charCodeAt(l+2)?(l+=3,m=75):(l+=2,m=56):61===b.charCodeAt(l+1)?(l+=2,m=74):(l++,m=51);case 125:return l++,m=19;case 126:return l++,m=54;case 64:return l++,m=59;case 92:var D=Z();if(D>=0&&J(D,t))return l+=3,v|=8,y=X()+$(),m=ee();var S=Y();return S>=0&&J(S,t)?(l+=6,v|=1024,y=String.fromCharCode(S)+$(),m=ee()):(A(e.Diagnostics.Invalid_character),l++,m=0);case 35:if(0!==l&&"!"===b[l+1])return A(e.Diagnostics.can_only_be_used_at_the_start_of_a_file),l++,m=0;var k=U(b,l+1);if(92===k){l++;var w=Z();if(w>=0&&J(w,t))return l+=3,v|=8,y="#"+X()+$(),m=80;var L=Y();if(L>=0&&J(L,t))return l+=6,v|=1024,y="#"+String.fromCharCode(L)+$(),m=80;l--}return J(k,t)?(l++,ie(k,t)):(y="#",A(e.Diagnostics.Invalid_character,l++,K(o))),m=80;default:var B=ie(o,t);if(B)return m=B;if(T(o)){l+=K(o);continue}if(C(o)){v|=1,l+=K(o);continue}var z=K(o);return A(e.Diagnostics.Invalid_character,l,z),l+=z,m=0}}}function ie(e,t){var r=e;if(J(r,t)){for(l+=K(r);l<_&&z(r=U(b,l),t);)l+=K(r);return y=b.substring(g,l),92===r&&(y+=$()),ee()}}function ae(t,r,n,i){var a=function(e,t){var r=t.exec(e);if(!r)return;switch(r[1]){case"ts-expect-error":return 0;case"ts-ignore":return 1}return}(e.trimStringStart(r),n);return void 0===a?t:e.append(t,{range:{pos:i,end:l},type:a})}function oe(t){if(void 0===t&&(t=!0),f=g=l,l>=_)return m=1;var r=b.charCodeAt(l);if(60===r)return 47===b.charCodeAt(l+1)?(l+=2,m=30):(l++,m=29);if(123===r)return l++,m=18;for(var n=0;l<_&&123!==(r=b.charCodeAt(l));){if(60===r){if(F(b,l))return l=P(b,l,A),m=7;break}if(62===r&&A(e.Diagnostics.Unexpected_token_Did_you_mean_or_gt,l,1),125===r&&A(e.Diagnostics.Unexpected_token_Did_you_mean_or_rbrace,l,1),C(r)&&0===n)n=-1;else{if(!t&&C(r)&&n>0)break;S(r)||(n=l)}l++}return y=b.substring(f,l),-1===n?12:11}function se(){switch(f=l,b.charCodeAt(l)){case 34:case 39:return y=W(!0),m=10;default:return ne()}}function ce(e,t){var r=l,n=f,i=g,a=m,o=y,s=v,c=e();return c&&!t||(l=r,f=n,g=i,m=a,y=o,v=s),c}function ue(e,t,r){b=e||"",_=void 0===r?b.length:t+r,le(t||0)}function le(t){e.Debug.assert(t>=0),l=t,f=t,g=t,m=0,y=void 0,v=0}};var U=String.prototype.codePointAt?function(e,t){return e.codePointAt(t)}:function(e,t){var r=e.length;if(!(t<0||t>=r)){var n=e.charCodeAt(t);if(n>=55296&&n<=56319&&r>t+1){var i=e.charCodeAt(t+1);if(i>=56320&&i<=57343)return 1024*(n-55296)+i-56320+65536}return n}};function K(e){return e>=65536?2:1}var V=String.fromCodePoint?function(e){return String.fromCodePoint(e)}:function(t){if(e.Debug.assert(0<=t&&t<=1114111),t<=65535)return String.fromCharCode(t);var r=Math.floor((t-65536)/1024)+55296,n=(t-65536)%1024+56320;return String.fromCharCode(r,n)};function q(e){return V(e)}e.utf16EncodeAsString=q}(_||(_={})),function(e){function t(e){return e.start+e.length}function r(e){return 0===e.length}function n(e,t){var r=a(e,t);return r&&0===r.length?void 0:r}function i(e,t,r,n){return r<=e+t&&r+n>=e}function a(e,r){var n=Math.max(e.start,r.start),i=Math.min(t(e),t(r));return n<=i?s(n,i):void 0}function o(e,t){if(e<0)throw new Error("start < 0");if(t<0)throw new Error("length < 0");return{start:e,length:t}}function s(e,t){return o(e,t-e)}function c(e,t){if(t<0)throw new Error("newLength < 0");return{span:e,newLength:t}}function u(t){return!!$(t)&&e.every(t.elements,l)}function l(t){return!!e.isOmittedExpression(t)||u(t.name)}function _(t){for(var r=t.parent;e.isBindingElement(r.parent);)r=r.parent.parent;return r.parent}function d(t,r){e.isBindingElement(t)&&(t=_(t));var n=r(t);return 257===t.kind&&(t=t.parent),t&&258===t.kind&&(n|=r(t),t=t.parent),t&&240===t.kind&&(n|=r(t)),n}function p(e){return 0==(8&e.flags)}function f(e){var t=e;return t.length>=3&&95===t.charCodeAt(0)&&95===t.charCodeAt(1)&&95===t.charCodeAt(2)?t.substr(1):t}function g(e){return f(e.escapedText)}function m(t){var r=t.parent.parent;if(r){if(ce(r))return y(r);switch(r.kind){case 240:if(r.declarationList&&r.declarationList.declarations[0])return y(r.declarationList.declarations[0]);break;case 241:var n=r.expression;switch(223===n.kind&&63===n.operatorToken.kind&&(n=n.left),n.kind){case 208:return n.name;case 209:var i=n.argumentExpression;if(e.isIdentifier(i))return i}break;case 214:return y(r.expression);case 253:if(ce(r.statement)||ie(r.statement))return y(r.statement)}}}function y(t){var r=x(t);return r&&e.isIdentifier(r)?r:void 0}function v(e){return e.name||m(e)}function h(e){return!!e.name}function b(t){switch(t.kind){case 79:return t;case 350:case 343:var r=t.name;if(163===r.kind)return r.right;break;case 210:case 223:var n=t;switch(e.getAssignmentDeclarationKind(n)){case 1:case 4:case 5:case 3:return e.getElementOrPropertyAccessArgumentExpressionOrName(n.left);case 7:case 8:case 9:return n.arguments[1];default:return}case 348:return v(t);case 342:return m(t);case 274:var i=t.expression;return e.isIdentifier(i)?i:void 0;case 209:var a=t;if(e.isBindableStaticElementAccessExpression(a))return a.argumentExpression}return t.name}function x(t){if(void 0!==t)return b(t)||(e.isFunctionExpression(t)||e.isArrowFunction(t)||e.isClassExpression(t)?D(t):void 0)}function D(t){if(t.parent){if(e.isPropertyAssignment(t.parent)||e.isBindingElement(t.parent))return t.parent.name;if(e.isBinaryExpression(t.parent)&&t===t.parent.right){if(e.isIdentifier(t.parent.left))return t.parent.left;if(e.isAccessExpression(t.parent.left))return e.getElementOrPropertyAccessArgumentExpressionOrName(t.parent.left)}else if(e.isVariableDeclaration(t.parent)&&e.isIdentifier(t.parent.name))return t.parent.name}}function S(t,r){if(t.name){if(e.isIdentifier(t.name)){var n=t.name.escapedText;return A(t.parent,r).filter((function(t){return e.isJSDocParameterTag(t)&&e.isIdentifier(t.name)&&t.name.escapedText===n}))}var i=t.parent.parameters.indexOf(t);e.Debug.assert(i>-1,"Parameters should always be in their parents' parameter list");var a=A(t.parent,r).filter(e.isJSDocParameterTag);if(i<a.length)return[a[i]]}return e.emptyArray}function T(e){return S(e,!1)}function C(t,r){var n=t.name.escapedText;return A(t.parent,r).filter((function(t){return e.isJSDocTemplateTag(t)&&t.typeParameters.some((function(e){return e.name.escapedText===n}))}))}function E(t){return P(t,e.isJSDocReturnTag)}function k(t){var r=P(t,e.isJSDocTypeTag);if(r&&r.typeExpression&&r.typeExpression.type)return r}function N(t){var r=P(t,e.isJSDocTypeTag);return!r&&e.isParameter(t)&&(r=e.find(T(t),(function(e){return!!e.typeExpression}))),r&&r.typeExpression&&r.typeExpression.type}function A(t,r){var n=t.jsDocCache;if(void 0===n||r){var i=e.getJSDocCommentsAndTags(t,r);e.Debug.assert(i.length<2||i[0]!==i[1]),n=e.flatMap(i,(function(t){return e.isJSDoc(t)?t.tags:t})),r||(t.jsDocCache=n)}return n}function F(e){return A(e,!1)}function P(t,r,n){return e.find(A(t,n),r)}function w(e,t){return F(e).filter(t)}function I(e){var t=e.kind;return!!(32&e.flags)&&(208===t||209===t||210===t||232===t)}function O(t){return I(t)&&!e.isNonNullExpression(t)&&!!t.questionDotToken}function M(t){return e.skipOuterExpressions(t,8)}function L(e){switch(e.kind){case 305:case 306:return!0;default:return!1}}function R(e){return e>=163}function B(e){return e>=0&&e<=162}function j(e){return 8<=e&&e<=14}function J(e){return 14<=e&&e<=17}function z(t){return(e.isPropertyDeclaration(t)||X(t))&&e.isPrivateIdentifier(t.name)}function U(e){switch(e){case 126:case 127:case 132:case 85:case 136:case 88:case 93:case 101:case 123:case 121:case 122:case 146:case 124:case 145:case 161:return!0}return!1}function K(t){return!!(16476&e.modifierToFlag(t))}function V(e){return U(e.kind)}function q(e){return!!e&&H(e.kind)}function W(e){switch(e){case 259:case 171:case 173:case 174:case 175:case 215:case 216:return!0;default:return!1}}function H(e){switch(e){case 170:case 176:case 326:case 177:case 178:case 181:case 320:case 182:return!0;default:return W(e)}}function G(e){var t=e.kind;return 173===t||169===t||171===t||174===t||175===t||178===t||172===t||237===t}function Q(e){return e&&(260===e.kind||228===e.kind)}function X(e){switch(e.kind){case 171:case 174:case 175:return!0;default:return!1}}function Y(e){var t=e.kind;return 177===t||176===t||168===t||170===t||178===t||174===t||175===t}function Z(e){var t=e.kind;return 299===t||300===t||301===t||171===t||174===t||175===t}function $(e){if(e){var t=e.kind;return 204===t||203===t}return!1}function ee(e){switch(e.kind){case 203:case 207:return!0}return!1}function te(e){switch(e.kind){case 204:case 206:return!0}return!1}function re(e){switch(e){case 208:case 209:case 211:case 210:case 281:case 282:case 285:case 212:case 206:case 214:case 207:case 228:case 215:case 79:case 80:case 13:case 8:case 9:case 10:case 14:case 225:case 95:case 104:case 108:case 110:case 106:case 232:case 230:case 233:case 100:return!0;default:return!1}}function ne(e){switch(e){case 221:case 222:case 217:case 218:case 219:case 220:case 213:return!0;default:return re(e)}}function ie(e){return function(e){switch(e){case 224:case 226:case 216:case 223:case 227:case 231:case 229:case 354:case 353:case 235:return!0;default:return ne(e)}}(M(e).kind)}function ae(t){return e.isExportAssignment(t)||e.isExportDeclaration(t)}function oe(e){return 259===e||279===e||260===e||261===e||262===e||263===e||264===e||269===e||268===e||275===e||274===e||267===e}function se(e){return 249===e||248===e||256===e||243===e||241===e||239===e||246===e||247===e||245===e||242===e||253===e||250===e||252===e||254===e||255===e||240===e||244===e||251===e||352===e||356===e||355===e}function ce(t){return 165===t.kind?t.parent&&347!==t.parent.kind||e.isInJSFile(t):216===(r=t.kind)||205===r||260===r||228===r||172===r||173===r||263===r||302===r||278===r||259===r||215===r||174===r||270===r||268===r||273===r||261===r||288===r||171===r||170===r||264===r||267===r||271===r||277===r||166===r||299===r||169===r||168===r||175===r||300===r||262===r||165===r||257===r||348===r||341===r||350===r;var r}function ue(e){return e.kind>=330&&e.kind<=350}e.isExternalModuleNameRelative=function(t){return e.pathIsRelative(t)||e.isRootedDiskPath(t)},e.sortAndDeduplicateDiagnostics=function(t){return e.sortAndDeduplicate(t,e.compareDiagnostics)},e.getDefaultLibFileName=function(t){switch(e.getEmitScriptTarget(t)){case 99:return"lib.esnext.full.d.ts";case 9:return"lib.es2022.full.d.ts";case 8:return"lib.es2021.full.d.ts";case 7:return"lib.es2020.full.d.ts";case 6:return"lib.es2019.full.d.ts";case 5:return"lib.es2018.full.d.ts";case 4:return"lib.es2017.full.d.ts";case 3:return"lib.es2016.full.d.ts";case 2:return"lib.es6.d.ts";default:return"lib.d.ts"}},e.textSpanEnd=t,e.textSpanIsEmpty=r,e.textSpanContainsPosition=function(e,r){return r>=e.start&&r<t(e)},e.textRangeContainsPositionInclusive=function(e,t){return t>=e.pos&&t<=e.end},e.textSpanContainsTextSpan=function(e,r){return r.start>=e.start&&t(r)<=t(e)},e.textSpanOverlapsWith=function(e,t){return void 0!==n(e,t)},e.textSpanOverlap=n,e.textSpanIntersectsWithTextSpan=function(e,t){return i(e.start,e.length,t.start,t.length)},e.textSpanIntersectsWith=function(e,t,r){return i(e.start,e.length,t,r)},e.decodedTextSpanIntersectsWith=i,e.textSpanIntersectsWithPosition=function(e,r){return r<=t(e)&&r>=e.start},e.textSpanIntersection=a,e.createTextSpan=o,e.createTextSpanFromBounds=s,e.textChangeRangeNewSpan=function(e){return o(e.span.start,e.newLength)},e.textChangeRangeIsUnchanged=function(e){return r(e.span)&&0===e.newLength},e.createTextChangeRange=c,e.unchangedTextChangeRange=c(o(0,0),0),e.collapseTextChangeRangesAcrossMultipleVersions=function(r){if(0===r.length)return e.unchangedTextChangeRange;if(1===r.length)return r[0];for(var n=r[0],i=n.span.start,a=t(n.span),o=i+n.newLength,u=1;u<r.length;u++){var l=r[u],_=i,d=a,p=o,f=l.span.start,g=t(l.span),m=f+l.newLength;i=Math.min(_,f),a=Math.max(d,d+(g-p)),o=Math.max(m,m+(p-g))}return c(s(i,a),o-i)},e.getTypeParameterOwner=function(e){if(e&&165===e.kind)for(var t=e;t;t=t.parent)if(q(t)||Q(t)||261===t.kind)return t},e.isParameterPropertyDeclaration=function(t,r){return e.hasSyntacticModifier(t,16476)&&173===r.kind},e.isEmptyBindingPattern=u,e.isEmptyBindingElement=l,e.walkUpBindingElementsAndPatterns=_,e.getCombinedModifierFlags=function(t){return d(t,e.getEffectiveModifierFlags)},e.getCombinedNodeFlagsAlwaysIncludeJSDoc=function(t){return d(t,e.getEffectiveModifierFlagsAlwaysIncludeJSDoc)},e.getCombinedNodeFlags=function(e){return d(e,(function(e){return e.flags}))},e.supportedLocaleDirectories=["cs","de","es","fr","it","ja","ko","pl","pt-br","ru","tr","zh-cn","zh-tw"],e.validateLocaleAndSetLanguage=function(t,r,n){var i=t.toLowerCase(),a=/^([a-z]+)([_\-]([a-z]+))?$/.exec(i);if(a){var o=a[1],s=a[3];e.contains(e.supportedLocaleDirectories,i)&&!c(o,s,n)&&c(o,void 0,n),e.setUILocale(t)}else n&&n.push(e.createCompilerDiagnostic(e.Diagnostics.Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1,"en","ja-jp"));function c(t,n,i){var a=e.normalizePath(r.getExecutingFilePath()),o=e.getDirectoryPath(a),s=e.combinePaths(o,t);if(n&&(s=s+"-"+n),s=r.resolvePath(e.combinePaths(s,"diagnosticMessages.generated.json")),!r.fileExists(s))return!1;var c="";try{c=r.readFile(s)}catch(u){return i&&i.push(e.createCompilerDiagnostic(e.Diagnostics.Unable_to_open_file_0,s)),!1}try{e.setLocalizedDiagnosticMessages(JSON.parse(c))}catch(l){return i&&i.push(e.createCompilerDiagnostic(e.Diagnostics.Corrupted_locale_file_0,s)),!1}return!0}},e.getOriginalNode=function(e,t){if(e)for(;void 0!==e.original;)e=e.original;return!t||t(e)?e:void 0},e.findAncestor=function(e,t){for(;e;){var r=t(e);if("quit"===r)return;if(r)return e;e=e.parent}},e.isParseTreeNode=p,e.getParseTreeNode=function(e,t){if(void 0===e||p(e))return e;for(e=e.original;e;){if(p(e))return!t||t(e)?e:void 0;e=e.original}},e.escapeLeadingUnderscores=function(e){return e.length>=2&&95===e.charCodeAt(0)&&95===e.charCodeAt(1)?"_"+e:e},e.unescapeLeadingUnderscores=f,e.idText=g,e.symbolName=function(e){return e.valueDeclaration&&z(e.valueDeclaration)?g(e.valueDeclaration.name):f(e.escapedName)},e.nodeHasName=function t(r,n){return!(!h(r)||!e.isIdentifier(r.name)||g(r.name)!==g(n))||!(!e.isVariableStatement(r)||!e.some(r.declarationList.declarations,(function(e){return t(e,n)})))},e.getNameOfJSDocTypedef=v,e.isNamedDeclaration=h,e.getNonAssignedNameOfDeclaration=b,e.getNameOfDeclaration=x,e.getAssignedName=D,e.getDecorators=function(t){if(e.hasDecorators(t))return e.filter(t.modifiers,e.isDecorator)},e.getModifiers=function(t){if(e.hasSyntacticModifier(t,126975))return e.filter(t.modifiers,V)},e.getJSDocParameterTags=T,e.getJSDocParameterTagsNoCache=function(e){return S(e,!0)},e.getJSDocTypeParameterTags=function(e){return C(e,!1)},e.getJSDocTypeParameterTagsNoCache=function(e){return C(e,!0)},e.hasJSDocParameterTags=function(t){return!!P(t,e.isJSDocParameterTag)},e.getJSDocAugmentsTag=function(t){return P(t,e.isJSDocAugmentsTag)},e.getJSDocImplementsTags=function(t){return w(t,e.isJSDocImplementsTag)},e.getJSDocClassTag=function(t){return P(t,e.isJSDocClassTag)},e.getJSDocPublicTag=function(t){return P(t,e.isJSDocPublicTag)},e.getJSDocPublicTagNoCache=function(t){return P(t,e.isJSDocPublicTag,!0)},e.getJSDocPrivateTag=function(t){return P(t,e.isJSDocPrivateTag)},e.getJSDocPrivateTagNoCache=function(t){return P(t,e.isJSDocPrivateTag,!0)},e.getJSDocProtectedTag=function(t){return P(t,e.isJSDocProtectedTag)},e.getJSDocProtectedTagNoCache=function(t){return P(t,e.isJSDocProtectedTag,!0)},e.getJSDocReadonlyTag=function(t){return P(t,e.isJSDocReadonlyTag)},e.getJSDocReadonlyTagNoCache=function(t){return P(t,e.isJSDocReadonlyTag,!0)},e.getJSDocOverrideTagNoCache=function(t){return P(t,e.isJSDocOverrideTag,!0)},e.getJSDocDeprecatedTag=function(t){return P(t,e.isJSDocDeprecatedTag)},e.getJSDocDeprecatedTagNoCache=function(t){return P(t,e.isJSDocDeprecatedTag,!0)},e.getJSDocEnumTag=function(t){return P(t,e.isJSDocEnumTag)},e.getJSDocThisTag=function(t){return P(t,e.isJSDocThisTag)},e.getJSDocReturnTag=E,e.getJSDocTemplateTag=function(t){return P(t,e.isJSDocTemplateTag)},e.getJSDocTypeTag=k,e.getJSDocType=N,e.getJSDocReturnType=function(t){var r=E(t);if(r&&r.typeExpression)return r.typeExpression.type;var n=k(t);if(n&&n.typeExpression){var i=n.typeExpression.type;if(e.isTypeLiteralNode(i)){var a=e.find(i.members,e.isCallSignatureDeclaration);return a&&a.type}if(e.isFunctionTypeNode(i)||e.isJSDocFunctionType(i))return i.type}},e.getJSDocTags=F,e.getJSDocTagsNoCache=function(e){return A(e,!0)},e.getAllJSDocTags=w,e.getAllJSDocTagsOfKind=function(e,t){return F(e).filter((function(e){return e.kind===t}))},e.getTextOfJSDocComment=function(t){return"string"==typeof t?t:null==t?void 0:t.map((function(t){return 324===t.kind?t.text:(n=327===(r=t).kind?"link":328===r.kind?"linkcode":"linkplain",i=r.name?e.entityNameToString(r.name):"",a=r.name&&r.text.startsWith("://")?"":" ","{@".concat(n," ").concat(i).concat(a).concat(r.text,"}"));var r,n,i,a})).join("")},e.getEffectiveTypeParameterDeclarations=function(t){if(e.isJSDocSignature(t))return e.emptyArray;if(e.isJSDocTypeAlias(t))return e.Debug.assert(323===t.parent.kind),e.flatMap(t.parent.tags,(function(t){return e.isJSDocTemplateTag(t)?t.typeParameters:void 0}));if(t.typeParameters)return t.typeParameters;if(e.canHaveIllegalTypeParameters(t)&&t.typeParameters)return t.typeParameters;if(e.isInJSFile(t)){var r=e.getJSDocTypeParameterDeclarations(t);if(r.length)return r;var n=N(t);if(n&&e.isFunctionTypeNode(n)&&n.typeParameters)return n.typeParameters}return e.emptyArray},e.getEffectiveConstraintOfTypeParameter=function(t){return t.constraint?t.constraint:e.isJSDocTemplateTag(t.parent)&&t===t.parent.typeParameters[0]?t.parent.constraint:void 0},e.isMemberName=function(e){return 79===e.kind||80===e.kind},e.isGetOrSetAccessorDeclaration=function(e){return 175===e.kind||174===e.kind},e.isPropertyAccessChain=function(t){return e.isPropertyAccessExpression(t)&&!!(32&t.flags)},e.isElementAccessChain=function(t){return e.isElementAccessExpression(t)&&!!(32&t.flags)},e.isCallChain=function(t){return e.isCallExpression(t)&&!!(32&t.flags)},e.isOptionalChain=I,e.isOptionalChainRoot=O,e.isExpressionOfOptionalChainRoot=function(e){return O(e.parent)&&e.parent.expression===e},e.isOutermostOptionalChain=function(e){return!I(e.parent)||O(e.parent)||e!==e.parent.expression},e.isNullishCoalesce=function(e){return 223===e.kind&&60===e.operatorToken.kind},e.isConstTypeReference=function(t){return e.isTypeReferenceNode(t)&&e.isIdentifier(t.typeName)&&"const"===t.typeName.escapedText&&!t.typeArguments},e.skipPartiallyEmittedExpressions=M,e.isNonNullChain=function(t){return e.isNonNullExpression(t)&&!!(32&t.flags)},e.isBreakOrContinueStatement=function(e){return 249===e.kind||248===e.kind},e.isNamedExportBindings=function(e){return 277===e.kind||276===e.kind},e.isUnparsedTextLike=L,e.isUnparsedNode=function(e){return L(e)||303===e.kind||307===e.kind},e.isJSDocPropertyLikeTag=function(e){return 350===e.kind||343===e.kind},e.isNode=function(e){return R(e.kind)},e.isNodeKind=R,e.isTokenKind=B,e.isToken=function(e){return B(e.kind)},e.isNodeArray=function(t){return e.hasProperty(t,"pos")&&e.hasProperty(t,"end")},e.isLiteralKind=j,e.isLiteralExpression=function(e){return j(e.kind)},e.isLiteralExpressionOfObject=function(e){switch(e.kind){case 207:case 206:case 13:case 215:case 228:return!0}return!1},e.isTemplateLiteralKind=J,e.isTemplateLiteralToken=function(e){return J(e.kind)},e.isTemplateMiddleOrTemplateTail=function(e){var t=e.kind;return 16===t||17===t},e.isImportOrExportSpecifier=function(t){return e.isImportSpecifier(t)||e.isExportSpecifier(t)},e.isTypeOnlyImportOrExportDeclaration=function(e){switch(e.kind){case 273:case 278:return e.isTypeOnly||e.parent.parent.isTypeOnly;case 271:return e.parent.isTypeOnly;case 270:case 268:return e.isTypeOnly;default:return!1}},e.isAssertionKey=function(t){return e.isStringLiteral(t)||e.isIdentifier(t)},e.isStringTextContainingNode=function(e){return 10===e.kind||J(e.kind)},e.isGeneratedIdentifier=function(t){return e.isIdentifier(t)&&(7&t.autoGenerateFlags)>0},e.isGeneratedPrivateIdentifier=function(t){return e.isPrivateIdentifier(t)&&(7&t.autoGenerateFlags)>0},e.isPrivateIdentifierClassElementDeclaration=z,e.isPrivateIdentifierPropertyAccessExpression=function(t){return e.isPropertyAccessExpression(t)&&e.isPrivateIdentifier(t.name)},e.isModifierKind=U,e.isParameterPropertyModifier=K,e.isClassMemberModifier=function(e){return K(e)||124===e||161===e||127===e},e.isModifier=V,e.isEntityName=function(e){var t=e.kind;return 163===t||79===t},e.isPropertyName=function(e){var t=e.kind;return 79===t||80===t||10===t||8===t||164===t},e.isBindingName=function(e){var t=e.kind;return 79===t||203===t||204===t},e.isFunctionLike=q,e.isFunctionLikeOrClassStaticBlockDeclaration=function(t){return!!t&&(H(t.kind)||e.isClassStaticBlockDeclaration(t))},e.isFunctionLikeDeclaration=function(e){return e&&W(e.kind)},e.isBooleanLiteral=function(e){return 110===e.kind||95===e.kind},e.isFunctionLikeKind=H,e.isFunctionOrModuleBlock=function(t){return e.isSourceFile(t)||e.isModuleBlock(t)||e.isBlock(t)&&q(t.parent)},e.isClassElement=G,e.isClassLike=Q,e.isAccessor=function(e){return e&&(174===e.kind||175===e.kind)},e.isAutoAccessorPropertyDeclaration=function(t){return e.isPropertyDeclaration(t)&&e.hasAccessorModifier(t)},e.isMethodOrAccessor=X,e.isNamedClassElement=function(e){switch(e.kind){case 171:case 174:case 175:case 169:return!0;default:return!1}},e.isModifierLike=function(t){return V(t)||e.isDecorator(t)},e.isTypeElement=Y,e.isClassOrTypeElement=function(e){return Y(e)||G(e)},e.isObjectLiteralElementLike=Z,e.isTypeNode=function(t){return e.isTypeNodeKind(t.kind)},e.isFunctionOrConstructorTypeNode=function(e){switch(e.kind){case 181:case 182:return!0}return!1},e.isBindingPattern=$,e.isAssignmentPattern=function(e){var t=e.kind;return 206===t||207===t},e.isArrayBindingElement=function(e){var t=e.kind;return 205===t||229===t},e.isDeclarationBindingElement=function(e){switch(e.kind){case 257:case 166:case 205:return!0}return!1},e.isBindingOrAssignmentPattern=function(e){return ee(e)||te(e)},e.isObjectBindingOrAssignmentPattern=ee,e.isObjectBindingOrAssignmentElement=function(e){switch(e.kind){case 205:case 299:case 300:case 301:return!0}return!1},e.isArrayBindingOrAssignmentPattern=te,e.isPropertyAccessOrQualifiedNameOrImportTypeNode=function(e){var t=e.kind;return 208===t||163===t||202===t},e.isPropertyAccessOrQualifiedName=function(e){var t=e.kind;return 208===t||163===t},e.isCallLikeExpression=function(e){switch(e.kind){case 283:case 282:case 210:case 211:case 212:case 167:return!0;default:return!1}},e.isCallOrNewExpression=function(e){return 210===e.kind||211===e.kind},e.isTemplateLiteral=function(e){var t=e.kind;return 225===t||14===t},e.isLeftHandSideExpression=function(e){return re(M(e).kind)},e.isUnaryExpression=function(e){return ne(M(e).kind)},e.isUnaryExpressionWithWrite=function(e){switch(e.kind){case 222:return!0;case 221:return 45===e.operator||46===e.operator;default:return!1}},e.isExpression=ie,e.isAssertionExpression=function(e){var t=e.kind;return 213===t||231===t},e.isNotEmittedOrPartiallyEmittedNode=function(t){return e.isNotEmittedStatement(t)||e.isPartiallyEmittedExpression(t)},e.isIterationStatement=function e(t,r){switch(t.kind){case 245:case 246:case 247:case 243:case 244:return!0;case 253:return r&&e(t.statement,r)}return!1},e.isScopeMarker=ae,e.hasScopeMarker=function(t){return e.some(t,ae)},e.needsScopeMarker=function(t){return!(e.isAnyImportOrReExport(t)||e.isExportAssignment(t)||e.hasSyntacticModifier(t,1)||e.isAmbientModule(t))},e.isExternalModuleIndicator=function(t){return e.isAnyImportOrReExport(t)||e.isExportAssignment(t)||e.hasSyntacticModifier(t,1)},e.isForInOrOfStatement=function(e){return 246===e.kind||247===e.kind},e.isConciseBody=function(t){return e.isBlock(t)||ie(t)},e.isFunctionBody=function(t){return e.isBlock(t)},e.isForInitializer=function(t){return e.isVariableDeclarationList(t)||ie(t)},e.isModuleBody=function(e){var t=e.kind;return 265===t||264===t||79===t},e.isNamespaceBody=function(e){var t=e.kind;return 265===t||264===t},e.isJSDocNamespaceBody=function(e){var t=e.kind;return 79===t||264===t},e.isNamedImportBindings=function(e){var t=e.kind;return 272===t||271===t},e.isModuleOrEnumDeclaration=function(e){return 264===e.kind||263===e.kind},e.isDeclaration=ce,e.isDeclarationStatement=function(e){return oe(e.kind)},e.isStatementButNotDeclaration=function(e){return se(e.kind)},e.isStatement=function(t){var r=t.kind;return se(r)||oe(r)||function(t){if(238!==t.kind)return!1;if(void 0!==t.parent&&(255===t.parent.kind||295===t.parent.kind))return!1;return!e.isFunctionBlock(t)}(t)},e.isStatementOrBlock=function(e){var t=e.kind;return se(t)||oe(t)||238===t},e.isModuleReference=function(e){var t=e.kind;return 280===t||163===t||79===t},e.isJsxTagNameExpression=function(e){var t=e.kind;return 108===t||79===t||208===t},e.isJsxChild=function(e){var t=e.kind;return 281===t||291===t||282===t||11===t||285===t},e.isJsxAttributeLike=function(e){var t=e.kind;return 288===t||290===t},e.isStringLiteralOrJsxExpression=function(e){var t=e.kind;return 10===t||291===t},e.isJsxOpeningLikeElement=function(e){var t=e.kind;return 283===t||282===t},e.isCaseOrDefaultClause=function(e){var t=e.kind;return 292===t||293===t},e.isJSDocNode=function(e){return e.kind>=312&&e.kind<=350},e.isJSDocCommentContainingNode=function(t){return 323===t.kind||322===t.kind||324===t.kind||_e(t)||ue(t)||e.isJSDocTypeLiteral(t)||e.isJSDocSignature(t)},e.isJSDocTag=ue,e.isSetAccessor=function(e){return 175===e.kind},e.isGetAccessor=function(e){return 174===e.kind},e.hasJSDocNodes=function(e){var t=e.jsDoc;return!!t&&t.length>0},e.hasType=function(e){return!!e.type},e.hasInitializer=function(e){return!!e.initializer},e.hasOnlyExpressionInitializer=function(e){switch(e.kind){case 257:case 166:case 205:case 169:case 299:case 302:return!0;default:return!1}},e.isObjectLiteralElement=function(e){return 288===e.kind||290===e.kind||Z(e)},e.isTypeReferenceType=function(e){return 180===e.kind||230===e.kind};var le=1073741823;function _e(e){return 327===e.kind||328===e.kind||329===e.kind}function de(t){var r=e.isJSDocParameterTag(t)?t.typeExpression&&t.typeExpression.type:t.type;return void 0!==t.dotDotDotToken||!!r&&321===r.kind}e.guessIndentation=function(t){for(var r=le,n=0,i=t;n<i.length;n++){var a=i[n];if(a.length){for(var o=0;o<a.length&&o<r&&e.isWhiteSpaceLike(a.charCodeAt(o));o++);if(o<r&&(r=o),0===r)return 0}}return r===le?void 0:r},e.isStringLiteralLike=function(e){return 10===e.kind||14===e.kind},e.isJSDocLinkLike=_e,e.hasRestParameter=function(t){var r=e.lastOrUndefined(t.parameters);return!!r&&de(r)},e.isRestParameter=de}(_||(_={})),function(e){e.resolvingEmptyArray=[],e.externalHelpersModuleNameText="tslib",e.defaultMaximumTruncationLength=160,e.noTruncationMaximumTruncationLength=1e6,e.getDeclarationOfKind=function(e,t){var r=e.declarations;if(r)for(var n=0,i=r;n<i.length;n++){var a=i[n];if(a.kind===t)return a}},e.getDeclarationsOfKind=function(t,r){return e.filter(t.declarations||e.emptyArray,(function(e){return e.kind===r}))},e.createSymbolTable=function(t){var r=new e.Map;if(t)for(var n=0,i=t;n<i.length;n++){var a=i[n];r.set(a.escapedName,a)}return r},e.isTransientSymbol=function(e){return 0!=(33554432&e.flags)};var t,r,n=(t="",{getText:function(){return t},write:r=function(e){return t+=e},rawWrite:r,writeKeyword:r,writeOperator:r,writePunctuation:r,writeSpace:r,writeStringLiteral:r,writeLiteral:r,writeParameter:r,writeProperty:r,writeSymbol:function(e,t){return r(e)},writeTrailingSemicolon:r,writeComment:r,getTextPos:function(){return t.length},getLine:function(){return 0},getColumn:function(){return 0},getIndent:function(){return 0},isAtStartOfLine:function(){return!1},hasTrailingComment:function(){return!1},hasTrailingWhitespace:function(){return!!t.length&&e.isWhiteSpaceLike(t.charCodeAt(t.length-1))},writeLine:function(){return t+=" "},increaseIndent:e.noop,decreaseIndent:e.noop,clear:function(){return t=""},trackSymbol:function(){return!1},reportInaccessibleThisError:e.noop,reportInaccessibleUniqueSymbolError:e.noop,reportPrivateInBaseOfClassExpression:e.noop});function i(t,r){return s(t,r,e.moduleResolutionOptionDeclarations)}function s(e,t,r){return e!==t&&r.some((function(r){return!vi(Rn(e,r),Rn(t,r))}))}function c(e){return e.end-e.pos}function u(e){var t=e.name,r=e.subModuleName;return r?"".concat(t,"/").concat(r):t}function l(t){return function(t){if(!(1048576&t.flags)){(0!=(131072&t.flags)||e.forEachChild(t,l))&&(t.flags|=524288),t.flags|=1048576}}(t),0!=(524288&t.flags)}function _(e){for(;e&&308!==e.kind;)e=e.parent;return e}function d(t,r){e.Debug.assert(t>=0);var n=e.getLineStarts(r),i=t,a=r.text;if(i+1===n.length)return a.length-1;var o=n[i],s=n[i+1]-1;for(e.Debug.assert(e.isLineBreak(a.charCodeAt(s)));o<=s&&e.isLineBreak(a.charCodeAt(s));)s--;return s}function p(e){return void 0===e||e.pos===e.end&&e.pos>=0&&1!==e.kind}function f(e){return!p(e)}function g(e,t,r){if(void 0===t||0===t.length)return e;for(var n=0;n<e.length&&r(e[n]);++n);return e.splice.apply(e,a([n,0],t,!1)),e}function m(e,t,r){if(void 0===t)return e;for(var n=0;n<e.length&&r(e[n]);++n);return e.splice(n,0,t),e}function y(e){return Q(e)||!!(1048576&T(e))}function v(e,t){return 42===e.charCodeAt(t+1)&&33===e.charCodeAt(t+2)}function h(t,r,n){return p(t)?t.pos:e.isJSDocNode(t)||11===t.kind?e.skipTrivia((r||_(t)).text,t.pos,!1,!0):n&&e.hasJSDocNodes(t)?h(t.jsDoc[0],r):351===t.kind&&t._children.length>0?h(t._children[0],r,n):e.skipTrivia((r||_(t)).text,t.pos,!1,!1,be(t))}function b(e,t,r){return void 0===r&&(r=!1),x(e.text,t,r)}function x(t,r,n){if(void 0===n&&(n=!1),p(r))return"";var i=t.substring(n?r.pos:e.skipTrivia(t,r.pos),r.end);return function(t){return!!e.findAncestor(t,e.isJSDocTypeExpression)}(r)&&(i=i.split(/\r\n|\n|\r/).map((function(t){return e.trimStringStart(t.replace(/^\s*\*/,""))})).join("\n")),i}function D(e,t){return void 0===t&&(t=!1),b(_(e),e,t)}function S(e){return e.pos}function T(e){var t=e.emitNode;return t&&t.flags||0}function C(e){var t=kt(e);return 257===t.kind&&295===t.parent.kind}function E(t){return e.isModuleDeclaration(t)&&(10===t.name.kind||N(t))}function k(t){return e.isModuleDeclaration(t)||e.isIdentifier(t)}function N(e){return!!(1024&e.flags)}function A(e){return E(e)&&F(e)}function F(t){switch(t.parent.kind){case 308:return e.isExternalModule(t.parent);case 265:return E(t.parent.parent)&&e.isSourceFile(t.parent.parent.parent)&&!e.isExternalModule(t.parent.parent.parent)}return!1}function P(t){var r;return null===(r=t.declarations)||void 0===r?void 0:r.find((function(t){return!(A(t)||e.isModuleDeclaration(t)&&N(t))}))}function w(t,r){switch(t.kind){case 308:case 266:case 295:case 264:case 245:case 246:case 247:case 173:case 171:case 174:case 175:case 259:case 215:case 216:case 169:case 172:return!0;case 238:return!e.isFunctionLikeOrClassStaticBlockDeclaration(r)}return!1}function I(t){switch(t.kind){case 176:case 177:case 170:case 178:case 181:case 182:case 320:case 260:case 228:case 261:case 262:case 347:case 259:case 171:case 173:case 174:case 175:case 215:case 216:return!0;default:return e.assertType(t),!1}}function O(e){switch(e.kind){case 269:case 268:return!0;default:return!1}}function M(t){return O(t)||e.isExportDeclaration(t)}function L(t){return e.findAncestor(t.parent,(function(e){return w(e,e.parent)}))}function R(e){return e&&0!==c(e)?D(e):"(Missing)"}function B(t){switch(t.kind){case 79:case 80:return t.autoGenerateFlags?void 0:t.escapedText;case 10:case 8:case 14:return e.escapeLeadingUnderscores(t.text);case 164:return bt(t.expression)?e.escapeLeadingUnderscores(t.expression.text):void 0;default:return e.Debug.assertNever(t)}}function j(t){switch(t.kind){case 108:return"this";case 80:case 79:return 0===c(t)?e.idText(t):D(t);case 163:return j(t.left)+"."+j(t.right);case 208:return e.isIdentifier(t.name)||e.isPrivateIdentifier(t.name)?j(t.expression)+"."+j(t.name):e.Debug.assertNever(t.name);case 314:return j(t.left)+j(t.right);default:return e.Debug.assertNever(t)}}function J(e,t,r,n,i,a,o){var s=V(e,t);return xn(e,s.start,s.length,r,n,i,a,o)}function z(t,r,n){e.Debug.assertGreaterThanOrEqual(r,0),e.Debug.assertGreaterThanOrEqual(n,0),t&&(e.Debug.assertLessThanOrEqual(r,t.text.length),e.Debug.assertLessThanOrEqual(r+n,t.text.length))}function U(e,t,r,n,i){return z(e,t,r),{file:e,start:t,length:r,code:n.code,category:n.category,messageText:n.next?n:n.messageText,relatedInformation:i}}function K(t,r){var n=e.createScanner(t.languageVersion,!0,t.languageVariant,t.text,void 0,r);n.scan();var i=n.getTokenPos();return e.createTextSpanFromBounds(i,n.getTextPos())}function V(t,r){var n=r;switch(r.kind){case 308:var i=e.skipTrivia(t.text,0,!1);return i===t.text.length?e.createTextSpan(0,0):K(t,i);case 257:case 205:case 260:case 228:case 261:case 264:case 263:case 302:case 259:case 215:case 171:case 174:case 175:case 262:case 169:case 168:case 271:n=r.name;break;case 216:return function(t,r){var n=e.skipTrivia(t.text,r.pos);if(r.body&&238===r.body.kind){var i=e.getLineAndCharacterOfPosition(t,r.body.pos).line;if(i<e.getLineAndCharacterOfPosition(t,r.body.end).line)return e.createTextSpan(n,d(i,t)-n+1)}return e.createTextSpanFromBounds(n,r.end)}(t,r);case 292:case 293:var a=e.skipTrivia(t.text,r.pos),o=r.statements.length>0?r.statements[0].pos:r.end;return e.createTextSpanFromBounds(a,o)}if(void 0===n)return K(t,r.pos);e.Debug.assert(!e.isJSDoc(n));var s=p(n),c=s||e.isJsxText(r)?n.pos:e.skipTrivia(t.text,n.pos);return s?(e.Debug.assert(c===n.pos,"This failure could trigger https://github.com/Microsoft/TypeScript/issues/20809"),e.Debug.assert(c===n.end,"This failure could trigger https://github.com/Microsoft/TypeScript/issues/20809")):(e.Debug.assert(c>=n.pos,"This failure could trigger https://github.com/Microsoft/TypeScript/issues/20809"),e.Debug.assert(c<=n.end,"This failure could trigger https://github.com/Microsoft/TypeScript/issues/20809")),e.createTextSpanFromBounds(c,n.end)}function q(e){return 6===e.scriptKind}function W(t){return!!(2&e.getCombinedNodeFlags(t))}function H(e){return 210===e.kind&&100===e.expression.kind}function G(t){return e.isImportTypeNode(t)&&e.isLiteralTypeNode(t.argument)&&e.isStringLiteral(t.argument.literal)}function Q(e){return 241===e.kind&&10===e.expression.kind}function X(e){return!!(1048576&T(e))}function Y(t){return e.isIdentifier(t.name)&&!t.initializer}e.changesAffectModuleResolution=function(e,t){return e.configFilePath!==t.configFilePath||i(e,t)},e.optionsHaveModuleResolutionChanges=i,e.changesAffectingProgramStructure=function(t,r){return s(t,r,e.optionsAffectingProgramStructure)},e.optionsHaveChanges=s,e.forEachAncestor=function(t,r){for(;;){var n=r(t);if("quit"===n)return;if(void 0!==n)return n;if(e.isSourceFile(t))return;t=t.parent}},e.forEachEntry=function(e,t){for(var r=e.entries(),n=r.next();!n.done;n=r.next()){var i=n.value,a=i[0],o=t(i[1],a);if(o)return o}},e.forEachKey=function(e,t){for(var r=e.keys(),n=r.next();!n.done;n=r.next()){var i=t(n.value);if(i)return i}},e.copyEntries=function(e,t){e.forEach((function(e,r){t.set(r,e)}))},e.usingSingleLineStringWriter=function(e){var t=n.getText();try{return e(n),n.getText()}finally{n.clear(),n.writeKeyword(t)}},e.getFullWidth=c,e.getResolvedModule=function(e,t,r){return e&&e.resolvedModules&&e.resolvedModules.get(t,r)},e.setResolvedModule=function(t,r,n,i){t.resolvedModules||(t.resolvedModules=e.createModeAwareCache()),t.resolvedModules.set(r,i,n)},e.setResolvedTypeReferenceDirective=function(t,r,n){t.resolvedTypeReferenceDirectiveNames||(t.resolvedTypeReferenceDirectiveNames=e.createModeAwareCache()),t.resolvedTypeReferenceDirectiveNames.set(r,void 0,n)},e.projectReferenceIsEqualTo=function(e,t){return e.path===t.path&&!e.prepend==!t.prepend&&!e.circular==!t.circular},e.moduleResolutionIsEqualTo=function(e,t){return e.isExternalLibraryImport===t.isExternalLibraryImport&&e.extension===t.extension&&e.resolvedFileName===t.resolvedFileName&&e.originalPath===t.originalPath&&(r=e.packageId,n=t.packageId,r===n||!!r&&!!n&&r.name===n.name&&r.subModuleName===n.subModuleName&&r.version===n.version);var r,n},e.packageIdToPackageName=u,e.packageIdToString=function(e){return"".concat(u(e),"@").concat(e.version)},e.typeDirectiveIsEqualTo=function(e,t){return e.resolvedFileName===t.resolvedFileName&&e.primary===t.primary&&e.originalPath===t.originalPath},e.hasChangesInResolutions=function(t,r,n,i,a){e.Debug.assert(t.length===r.length);for(var o=0;o<t.length;o++){var s=r[o],c=t[o],u=e.isString(c)?c:c.fileName.toLowerCase(),l=e.isString(c)?i&&e.getModeForResolutionAtIndex(i,o):e.getModeForFileReference(c,null==i?void 0:i.impliedNodeFormat),_=n&&n.get(u,l);if(_?!s||!a(_,s):s)return!0}return!1},e.containsParseError=l,e.getSourceFileOfNode=_,e.getSourceFileOfModule=function(e){return _(e.valueDeclaration||P(e))},e.isPlainJsFile=function(e,t){return!(!e||1!==e.scriptKind&&2!==e.scriptKind||e.checkJsDirective||void 0!==t)},e.isStatementWithLocals=function(e){switch(e.kind){case 238:case 266:case 245:case 246:case 247:return!0}return!1},e.getStartPositionOfLine=function(t,r){return e.Debug.assert(t>=0),e.getLineStarts(r)[t]},e.nodePosToString=function(t){var r=_(t),n=e.getLineAndCharacterOfPosition(r,t.pos);return"".concat(r.fileName,"(").concat(n.line+1,",").concat(n.character+1,")")},e.getEndLinePosition=d,e.isFileLevelUniqueName=function(e,t,r){return!(r&&r(t)||e.identifiers.has(t))},e.nodeIsMissing=p,e.nodeIsPresent=f,e.insertStatementsAfterStandardPrologue=function(e,t){return g(e,t,Q)},e.insertStatementsAfterCustomPrologue=function(e,t){return g(e,t,y)},e.insertStatementAfterStandardPrologue=function(e,t){return m(e,t,Q)},e.insertStatementAfterCustomPrologue=function(e,t){return m(e,t,y)},e.isRecognizedTripleSlashComment=function(t,r,n){if(47===t.charCodeAt(r+1)&&r+2<n&&47===t.charCodeAt(r+2)){var i=t.substring(r,n);return!!(e.fullTripleSlashReferencePathRegEx.test(i)||e.fullTripleSlashAMDReferencePathRegEx.test(i)||Z.test(i)||$.test(i))}return!1},e.isPinnedComment=v,e.createCommentDirectivesMap=function(t,r){var n=new e.Map(r.map((function(r){return["".concat(e.getLineAndCharacterOfPosition(t,r.range.end).line),r]}))),i=new e.Map;return{getUnusedExpectations:function(){return e.arrayFrom(n.entries()).filter((function(e){var t=e[0];return 0===e[1].type&&!i.get(t)})).map((function(e){e[0];return e[1]}))},markUsed:function(e){if(!n.has("".concat(e)))return!1;return i.set("".concat(e),!0),!0}}},e.getTokenPosOfNode=h,e.getNonDecoratorTokenPosOfNode=function(t,r){var n=!p(t)&&e.canHaveModifiers(t)?e.findLast(t.modifiers,e.isDecorator):void 0;return n?e.skipTrivia((r||_(t)).text,n.end):h(t,r)},e.getSourceTextOfNodeFromSourceFile=b,e.isExportNamespaceAsDefaultDeclaration=function(t){return!!(e.isExportDeclaration(t)&&t.exportClause&&e.isNamespaceExport(t.exportClause)&&"default"===t.exportClause.name.escapedText)},e.getTextOfNodeFromSourceText=x,e.getTextOfNode=D,e.indexOfNode=function(t,r){return e.binarySearch(t,r,S,e.compareValues)},e.getEmitFlags=T,e.getScriptTargetFeatures=function(){return{es2015:{Array:["find","findIndex","fill","copyWithin","entries","keys","values"],RegExp:["flags","sticky","unicode"],Reflect:["apply","construct","defineProperty","deleteProperty","get"," getOwnPropertyDescriptor","getPrototypeOf","has","isExtensible","ownKeys","preventExtensions","set","setPrototypeOf"],ArrayConstructor:["from","of"],ObjectConstructor:["assign","getOwnPropertySymbols","keys","is","setPrototypeOf"],NumberConstructor:["isFinite","isInteger","isNaN","isSafeInteger","parseFloat","parseInt"],Math:["clz32","imul","sign","log10","log2","log1p","expm1","cosh","sinh","tanh","acosh","asinh","atanh","hypot","trunc","fround","cbrt"],Map:["entries","keys","values"],Set:["entries","keys","values"],Promise:e.emptyArray,PromiseConstructor:["all","race","reject","resolve"],Symbol:["for","keyFor"],WeakMap:["entries","keys","values"],WeakSet:["entries","keys","values"],Iterator:e.emptyArray,AsyncIterator:e.emptyArray,String:["codePointAt","includes","endsWith","normalize","repeat","startsWith","anchor","big","blink","bold","fixed","fontcolor","fontsize","italics","link","small","strike","sub","sup"],StringConstructor:["fromCodePoint","raw"]},es2016:{Array:["includes"]},es2017:{Atomics:e.emptyArray,SharedArrayBuffer:e.emptyArray,String:["padStart","padEnd"],ObjectConstructor:["values","entries","getOwnPropertyDescriptors"],DateTimeFormat:["formatToParts"]},es2018:{Promise:["finally"],RegExpMatchArray:["groups"],RegExpExecArray:["groups"],RegExp:["dotAll"],Intl:["PluralRules"],AsyncIterable:e.emptyArray,AsyncIterableIterator:e.emptyArray,AsyncGenerator:e.emptyArray,AsyncGeneratorFunction:e.emptyArray,NumberFormat:["formatToParts"]},es2019:{Array:["flat","flatMap"],ObjectConstructor:["fromEntries"],String:["trimStart","trimEnd","trimLeft","trimRight"],Symbol:["description"]},es2020:{BigInt:e.emptyArray,BigInt64Array:e.emptyArray,BigUint64Array:e.emptyArray,PromiseConstructor:["allSettled"],SymbolConstructor:["matchAll"],String:["matchAll"],DataView:["setBigInt64","setBigUint64","getBigInt64","getBigUint64"],RelativeTimeFormat:["format","formatToParts","resolvedOptions"]},es2021:{PromiseConstructor:["any"],String:["replaceAll"]},es2022:{Array:["at"],String:["at"],Int8Array:["at"],Uint8Array:["at"],Uint8ClampedArray:["at"],Int16Array:["at"],Uint16Array:["at"],Int32Array:["at"],Uint32Array:["at"],Float32Array:["at"],Float64Array:["at"],BigInt64Array:["at"],BigUint64Array:["at"],ObjectConstructor:["hasOwn"],Error:["cause"]}}},function(e){e[e.None=0]="None",e[e.NeverAsciiEscape=1]="NeverAsciiEscape",e[e.JsxAttributeEscape=2]="JsxAttributeEscape",e[e.TerminateUnterminatedLiterals=4]="TerminateUnterminatedLiterals",e[e.AllowNumericSeparator=8]="AllowNumericSeparator"}(e.GetLiteralTextFlags||(e.GetLiteralTextFlags={})),e.getLiteralText=function(t,r,n){var i;if(r&&function(t,r){if(Nt(t)||!t.parent||4&r&&t.isUnterminated)return!1;if(e.isNumericLiteral(t)&&512&t.numericLiteralFlags)return!!(8&r);return!e.isBigIntLiteral(t)}(t,n))return b(r,t);switch(t.kind){case 10:var a=2&n?Ht:1&n||16777216&T(t)?Jt:Ut;return t.singleQuote?"'"+a(t.text,39)+"'":'"'+a(t.text,34)+'"';case 14:case 15:case 16:case 17:a=1&n||16777216&T(t)?Jt:Ut;var o=null!==(i=t.rawText)&&void 0!==i?i:function(e){return e.replace(It,"\\${")}(a(t.text,96));switch(t.kind){case 14:return"`"+o+"`";case 15:return"`"+o+"${";case 16:return"}"+o+"${";case 17:return"}"+o+"`"}break;case 8:case 9:return t.text;case 13:return 4&n&&t.isUnterminated?t.text+(92===t.text.charCodeAt(t.text.length-1)?" /":"/"):t.text}return e.Debug.fail("Literal kind '".concat(t.kind,"' not accounted for."))},e.getTextOfConstantValue=function(t){return e.isString(t)?'"'+Ut(t)+'"':""+t},e.makeIdentifierFromModuleName=function(t){return e.getBaseFileName(t).replace(/^(\d)/,"_$1").replace(/\W/g,"_")},e.isBlockOrCatchScoped=function(t){return 0!=(3&e.getCombinedNodeFlags(t))||C(t)},e.isCatchClauseVariableDeclarationOrBindingElement=C,e.isAmbientModule=E,e.isModuleWithStringLiteralName=function(t){return e.isModuleDeclaration(t)&&10===t.name.kind},e.isNonGlobalAmbientModule=function(t){return e.isModuleDeclaration(t)&&e.isStringLiteral(t.name)},e.isEffectiveModuleDeclaration=k,e.isShorthandAmbientModuleSymbol=function(e){return!!(t=e.valueDeclaration)&&264===t.kind&&!t.body;var t},e.isBlockScopedContainerTopLevel=function(t){return 308===t.kind||264===t.kind||e.isFunctionLikeOrClassStaticBlockDeclaration(t)},e.isGlobalScopeAugmentation=N,e.isExternalModuleAugmentation=A,e.isModuleAugmentationExternal=F,e.getNonAugmentationDeclaration=P,e.isEffectiveExternalModule=function(t,r){return e.isExternalModule(t)||r.isolatedModules||((n=Pn(r))===e.ModuleKind.CommonJS||n===e.ModuleKind.Node16||n===e.ModuleKind.NodeNext)&&!!t.commonJsModuleIndicator;var n},e.isEffectiveStrictModeSourceFile=function(t,r){switch(t.scriptKind){case 1:case 3:case 2:case 4:break;default:return!1}return!t.isDeclarationFile&&(!!Mn(r,"alwaysStrict")||(!!e.startsWithUseStrict(t.statements)||!(!e.isExternalModule(t)&&!r.isolatedModules)&&(Pn(r)>=e.ModuleKind.ES2015||!r.noImplicitUseStrict)))},e.isAmbientPropertyDeclaration=function(e){return!!(16777216&e.flags)||xr(e,2)},e.isBlockScope=w,e.isDeclarationWithTypeParameters=function(t){switch(t.kind){case 341:case 348:case 326:return!0;default:return e.assertType(t),I(t)}},e.isDeclarationWithTypeParameterChildren=I,e.isAnyImportSyntax=O,e.isAnyImportOrBareOrAccessedRequire=function(e){return O(e)||Se(e)},e.isLateVisibilityPaintedStatement=function(e){switch(e.kind){case 269:case 268:case 240:case 260:case 259:case 264:case 262:case 261:case 263:return!0;default:return!1}},e.hasPossibleExternalModuleReference=function(t){return M(t)||e.isModuleDeclaration(t)||e.isImportTypeNode(t)||H(t)},e.isAnyImportOrReExport=M,e.getEnclosingBlockScopeContainer=L,e.forEachEnclosingBlockScopeContainer=function(e,t){for(var r=L(e);r;)t(r),r=L(r)},e.declarationNameToString=R,e.getNameFromIndexInfo=function(e){return e.declaration?R(e.declaration.parameters[0].name):void 0},e.isComputedNonLiteralName=function(e){return 164===e.kind&&!bt(e.expression)},e.tryGetTextOfPropertyName=B,e.getTextOfPropertyName=function(t){return e.Debug.checkDefined(B(t))},e.entityNameToString=j,e.createDiagnosticForNode=function(e,t,r,n,i,a){return J(_(e),e,t,r,n,i,a)},e.createDiagnosticForNodeArray=function(t,r,n,i,a,o,s){var c=e.skipTrivia(t.text,r.pos);return xn(t,c,r.end-c,n,i,a,o,s)},e.createDiagnosticForNodeInSourceFile=J,e.createDiagnosticForNodeFromMessageChain=function(e,t,r){var n=_(e),i=V(n,e);return U(n,i.start,i.length,t,r)},e.createFileDiagnosticFromMessageChain=U,e.createDiagnosticForFileFromMessageChain=function(e,t,r){return{file:e,start:0,length:0,code:t.code,category:t.category,messageText:t.next?t:t.messageText,relatedInformation:r}},e.createDiagnosticMessageChainFromDiagnostic=function(e){return"string"==typeof e.messageText?{code:e.code,category:e.category,messageText:e.messageText,next:e.next}:e.messageText},e.createDiagnosticForRange=function(e,t,r){return{file:e,start:t.pos,length:t.end-t.pos,code:r.code,category:r.category,messageText:r.message}},e.getSpanOfTokenAtPosition=K,e.getErrorSpanForNode=V,e.isExternalOrCommonJsModule=function(e){return void 0!==(e.externalModuleIndicator||e.commonJsModuleIndicator)},e.isJsonSourceFile=q,e.isEnumConst=function(t){return!!(2048&e.getCombinedModifierFlags(t))},e.isDeclarationReadonly=function(t){return!(!(64&e.getCombinedModifierFlags(t))||e.isParameterPropertyDeclaration(t,t.parent))},e.isVarConst=W,e.isLet=function(t){return!!(1&e.getCombinedNodeFlags(t))},e.isSuperCall=function(e){return 210===e.kind&&106===e.expression.kind},e.isImportCall=H,e.isImportMeta=function(t){return e.isMetaProperty(t)&&100===t.keywordToken&&"meta"===t.name.escapedText},e.isLiteralImportTypeNode=G,e.isPrologueDirective=Q,e.isCustomPrologue=X,e.isHoistedFunction=function(t){return X(t)&&e.isFunctionDeclaration(t)},e.isHoistedVariableStatement=function(t){return X(t)&&e.isVariableStatement(t)&&e.every(t.declarationList.declarations,Y)},e.getLeadingCommentRangesOfNode=function(t,r){return 11!==t.kind?e.getLeadingCommentRanges(r.text,t.pos):void 0},e.getJSDocCommentRanges=function(t,r){var n=166===t.kind||165===t.kind||215===t.kind||216===t.kind||214===t.kind||257===t.kind||278===t.kind?e.concatenate(e.getTrailingCommentRanges(r,t.pos),e.getLeadingCommentRanges(r,t.pos)):e.getLeadingCommentRanges(r,t.pos);return e.filter(n,(function(e){return 42===r.charCodeAt(e.pos+1)&&42===r.charCodeAt(e.pos+2)&&47!==r.charCodeAt(e.pos+3)}))},e.fullTripleSlashReferencePathRegEx=/^(\/\/\/\s*<reference\s+path\s*=\s*)(('[^']*')|("[^"]*")).*?\/>/;var Z=/^(\/\/\/\s*<reference\s+types\s*=\s*)(('[^']*')|("[^"]*")).*?\/>/;e.fullTripleSlashAMDReferencePathRegEx=/^(\/\/\/\s*<amd-dependency\s+path\s*=\s*)(('[^']*')|("[^"]*")).*?\/>/;var $=/^(\/\/\/\s*<reference\s+no-default-lib\s*=\s*)(('[^']*')|("[^"]*"))\s*\/>/;function ee(t){if(179<=t.kind&&t.kind<=202)return!0;switch(t.kind){case 131:case 157:case 148:case 160:case 152:case 134:case 153:case 149:case 155:case 144:return!0;case 114:return 219!==t.parent.kind;case 230:return e.isHeritageClause(t.parent)&&!Jr(t);case 165:return 197===t.parent.kind||192===t.parent.kind;case 79:(163===t.parent.kind&&t.parent.right===t||208===t.parent.kind&&t.parent.name===t)&&(t=t.parent),e.Debug.assert(79===t.kind||163===t.kind||208===t.kind,"'node' was expected to be a qualified name, identifier or property access in 'isPartOfTypeNode'.");case 163:case 208:case 108:var r=t.parent;if(183===r.kind)return!1;if(202===r.kind)return!r.isTypeOf;if(179<=r.kind&&r.kind<=202)return!0;switch(r.kind){case 230:return e.isHeritageClause(r.parent)&&!Jr(r);case 165:case 347:return t===r.constraint;case 169:case 168:case 166:case 257:case 259:case 215:case 216:case 173:case 171:case 170:case 174:case 175:case 176:case 177:case 178:case 213:return t===r.type;case 210:case 211:return e.contains(r.typeArguments,t);case 212:return!1}}return!1}function te(e){if(e)switch(e.kind){case 205:case 302:case 166:case 299:case 169:case 168:case 300:case 257:return!0}return!1}function re(e){return 258===e.parent.kind&&240===e.parent.parent.kind}function ne(t){return!!he(t)&&(e.isBinaryExpression(t)&&1===Ie(t))}function ie(e,t,r){return e.properties.filter((function(e){if(299===e.kind){var n=B(e.name);return t===n||!!r&&r===n}return!1}))}function ae(t){if(t&&t.statements.length){var r=t.statements[0].expression;return e.tryCast(r,e.isObjectLiteralExpression)}}function oe(t,r){var n=ae(t);return n?ie(n,r):e.emptyArray}function se(t,r){for(e.Debug.assert(308!==t.kind);;){if(!(t=t.parent))return e.Debug.fail();switch(t.kind){case 164:if(e.isClassLike(t.parent.parent))return t;t=t.parent;break;case 167:166===t.parent.kind&&e.isClassElement(t.parent.parent)?t=t.parent.parent:e.isClassElement(t.parent)&&(t=t.parent);break;case 216:if(!r)continue;case 259:case 215:case 264:case 172:case 169:case 168:case 171:case 170:case 173:case 174:case 175:case 176:case 177:case 178:case 263:case 308:return t}}}function ce(e){var t=e.kind;return(208===t||209===t)&&106===e.expression.kind}function ue(t,r,n){if(e.isNamedDeclaration(t)&&e.isPrivateIdentifier(t.name))return!1;switch(t.kind){case 260:return!0;case 169:return 260===r.kind;case 174:case 175:case 171:return void 0!==t.body&&260===r.kind;case 166:return void 0!==r.body&&(173===r.kind||171===r.kind||175===r.kind)&&260===n.kind}return!1}function le(e,t,r){return Cr(e)&&ue(e,t,r)}function _e(e,t,r){return le(e,t,r)||de(e,t)}function de(t,r){switch(t.kind){case 260:return e.some(t.members,(function(e){return _e(e,t,r)}));case 171:case 175:case 173:return e.some(t.parameters,(function(e){return le(e,t,r)}));default:return!1}}function pe(e){var t=e.parent;return(283===t.kind||282===t.kind||284===t.kind)&&t.tagName===e}function fe(t){switch(t.kind){case 106:case 104:case 110:case 95:case 13:case 206:case 207:case 208:case 209:case 210:case 211:case 212:case 231:case 213:case 235:case 232:case 214:case 215:case 228:case 216:case 219:case 217:case 218:case 221:case 222:case 223:case 224:case 227:case 225:case 229:case 281:case 282:case 285:case 226:case 220:case 233:return!0;case 230:return!e.isHeritageClause(t.parent);case 163:for(;163===t.parent.kind;)t=t.parent;return 183===t.parent.kind||e.isJSDocLinkLike(t.parent)||e.isJSDocNameReference(t.parent)||e.isJSDocMemberName(t.parent)||pe(t);case 314:for(;e.isJSDocMemberName(t.parent);)t=t.parent;return 183===t.parent.kind||e.isJSDocLinkLike(t.parent)||e.isJSDocNameReference(t.parent)||e.isJSDocMemberName(t.parent)||pe(t);case 80:return e.isBinaryExpression(t.parent)&&t.parent.left===t&&101===t.parent.operatorToken.kind;case 79:if(183===t.parent.kind||e.isJSDocLinkLike(t.parent)||e.isJSDocNameReference(t.parent)||e.isJSDocMemberName(t.parent)||pe(t))return!0;case 8:case 9:case 10:case 14:case 108:return ge(t);default:return!1}}function ge(e){var t=e.parent;switch(t.kind){case 257:case 166:case 169:case 168:case 302:case 299:case 205:return t.initializer===e;case 241:case 242:case 243:case 244:case 250:case 251:case 252:case 292:case 254:return t.expression===e;case 245:var r=t;return r.initializer===e&&258!==r.initializer.kind||r.condition===e||r.incrementor===e;case 246:case 247:var n=t;return n.initializer===e&&258!==n.initializer.kind||n.expression===e;case 213:case 231:case 236:case 164:case 235:return e===t.expression;case 167:case 291:case 290:case 301:return!0;case 230:return t.expression===e&&!ee(t);case 300:return t.objectAssignmentInitializer===e;default:return fe(t)}}function me(e){for(;163===e.kind||79===e.kind;)e=e.parent;return 183===e.kind}function ye(e){return 268===e.kind&&280===e.moduleReference.kind}function ve(e){return he(e)}function he(e){return!!e&&!!(262144&e.flags)}function be(e){return!!e&&!!(8388608&e.flags)}function xe(t,r){if(210!==t.kind)return!1;var n=t,i=n.expression,a=n.arguments;if(79!==i.kind||"require"!==i.escapedText)return!1;if(1!==a.length)return!1;var o=a[0];return!r||e.isStringLiteralLike(o)}function De(e){return Te(e,!1)}function Se(e){return Te(e,!0)}function Te(t,r){return e.isVariableDeclaration(t)&&!!t.initializer&&xe(r?un(t.initializer):t.initializer,!0)}function Ce(t){return e.isBinaryExpression(t)||cn(t)||e.isIdentifier(t)||e.isCallExpression(t)}function Ee(t){return he(t)&&t.initializer&&e.isBinaryExpression(t.initializer)&&(56===t.initializer.operatorToken.kind||60===t.initializer.operatorToken.kind)&&t.name&&zr(t.name)&&Ne(t.name,t.initializer.left)?t.initializer.right:t.initializer}function ke(t,r){if(e.isCallExpression(t)){var n=ct(t.expression);return 215===n.kind||216===n.kind?t:void 0}return 215===t.kind||228===t.kind||216===t.kind||e.isObjectLiteralExpression(t)&&(0===t.properties.length||r)?t:void 0}function Ne(t,r){return Ct(t)&&Ct(r)?Et(t)===Et(r):e.isMemberName(t)&&Me(r)&&(108===r.expression.kind||e.isIdentifier(r.expression)&&("window"===r.expression.escapedText||"self"===r.expression.escapedText||"global"===r.expression.escapedText))?Ne(t,Je(r)):!(!Me(t)||!Me(r))&&(Ue(t)===Ue(r)&&Ne(t.expression,r.expression))}function Ae(e){for(;jr(e,!0);)e=e.right;return e}function Fe(t){return e.isIdentifier(t)&&"exports"===t.escapedText}function Pe(t){return e.isIdentifier(t)&&"module"===t.escapedText}function we(t){return(e.isPropertyAccessExpression(t)||Le(t))&&Pe(t.expression)&&"exports"===Ue(t)}function Ie(t){var r=function(t){if(e.isCallExpression(t)){if(!Oe(t))return 0;var r=t.arguments[0];return Fe(r)||we(r)?8:Re(r)&&"prototype"===Ue(r)?9:7}if(63!==t.operatorToken.kind||!cn(t.left)||(n=Ae(t),e.isVoidExpression(n)&&e.isNumericLiteral(n.expression)&&"0"===n.expression.text))return 0;var n;if(je(t.left.expression,!0)&&"prototype"===Ue(t.left)&&e.isObjectLiteralExpression(Ve(t)))return 6;return Ke(t.left)}(t);return 5===r||he(t)?r:0}function Oe(t){return 3===e.length(t.arguments)&&e.isPropertyAccessExpression(t.expression)&&e.isIdentifier(t.expression.expression)&&"Object"===e.idText(t.expression.expression)&&"defineProperty"===e.idText(t.expression.name)&&bt(t.arguments[1])&&je(t.arguments[0],!0)}function Me(t){return e.isPropertyAccessExpression(t)||Le(t)}function Le(t){return e.isElementAccessExpression(t)&&bt(t.argumentExpression)}function Re(t,r){return e.isPropertyAccessExpression(t)&&(!r&&108===t.expression.kind||e.isIdentifier(t.name)&&je(t.expression,!0))||Be(t,r)}function Be(e,t){return Le(e)&&(!t&&108===e.expression.kind||zr(e.expression)||Re(e.expression,!0))}function je(e,t){return zr(e)||Re(e,t)}function Je(t){return e.isPropertyAccessExpression(t)?t.name:t.argumentExpression}function ze(t){if(e.isPropertyAccessExpression(t))return t.name;var r=ct(t.argumentExpression);return e.isNumericLiteral(r)||e.isStringLiteralLike(r)?r:t}function Ue(t){var r=ze(t);if(r){if(e.isIdentifier(r))return r.escapedText;if(e.isStringLiteralLike(r)||e.isNumericLiteral(r))return e.escapeLeadingUnderscores(r.text)}}function Ke(t){if(108===t.expression.kind)return 4;if(we(t))return 2;if(je(t.expression,!0)){if(Kr(t.expression))return 3;for(var r=t;!e.isIdentifier(r.expression);)r=r.expression;var n=r.expression;if(("exports"===n.escapedText||"module"===n.escapedText&&"exports"===Ue(r))&&Re(t))return 1;if(je(t,!0)||e.isElementAccessExpression(t)&&St(t))return 5}return 0}function Ve(t){for(;e.isBinaryExpression(t.right);)t=t.right;return t.right}function qe(t){switch(t.parent.kind){case 269:case 275:return t.parent;case 280:return t.parent.parent;case 210:return H(t.parent)||xe(t.parent,!1)?t.parent:void 0;case 198:return e.Debug.assert(e.isStringLiteral(t)),e.tryCast(t.parent.parent,e.isImportTypeNode);default:return}}function We(t){switch(t.kind){case 269:case 275:return t.moduleSpecifier;case 268:return 280===t.moduleReference.kind?t.moduleReference.expression:void 0;case 202:return G(t)?t.argument.literal:void 0;case 210:return t.arguments[0];case 264:return 10===t.name.kind?t.name:void 0;default:return e.Debug.assertNever(t)}}function He(e){return 348===e.kind||341===e.kind||342===e.kind}function Ge(t){return e.isExpressionStatement(t)&&e.isBinaryExpression(t.expression)&&0!==Ie(t.expression)&&e.isBinaryExpression(t.expression.right)&&(56===t.expression.right.operatorToken.kind||60===t.expression.right.operatorToken.kind)?t.expression.right.right:void 0}function Qe(e){switch(e.kind){case 240:var t=Xe(e);return t&&t.initializer;case 169:case 299:return e.initializer}}function Xe(t){return e.isVariableStatement(t)?e.firstOrUndefined(t.declarationList.declarations):void 0}function Ye(t){return e.isModuleDeclaration(t)&&t.body&&264===t.body.kind?t.body:void 0}function Ze(t,r){if(e.isJSDoc(r)){var n=e.filter(r.tags,(function(e){return $e(t,e)}));return r.tags===n?[r]:n}return $e(t,r)?[r]:void 0}function $e(t,r){return!(e.isJSDocTypeTag(r)&&r.parent&&e.isJSDoc(r.parent)&&e.isParenthesizedExpression(r.parent.parent)&&r.parent.parent!==t)}function et(t){var r=t.parent;return 299===r.kind||274===r.kind||169===r.kind||241===r.kind&&208===t.kind||250===r.kind||Ye(r)||e.isBinaryExpression(t)&&63===t.operatorToken.kind?r:r.parent&&(Xe(r.parent)===t||e.isBinaryExpression(r)&&63===r.operatorToken.kind)?r.parent:r.parent&&r.parent.parent&&(Xe(r.parent.parent)||Qe(r.parent.parent)===t||Ge(r.parent.parent))?r.parent.parent:void 0}function tt(t){var r=rt(t);if(r)return e.isPropertySignature(r)&&r.type&&e.isFunctionLike(r.type)?r.type:e.isFunctionLike(r)?r:void 0}function rt(t){var r=nt(t);if(r)return Ge(r)||function(t){return e.isExpressionStatement(t)&&e.isBinaryExpression(t.expression)&&63===t.expression.operatorToken.kind?Ae(t.expression):void 0}(r)||Qe(r)||Xe(r)||Ye(r)||r}function nt(t){var r=it(t);if(r){var n=r.parent;return n&&n.jsDoc&&r===e.lastOrUndefined(n.jsDoc)?n:void 0}}function it(t){return e.findAncestor(t.parent,e.isJSDoc)}function at(e){for(var t=e.parent;;){switch(t.kind){case 223:var r=t.operatorToken.kind;return Lr(r)&&t.left===e?63===r||Mr(r)?1:2:0;case 221:case 222:var n=t.operator;return 45===n||46===n?2:0;case 246:case 247:return t.initializer===e?1:0;case 214:case 206:case 227:case 232:e=t;break;case 301:e=t.parent;break;case 300:if(t.name!==e)return 0;e=t.parent;break;case 299:if(t.name===e)return 0;e=t.parent;break;default:return 0}t=e.parent}}function ot(e,t){for(;e&&e.kind===t;)e=e.parent;return e}function st(e){return ot(e,214)}function ct(t,r){var n=r?17:1;return e.skipOuterExpressions(t,n)}function ut(t){return zr(t)||e.isClassExpression(t)}function lt(e){return ut(_t(e))}function _t(t){return e.isExportAssignment(t)?t.expression:t.right}function dt(t){var r=pt(t);if(r&&he(t)){var n=e.getJSDocAugmentsTag(t);if(n)return n.class}return r}function pt(e){var t=mt(e.heritageClauses,94);return t&&t.types.length>0?t.types[0]:void 0}function ft(t){if(he(t))return e.getJSDocImplementsTags(t).map((function(e){return e.class}));var r=mt(t.heritageClauses,117);return null==r?void 0:r.types}function gt(e){var t=mt(e.heritageClauses,94);return t?t.types:void 0}function mt(e,t){if(e)for(var r=0,n=e;r<n.length;r++){var i=n[r];if(i.token===t)return i}}function yt(e){return 81<=e&&e<=162}function vt(e){return 126<=e&&e<=162}function ht(e){return yt(e)&&!vt(e)}function bt(t){return e.isStringLiteralLike(t)||e.isNumericLiteral(t)}function xt(t){return e.isPrefixUnaryExpression(t)&&(39===t.operator||40===t.operator)&&e.isNumericLiteral(t.operand)}function Dt(t){var r=e.getNameOfDeclaration(t);return!!r&&St(r)}function St(t){if(164!==t.kind&&209!==t.kind)return!1;var r=e.isElementAccessExpression(t)?ct(t.argumentExpression):t.expression;return!bt(r)&&!xt(r)}function Tt(t){switch(t.kind){case 79:case 80:return t.escapedText;case 10:case 8:return e.escapeLeadingUnderscores(t.text);case 164:var r=t.expression;return bt(r)?e.escapeLeadingUnderscores(r.text):xt(r)?40===r.operator?e.tokenToString(r.operator)+r.operand.text:r.operand.text:void 0;default:return e.Debug.assertNever(t)}}function Ct(e){switch(e.kind){case 79:case 10:case 14:case 8:return!0;default:return!1}}function Et(t){return e.isMemberName(t)?e.idText(t):t.text}function kt(e){for(;205===e.kind;)e=e.parent.parent;return e}function Nt(e){return gi(e.pos)||gi(e.end)}function At(e,t,r){switch(e){case 211:return r?0:1;case 221:case 218:case 219:case 217:case 220:case 224:case 226:return 1;case 223:switch(t){case 42:case 63:case 64:case 65:case 67:case 66:case 68:case 69:case 70:case 71:case 72:case 73:case 78:case 74:case 75:case 76:case 77:return 1}}return 0}function Ft(e){return 223===e.kind?e.operatorToken.kind:221===e.kind||222===e.kind?e.operator:e.kind}function Pt(e,t,r){switch(e){case 354:return 0;case 227:return 1;case 226:return 2;case 224:return 4;case 223:switch(t){case 27:return 0;case 63:case 64:case 65:case 67:case 66:case 68:case 69:case 70:case 71:case 72:case 73:case 78:case 74:case 75:case 76:case 77:return 3;default:return wt(t)}case 213:case 232:case 221:case 218:case 219:case 217:case 220:return 16;case 222:return 17;case 210:return 18;case 211:return r?19:18;case 212:case 208:case 209:case 233:return 19;case 231:case 235:return 11;case 108:case 106:case 79:case 80:case 104:case 110:case 95:case 8:case 9:case 10:case 206:case 207:case 215:case 216:case 228:case 13:case 14:case 225:case 214:case 229:case 281:case 282:case 285:return 20;default:return-1}}function wt(e){switch(e){case 60:return 4;case 56:return 5;case 55:return 6;case 51:return 7;case 52:return 8;case 50:return 9;case 34:case 35:case 36:case 37:return 10;case 29:case 31:case 32:case 33:case 102:case 101:case 128:case 150:return 11;case 47:case 48:case 49:return 12;case 39:case 40:return 13;case 41:case 43:case 44:return 14;case 42:return 15}return-1}e.isPartOfTypeNode=ee,e.isChildOfNodeWithKind=function(e,t){for(;e;){if(e.kind===t)return!0;e=e.parent}return!1},e.forEachReturnStatement=function(t,r){return function t(n){switch(n.kind){case 250:return r(n);case 266:case 238:case 242:case 243:case 244:case 245:case 246:case 247:case 251:case 252:case 292:case 293:case 253:case 255:case 295:return e.forEachChild(n,t)}}(t)},e.forEachYieldExpression=function(t,r){return function t(n){switch(n.kind){case 226:r(n);var i=n.expression;return void(i&&t(i));case 263:case 261:case 264:case 262:return;default:if(e.isFunctionLike(n)){if(n.name&&164===n.name.kind)return void t(n.name.expression)}else ee(n)||e.forEachChild(n,t)}}(t)},e.getRestParameterElementType=function(t){return t&&185===t.kind?t.elementType:t&&180===t.kind?e.singleOrUndefined(t.typeArguments):void 0},e.getMembersOfDeclaration=function(e){switch(e.kind){case 261:case 260:case 228:case 184:return e.members;case 207:return e.properties}},e.isVariableLike=te,e.isVariableLikeOrAccessor=function(t){return te(t)||e.isAccessor(t)},e.isVariableDeclarationInVariableStatement=re,e.isCommonJsExportedExpression=function(t){return!!he(t)&&(e.isObjectLiteralExpression(t.parent)&&e.isBinaryExpression(t.parent.parent)&&2===Ie(t.parent.parent)||ne(t.parent))},e.isCommonJsExportPropertyAssignment=ne,e.isValidESSymbolDeclaration=function(t){return(e.isVariableDeclaration(t)?W(t)&&e.isIdentifier(t.name)&&re(t):e.isPropertyDeclaration(t)?Tr(t)&&Sr(t):e.isPropertySignature(t)&&Tr(t))||ne(t)},e.introducesArgumentsExoticObject=function(e){switch(e.kind){case 171:case 170:case 173:case 174:case 175:case 259:case 215:return!0}return!1},e.unwrapInnermostStatementOfLabel=function(e,t){for(;;){if(t&&t(e),253!==e.statement.kind)return e.statement;e=e.statement}},e.isFunctionBlock=function(t){return t&&238===t.kind&&e.isFunctionLike(t.parent)},e.isObjectLiteralMethod=function(e){return e&&171===e.kind&&207===e.parent.kind},e.isObjectLiteralOrClassExpressionMethodOrAccessor=function(e){return!(171!==e.kind&&174!==e.kind&&175!==e.kind||207!==e.parent.kind&&228!==e.parent.kind)},e.isIdentifierTypePredicate=function(e){return e&&1===e.kind},e.isThisTypePredicate=function(e){return e&&0===e.kind},e.getPropertyAssignment=ie,e.getPropertyArrayElementValue=function(t,r,n){return e.firstDefined(ie(t,r),(function(t){return e.isArrayLiteralExpression(t.initializer)?e.find(t.initializer.elements,(function(t){return e.isStringLiteral(t)&&t.text===n})):void 0}))},e.getTsConfigObjectLiteralExpression=ae,e.getTsConfigPropArrayElementValue=function(t,r,n){return e.firstDefined(oe(t,r),(function(t){return e.isArrayLiteralExpression(t.initializer)?e.find(t.initializer.elements,(function(t){return e.isStringLiteral(t)&&t.text===n})):void 0}))},e.getTsConfigPropArray=oe,e.getContainingFunction=function(t){return e.findAncestor(t.parent,e.isFunctionLike)},e.getContainingFunctionDeclaration=function(t){return e.findAncestor(t.parent,e.isFunctionLikeDeclaration)},e.getContainingClass=function(t){return e.findAncestor(t.parent,e.isClassLike)},e.getContainingClassStaticBlock=function(t){return e.findAncestor(t.parent,(function(t){return e.isClassLike(t)||e.isFunctionLike(t)?"quit":e.isClassStaticBlockDeclaration(t)}))},e.getContainingFunctionOrClassStaticBlock=function(t){return e.findAncestor(t.parent,e.isFunctionLikeOrClassStaticBlockDeclaration)},e.getThisContainer=se,e.isThisContainerOrFunctionBlock=function(e){switch(e.kind){case 216:case 259:case 215:case 169:return!0;case 238:switch(e.parent.kind){case 173:case 171:case 174:case 175:return!0;default:return!1}default:return!1}},e.isInTopLevelContext=function(t){e.isIdentifier(t)&&(e.isClassDeclaration(t.parent)||e.isFunctionDeclaration(t.parent))&&t.parent.name===t&&(t=t.parent);var r=se(t,!0);return e.isSourceFile(r)},e.getNewTargetContainer=function(e){var t=se(e,!1);if(t)switch(t.kind){case 173:case 259:case 215:return t}},e.getSuperContainer=function(t,r){for(;;){if(!(t=t.parent))return t;switch(t.kind){case 164:t=t.parent;break;case 259:case 215:case 216:if(!r)continue;case 169:case 168:case 171:case 170:case 173:case 174:case 175:case 172:return t;case 167:166===t.parent.kind&&e.isClassElement(t.parent.parent)?t=t.parent.parent:e.isClassElement(t.parent)&&(t=t.parent)}}},e.getImmediatelyInvokedFunctionExpression=function(e){if(215===e.kind||216===e.kind){for(var t=e,r=e.parent;214===r.kind;)t=r,r=r.parent;if(210===r.kind&&r.expression===t)return r}},e.isSuperOrSuperProperty=function(e){return 106===e.kind||ce(e)},e.isSuperProperty=ce,e.isThisProperty=function(e){var t=e.kind;return(208===t||209===t)&&108===e.expression.kind},e.isThisInitializedDeclaration=function(t){var r;return!!t&&e.isVariableDeclaration(t)&&108===(null===(r=t.initializer)||void 0===r?void 0:r.kind)},e.isThisInitializedObjectBindingExpression=function(t){return!!t&&(e.isShorthandPropertyAssignment(t)||e.isPropertyAssignment(t))&&e.isBinaryExpression(t.parent.parent)&&63===t.parent.parent.operatorToken.kind&&108===t.parent.parent.right.kind},e.getEntityNameFromTypeNode=function(e){switch(e.kind){case 180:return e.typeName;case 230:return zr(e.expression)?e.expression:void 0;case 79:case 163:return e}},e.getInvokedExpression=function(e){switch(e.kind){case 212:return e.tag;case 283:case 282:return e.tagName;default:return e.expression}},e.nodeCanBeDecorated=ue,e.nodeIsDecorated=le,e.nodeOrChildIsDecorated=_e,e.childIsDecorated=de,e.classOrConstructorParameterIsDecorated=function(e){if(le(e))return!0;var t=ur(e);return!!t&&de(t,e)},e.isJSXTagName=pe,e.isExpressionNode=fe,e.isInExpressionContext=ge,e.isPartOfTypeQuery=me,e.isNamespaceReexportDeclaration=function(t){return e.isNamespaceExport(t)&&!!t.parent.moduleSpecifier},e.isExternalModuleImportEqualsDeclaration=ye,e.getExternalModuleImportEqualsDeclarationExpression=function(t){return e.Debug.assert(ye(t)),t.moduleReference.expression},e.getExternalModuleRequireArgument=function(e){return Se(e)&&un(e.initializer).arguments[0]},e.isInternalModuleImportEqualsDeclaration=function(e){return 268===e.kind&&280!==e.moduleReference.kind},e.isSourceFileJS=ve,e.isSourceFileNotJS=function(e){return!he(e)},e.isInJSFile=he,e.isInJsonFile=function(e){return!!e&&!!(67108864&e.flags)},e.isSourceFileNotJson=function(e){return!q(e)},e.isInJSDoc=be,e.isJSDocIndexSignature=function(t){return e.isTypeReferenceNode(t)&&e.isIdentifier(t.typeName)&&"Object"===t.typeName.escapedText&&t.typeArguments&&2===t.typeArguments.length&&(152===t.typeArguments[0].kind||148===t.typeArguments[0].kind)},e.isRequireCall=xe,e.isVariableDeclarationInitializedToRequire=De,e.isVariableDeclarationInitializedToBareOrAccessedRequire=Se,e.isRequireVariableStatement=function(t){return e.isVariableStatement(t)&&t.declarationList.declarations.length>0&&e.every(t.declarationList.declarations,(function(e){return De(e)}))},e.isSingleOrDoubleQuote=function(e){return 39===e||34===e},e.isStringDoubleQuoted=function(e,t){return 34===b(t,e).charCodeAt(0)},e.isAssignmentDeclaration=Ce,e.getEffectiveInitializer=Ee,e.getDeclaredExpandoInitializer=function(e){var t=Ee(e);return t&&ke(t,Kr(e.name))},e.getAssignedExpandoInitializer=function(t){if(t&&t.parent&&e.isBinaryExpression(t.parent)&&63===t.parent.operatorToken.kind){var r=Kr(t.parent.left);return ke(t.parent.right,r)||function(t,r,n){var i=e.isBinaryExpression(r)&&(56===r.operatorToken.kind||60===r.operatorToken.kind)&&ke(r.right,n);if(i&&Ne(t,r.left))return i}(t.parent.left,t.parent.right,r)}if(t&&e.isCallExpression(t)&&Oe(t)){var n=function(t,r){return e.forEach(t.properties,(function(t){return e.isPropertyAssignment(t)&&e.isIdentifier(t.name)&&"value"===t.name.escapedText&&t.initializer&&ke(t.initializer,r)}))}(t.arguments[2],"prototype"===t.arguments[1].text);if(n)return n}},e.getExpandoInitializer=ke,e.isDefaultedExpandoInitializer=function(t){var r=e.isVariableDeclaration(t.parent)?t.parent.name:e.isBinaryExpression(t.parent)&&63===t.parent.operatorToken.kind?t.parent.left:void 0;return r&&ke(t.right,Kr(r))&&zr(r)&&Ne(r,t.left)},e.getNameOfExpando=function(t){if(e.isBinaryExpression(t.parent)){var r=56!==t.parent.operatorToken.kind&&60!==t.parent.operatorToken.kind||!e.isBinaryExpression(t.parent.parent)?t.parent:t.parent.parent;if(63===r.operatorToken.kind&&e.isIdentifier(r.left))return r.left}else if(e.isVariableDeclaration(t.parent))return t.parent.name},e.isSameEntityName=Ne,e.getRightMostAssignedExpression=Ae,e.isExportsIdentifier=Fe,e.isModuleIdentifier=Pe,e.isModuleExportsAccessExpression=we,e.getAssignmentDeclarationKind=Ie,e.isBindableObjectDefinePropertyCall=Oe,e.isLiteralLikeAccess=Me,e.isLiteralLikeElementAccess=Le,e.isBindableStaticAccessExpression=Re,e.isBindableStaticElementAccessExpression=Be,e.isBindableStaticNameExpression=je,e.getNameOrArgument=Je,e.getElementOrPropertyAccessArgumentExpressionOrName=ze,e.getElementOrPropertyAccessName=Ue,e.getAssignmentDeclarationPropertyAccessKind=Ke,e.getInitializerOfBinaryExpression=Ve,e.isPrototypePropertyAssignment=function(t){return e.isBinaryExpression(t)&&3===Ie(t)},e.isSpecialPropertyDeclaration=function(t){return he(t)&&t.parent&&241===t.parent.kind&&(!e.isElementAccessExpression(t)||Le(t))&&!!e.getJSDocTypeTag(t.parent)},e.setValueDeclaration=function(e,t){var r=e.valueDeclaration;(!r||(!(16777216&t.flags)||16777216&r.flags)&&Ce(r)&&!Ce(t)||r.kind!==t.kind&&k(r))&&(e.valueDeclaration=t)},e.isFunctionSymbol=function(t){if(!t||!t.valueDeclaration)return!1;var r=t.valueDeclaration;return 259===r.kind||e.isVariableDeclaration(r)&&r.initializer&&e.isFunctionLike(r.initializer)},e.tryGetModuleSpecifierFromDeclaration=function(t){var r,n;switch(t.kind){case 257:return null===(r=e.findAncestor(t.initializer,(function(e){return xe(e,!0)})))||void 0===r?void 0:r.arguments[0];case 269:return e.tryCast(t.moduleSpecifier,e.isStringLiteralLike);case 268:return e.tryCast(null===(n=e.tryCast(t.moduleReference,e.isExternalModuleReference))||void 0===n?void 0:n.expression,e.isStringLiteralLike);default:e.Debug.assertNever(t)}},e.importFromModuleSpecifier=function(t){return qe(t)||e.Debug.failBadSyntaxKind(t.parent)},e.tryGetImportFromModuleSpecifier=qe,e.getExternalModuleName=We,e.getNamespaceDeclarationNode=function(t){switch(t.kind){case 269:return t.importClause&&e.tryCast(t.importClause.namedBindings,e.isNamespaceImport);case 268:return t;case 275:return t.exportClause&&e.tryCast(t.exportClause,e.isNamespaceExport);default:return e.Debug.assertNever(t)}},e.isDefaultImport=function(e){return 269===e.kind&&!!e.importClause&&!!e.importClause.name},e.forEachImportClauseDeclaration=function(t,r){var n;if(t.name&&(n=r(t)))return n;if(t.namedBindings&&(n=e.isNamespaceImport(t.namedBindings)?r(t.namedBindings):e.forEach(t.namedBindings.elements,r)))return n},e.hasQuestionToken=function(e){if(e)switch(e.kind){case 166:case 171:case 170:case 300:case 299:case 169:case 168:return void 0!==e.questionToken}return!1},e.isJSDocConstructSignature=function(t){var r=e.isJSDocFunctionType(t)?e.firstOrUndefined(t.parameters):void 0,n=e.tryCast(r&&r.name,e.isIdentifier);return!!n&&"new"===n.escapedText},e.isJSDocTypeAlias=He,e.isTypeAlias=function(t){return He(t)||e.isTypeAliasDeclaration(t)},e.getSingleInitializerOfVariableStatementOrPropertyDeclaration=Qe,e.getSingleVariableOfVariableStatement=Xe,e.getJSDocCommentsAndTags=function(t,r){var n;te(t)&&e.hasInitializer(t)&&e.hasJSDocNodes(t.initializer)&&(n=e.addRange(n,Ze(t,e.last(t.initializer.jsDoc))));for(var i=t;i&&i.parent;){if(e.hasJSDocNodes(i)&&(n=e.addRange(n,Ze(t,e.last(i.jsDoc)))),166===i.kind){n=e.addRange(n,(r?e.getJSDocParameterTagsNoCache:e.getJSDocParameterTags)(i));break}if(165===i.kind){n=e.addRange(n,(r?e.getJSDocTypeParameterTagsNoCache:e.getJSDocTypeParameterTags)(i));break}i=et(i)}return n||e.emptyArray},e.getNextJSDocCommentLocation=et,e.getParameterSymbolFromJSDoc=function(t){if(t.symbol)return t.symbol;if(e.isIdentifier(t.name)){var r=t.name.escapedText,n=tt(t);if(n){var i=e.find(n.parameters,(function(e){return 79===e.name.kind&&e.name.escapedText===r}));return i&&i.symbol}}},e.getEffectiveContainerForJSDocTemplateTag=function(t){if(e.isJSDoc(t.parent)&&t.parent.tags){var r=e.find(t.parent.tags,He);if(r)return r}return tt(t)},e.getHostSignatureFromJSDoc=tt,e.getEffectiveJSDocHost=rt,e.getJSDocHost=nt,e.getJSDocRoot=it,e.getTypeParameterFromJsDoc=function(t){var r=t.name.escapedText,n=t.parent.parent.parent.typeParameters;return n&&e.find(n,(function(e){return e.name.escapedText===r}))},e.hasTypeArguments=function(e){return!!e.typeArguments},function(e){e[e.None=0]="None",e[e.Definite=1]="Definite",e[e.Compound=2]="Compound"}(e.AssignmentKind||(e.AssignmentKind={})),e.getAssignmentTargetKind=at,e.isAssignmentTarget=function(e){return 0!==at(e)},e.isNodeWithPossibleHoistedDeclaration=function(e){switch(e.kind){case 238:case 240:case 251:case 242:case 252:case 266:case 292:case 293:case 253:case 245:case 246:case 247:case 243:case 244:case 255:case 295:return!0}return!1},e.isValueSignatureDeclaration=function(t){return e.isFunctionExpression(t)||e.isArrowFunction(t)||e.isMethodOrAccessor(t)||e.isFunctionDeclaration(t)||e.isConstructorDeclaration(t)},e.walkUpParenthesizedTypes=function(e){return ot(e,193)},e.walkUpParenthesizedExpressions=st,e.walkUpParenthesizedTypesAndGetParentAndChild=function(e){for(var t;e&&193===e.kind;)t=e,e=e.parent;return[t,e]},e.skipTypeParentheses=function(t){for(;e.isParenthesizedTypeNode(t);)t=t.type;return t},e.skipParentheses=ct,e.isDeleteTarget=function(e){return(208===e.kind||209===e.kind)&&((e=st(e.parent))&&217===e.kind)},e.isNodeDescendantOf=function(e,t){for(;e;){if(e===t)return!0;e=e.parent}return!1},e.isDeclarationName=function(t){return!e.isSourceFile(t)&&!e.isBindingPattern(t)&&e.isDeclaration(t.parent)&&t.parent.name===t},e.getDeclarationFromName=function(t){var r=t.parent;switch(t.kind){case 10:case 14:case 8:if(e.isComputedPropertyName(r))return r.parent;case 79:if(e.isDeclaration(r))return r.name===t?r:void 0;if(e.isQualifiedName(r)){var n=r.parent;return e.isJSDocParameterTag(n)&&n.name===r?n:void 0}var i=r.parent;return e.isBinaryExpression(i)&&0!==Ie(i)&&(i.left.symbol||i.symbol)&&e.getNameOfDeclaration(i)===t?i:void 0;case 80:return e.isDeclaration(r)&&r.name===t?r:void 0;default:return}},e.isLiteralComputedPropertyDeclarationName=function(t){return bt(t)&&164===t.parent.kind&&e.isDeclaration(t.parent.parent)},e.isIdentifierName=function(e){var t=e.parent;switch(t.kind){case 169:case 168:case 171:case 170:case 174:case 175:case 302:case 299:case 208:return t.name===e;case 163:return t.right===e;case 205:case 273:return t.propertyName===e;case 278:case 288:case 282:case 283:case 284:return!0}return!1},e.isAliasSymbolDeclaration=function(t){return!!(268===t.kind||267===t.kind||270===t.kind&&t.name||271===t.kind||277===t.kind||273===t.kind||278===t.kind||274===t.kind&&lt(t))||he(t)&&(e.isBinaryExpression(t)&&2===Ie(t)&&lt(t)||e.isPropertyAccessExpression(t)&&e.isBinaryExpression(t.parent)&&t.parent.left===t&&63===t.parent.operatorToken.kind&&ut(t.parent.right))},e.getAliasDeclarationFromName=function e(t){switch(t.parent.kind){case 270:case 273:case 271:case 278:case 274:case 268:case 277:return t.parent;case 163:do{t=t.parent}while(163===t.parent.kind);return e(t)}},e.isAliasableExpression=ut,e.exportAssignmentIsAlias=lt,e.getExportAssignmentExpression=_t,e.getPropertyAssignmentAliasLikeExpression=function(e){return 300===e.kind?e.name:299===e.kind?e.initializer:e.parent.right},e.getEffectiveBaseTypeNode=dt,e.getClassExtendsHeritageElement=pt,e.getEffectiveImplementsTypeNodes=ft,e.getAllSuperTypeNodes=function(t){return e.isInterfaceDeclaration(t)?gt(t)||e.emptyArray:e.isClassLike(t)&&e.concatenate(e.singleElementArray(dt(t)),ft(t))||e.emptyArray},e.getInterfaceBaseTypeNodes=gt,e.getHeritageClause=mt,e.getAncestor=function(e,t){for(;e;){if(e.kind===t)return e;e=e.parent}},e.isKeyword=yt,e.isContextualKeyword=vt,e.isNonContextualKeyword=ht,e.isFutureReservedKeyword=function(e){return 117<=e&&e<=125},e.isStringANonContextualKeyword=function(t){var r=e.stringToToken(t);return void 0!==r&&ht(r)},e.isStringAKeyword=function(t){var r=e.stringToToken(t);return void 0!==r&&yt(r)},e.isIdentifierANonContextualKeyword=function(e){var t=e.originalKeywordKind;return!!t&&!vt(t)},e.isTrivia=function(e){return 2<=e&&e<=7},function(e){e[e.Normal=0]="Normal",e[e.Generator=1]="Generator",e[e.Async=2]="Async",e[e.Invalid=4]="Invalid",e[e.AsyncGenerator=3]="AsyncGenerator"}(e.FunctionFlags||(e.FunctionFlags={})),e.getFunctionFlags=function(e){if(!e)return 4;var t=0;switch(e.kind){case 259:case 215:case 171:e.asteriskToken&&(t|=1);case 216:xr(e,512)&&(t|=2)}return e.body||(t|=4),t},e.isAsyncFunction=function(e){switch(e.kind){case 259:case 215:case 216:case 171:return void 0!==e.body&&void 0===e.asteriskToken&&xr(e,512)}return!1},e.isStringOrNumericLiteralLike=bt,e.isSignedNumericLiteral=xt,e.hasDynamicName=Dt,e.isDynamicName=St,e.getPropertyNameForPropertyNameNode=Tt,e.isPropertyNameLiteral=Ct,e.getTextOfIdentifierOrLiteral=Et,e.getEscapedTextOfIdentifierOrLiteral=function(t){return e.isMemberName(t)?t.escapedText:e.escapeLeadingUnderscores(t.text)},e.getPropertyNameForUniqueESSymbol=function(t){return"__@".concat(e.getSymbolId(t),"@").concat(t.escapedName)},e.getSymbolNameForPrivateIdentifier=function(t,r){return"__#".concat(e.getSymbolId(t),"@").concat(r)},e.isKnownSymbol=function(t){return e.startsWith(t.escapedName,"__@")},e.isPrivateIdentifierSymbol=function(t){return e.startsWith(t.escapedName,"__#")},e.isESSymbolIdentifier=function(e){return 79===e.kind&&"Symbol"===e.escapedText},e.isPushOrUnshiftIdentifier=function(e){return"push"===e.escapedText||"unshift"===e.escapedText},e.isParameterDeclaration=function(e){return 166===kt(e).kind},e.getRootDeclaration=kt,e.nodeStartsNewLexicalEnvironment=function(e){var t=e.kind;return 173===t||215===t||259===t||216===t||171===t||174===t||175===t||264===t||308===t},e.nodeIsSynthesized=Nt,e.getOriginalSourceFile=function(t){return e.getParseTreeNode(t,e.isSourceFile)||t},function(e){e[e.Left=0]="Left",e[e.Right=1]="Right"}(e.Associativity||(e.Associativity={})),e.getExpressionAssociativity=function(e){var t=Ft(e),r=211===e.kind&&void 0!==e.arguments;return At(e.kind,t,r)},e.getOperatorAssociativity=At,e.getExpressionPrecedence=function(e){var t=Ft(e),r=211===e.kind&&void 0!==e.arguments;return Pt(e.kind,t,r)},e.getOperator=Ft,function(e){e[e.Comma=0]="Comma",e[e.Spread=1]="Spread",e[e.Yield=2]="Yield",e[e.Assignment=3]="Assignment",e[e.Conditional=4]="Conditional",e[e.Coalesce=4]="Coalesce",e[e.LogicalOR=5]="LogicalOR",e[e.LogicalAND=6]="LogicalAND",e[e.BitwiseOR=7]="BitwiseOR",e[e.BitwiseXOR=8]="BitwiseXOR",e[e.BitwiseAND=9]="BitwiseAND",e[e.Equality=10]="Equality",e[e.Relational=11]="Relational",e[e.Shift=12]="Shift",e[e.Additive=13]="Additive",e[e.Multiplicative=14]="Multiplicative",e[e.Exponentiation=15]="Exponentiation",e[e.Unary=16]="Unary",e[e.Update=17]="Update",e[e.LeftHandSide=18]="LeftHandSide",e[e.Member=19]="Member",e[e.Primary=20]="Primary",e[e.Highest=20]="Highest",e[e.Lowest=0]="Lowest",e[e.Invalid=-1]="Invalid"}(e.OperatorPrecedence||(e.OperatorPrecedence={})),e.getOperatorPrecedence=Pt,e.getBinaryOperatorPrecedence=wt,e.getSemanticJsxChildren=function(t){return e.filter(t,(function(e){switch(e.kind){case 291:return!!e.expression;case 11:return!e.containsOnlyTriviaWhiteSpaces;default:return!0}}))},e.createDiagnosticCollection=function(){var t=[],r=[],n=new e.Map,i=!1;return{add:function(a){var o;a.file?(o=n.get(a.file.fileName))||(o=[],n.set(a.file.fileName,o),e.insertSorted(r,a.file.fileName,e.compareStringsCaseSensitive)):(i&&(i=!1,t=t.slice()),o=t);e.insertSorted(o,a,Cn)},lookup:function(r){var i;i=r.file?n.get(r.file.fileName):t;if(!i)return;var a=e.binarySearch(i,r,e.identity,Cn);if(a>=0)return i[a];return},getGlobalDiagnostics:function(){return i=!0,t},getDiagnostics:function(i){if(i)return n.get(i)||[];var a=e.flatMapToMutable(r,(function(e){return n.get(e)}));if(!t.length)return a;return a.unshift.apply(a,t),a}}};var It=/\$\{/g;e.hasInvalidEscape=function(t){return t&&!!(e.isNoSubstitutionTemplateLiteral(t)?t.templateFlags:t.head.templateFlags||e.some(t.templateSpans,(function(e){return!!e.literal.templateFlags})))};var Ot=/[\\\"\u0000-\u001f\t\v\f\b\r\n\u2028\u2029\u0085]/g,Mt=/[\\\'\u0000-\u001f\t\v\f\b\r\n\u2028\u2029\u0085]/g,Lt=/\r\n|[\\\`\u0000-\u001f\t\v\f\b\r\u2028\u2029\u0085]/g,Rt=new e.Map(e.getEntries({"\t":"\\t","\v":"\\v","\f":"\\f","\b":"\\b","\r":"\\r","\n":"\\n","\\":"\\\\",'"':'\\"',"'":"\\'","`":"\\`","\u2028":"\\u2028","\u2029":"\\u2029","\x85":"\\u0085","\r\n":"\\r\\n"}));function Bt(e){return"\\u"+("0000"+e.toString(16).toUpperCase()).slice(-4)}function jt(e,t,r){if(0===e.charCodeAt(0)){var n=r.charCodeAt(t+e.length);return n>=48&&n<=57?"\\x00":"\\0"}return Rt.get(e)||Bt(e.charCodeAt(0))}function Jt(e,t){var r=96===t?Lt:39===t?Mt:Ot;return e.replace(r,jt)}e.escapeString=Jt;var zt=/[^\u0000-\u007F]/g;function Ut(e,t){return e=Jt(e,t),zt.test(e)?e.replace(zt,(function(e){return Bt(e.charCodeAt(0))})):e}e.escapeNonAsciiString=Ut;var Kt=/[\"\u0000-\u001f\u2028\u2029\u0085]/g,Vt=/[\'\u0000-\u001f\u2028\u2029\u0085]/g,qt=new e.Map(e.getEntries({'"':"&quot;","'":"&apos;"}));function Wt(e){return 0===e.charCodeAt(0)?"&#0;":qt.get(e)||"&#x"+e.charCodeAt(0).toString(16).toUpperCase()+";"}function Ht(e,t){var r=39===t?Vt:Kt;return e.replace(r,Wt)}e.escapeJsxAttributeString=Ht,e.stripQuotes=function(e){var t,r=e.length;return r>=2&&e.charCodeAt(0)===e.charCodeAt(r-1)&&(39===(t=e.charCodeAt(0))||34===t||96===t)?e.substring(1,r-1):e},e.isIntrinsicJsxName=function(t){var r=t.charCodeAt(0);return r>=97&&r<=122||e.stringContains(t,"-")||e.stringContains(t,":")};var Gt=["","    "];function Qt(e){for(var t=Gt[1],r=Gt.length;r<=e;r++)Gt.push(Gt[r-1]+t);return Gt[e]}function Xt(){return Gt[1].length}function Yt(e){return!!e.useCaseSensitiveFileNames&&e.useCaseSensitiveFileNames()}function Zt(e,t,r){return t.moduleName||er(e,t.fileName,r&&r.fileName)}function $t(t,r){return t.getCanonicalFileName(e.getNormalizedAbsolutePath(r,t.getCurrentDirectory()))}function er(t,r,n){var i=function(e){return t.getCanonicalFileName(e)},a=e.toPath(n?e.getDirectoryPath(n):t.getCommonSourceDirectory(),t.getCurrentDirectory(),i),o=e.getNormalizedAbsolutePath(r,t.getCurrentDirectory()),s=_i(e.getRelativePathToDirectoryOrUrl(a,o,a,i,!1));return n?e.ensurePathIsNonModuleName(s):s}function tr(e,t,r,n,i){var a=t.declarationDir||t.outDir,o=a?or(e,a,r,n,i):e,s=rr(o);return _i(o)+s}function rr(t){return e.fileExtensionIsOneOf(t,[".mjs",".mts"])?".d.mts":e.fileExtensionIsOneOf(t,[".cjs",".cts"])?".d.cts":e.fileExtensionIsOneOf(t,[".json"])?".json.d.ts":".d.ts"}function nr(e){return e.outFile||e.out}function ir(e,t,r){return!(t.getCompilerOptions().noEmitForJsFiles&&ve(e))&&!e.isDeclarationFile&&!t.isSourceFileFromExternalLibrary(e)&&(r||!(q(e)&&t.getResolvedProjectReferenceToRedirect(e.fileName))&&!t.isSourceOfProjectReferenceRedirect(e.fileName))}function ar(e,t,r){return or(e,r,t.getCurrentDirectory(),t.getCommonSourceDirectory(),(function(e){return t.getCanonicalFileName(e)}))}function or(t,r,n,i,a){var o=e.getNormalizedAbsolutePath(t,n);return o=0===a(o).indexOf(a(i))?o.substring(i.length):o,e.combinePaths(r,o)}function sr(t,r,n){t.length>e.getRootLength(t)&&!n(t)&&(sr(e.getDirectoryPath(t),r,n),r(t))}function cr(t,r){return e.computeLineOfPosition(t,r)}function ur(t){return e.find(t.members,(function(t){return e.isConstructorDeclaration(t)&&f(t.body)}))}function lr(e){if(e&&e.parameters.length>0){var t=2===e.parameters.length&&_r(e.parameters[0]);return e.parameters[t?1:0]}}function _r(e){return dr(e.name)}function dr(e){return!!e&&79===e.kind&&pr(e)}function pr(e){return 108===e.originalKeywordKind}function fr(t){if(he(t)||!e.isFunctionDeclaration(t)){var r=t.type;return r||!he(t)?r:e.isJSDocPropertyLikeTag(t)?t.typeExpression&&t.typeExpression.type:e.getJSDocType(t)}}function gr(e,t,r,n){mr(e,t,r.pos,n)}function mr(e,t,r,n){n&&n.length&&r!==n[0].pos&&cr(e,r)!==cr(e,n[0].pos)&&t.writeLine()}function yr(e,t,r,n,i,a,o,s){if(n&&n.length>0){i&&r.writeSpace(" ");for(var c=!1,u=0,l=n;u<l.length;u++){var _=l[u];c&&(r.writeSpace(" "),c=!1),s(e,t,r,_.pos,_.end,o),_.hasTrailingNewLine?r.writeLine():c=!0}c&&a&&r.writeSpace(" ")}}function vr(t,r,n,i,a,o){var s=Math.min(r,o-1),c=e.trimString(t.substring(a,s));c?(n.writeComment(c),s!==r&&n.writeLine()):n.rawWrite(i)}function hr(t,r,n){for(var i=0;r<n&&e.isWhiteSpaceSingleLine(t.charCodeAt(r));r++)9===t.charCodeAt(r)?i+=Xt()-i%Xt():i++;return i}function br(e,t){return!!Er(e,t)}function xr(e,t){return!!kr(e,t)}function Dr(t){return e.isClassElement(t)&&Sr(t)||e.isClassStaticBlockDeclaration(t)}function Sr(e){return xr(e,32)}function Tr(e){return br(e,64)}function Cr(e){return xr(e,131072)}function Er(e,t){return Ar(e)&t}function kr(e,t){return Fr(e)&t}function Nr(e,t,r){return e.kind>=0&&e.kind<=162?0:(536870912&e.modifierFlagsCache||(e.modifierFlagsCache=536870912|wr(e)),!t||4096&e.modifierFlagsCache||!r&&!he(e)||!e.parent||(e.modifierFlagsCache|=4096|Pr(e)),-536875009&e.modifierFlagsCache)}function Ar(e){return Nr(e,!0)}function Fr(e){return Nr(e,!1)}function Pr(t){var r=0;return t.parent&&!e.isParameter(t)&&(he(t)&&(e.getJSDocPublicTagNoCache(t)&&(r|=4),e.getJSDocPrivateTagNoCache(t)&&(r|=8),e.getJSDocProtectedTagNoCache(t)&&(r|=16),e.getJSDocReadonlyTagNoCache(t)&&(r|=64),e.getJSDocOverrideTagNoCache(t)&&(r|=16384)),e.getJSDocDeprecatedTagNoCache(t)&&(r|=8192)),r}function wr(t){var r=e.canHaveModifiers(t)?Ir(t.modifiers):0;return(4&t.flags||79===t.kind&&t.isInJSDocNamespace)&&(r|=1),r}function Ir(e){var t=0;if(e)for(var r=0,n=e;r<n.length;r++){t|=Or(n[r].kind)}return t}function Or(e){switch(e){case 124:return 32;case 123:return 4;case 122:return 16;case 121:return 8;case 126:return 256;case 127:return 128;case 93:return 1;case 136:return 2;case 85:return 2048;case 88:return 1024;case 132:return 512;case 146:return 64;case 161:return 16384;case 101:return 32768;case 145:return 65536;case 167:return 131072}return 0}function Mr(e){return 75===e||76===e||77===e}function Lr(e){return e>=63&&e<=78}function Rr(e){var t=Br(e);return t&&!t.isImplements?t.class:void 0}function Br(t){return e.isExpressionWithTypeArguments(t)&&e.isHeritageClause(t.parent)&&e.isClassLike(t.parent.parent)?{class:t.parent.parent,isImplements:117===t.parent.token}:void 0}function jr(t,r){return e.isBinaryExpression(t)&&(r?63===t.operatorToken.kind:Lr(t.operatorToken.kind))&&e.isLeftHandSideExpression(t.left)}function Jr(e){return void 0!==Rr(e)}function zr(e){return 79===e.kind||Ur(e)}function Ur(t){return e.isPropertyAccessExpression(t)&&e.isIdentifier(t.name)&&zr(t.expression)}function Kr(e){return Re(e)&&"prototype"===Ue(e)}function Vr(t){return e.isPropertyAccessExpression(t.parent)&&t.parent.name===t||e.isElementAccessExpression(t.parent)&&t.parent.argumentExpression===t}e.getIndentString=Qt,e.getIndentSize=Xt,e.isNightly=function(){return e.stringContains(e.version,"-dev")||e.stringContains(e.version,"-insiders")},e.createTextWriter=function(t){var r,n,i,a,o,s=!1;function c(t){var n=e.computeLineStarts(t);n.length>1?(a=a+n.length-1,o=r.length-t.length+e.last(n),i=o-r.length==0):i=!1}function u(e){e&&e.length&&(i&&(e=Qt(n)+e,i=!1),r+=e,c(e))}function l(e){e&&(s=!1),u(e)}function _(){r="",n=0,i=!0,a=0,o=0,s=!1}return _(),{write:l,rawWrite:function(e){void 0!==e&&(r+=e,c(e),s=!1)},writeLiteral:function(e){e&&e.length&&l(e)},writeLine:function(e){i&&!e||(a++,o=(r+=t).length,i=!0,s=!1)},increaseIndent:function(){n++},decreaseIndent:function(){n--},getIndent:function(){return n},getTextPos:function(){return r.length},getLine:function(){return a},getColumn:function(){return i?n*Xt():r.length-o},getText:function(){return r},isAtStartOfLine:function(){return i},hasTrailingComment:function(){return s},hasTrailingWhitespace:function(){return!!r.length&&e.isWhiteSpaceLike(r.charCodeAt(r.length-1))},clear:_,reportInaccessibleThisError:e.noop,reportPrivateInBaseOfClassExpression:e.noop,reportInaccessibleUniqueSymbolError:e.noop,trackSymbol:function(){return!1},writeKeyword:l,writeOperator:l,writeParameter:l,writeProperty:l,writePunctuation:l,writeSpace:l,writeStringLiteral:l,writeSymbol:function(e,t){return l(e)},writeTrailingSemicolon:l,writeComment:function(e){e&&(s=!0),u(e)},getTextPosWithWriteLine:function(){return i?r.length:r.length+t.length}}},e.getTrailingSemicolonDeferringWriter=function(e){var t=!1;function r(){t&&(e.writeTrailingSemicolon(";"),t=!1)}return o(o({},e),{writeTrailingSemicolon:function(){t=!0},writeLiteral:function(t){r(),e.writeLiteral(t)},writeStringLiteral:function(t){r(),e.writeStringLiteral(t)},writeSymbol:function(t,n){r(),e.writeSymbol(t,n)},writePunctuation:function(t){r(),e.writePunctuation(t)},writeKeyword:function(t){r(),e.writeKeyword(t)},writeOperator:function(t){r(),e.writeOperator(t)},writeParameter:function(t){r(),e.writeParameter(t)},writeSpace:function(t){r(),e.writeSpace(t)},writeProperty:function(t){r(),e.writeProperty(t)},writeComment:function(t){r(),e.writeComment(t)},writeLine:function(){r(),e.writeLine()},increaseIndent:function(){r(),e.increaseIndent()},decreaseIndent:function(){r(),e.decreaseIndent()}})},e.hostUsesCaseSensitiveFileNames=Yt,e.hostGetCanonicalFileName=function(t){return e.createGetCanonicalFileName(Yt(t))},e.getResolvedExternalModuleName=Zt,e.getExternalModuleNameFromDeclaration=function(t,r,n){var i=r.getExternalModuleFileFromDeclaration(n);if(i&&!i.isDeclarationFile){var a=We(n);if(!a||!e.isStringLiteralLike(a)||e.pathIsRelative(a.text)||-1!==$t(t,i.path).indexOf($t(t,e.ensureTrailingDirectorySeparator(t.getCommonSourceDirectory()))))return Zt(t,i)}},e.getExternalModuleNameFromPath=er,e.getOwnEmitOutputFilePath=function(e,t,r){var n=t.getCompilerOptions();return(n.outDir?_i(ar(e,t,n.outDir)):_i(e))+r},e.getDeclarationEmitOutputFilePath=function(e,t){return tr(e,t.getCompilerOptions(),t.getCurrentDirectory(),t.getCommonSourceDirectory(),(function(e){return t.getCanonicalFileName(e)}))},e.getDeclarationEmitOutputFilePathWorker=tr,e.getDeclarationEmitExtensionForPath=rr,e.getPossibleOriginalInputExtensionForExtension=function(t){return e.fileExtensionIsOneOf(t,[".d.mts",".mjs",".mts"])?[".mts",".mjs"]:e.fileExtensionIsOneOf(t,[".d.cts",".cjs",".cts"])?[".cts",".cjs"]:e.fileExtensionIsOneOf(t,[".json.d.ts"])?[".json"]:[".tsx",".ts",".jsx",".js"]},e.outFile=nr,e.getPathsBasePath=function(t,r){var n,i;if(t.paths)return null!==(n=t.baseUrl)&&void 0!==n?n:e.Debug.checkDefined(t.pathsBasePath||(null===(i=r.getCurrentDirectory)||void 0===i?void 0:i.call(r)),"Encountered 'paths' without a 'baseUrl', config file, or host 'getCurrentDirectory'.")},e.getSourceFilesToEmit=function(t,r,n){var i=t.getCompilerOptions();if(nr(i)){var a=Pn(i),o=i.emitDeclarationOnly||a===e.ModuleKind.AMD||a===e.ModuleKind.System;return e.filter(t.getSourceFiles(),(function(r){return(o||!e.isExternalModule(r))&&ir(r,t,n)}))}var s=void 0===r?t.getSourceFiles():[r];return e.filter(s,(function(e){return ir(e,t,n)}))},e.sourceFileMayBeEmitted=ir,e.getSourceFilePathInNewDir=ar,e.getSourceFilePathInNewDirWorker=or,e.writeFile=function(t,r,n,i,a,o,s){t.writeFile(n,i,a,(function(t){r.add(Dn(e.Diagnostics.Could_not_write_file_0_Colon_1,n,t))}),o,s)},e.writeFileEnsuringDirectories=function(t,r,n,i,a,o){try{i(t,r,n)}catch(s){sr(e.getDirectoryPath(e.normalizePath(t)),a,o),i(t,r,n)}},e.getLineOfLocalPosition=function(t,r){var n=e.getLineStarts(t);return e.computeLineOfPosition(n,r)},e.getLineOfLocalPositionFromLineMap=cr,e.getFirstConstructorWithBody=ur,e.getSetAccessorValueParameter=lr,e.getSetAccessorTypeAnnotationNode=function(e){var t=lr(e);return t&&t.type},e.getThisParameter=function(t){if(t.parameters.length&&!e.isJSDocSignature(t)){var r=t.parameters[0];if(_r(r))return r}},e.parameterIsThisKeyword=_r,e.isThisIdentifier=dr,e.isThisInTypeQuery=function(t){if(!dr(t))return!1;for(;e.isQualifiedName(t.parent)&&t.parent.left===t;)t=t.parent;return 183===t.parent.kind},e.identifierIsThisKeyword=pr,e.getAllAccessorDeclarations=function(t,r){var n,i,a,o;return Dt(r)?(n=r,174===r.kind?a=r:175===r.kind?o=r:e.Debug.fail("Accessor has wrong kind")):e.forEach(t,(function(t){e.isAccessor(t)&&Dr(t)===Dr(r)&&(Tt(t.name)===Tt(r.name)&&(n?i||(i=t):n=t,174!==t.kind||a||(a=t),175!==t.kind||o||(o=t)))})),{firstAccessor:n,secondAccessor:i,getAccessor:a,setAccessor:o}},e.getEffectiveTypeAnnotationNode=fr,e.getTypeAnnotationNode=function(e){return e.type},e.getEffectiveReturnTypeNode=function(t){return e.isJSDocSignature(t)?t.type&&t.type.typeExpression&&t.type.typeExpression.type:t.type||(he(t)?e.getJSDocReturnType(t):void 0)},e.getJSDocTypeParameterDeclarations=function(t){return e.flatMap(e.getJSDocTags(t),(function(t){return function(t){return e.isJSDocTemplateTag(t)&&!(323===t.parent.kind&&t.parent.tags.some(He))}(t)?t.typeParameters:void 0}))},e.getEffectiveSetAccessorTypeAnnotationNode=function(e){var t=lr(e);return t&&fr(t)},e.emitNewLineBeforeLeadingComments=gr,e.emitNewLineBeforeLeadingCommentsOfPosition=mr,e.emitNewLineBeforeLeadingCommentOfPosition=function(e,t,r,n){r!==n&&cr(e,r)!==cr(e,n)&&t.writeLine()},e.emitComments=yr,e.emitDetachedComments=function(t,r,n,i,a,o,s){var c,u;if(s?0===a.pos&&(c=e.filter(e.getLeadingCommentRanges(t,a.pos),(function(e){return v(t,e.pos)}))):c=e.getLeadingCommentRanges(t,a.pos),c){for(var l=[],_=void 0,d=0,p=c;d<p.length;d++){var f=p[d];if(_){var g=cr(r,_.end);if(cr(r,f.pos)>=g+2)break}l.push(f),_=f}if(l.length){g=cr(r,e.last(l).end);cr(r,e.skipTrivia(t,a.pos))>=g+2&&(gr(r,n,a,c),yr(t,r,n,l,!1,!0,o,i),u={nodePos:a.pos,detachedCommentEndPos:e.last(l).end})}}return u},e.writeCommentRange=function(t,r,n,i,a,o){if(42===t.charCodeAt(i+1))for(var s=e.computeLineAndCharacterOfPosition(r,i),c=r.length,u=void 0,l=i,_=s.line;l<a;_++){var d=_+1===c?t.length+1:r[_+1];if(l!==i){void 0===u&&(u=hr(t,r[s.line],i));var p=n.getIndent()*Xt()-u+hr(t,l,d);if(p>0){var f=p%Xt(),g=Qt((p-f)/Xt());for(n.rawWrite(g);f;)n.rawWrite(" "),f--}else n.rawWrite("")}vr(t,a,n,o,l,d),l=d}else n.writeComment(t.substring(i,a))},e.hasEffectiveModifiers=function(e){return 0!==Ar(e)},e.hasSyntacticModifiers=function(e){return 0!==Fr(e)},e.hasEffectiveModifier=br,e.hasSyntacticModifier=xr,e.isStatic=Dr,e.hasStaticModifier=Sr,e.hasOverrideModifier=function(e){return br(e,16384)},e.hasAbstractModifier=function(e){return xr(e,256)},e.hasAmbientModifier=function(e){return xr(e,2)},e.hasAccessorModifier=function(e){return xr(e,128)},e.hasEffectiveReadonlyModifier=Tr,e.hasDecorators=Cr,e.getSelectedEffectiveModifierFlags=Er,e.getSelectedSyntacticModifierFlags=kr,e.getEffectiveModifierFlags=Ar,e.getEffectiveModifierFlagsAlwaysIncludeJSDoc=function(e){return Nr(e,!0,!0)},e.getSyntacticModifierFlags=Fr,e.getEffectiveModifierFlagsNoCache=function(e){return wr(e)|Pr(e)},e.getSyntacticModifierFlagsNoCache=wr,e.modifiersToFlags=Ir,e.modifierToFlag=Or,e.isLogicalOperator=function(e){return 56===e||55===e||53===e},e.isLogicalOrCoalescingAssignmentOperator=Mr,e.isLogicalOrCoalescingAssignmentExpression=function(e){return Mr(e.operatorToken.kind)},e.isAssignmentOperator=Lr,e.tryGetClassExtendingExpressionWithTypeArguments=Rr,e.tryGetClassImplementingOrExtendingExpressionWithTypeArguments=Br,e.isAssignmentExpression=jr,e.isLeftHandSideOfAssignment=function(e){return jr(e.parent)&&e.parent.left===e},e.isDestructuringAssignment=function(e){if(jr(e,!0)){var t=e.left.kind;return 207===t||206===t}return!1},e.isExpressionWithTypeArgumentsInClassExtendsClause=Jr,e.isEntityNameExpression=zr,e.getFirstIdentifier=function(e){switch(e.kind){case 79:return e;case 163:do{e=e.left}while(79!==e.kind);return e;case 208:do{e=e.expression}while(79!==e.kind);return e}},e.isDottedName=function e(t){return 79===t.kind||108===t.kind||106===t.kind||233===t.kind||208===t.kind&&e(t.expression)||214===t.kind&&e(t.expression)},e.isPropertyAccessEntityNameExpression=Ur,e.tryGetPropertyAccessOrIdentifierToString=function t(r){if(e.isPropertyAccessExpression(r)){if(void 0!==(n=t(r.expression)))return n+"."+j(r.name)}else if(e.isElementAccessExpression(r)){var n;if(void 0!==(n=t(r.expression))&&e.isPropertyName(r.argumentExpression))return n+"."+Tt(r.argumentExpression)}else if(e.isIdentifier(r))return e.unescapeLeadingUnderscores(r.escapedText)},e.isPrototypeAccess=Kr,e.isRightSideOfQualifiedNameOrPropertyAccess=function(e){return 163===e.parent.kind&&e.parent.right===e||208===e.parent.kind&&e.parent.name===e},e.isRightSideOfAccessExpression=Vr,e.isRightSideOfQualifiedNameOrPropertyAccessOrJSDocMemberName=function(t){return e.isQualifiedName(t.parent)&&t.parent.right===t||e.isPropertyAccessExpression(t.parent)&&t.parent.name===t||e.isJSDocMemberName(t.parent)&&t.parent.right===t},e.isEmptyObjectLiteral=function(e){return 207===e.kind&&0===e.properties.length},e.isEmptyArrayLiteral=function(e){return 206===e.kind&&0===e.elements.length},e.getLocalSymbolForExportDefault=function(t){if(function(t){return t&&e.length(t.declarations)>0&&xr(t.declarations[0],1024)}(t)&&t.declarations)for(var r=0,n=t.declarations;r<n.length;r++){var i=n[r];if(i.localSymbol)return i.localSymbol}},e.tryExtractTSExtension=function(t){return e.find(ii,(function(r){return e.fileExtensionIs(t,r)}))};var qr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";function Wr(t){for(var r,n,i,a,o="",s=function(t){for(var r=[],n=t.length,i=0;i<n;i++){var a=t.charCodeAt(i);a<128?r.push(a):a<2048?(r.push(a>>6|192),r.push(63&a|128)):a<65536?(r.push(a>>12|224),r.push(a>>6&63|128),r.push(63&a|128)):a<131072?(r.push(a>>18|240),r.push(a>>12&63|128),r.push(a>>6&63|128),r.push(63&a|128)):e.Debug.assert(!1,"Unexpected code point")}return r}(t),c=0,u=s.length;c<u;)r=s[c]>>2,n=(3&s[c])<<4|s[c+1]>>4,i=(15&s[c+1])<<2|s[c+2]>>6,a=63&s[c+2],c+1>=u?i=a=64:c+2>=u&&(a=64),o+=qr.charAt(r)+qr.charAt(n)+qr.charAt(i)+qr.charAt(a),c+=3;return o}function Hr(t,r){var n=e.isString(r)?r:r.readFile(t);if(n){var i=e.parseConfigFileTextToJson(t,n);return i.error?void 0:i.config}}e.convertToBase64=Wr,e.base64encode=function(e,t){return e&&e.base64encode?e.base64encode(t):Wr(t)},e.base64decode=function(e,t){if(e&&e.base64decode)return e.base64decode(t);for(var r=t.length,n=[],i=0;i<r&&t.charCodeAt(i)!==qr.charCodeAt(64);){var a=qr.indexOf(t[i]),o=qr.indexOf(t[i+1]),s=qr.indexOf(t[i+2]),c=qr.indexOf(t[i+3]),u=(63&a)<<2|o>>4&3,l=(15&o)<<4|s>>2&15,_=(3&s)<<6|63&c;0===l&&0!==s?n.push(u):0===_&&0!==c?n.push(u,l):n.push(u,l,_),i+=4}return function(e){for(var t="",r=0,n=e.length;r<n;){var i=e[r];if(i<128)t+=String.fromCharCode(i),r++;else if(192==(192&i)){for(var a=63&i,o=e[++r];128==(192&o);)a=a<<6|63&o,o=e[++r];t+=String.fromCharCode(a)}else t+=String.fromCharCode(i),r++}return t}(n)},e.readJsonOrUndefined=Hr,e.readJson=function(e,t){return Hr(e,t)||{}},e.directoryProbablyExists=function(e,t){return!t.directoryExists||t.directoryExists(e)};var Gr,Qr;function Xr(t,r){return void 0===r&&(r=t),e.Debug.assert(r>=t||-1===r),{pos:t,end:r}}function Yr(e,t){return Xr(t,e.end)}function Zr(t){var r=e.canHaveModifiers(t)?e.findLast(t.modifiers,e.isDecorator):void 0;return r&&!gi(r.end)?Yr(t,r.end):t}function $r(e,t,r){return en(tn(e,r,!1),t.end,r)}function en(t,r,n){return 0===e.getLinesBetweenPositions(n,t,r)}function tn(t,r,n){return gi(t.pos)?-1:e.skipTrivia(r.text,t.pos,!1,n)}function rn(e){return void 0!==e.initializer}function nn(e){return 33554432&e.flags?e.checkFlags:0}function an(t){var r=t.parent;if(!r)return 0;switch(r.kind){case 214:case 206:return an(r);case 222:case 221:var n=r.operator;return 45===n||46===n?c():0;case 223:var i=r,a=i.left,o=i.operatorToken;return a===t&&Lr(o.kind)?63===o.kind?1:c():0;case 208:return r.name!==t?0:an(r);case 299:var s=an(r.parent);return t===r.name?function(t){switch(t){case 0:return 1;case 1:return 0;case 2:return 2;default:return e.Debug.assertNever(t)}}(s):s;case 300:return t===r.objectAssignmentInitializer?0:an(r.parent);default:return 0}function c(){return r.parent&&241===st(r.parent).kind?1:2}}function on(e,t,r){var n=r.onDeleteValue,i=r.onExistingValue;e.forEach((function(r,a){var o=t.get(a);void 0===o?(e.delete(a),n(r,a)):i&&i(r,o,a)}))}function sn(t){var r;return null===(r=t.declarations)||void 0===r?void 0:r.find(e.isClassLike)}function cn(e){return 208===e.kind||209===e.kind}function un(e){for(;cn(e);)e=e.expression;return e}function ln(e,t){this.flags=e,this.escapedName=t,this.declarations=void 0,this.valueDeclaration=void 0,this.id=void 0,this.mergeId=void 0,this.parent=void 0}function _n(t,r){this.flags=r,(e.Debug.isDebugging||e.tracing)&&(this.checker=t)}function dn(t,r){this.flags=r,e.Debug.isDebugging&&(this.checker=t)}function pn(e,t,r){this.pos=t,this.end=r,this.kind=e,this.id=0,this.flags=0,this.modifierFlagsCache=0,this.transformFlags=0,this.parent=void 0,this.original=void 0}function fn(e,t,r){this.pos=t,this.end=r,this.kind=e,this.id=0,this.flags=0,this.transformFlags=0,this.parent=void 0}function gn(e,t,r){this.pos=t,this.end=r,this.kind=e,this.id=0,this.flags=0,this.transformFlags=0,this.parent=void 0,this.original=void 0,this.flowNode=void 0}function mn(e,t,r){this.fileName=e,this.text=t,this.skipTrivia=r||function(e){return e}}function yn(t,r,n){return void 0===n&&(n=0),t.replace(/{(\d+)}/g,(function(t,i){return""+e.Debug.checkDefined(r[+i+n])}))}function vn(e){return Qr&&Qr[e.key]||e.message}function hn(e){return void 0===e.file&&void 0!==e.start&&void 0!==e.length&&"string"==typeof e.fileName}function bn(t,r){var n=r.fileName||"",i=r.text.length;e.Debug.assertEqual(t.fileName,n),e.Debug.assertLessThanOrEqual(t.start,i),e.Debug.assertLessThanOrEqual(t.start+t.length,i);var a={file:r,start:t.start,length:t.length,messageText:t.messageText,category:t.category,code:t.code,reportsUnnecessary:t.reportsUnnecessary};if(t.relatedInformation){a.relatedInformation=[];for(var o=0,s=t.relatedInformation;o<s.length;o++){var c=s[o];hn(c)&&c.fileName===n?(e.Debug.assertLessThanOrEqual(c.start,i),e.Debug.assertLessThanOrEqual(c.start+c.length,i),a.relatedInformation.push(bn(c,r))):a.relatedInformation.push(c)}}return a}function xn(e,t,r,n){z(e,t,r);var i=vn(n);return arguments.length>4&&(i=yn(i,arguments,4)),{file:e,start:t,length:r,messageText:i,category:n.category,code:n.code,reportsUnnecessary:n.reportsUnnecessary,reportsDeprecated:n.reportsDeprecated}}function Dn(e){var t=vn(e);return arguments.length>1&&(t=yn(t,arguments,1)),{file:void 0,start:void 0,length:void 0,messageText:t,category:e.category,code:e.code,reportsUnnecessary:e.reportsUnnecessary,reportsDeprecated:e.reportsDeprecated}}function Sn(e){return e.file?e.file.path:void 0}function Tn(t,r){return Cn(t,r)||function(t,r){if(!t.relatedInformation&&!r.relatedInformation)return 0;if(t.relatedInformation&&r.relatedInformation)return e.compareValues(t.relatedInformation.length,r.relatedInformation.length)||e.forEach(t.relatedInformation,(function(e,t){return Tn(e,r.relatedInformation[t])}))||0;return t.relatedInformation?-1:1}(t,r)||0}function Cn(t,r){return e.compareStringsCaseSensitive(Sn(t),Sn(r))||e.compareValues(t.start,r.start)||e.compareValues(t.length,r.length)||e.compareValues(t.code,r.code)||En(t.messageText,r.messageText)||0}function En(t,r){if("string"==typeof t&&"string"==typeof r)return e.compareStringsCaseSensitive(t,r);if("string"==typeof t)return-1;if("string"==typeof r)return 1;var n=e.compareStringsCaseSensitive(t.messageText,r.messageText);if(n)return n;if(!t.next&&!r.next)return 0;if(!t.next)return-1;if(!r.next)return 1;for(var i=Math.min(t.next.length,r.next.length),a=0;a<i;a++)if(n=En(t.next[a],r.next[a]))return n;return t.next.length<r.next.length?-1:t.next.length>r.next.length?1:0}function kn(t){if(2&t.transformFlags)return e.isJsxOpeningLikeElement(t)||e.isJsxFragment(t)?t:e.forEachChild(t,kn)}function Nn(e){return e.isDeclarationFile?void 0:kn(e)}function An(t){return!(t.impliedNodeFormat!==e.ModuleKind.ESNext&&!e.fileExtensionIsOneOf(t.fileName,[".cjs",".cts",".mjs",".mts"])||t.isDeclarationFile)||void 0}function Fn(t){return t.target||t.module===e.ModuleKind.Node16&&9||t.module===e.ModuleKind.NodeNext&&99||0}function Pn(t){return"number"==typeof t.module?t.module:Fn(t)>=2?e.ModuleKind.ES2015:e.ModuleKind.CommonJS}function wn(t){return t.moduleDetection||(Pn(t)===e.ModuleKind.Node16||Pn(t)===e.ModuleKind.NodeNext?e.ModuleDetectionKind.Force:e.ModuleDetectionKind.Auto)}function In(t){if(void 0!==t.esModuleInterop)return t.esModuleInterop;switch(Pn(t)){case e.ModuleKind.Node16:case e.ModuleKind.NodeNext:return!0}}function On(e){return!(!e.declaration&&!e.composite)}function Mn(e,t){return void 0===e[t]?!!e.strict:!!e[t]}function Ln(e){return void 0===e.allowJs?!!e.checkJs:e.allowJs}function Rn(e,t){return t.strictFlag?Mn(e,t.name):e[t.name]}function Bn(t,r){return void 0!==t&&("node_modules"===r(t)||e.startsWith(t,"@"))}e.getNewLineCharacter=function(t,r){switch(t.newLine){case 0:return"\r\n";case 1:return"\n"}return r?r():e.sys?e.sys.newLine:"\r\n"},e.createRange=Xr,e.moveRangeEnd=function(e,t){return Xr(e.pos,t)},e.moveRangePos=Yr,e.moveRangePastDecorators=Zr,e.moveRangePastModifiers=function(t){var r=e.canHaveModifiers(t)?e.lastOrUndefined(t.modifiers):void 0;return r&&!gi(r.end)?Yr(t,r.end):Zr(t)},e.isCollapsedRange=function(e){return e.pos===e.end},e.createTokenRange=function(t,r){return Xr(t,t+e.tokenToString(r).length)},e.rangeIsOnSingleLine=function(e,t){return $r(e,e,t)},e.rangeStartPositionsAreOnSameLine=function(e,t,r){return en(tn(e,r,!1),tn(t,r,!1),r)},e.rangeEndPositionsAreOnSameLine=function(e,t,r){return en(e.end,t.end,r)},e.rangeStartIsOnSameLineAsRangeEnd=$r,e.rangeEndIsOnSameLineAsRangeStart=function(e,t,r){return en(e.end,tn(t,r,!1),r)},e.getLinesBetweenRangeEndAndRangeStart=function(t,r,n,i){var a=tn(r,n,i);return e.getLinesBetweenPositions(n,t.end,a)},e.getLinesBetweenRangeEndPositions=function(t,r,n){return e.getLinesBetweenPositions(n,t.end,r.end)},e.isNodeArrayMultiLine=function(e,t){return!en(e.pos,e.end,t)},e.positionsAreOnSameLine=en,e.getStartPositionOfRange=tn,e.getLinesBetweenPositionAndPrecedingNonWhitespaceCharacter=function(t,r,n,i){var a=e.skipTrivia(n.text,t,!1,i),o=function(t,r,n){void 0===r&&(r=0);for(;t-- >r;)if(!e.isWhiteSpaceLike(n.text.charCodeAt(t)))return t}(a,r,n);return e.getLinesBetweenPositions(n,null!=o?o:r,a)},e.getLinesBetweenPositionAndNextNonWhitespaceCharacter=function(t,r,n,i){var a=e.skipTrivia(n.text,t,!1,i);return e.getLinesBetweenPositions(n,t,Math.min(r,a))},e.isDeclarationNameOfEnumOrNamespace=function(t){var r=e.getParseTreeNode(t);if(r)switch(r.parent.kind){case 263:case 264:return r===r.parent.name}return!1},e.getInitializedVariables=function(t){return e.filter(t.declarations,rn)},e.isWatchSet=function(t){return t.watch&&e.hasProperty(t,"watch")},e.closeFileWatcher=function(e){e.close()},e.getCheckFlags=nn,e.getDeclarationModifierFlagsFromSymbol=function(t,r){if(void 0===r&&(r=!1),t.valueDeclaration){var n=r&&t.declarations&&e.find(t.declarations,e.isSetAccessorDeclaration)||32768&t.flags&&e.find(t.declarations,e.isGetAccessorDeclaration)||t.valueDeclaration,i=e.getCombinedModifierFlags(n);return t.parent&&32&t.parent.flags?i:-29&i}if(6&nn(t)){var a=t.checkFlags;return(1024&a?8:256&a?4:16)|(2048&a?32:0)}return 4194304&t.flags?36:0},e.skipAlias=function(e,t){return 2097152&e.flags?t.getAliasedSymbol(e):e},e.getCombinedLocalAndExportSymbolFlags=function(e){return e.exportSymbol?e.exportSymbol.flags|e.flags:e.flags},e.isWriteOnlyAccess=function(e){return 1===an(e)},e.isWriteAccess=function(e){return 0!==an(e)},function(e){e[e.Read=0]="Read",e[e.Write=1]="Write",e[e.ReadWrite=2]="ReadWrite"}(Gr||(Gr={})),e.compareDataObjects=function e(t,r){if(!t||!r||Object.keys(t).length!==Object.keys(r).length)return!1;for(var n in t)if("object"==typeof t[n]){if(!e(t[n],r[n]))return!1}else if("function"!=typeof t[n]&&t[n]!==r[n])return!1;return!0},e.clearMap=function(e,t){e.forEach(t),e.clear()},e.mutateMapSkippingNewValues=on,e.mutateMap=function(e,t,r){on(e,t,r);var n=r.createNewValue;t.forEach((function(t,r){e.has(r)||e.set(r,n(r,t))}))},e.isAbstractConstructorSymbol=function(e){if(32&e.flags){var t=sn(e);return!!t&&xr(t,256)}return!1},e.getClassLikeDeclarationOfSymbol=sn,e.getObjectFlags=function(e){return 3899393&e.flags?e.objectFlags:0},e.typeHasCallOrConstructSignatures=function(e,t){return 0!==t.getSignaturesOfType(e,0).length||0!==t.getSignaturesOfType(e,1).length},e.forSomeAncestorDirectory=function(t,r){return!!e.forEachAncestorDirectory(t,(function(e){return!!r(e)||void 0}))},e.isUMDExportSymbol=function(t){return!!t&&!!t.declarations&&!!t.declarations[0]&&e.isNamespaceExportDeclaration(t.declarations[0])},e.showModuleSpecifier=function(t){var r=t.moduleSpecifier;return e.isStringLiteral(r)?r.text:D(r)},e.getLastChild=function(t){var r;return e.forEachChild(t,(function(e){f(e)&&(r=e)}),(function(e){for(var t=e.length-1;t>=0;t--)if(f(e[t])){r=e[t];break}})),r},e.addToSeen=function(e,t,r){return void 0===r&&(r=!0),!e.has(t)&&(e.set(t,r),!0)},e.isObjectTypeDeclaration=function(t){return e.isClassLike(t)||e.isInterfaceDeclaration(t)||e.isTypeLiteralNode(t)},e.isTypeNodeKind=function(e){return e>=179&&e<=202||131===e||157===e||148===e||160===e||149===e||134===e||152===e||153===e||114===e||155===e||144===e||230===e||315===e||316===e||317===e||318===e||319===e||320===e||321===e},e.isAccessExpression=cn,e.getNameOfAccessExpression=function(t){return 208===t.kind?t.name:(e.Debug.assert(209===t.kind),t.argumentExpression)},e.isBundleFileTextLike=function(e){switch(e.kind){case"text":case"internal":return!0;default:return!1}},e.isNamedImportsOrExports=function(e){return 272===e.kind||276===e.kind},e.getLeftmostAccessExpression=un,e.forEachNameInAccessChainWalkingLeft=function(t,r){if(cn(t.parent)&&Vr(t))return function t(n){if(208===n.kind){if(void 0!==(i=r(n.name)))return i}else if(209===n.kind){if(!e.isIdentifier(n.argumentExpression)&&!e.isStringLiteralLike(n.argumentExpression))return;var i;if(void 0!==(i=r(n.argumentExpression)))return i}if(cn(n.expression))return t(n.expression);if(e.isIdentifier(n.expression))return r(n.expression);return}(t.parent)},e.getLeftmostExpression=function(e,t){for(;;){switch(e.kind){case 222:e=e.operand;continue;case 223:e=e.left;continue;case 224:e=e.condition;continue;case 212:e=e.tag;continue;case 210:if(t)return e;case 231:case 209:case 208:case 232:case 353:case 235:e=e.expression;continue}return e}},e.objectAllocator={getNodeConstructor:function(){return pn},getTokenConstructor:function(){return fn},getIdentifierConstructor:function(){return gn},getPrivateIdentifierConstructor:function(){return pn},getSourceFileConstructor:function(){return pn},getSymbolConstructor:function(){return ln},getTypeConstructor:function(){return _n},getSignatureConstructor:function(){return dn},getSourceMapSourceConstructor:function(){return mn}},e.setObjectAllocator=function(t){Object.assign(e.objectAllocator,t)},e.formatStringFromArgs=yn,e.setLocalizedDiagnosticMessages=function(e){Qr=e},e.maybeSetLocalizedDiagnosticMessages=function(e){!Qr&&e&&(Qr=e())},e.getLocaleSpecificMessage=vn,e.createDetachedDiagnostic=function(e,t,r,n){z(void 0,t,r);var i=vn(n);return arguments.length>4&&(i=yn(i,arguments,4)),{file:void 0,start:t,length:r,messageText:i,category:n.category,code:n.code,reportsUnnecessary:n.reportsUnnecessary,fileName:e}},e.attachFileToDiagnostics=function(e,t){for(var r=[],n=0,i=e;n<i.length;n++){var a=i[n];r.push(bn(a,t))}return r},e.createFileDiagnostic=xn,e.formatMessage=function(e,t){var r=vn(t);return arguments.length>2&&(r=yn(r,arguments,2)),r},e.createCompilerDiagnostic=Dn,e.createCompilerDiagnosticFromMessageChain=function(e,t){return{file:void 0,start:void 0,length:void 0,code:e.code,category:e.category,messageText:e.next?e:e.messageText,relatedInformation:t}},e.chainDiagnosticMessages=function(e,t){var r=vn(t);return arguments.length>2&&(r=yn(r,arguments,2)),{messageText:r,category:t.category,code:t.code,next:void 0===e||Array.isArray(e)?e:[e]}},e.concatenateDiagnosticMessageChains=function(e,t){for(var r=e;r.next;)r=r.next[0];r.next=[t]},e.compareDiagnostics=Tn,e.compareDiagnosticsSkipRelatedInformation=Cn,e.getLanguageVariant=function(e){return 4===e||2===e||1===e||6===e?1:0},e.getSetExternalModuleIndicator=function(t){switch(wn(t)){case e.ModuleDetectionKind.Force:return function(t){t.externalModuleIndicator=e.isFileProbablyExternalModule(t)||!t.isDeclarationFile||void 0};case e.ModuleDetectionKind.Legacy:return function(t){t.externalModuleIndicator=e.isFileProbablyExternalModule(t)};case e.ModuleDetectionKind.Auto:var r=[e.isFileProbablyExternalModule];4!==t.jsx&&5!==t.jsx||r.push(Nn),r.push(An);var n=e.or.apply(void 0,r);return function(e){e.externalModuleIndicator=n(e)}}},e.getEmitScriptTarget=Fn,e.getEmitModuleKind=Pn,e.getEmitModuleResolutionKind=function(t){var r=t.moduleResolution;if(void 0===r)switch(Pn(t)){case e.ModuleKind.CommonJS:r=e.ModuleResolutionKind.NodeJs;break;case e.ModuleKind.Node16:r=e.ModuleResolutionKind.Node16;break;case e.ModuleKind.NodeNext:r=e.ModuleResolutionKind.NodeNext;break;default:r=e.ModuleResolutionKind.Classic}return r},e.getEmitModuleDetectionKind=wn,e.hasJsonModuleEmitEnabled=function(t){switch(Pn(t)){case e.ModuleKind.CommonJS:case e.ModuleKind.AMD:case e.ModuleKind.ES2015:case e.ModuleKind.ES2020:case e.ModuleKind.ES2022:case e.ModuleKind.ESNext:case e.ModuleKind.Node16:case e.ModuleKind.NodeNext:return!0;default:return!1}},e.unreachableCodeIsError=function(e){return!1===e.allowUnreachableCode},e.unusedLabelIsError=function(e){return!1===e.allowUnusedLabels},e.getAreDeclarationMapsEnabled=function(e){return!(!On(e)||!e.declarationMap)},e.getESModuleInterop=In,e.getAllowSyntheticDefaultImports=function(t){var r=Pn(t);return void 0!==t.allowSyntheticDefaultImports?t.allowSyntheticDefaultImports:In(t)||r===e.ModuleKind.System},e.getEmitDeclarations=On,e.shouldPreserveConstEnums=function(e){return!(!e.preserveConstEnums&&!e.isolatedModules)},e.isIncrementalCompilation=function(e){return!(!e.incremental&&!e.composite)},e.getStrictOptionValue=Mn,e.getAllowJSCompilerOption=Ln,e.getUseDefineForClassFields=function(e){return void 0===e.useDefineForClassFields?Fn(e)>=9:e.useDefineForClassFields},e.compilerOptionsAffectSemanticDiagnostics=function(t,r){return s(r,t,e.semanticDiagnosticsOptionDeclarations)},e.compilerOptionsAffectEmit=function(t,r){return s(r,t,e.affectsEmitOptionDeclarations)},e.compilerOptionsAffectDeclarationPath=function(t,r){return s(r,t,e.affectsDeclarationPathOptionDeclarations)},e.getCompilerOptionValue=Rn,e.getJSXTransformEnabled=function(e){var t=e.jsx;return 2===t||4===t||5===t},e.getJSXImplicitImportBase=function(t,r){var n=null==r?void 0:r.pragmas.get("jsximportsource"),i=e.isArray(n)?n[n.length-1]:n;return 4===t.jsx||5===t.jsx||t.jsxImportSource||i?(null==i?void 0:i.arguments.factory)||t.jsxImportSource||"react":void 0},e.getJSXRuntimeImport=function(e,t){return e?"".concat(e,"/").concat(5===t.jsx?"jsx-dev-runtime":"jsx-runtime"):void 0},e.hasZeroOrOneAsteriskCharacter=function(e){for(var t=!1,r=0;r<e.length;r++)if(42===e.charCodeAt(r)){if(t)return!1;t=!0}return!0},e.createSymlinkCache=function(t,r){var n,i,a,o=!1;return{getSymlinkedFiles:function(){return a},getSymlinkedDirectories:function(){return n},getSymlinkedDirectoriesByRealpath:function(){return i},setSymlinkedFile:function(t,r){return(a||(a=new e.Map)).set(t,r)},setSymlinkedDirectory:function(a,o){var s=e.toPath(a,t,r);Ti(s)||(s=e.ensureTrailingDirectorySeparator(s),!1===o||(null==n?void 0:n.has(s))||(i||(i=e.createMultiMap())).add(e.ensureTrailingDirectorySeparator(o.realPath),a),(n||(n=new e.Map)).set(s,o))},setSymlinksFromResolutions:function(t,r){var n,i=this;e.Debug.assert(!o),o=!0;for(var a=0,c=t;a<c.length;a++){null===(n=c[a].resolvedModules)||void 0===n||n.forEach((function(e){return s(i,e)}))}null==r||r.forEach((function(e){return s(i,e)}))},hasProcessedResolutions:function(){return o}};function s(n,i){if(i&&i.originalPath&&i.resolvedFileName){var a=i.resolvedFileName,o=i.originalPath;n.setSymlinkedFile(e.toPath(o,t,r),a);var s=function(t,r,n,i){var a=e.getPathComponents(e.getNormalizedAbsolutePath(t,n)),o=e.getPathComponents(e.getNormalizedAbsolutePath(r,n)),s=!1;for(;a.length>=2&&o.length>=2&&!Bn(a[a.length-2],i)&&!Bn(o[o.length-2],i)&&i(a[a.length-1])===i(o[o.length-1]);)a.pop(),o.pop(),s=!0;return s?[e.getPathFromPathComponents(a),e.getPathFromPathComponents(o)]:void 0}(a,o,t,r)||e.emptyArray,c=s[0],u=s[1];c&&u&&n.setSymlinkedDirectory(u,{real:c,realPath:e.toPath(c,t,r)})}}},e.tryRemoveDirectoryPrefix=function(t,r,n){var i,a=e.tryRemovePrefix(t,r,n);return void 0===a?void 0:(i=a,e.isAnyDirectorySeparator(i.charCodeAt(0))?i.slice(1):void 0)};var jn=/[^\w\s\/]/g;function Jn(e){return"\\"+e}e.regExpEscape=function(e){return e.replace(jn,Jn)};var zn=[42,63];e.commonPackageFolders=["node_modules","bower_components","jspm_packages"];var Un="(?!(".concat(e.commonPackageFolders.join("|"),")(/|$))"),Kn={singleAsteriskRegexFragment:"([^./]|(\\.(?!min\\.js$))?)*",doubleAsteriskRegexFragment:"(/".concat(Un,"[^/.][^/]*)*?"),replaceWildcardCharacter:function(e){return Yn(e,Kn.singleAsteriskRegexFragment)}},Vn={singleAsteriskRegexFragment:"[^/]*",doubleAsteriskRegexFragment:"(/".concat(Un,"[^/.][^/]*)*?"),replaceWildcardCharacter:function(e){return Yn(e,Vn.singleAsteriskRegexFragment)}},qn={singleAsteriskRegexFragment:"[^/]*",doubleAsteriskRegexFragment:"(/.+?)?",replaceWildcardCharacter:function(e){return Yn(e,qn.singleAsteriskRegexFragment)}},Wn={files:Kn,directories:Vn,exclude:qn};function Hn(e,t,r){var n=Gn(e,t,r);if(n&&n.length){var i=n.map((function(e){return"(".concat(e,")")})).join("|"),a="exclude"===r?"($|/)":"$";return"^(".concat(i,")").concat(a)}}function Gn(t,r,n){if(void 0!==t&&0!==t.length)return e.flatMap(t,(function(e){return e&&Xn(e,r,n,Wn[n])}))}function Qn(e){return!/[.*?]/.test(e)}function Xn(t,r,n,i){var a=i.singleAsteriskRegexFragment,o=i.doubleAsteriskRegexFragment,s=i.replaceWildcardCharacter,c="",u=!1,l=e.getNormalizedPathComponents(t,r),_=e.last(l);if("exclude"===n||"**"!==_){l[0]=e.removeTrailingDirectorySeparator(l[0]),Qn(_)&&l.push("**","*");for(var d=0,p=0,f=l;p<f.length;p++){var g=f[p];if("**"===g)c+=o;else if("directories"===n&&(c+="(",d++),u&&(c+=e.directorySeparator),"exclude"!==n){var m="";42===g.charCodeAt(0)?(m+="([^./]"+a+")?",g=g.substr(1)):63===g.charCodeAt(0)&&(m+="[^./]",g=g.substr(1)),(m+=g.replace(jn,s))!==g&&(c+=Un),c+=m}else c+=g.replace(jn,s);u=!0}for(;d>0;)c+=")?",d--;return c}}function Yn(e,t){return"*"===e?t:"?"===e?"[^/]":"\\"+e}function Zn(t,r,n,i,a){t=e.normalizePath(t),a=e.normalizePath(a);var o=e.combinePaths(a,t);return{includeFilePatterns:e.map(Gn(n,o,"files"),(function(e){return"^".concat(e,"$")})),includeFilePattern:Hn(n,o,"files"),includeDirectoryPattern:Hn(n,o,"directories"),excludePattern:Hn(r,o,"exclude"),basePaths:ei(t,n,i)}}function $n(e,t){return new RegExp(e,t?"":"i")}function ei(t,r,n){var i=[t];if(r){for(var a=[],o=0,s=r;o<s.length;o++){var c=s[o],u=e.isRootedDiskPath(c)?c:e.normalizePath(e.combinePaths(t,c));a.push(ti(u))}a.sort(e.getStringComparer(!n));for(var l=function(r){e.every(i,(function(i){return!e.containsPath(i,r,t,!n)}))&&i.push(r)},_=0,d=a;_<d.length;_++){l(d[_])}}return i}function ti(t){var r=e.indexOfAnyCharCode(t,zn);return r<0?e.hasExtension(t)?e.removeTrailingDirectorySeparator(e.getDirectoryPath(t)):t:t.substring(0,t.lastIndexOf(e.directorySeparator,r))}function ri(e){switch(e.substr(e.lastIndexOf(".")).toLowerCase()){case".js":case".cjs":case".mjs":return 1;case".jsx":return 2;case".ts":case".cts":case".mts":return 3;case".tsx":return 4;case".json":return 6;default:return 0}}e.getRegularExpressionForWildcard=Hn,e.getRegularExpressionsForWildcards=Gn,e.isImplicitGlob=Qn,e.getPatternFromSpec=function(e,t,r){var n=e&&Xn(e,t,r,Wn[r]);return n&&"^(".concat(n,")").concat("exclude"===r?"($|/)":"$")},e.getFileMatcherPatterns=Zn,e.getRegexFromPattern=$n,e.matchFiles=function(t,r,n,i,a,o,s,c,u){t=e.normalizePath(t),o=e.normalizePath(o);for(var l=Zn(t,n,i,a,o),_=l.includeFilePatterns&&l.includeFilePatterns.map((function(e){return $n(e,a)})),d=l.includeDirectoryPattern&&$n(l.includeDirectoryPattern,a),p=l.excludePattern&&$n(l.excludePattern,a),f=_?_.map((function(){return[]})):[[]],g=new e.Map,m=e.createGetCanonicalFileName(a),y=0,v=l.basePaths;y<v.length;y++){var h=v[y];b(h,e.combinePaths(o,h),s)}return e.flatten(f);function b(t,n,i){var a=m(u(n));if(!g.has(a)){g.set(a,!0);for(var o=c(t),s=o.files,l=o.directories,y=function(i){var a=e.combinePaths(t,i),o=e.combinePaths(n,i);if(r&&!e.fileExtensionIsOneOf(a,r))return"continue";if(p&&p.test(o))return"continue";if(_){var s=e.findIndex(_,(function(e){return e.test(o)}));-1!==s&&f[s].push(a)}else f[0].push(a)},v=0,h=e.sort(s,e.compareStringsCaseSensitive);v<h.length;v++){y(S=h[v])}if(void 0===i||0!=--i)for(var x=0,D=e.sort(l,e.compareStringsCaseSensitive);x<D.length;x++){var S=D[x],T=e.combinePaths(t,S),C=e.combinePaths(n,S);d&&!d.test(C)||p&&p.test(C)||b(T,C,i)}}}},e.ensureScriptKind=function(e,t){return t||ri(e)||3},e.getScriptKindFromFileName=ri,e.supportedTSExtensions=[[".ts",".tsx",".d.ts"],[".cts",".d.cts"],[".mts",".d.mts"]],e.supportedTSExtensionsFlat=e.flatten(e.supportedTSExtensions);var ni=a(a([],e.supportedTSExtensions,!0),[[".json"]],!1),ii=[".d.ts",".d.cts",".d.mts",".cts",".mts",".ts",".tsx",".cts",".mts"];e.supportedJSExtensions=[[".js",".jsx"],[".mjs"],[".cjs"]],e.supportedJSExtensionsFlat=e.flatten(e.supportedJSExtensions);var ai=[[".ts",".tsx",".d.ts",".js",".jsx"],[".cts",".d.cts",".cjs"],[".mts",".d.mts",".mjs"]],oi=a(a([],ai,!0),[[".json"]],!1);function si(t,r){var n=t&&Ln(t);if(!r||0===r.length)return n?ai:e.supportedTSExtensions;var i=n?ai:e.supportedTSExtensions,o=e.flatten(i);return a(a([],i,!0),e.mapDefined(r,(function(e){return 7===e.scriptKind||n&&(1===(t=e.scriptKind)||2===t)&&-1===o.indexOf(e.extension)?[e.extension]:void 0;var t})),!0)}function ci(t,r){return t&&t.resolveJsonModule?r===ai?oi:r===e.supportedTSExtensions?ni:a(a([],r,!0),[[".json"]],!1):r}function ui(e){var t=e.match(/\//g);return t?t.length:0}e.supportedDeclarationExtensions=[".d.ts",".d.cts",".d.mts"],e.getSupportedExtensions=si,e.getSupportedExtensionsWithJsonIfResolveJsonModule=ci,e.hasJSFileExtension=function(t){return e.some(e.supportedJSExtensionsFlat,(function(r){return e.fileExtensionIs(t,r)}))},e.hasTSFileExtension=function(t){return e.some(e.supportedTSExtensionsFlat,(function(r){return e.fileExtensionIs(t,r)}))},e.isSupportedSourceFileName=function(t,r,n){if(!t)return!1;for(var i=si(r,n),a=0,o=e.flatten(ci(r,i));a<o.length;a++){var s=o[a];if(e.fileExtensionIs(t,s))return!0}return!1},e.compareNumberOfDirectorySeparators=function(t,r){return e.compareValues(ui(t),ui(r))};var li=[".d.ts",".d.mts",".d.cts",".mjs",".mts",".cjs",".cts",".ts",".js",".tsx",".jsx",".json"];function _i(e){for(var t=0,r=li;t<r.length;t++){var n=di(e,r[t]);if(void 0!==n)return n}return e}function di(t,r){return e.fileExtensionIs(t,r)?pi(t,r):void 0}function pi(e,t){return e.substring(0,e.length-t.length)}function fi(e){var t=e.indexOf("*");return-1===t?e:-1!==e.indexOf("*",t+1)?void 0:{prefix:e.substr(0,t),suffix:e.substr(t+1)}}function gi(e){return!(e>=0)}function mi(e){return".ts"===e||".tsx"===e||".d.ts"===e||".cts"===e||".mts"===e||".d.mts"===e||".d.cts"===e}function yi(t){return e.find(li,(function(r){return e.fileExtensionIs(t,r)}))}function vi(t,r){return t===r||"object"==typeof t&&null!==t&&"object"==typeof r&&null!==r&&e.equalOwnProperties(t,r,vi)}function hi(e,t){return e.pos=t,e}function bi(e,t){return e.end=t,e}function xi(e,t,r){return bi(hi(e,t),r)}function Di(e,t){return e&&t&&(e.parent=t),e}function Si(t){return!e.isOmittedExpression(t)}function Ti(t){return e.some(e.ignoredPaths,(function(r){return e.stringContains(t,r)}))}function Ci(e){return 257===e.kind&&295===e.parent.kind}function Ei(e){return(+e).toString()===e}function ki(e){switch(e.kind){case 165:case 260:case 261:case 262:case 263:case 348:case 341:case 342:return!0;case 270:return e.isTypeOnly;case 273:case 278:return e.parent.parent.isTypeOnly;default:return!1}}e.removeFileExtension=_i,e.tryRemoveExtension=di,e.removeExtension=pi,e.changeExtension=function(t,r){return e.changeAnyExtension(t,r,li,!1)},e.tryParsePattern=fi,e.tryParsePatterns=function(t){return e.mapDefined(e.getOwnKeys(t),(function(e){return fi(e)}))},e.positionIsSynthesized=gi,e.extensionIsTS=mi,e.resolutionExtensionIsTSOrJson=function(e){return mi(e)||".json"===e},e.extensionFromPath=function(t){var r=yi(t);return void 0!==r?r:e.Debug.fail("File ".concat(t," has unknown extension."))},e.isAnySupportedFileExtension=function(e){return void 0!==yi(e)},e.tryGetExtensionFromPath=yi,e.isCheckJsEnabledForFile=function(e,t){return e.checkJsDirective?e.checkJsDirective.enabled:t.checkJs},e.emptyFileSystemEntries={files:e.emptyArray,directories:e.emptyArray},e.matchPatternOrExact=function(t,r){for(var n=[],i=0,a=t;i<a.length;i++){var o=a[i];if(o===r)return r;e.isString(o)||n.push(o)}return e.findBestPatternMatch(n,(function(e){return e}),r)},e.sliceAfter=function(t,r){var n=t.indexOf(r);return e.Debug.assert(-1!==n),t.slice(n)},e.addRelatedInfo=function(t){for(var r,n=[],i=1;i<arguments.length;i++)n[i-1]=arguments[i];return n.length?(t.relatedInformation||(t.relatedInformation=[]),e.Debug.assert(t.relatedInformation!==e.emptyArray,"Diagnostic had empty array singleton for related info, but is still being constructed!"),(r=t.relatedInformation).push.apply(r,n),t):t},e.minAndMax=function(t,r){e.Debug.assert(0!==t.length);for(var n=r(t[0]),i=n,a=1;a<t.length;a++){var o=r(t[a]);o<n?n=o:o>i&&(i=o)}return{min:n,max:i}},e.rangeOfNode=function(e){return{pos:h(e),end:e.end}},e.rangeOfTypeParameters=function(t,r){return{pos:r.pos-1,end:e.skipTrivia(t.text,r.end)+1}},e.skipTypeChecking=function(e,t,r){return t.skipLibCheck&&e.isDeclarationFile||t.skipDefaultLibCheck&&e.hasNoDefaultLib||r.isSourceOfProjectReferenceRedirect(e.fileName)},e.isJsonEqual=vi,e.parsePseudoBigInt=function(e){var t;switch(e.charCodeAt(1)){case 98:case 66:t=1;break;case 111:case 79:t=3;break;case 120:case 88:t=4;break;default:for(var r=e.length-1,n=0;48===e.charCodeAt(n);)n++;return e.slice(n,r)||"0"}for(var i=e.length-1,a=(i-2)*t,o=new Uint16Array((a>>>4)+(15&a?1:0)),s=i-1,c=0;s>=2;s--,c+=t){var u=c>>>4,l=e.charCodeAt(s),_=(l<=57?l-48:10+l-(l<=70?65:97))<<(15&c);o[u]|=_;var d=_>>>16;d&&(o[u+1]|=d)}for(var p="",f=o.length-1,g=!0;g;){var m=0;g=!1;for(u=f;u>=0;u--){var y=m<<16|o[u],v=y/10|0;o[u]=v,m=y-10*v,v&&!g&&(f=u,g=!0)}p=m+p}return p},e.pseudoBigIntToString=function(e){var t=e.negative,r=e.base10Value;return(t&&"0"!==r?"-":"")+r},e.isValidTypeOnlyAliasUseSite=function(t){return!!(16777216&t.flags)||me(t)||function(t){if(79!==t.kind)return!1;var r=e.findAncestor(t.parent,(function(e){switch(e.kind){case 294:return!0;case 208:case 230:return!1;default:return"quit"}}));return 117===(null==r?void 0:r.token)||261===(null==r?void 0:r.parent.kind)}(t)||function(e){for(;79===e.kind||208===e.kind;)e=e.parent;if(164!==e.kind)return!1;if(xr(e.parent,256))return!0;var t=e.parent.parent.kind;return 261===t||184===t}(t)||!(fe(t)||function(t){return e.isIdentifier(t)&&e.isShorthandPropertyAssignment(t.parent)&&t.parent.name===t}(t))},e.isIdentifierTypeReference=function(t){return e.isTypeReferenceNode(t)&&e.isIdentifier(t.typeName)},e.arrayIsHomogeneous=function(t,r){if(void 0===r&&(r=e.equateValues),t.length<2)return!0;for(var n=t[0],i=1,a=t.length;i<a;i++){if(!r(n,t[i]))return!1}return!0},e.setTextRangePos=hi,e.setTextRangeEnd=bi,e.setTextRangePosEnd=xi,e.setTextRangePosWidth=function(e,t,r){return xi(e,t,t+r)},e.setNodeFlags=function(e,t){return e&&(e.flags=t),e},e.setParent=Di,e.setEachParent=function(e,t){if(e)for(var r=0,n=e;r<n.length;r++){Di(n[r],t)}return e},e.setParentRecursive=function(t,r){return t?(e.forEachChildRecursively(t,e.isJSDocNode(t)?n:function(t,r){return n(t,r)||function(t){if(e.hasJSDocNodes(t))for(var r=0,i=t.jsDoc;r<i.length;r++){var a=i[r];n(a,t),e.forEachChildRecursively(a,n)}}(t)}),t):t;function n(e,t){if(r&&e.parent===t)return"skip";Di(e,t)}},e.isPackedArrayLiteral=function(t){return e.isArrayLiteralExpression(t)&&e.every(t.elements,Si)},e.expressionResultIsUnused=function(t){for(e.Debug.assertIsDefined(t.parent);;){var r=t.parent;if(e.isParenthesizedExpression(r))t=r;else{if(e.isExpressionStatement(r)||e.isVoidExpression(r)||e.isForStatement(r)&&(r.initializer===t||r.incrementor===t))return!0;if(e.isCommaListExpression(r)){if(t!==e.last(r.elements))return!0;t=r}else{if(!e.isBinaryExpression(r)||27!==r.operatorToken.kind)return!1;if(t===r.left)return!0;t=r}}}},e.containsIgnoredPath=Ti,e.getContainingNodeArray=function(t){if(t.parent){switch(t.kind){case 165:var r=t.parent;return 192===r.kind?void 0:r.typeParameters;case 166:return t.parent.parameters;case 201:case 236:return t.parent.templateSpans;case 167:var n=t.parent;return e.canHaveDecorators(n)?n.modifiers:e.canHaveIllegalDecorators(n)?n.illegalDecorators:void 0;case 294:return t.parent.heritageClauses}var i=t.parent;if(e.isJSDocTag(t))return e.isJSDocTypeLiteral(t.parent)?void 0:t.parent.tags;switch(i.kind){case 184:case 261:return e.isTypeElement(t)?i.members:void 0;case 189:case 190:return i.types;case 186:case 206:case 354:case 272:case 276:return i.elements;case 207:case 289:return i.properties;case 210:case 211:return e.isTypeNode(t)?i.typeArguments:i.expression===t?void 0:i.arguments;case 281:case 285:return e.isJsxChild(t)?i.children:void 0;case 283:case 282:return e.isTypeNode(t)?i.typeArguments:void 0;case 238:case 292:case 293:case 265:case 308:return i.statements;case 266:return i.clauses;case 260:case 228:return e.isClassElement(t)?i.members:void 0;case 263:return e.isEnumMember(t)?i.members:void 0}}},e.hasContextSensitiveParameters=function(t){if(!t.typeParameters){if(e.some(t.parameters,(function(e){return!fr(e)})))return!0;if(216!==t.kind){var r=e.firstOrUndefined(t.parameters);if(!r||!_r(r))return!0}}return!1},e.isInfinityOrNaNString=function(e){return"Infinity"===e||"-Infinity"===e||"NaN"===e},e.isCatchClauseVariableDeclaration=Ci,e.isParameterOrCatchClauseVariable=function(t){var r=t.valueDeclaration&&kt(t.valueDeclaration);return!!r&&(e.isParameter(r)||Ci(r))},e.isFunctionExpressionOrArrowFunction=function(e){return 215===e.kind||216===e.kind},e.escapeSnippetText=function(e){return e.replace(/\$/gm,(function(){return"\\$"}))},e.isNumericLiteralName=Ei,e.createPropertyNameNodeForIdentifierOrLiteral=function(t,r,n,i){return e.isIdentifierText(t,r)?e.factory.createIdentifier(t):!i&&Ei(t)&&+t>=0?e.factory.createNumericLiteral(+t):e.factory.createStringLiteral(t,!!n)},e.isThisTypeParameter=function(e){return!!(262144&e.flags&&e.isThisType)},e.getNodeModulePathParts=function(t){var r,n=0,i=0,a=0;!function(e){e[e.BeforeNodeModules=0]="BeforeNodeModules",e[e.NodeModules=1]="NodeModules",e[e.Scope=2]="Scope",e[e.PackageContent=3]="PackageContent"}(r||(r={}));for(var o=0,s=0,c=0;s>=0;)switch(o=s,s=t.indexOf("/",o+1),c){case 0:t.indexOf(e.nodeModulesPathPart,o)===o&&(n=o,i=s,c=1);break;case 1:case 2:1===c&&"@"===t.charAt(o+1)?c=2:(a=s,c=3);break;case 3:c=t.indexOf(e.nodeModulesPathPart,o)===o?1:3}return c>1?{topLevelNodeModulesIndex:n,topLevelPackageNameIndex:i,packageRootIndex:a,fileNameIndex:o}:void 0},e.getParameterTypeNode=function(e){var t;return 343===e.kind?null===(t=e.typeExpression)||void 0===t?void 0:t.type:e.type},e.isTypeDeclaration=ki,e.canHaveExportModifier=function(t){return e.isEnumDeclaration(t)||e.isVariableStatement(t)||e.isFunctionDeclaration(t)||e.isClassDeclaration(t)||e.isInterfaceDeclaration(t)||ki(t)||e.isModuleDeclaration(t)&&!A(t)&&!N(t)}}(_||(_={})),function(e){e.createBaseNodeFactory=function(){var t,r,n,i,a;return{createBaseSourceFileNode:function(t){return new(a||(a=e.objectAllocator.getSourceFileConstructor()))(t,-1,-1)},createBaseIdentifierNode:function(t){return new(n||(n=e.objectAllocator.getIdentifierConstructor()))(t,-1,-1)},createBasePrivateIdentifierNode:function(t){return new(i||(i=e.objectAllocator.getPrivateIdentifierConstructor()))(t,-1,-1)},createBaseTokenNode:function(t){return new(r||(r=e.objectAllocator.getTokenConstructor()))(t,-1,-1)},createBaseNode:function(r){return new(t||(t=e.objectAllocator.getNodeConstructor()))(r,-1,-1)}}}}(_||(_={})),function(e){e.createParenthesizerRules=function(t){var r,n;return{getParenthesizeLeftSideOfBinaryForOperator:function(t){r||(r=new e.Map);var n=r.get(t);n||(n=function(e){return o(t,e)},r.set(t,n));return n},getParenthesizeRightSideOfBinaryForOperator:function(t){n||(n=new e.Map);var r=n.get(t);r||(r=function(e){return s(t,void 0,e)},n.set(t,r));return r},parenthesizeLeftSideOfBinary:o,parenthesizeRightSideOfBinary:s,parenthesizeExpressionOfComputedPropertyName:function(r){return e.isCommaSequence(r)?t.createParenthesizedExpression(r):r},parenthesizeConditionOfConditionalExpression:function(r){var n=e.getOperatorPrecedence(224,57),i=e.skipPartiallyEmittedExpressions(r),a=e.getExpressionPrecedence(i);if(1!==e.compareValues(a,n))return t.createParenthesizedExpression(r);return r},parenthesizeBranchOfConditionalExpression:function(r){var n=e.skipPartiallyEmittedExpressions(r);return e.isCommaSequence(n)?t.createParenthesizedExpression(r):r},parenthesizeExpressionOfExportDefault:function(r){var n=e.skipPartiallyEmittedExpressions(r),i=e.isCommaSequence(n);if(!i)switch(e.getLeftmostExpression(n,!1).kind){case 228:case 215:i=!0}return i?t.createParenthesizedExpression(r):r},parenthesizeExpressionOfNew:function(r){var n=e.getLeftmostExpression(r,!0);switch(n.kind){case 210:return t.createParenthesizedExpression(r);case 211:return n.arguments?r:t.createParenthesizedExpression(r)}return c(r)},parenthesizeLeftSideOfAccess:c,parenthesizeOperandOfPostfixUnary:function(r){return e.isLeftHandSideExpression(r)?r:e.setTextRange(t.createParenthesizedExpression(r),r)},parenthesizeOperandOfPrefixUnary:function(r){return e.isUnaryExpression(r)?r:e.setTextRange(t.createParenthesizedExpression(r),r)},parenthesizeExpressionsOfCommaDelimitedList:function(r){var n=e.sameMap(r,u);return e.setTextRange(t.createNodeArray(n,r.hasTrailingComma),r)},parenthesizeExpressionForDisallowedComma:u,parenthesizeExpressionOfExpressionStatement:function(r){var n=e.skipPartiallyEmittedExpressions(r);if(e.isCallExpression(n)){var i=n.expression,a=e.skipPartiallyEmittedExpressions(i).kind;if(215===a||216===a){var o=t.updateCallExpression(n,e.setTextRange(t.createParenthesizedExpression(i),i),n.typeArguments,n.arguments);return t.restoreOuterExpressions(r,o,8)}}var s=e.getLeftmostExpression(n,!1).kind;if(207===s||215===s)return e.setTextRange(t.createParenthesizedExpression(r),r);return r},parenthesizeConciseBodyOfArrowFunction:function(r){if(!e.isBlock(r)&&(e.isCommaSequence(r)||207===e.getLeftmostExpression(r,!1).kind))return e.setTextRange(t.createParenthesizedExpression(r),r);return r},parenthesizeCheckTypeOfConditionalType:l,parenthesizeExtendsTypeOfConditionalType:function(e){if(191===e.kind)return t.createParenthesizedType(e);return e},parenthesizeConstituentTypesOfUnionType:function(r){return t.createNodeArray(e.sameMap(r,_))},parenthesizeConstituentTypeOfUnionType:_,parenthesizeConstituentTypesOfIntersectionType:function(r){return t.createNodeArray(e.sameMap(r,d))},parenthesizeConstituentTypeOfIntersectionType:d,parenthesizeOperandOfTypeOperator:p,parenthesizeOperandOfReadonlyTypeOperator:function(e){if(195===e.kind)return t.createParenthesizedType(e);return p(e)},parenthesizeNonArrayTypeOfPostfixType:f,parenthesizeElementTypesOfTupleType:function(r){return t.createNodeArray(e.sameMap(r,g))},parenthesizeElementTypeOfTupleType:g,parenthesizeTypeOfOptionalType:function(e){return m(e)?t.createParenthesizedType(e):f(e)},parenthesizeTypeArguments:function(r){if(e.some(r))return t.createNodeArray(e.sameMap(r,v))},parenthesizeLeadingTypeArgument:y};function i(t){if(t=e.skipPartiallyEmittedExpressions(t),e.isLiteralKind(t.kind))return t.kind;if(223===t.kind&&39===t.operatorToken.kind){if(void 0!==t.cachedLiteralKind)return t.cachedLiteralKind;var r=i(t.left),n=e.isLiteralKind(r)&&r===i(t.right)?r:0;return t.cachedLiteralKind=n,n}return 0}function a(r,n,a,o){return 214===e.skipPartiallyEmittedExpressions(n).kind?n:function(t,r,n,a){var o=e.getOperatorPrecedence(223,t),s=e.getOperatorAssociativity(223,t),c=e.skipPartiallyEmittedExpressions(r);if(!n&&216===r.kind&&o>3)return!0;var u=e.getExpressionPrecedence(c);switch(e.compareValues(u,o)){case-1:return!(!n&&1===s&&226===r.kind);case 1:return!1;case 0:if(n)return 1===s;if(e.isBinaryExpression(c)&&c.operatorToken.kind===t){if(function(e){return 41===e||51===e||50===e||52===e||27===e}(t))return!1;if(39===t){var l=a?i(a):0;if(e.isLiteralKind(l)&&l===i(c))return!1}}return 0===e.getExpressionAssociativity(c)}}(r,n,a,o)?t.createParenthesizedExpression(n):n}function o(e,t){return a(e,t,!0)}function s(e,t,r){return a(e,r,!1,t)}function c(r,n){var i=e.skipPartiallyEmittedExpressions(r);return!e.isLeftHandSideExpression(i)||211===i.kind&&!i.arguments||!n&&e.isOptionalChain(i)?e.setTextRange(t.createParenthesizedExpression(r),r):r}function u(r){var n=e.skipPartiallyEmittedExpressions(r);return e.getExpressionPrecedence(n)>e.getOperatorPrecedence(223,27)?r:e.setTextRange(t.createParenthesizedExpression(r),r)}function l(e){switch(e.kind){case 181:case 182:case 191:return t.createParenthesizedType(e)}return e}function _(e){switch(e.kind){case 189:case 190:return t.createParenthesizedType(e)}return l(e)}function d(e){switch(e.kind){case 189:case 190:return t.createParenthesizedType(e)}return _(e)}function p(e){return 190===e.kind?t.createParenthesizedType(e):d(e)}function f(e){switch(e.kind){case 192:case 195:case 183:return t.createParenthesizedType(e)}return p(e)}function g(e){return m(e)?t.createParenthesizedType(e):e}function m(t){return e.isJSDocNullableType(t)?t.postfix:e.isNamedTupleMember(t)||e.isFunctionTypeNode(t)||e.isConstructorTypeNode(t)||e.isTypeOperatorNode(t)?m(t.type):e.isConditionalTypeNode(t)?m(t.falseType):e.isUnionTypeNode(t)||e.isIntersectionTypeNode(t)?m(e.last(t.types)):!!e.isInferTypeNode(t)&&(!!t.typeParameter.constraint&&m(t.typeParameter.constraint))}function y(r){return e.isFunctionOrConstructorTypeNode(r)&&r.typeParameters?t.createParenthesizedType(r):r}function v(e,t){return 0===t?y(e):e}},e.nullParenthesizerRules={getParenthesizeLeftSideOfBinaryForOperator:function(t){return e.identity},getParenthesizeRightSideOfBinaryForOperator:function(t){return e.identity},parenthesizeLeftSideOfBinary:function(e,t){return t},parenthesizeRightSideOfBinary:function(e,t,r){return r},parenthesizeExpressionOfComputedPropertyName:e.identity,parenthesizeConditionOfConditionalExpression:e.identity,parenthesizeBranchOfConditionalExpression:e.identity,parenthesizeExpressionOfExportDefault:e.identity,parenthesizeExpressionOfNew:function(t){return e.cast(t,e.isLeftHandSideExpression)},parenthesizeLeftSideOfAccess:function(t){return e.cast(t,e.isLeftHandSideExpression)},parenthesizeOperandOfPostfixUnary:function(t){return e.cast(t,e.isLeftHandSideExpression)},parenthesizeOperandOfPrefixUnary:function(t){return e.cast(t,e.isUnaryExpression)},parenthesizeExpressionsOfCommaDelimitedList:function(t){return e.cast(t,e.isNodeArray)},parenthesizeExpressionForDisallowedComma:e.identity,parenthesizeExpressionOfExpressionStatement:e.identity,parenthesizeConciseBodyOfArrowFunction:e.identity,parenthesizeCheckTypeOfConditionalType:e.identity,parenthesizeExtendsTypeOfConditionalType:e.identity,parenthesizeConstituentTypesOfUnionType:function(t){return e.cast(t,e.isNodeArray)},parenthesizeConstituentTypeOfUnionType:e.identity,parenthesizeConstituentTypesOfIntersectionType:function(t){return e.cast(t,e.isNodeArray)},parenthesizeConstituentTypeOfIntersectionType:e.identity,parenthesizeOperandOfTypeOperator:e.identity,parenthesizeOperandOfReadonlyTypeOperator:e.identity,parenthesizeNonArrayTypeOfPostfixType:e.identity,parenthesizeElementTypesOfTupleType:function(t){return e.cast(t,e.isNodeArray)},parenthesizeElementTypeOfTupleType:e.identity,parenthesizeTypeOfOptionalType:e.identity,parenthesizeTypeArguments:function(t){return t&&e.cast(t,e.isNodeArray)},parenthesizeLeadingTypeArgument:e.identity}}(_||(_={})),function(e){e.createNodeConverters=function(t){return{convertToFunctionBlock:function(r,n){if(e.isBlock(r))return r;var i=t.createReturnStatement(r);e.setTextRange(i,r);var a=t.createBlock([i],n);return e.setTextRange(a,r),a},convertToFunctionExpression:function(r){if(!r.body)return e.Debug.fail("Cannot convert a FunctionDeclaration without a body");var n=t.createFunctionExpression(r.modifiers,r.asteriskToken,r.name,r.typeParameters,r.parameters,r.type,r.body);e.setOriginalNode(n,r),e.setTextRange(n,r),e.getStartsOnNewLine(r)&&e.setStartsOnNewLine(n,!0);return n},convertToArrayAssignmentElement:r,convertToObjectAssignmentElement:n,convertToAssignmentPattern:i,convertToObjectAssignmentPattern:a,convertToArrayAssignmentPattern:o,convertToAssignmentElementTarget:s};function r(r){if(e.isBindingElement(r)){if(r.dotDotDotToken)return e.Debug.assertNode(r.name,e.isIdentifier),e.setOriginalNode(e.setTextRange(t.createSpreadElement(r.name),r),r);var n=s(r.name);return r.initializer?e.setOriginalNode(e.setTextRange(t.createAssignment(n,r.initializer),r),r):n}return e.cast(r,e.isExpression)}function n(r){if(e.isBindingElement(r)){if(r.dotDotDotToken)return e.Debug.assertNode(r.name,e.isIdentifier),e.setOriginalNode(e.setTextRange(t.createSpreadAssignment(r.name),r),r);if(r.propertyName){var n=s(r.name);return e.setOriginalNode(e.setTextRange(t.createPropertyAssignment(r.propertyName,r.initializer?t.createAssignment(n,r.initializer):n),r),r)}return e.Debug.assertNode(r.name,e.isIdentifier),e.setOriginalNode(e.setTextRange(t.createShorthandPropertyAssignment(r.name,r.initializer),r),r)}return e.cast(r,e.isObjectLiteralElementLike)}function i(e){switch(e.kind){case 204:case 206:return o(e);case 203:case 207:return a(e)}}function a(r){return e.isObjectBindingPattern(r)?e.setOriginalNode(e.setTextRange(t.createObjectLiteralExpression(e.map(r.elements,n)),r),r):e.cast(r,e.isObjectLiteralExpression)}function o(n){return e.isArrayBindingPattern(n)?e.setOriginalNode(e.setTextRange(t.createArrayLiteralExpression(e.map(n.elements,r)),n),n):e.cast(n,e.isArrayLiteralExpression)}function s(t){return e.isBindingPattern(t)?i(t):e.cast(t,e.isExpression)}},e.nullNodeConverters={convertToFunctionBlock:e.notImplemented,convertToFunctionExpression:e.notImplemented,convertToArrayAssignmentElement:e.notImplemented,convertToObjectAssignmentElement:e.notImplemented,convertToAssignmentPattern:e.notImplemented,convertToObjectAssignmentPattern:e.notImplemented,convertToArrayAssignmentPattern:e.notImplemented,convertToAssignmentElementTarget:e.notImplemented}}(_||(_={})),function(e){var t,r=0;function n(n,p){var f=8&n?i:o,g=e.memoize((function(){return 1&n?e.nullParenthesizerRules:e.createParenthesizerRules(F)})),m=e.memoize((function(){return 2&n?e.nullNodeConverters:e.createNodeConverters(F)})),y=e.memoizeOne((function(e){return function(t,r){return jt(t,e,r)}})),h=e.memoizeOne((function(e){return function(t){return Rt(e,t)}})),b=e.memoizeOne((function(e){return function(t){return Bt(t,e)}})),x=e.memoizeOne((function(e){return function(){return function(e){return w(e)}(e)}})),D=e.memoizeOne((function(e){return function(t){return ln(e,t)}})),S=e.memoizeOne((function(e){return function(t,r){return function(e,t,r){return t.type!==r?f(ln(e,r),t):t}(e,t,r)}})),T=e.memoizeOne((function(e){return function(t,r){return un(e,t,r)}})),C=e.memoizeOne((function(e){return function(t,r){return function(e,t,r){return t.type!==r?f(un(e,r,t.postfix),t):t}(e,t,r)}})),E=e.memoizeOne((function(e){return function(t,r){return Fn(e,t,r)}})),k=e.memoizeOne((function(e){return function(t,r,n){return function(e,t,r,n){void 0===r&&(r=gn(t));return t.tagName!==r||t.comment!==n?f(Fn(e,r,n),t):t}(e,t,r,n)}})),N=e.memoizeOne((function(e){return function(t,r,n){return Pn(e,t,r,n)}})),A=e.memoizeOne((function(e){return function(t,r,n,i){return function(e,t,r,n,i){void 0===r&&(r=gn(t));return t.tagName!==r||t.typeExpression!==n||t.comment!==i?f(Pn(e,r,n,i),t):t}(e,t,r,n,i)}})),F={get parenthesizer(){return g()},get converters(){return m()},baseFactory:p,flags:n,createNodeArray:P,createNumericLiteral:V,createBigIntLiteral:q,createStringLiteral:H,createStringLiteralFromNode:function(t){var r=W(e.getTextOfIdentifierOrLiteral(t),void 0);return r.textSourceNode=t,r},createRegularExpressionLiteral:G,createLiteralLikeNode:function(e,t){switch(e){case 8:return V(t,0);case 9:return q(t);case 10:return H(t,void 0);case 11:return Jn(t,!1);case 12:return Jn(t,!0);case 13:return G(t);case 14:return Vt(e,t,void 0,0)}},createIdentifier:Y,updateIdentifier:function(t,r){return t.typeArguments!==r?f(Y(e.idText(t),r),t):t},createTempVariable:Z,createLoopVariable:function(e){var t=2;e&&(t|=8);return X("",t,void 0,void 0)},createUniqueName:function(t,r,n,i){void 0===r&&(r=0);return e.Debug.assert(!(7&r),"Argument out of range: flags"),e.Debug.assert(32!=(48&r),"GeneratedIdentifierFlags.FileLevel cannot be set without also setting GeneratedIdentifierFlags.Optimistic"),X(t,3|r,n,i)},getGeneratedNameForNode:$,createPrivateIdentifier:function(t){e.startsWith(t,"#")||e.Debug.fail("First character of private identifier must be #: "+t);return ee(t)},createUniquePrivateName:function(t,r,n){t&&!e.startsWith(t,"#")&&e.Debug.fail("First character of private identifier must be #: "+t);return te(null!=t?t:"",8|(t?3:1),r,n)},getGeneratedPrivateNameForNode:function(t,r,n){var i=e.isMemberName(t)?e.formatGeneratedName(!0,r,t,n,e.idText):"#generated@".concat(e.getNodeId(t)),a=r||n?16:0,o=te(i,4|a,r,n);return o.original=t,o},createToken:ne,createSuper:function(){return ne(106)},createThis:ie,createNull:function(){return ne(104)},createTrue:ae,createFalse:oe,createModifier:se,createModifiersFromModifierFlags:ce,createQualifiedName:ue,updateQualifiedName:function(e,t,r){return e.left!==t||e.right!==r?f(ue(t,r),e):e},createComputedPropertyName:le,updateComputedPropertyName:function(e,t){return e.expression!==t?f(le(t),e):e},createTypeParameterDeclaration:_e,updateTypeParameterDeclaration:de,createParameterDeclaration:pe,updateParameterDeclaration:fe,createDecorator:ge,updateDecorator:function(e,t){return e.expression!==t?f(ge(t),e):e},createPropertySignature:me,updatePropertySignature:ye,createPropertyDeclaration:ve,updatePropertyDeclaration:he,createMethodSignature:be,updateMethodSignature:xe,createMethodDeclaration:De,updateMethodDeclaration:Se,createConstructorDeclaration:Ce,updateConstructorDeclaration:Ee,createGetAccessorDeclaration:ke,updateGetAccessorDeclaration:Ne,createSetAccessorDeclaration:Ae,updateSetAccessorDeclaration:Fe,createCallSignature:Pe,updateCallSignature:function(e,t,r,n){return e.typeParameters!==t||e.parameters!==r||e.type!==n?R(Pe(t,r,n),e):e},createConstructSignature:we,updateConstructSignature:function(e,t,r,n){return e.typeParameters!==t||e.parameters!==r||e.type!==n?R(we(t,r,n),e):e},createIndexSignature:Ie,updateIndexSignature:Oe,createClassStaticBlockDeclaration:Te,updateClassStaticBlockDeclaration:function(e,t){return e.body!==t?function(e,t){e!==t&&(e.illegalDecorators=t.illegalDecorators,e.modifiers=t.modifiers);return f(e,t)}(Te(t),e):e},createTemplateLiteralTypeSpan:Me,updateTemplateLiteralTypeSpan:function(e,t,r){return e.type!==t||e.literal!==r?f(Me(t,r),e):e},createKeywordTypeNode:function(e){return ne(e)},createTypePredicateNode:Le,updateTypePredicateNode:function(e,t,r,n){return e.assertsModifier!==t||e.parameterName!==r||e.type!==n?f(Le(t,r,n),e):e},createTypeReferenceNode:Re,updateTypeReferenceNode:function(e,t,r){return e.typeName!==t||e.typeArguments!==r?f(Re(t,r),e):e},createFunctionTypeNode:Be,updateFunctionTypeNode:function(e,t,r,n){return e.typeParameters!==t||e.parameters!==r||e.type!==n?function(e,t){e!==t&&(e.modifiers=t.modifiers);return R(e,t)}(Be(t,r,n),e):e},createConstructorTypeNode:je,updateConstructorTypeNode:function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return 5===t.length?Ue.apply(void 0,t):4===t.length?Ke.apply(void 0,t):e.Debug.fail("Incorrect number of arguments specified.")},createTypeQueryNode:Ve,updateTypeQueryNode:function(e,t,r){return e.exprName!==t||e.typeArguments!==r?f(Ve(t,r),e):e},createTypeLiteralNode:qe,updateTypeLiteralNode:function(e,t){return e.members!==t?f(qe(t),e):e},createArrayTypeNode:We,updateArrayTypeNode:function(e,t){return e.elementType!==t?f(We(t),e):e},createTupleTypeNode:He,updateTupleTypeNode:function(e,t){return e.elements!==t?f(He(t),e):e},createNamedTupleMember:Ge,updateNamedTupleMember:function(e,t,r,n,i){return e.dotDotDotToken!==t||e.name!==r||e.questionToken!==n||e.type!==i?f(Ge(t,r,n,i),e):e},createOptionalTypeNode:Qe,updateOptionalTypeNode:function(e,t){return e.type!==t?f(Qe(t),e):e},createRestTypeNode:Xe,updateRestTypeNode:function(e,t){return e.type!==t?f(Xe(t),e):e},createUnionTypeNode:function(e){return Ye(189,e,g().parenthesizeConstituentTypesOfUnionType)},updateUnionTypeNode:function(e,t){return Ze(e,t,g().parenthesizeConstituentTypesOfUnionType)},createIntersectionTypeNode:function(e){return Ye(190,e,g().parenthesizeConstituentTypesOfIntersectionType)},updateIntersectionTypeNode:function(e,t){return Ze(e,t,g().parenthesizeConstituentTypesOfIntersectionType)},createConditionalTypeNode:$e,updateConditionalTypeNode:function(e,t,r,n,i){return e.checkType!==t||e.extendsType!==r||e.trueType!==n||e.falseType!==i?f($e(t,r,n,i),e):e},createInferTypeNode:et,updateInferTypeNode:function(e,t){return e.typeParameter!==t?f(et(t),e):e},createImportTypeNode:rt,updateImportTypeNode:function(e,t,r,n,i,a){void 0===a&&(a=e.isTypeOf);return e.argument!==t||e.assertions!==r||e.qualifier!==n||e.typeArguments!==i||e.isTypeOf!==a?f(rt(t,r,n,i,a),e):e},createParenthesizedType:nt,updateParenthesizedType:function(e,t){return e.type!==t?f(nt(t),e):e},createThisTypeNode:function(){var e=w(194);return e.transformFlags=1,e},createTypeOperatorNode:it,updateTypeOperatorNode:function(e,t){return e.type!==t?f(it(e.operator,t),e):e},createIndexedAccessTypeNode:at,updateIndexedAccessTypeNode:function(e,t,r){return e.objectType!==t||e.indexType!==r?f(at(t,r),e):e},createMappedTypeNode:ot,updateMappedTypeNode:function(e,t,r,n,i,a,o){return e.readonlyToken!==t||e.typeParameter!==r||e.nameType!==n||e.questionToken!==i||e.type!==a||e.members!==o?f(ot(t,r,n,i,a,o),e):e},createLiteralTypeNode:st,updateLiteralTypeNode:function(e,t){return e.literal!==t?f(st(t),e):e},createTemplateLiteralType:tt,updateTemplateLiteralType:function(e,t,r){return e.head!==t||e.templateSpans!==r?f(tt(t,r),e):e},createObjectBindingPattern:ct,updateObjectBindingPattern:function(e,t){return e.elements!==t?f(ct(t),e):e},createArrayBindingPattern:ut,updateArrayBindingPattern:function(e,t){return e.elements!==t?f(ut(t),e):e},createBindingElement:lt,updateBindingElement:function(e,t,r,n,i){return e.propertyName!==r||e.dotDotDotToken!==t||e.name!==n||e.initializer!==i?f(lt(t,r,n,i),e):e},createArrayLiteralExpression:dt,updateArrayLiteralExpression:function(e,t){return e.elements!==t?f(dt(t,e.multiLine),e):e},createObjectLiteralExpression:pt,updateObjectLiteralExpression:function(e,t){return e.properties!==t?f(pt(t,e.multiLine),e):e},createPropertyAccessExpression:4&n?function(t,r){return e.setEmitFlags(ft(t,r),131072)}:ft,updatePropertyAccessExpression:function(t,r,n){if(e.isPropertyAccessChain(t))return mt(t,r,t.questionDotToken,e.cast(n,e.isIdentifier));return t.expression!==r||t.name!==n?f(ft(r,n),t):t},createPropertyAccessChain:4&n?function(t,r,n){return e.setEmitFlags(gt(t,r,n),131072)}:gt,updatePropertyAccessChain:mt,createElementAccessExpression:yt,updateElementAccessExpression:function(t,r,n){if(e.isElementAccessChain(t))return ht(t,r,t.questionDotToken,n);return t.expression!==r||t.argumentExpression!==n?f(yt(r,n),t):t},createElementAccessChain:vt,updateElementAccessChain:ht,createCallExpression:bt,updateCallExpression:function(t,r,n,i){if(e.isCallChain(t))return Dt(t,r,t.questionDotToken,n,i);return t.expression!==r||t.typeArguments!==n||t.arguments!==i?f(bt(r,n,i),t):t},createCallChain:xt,updateCallChain:Dt,createNewExpression:St,updateNewExpression:function(e,t,r,n){return e.expression!==t||e.typeArguments!==r||e.arguments!==n?f(St(t,r,n),e):e},createTaggedTemplateExpression:Tt,updateTaggedTemplateExpression:function(e,t,r,n){return e.tag!==t||e.typeArguments!==r||e.template!==n?f(Tt(t,r,n),e):e},createTypeAssertion:Ct,updateTypeAssertion:Et,createParenthesizedExpression:kt,updateParenthesizedExpression:Nt,createFunctionExpression:At,updateFunctionExpression:Ft,createArrowFunction:Pt,updateArrowFunction:wt,createDeleteExpression:It,updateDeleteExpression:function(e,t){return e.expression!==t?f(It(t),e):e},createTypeOfExpression:Ot,updateTypeOfExpression:function(e,t){return e.expression!==t?f(Ot(t),e):e},createVoidExpression:Mt,updateVoidExpression:function(e,t){return e.expression!==t?f(Mt(t),e):e},createAwaitExpression:Lt,updateAwaitExpression:function(e,t){return e.expression!==t?f(Lt(t),e):e},createPrefixUnaryExpression:Rt,updatePrefixUnaryExpression:function(e,t){return e.operand!==t?f(Rt(e.operator,t),e):e},createPostfixUnaryExpression:Bt,updatePostfixUnaryExpression:function(e,t){return e.operand!==t?f(Bt(t,e.operator),e):e},createBinaryExpression:jt,updateBinaryExpression:function(e,t,r,n){return e.left!==t||e.operatorToken!==r||e.right!==n?f(jt(t,r,n),e):e},createConditionalExpression:zt,updateConditionalExpression:function(e,t,r,n,i,a){return e.condition!==t||e.questionToken!==r||e.whenTrue!==n||e.colonToken!==i||e.whenFalse!==a?f(zt(t,r,n,i,a),e):e},createTemplateExpression:Ut,updateTemplateExpression:function(e,t,r){return e.head!==t||e.templateSpans!==r?f(Ut(t,r),e):e},createTemplateHead:function(e,t,r){return Kt(15,e,t,r)},createTemplateMiddle:function(e,t,r){return Kt(16,e,t,r)},createTemplateTail:function(e,t,r){return Kt(17,e,t,r)},createNoSubstitutionTemplateLiteral:function(e,t,r){return Kt(14,e,t,r)},createTemplateLiteralLikeNode:Vt,createYieldExpression:qt,updateYieldExpression:function(e,t,r){return e.expression!==r||e.asteriskToken!==t?f(qt(t,r),e):e},createSpreadElement:Wt,updateSpreadElement:function(e,t){return e.expression!==t?f(Wt(t),e):e},createClassExpression:Ht,updateClassExpression:Gt,createOmittedExpression:function(){return _t(229)},createExpressionWithTypeArguments:Qt,updateExpressionWithTypeArguments:function(e,t,r){return e.expression!==t||e.typeArguments!==r?f(Qt(t,r),e):e},createAsExpression:Xt,updateAsExpression:Yt,createNonNullExpression:Zt,updateNonNullExpression:$t,createSatisfiesExpression:er,updateSatisfiesExpression:tr,createNonNullChain:rr,updateNonNullChain:nr,createMetaProperty:ir,updateMetaProperty:function(e,t){return e.name!==t?f(ir(e.keywordToken,t),e):e},createTemplateSpan:ar,updateTemplateSpan:function(e,t,r){return e.expression!==t||e.literal!==r?f(ar(t,r),e):e},createSemicolonClassElement:function(){var e=w(237);return e.transformFlags|=1024,e},createBlock:or,updateBlock:function(e,t){return e.statements!==t?f(or(t,e.multiLine),e):e},createVariableStatement:sr,updateVariableStatement:cr,createEmptyStatement:ur,createExpressionStatement:lr,updateExpressionStatement:function(e,t){return e.expression!==t?f(lr(t),e):e},createIfStatement:_r,updateIfStatement:function(e,t,r,n){return e.expression!==t||e.thenStatement!==r||e.elseStatement!==n?f(_r(t,r,n),e):e},createDoStatement:dr,updateDoStatement:function(e,t,r){return e.statement!==t||e.expression!==r?f(dr(t,r),e):e},createWhileStatement:pr,updateWhileStatement:function(e,t,r){return e.expression!==t||e.statement!==r?f(pr(t,r),e):e},createForStatement:fr,updateForStatement:function(e,t,r,n,i){return e.initializer!==t||e.condition!==r||e.incrementor!==n||e.statement!==i?f(fr(t,r,n,i),e):e},createForInStatement:gr,updateForInStatement:function(e,t,r,n){return e.initializer!==t||e.expression!==r||e.statement!==n?f(gr(t,r,n),e):e},createForOfStatement:mr,updateForOfStatement:function(e,t,r,n,i){return e.awaitModifier!==t||e.initializer!==r||e.expression!==n||e.statement!==i?f(mr(t,r,n,i),e):e},createContinueStatement:yr,updateContinueStatement:function(e,t){return e.label!==t?f(yr(t),e):e},createBreakStatement:vr,updateBreakStatement:function(e,t){return e.label!==t?f(vr(t),e):e},createReturnStatement:hr,updateReturnStatement:function(e,t){return e.expression!==t?f(hr(t),e):e},createWithStatement:br,updateWithStatement:function(e,t,r){return e.expression!==t||e.statement!==r?f(br(t,r),e):e},createSwitchStatement:xr,updateSwitchStatement:function(e,t,r){return e.expression!==t||e.caseBlock!==r?f(xr(t,r),e):e},createLabeledStatement:Dr,updateLabeledStatement:Sr,createThrowStatement:Tr,updateThrowStatement:function(e,t){return e.expression!==t?f(Tr(t),e):e},createTryStatement:Cr,updateTryStatement:function(e,t,r,n){return e.tryBlock!==t||e.catchClause!==r||e.finallyBlock!==n?f(Cr(t,r,n),e):e},createDebuggerStatement:function(){return w(256)},createVariableDeclaration:Er,updateVariableDeclaration:function(e,t,r,n,i){return e.name!==t||e.type!==n||e.exclamationToken!==r||e.initializer!==i?f(Er(t,r,n,i),e):e},createVariableDeclarationList:kr,updateVariableDeclarationList:function(e,t){return e.declarations!==t?f(kr(t,e.flags),e):e},createFunctionDeclaration:Nr,updateFunctionDeclaration:Ar,createClassDeclaration:Fr,updateClassDeclaration:Pr,createInterfaceDeclaration:wr,updateInterfaceDeclaration:Ir,createTypeAliasDeclaration:Or,updateTypeAliasDeclaration:Mr,createEnumDeclaration:Lr,updateEnumDeclaration:Rr,createModuleDeclaration:Br,updateModuleDeclaration:jr,createModuleBlock:Jr,updateModuleBlock:function(e,t){return e.statements!==t?f(Jr(t),e):e},createCaseBlock:zr,updateCaseBlock:function(e,t){return e.clauses!==t?f(zr(t),e):e},createNamespaceExportDeclaration:Ur,updateNamespaceExportDeclaration:function(e,t){return e.name!==t?function(e,t){e!==t&&(e.illegalDecorators=t.illegalDecorators,e.modifiers=t.modifiers);return f(e,t)}(Ur(t),e):e},createImportEqualsDeclaration:Kr,updateImportEqualsDeclaration:Vr,createImportDeclaration:qr,updateImportDeclaration:Wr,createImportClause:Hr,updateImportClause:function(e,t,r,n){return e.isTypeOnly!==t||e.name!==r||e.namedBindings!==n?f(Hr(t,r,n),e):e},createAssertClause:Gr,updateAssertClause:function(e,t,r){return e.elements!==t||e.multiLine!==r?f(Gr(t,r),e):e},createAssertEntry:Qr,updateAssertEntry:function(e,t,r){return e.name!==t||e.value!==r?f(Qr(t,r),e):e},createImportTypeAssertionContainer:Xr,updateImportTypeAssertionContainer:function(e,t,r){return e.assertClause!==t||e.multiLine!==r?f(Xr(t,r),e):e},createNamespaceImport:Yr,updateNamespaceImport:function(e,t){return e.name!==t?f(Yr(t),e):e},createNamespaceExport:Zr,updateNamespaceExport:function(e,t){return e.name!==t?f(Zr(t),e):e},createNamedImports:$r,updateNamedImports:function(e,t){return e.elements!==t?f($r(t),e):e},createImportSpecifier:en,updateImportSpecifier:function(e,t,r,n){return e.isTypeOnly!==t||e.propertyName!==r||e.name!==n?f(en(t,r,n),e):e},createExportAssignment:tn,updateExportAssignment:rn,createExportDeclaration:nn,updateExportDeclaration:an,createNamedExports:on,updateNamedExports:function(e,t){return e.elements!==t?f(on(t),e):e},createExportSpecifier:sn,updateExportSpecifier:function(e,t,r,n){return e.isTypeOnly!==t||e.propertyName!==r||e.name!==n?f(sn(t,r,n),e):e},createMissingDeclaration:function(){return I(279)},createExternalModuleReference:cn,updateExternalModuleReference:function(e,t){return e.expression!==t?f(cn(t),e):e},get createJSDocAllType(){return x(315)},get createJSDocUnknownType(){return x(316)},get createJSDocNonNullableType(){return T(318)},get updateJSDocNonNullableType(){return C(318)},get createJSDocNullableType(){return T(317)},get updateJSDocNullableType(){return C(317)},get createJSDocOptionalType(){return D(319)},get updateJSDocOptionalType(){return S(319)},get createJSDocVariadicType(){return D(321)},get updateJSDocVariadicType(){return S(321)},get createJSDocNamepathType(){return D(322)},get updateJSDocNamepathType(){return S(322)},createJSDocFunctionType:_n,updateJSDocFunctionType:function(e,t,r){return e.parameters!==t||e.type!==r?f(_n(t,r),e):e},createJSDocTypeLiteral:dn,updateJSDocTypeLiteral:function(e,t,r){return e.jsDocPropertyTags!==t||e.isArrayType!==r?f(dn(t,r),e):e},createJSDocTypeExpression:pn,updateJSDocTypeExpression:function(e,t){return e.type!==t?f(pn(t),e):e},createJSDocSignature:fn,updateJSDocSignature:function(e,t,r,n){return e.typeParameters!==t||e.parameters!==r||e.type!==n?f(fn(t,r,n),e):e},createJSDocTemplateTag:yn,updateJSDocTemplateTag:function(e,t,r,n,i){void 0===t&&(t=gn(e));return e.tagName!==t||e.constraint!==r||e.typeParameters!==n||e.comment!==i?f(yn(t,r,n,i),e):e},createJSDocTypedefTag:vn,updateJSDocTypedefTag:function(e,t,r,n,i){void 0===t&&(t=gn(e));return e.tagName!==t||e.typeExpression!==r||e.fullName!==n||e.comment!==i?f(vn(t,r,n,i),e):e},createJSDocParameterTag:hn,updateJSDocParameterTag:function(e,t,r,n,i,a,o){void 0===t&&(t=gn(e));return e.tagName!==t||e.name!==r||e.isBracketed!==n||e.typeExpression!==i||e.isNameFirst!==a||e.comment!==o?f(hn(t,r,n,i,a,o),e):e},createJSDocPropertyTag:bn,updateJSDocPropertyTag:function(e,t,r,n,i,a,o){void 0===t&&(t=gn(e));return e.tagName!==t||e.name!==r||e.isBracketed!==n||e.typeExpression!==i||e.isNameFirst!==a||e.comment!==o?f(bn(t,r,n,i,a,o),e):e},createJSDocCallbackTag:xn,updateJSDocCallbackTag:function(e,t,r,n,i){void 0===t&&(t=gn(e));return e.tagName!==t||e.typeExpression!==r||e.fullName!==n||e.comment!==i?f(xn(t,r,n,i),e):e},createJSDocAugmentsTag:Dn,updateJSDocAugmentsTag:function(e,t,r,n){void 0===t&&(t=gn(e));return e.tagName!==t||e.class!==r||e.comment!==n?f(Dn(t,r,n),e):e},createJSDocImplementsTag:Sn,updateJSDocImplementsTag:function(e,t,r,n){void 0===t&&(t=gn(e));return e.tagName!==t||e.class!==r||e.comment!==n?f(Sn(t,r,n),e):e},createJSDocSeeTag:Tn,updateJSDocSeeTag:function(e,t,r,n){return e.tagName!==t||e.name!==r||e.comment!==n?f(Tn(t,r,n),e):e},createJSDocNameReference:Cn,updateJSDocNameReference:function(e,t){return e.name!==t?f(Cn(t),e):e},createJSDocMemberName:En,updateJSDocMemberName:function(e,t,r){return e.left!==t||e.right!==r?f(En(t,r),e):e},createJSDocLink:kn,updateJSDocLink:function(e,t,r){return e.name!==t?f(kn(t,r),e):e},createJSDocLinkCode:Nn,updateJSDocLinkCode:function(e,t,r){return e.name!==t?f(Nn(t,r),e):e},createJSDocLinkPlain:An,updateJSDocLinkPlain:function(e,t,r){return e.name!==t?f(An(t,r),e):e},get createJSDocTypeTag(){return N(346)},get updateJSDocTypeTag(){return A(346)},get createJSDocReturnTag(){return N(344)},get updateJSDocReturnTag(){return A(344)},get createJSDocThisTag(){return N(345)},get updateJSDocThisTag(){return A(345)},get createJSDocEnumTag(){return N(342)},get updateJSDocEnumTag(){return A(342)},get createJSDocAuthorTag(){return E(333)},get updateJSDocAuthorTag(){return k(333)},get createJSDocClassTag(){return E(335)},get updateJSDocClassTag(){return k(335)},get createJSDocPublicTag(){return E(336)},get updateJSDocPublicTag(){return k(336)},get createJSDocPrivateTag(){return E(337)},get updateJSDocPrivateTag(){return k(337)},get createJSDocProtectedTag(){return E(338)},get updateJSDocProtectedTag(){return k(338)},get createJSDocReadonlyTag(){return E(339)},get updateJSDocReadonlyTag(){return k(339)},get createJSDocOverrideTag(){return E(340)},get updateJSDocOverrideTag(){return k(340)},get createJSDocDeprecatedTag(){return E(334)},get updateJSDocDeprecatedTag(){return k(334)},createJSDocUnknownTag:wn,updateJSDocUnknownTag:function(e,t,r){return e.tagName!==t||e.comment!==r?f(wn(t,r),e):e},createJSDocText:In,updateJSDocText:function(e,t){return e.text!==t?f(In(t),e):e},createJSDocComment:On,updateJSDocComment:function(e,t,r){return e.comment!==t||e.tags!==r?f(On(t,r),e):e},createJsxElement:Mn,updateJsxElement:function(e,t,r,n){return e.openingElement!==t||e.children!==r||e.closingElement!==n?f(Mn(t,r,n),e):e},createJsxSelfClosingElement:Ln,updateJsxSelfClosingElement:function(e,t,r,n){return e.tagName!==t||e.typeArguments!==r||e.attributes!==n?f(Ln(t,r,n),e):e},createJsxOpeningElement:Rn,updateJsxOpeningElement:function(e,t,r,n){return e.tagName!==t||e.typeArguments!==r||e.attributes!==n?f(Rn(t,r,n),e):e},createJsxClosingElement:Bn,updateJsxClosingElement:function(e,t){return e.tagName!==t?f(Bn(t),e):e},createJsxFragment:jn,createJsxText:Jn,updateJsxText:function(e,t,r){return e.text!==t||e.containsOnlyTriviaWhiteSpaces!==r?f(Jn(t,r),e):e},createJsxOpeningFragment:function(){var e=w(286);return e.transformFlags|=2,e},createJsxJsxClosingFragment:function(){var e=w(287);return e.transformFlags|=2,e},updateJsxFragment:function(e,t,r,n){return e.openingFragment!==t||e.children!==r||e.closingFragment!==n?f(jn(t,r,n),e):e},createJsxAttribute:zn,updateJsxAttribute:function(e,t,r){return e.name!==t||e.initializer!==r?f(zn(t,r),e):e},createJsxAttributes:Un,updateJsxAttributes:function(e,t){return e.properties!==t?f(Un(t),e):e},createJsxSpreadAttribute:Kn,updateJsxSpreadAttribute:function(e,t){return e.expression!==t?f(Kn(t),e):e},createJsxExpression:Vn,updateJsxExpression:function(e,t){return e.expression!==t?f(Vn(e.dotDotDotToken,t),e):e},createCaseClause:qn,updateCaseClause:function(e,t,r){return e.expression!==t||e.statements!==r?f(qn(t,r),e):e},createDefaultClause:Wn,updateDefaultClause:function(e,t){return e.statements!==t?f(Wn(t),e):e},createHeritageClause:Hn,updateHeritageClause:function(e,t){return e.types!==t?f(Hn(e.token,t),e):e},createCatchClause:Gn,updateCatchClause:function(e,t,r){return e.variableDeclaration!==t||e.block!==r?f(Gn(t,r),e):e},createPropertyAssignment:Qn,updatePropertyAssignment:function(e,t,r){return e.name!==t||e.initializer!==r?function(e,t){e!==t&&(e.illegalDecorators=t.illegalDecorators,e.modifiers=t.modifiers,e.questionToken=t.questionToken,e.exclamationToken=t.exclamationToken);return f(e,t)}(Qn(t,r),e):e},createShorthandPropertyAssignment:Xn,updateShorthandPropertyAssignment:function(e,t,r){return e.name!==t||e.objectAssignmentInitializer!==r?function(e,t){e!==t&&(e.equalsToken=t.equalsToken,e.illegalDecorators=t.illegalDecorators,e.modifiers=t.modifiers,e.questionToken=t.questionToken,e.exclamationToken=t.exclamationToken);return f(e,t)}(Xn(t,r),e):e},createSpreadAssignment:Yn,updateSpreadAssignment:function(e,t){return e.expression!==t?f(Yn(t),e):e},createEnumMember:Zn,updateEnumMember:function(e,t,r){return e.name!==t||e.initializer!==r?f(Zn(t,r),e):e},createSourceFile:function(e,t,r){var n=p.createBaseSourceFileNode(308);return n.statements=P(e),n.endOfFileToken=t,n.flags|=r,n.fileName="",n.text="",n.languageVersion=0,n.languageVariant=0,n.scriptKind=0,n.isDeclarationFile=!1,n.hasNoDefaultLib=!1,n.transformFlags|=_(n.statements)|l(n.endOfFileToken),n},updateSourceFile:function(t,r,n,i,a,o,s){void 0===n&&(n=t.isDeclarationFile);void 0===i&&(i=t.referencedFiles);void 0===a&&(a=t.typeReferenceDirectives);void 0===o&&(o=t.hasNoDefaultLib);void 0===s&&(s=t.libReferenceDirectives);return t.statements!==r||t.isDeclarationFile!==n||t.referencedFiles!==i||t.typeReferenceDirectives!==a||t.hasNoDefaultLib!==o||t.libReferenceDirectives!==s?f(function(t,r,n,i,a,o,s){var c=t.redirectInfo?Object.create(t.redirectInfo.redirectTarget):p.createBaseSourceFileNode(308);for(var u in t)"emitNode"!==u&&!e.hasProperty(c,u)&&e.hasProperty(t,u)&&(c[u]=t[u]);return c.flags|=t.flags,c.statements=P(r),c.endOfFileToken=t.endOfFileToken,c.isDeclarationFile=n,c.referencedFiles=i,c.typeReferenceDirectives=a,c.hasNoDefaultLib=o,c.libReferenceDirectives=s,c.transformFlags=_(c.statements)|l(c.endOfFileToken),c.impliedNodeFormat=t.impliedNodeFormat,c}(t,r,n,i,a,o,s),t):t},createBundle:$n,updateBundle:function(t,r,n){void 0===n&&(n=e.emptyArray);return t.sourceFiles!==r||t.prepends!==n?f($n(r,n),t):t},createUnparsedSource:function(t,r,n){var i=w(310);return i.prologues=t,i.syntheticReferences=r,i.texts=n,i.fileName="",i.text="",i.referencedFiles=e.emptyArray,i.libReferenceDirectives=e.emptyArray,i.getLineAndCharacterOfPosition=function(t){return e.getLineAndCharacterOfPosition(i,t)},i},createUnparsedPrologue:function(e){return ei(303,e)},createUnparsedPrepend:function(e,t){var r=ei(304,e);return r.texts=t,r},createUnparsedTextLike:function(e,t){return ei(t?306:305,e)},createUnparsedSyntheticReference:function(e){var t=w(307);return t.data=e.data,t.section=e,t},createInputFiles:function(){var e=w(311);return e.javascriptText="",e.declarationText="",e},createSyntheticExpression:function(e,t,r){void 0===t&&(t=!1);var n=w(234);return n.type=e,n.isSpread=t,n.tupleNameSource=r,n},createSyntaxList:function(e){var t=w(351);return t._children=e,t},createNotEmittedStatement:function(t){var r=w(352);return r.original=t,e.setTextRange(r,t),r},createPartiallyEmittedExpression:ti,updatePartiallyEmittedExpression:ri,createCommaListExpression:ii,updateCommaListExpression:function(e,t){return e.elements!==t?f(ii(t),e):e},createEndOfDeclarationMarker:function(e){var t=w(356);return t.emitNode={},t.original=e,t},createMergeDeclarationMarker:function(e){var t=w(355);return t.emitNode={},t.original=e,t},createSyntheticReferenceExpression:ai,updateSyntheticReferenceExpression:function(e,t,r){return e.expression!==t||e.thisArg!==r?f(ai(t,r),e):e},cloneNode:oi,get createComma(){return y(27)},get createAssignment(){return y(63)},get createLogicalOr(){return y(56)},get createLogicalAnd(){return y(55)},get createBitwiseOr(){return y(51)},get createBitwiseXor(){return y(52)},get createBitwiseAnd(){return y(50)},get createStrictEquality(){return y(36)},get createStrictInequality(){return y(37)},get createEquality(){return y(34)},get createInequality(){return y(35)},get createLessThan(){return y(29)},get createLessThanEquals(){return y(32)},get createGreaterThan(){return y(31)},get createGreaterThanEquals(){return y(33)},get createLeftShift(){return y(47)},get createRightShift(){return y(48)},get createUnsignedRightShift(){return y(49)},get createAdd(){return y(39)},get createSubtract(){return y(40)},get createMultiply(){return y(41)},get createDivide(){return y(43)},get createModulo(){return y(44)},get createExponent(){return y(42)},get createPrefixPlus(){return h(39)},get createPrefixMinus(){return h(40)},get createPrefixIncrement(){return h(45)},get createPrefixDecrement(){return h(46)},get createBitwiseNot(){return h(54)},get createLogicalNot(){return h(53)},get createPostfixIncrement(){return b(45)},get createPostfixDecrement(){return b(46)},createImmediatelyInvokedFunctionExpression:function(e,t,r){return bt(At(void 0,void 0,void 0,void 0,t?[t]:[],void 0,or(e,!0)),void 0,r?[r]:[])},createImmediatelyInvokedArrowFunction:function(e,t,r){return bt(Pt(void 0,void 0,t?[t]:[],void 0,void 0,or(e,!0)),void 0,r?[r]:[])},createVoidZero:si,createExportDefault:function(e){return tn(void 0,!1,e)},createExternalModuleExport:function(e){return nn(void 0,!1,on([sn(!1,void 0,e)]))},createTypeCheck:function(e,t){return"undefined"===t?F.createStrictEquality(e,si()):F.createStrictEquality(Ot(e),H(t))},createMethodCall:ci,createGlobalMethodCall:ui,createFunctionBindCall:function(e,t,r){return ci(e,"bind",a([t],r,!0))},createFunctionCallCall:function(e,t,r){return ci(e,"call",a([t],r,!0))},createFunctionApplyCall:function(e,t,r){return ci(e,"apply",[t,r])},createArraySliceCall:function(e,t){return ci(e,"slice",void 0===t?[]:[xi(t)])},createArrayConcatCall:function(e,t){return ci(e,"concat",t)},createObjectDefinePropertyCall:function(e,t,r){return ui("Object","defineProperty",[e,xi(t),r])},createReflectGetCall:function(e,t,r){return ui("Reflect","get",r?[e,t,r]:[e,t])},createReflectSetCall:function(e,t,r,n){return ui("Reflect","set",n?[e,t,r,n]:[e,t,r])},createPropertyDescriptor:function(t,r){var n=[];li(n,"enumerable",xi(t.enumerable)),li(n,"configurable",xi(t.configurable));var i=li(n,"writable",xi(t.writable));i=li(n,"value",t.value)||i;var a=li(n,"get",t.get);return a=li(n,"set",t.set)||a,e.Debug.assert(!(i&&a),"A PropertyDescriptor may not be both an accessor descriptor and a data descriptor."),pt(n,!r)},createCallBinding:function(t,r,n,i){void 0===i&&(i=!1);var a,o,s=e.skipOuterExpressions(t,15);e.isSuperProperty(s)?(a=ie(),o=s):e.isSuperKeyword(s)?(a=ie(),o=void 0!==n&&n<2?e.setTextRange(Y("_super"),s):s):4096&e.getEmitFlags(s)?(a=si(),o=g().parenthesizeLeftSideOfAccess(s,!1)):e.isPropertyAccessExpression(s)?_i(s.expression,i)?(a=Z(r),o=ft(e.setTextRange(F.createAssignment(a,s.expression),s.expression),s.name),e.setTextRange(o,s)):(a=s.expression,o=s):e.isElementAccessExpression(s)?_i(s.expression,i)?(a=Z(r),o=yt(e.setTextRange(F.createAssignment(a,s.expression),s.expression),s.argumentExpression),e.setTextRange(o,s)):(a=s.expression,o=s):(a=si(),o=g().parenthesizeLeftSideOfAccess(t,!1));return{target:o,thisArg:a}},createAssignmentTargetWrapper:function(e,t){return ft(kt(pt([Ae(void 0,"value",[pe(void 0,void 0,e,void 0,void 0,void 0)],or([lr(t)]))])),"value")},inlineExpressions:function(t){return t.length>10?ii(t):e.reduceLeft(t,F.createComma)},getInternalName:function(e,t,r){return di(e,t,r,49152)},getLocalName:function(e,t,r){return di(e,t,r,16384)},getExportName:pi,getDeclarationName:function(e,t,r){return di(e,t,r)},getNamespaceMemberName:fi,getExternalModuleOrNamespaceExportName:function(t,r,n,i){if(t&&e.hasSyntacticModifier(r,1))return fi(t,di(r),n,i);return pi(r,n,i)},restoreOuterExpressions:function t(r,n,i){void 0===i&&(i=15);if(r&&e.isOuterExpression(r,i)&&(a=r,!(e.isParenthesizedExpression(a)&&e.nodeIsSynthesized(a)&&e.nodeIsSynthesized(e.getSourceMapRange(a))&&e.nodeIsSynthesized(e.getCommentRange(a)))||e.some(e.getSyntheticLeadingComments(a))||e.some(e.getSyntheticTrailingComments(a))))return function(e,t){switch(e.kind){case 214:return Nt(e,t);case 213:return Et(e,e.type,t);case 231:return Yt(e,t,e.type);case 235:return tr(e,t,e.type);case 232:return $t(e,t);case 353:return ri(e,t)}}(r,t(r.expression,n));var a;return n},restoreEnclosingLabel:function t(r,n,i){if(!n)return r;var a=Sr(n,n.label,e.isLabeledStatement(n.statement)?t(r,n.statement):r);i&&i(n);return a},createUseStrictPrologue:gi,copyPrologue:function(e,t,r,n){var i=mi(e,t,0,r);return yi(e,t,i,n)},copyStandardPrologue:mi,copyCustomPrologue:yi,ensureUseStrict:function(t){if(!e.findUseStrictPrologue(t))return e.setTextRange(P(a([gi()],t,!0)),t);return t},liftToBlock:function(t){return e.Debug.assert(e.every(t,e.isStatementOrBlock),"Cannot lift nodes to a Block."),e.singleOrUndefined(t)||or(t)},mergeLexicalEnvironment:function(t,r){if(!e.some(r))return t;var n=vi(t,e.isPrologueDirective,0),i=vi(t,e.isHoistedFunction,n),o=vi(t,e.isHoistedVariableStatement,i),s=vi(r,e.isPrologueDirective,0),c=vi(r,e.isHoistedFunction,s),u=vi(r,e.isHoistedVariableStatement,c),l=vi(r,e.isCustomPrologue,u);e.Debug.assert(l===r.length,"Expected declarations to be valid standard or custom prologues");var _=e.isNodeArray(t)?t.slice():t;l>u&&_.splice.apply(_,a([o,0],r.slice(u,l),!1));u>c&&_.splice.apply(_,a([i,0],r.slice(c,u),!1));c>s&&_.splice.apply(_,a([n,0],r.slice(s,c),!1));if(s>0)if(0===n)_.splice.apply(_,a([0,0],r.slice(0,s),!1));else{for(var d=new e.Map,p=0;p<n;p++){var f=t[p];d.set(f.expression.text,!0)}for(p=s-1;p>=0;p--){var g=r[p];d.has(g.expression.text)||_.unshift(g)}}if(e.isNodeArray(t))return e.setTextRange(P(_,t.hasTrailingComma),t);return t},updateModifiers:function(t,r){var n,i;i="number"==typeof r?ce(r):r;return e.isTypeParameterDeclaration(t)?de(t,i,t.name,t.constraint,t.default):e.isParameter(t)?fe(t,i,t.dotDotDotToken,t.name,t.questionToken,t.type,t.initializer):e.isConstructorTypeNode(t)?Ue(t,i,t.typeParameters,t.parameters,t.type):e.isPropertySignature(t)?ye(t,i,t.name,t.questionToken,t.type):e.isPropertyDeclaration(t)?he(t,i,t.name,null!==(n=t.questionToken)&&void 0!==n?n:t.exclamationToken,t.type,t.initializer):e.isMethodSignature(t)?xe(t,i,t.name,t.questionToken,t.typeParameters,t.parameters,t.type):e.isMethodDeclaration(t)?Se(t,i,t.asteriskToken,t.name,t.questionToken,t.typeParameters,t.parameters,t.type,t.body):e.isConstructorDeclaration(t)?Ee(t,i,t.parameters,t.body):e.isGetAccessorDeclaration(t)?Ne(t,i,t.name,t.parameters,t.type,t.body):e.isSetAccessorDeclaration(t)?Fe(t,i,t.name,t.parameters,t.body):e.isIndexSignatureDeclaration(t)?Oe(t,i,t.parameters,t.type):e.isFunctionExpression(t)?Ft(t,i,t.asteriskToken,t.name,t.typeParameters,t.parameters,t.type,t.body):e.isArrowFunction(t)?wt(t,i,t.typeParameters,t.parameters,t.type,t.equalsGreaterThanToken,t.body):e.isClassExpression(t)?Gt(t,i,t.name,t.typeParameters,t.heritageClauses,t.members):e.isVariableStatement(t)?cr(t,i,t.declarationList):e.isFunctionDeclaration(t)?Ar(t,i,t.asteriskToken,t.name,t.typeParameters,t.parameters,t.type,t.body):e.isClassDeclaration(t)?Pr(t,i,t.name,t.typeParameters,t.heritageClauses,t.members):e.isInterfaceDeclaration(t)?Ir(t,i,t.name,t.typeParameters,t.heritageClauses,t.members):e.isTypeAliasDeclaration(t)?Mr(t,i,t.name,t.typeParameters,t.type):e.isEnumDeclaration(t)?Rr(t,i,t.name,t.members):e.isModuleDeclaration(t)?jr(t,i,t.name,t.body):e.isImportEqualsDeclaration(t)?Vr(t,i,t.isTypeOnly,t.name,t.moduleReference):e.isImportDeclaration(t)?Wr(t,i,t.importClause,t.moduleSpecifier,t.assertClause):e.isExportAssignment(t)?rn(t,i,t.expression):e.isExportDeclaration(t)?an(t,i,t.isTypeOnly,t.exportClause,t.moduleSpecifier,t.assertClause):e.Debug.assertNever(t)}};return F;function P(t,r){if(void 0===t||t===e.emptyArray)t=[];else if(e.isNodeArray(t)){if(void 0===r||t.hasTrailingComma===r)return void 0===t.transformFlags&&d(t),e.Debug.attachNodeArrayDebugInfo(t),t;var n=t.slice();return n.pos=t.pos,n.end=t.end,n.hasTrailingComma=r,n.transformFlags=t.transformFlags,e.Debug.attachNodeArrayDebugInfo(n),n}var i=t.length,a=i>=1&&i<=4?t.slice():t;return e.setTextRangePosEnd(a,-1,-1),a.hasTrailingComma=!!r,d(a),e.Debug.attachNodeArrayDebugInfo(a),a}function w(e){return p.createBaseNode(e)}function I(e){var t=w(e);return t.symbol=void 0,t.localSymbol=void 0,t.locals=void 0,t.nextContainer=void 0,t}function O(t,r,n){var i=I(t);if(n=bi(n),i.name=n,e.canHaveModifiers(i)&&(i.modifiers=hi(r),i.transformFlags|=_(i.modifiers)),n)switch(i.kind){case 171:case 174:case 175:case 169:case 299:if(e.isIdentifier(n)){i.transformFlags|=u(n);break}default:i.transformFlags|=l(n)}return i}function M(e,t,r,n){var i=O(e,t,r);return i.typeParameters=hi(n),i.transformFlags|=_(i.typeParameters),n&&(i.transformFlags|=1),i}function L(e,t,r,n,i,a){var o=M(e,t,r,n);return o.parameters=P(i),o.type=a,o.transformFlags|=_(o.parameters)|l(o.type),a&&(o.transformFlags|=1),o.typeArguments=void 0,o}function R(e,t){return e!==t&&(e.typeArguments=t.typeArguments),f(e,t)}function B(e,t,r,n,i,a,o){var s=L(e,t,r,n,i,a);return s.body=o,s.transformFlags|=-67108865&l(s.body),o||(s.transformFlags|=1),s}function j(e,t,r,n,i){var a=M(e,t,r,n);return a.heritageClauses=hi(i),a.transformFlags|=_(a.heritageClauses),a}function J(e,t,r,n,i,a){var o=j(e,t,r,n,i);return o.members=P(a),o.transformFlags|=_(o.members),o}function z(e,t,r,n){var i=O(e,t,r);return i.initializer=n,i.transformFlags|=l(i.initializer),i}function U(e,t,r,n,i){var a=z(e,t,r,i);return a.type=n,a.transformFlags|=l(n),n&&(a.transformFlags|=1),a}function K(e,t){var r=re(e);return r.text=t,r}function V(e,t){void 0===t&&(t=0);var r=K(8,"number"==typeof e?e+"":e);return r.numericLiteralFlags=t,384&t&&(r.transformFlags|=1024),r}function q(t){var r=K(9,"string"==typeof t?t:e.pseudoBigIntToString(t)+"n");return r.transformFlags|=4,r}function W(e,t){var r=K(10,e);return r.singleQuote=t,r}function H(e,t,r){var n=W(e,t);return n.hasExtendedUnicodeEscape=r,r&&(n.transformFlags|=1024),n}function G(e){return K(13,e)}function Q(t,r){void 0===r&&t&&(r=e.stringToToken(t)),79===r&&(r=void 0);var n=p.createBaseIdentifierNode(79);return n.originalKeywordKind=r,n.escapedText=e.escapeLeadingUnderscores(t),n}function X(e,t,n,i){var a=Q(e,void 0);return a.autoGenerateFlags=t,a.autoGenerateId=r,a.autoGeneratePrefix=n,a.autoGenerateSuffix=i,r++,a}function Y(e,t,r,n){var i=Q(e,r);return t&&(i.typeArguments=P(t)),133===i.originalKeywordKind&&(i.transformFlags|=67108864),n&&(i.hasExtendedUnicodeEscape=n,i.transformFlags|=1024),i}function Z(e,t,r,n){var i=1;t&&(i|=8);var a=X("",i,r,n);return e&&e(a),a}function $(t,r,n,i){void 0===r&&(r=0),e.Debug.assert(!(7&r),"Argument out of range: flags"),(n||i)&&(r|=16);var a=X(t?e.isMemberName(t)?e.formatGeneratedName(!1,n,t,i,e.idText):"generated@".concat(e.getNodeId(t)):"",4|r,n,i);return a.original=t,a}function ee(t){var r=p.createBasePrivateIdentifierNode(80);return r.escapedText=e.escapeLeadingUnderscores(t),r.transformFlags|=16777216,r}function te(e,t,n,i){var a=ee(e);return a.autoGenerateFlags=t,a.autoGenerateId=r,a.autoGeneratePrefix=n,a.autoGenerateSuffix=i,r++,a}function re(e){return p.createBaseTokenNode(e)}function ne(t){e.Debug.assert(t>=0&&t<=162,"Invalid token"),e.Debug.assert(t<=14||t>=17,"Invalid token. Use 'createTemplateLiteralLikeNode' to create template literals."),e.Debug.assert(t<=8||t>=14,"Invalid token. Use 'createLiteralLikeNode' to create literals."),e.Debug.assert(79!==t,"Invalid token. Use 'createIdentifier' to create identifiers");var r=re(t),n=0;switch(t){case 132:n=384;break;case 123:case 121:case 122:case 146:case 126:case 136:case 85:case 131:case 148:case 160:case 144:case 149:case 101:case 145:case 161:case 152:case 134:case 153:case 114:case 157:case 155:n=1;break;case 106:n=134218752;break;case 124:n=1024;break;case 127:n=16777216;break;case 108:n=16384}return n&&(r.transformFlags|=n),r}function ie(){return ne(108)}function ae(){return ne(110)}function oe(){return ne(95)}function se(e){return ne(e)}function ce(e){var t=[];return 1&e&&t.push(se(93)),2&e&&t.push(se(136)),1024&e&&t.push(se(88)),2048&e&&t.push(se(85)),4&e&&t.push(se(123)),8&e&&t.push(se(121)),16&e&&t.push(se(122)),256&e&&t.push(se(126)),32&e&&t.push(se(124)),16384&e&&t.push(se(161)),64&e&&t.push(se(146)),128&e&&t.push(se(127)),512&e&&t.push(se(132)),32768&e&&t.push(se(101)),65536&e&&t.push(se(145)),t.length?t:void 0}function ue(e,t){var r=w(163);return r.left=e,r.right=bi(t),r.transformFlags|=l(r.left)|u(r.right),r}function le(e){var t=w(164);return t.expression=g().parenthesizeExpressionOfComputedPropertyName(e),t.transformFlags|=132096|l(t.expression),t}function _e(e,t,r,n){var i=O(165,e,t);return i.constraint=r,i.default=n,i.transformFlags=1,i}function de(e,t,r,n,i){return e.modifiers!==t||e.name!==r||e.constraint!==n||e.default!==i?f(_e(t,r,n,i),e):e}function pe(t,r,n,i,a,o){var s=U(166,t,n,a,o&&g().parenthesizeExpressionForDisallowedComma(o));return s.dotDotDotToken=r,s.questionToken=i,e.isThisIdentifier(s.name)?s.transformFlags=1:(s.transformFlags|=l(s.dotDotDotToken)|l(s.questionToken),i&&(s.transformFlags|=1),16476&e.modifiersToFlags(s.modifiers)&&(s.transformFlags|=8192),(o||r)&&(s.transformFlags|=1024)),s}function fe(e,t,r,n,i,a,o){return e.modifiers!==t||e.dotDotDotToken!==r||e.name!==n||e.questionToken!==i||e.type!==a||e.initializer!==o?f(pe(t,r,n,i,a,o),e):e}function ge(e){var t=w(167);return t.expression=g().parenthesizeLeftSideOfAccess(e,!1),t.transformFlags|=33562625|l(t.expression),t}function me(e,t,r,n){var i=O(168,e,t);return i.type=n,i.questionToken=r,i.transformFlags=1,i.initializer=void 0,i}function ye(e,t,r,n,i){return e.modifiers!==t||e.name!==r||e.questionToken!==n||e.type!==i?function(e,t){e!==t&&(e.initializer=t.initializer);return f(e,t)}(me(t,r,n,i),e):e}function ve(t,r,n,i,a){var o=U(169,t,r,i,a);return o.questionToken=n&&e.isQuestionToken(n)?n:void 0,o.exclamationToken=n&&e.isExclamationToken(n)?n:void 0,o.transformFlags|=l(o.questionToken)|l(o.exclamationToken)|16777216,(e.isComputedPropertyName(o.name)||e.hasStaticModifier(o)&&o.initializer)&&(o.transformFlags|=8192),(n||2&e.modifiersToFlags(o.modifiers))&&(o.transformFlags|=1),o}function he(t,r,n,i,a,o){return t.modifiers!==r||t.name!==n||t.questionToken!==(void 0!==i&&e.isQuestionToken(i)?i:void 0)||t.exclamationToken!==(void 0!==i&&e.isExclamationToken(i)?i:void 0)||t.type!==a||t.initializer!==o?f(ve(r,n,i,a,o),t):t}function be(e,t,r,n,i,a){var o=L(170,e,t,n,i,a);return o.questionToken=r,o.transformFlags=1,o}function xe(e,t,r,n,i,a,o){return e.modifiers!==t||e.name!==r||e.questionToken!==n||e.typeParameters!==i||e.parameters!==a||e.type!==o?R(be(t,r,n,i,a,o),e):e}function De(t,r,n,i,a,o,s,c){var u=B(171,t,n,a,o,s,c);return u.asteriskToken=r,u.questionToken=i,u.transformFlags|=l(u.asteriskToken)|l(u.questionToken)|1024,i&&(u.transformFlags|=1),512&e.modifiersToFlags(u.modifiers)?u.transformFlags|=r?128:256:r&&(u.transformFlags|=2048),u.exclamationToken=void 0,u}function Se(e,t,r,n,i,a,o,s,c){return e.modifiers!==t||e.asteriskToken!==r||e.name!==n||e.questionToken!==i||e.typeParameters!==a||e.parameters!==o||e.type!==s||e.body!==c?function(e,t){e!==t&&(e.exclamationToken=t.exclamationToken);return f(e,t)}(De(t,r,n,i,a,o,s,c),e):e}function Te(e){var t=M(172,void 0,void 0,void 0);return t.body=e,t.transformFlags=16777216|l(e),t.illegalDecorators=void 0,t.modifiers=void 0,t}function Ce(e,t,r){var n=B(173,e,void 0,void 0,t,void 0,r);return n.transformFlags|=1024,n.illegalDecorators=void 0,n.typeParameters=void 0,n.type=void 0,n}function Ee(e,t,r,n){return e.modifiers!==t||e.parameters!==r||e.body!==n?function(e,t){e!==t&&(e.illegalDecorators=t.illegalDecorators,e.typeParameters=t.typeParameters,e.type=t.type);return R(e,t)}(Ce(t,r,n),e):e}function ke(e,t,r,n,i){var a=B(174,e,t,void 0,r,n,i);return a.typeParameters=void 0,a}function Ne(e,t,r,n,i,a){return e.modifiers!==t||e.name!==r||e.parameters!==n||e.type!==i||e.body!==a?function(e,t){e!==t&&(e.typeParameters=t.typeParameters);return R(e,t)}(ke(t,r,n,i,a),e):e}function Ae(e,t,r,n){var i=B(175,e,t,void 0,r,void 0,n);return i.typeParameters=void 0,i.type=void 0,i}function Fe(e,t,r,n,i){return e.modifiers!==t||e.name!==r||e.parameters!==n||e.body!==i?function(e,t){e!==t&&(e.typeParameters=t.typeParameters,e.type=t.type);return R(e,t)}(Ae(t,r,n,i),e):e}function Pe(e,t,r){var n=L(176,void 0,void 0,e,t,r);return n.transformFlags=1,n}function we(e,t,r){var n=L(177,void 0,void 0,e,t,r);return n.transformFlags=1,n}function Ie(e,t,r){var n=L(178,e,void 0,void 0,t,r);return n.transformFlags=1,n}function Oe(e,t,r,n){return e.parameters!==r||e.type!==n||e.modifiers!==t?R(Ie(t,r,n),e):e}function Me(e,t){var r=w(201);return r.type=e,r.literal=t,r.transformFlags=1,r}function Le(e,t,r){var n=w(179);return n.assertsModifier=e,n.parameterName=bi(t),n.type=r,n.transformFlags=1,n}function Re(e,t){var r=w(180);return r.typeName=bi(e),r.typeArguments=t&&g().parenthesizeTypeArguments(P(t)),r.transformFlags=1,r}function Be(e,t,r){var n=L(181,void 0,void 0,e,t,r);return n.transformFlags=1,n.modifiers=void 0,n}function je(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return 4===t.length?Je.apply(void 0,t):3===t.length?ze.apply(void 0,t):e.Debug.fail("Incorrect number of arguments specified.")}function Je(e,t,r,n){var i=L(182,e,void 0,t,r,n);return i.transformFlags=1,i}function ze(e,t,r){return Je(void 0,e,t,r)}function Ue(e,t,r,n,i){return e.modifiers!==t||e.typeParameters!==r||e.parameters!==n||e.type!==i?R(je(t,r,n,i),e):e}function Ke(e,t,r,n){return Ue(e,e.modifiers,t,r,n)}function Ve(e,t){var r=w(183);return r.exprName=e,r.typeArguments=t&&g().parenthesizeTypeArguments(t),r.transformFlags=1,r}function qe(e){var t=w(184);return t.members=P(e),t.transformFlags=1,t}function We(e){var t=w(185);return t.elementType=g().parenthesizeNonArrayTypeOfPostfixType(e),t.transformFlags=1,t}function He(e){var t=w(186);return t.elements=P(g().parenthesizeElementTypesOfTupleType(e)),t.transformFlags=1,t}function Ge(e,t,r,n){var i=w(199);return i.dotDotDotToken=e,i.name=t,i.questionToken=r,i.type=n,i.transformFlags=1,i}function Qe(e){var t=w(187);return t.type=g().parenthesizeTypeOfOptionalType(e),t.transformFlags=1,t}function Xe(e){var t=w(188);return t.type=e,t.transformFlags=1,t}function Ye(e,t,r){var n=w(e);return n.types=F.createNodeArray(r(t)),n.transformFlags=1,n}function Ze(e,t,r){return e.types!==t?f(Ye(e.kind,t,r),e):e}function $e(e,t,r,n){var i=w(191);return i.checkType=g().parenthesizeCheckTypeOfConditionalType(e),i.extendsType=g().parenthesizeExtendsTypeOfConditionalType(t),i.trueType=r,i.falseType=n,i.transformFlags=1,i}function et(e){var t=w(192);return t.typeParameter=e,t.transformFlags=1,t}function tt(e,t){var r=w(200);return r.head=e,r.templateSpans=P(t),r.transformFlags=1,r}function rt(e,t,r,n,i){void 0===i&&(i=!1);var a=w(202);return a.argument=e,a.assertions=t,a.qualifier=r,a.typeArguments=n&&g().parenthesizeTypeArguments(n),a.isTypeOf=i,a.transformFlags=1,a}function nt(e){var t=w(193);return t.type=e,t.transformFlags=1,t}function it(e,t){var r=w(195);return r.operator=e,r.type=146===e?g().parenthesizeOperandOfReadonlyTypeOperator(t):g().parenthesizeOperandOfTypeOperator(t),r.transformFlags=1,r}function at(e,t){var r=w(196);return r.objectType=g().parenthesizeNonArrayTypeOfPostfixType(e),r.indexType=t,r.transformFlags=1,r}function ot(e,t,r,n,i,a){var o=w(197);return o.readonlyToken=e,o.typeParameter=t,o.nameType=r,o.questionToken=n,o.type=i,o.members=a&&P(a),o.transformFlags=1,o}function st(e){var t=w(198);return t.literal=e,t.transformFlags=1,t}function ct(e){var t=w(203);return t.elements=P(e),t.transformFlags|=525312|_(t.elements),32768&t.transformFlags&&(t.transformFlags|=65664),t}function ut(e){var t=w(204);return t.elements=P(e),t.transformFlags|=525312|_(t.elements),t}function lt(t,r,n,i){var a=z(205,void 0,n,i&&g().parenthesizeExpressionForDisallowedComma(i));return a.propertyName=bi(r),a.dotDotDotToken=t,a.transformFlags|=1024|l(a.dotDotDotToken),a.propertyName&&(a.transformFlags|=e.isIdentifier(a.propertyName)?u(a.propertyName):l(a.propertyName)),t&&(a.transformFlags|=32768),a}function _t(e){return w(e)}function dt(t,r){var n=_t(206),i=t&&e.lastOrUndefined(t),a=P(t,!(!i||!e.isOmittedExpression(i))||void 0);return n.elements=g().parenthesizeExpressionsOfCommaDelimitedList(a),n.multiLine=r,n.transformFlags|=_(n.elements),n}function pt(e,t){var r=_t(207);return r.properties=P(e),r.multiLine=t,r.transformFlags|=_(r.properties),r}function ft(t,r){var n=_t(208);return n.expression=g().parenthesizeLeftSideOfAccess(t,!1),n.name=bi(r),n.transformFlags=l(n.expression)|(e.isIdentifier(n.name)?u(n.name):536870912|l(n.name)),e.isSuperKeyword(t)&&(n.transformFlags|=384),n}function gt(t,r,n){var i=_t(208);return i.flags|=32,i.expression=g().parenthesizeLeftSideOfAccess(t,!0),i.questionDotToken=r,i.name=bi(n),i.transformFlags|=32|l(i.expression)|l(i.questionDotToken)|(e.isIdentifier(i.name)?u(i.name):536870912|l(i.name)),i}function mt(t,r,n,i){return e.Debug.assert(!!(32&t.flags),"Cannot update a PropertyAccessExpression using updatePropertyAccessChain. Use updatePropertyAccess instead."),t.expression!==r||t.questionDotToken!==n||t.name!==i?f(gt(r,n,i),t):t}function yt(t,r){var n=_t(209);return n.expression=g().parenthesizeLeftSideOfAccess(t,!1),n.argumentExpression=xi(r),n.transformFlags|=l(n.expression)|l(n.argumentExpression),e.isSuperKeyword(t)&&(n.transformFlags|=384),n}function vt(e,t,r){var n=_t(209);return n.flags|=32,n.expression=g().parenthesizeLeftSideOfAccess(e,!0),n.questionDotToken=t,n.argumentExpression=xi(r),n.transformFlags|=l(n.expression)|l(n.questionDotToken)|l(n.argumentExpression)|32,n}function ht(t,r,n,i){return e.Debug.assert(!!(32&t.flags),"Cannot update a ElementAccessExpression using updateElementAccessChain. Use updateElementAccess instead."),t.expression!==r||t.questionDotToken!==n||t.argumentExpression!==i?f(vt(r,n,i),t):t}function bt(t,r,n){var i=_t(210);return i.expression=g().parenthesizeLeftSideOfAccess(t,!1),i.typeArguments=hi(r),i.arguments=g().parenthesizeExpressionsOfCommaDelimitedList(P(n)),i.transformFlags|=l(i.expression)|_(i.typeArguments)|_(i.arguments),i.typeArguments&&(i.transformFlags|=1),e.isImportKeyword(i.expression)?i.transformFlags|=8388608:e.isSuperProperty(i.expression)&&(i.transformFlags|=16384),i}function xt(t,r,n,i){var a=_t(210);return a.flags|=32,a.expression=g().parenthesizeLeftSideOfAccess(t,!0),a.questionDotToken=r,a.typeArguments=hi(n),a.arguments=g().parenthesizeExpressionsOfCommaDelimitedList(P(i)),a.transformFlags|=l(a.expression)|l(a.questionDotToken)|_(a.typeArguments)|_(a.arguments)|32,a.typeArguments&&(a.transformFlags|=1),e.isSuperProperty(a.expression)&&(a.transformFlags|=16384),a}function Dt(t,r,n,i,a){return e.Debug.assert(!!(32&t.flags),"Cannot update a CallExpression using updateCallChain. Use updateCall instead."),t.expression!==r||t.questionDotToken!==n||t.typeArguments!==i||t.arguments!==a?f(xt(r,n,i,a),t):t}function St(e,t,r){var n=_t(211);return n.expression=g().parenthesizeExpressionOfNew(e),n.typeArguments=hi(t),n.arguments=r?g().parenthesizeExpressionsOfCommaDelimitedList(r):void 0,n.transformFlags|=l(n.expression)|_(n.typeArguments)|_(n.arguments)|32,n.typeArguments&&(n.transformFlags|=1),n}function Tt(t,r,n){var i=_t(212);return i.tag=g().parenthesizeLeftSideOfAccess(t,!1),i.typeArguments=hi(r),i.template=n,i.transformFlags|=l(i.tag)|_(i.typeArguments)|l(i.template)|1024,i.typeArguments&&(i.transformFlags|=1),e.hasInvalidEscape(i.template)&&(i.transformFlags|=128),i}function Ct(e,t){var r=_t(213);return r.expression=g().parenthesizeOperandOfPrefixUnary(t),r.type=e,r.transformFlags|=l(r.expression)|l(r.type)|1,r}function Et(e,t,r){return e.type!==t||e.expression!==r?f(Ct(t,r),e):e}function kt(e){var t=_t(214);return t.expression=e,t.transformFlags=l(t.expression),t}function Nt(e,t){return e.expression!==t?f(kt(t),e):e}function At(t,r,n,i,a,o,s){var c=B(215,t,n,i,a,o,s);return c.asteriskToken=r,c.transformFlags|=l(c.asteriskToken),c.typeParameters&&(c.transformFlags|=1),512&e.modifiersToFlags(c.modifiers)?c.asteriskToken?c.transformFlags|=128:c.transformFlags|=256:c.asteriskToken&&(c.transformFlags|=2048),c}function Ft(e,t,r,n,i,a,o,s){return e.name!==n||e.modifiers!==t||e.asteriskToken!==r||e.typeParameters!==i||e.parameters!==a||e.type!==o||e.body!==s?R(At(t,r,n,i,a,o,s),e):e}function Pt(t,r,n,i,a,o){var s=B(216,t,void 0,r,n,i,g().parenthesizeConciseBodyOfArrowFunction(o));return s.equalsGreaterThanToken=null!=a?a:ne(38),s.transformFlags|=1024|l(s.equalsGreaterThanToken),512&e.modifiersToFlags(s.modifiers)&&(s.transformFlags|=16640),s}function wt(e,t,r,n,i,a,o){return e.modifiers!==t||e.typeParameters!==r||e.parameters!==n||e.type!==i||e.equalsGreaterThanToken!==a||e.body!==o?R(Pt(t,r,n,i,a,o),e):e}function It(e){var t=_t(217);return t.expression=g().parenthesizeOperandOfPrefixUnary(e),t.transformFlags|=l(t.expression),t}function Ot(e){var t=_t(218);return t.expression=g().parenthesizeOperandOfPrefixUnary(e),t.transformFlags|=l(t.expression),t}function Mt(e){var t=_t(219);return t.expression=g().parenthesizeOperandOfPrefixUnary(e),t.transformFlags|=l(t.expression),t}function Lt(e){var t=_t(220);return t.expression=g().parenthesizeOperandOfPrefixUnary(e),t.transformFlags|=2097536|l(t.expression),t}function Rt(t,r){var n=_t(221);return n.operator=t,n.operand=g().parenthesizeOperandOfPrefixUnary(r),n.transformFlags|=l(n.operand),45!==t&&46!==t||!e.isIdentifier(n.operand)||e.isGeneratedIdentifier(n.operand)||e.isLocalName(n.operand)||(n.transformFlags|=268435456),n}function Bt(t,r){var n=_t(222);return n.operator=r,n.operand=g().parenthesizeOperandOfPostfixUnary(t),n.transformFlags|=l(n.operand),!e.isIdentifier(n.operand)||e.isGeneratedIdentifier(n.operand)||e.isLocalName(n.operand)||(n.transformFlags|=268435456),n}function jt(t,r,n){var i,a=_t(223),o="number"==typeof(i=r)?ne(i):i,s=o.kind;return a.left=g().parenthesizeLeftSideOfBinary(s,t),a.operatorToken=o,a.right=g().parenthesizeRightSideOfBinary(s,a.left,n),a.transformFlags|=l(a.left)|l(a.operatorToken)|l(a.right),60===s?a.transformFlags|=32:63===s?e.isObjectLiteralExpression(a.left)?a.transformFlags|=5248|Jt(a.left):e.isArrayLiteralExpression(a.left)&&(a.transformFlags|=5120|Jt(a.left)):42===s||67===s?a.transformFlags|=512:e.isLogicalOrCoalescingAssignmentOperator(s)&&(a.transformFlags|=16),101===s&&e.isPrivateIdentifier(a.left)&&(a.transformFlags|=536870912),a}function Jt(t){if(65536&t.transformFlags)return 65536;if(128&t.transformFlags)for(var r=0,n=e.getElementsOfBindingOrAssignmentPattern(t);r<n.length;r++){var i=n[r],a=e.getTargetOfBindingOrAssignmentElement(i);if(a&&e.isAssignmentPattern(a)){if(65536&a.transformFlags)return 65536;if(128&a.transformFlags){var o=Jt(a);if(o)return o}}}return 0}function zt(e,t,r,n,i){var a=_t(224);return a.condition=g().parenthesizeConditionOfConditionalExpression(e),a.questionToken=null!=t?t:ne(57),a.whenTrue=g().parenthesizeBranchOfConditionalExpression(r),a.colonToken=null!=n?n:ne(58),a.whenFalse=g().parenthesizeBranchOfConditionalExpression(i),a.transformFlags|=l(a.condition)|l(a.questionToken)|l(a.whenTrue)|l(a.colonToken)|l(a.whenFalse),a}function Ut(e,t){var r=_t(225);return r.head=e,r.templateSpans=P(t),r.transformFlags|=l(r.head)|_(r.templateSpans)|1024,r}function Kt(r,n,i,a){void 0===a&&(a=0),e.Debug.assert(!(-2049&a),"Unsupported template flags.");var o=void 0;if(void 0!==i&&i!==n&&(o=function(r,n){t||(t=e.createScanner(99,!1,0));switch(r){case 14:t.setText("`"+n+"`");break;case 15:t.setText("`"+n+"${");break;case 16:t.setText("}"+n+"${");break;case 17:t.setText("}"+n+"`")}var i,a=t.scan();19===a&&(a=t.reScanTemplateToken(!1));if(t.isUnterminated())return t.setText(void 0),c;switch(a){case 14:case 15:case 16:case 17:i=t.getTokenValue()}if(void 0===i||1!==t.scan())return t.setText(void 0),c;return t.setText(void 0),i}(r,i),"object"==typeof o))return e.Debug.fail("Invalid raw text");if(void 0===n){if(void 0===o)return e.Debug.fail("Arguments 'text' and 'rawText' may not both be undefined.");n=o}else void 0!==o&&e.Debug.assert(n===o,"Expected argument 'text' to be the normalized (i.e. 'cooked') version of argument 'rawText'.");return Vt(r,n,i,a)}function Vt(e,t,r,n){var i=re(e);return i.text=t,i.rawText=r,i.templateFlags=2048&n,i.transformFlags|=1024,i.templateFlags&&(i.transformFlags|=128),i}function qt(t,r){e.Debug.assert(!t||!!r,"A `YieldExpression` with an asteriskToken must have an expression.");var n=_t(226);return n.expression=r&&g().parenthesizeExpressionForDisallowedComma(r),n.asteriskToken=t,n.transformFlags|=1049728|(l(n.expression)|l(n.asteriskToken)),n}function Wt(e){var t=_t(227);return t.expression=g().parenthesizeExpressionForDisallowedComma(e),t.transformFlags|=33792|l(t.expression),t}function Ht(e,t,r,n,i){var a=J(228,e,t,r,n,i);return a.transformFlags|=1024,a}function Gt(e,t,r,n,i,a){return e.modifiers!==t||e.name!==r||e.typeParameters!==n||e.heritageClauses!==i||e.members!==a?f(Ht(t,r,n,i,a),e):e}function Qt(e,t){var r=w(230);return r.expression=g().parenthesizeLeftSideOfAccess(e,!1),r.typeArguments=t&&g().parenthesizeTypeArguments(t),r.transformFlags|=l(r.expression)|_(r.typeArguments)|1024,r}function Xt(e,t){var r=_t(231);return r.expression=e,r.type=t,r.transformFlags|=l(r.expression)|l(r.type)|1,r}function Yt(e,t,r){return e.expression!==t||e.type!==r?f(Xt(t,r),e):e}function Zt(e){var t=_t(232);return t.expression=g().parenthesizeLeftSideOfAccess(e,!1),t.transformFlags|=1|l(t.expression),t}function $t(t,r){return e.isNonNullChain(t)?nr(t,r):t.expression!==r?f(Zt(r),t):t}function er(e,t){var r=_t(235);return r.expression=e,r.type=t,r.transformFlags|=l(r.expression)|l(r.type)|1,r}function tr(e,t,r){return e.expression!==t||e.type!==r?f(er(t,r),e):e}function rr(e){var t=_t(232);return t.flags|=32,t.expression=g().parenthesizeLeftSideOfAccess(e,!0),t.transformFlags|=1|l(t.expression),t}function nr(t,r){return e.Debug.assert(!!(32&t.flags),"Cannot update a NonNullExpression using updateNonNullChain. Use updateNonNullExpression instead."),t.expression!==r?f(rr(r),t):t}function ir(t,r){var n=_t(233);switch(n.keywordToken=t,n.name=r,n.transformFlags|=l(n.name),t){case 103:n.transformFlags|=1024;break;case 100:n.transformFlags|=4;break;default:return e.Debug.assertNever(t)}return n}function ar(e,t){var r=w(236);return r.expression=e,r.literal=t,r.transformFlags|=l(r.expression)|l(r.literal)|1024,r}function or(e,t){var r=w(238);return r.statements=P(e),r.multiLine=t,r.transformFlags|=_(r.statements),r}function sr(t,r){var n=I(240);return n.modifiers=hi(t),n.declarationList=e.isArray(r)?kr(r):r,n.transformFlags|=_(n.modifiers)|l(n.declarationList),2&e.modifiersToFlags(n.modifiers)&&(n.transformFlags=1),n}function cr(e,t,r){return e.modifiers!==t||e.declarationList!==r?f(sr(t,r),e):e}function ur(){return w(239)}function lr(e){var t=w(241);return t.expression=g().parenthesizeExpressionOfExpressionStatement(e),t.transformFlags|=l(t.expression),t}function _r(e,t,r){var n=w(242);return n.expression=e,n.thenStatement=Di(t),n.elseStatement=Di(r),n.transformFlags|=l(n.expression)|l(n.thenStatement)|l(n.elseStatement),n}function dr(e,t){var r=w(243);return r.statement=Di(e),r.expression=t,r.transformFlags|=l(r.statement)|l(r.expression),r}function pr(e,t){var r=w(244);return r.expression=e,r.statement=Di(t),r.transformFlags|=l(r.expression)|l(r.statement),r}function fr(e,t,r,n){var i=w(245);return i.initializer=e,i.condition=t,i.incrementor=r,i.statement=Di(n),i.transformFlags|=l(i.initializer)|l(i.condition)|l(i.incrementor)|l(i.statement),i}function gr(e,t,r){var n=w(246);return n.initializer=e,n.expression=t,n.statement=Di(r),n.transformFlags|=l(n.initializer)|l(n.expression)|l(n.statement),n}function mr(e,t,r,n){var i=w(247);return i.awaitModifier=e,i.initializer=t,i.expression=g().parenthesizeExpressionForDisallowedComma(r),i.statement=Di(n),i.transformFlags|=l(i.awaitModifier)|l(i.initializer)|l(i.expression)|l(i.statement)|1024,e&&(i.transformFlags|=128),i}function yr(e){var t=w(248);return t.label=bi(e),t.transformFlags|=4194304|l(t.label),t}function vr(e){var t=w(249);return t.label=bi(e),t.transformFlags|=4194304|l(t.label),t}function hr(e){var t=w(250);return t.expression=e,t.transformFlags|=4194432|l(t.expression),t}function br(e,t){var r=w(251);return r.expression=e,r.statement=Di(t),r.transformFlags|=l(r.expression)|l(r.statement),r}function xr(e,t){var r=w(252);return r.expression=g().parenthesizeExpressionForDisallowedComma(e),r.caseBlock=t,r.transformFlags|=l(r.expression)|l(r.caseBlock),r}function Dr(e,t){var r=w(253);return r.label=bi(e),r.statement=Di(t),r.transformFlags|=l(r.label)|l(r.statement),r}function Sr(e,t,r){return e.label!==t||e.statement!==r?f(Dr(t,r),e):e}function Tr(e){var t=w(254);return t.expression=e,t.transformFlags|=l(t.expression),t}function Cr(e,t,r){var n=w(255);return n.tryBlock=e,n.catchClause=t,n.finallyBlock=r,n.transformFlags|=l(n.tryBlock)|l(n.catchClause)|l(n.finallyBlock),n}function Er(e,t,r,n){var i=U(257,void 0,e,r,n&&g().parenthesizeExpressionForDisallowedComma(n));return i.exclamationToken=t,i.transformFlags|=l(i.exclamationToken),t&&(i.transformFlags|=1),i}function kr(e,t){void 0===t&&(t=0);var r=w(258);return r.flags|=3&t,r.declarations=P(e),r.transformFlags|=4194304|_(r.declarations),3&t&&(r.transformFlags|=263168),r}function Nr(t,r,n,i,a,o,s){var c=B(259,t,n,i,a,o,s);return c.asteriskToken=r,!c.body||2&e.modifiersToFlags(c.modifiers)?c.transformFlags=1:(c.transformFlags|=4194304|l(c.asteriskToken),512&e.modifiersToFlags(c.modifiers)?c.asteriskToken?c.transformFlags|=128:c.transformFlags|=256:c.asteriskToken&&(c.transformFlags|=2048)),c.illegalDecorators=void 0,c}function Ar(e,t,r,n,i,a,o,s){return e.modifiers!==t||e.asteriskToken!==r||e.name!==n||e.typeParameters!==i||e.parameters!==a||e.type!==o||e.body!==s?function(e,t){e!==t&&(e.illegalDecorators=t.illegalDecorators);return R(e,t)}(Nr(t,r,n,i,a,o,s),e):e}function Fr(t,r,n,i,a){var o=J(260,t,r,n,i,a);return 2&e.modifiersToFlags(o.modifiers)?o.transformFlags=1:(o.transformFlags|=1024,8192&o.transformFlags&&(o.transformFlags|=1)),o}function Pr(e,t,r,n,i,a){return e.modifiers!==t||e.name!==r||e.typeParameters!==n||e.heritageClauses!==i||e.members!==a?f(Fr(t,r,n,i,a),e):e}function wr(e,t,r,n,i){var a=j(261,e,t,r,n);return a.members=P(i),a.transformFlags=1,a.illegalDecorators=void 0,a}function Ir(e,t,r,n,i,a){return e.modifiers!==t||e.name!==r||e.typeParameters!==n||e.heritageClauses!==i||e.members!==a?function(e,t){e!==t&&(e.illegalDecorators=t.illegalDecorators);return f(e,t)}(wr(t,r,n,i,a),e):e}function Or(e,t,r,n){var i=M(262,e,t,r);return i.type=n,i.transformFlags=1,i.illegalDecorators=void 0,i}function Mr(e,t,r,n,i){return e.modifiers!==t||e.name!==r||e.typeParameters!==n||e.type!==i?function(e,t){e!==t&&(e.illegalDecorators=t.illegalDecorators);return f(e,t)}(Or(t,r,n,i),e):e}function Lr(e,t,r){var n=O(263,e,t);return n.members=P(r),n.transformFlags|=1|_(n.members),n.transformFlags&=-67108865,n.illegalDecorators=void 0,n}function Rr(e,t,r,n){return e.modifiers!==t||e.name!==r||e.members!==n?function(e,t){e!==t&&(e.illegalDecorators=t.illegalDecorators);return f(e,t)}(Lr(t,r,n),e):e}function Br(t,r,n,i){void 0===i&&(i=0);var a=I(264);return a.modifiers=hi(t),a.flags|=1044&i,a.name=r,a.body=n,2&e.modifiersToFlags(a.modifiers)?a.transformFlags=1:a.transformFlags|=_(a.modifiers)|l(a.name)|l(a.body)|1,a.transformFlags&=-67108865,a.illegalDecorators=void 0,a}function jr(e,t,r,n){return e.modifiers!==t||e.name!==r||e.body!==n?function(e,t){e!==t&&(e.illegalDecorators=t.illegalDecorators);return f(e,t)}(Br(t,r,n,e.flags),e):e}function Jr(e){var t=w(265);return t.statements=P(e),t.transformFlags|=_(t.statements),t}function zr(e){var t=w(266);return t.clauses=P(e),t.transformFlags|=_(t.clauses),t}function Ur(e){var t=O(267,void 0,e);return t.transformFlags=1,t.illegalDecorators=void 0,t.modifiers=void 0,t}function Kr(t,r,n,i){var a=O(268,t,n);return a.isTypeOnly=r,a.moduleReference=i,a.transformFlags|=l(a.moduleReference),e.isExternalModuleReference(a.moduleReference)||(a.transformFlags|=1),a.transformFlags&=-67108865,a.illegalDecorators=void 0,a}function Vr(e,t,r,n,i){return e.modifiers!==t||e.isTypeOnly!==r||e.name!==n||e.moduleReference!==i?function(e,t){e!==t&&(e.illegalDecorators=t.illegalDecorators);return f(e,t)}(Kr(t,r,n,i),e):e}function qr(e,t,r,n){var i=I(269);return i.modifiers=hi(e),i.importClause=t,i.moduleSpecifier=r,i.assertClause=n,i.transformFlags|=l(i.importClause)|l(i.moduleSpecifier),i.transformFlags&=-67108865,i.illegalDecorators=void 0,i}function Wr(e,t,r,n,i){return e.modifiers!==t||e.importClause!==r||e.moduleSpecifier!==n||e.assertClause!==i?function(e,t){e!==t&&(e.illegalDecorators=t.illegalDecorators);return f(e,t)}(qr(t,r,n,i),e):e}function Hr(e,t,r){var n=w(270);return n.isTypeOnly=e,n.name=t,n.namedBindings=r,n.transformFlags|=l(n.name)|l(n.namedBindings),e&&(n.transformFlags|=1),n.transformFlags&=-67108865,n}function Gr(e,t){var r=w(296);return r.elements=P(e),r.multiLine=t,r.transformFlags|=4,r}function Qr(e,t){var r=w(297);return r.name=e,r.value=t,r.transformFlags|=4,r}function Xr(e,t){var r=w(298);return r.assertClause=e,r.multiLine=t,r}function Yr(e){var t=w(271);return t.name=e,t.transformFlags|=l(t.name),t.transformFlags&=-67108865,t}function Zr(e){var t=w(277);return t.name=e,t.transformFlags|=4|l(t.name),t.transformFlags&=-67108865,t}function $r(e){var t=w(272);return t.elements=P(e),t.transformFlags|=_(t.elements),t.transformFlags&=-67108865,t}function en(e,t,r){var n=w(273);return n.isTypeOnly=e,n.propertyName=t,n.name=r,n.transformFlags|=l(n.propertyName)|l(n.name),n.transformFlags&=-67108865,n}function tn(e,t,r){var n=I(274);return n.modifiers=hi(e),n.isExportEquals=t,n.expression=t?g().parenthesizeRightSideOfBinary(63,void 0,r):g().parenthesizeExpressionOfExportDefault(r),n.transformFlags|=_(n.modifiers)|l(n.expression),n.transformFlags&=-67108865,n.illegalDecorators=void 0,n}function rn(e,t,r){return e.modifiers!==t||e.expression!==r?function(e,t){e!==t&&(e.illegalDecorators=t.illegalDecorators);return f(e,t)}(tn(t,e.isExportEquals,r),e):e}function nn(e,t,r,n,i){var a=I(275);return a.modifiers=hi(e),a.isTypeOnly=t,a.exportClause=r,a.moduleSpecifier=n,a.assertClause=i,a.transformFlags|=_(a.modifiers)|l(a.exportClause)|l(a.moduleSpecifier),a.transformFlags&=-67108865,a.illegalDecorators=void 0,a}function an(e,t,r,n,i,a){return e.modifiers!==t||e.isTypeOnly!==r||e.exportClause!==n||e.moduleSpecifier!==i||e.assertClause!==a?function(e,t){e!==t&&(e.illegalDecorators=t.illegalDecorators);return f(e,t)}(nn(t,r,n,i,a),e):e}function on(e){var t=w(276);return t.elements=P(e),t.transformFlags|=_(t.elements),t.transformFlags&=-67108865,t}function sn(e,t,r){var n=w(278);return n.isTypeOnly=e,n.propertyName=bi(t),n.name=bi(r),n.transformFlags|=l(n.propertyName)|l(n.name),n.transformFlags&=-67108865,n}function cn(e){var t=w(280);return t.expression=e,t.transformFlags|=l(t.expression),t.transformFlags&=-67108865,t}function un(e,t,r){void 0===r&&(r=!1);var n=ln(e,r?t&&g().parenthesizeNonArrayTypeOfPostfixType(t):t);return n.postfix=r,n}function ln(e,t){var r=w(e);return r.type=t,r}function _n(e,t){return L(320,void 0,void 0,void 0,e,t)}function dn(e,t){void 0===t&&(t=!1);var r=w(325);return r.jsDocPropertyTags=hi(e),r.isArrayType=t,r}function pn(e){var t=w(312);return t.type=e,t}function fn(e,t,r){var n=w(326);return n.typeParameters=hi(e),n.parameters=P(t),n.type=r,n}function gn(t){var r=s(t.kind);return t.tagName.escapedText===e.escapeLeadingUnderscores(r)?t.tagName:Y(r)}function mn(e,t,r){var n=w(e);return n.tagName=t,n.comment=r,n}function yn(e,t,r,n){var i=mn(347,null!=e?e:Y("template"),n);return i.constraint=t,i.typeParameters=P(r),i}function vn(t,r,n,i){var a=mn(348,null!=t?t:Y("typedef"),i);return a.typeExpression=r,a.fullName=n,a.name=e.getJSDocTypeAliasName(n),a}function hn(e,t,r,n,i,a){var o=mn(343,null!=e?e:Y("param"),a);return o.typeExpression=n,o.name=t,o.isNameFirst=!!i,o.isBracketed=r,o}function bn(e,t,r,n,i,a){var o=mn(350,null!=e?e:Y("prop"),a);return o.typeExpression=n,o.name=t,o.isNameFirst=!!i,o.isBracketed=r,o}function xn(t,r,n,i){var a=mn(341,null!=t?t:Y("callback"),i);return a.typeExpression=r,a.fullName=n,a.name=e.getJSDocTypeAliasName(n),a}function Dn(e,t,r){var n=mn(331,null!=e?e:Y("augments"),r);return n.class=t,n}function Sn(e,t,r){var n=mn(332,null!=e?e:Y("implements"),r);return n.class=t,n}function Tn(e,t,r){var n=mn(349,null!=e?e:Y("see"),r);return n.name=t,n}function Cn(e){var t=w(313);return t.name=e,t}function En(e,t){var r=w(314);return r.left=e,r.right=t,r.transformFlags|=l(r.left)|l(r.right),r}function kn(e,t){var r=w(327);return r.name=e,r.text=t,r}function Nn(e,t){var r=w(328);return r.name=e,r.text=t,r}function An(e,t){var r=w(329);return r.name=e,r.text=t,r}function Fn(e,t,r){return mn(e,null!=t?t:Y(s(e)),r)}function Pn(e,t,r,n){var i=mn(e,null!=t?t:Y(s(e)),n);return i.typeExpression=r,i}function wn(e,t){return mn(330,e,t)}function In(e){var t=w(324);return t.text=e,t}function On(e,t){var r=w(323);return r.comment=e,r.tags=hi(t),r}function Mn(e,t,r){var n=w(281);return n.openingElement=e,n.children=P(t),n.closingElement=r,n.transformFlags|=l(n.openingElement)|_(n.children)|l(n.closingElement)|2,n}function Ln(e,t,r){var n=w(282);return n.tagName=e,n.typeArguments=hi(t),n.attributes=r,n.transformFlags|=l(n.tagName)|_(n.typeArguments)|l(n.attributes)|2,n.typeArguments&&(n.transformFlags|=1),n}function Rn(e,t,r){var n=w(283);return n.tagName=e,n.typeArguments=hi(t),n.attributes=r,n.transformFlags|=l(n.tagName)|_(n.typeArguments)|l(n.attributes)|2,t&&(n.transformFlags|=1),n}function Bn(e){var t=w(284);return t.tagName=e,t.transformFlags|=2|l(t.tagName),t}function jn(e,t,r){var n=w(285);return n.openingFragment=e,n.children=P(t),n.closingFragment=r,n.transformFlags|=l(n.openingFragment)|_(n.children)|l(n.closingFragment)|2,n}function Jn(e,t){var r=w(11);return r.text=e,r.containsOnlyTriviaWhiteSpaces=!!t,r.transformFlags|=2,r}function zn(e,t){var r=w(288);return r.name=e,r.initializer=t,r.transformFlags|=l(r.name)|l(r.initializer)|2,r}function Un(e){var t=w(289);return t.properties=P(e),t.transformFlags|=2|_(t.properties),t}function Kn(e){var t=w(290);return t.expression=e,t.transformFlags|=2|l(t.expression),t}function Vn(e,t){var r=w(291);return r.dotDotDotToken=e,r.expression=t,r.transformFlags|=l(r.dotDotDotToken)|l(r.expression)|2,r}function qn(e,t){var r=w(292);return r.expression=g().parenthesizeExpressionForDisallowedComma(e),r.statements=P(t),r.transformFlags|=l(r.expression)|_(r.statements),r}function Wn(e){var t=w(293);return t.statements=P(e),t.transformFlags=_(t.statements),t}function Hn(t,r){var n=w(294);switch(n.token=t,n.types=P(r),n.transformFlags|=_(n.types),t){case 94:n.transformFlags|=1024;break;case 117:n.transformFlags|=1;break;default:return e.Debug.assertNever(t)}return n}function Gn(t,r){var n=w(295);return("string"==typeof t||t&&!e.isVariableDeclaration(t))&&(t=Er(t,void 0,void 0,void 0)),n.variableDeclaration=t,n.block=r,n.transformFlags|=l(n.variableDeclaration)|l(n.block),t||(n.transformFlags|=64),n}function Qn(e,t){var r=O(299,void 0,e);return r.initializer=g().parenthesizeExpressionForDisallowedComma(t),r.transformFlags|=l(r.name)|l(r.initializer),r.illegalDecorators=void 0,r.modifiers=void 0,r.questionToken=void 0,r.exclamationToken=void 0,r}function Xn(e,t){var r=O(300,void 0,e);return r.objectAssignmentInitializer=t&&g().parenthesizeExpressionForDisallowedComma(t),r.transformFlags|=1024|l(r.objectAssignmentInitializer),r.equalsToken=void 0,r.illegalDecorators=void 0,r.modifiers=void 0,r.questionToken=void 0,r.exclamationToken=void 0,r}function Yn(e){var t=w(301);return t.expression=g().parenthesizeExpressionForDisallowedComma(e),t.transformFlags|=65664|l(t.expression),t}function Zn(e,t){var r=w(302);return r.name=bi(e),r.initializer=t&&g().parenthesizeExpressionForDisallowedComma(t),r.transformFlags|=l(r.name)|l(r.initializer)|1,r}function $n(t,r){void 0===r&&(r=e.emptyArray);var n=w(309);return n.prepends=r,n.sourceFiles=t,n}function ei(e,t){var r=w(e);return r.data=t,r}function ti(t,r){var n=w(353);return n.expression=t,n.original=r,n.transformFlags|=1|l(n.expression),e.setTextRange(n,r),n}function ri(e,t){return e.expression!==t?f(ti(t,e.original),e):e}function ni(t){if(e.nodeIsSynthesized(t)&&!e.isParseTreeNode(t)&&!t.original&&!t.emitNode&&!t.id){if(e.isCommaListExpression(t))return t.elements;if(e.isBinaryExpression(t)&&e.isCommaToken(t.operatorToken))return[t.left,t.right]}return t}function ii(t){var r=w(354);return r.elements=P(e.sameFlatMap(t,ni)),r.transformFlags|=_(r.elements),r}function ai(e,t){var r=w(357);return r.expression=e,r.thisArg=t,r.transformFlags|=l(r.expression)|l(r.thisArg),r}function oi(t){if(void 0===t)return t;var r=e.isSourceFile(t)?p.createBaseSourceFileNode(308):e.isIdentifier(t)?p.createBaseIdentifierNode(79):e.isPrivateIdentifier(t)?p.createBasePrivateIdentifierNode(80):e.isNodeKind(t.kind)?p.createBaseNode(t.kind):p.createBaseTokenNode(t.kind);for(var n in r.flags|=-9&t.flags,r.transformFlags=t.transformFlags,v(r,t),t)!e.hasProperty(r,n)&&e.hasProperty(t,n)&&(r[n]=t[n]);return r}function si(){return Mt(V("0"))}function ci(t,r,n){return e.isCallChain(t)?xt(gt(t,void 0,r),void 0,void 0,n):bt(ft(t,r),void 0,n)}function ui(e,t,r){return ci(Y(e),t,r)}function li(e,t,r){return!!r&&(e.push(Qn(t,r)),!0)}function _i(t,r){var n=e.skipParentheses(t);switch(n.kind){case 79:return r;case 108:case 8:case 9:case 10:return!1;case 206:return 0!==n.elements.length;case 207:return n.properties.length>0;default:return!0}}function di(t,r,n,i){void 0===i&&(i=0);var a=e.getNameOfDeclaration(t);if(a&&e.isIdentifier(a)&&!e.isGeneratedIdentifier(a)){var o=e.setParent(e.setTextRange(oi(a),a),a.parent);return i|=e.getEmitFlags(a),n||(i|=48),r||(i|=1536),i&&e.setEmitFlags(o,i),o}return $(t)}function pi(e,t,r){return di(e,t,r,8192)}function fi(t,r,n,i){var a=ft(t,e.nodeIsSynthesized(r)?r:oi(r));e.setTextRange(a,r);var o=0;return i||(o|=48),n||(o|=1536),o&&e.setEmitFlags(a,o),a}function gi(){return e.startOnNewLine(lr(H("use strict")))}function mi(t,r,n,i){void 0===n&&(n=0),e.Debug.assert(0===r.length,"Prologue directives should be at the first statement in the target statements array");for(var a,o=!1,s=t.length;n<s;){var c=t[n];if(!e.isPrologueDirective(c))break;a=c,e.isStringLiteral(a.expression)&&"use strict"===a.expression.text&&(o=!0),r.push(c),n++}return i&&!o&&r.push(gi()),n}function yi(t,r,n,i,a){void 0===a&&(a=e.returnTrue);for(var o=t.length;void 0!==n&&n<o;){var s=t[n];if(!(1048576&e.getEmitFlags(s)&&a(s)))break;e.append(r,i?e.visitNode(s,i,e.isStatement):s),n++}return n}function vi(e,t,r){for(var n=r;n<e.length&&t(e[n]);)n++;return n}function hi(e){return e?P(e):void 0}function bi(e){return"string"==typeof e?Y(e):e}function xi(e){return"string"==typeof e?H(e):"number"==typeof e?V(e):"boolean"==typeof e?e?ae():oe():e}function Di(t){return t&&e.isNotEmittedStatement(t)?e.setTextRange(v(ur(),t),t):t}}function i(t,r){return t!==r&&e.setTextRange(t,r),t}function o(t,r){return t!==r&&(v(t,r),e.setTextRange(t,r)),t}function s(t){switch(t){case 346:return"type";case 344:return"returns";case 345:return"this";case 342:return"enum";case 333:return"author";case 335:return"class";case 336:return"public";case 337:return"private";case 338:return"protected";case 339:return"readonly";case 340:return"override";case 347:return"template";case 348:return"typedef";case 343:return"param";case 350:return"prop";case 341:return"callback";case 331:return"augments";case 332:return"implements";default:return e.Debug.fail("Unsupported kind: ".concat(e.Debug.formatSyntaxKind(t)))}}!function(e){e[e.None=0]="None",e[e.NoParenthesizerRules=1]="NoParenthesizerRules",e[e.NoNodeConverters=2]="NoNodeConverters",e[e.NoIndentationOnFreshPropertyAccess=4]="NoIndentationOnFreshPropertyAccess",e[e.NoOriginalNode=8]="NoOriginalNode"}(e.NodeFactoryFlags||(e.NodeFactoryFlags={})),e.createNodeFactory=n;var c={};function u(e){return-67108865&l(e)}function l(t){if(!t)return 0;var r,n=t.transformFlags&~p(t.kind);return e.isNamedDeclaration(t)&&e.isPropertyName(t.name)?(r=t.name,n|134234112&r.transformFlags):n}function _(e){return e?e.transformFlags:0}function d(e){for(var t=0,r=0,n=e;r<n.length;r++){t|=l(n[r])}e.transformFlags=t}function p(e){if(e>=179&&e<=202)return-2;switch(e){case 210:case 211:case 206:case 203:case 204:return-2147450880;case 264:return-1941676032;case 166:case 213:case 235:case 231:case 353:case 214:case 106:case 208:case 209:default:return-2147483648;case 216:return-2072174592;case 215:case 259:return-1937940480;case 258:return-2146893824;case 260:case 228:return-2147344384;case 173:return-1937948672;case 169:return-2013249536;case 171:case 174:case 175:return-2005057536;case 131:case 148:case 160:case 144:case 152:case 149:case 134:case 153:case 114:case 165:case 168:case 170:case 176:case 177:case 178:case 261:case 262:return-2;case 207:return-2147278848;case 295:return-2147418112}}e.getTransformFlagsSubtreeExclusions=p;var f=e.createBaseNodeFactory();function g(e){return e.flags|=8,e}var m,y={createBaseSourceFileNode:function(e){return g(f.createBaseSourceFileNode(e))},createBaseIdentifierNode:function(e){return g(f.createBaseIdentifierNode(e))},createBasePrivateIdentifierNode:function(e){return g(f.createBasePrivateIdentifierNode(e))},createBaseTokenNode:function(e){return g(f.createBaseTokenNode(e))},createBaseNode:function(e){return g(f.createBaseNode(e))}};function v(t,r){if(t.original=r,r){var n=r.emitNode;n&&(t.emitNode=function(t,r){var n=t.flags,i=t.leadingComments,a=t.trailingComments,o=t.commentRange,s=t.sourceMapRange,c=t.tokenSourceMapRanges,u=t.constantValue,l=t.helpers,_=t.startsOnNewLine,d=t.snippetElement;r||(r={});i&&(r.leadingComments=e.addRange(i.slice(),r.leadingComments));a&&(r.trailingComments=e.addRange(a.slice(),r.trailingComments));n&&(r.flags=-268435457&n);o&&(r.commentRange=o);s&&(r.sourceMapRange=s);c&&(r.tokenSourceMapRanges=function(e,t){t||(t=[]);for(var r in e)t[r]=e[r];return t}(c,r.tokenSourceMapRanges));void 0!==u&&(r.constantValue=u);if(l)for(var p=0,f=l;p<f.length;p++){var g=f[p];r.helpers=e.appendIfUnique(r.helpers,g)}void 0!==_&&(r.startsOnNewLine=_);void 0!==d&&(r.snippetElement=d);return r}(n,t.emitNode))}return t}e.factory=n(4,y),e.createUnparsedSourceFile=function(t,r,n){var i,a,o,s,c,u,l,_,d,p;e.isString(t)?(o="",s=t,c=t.length,u=r,l=n):(e.Debug.assert("js"===r||"dts"===r),o=("js"===r?t.javascriptPath:t.declarationPath)||"",u="js"===r?t.javascriptMapPath:t.declarationMapPath,_=function(){return"js"===r?t.javascriptText:t.declarationText},d=function(){return"js"===r?t.javascriptMapText:t.declarationMapText},c=function(){return _().length},t.buildInfo&&t.buildInfo.bundle&&(e.Debug.assert(void 0===n||"boolean"==typeof n),i=n,a="js"===r?t.buildInfo.bundle.js:t.buildInfo.bundle.dts,p=t.oldFileOfCurrentEmit));var f=p?function(t){for(var r,n,i=0,a=t.sections;i<a.length;i++){var o=a[i];switch(o.kind){case"internal":case"text":r=e.append(r,e.setTextRange(e.factory.createUnparsedTextLike(o.data,"internal"===o.kind),o));break;case"no-default-lib":case"reference":case"type":case"type-import":case"type-require":case"lib":n=e.append(n,e.setTextRange(e.factory.createUnparsedSyntheticReference(o),o));break;case"prologue":case"emitHelpers":case"prepend":break;default:e.Debug.assertNever(o)}}var s=e.factory.createUnparsedSource(e.emptyArray,n,null!=r?r:e.emptyArray);return e.setEachParent(n,s),e.setEachParent(r,s),s.helpers=e.map(t.sources&&t.sources.helpers,(function(t){return e.getAllUnscopedEmitHelpers().get(t)})),s}(e.Debug.checkDefined(a)):function(t,r,n){for(var i,a,o,s,c,u,l,_,d=0,p=t?t.sections:e.emptyArray;d<p.length;d++){var f=p[d];switch(f.kind){case"prologue":i=e.append(i,e.setTextRange(e.factory.createUnparsedPrologue(f.data),f));break;case"emitHelpers":a=e.append(a,e.getAllUnscopedEmitHelpers().get(f.data));break;case"no-default-lib":_=!0;break;case"reference":o=e.append(o,{pos:-1,end:-1,fileName:f.data});break;case"type":s=e.append(s,{pos:-1,end:-1,fileName:f.data});break;case"type-import":s=e.append(s,{pos:-1,end:-1,fileName:f.data,resolutionMode:e.ModuleKind.ESNext});break;case"type-require":s=e.append(s,{pos:-1,end:-1,fileName:f.data,resolutionMode:e.ModuleKind.CommonJS});break;case"lib":c=e.append(c,{pos:-1,end:-1,fileName:f.data});break;case"prepend":for(var g=void 0,m=0,y=f.texts;m<y.length;m++){var v=y[m];r&&"internal"===v.kind||(g=e.append(g,e.setTextRange(e.factory.createUnparsedTextLike(v.data,"internal"===v.kind),v)))}u=e.addRange(u,g),l=e.append(l,e.factory.createUnparsedPrepend(f.data,null!=g?g:e.emptyArray));break;case"internal":if(r){l||(l=[]);break}case"text":l=e.append(l,e.setTextRange(e.factory.createUnparsedTextLike(f.data,"internal"===f.kind),f));break;default:e.Debug.assertNever(f)}}if(!l){var h=e.factory.createUnparsedTextLike(void 0,!1);e.setTextRangePosWidth(h,0,"function"==typeof n?n():n),l=[h]}var b=e.parseNodeFactory.createUnparsedSource(null!=i?i:e.emptyArray,void 0,l);return e.setEachParent(i,b),e.setEachParent(l,b),e.setEachParent(u,b),b.hasNoDefaultLib=_,b.helpers=a,b.referencedFiles=o||e.emptyArray,b.typeReferenceDirectives=s,b.libReferenceDirectives=c||e.emptyArray,b}(a,i,c);return f.fileName=o,f.sourceMapPath=u,f.oldFileOfCurrentEmit=p,_&&d?(Object.defineProperty(f,"text",{get:_}),Object.defineProperty(f,"sourceMapText",{get:d})):(e.Debug.assert(!p),f.text=null!=s?s:"",f.sourceMapText=l),f},e.createInputFiles=function(t,r,n,i,a,o,s,c,u,l,_){var d=e.parseNodeFactory.createInputFiles();if(e.isString(t))d.javascriptText=t,d.javascriptMapPath=n,d.javascriptMapText=i,d.declarationText=r,d.declarationMapPath=a,d.declarationMapText=o,d.javascriptPath=s,d.declarationPath=c,d.buildInfoPath=u,d.buildInfo=l,d.oldFileOfCurrentEmit=_;else{var p,f=new e.Map,g=function(e){if(void 0!==e){var r=f.get(e);return void 0===r&&(r=t(e),f.set(e,void 0!==r&&r)),!1!==r?r:void 0}},m=function(e){var t=g(e);return void 0!==t?t:"/* Input file ".concat(e," was missing */\r\n")};d.javascriptPath=r,d.javascriptMapPath=n,d.declarationPath=e.Debug.checkDefined(i),d.declarationMapPath=a,d.buildInfoPath=o,Object.defineProperties(d,{javascriptText:{get:function(){return m(r)}},javascriptMapText:{get:function(){return g(n)}},declarationText:{get:function(){return m(e.Debug.checkDefined(i))}},declarationMapText:{get:function(){return g(a)}},buildInfo:{get:function(){return function(t){var r;if(void 0===p){var n=t();p=void 0!==n&&null!==(r=e.getBuildInfo(d.buildInfoPath,n))&&void 0!==r&&r}return p||void 0}((function(){return g(o)}))}}})}return d},e.createSourceMapSource=function(t,r,n){return new(m||(m=e.objectAllocator.getSourceMapSourceConstructor()))(t,r,n)},e.setOriginalNode=v}(_||(_={})),function(e){function t(r){var n;if(r.emitNode)e.Debug.assert(!(268435456&r.emitNode.flags),"Invalid attempt to mutate an immutable node.");else{if(e.isParseTreeNode(r)){if(308===r.kind)return r.emitNode={annotatedNodes:[r]};t(null!==(n=e.getSourceFileOfNode(e.getParseTreeNode(e.getSourceFileOfNode(r))))&&void 0!==n?n:e.Debug.fail("Could not determine parsed source file.")).annotatedNodes.push(r)}r.emitNode={}}return r.emitNode}function r(e){var t;return null===(t=e.emitNode)||void 0===t?void 0:t.leadingComments}function n(e,r){return t(e).leadingComments=r,e}function i(e){var t;return null===(t=e.emitNode)||void 0===t?void 0:t.trailingComments}function a(e,r){return t(e).trailingComments=r,e}e.getOrCreateEmitNode=t,e.disposeEmitNodes=function(t){var r,n,i=null===(n=null===(r=e.getSourceFileOfNode(e.getParseTreeNode(t)))||void 0===r?void 0:r.emitNode)||void 0===n?void 0:n.annotatedNodes;if(i)for(var a=0,o=i;a<o.length;a++){o[a].emitNode=void 0}},e.removeAllComments=function(e){var r=t(e);return r.flags|=1536,r.leadingComments=void 0,r.trailingComments=void 0,e},e.setEmitFlags=function(e,r){return t(e).flags=r,e},e.addEmitFlags=function(e,r){var n=t(e);return n.flags=n.flags|r,e},e.getSourceMapRange=function(e){var t,r;return null!==(r=null===(t=e.emitNode)||void 0===t?void 0:t.sourceMapRange)&&void 0!==r?r:e},e.setSourceMapRange=function(e,r){return t(e).sourceMapRange=r,e},e.getTokenSourceMapRange=function(e,t){var r,n;return null===(n=null===(r=e.emitNode)||void 0===r?void 0:r.tokenSourceMapRanges)||void 0===n?void 0:n[t]},e.setTokenSourceMapRange=function(e,r,n){var i,a=t(e);return(null!==(i=a.tokenSourceMapRanges)&&void 0!==i?i:a.tokenSourceMapRanges=[])[r]=n,e},e.getStartsOnNewLine=function(e){var t;return null===(t=e.emitNode)||void 0===t?void 0:t.startsOnNewLine},e.setStartsOnNewLine=function(e,r){return t(e).startsOnNewLine=r,e},e.getCommentRange=function(e){var t,r;return null!==(r=null===(t=e.emitNode)||void 0===t?void 0:t.commentRange)&&void 0!==r?r:e},e.setCommentRange=function(e,r){return t(e).commentRange=r,e},e.getSyntheticLeadingComments=r,e.setSyntheticLeadingComments=n,e.addSyntheticLeadingComment=function(t,i,a,o){return n(t,e.append(r(t),{kind:i,pos:-1,end:-1,hasTrailingNewLine:o,text:a}))},e.getSyntheticTrailingComments=i,e.setSyntheticTrailingComments=a,e.addSyntheticTrailingComment=function(t,r,n,o){return a(t,e.append(i(t),{kind:r,pos:-1,end:-1,hasTrailingNewLine:o,text:n}))},e.moveSyntheticComments=function(e,o){n(e,r(o)),a(e,i(o));var s=t(o);return s.leadingComments=void 0,s.trailingComments=void 0,e},e.getConstantValue=function(e){var t;return null===(t=e.emitNode)||void 0===t?void 0:t.constantValue},e.setConstantValue=function(e,r){return t(e).constantValue=r,e},e.addEmitHelper=function(r,n){var i=t(r);return i.helpers=e.append(i.helpers,n),r},e.addEmitHelpers=function(r,n){if(e.some(n))for(var i=t(r),a=0,o=n;a<o.length;a++){var s=o[a];i.helpers=e.appendIfUnique(i.helpers,s)}return r},e.removeEmitHelper=function(t,r){var n,i=null===(n=t.emitNode)||void 0===n?void 0:n.helpers;return!!i&&e.orderedRemoveItem(i,r)},e.getEmitHelpers=function(e){var t;return null===(t=e.emitNode)||void 0===t?void 0:t.helpers},e.moveEmitHelpers=function(r,n,i){var a=r.emitNode,o=a&&a.helpers;if(e.some(o)){for(var s=t(n),c=0,u=0;u<o.length;u++){var l=o[u];i(l)?(c++,s.helpers=e.appendIfUnique(s.helpers,l)):c>0&&(o[u-c]=l)}c>0&&(o.length-=c)}},e.getSnippetElement=function(e){var t;return null===(t=e.emitNode)||void 0===t?void 0:t.snippetElement},e.setSnippetElement=function(e,r){return t(e).snippetElement=r,e},e.ignoreSourceNewlines=function(e){return t(e).flags|=134217728,e},e.setTypeNode=function(e,r){return t(e).typeNode=r,e},e.getTypeNode=function(e){var t;return null===(t=e.emitNode)||void 0===t?void 0:t.typeNode}}(_||(_={})),function(e){function t(e){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return function(r){for(var n="",i=0;i<t.length;i++)n+=e[i],n+=r(t[i]);return n+=e[e.length-1]}}var r;e.createEmitHelperFactory=function(t){var r=t.factory,n=e.memoize((function(){return e.setEmitFlags(r.createTrue(),268435456)})),i=e.memoize((function(){return e.setEmitFlags(r.createFalse(),268435456)}));return{getUnscopedHelperName:o,createDecorateHelper:function(n,i,a,s){t.requestEmitHelper(e.decorateHelper);var c=[];c.push(r.createArrayLiteralExpression(n,!0)),c.push(i),a&&(c.push(a),s&&c.push(s));return r.createCallExpression(o("__decorate"),void 0,c)},createMetadataHelper:function(n,i){return t.requestEmitHelper(e.metadataHelper),r.createCallExpression(o("__metadata"),void 0,[r.createStringLiteral(n),i])},createParamHelper:function(n,i,a){return t.requestEmitHelper(e.paramHelper),e.setTextRange(r.createCallExpression(o("__param"),void 0,[r.createNumericLiteral(i+""),n]),a)},createAssignHelper:function(n){if(e.getEmitScriptTarget(t.getCompilerOptions())>=2)return r.createCallExpression(r.createPropertyAccessExpression(r.createIdentifier("Object"),"assign"),void 0,n);return t.requestEmitHelper(e.assignHelper),r.createCallExpression(o("__assign"),void 0,n)},createAwaitHelper:function(n){return t.requestEmitHelper(e.awaitHelper),r.createCallExpression(o("__await"),void 0,[n])},createAsyncGeneratorHelper:function(n,i){return t.requestEmitHelper(e.awaitHelper),t.requestEmitHelper(e.asyncGeneratorHelper),(n.emitNode||(n.emitNode={})).flags|=786432,r.createCallExpression(o("__asyncGenerator"),void 0,[i?r.createThis():r.createVoidZero(),r.createIdentifier("arguments"),n])},createAsyncDelegatorHelper:function(n){return t.requestEmitHelper(e.awaitHelper),t.requestEmitHelper(e.asyncDelegator),r.createCallExpression(o("__asyncDelegator"),void 0,[n])},createAsyncValuesHelper:function(n){return t.requestEmitHelper(e.asyncValues),r.createCallExpression(o("__asyncValues"),void 0,[n])},createRestHelper:function(n,i,a,s){t.requestEmitHelper(e.restHelper);for(var c=[],u=0,l=0;l<i.length-1;l++){var _=e.getPropertyNameOfBindingOrAssignmentElement(i[l]);if(_)if(e.isComputedPropertyName(_)){e.Debug.assertIsDefined(a,"Encountered computed property name but 'computedTempVariables' argument was not provided.");var d=a[u];u++,c.push(r.createConditionalExpression(r.createTypeCheck(d,"symbol"),void 0,d,void 0,r.createAdd(d,r.createStringLiteral(""))))}else c.push(r.createStringLiteralFromNode(_))}return r.createCallExpression(o("__rest"),void 0,[n,e.setTextRange(r.createArrayLiteralExpression(c),s)])},createAwaiterHelper:function(n,i,a,s){t.requestEmitHelper(e.awaiterHelper);var c=r.createFunctionExpression(void 0,r.createToken(41),void 0,void 0,[],void 0,s);return(c.emitNode||(c.emitNode={})).flags|=786432,r.createCallExpression(o("__awaiter"),void 0,[n?r.createThis():r.createVoidZero(),i?r.createIdentifier("arguments"):r.createVoidZero(),a?e.createExpressionFromEntityName(r,a):r.createVoidZero(),c])},createExtendsHelper:function(n){return t.requestEmitHelper(e.extendsHelper),r.createCallExpression(o("__extends"),void 0,[n,r.createUniqueName("_super",48)])},createTemplateObjectHelper:function(n,i){return t.requestEmitHelper(e.templateObjectHelper),r.createCallExpression(o("__makeTemplateObject"),void 0,[n,i])},createSpreadArrayHelper:function(a,s,c){return t.requestEmitHelper(e.spreadArrayHelper),r.createCallExpression(o("__spreadArray"),void 0,[a,s,c?n():i()])},createValuesHelper:function(n){return t.requestEmitHelper(e.valuesHelper),r.createCallExpression(o("__values"),void 0,[n])},createReadHelper:function(n,i){return t.requestEmitHelper(e.readHelper),r.createCallExpression(o("__read"),void 0,void 0!==i?[n,r.createNumericLiteral(i+"")]:[n])},createGeneratorHelper:function(n){return t.requestEmitHelper(e.generatorHelper),r.createCallExpression(o("__generator"),void 0,[r.createThis(),n])},createCreateBindingHelper:function(n,i,s){return t.requestEmitHelper(e.createBindingHelper),r.createCallExpression(o("__createBinding"),void 0,a([r.createIdentifier("exports"),n,i],s?[s]:[],!0))},createImportStarHelper:function(n){return t.requestEmitHelper(e.importStarHelper),r.createCallExpression(o("__importStar"),void 0,[n])},createImportStarCallbackHelper:function(){return t.requestEmitHelper(e.importStarHelper),o("__importStar")},createImportDefaultHelper:function(n){return t.requestEmitHelper(e.importDefaultHelper),r.createCallExpression(o("__importDefault"),void 0,[n])},createExportStarHelper:function(n,i){void 0===i&&(i=r.createIdentifier("exports"));return t.requestEmitHelper(e.exportStarHelper),t.requestEmitHelper(e.createBindingHelper),r.createCallExpression(o("__exportStar"),void 0,[n,i])},createClassPrivateFieldGetHelper:function(n,i,a,s){var c;t.requestEmitHelper(e.classPrivateFieldGetHelper),c=s?[n,i,r.createStringLiteral(a),s]:[n,i,r.createStringLiteral(a)];return r.createCallExpression(o("__classPrivateFieldGet"),void 0,c)},createClassPrivateFieldSetHelper:function(n,i,a,s,c){var u;t.requestEmitHelper(e.classPrivateFieldSetHelper),u=c?[n,i,a,r.createStringLiteral(s),c]:[n,i,a,r.createStringLiteral(s)];return r.createCallExpression(o("__classPrivateFieldSet"),void 0,u)},createClassPrivateFieldInHelper:function(n,i){return t.requestEmitHelper(e.classPrivateFieldInHelper),r.createCallExpression(o("__classPrivateFieldIn"),void 0,[n,i])}};function o(t){return e.setEmitFlags(r.createIdentifier(t),4098)}},e.compareEmitHelpers=function(t,r){return t===r||t.priority===r.priority?0:void 0===t.priority?1:void 0===r.priority?-1:e.compareValues(t.priority,r.priority)},e.helperString=t,e.decorateHelper={name:"typescript:decorate",importName:"__decorate",scoped:!1,priority:2,text:'\n            var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n                var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n                if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\n                else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n                return c > 3 && r && Object.defineProperty(target, key, r), r;\n            };'},e.metadataHelper={name:"typescript:metadata",importName:"__metadata",scoped:!1,priority:3,text:'\n            var __metadata = (this && this.__metadata) || function (k, v) {\n                if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\n            };'},e.paramHelper={name:"typescript:param",importName:"__param",scoped:!1,priority:4,text:"\n            var __param = (this && this.__param) || function (paramIndex, decorator) {\n                return function (target, key) { decorator(target, key, paramIndex); }\n            };"},e.assignHelper={name:"typescript:assign",importName:"__assign",scoped:!1,priority:1,text:"\n            var __assign = (this && this.__assign) || function () {\n                __assign = Object.assign || function(t) {\n                    for (var s, i = 1, n = arguments.length; i < n; i++) {\n                        s = arguments[i];\n                        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                            t[p] = s[p];\n                    }\n                    return t;\n                };\n                return __assign.apply(this, arguments);\n            };"},e.awaitHelper={name:"typescript:await",importName:"__await",scoped:!1,text:"\n            var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }"},e.asyncGeneratorHelper={name:"typescript:asyncGenerator",importName:"__asyncGenerator",scoped:!1,dependencies:[e.awaitHelper],text:'\n            var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {\n                if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");\n                var g = generator.apply(thisArg, _arguments || []), i, q = [];\n                return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;\n                function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\n                function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n                function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n                function fulfill(value) { resume("next", value); }\n                function reject(value) { resume("throw", value); }\n                function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n            };'},e.asyncDelegator={name:"typescript:asyncDelegator",importName:"__asyncDelegator",scoped:!1,dependencies:[e.awaitHelper],text:'\n            var __asyncDelegator = (this && this.__asyncDelegator) || function (o) {\n                var i, p;\n                return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;\n                function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }\n            };'},e.asyncValues={name:"typescript:asyncValues",importName:"__asyncValues",scoped:!1,text:'\n            var __asyncValues = (this && this.__asyncValues) || function (o) {\n                if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");\n                var m = o[Symbol.asyncIterator], i;\n                return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);\n                function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n                function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n            };'},e.restHelper={name:"typescript:rest",importName:"__rest",scoped:!1,text:'\n            var __rest = (this && this.__rest) || function (s, e) {\n                var t = {};\n                for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n                    t[p] = s[p];\n                if (s != null && typeof Object.getOwnPropertySymbols === "function")\n                    for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n                        if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n                            t[p[i]] = s[p[i]];\n                    }\n                return t;\n            };'},e.awaiterHelper={name:"typescript:awaiter",importName:"__awaiter",scoped:!1,priority:5,text:'\n            var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n                function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n                return new (P || (P = Promise))(function (resolve, reject) {\n                    function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n                    function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }\n                    function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n                    step((generator = generator.apply(thisArg, _arguments || [])).next());\n                });\n            };'},e.extendsHelper={name:"typescript:extends",importName:"__extends",scoped:!1,priority:0,text:'\n            var __extends = (this && this.__extends) || (function () {\n                var extendStatics = function (d, b) {\n                    extendStatics = Object.setPrototypeOf ||\n                        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n                        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n                    return extendStatics(d, b);\n                };\n\n                return function (d, b) {\n                    if (typeof b !== "function" && b !== null)\n                        throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");\n                    extendStatics(d, b);\n                    function __() { this.constructor = d; }\n                    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n                };\n            })();'},e.templateObjectHelper={name:"typescript:makeTemplateObject",importName:"__makeTemplateObject",scoped:!1,priority:0,text:'\n            var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {\n                if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }\n                return cooked;\n            };'},e.readHelper={name:"typescript:read",importName:"__read",scoped:!1,text:'\n            var __read = (this && this.__read) || function (o, n) {\n                var m = typeof Symbol === "function" && o[Symbol.iterator];\n                if (!m) return o;\n                var i = m.call(o), r, ar = [], e;\n                try {\n                    while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n                }\n                catch (error) { e = { error: error }; }\n                finally {\n                    try {\n                        if (r && !r.done && (m = i["return"])) m.call(i);\n                    }\n                    finally { if (e) throw e.error; }\n                }\n                return ar;\n            };'},e.spreadArrayHelper={name:"typescript:spreadArray",importName:"__spreadArray",scoped:!1,text:"\n            var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n                if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n                    if (ar || !(i in from)) {\n                        if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n                        ar[i] = from[i];\n                    }\n                }\n                return to.concat(ar || Array.prototype.slice.call(from));\n            };"},e.valuesHelper={name:"typescript:values",importName:"__values",scoped:!1,text:'\n            var __values = (this && this.__values) || function(o) {\n                var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;\n                if (m) return m.call(o);\n                if (o && typeof o.length === "number") return {\n                    next: function () {\n                        if (o && i >= o.length) o = void 0;\n                        return { value: o && o[i++], done: !o };\n                    }\n                };\n                throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");\n            };'},e.generatorHelper={name:"typescript:generator",importName:"__generator",scoped:!1,priority:6,text:'\n            var __generator = (this && this.__generator) || function (thisArg, body) {\n                var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n                return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;\n                function verb(n) { return function (v) { return step([n, v]); }; }\n                function step(op) {\n                    if (f) throw new TypeError("Generator is already executing.");\n                    while (g && (g = 0, op[0] && (_ = 0)), _) try {\n                        if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n                        if (y = 0, t) op = [op[0] & 2, t.value];\n                        switch (op[0]) {\n                            case 0: case 1: t = op; break;\n                            case 4: _.label++; return { value: op[1], done: false };\n                            case 5: _.label++; y = op[1]; op = [0]; continue;\n                            case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                            default:\n                                if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                                if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                                if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                                if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                                if (t[2]) _.ops.pop();\n                                _.trys.pop(); continue;\n                        }\n                        op = body.call(thisArg, _);\n                    } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n                    if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n                }\n            };'},e.createBindingHelper={name:"typescript:commonjscreatebinding",importName:"__createBinding",scoped:!1,priority:1,text:'\n            var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n                if (k2 === undefined) k2 = k;\n                var desc = Object.getOwnPropertyDescriptor(m, k);\n                if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n                  desc = { enumerable: true, get: function() { return m[k]; } };\n                }\n                Object.defineProperty(o, k2, desc);\n            }) : (function(o, m, k, k2) {\n                if (k2 === undefined) k2 = k;\n                o[k2] = m[k];\n            }));'},e.setModuleDefaultHelper={name:"typescript:commonjscreatevalue",importName:"__setModuleDefault",scoped:!1,priority:1,text:'\n            var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n                Object.defineProperty(o, "default", { enumerable: true, value: v });\n            }) : function(o, v) {\n                o["default"] = v;\n            });'},e.importStarHelper={name:"typescript:commonjsimportstar",importName:"__importStar",scoped:!1,dependencies:[e.createBindingHelper,e.setModuleDefaultHelper],priority:2,text:'\n            var __importStar = (this && this.__importStar) || function (mod) {\n                if (mod && mod.__esModule) return mod;\n                var result = {};\n                if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n                __setModuleDefault(result, mod);\n                return result;\n            };'},e.importDefaultHelper={name:"typescript:commonjsimportdefault",importName:"__importDefault",scoped:!1,text:'\n            var __importDefault = (this && this.__importDefault) || function (mod) {\n                return (mod && mod.__esModule) ? mod : { "default": mod };\n            };'},e.exportStarHelper={name:"typescript:export-star",importName:"__exportStar",scoped:!1,dependencies:[e.createBindingHelper],priority:2,text:'\n            var __exportStar = (this && this.__exportStar) || function(m, exports) {\n                for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n            };'},e.classPrivateFieldGetHelper={name:"typescript:classPrivateFieldGet",importName:"__classPrivateFieldGet",scoped:!1,text:'\n            var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n                if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");\n                if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");\n                return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);\n            };'},e.classPrivateFieldSetHelper={name:"typescript:classPrivateFieldSet",importName:"__classPrivateFieldSet",scoped:!1,text:'\n            var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n                if (kind === "m") throw new TypeError("Private method is not writable");\n                if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");\n                if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");\n                return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n            };'},e.classPrivateFieldInHelper={name:"typescript:classPrivateFieldIn",importName:"__classPrivateFieldIn",scoped:!1,text:'\n            var __classPrivateFieldIn = (this && this.__classPrivateFieldIn) || function(state, receiver) {\n                if (receiver === null || (typeof receiver !== "object" && typeof receiver !== "function")) throw new TypeError("Cannot use \'in\' operator on non-object");\n                return typeof state === "function" ? receiver === state : state.has(receiver);\n            };'},e.getAllUnscopedEmitHelpers=function(){return r||(r=e.arrayToMap([e.decorateHelper,e.metadataHelper,e.paramHelper,e.assignHelper,e.awaitHelper,e.asyncGeneratorHelper,e.asyncDelegator,e.asyncValues,e.restHelper,e.awaiterHelper,e.extendsHelper,e.templateObjectHelper,e.spreadArrayHelper,e.valuesHelper,e.readHelper,e.generatorHelper,e.importStarHelper,e.importDefaultHelper,e.exportStarHelper,e.classPrivateFieldGetHelper,e.classPrivateFieldSetHelper,e.classPrivateFieldInHelper,e.createBindingHelper,e.setModuleDefaultHelper],(function(e){return e.name})))},e.asyncSuperHelper={name:"typescript:async-super",scoped:!0,text:t(s(["\n            const "," = name => super[name];"],["\n            const "," = name => super[name];"]),"_superIndex")},e.advancedAsyncSuperHelper={name:"typescript:advanced-async-super",scoped:!0,text:t(s(["\n            const "," = (function (geti, seti) {\n                const cache = Object.create(null);\n                return name => cache[name] || (cache[name] = { get value() { return geti(name); }, set value(v) { seti(name, v); } });\n            })(name => super[name], (name, value) => super[name] = value);"],["\n            const "," = (function (geti, seti) {\n                const cache = Object.create(null);\n                return name => cache[name] || (cache[name] = { get value() { return geti(name); }, set value(v) { seti(name, v); } });\n            })(name => super[name], (name, value) => super[name] = value);"]),"_superIndex")},e.isCallToHelper=function(t,r){return e.isCallExpression(t)&&e.isIdentifier(t.expression)&&0!=(4096&e.getEmitFlags(t.expression))&&t.expression.escapedText===r}}(_||(_={})),function(e){e.isNumericLiteral=function(e){return 8===e.kind},e.isBigIntLiteral=function(e){return 9===e.kind},e.isStringLiteral=function(e){return 10===e.kind},e.isJsxText=function(e){return 11===e.kind},e.isRegularExpressionLiteral=function(e){return 13===e.kind},e.isNoSubstitutionTemplateLiteral=function(e){return 14===e.kind},e.isTemplateHead=function(e){return 15===e.kind},e.isTemplateMiddle=function(e){return 16===e.kind},e.isTemplateTail=function(e){return 17===e.kind},e.isDotDotDotToken=function(e){return 25===e.kind},e.isCommaToken=function(e){return 27===e.kind},e.isPlusToken=function(e){return 39===e.kind},e.isMinusToken=function(e){return 40===e.kind},e.isAsteriskToken=function(e){return 41===e.kind},e.isExclamationToken=function(e){return 53===e.kind},e.isQuestionToken=function(e){return 57===e.kind},e.isColonToken=function(e){return 58===e.kind},e.isQuestionDotToken=function(e){return 28===e.kind},e.isEqualsGreaterThanToken=function(e){return 38===e.kind},e.isIdentifier=function(e){return 79===e.kind},e.isPrivateIdentifier=function(e){return 80===e.kind},e.isExportModifier=function(e){return 93===e.kind},e.isAsyncModifier=function(e){return 132===e.kind},e.isAssertsKeyword=function(e){return 129===e.kind},e.isAwaitKeyword=function(e){return 133===e.kind},e.isReadonlyKeyword=function(e){return 146===e.kind},e.isStaticModifier=function(e){return 124===e.kind},e.isAbstractModifier=function(e){return 126===e.kind},e.isOverrideModifier=function(e){return 161===e.kind},e.isAccessorModifier=function(e){return 127===e.kind},e.isSuperKeyword=function(e){return 106===e.kind},e.isImportKeyword=function(e){return 100===e.kind},e.isQualifiedName=function(e){return 163===e.kind},e.isComputedPropertyName=function(e){return 164===e.kind},e.isTypeParameterDeclaration=function(e){return 165===e.kind},e.isParameter=function(e){return 166===e.kind},e.isDecorator=function(e){return 167===e.kind},e.isPropertySignature=function(e){return 168===e.kind},e.isPropertyDeclaration=function(e){return 169===e.kind},e.isMethodSignature=function(e){return 170===e.kind},e.isMethodDeclaration=function(e){return 171===e.kind},e.isClassStaticBlockDeclaration=function(e){return 172===e.kind},e.isConstructorDeclaration=function(e){return 173===e.kind},e.isGetAccessorDeclaration=function(e){return 174===e.kind},e.isSetAccessorDeclaration=function(e){return 175===e.kind},e.isCallSignatureDeclaration=function(e){return 176===e.kind},e.isConstructSignatureDeclaration=function(e){return 177===e.kind},e.isIndexSignatureDeclaration=function(e){return 178===e.kind},e.isTypePredicateNode=function(e){return 179===e.kind},e.isTypeReferenceNode=function(e){return 180===e.kind},e.isFunctionTypeNode=function(e){return 181===e.kind},e.isConstructorTypeNode=function(e){return 182===e.kind},e.isTypeQueryNode=function(e){return 183===e.kind},e.isTypeLiteralNode=function(e){return 184===e.kind},e.isArrayTypeNode=function(e){return 185===e.kind},e.isTupleTypeNode=function(e){return 186===e.kind},e.isNamedTupleMember=function(e){return 199===e.kind},e.isOptionalTypeNode=function(e){return 187===e.kind},e.isRestTypeNode=function(e){return 188===e.kind},e.isUnionTypeNode=function(e){return 189===e.kind},e.isIntersectionTypeNode=function(e){return 190===e.kind},e.isConditionalTypeNode=function(e){return 191===e.kind},e.isInferTypeNode=function(e){return 192===e.kind},e.isParenthesizedTypeNode=function(e){return 193===e.kind},e.isThisTypeNode=function(e){return 194===e.kind},e.isTypeOperatorNode=function(e){return 195===e.kind},e.isIndexedAccessTypeNode=function(e){return 196===e.kind},e.isMappedTypeNode=function(e){return 197===e.kind},e.isLiteralTypeNode=function(e){return 198===e.kind},e.isImportTypeNode=function(e){return 202===e.kind},e.isTemplateLiteralTypeSpan=function(e){return 201===e.kind},e.isTemplateLiteralTypeNode=function(e){return 200===e.kind},e.isObjectBindingPattern=function(e){return 203===e.kind},e.isArrayBindingPattern=function(e){return 204===e.kind},e.isBindingElement=function(e){return 205===e.kind},e.isArrayLiteralExpression=function(e){return 206===e.kind},e.isObjectLiteralExpression=function(e){return 207===e.kind},e.isPropertyAccessExpression=function(e){return 208===e.kind},e.isElementAccessExpression=function(e){return 209===e.kind},e.isCallExpression=function(e){return 210===e.kind},e.isNewExpression=function(e){return 211===e.kind},e.isTaggedTemplateExpression=function(e){return 212===e.kind},e.isTypeAssertionExpression=function(e){return 213===e.kind},e.isParenthesizedExpression=function(e){return 214===e.kind},e.isFunctionExpression=function(e){return 215===e.kind},e.isArrowFunction=function(e){return 216===e.kind},e.isDeleteExpression=function(e){return 217===e.kind},e.isTypeOfExpression=function(e){return 218===e.kind},e.isVoidExpression=function(e){return 219===e.kind},e.isAwaitExpression=function(e){return 220===e.kind},e.isPrefixUnaryExpression=function(e){return 221===e.kind},e.isPostfixUnaryExpression=function(e){return 222===e.kind},e.isBinaryExpression=function(e){return 223===e.kind},e.isConditionalExpression=function(e){return 224===e.kind},e.isTemplateExpression=function(e){return 225===e.kind},e.isYieldExpression=function(e){return 226===e.kind},e.isSpreadElement=function(e){return 227===e.kind},e.isClassExpression=function(e){return 228===e.kind},e.isOmittedExpression=function(e){return 229===e.kind},e.isExpressionWithTypeArguments=function(e){return 230===e.kind},e.isAsExpression=function(e){return 231===e.kind},e.isSatisfiesExpression=function(e){return 235===e.kind},e.isNonNullExpression=function(e){return 232===e.kind},e.isMetaProperty=function(e){return 233===e.kind},e.isSyntheticExpression=function(e){return 234===e.kind},e.isPartiallyEmittedExpression=function(e){return 353===e.kind},e.isCommaListExpression=function(e){return 354===e.kind},e.isTemplateSpan=function(e){return 236===e.kind},e.isSemicolonClassElement=function(e){return 237===e.kind},e.isBlock=function(e){return 238===e.kind},e.isVariableStatement=function(e){return 240===e.kind},e.isEmptyStatement=function(e){return 239===e.kind},e.isExpressionStatement=function(e){return 241===e.kind},e.isIfStatement=function(e){return 242===e.kind},e.isDoStatement=function(e){return 243===e.kind},e.isWhileStatement=function(e){return 244===e.kind},e.isForStatement=function(e){return 245===e.kind},e.isForInStatement=function(e){return 246===e.kind},e.isForOfStatement=function(e){return 247===e.kind},e.isContinueStatement=function(e){return 248===e.kind},e.isBreakStatement=function(e){return 249===e.kind},e.isReturnStatement=function(e){return 250===e.kind},e.isWithStatement=function(e){return 251===e.kind},e.isSwitchStatement=function(e){return 252===e.kind},e.isLabeledStatement=function(e){return 253===e.kind},e.isThrowStatement=function(e){return 254===e.kind},e.isTryStatement=function(e){return 255===e.kind},e.isDebuggerStatement=function(e){return 256===e.kind},e.isVariableDeclaration=function(e){return 257===e.kind},e.isVariableDeclarationList=function(e){return 258===e.kind},e.isFunctionDeclaration=function(e){return 259===e.kind},e.isClassDeclaration=function(e){return 260===e.kind},e.isInterfaceDeclaration=function(e){return 261===e.kind},e.isTypeAliasDeclaration=function(e){return 262===e.kind},e.isEnumDeclaration=function(e){return 263===e.kind},e.isModuleDeclaration=function(e){return 264===e.kind},e.isModuleBlock=function(e){return 265===e.kind},e.isCaseBlock=function(e){return 266===e.kind},e.isNamespaceExportDeclaration=function(e){return 267===e.kind},e.isImportEqualsDeclaration=function(e){return 268===e.kind},e.isImportDeclaration=function(e){return 269===e.kind},e.isImportClause=function(e){return 270===e.kind},e.isImportTypeAssertionContainer=function(e){return 298===e.kind},e.isAssertClause=function(e){return 296===e.kind},e.isAssertEntry=function(e){return 297===e.kind},e.isNamespaceImport=function(e){return 271===e.kind},e.isNamespaceExport=function(e){return 277===e.kind},e.isNamedImports=function(e){return 272===e.kind},e.isImportSpecifier=function(e){return 273===e.kind},e.isExportAssignment=function(e){return 274===e.kind},e.isExportDeclaration=function(e){return 275===e.kind},e.isNamedExports=function(e){return 276===e.kind},e.isExportSpecifier=function(e){return 278===e.kind},e.isMissingDeclaration=function(e){return 279===e.kind},e.isNotEmittedStatement=function(e){return 352===e.kind},e.isSyntheticReference=function(e){return 357===e.kind},e.isMergeDeclarationMarker=function(e){return 355===e.kind},e.isEndOfDeclarationMarker=function(e){return 356===e.kind},e.isExternalModuleReference=function(e){return 280===e.kind},e.isJsxElement=function(e){return 281===e.kind},e.isJsxSelfClosingElement=function(e){return 282===e.kind},e.isJsxOpeningElement=function(e){return 283===e.kind},e.isJsxClosingElement=function(e){return 284===e.kind},e.isJsxFragment=function(e){return 285===e.kind},e.isJsxOpeningFragment=function(e){return 286===e.kind},e.isJsxClosingFragment=function(e){return 287===e.kind},e.isJsxAttribute=function(e){return 288===e.kind},e.isJsxAttributes=function(e){return 289===e.kind},e.isJsxSpreadAttribute=function(e){return 290===e.kind},e.isJsxExpression=function(e){return 291===e.kind},e.isCaseClause=function(e){return 292===e.kind},e.isDefaultClause=function(e){return 293===e.kind},e.isHeritageClause=function(e){return 294===e.kind},e.isCatchClause=function(e){return 295===e.kind},e.isPropertyAssignment=function(e){return 299===e.kind},e.isShorthandPropertyAssignment=function(e){return 300===e.kind},e.isSpreadAssignment=function(e){return 301===e.kind},e.isEnumMember=function(e){return 302===e.kind},e.isUnparsedPrepend=function(e){return 304===e.kind},e.isSourceFile=function(e){return 308===e.kind},e.isBundle=function(e){return 309===e.kind},e.isUnparsedSource=function(e){return 310===e.kind},e.isJSDocTypeExpression=function(e){return 312===e.kind},e.isJSDocNameReference=function(e){return 313===e.kind},e.isJSDocMemberName=function(e){return 314===e.kind},e.isJSDocLink=function(e){return 327===e.kind},e.isJSDocLinkCode=function(e){return 328===e.kind},e.isJSDocLinkPlain=function(e){return 329===e.kind},e.isJSDocAllType=function(e){return 315===e.kind},e.isJSDocUnknownType=function(e){return 316===e.kind},e.isJSDocNullableType=function(e){return 317===e.kind},e.isJSDocNonNullableType=function(e){return 318===e.kind},e.isJSDocOptionalType=function(e){return 319===e.kind},e.isJSDocFunctionType=function(e){return 320===e.kind},e.isJSDocVariadicType=function(e){return 321===e.kind},e.isJSDocNamepathType=function(e){return 322===e.kind},e.isJSDoc=function(e){return 323===e.kind},e.isJSDocTypeLiteral=function(e){return 325===e.kind},e.isJSDocSignature=function(e){return 326===e.kind},e.isJSDocAugmentsTag=function(e){return 331===e.kind},e.isJSDocAuthorTag=function(e){return 333===e.kind},e.isJSDocClassTag=function(e){return 335===e.kind},e.isJSDocCallbackTag=function(e){return 341===e.kind},e.isJSDocPublicTag=function(e){return 336===e.kind},e.isJSDocPrivateTag=function(e){return 337===e.kind},e.isJSDocProtectedTag=function(e){return 338===e.kind},e.isJSDocReadonlyTag=function(e){return 339===e.kind},e.isJSDocOverrideTag=function(e){return 340===e.kind},e.isJSDocDeprecatedTag=function(e){return 334===e.kind},e.isJSDocSeeTag=function(e){return 349===e.kind},e.isJSDocEnumTag=function(e){return 342===e.kind},e.isJSDocParameterTag=function(e){return 343===e.kind},e.isJSDocReturnTag=function(e){return 344===e.kind},e.isJSDocThisTag=function(e){return 345===e.kind},e.isJSDocTypeTag=function(e){return 346===e.kind},e.isJSDocTemplateTag=function(e){return 347===e.kind},e.isJSDocTypedefTag=function(e){return 348===e.kind},e.isJSDocUnknownTag=function(e){return 330===e.kind},e.isJSDocPropertyTag=function(e){return 350===e.kind},e.isJSDocImplementsTag=function(e){return 332===e.kind},e.isSyntaxList=function(e){return 351===e.kind}}(_||(_={})),function(e){function t(t,r,n,i){if(e.isComputedPropertyName(n))return e.setTextRange(t.createElementAccessExpression(r,n.expression),i);var a=e.setTextRange(e.isMemberName(n)?t.createPropertyAccessExpression(r,n):t.createElementAccessExpression(r,n),n);return e.getOrCreateEmitNode(a).flags|=64,a}function r(t,r){var n=e.parseNodeFactory.createIdentifier(t||"React");return e.setParent(n,e.getParseTreeNode(r)),n}function n(t,i,a){if(e.isQualifiedName(i)){var o=n(t,i.left,a),s=t.createIdentifier(e.idText(i.right));return s.escapedText=i.right.escapedText,t.createPropertyAccessExpression(o,s)}return r(e.idText(i),a)}function i(e,t,i,a){return t?n(e,t,a):e.createPropertyAccessExpression(r(i,a),"createElement")}function o(t,r){return e.isIdentifier(r)?t.createStringLiteralFromNode(r):e.isComputedPropertyName(r)?e.setParent(e.setTextRange(t.cloneNode(r.expression),r.expression),r.expression.parent):e.setParent(e.setTextRange(t.cloneNode(r),r),r.parent)}function s(t){return e.isStringLiteral(t.expression)&&"use strict"===t.expression.text}function c(t){return e.isParenthesizedExpression(t)&&e.isInJSFile(t)&&!!e.getJSDocTypeTag(t)}function u(e,t){switch(void 0===t&&(t=15),e.kind){case 214:return!(16&t&&c(e))&&0!=(1&t);case 213:case 231:case 235:return 0!=(2&t);case 232:return 0!=(4&t);case 353:return 0!=(8&t)}return!1}function l(e,t){for(void 0===t&&(t=15);u(e,t);)e=e.expression;return e}function _(t){return e.setStartsOnNewLine(t,!0)}function d(t){var r=e.getOriginalNode(t,e.isSourceFile),n=r&&r.emitNode;return n&&n.externalHelpersModuleName}function p(t,r,n,i,a){if(n.importHelpers&&e.isEffectiveExternalModule(r,n)){var o=d(r);if(o)return o;var s=e.getEmitModuleKind(n),c=(i||e.getESModuleInterop(n)&&a)&&s!==e.ModuleKind.System&&(s<e.ModuleKind.ES2015||r.impliedNodeFormat===e.ModuleKind.CommonJS);if(!c){var u=e.getEmitHelpers(r);if(u)for(var l=0,_=u;l<_.length;l++){if(!_[l].scoped){c=!0;break}}}if(c){var p=e.getOriginalNode(r,e.isSourceFile),f=e.getOrCreateEmitNode(p);return f.externalHelpersModuleName||(f.externalHelpersModuleName=t.createUniqueName(e.externalHelpersModuleNameText))}}}function f(t,r,n,i){if(r)return r.moduleName?t.createStringLiteral(r.moduleName):!r.isDeclarationFile&&e.outFile(i)?t.createStringLiteral(e.getExternalModuleNameFromPath(n,r.fileName)):void 0}function g(t){if(e.isDeclarationBindingElement(t))return t.name;if(!e.isObjectLiteralElementLike(t))return e.isAssignmentExpression(t,!0)?g(t.left):e.isSpreadElement(t)?g(t.expression):t;switch(t.kind){case 299:return g(t.initializer);case 300:return t.name;case 301:return g(t.expression)}}function m(t){switch(t.kind){case 205:if(t.propertyName){var r=t.propertyName;return e.isPrivateIdentifier(r)?e.Debug.failBadSyntaxKind(r):e.isComputedPropertyName(r)&&y(r.expression)?r.expression:r}break;case 299:if(t.name){r=t.name;return e.isPrivateIdentifier(r)?e.Debug.failBadSyntaxKind(r):e.isComputedPropertyName(r)&&y(r.expression)?r.expression:r}break;case 301:return t.name&&e.isPrivateIdentifier(t.name)?e.Debug.failBadSyntaxKind(t.name):t.name}var n=g(t);if(n&&e.isPropertyName(n))return n}function y(e){var t=e.kind;return 10===t||8===t}function v(t){return function(t){return 60===t||function(e){return function(e){return 55===e||56===e}(e)||function(e){return function(e){return 50===e||51===e||52===e}(e)||function(e){return function(e){return 34===e||36===e||35===e||37===e}(e)||function(e){return function(e){return 29===e||32===e||31===e||33===e||102===e||101===e}(e)||function(e){return function(e){return 47===e||48===e||49===e}(e)||function(e){return function(e){return 39===e||40===e}(e)||function(e){return function(e){return 42===e}(e)||function(e){return 41===e||43===e||44===e}(e)}(e)}(e)}(e)}(e)}(e)}(e)}(t)||e.isAssignmentOperator(t)}(t)||27===t}var h;e.createEmptyExports=function(e){return e.createExportDeclaration(void 0,!1,e.createNamedExports([]),void 0)},e.createMemberAccessForPropertyName=t,e.createJsxFactoryExpression=i,e.createExpressionForJsxElement=function(t,r,n,i,a,o){var s=[n];if(i&&s.push(i),a&&a.length>0)if(i||s.push(t.createNull()),a.length>1)for(var c=0,u=a;c<u.length;c++){var l=u[c];_(l),s.push(l)}else s.push(a[0]);return e.setTextRange(t.createCallExpression(r,void 0,s),o)},e.createExpressionForJsxFragment=function(t,a,o,s,c,u,l){var d=[function(e,t,i,a){return t?n(e,t,a):e.createPropertyAccessExpression(r(i,a),"Fragment")}(t,o,s,u),t.createNull()];if(c&&c.length>0)if(c.length>1)for(var p=0,f=c;p<f.length;p++){var g=f[p];_(g),d.push(g)}else d.push(c[0]);return e.setTextRange(t.createCallExpression(i(t,a,s,u),void 0,d),l)},e.createForOfBindingStatement=function(t,r,n){if(e.isVariableDeclarationList(r)){var i=e.first(r.declarations),a=t.updateVariableDeclaration(i,i.name,void 0,void 0,n);return e.setTextRange(t.createVariableStatement(void 0,t.updateVariableDeclarationList(r,[a])),r)}var o=e.setTextRange(t.createAssignment(r,n),r);return e.setTextRange(t.createExpressionStatement(o),r)},e.insertLeadingStatement=function(t,r,n){return e.isBlock(r)?t.updateBlock(r,e.setTextRange(t.createNodeArray(a([n],r.statements,!0)),r.statements)):t.createBlock(t.createNodeArray([r,n]),!0)},e.createExpressionFromEntityName=function t(r,n){if(e.isQualifiedName(n)){var i=t(r,n.left),a=e.setParent(e.setTextRange(r.cloneNode(n.right),n.right),n.right.parent);return e.setTextRange(r.createPropertyAccessExpression(i,a),n)}return e.setParent(e.setTextRange(r.cloneNode(n),n),n.parent)},e.createExpressionForPropertyName=o,e.createExpressionForObjectLiteralElementLike=function(r,n,i,a){switch(i.name&&e.isPrivateIdentifier(i.name)&&e.Debug.failBadSyntaxKind(i.name,"Private identifiers are not allowed in object literals."),i.kind){case 174:case 175:return function(t,r,n,i,a){var s=e.getAllAccessorDeclarations(r,n),c=s.firstAccessor,u=s.getAccessor,l=s.setAccessor;if(n===c)return e.setTextRange(t.createObjectDefinePropertyCall(i,o(t,n.name),t.createPropertyDescriptor({enumerable:t.createFalse(),configurable:!0,get:u&&e.setTextRange(e.setOriginalNode(t.createFunctionExpression(e.getModifiers(u),void 0,void 0,void 0,u.parameters,void 0,u.body),u),u),set:l&&e.setTextRange(e.setOriginalNode(t.createFunctionExpression(e.getModifiers(l),void 0,void 0,void 0,l.parameters,void 0,l.body),l),l)},!a)),c)}(r,n.properties,i,a,!!n.multiLine);case 299:return function(r,n,i){return e.setOriginalNode(e.setTextRange(r.createAssignment(t(r,i,n.name,n.name),n.initializer),n),n)}(r,i,a);case 300:return function(r,n,i){return e.setOriginalNode(e.setTextRange(r.createAssignment(t(r,i,n.name,n.name),r.cloneNode(n.name)),n),n)}(r,i,a);case 171:return function(r,n,i){return e.setOriginalNode(e.setTextRange(r.createAssignment(t(r,i,n.name,n.name),e.setOriginalNode(e.setTextRange(r.createFunctionExpression(e.getModifiers(n),n.asteriskToken,void 0,void 0,n.parameters,void 0,n.body),n),n)),n),n)}(r,i,a)}},e.expandPreOrPostfixIncrementOrDecrementExpression=function(t,r,n,i,a){var o=r.operator;e.Debug.assert(45===o||46===o,"Expected 'node' to be a pre- or post-increment or pre- or post-decrement expression");var s=t.createTempVariable(i);n=t.createAssignment(s,n),e.setTextRange(n,r.operand);var c=e.isPrefixUnaryExpression(r)?t.createPrefixUnaryExpression(o,s):t.createPostfixUnaryExpression(s,o);return e.setTextRange(c,r),a&&(c=t.createAssignment(a,c),e.setTextRange(c,r)),n=t.createComma(n,c),e.setTextRange(n,r),e.isPostfixUnaryExpression(r)&&(n=t.createComma(n,s),e.setTextRange(n,r)),n},e.isInternalName=function(t){return 0!=(32768&e.getEmitFlags(t))},e.isLocalName=function(t){return 0!=(16384&e.getEmitFlags(t))},e.isExportName=function(t){return 0!=(8192&e.getEmitFlags(t))},e.findUseStrictPrologue=function(t){for(var r=0,n=t;r<n.length;r++){var i=n[r];if(!e.isPrologueDirective(i))break;if(s(i))return i}},e.startsWithUseStrict=function(t){var r=e.firstOrUndefined(t);return void 0!==r&&e.isPrologueDirective(r)&&s(r)},e.isCommaSequence=function(e){return 223===e.kind&&27===e.operatorToken.kind||354===e.kind},e.isJSDocTypeAssertion=c,e.getJSDocTypeAssertionType=function(t){var r=e.getJSDocType(t);return e.Debug.assertIsDefined(r),r},e.isOuterExpression=u,e.skipOuterExpressions=l,e.skipAssertions=function(e){return l(e,6)},e.startOnNewLine=_,e.getExternalHelpersModuleName=d,e.hasRecordedExternalHelpers=function(t){var r=e.getOriginalNode(t,e.isSourceFile),n=r&&r.emitNode;return!(!n||!n.externalHelpersModuleName&&!n.externalHelpers)},e.createExternalHelpersImportDeclarationIfNeeded=function(t,r,n,i,a,o,s){if(i.importHelpers&&e.isEffectiveExternalModule(n,i)){var c=void 0,u=e.getEmitModuleKind(i);if(u>=e.ModuleKind.ES2015&&u<=e.ModuleKind.ESNext||n.impliedNodeFormat===e.ModuleKind.ESNext){var l=e.getEmitHelpers(n);if(l){for(var _=[],d=0,f=l;d<f.length;d++){var g=f[d];if(!g.scoped){var m=g.importName;m&&e.pushIfUnique(_,m)}}if(e.some(_)){_.sort(e.compareStringsCaseSensitive),c=t.createNamedImports(e.map(_,(function(i){return e.isFileLevelUniqueName(n,i)?t.createImportSpecifier(!1,void 0,t.createIdentifier(i)):t.createImportSpecifier(!1,t.createIdentifier(i),r.getUnscopedHelperName(i))})));var y=e.getOriginalNode(n,e.isSourceFile);e.getOrCreateEmitNode(y).externalHelpers=!0}}}else{var v=p(t,n,i,a,o||s);v&&(c=t.createNamespaceImport(v))}if(c){var h=t.createImportDeclaration(void 0,t.createImportClause(!1,void 0,c),t.createStringLiteral(e.externalHelpersModuleNameText),void 0);return e.addEmitFlags(h,67108864),h}}},e.getOrCreateExternalHelpersModuleNameIfNeeded=p,e.getLocalNameForExternalImport=function(t,r,n){var i=e.getNamespaceDeclarationNode(r);if(i&&!e.isDefaultImport(r)&&!e.isExportNamespaceAsDefaultDeclaration(r)){var a=i.name;return e.isGeneratedIdentifier(a)?a:t.createIdentifier(e.getSourceTextOfNodeFromSourceFile(n,a)||e.idText(a))}return 269===r.kind&&r.importClause||275===r.kind&&r.moduleSpecifier?t.getGeneratedNameForNode(r):void 0},e.getExternalModuleNameLiteral=function(t,r,n,i,a,o){var s=e.getExternalModuleName(r);if(s&&e.isStringLiteral(s))return function(e,t,r,n,i){return f(r,n.getExternalModuleFileFromDeclaration(e),t,i)}(r,i,t,a,o)||function(e,t,r){var n=r.renamedDependencies&&r.renamedDependencies.get(t.text);return n?e.createStringLiteral(n):void 0}(t,s,n)||t.cloneNode(s)},e.tryGetModuleNameFromFile=f,e.getInitializerOfBindingOrAssignmentElement=function t(r){if(e.isDeclarationBindingElement(r))return r.initializer;if(e.isPropertyAssignment(r)){var n=r.initializer;return e.isAssignmentExpression(n,!0)?n.right:void 0}return e.isShorthandPropertyAssignment(r)?r.objectAssignmentInitializer:e.isAssignmentExpression(r,!0)?r.right:e.isSpreadElement(r)?t(r.expression):void 0},e.getTargetOfBindingOrAssignmentElement=g,e.getRestIndicatorOfBindingOrAssignmentElement=function(e){switch(e.kind){case 166:case 205:return e.dotDotDotToken;case 227:case 301:return e}},e.getPropertyNameOfBindingOrAssignmentElement=function(t){var r=m(t);return e.Debug.assert(!!r||e.isSpreadAssignment(t),"Invalid property name for binding element."),r},e.tryGetPropertyNameOfBindingOrAssignmentElement=m,e.getElementsOfBindingOrAssignmentPattern=function(e){switch(e.kind){case 203:case 204:case 206:return e.elements;case 207:return e.properties}},e.getJSDocTypeAliasName=function(t){if(t)for(var r=t;;){if(e.isIdentifier(r)||!r.body)return e.isIdentifier(r)?r:r.name;r=r.body}},e.canHaveIllegalType=function(e){var t=e.kind;return 173===t||175===t},e.canHaveIllegalTypeParameters=function(e){var t=e.kind;return 173===t||174===t||175===t},e.canHaveIllegalDecorators=function(e){var t=e.kind;return 299===t||300===t||259===t||173===t||178===t||172===t||279===t||240===t||261===t||262===t||263===t||264===t||268===t||269===t||267===t||275===t||274===t},e.canHaveIllegalModifiers=function(e){var t=e.kind;return 172===t||299===t||300===t||181===t||279===t||267===t},e.isTypeNodeOrTypeParameterDeclaration=e.or(e.isTypeNode,e.isTypeParameterDeclaration),e.isQuestionOrExclamationToken=e.or(e.isQuestionToken,e.isExclamationToken),e.isIdentifierOrThisTypeNode=e.or(e.isIdentifier,e.isThisTypeNode),e.isReadonlyKeywordOrPlusOrMinusToken=e.or(e.isReadonlyKeyword,e.isPlusToken,e.isMinusToken),e.isQuestionOrPlusOrMinusToken=e.or(e.isQuestionToken,e.isPlusToken,e.isMinusToken),e.isModuleName=e.or(e.isIdentifier,e.isStringLiteral),e.isLiteralTypeLikeExpression=function(t){var r=t.kind;return 104===r||110===r||95===r||e.isLiteralExpression(t)||e.isPrefixUnaryExpression(t)},e.isBinaryOperatorToken=function(e){return v(e.kind)},function(t){function r(t,n,i,a,o,s,u){var l=n>0?o[n-1]:void 0;return e.Debug.assertEqual(i[n],r),o[n]=t.onEnter(a[n],l,u),i[n]=c(t,r),n}function n(t,r,i,a,o,s,_){e.Debug.assertEqual(i[r],n),e.Debug.assertIsDefined(t.onLeft),i[r]=c(t,n);var d=t.onLeft(a[r].left,o[r],a[r]);return d?(l(r,a,d),u(r,i,a,o,d)):r}function i(t,r,n,a,o,s,u){return e.Debug.assertEqual(n[r],i),e.Debug.assertIsDefined(t.onOperator),n[r]=c(t,i),t.onOperator(a[r].operatorToken,o[r],a[r]),r}function a(t,r,n,i,o,s,_){e.Debug.assertEqual(n[r],a),e.Debug.assertIsDefined(t.onRight),n[r]=c(t,a);var d=t.onRight(i[r].right,o[r],i[r]);return d?(l(r,i,d),u(r,n,i,o,d)):r}function o(t,r,n,i,a,s,u){e.Debug.assertEqual(n[r],o),n[r]=c(t,o);var l=t.onExit(i[r],a[r]);if(r>0){if(r--,t.foldState){var _=n[r]===o?"right":"left";a[r]=t.foldState(a[r],l,_)}}else s.value=l;return r}function s(t,r,n,i,a,o,c){return e.Debug.assertEqual(n[r],s),r}function c(t,c){switch(c){case r:if(t.onLeft)return n;case n:if(t.onOperator)return i;case i:if(t.onRight)return a;case a:return o;case o:case s:return s;default:e.Debug.fail("Invalid state")}}function u(e,t,n,i,a){return t[++e]=r,n[e]=a,i[e]=void 0,e}function l(t,r,n){if(e.Debug.shouldAssert(2))for(;t>=0;)e.Debug.assert(r[t]!==n,"Circular traversal detected."),t--}t.enter=r,t.left=n,t.operator=i,t.right=a,t.exit=o,t.done=s,t.nextState=c}(h||(h={}));var b=function(e,t,r,n,i,a){this.onEnter=e,this.onLeft=t,this.onOperator=r,this.onRight=n,this.onExit=i,this.foldState=a};function x(e,t){return"object"==typeof e?S(!1,e.prefix,e.node,e.suffix,t):"string"==typeof e?e.length>0&&35===e.charCodeAt(0)?e.slice(1):e:""}function D(t,r){return"string"==typeof t?t:function(t,r){return e.isGeneratedPrivateIdentifier(t)?r(t).slice(1):e.isGeneratedIdentifier(t)?r(t):e.isPrivateIdentifier(t)?t.escapedText.slice(1):e.idText(t)}(t,e.Debug.checkDefined(r))}function S(e,t,r,n,i){return t=x(t,i),n=x(n,i),r=D(r,i),"".concat(e?"#":"").concat(t).concat(r).concat(n)}e.createBinaryExpressionTrampoline=function(t,r,n,i,a,o){var s=new b(t,r,n,i,a,o);return function(t,r){var n={value:void 0},i=[h.enter],a=[t],o=[void 0],c=0;for(;i[c]!==h.done;)c=i[c](s,c,i,a,o,n,r);return e.Debug.assertEqual(c,0),n.value}},e.elideNodes=function(t,r){if(void 0!==r)return 0===r.length?r:e.setTextRange(t.createNodeArray([],r.hasTrailingComma),r)},e.getNodeForGeneratedName=function(t){if(4&t.autoGenerateFlags){for(var r=t.autoGenerateId,n=t,i=n.original;i&&(n=i,!(e.isMemberName(n)&&4&n.autoGenerateFlags&&n.autoGenerateId!==r));)i=n.original;return n}return t},e.formatGeneratedNamePart=x,e.formatGeneratedName=S,e.createAccessorPropertyBackingField=function(e,t,r,n){return e.updatePropertyDeclaration(t,r,e.getGeneratedPrivateNameForNode(t.name,void 0,"_accessor_storage"),void 0,void 0,n)},e.createAccessorPropertyGetRedirector=function(e,t,r,n){return e.createGetAccessorDeclaration(r,n,[],void 0,e.createBlock([e.createReturnStatement(e.createPropertyAccessExpression(e.createThis(),e.getGeneratedPrivateNameForNode(t.name,void 0,"_accessor_storage")))]))},e.createAccessorPropertySetRedirector=function(e,t,r,n){return e.createSetAccessorDeclaration(r,n,[e.createParameterDeclaration(void 0,void 0,"value")],e.createBlock([e.createExpressionStatement(e.createAssignment(e.createPropertyAccessExpression(e.createThis(),e.getGeneratedPrivateNameForNode(t.name,void 0,"_accessor_storage")),e.createIdentifier("value")))]))}}(_||(_={})),function(e){e.setTextRange=function(t,r){return r?e.setTextRangePosEnd(t,r.pos,r.end):t},e.canHaveModifiers=function(e){var t=e.kind;return 165===t||166===t||168===t||169===t||170===t||171===t||173===t||174===t||175===t||178===t||182===t||215===t||216===t||228===t||240===t||259===t||260===t||261===t||262===t||263===t||264===t||268===t||269===t||274===t||275===t},e.canHaveDecorators=function(e){var t=e.kind;return 166===t||169===t||171===t||174===t||175===t||228===t||260===t}}(_||(_={})),function(e){var t,r,n,i,s,c,u,l;function _(e,t){return t&&e(t)}function d(e,t,r){if(r){if(t)return t(r);for(var n=0,i=r;n<i.length;n++){var a=e(i[n]);if(a)return a}}}function p(e,t){return 42===e.charCodeAt(t+1)&&42===e.charCodeAt(t+2)&&47!==e.charCodeAt(t+3)}function f(t){return e.forEach(t.statements,g)||function(e){return 4194304&e.flags?m(e):void 0}(t)}function g(t){return e.canHaveModifiers(t)&&function(t,r){return e.some(t.modifiers,(function(e){return e.kind===r}))}(t,93)||e.isImportEqualsDeclaration(t)&&e.isExternalModuleReference(t.moduleReference)||e.isImportDeclaration(t)||e.isExportAssignment(t)||e.isExportDeclaration(t)?t:void 0}function m(t){return function(t){return e.isMetaProperty(t)&&100===t.keywordToken&&"meta"===t.name.escapedText}(t)?t:L(t,m)}!function(e){e[e.None=0]="None",e[e.Yield=1]="Yield",e[e.Await=2]="Await",e[e.Type=4]="Type",e[e.IgnoreMissingOpenBrace=16]="IgnoreMissingOpenBrace",e[e.JSDoc=32]="JSDoc"}(r||(r={})),function(e){e[e.TryParse=0]="TryParse",e[e.Lookahead=1]="Lookahead",e[e.Reparse=2]="Reparse"}(n||(n={})),e.parseBaseNodeFactory={createBaseSourceFileNode:function(t){return new(l||(l=e.objectAllocator.getSourceFileConstructor()))(t,-1,-1)},createBaseIdentifierNode:function(t){return new(c||(c=e.objectAllocator.getIdentifierConstructor()))(t,-1,-1)},createBasePrivateIdentifierNode:function(t){return new(u||(u=e.objectAllocator.getPrivateIdentifierConstructor()))(t,-1,-1)},createBaseTokenNode:function(t){return new(s||(s=e.objectAllocator.getTokenConstructor()))(t,-1,-1)},createBaseNode:function(t){return new(i||(i=e.objectAllocator.getNodeConstructor()))(t,-1,-1)}},e.parseNodeFactory=e.createNodeFactory(1,e.parseBaseNodeFactory),e.isJSDocLikeText=p,e.isFileProbablyExternalModule=f;var y,v,h=((t={})[163]=function(e,t,r){return _(t,e.left)||_(t,e.right)},t[165]=function(e,t,r){return d(t,r,e.modifiers)||_(t,e.name)||_(t,e.constraint)||_(t,e.default)||_(t,e.expression)},t[300]=function(e,t,r){return d(t,r,e.illegalDecorators)||d(t,r,e.modifiers)||_(t,e.name)||_(t,e.questionToken)||_(t,e.exclamationToken)||_(t,e.equalsToken)||_(t,e.objectAssignmentInitializer)},t[301]=function(e,t,r){return _(t,e.expression)},t[166]=function(e,t,r){return d(t,r,e.modifiers)||_(t,e.dotDotDotToken)||_(t,e.name)||_(t,e.questionToken)||_(t,e.type)||_(t,e.initializer)},t[169]=function(e,t,r){return d(t,r,e.modifiers)||_(t,e.name)||_(t,e.questionToken)||_(t,e.exclamationToken)||_(t,e.type)||_(t,e.initializer)},t[168]=function(e,t,r){return d(t,r,e.modifiers)||_(t,e.name)||_(t,e.questionToken)||_(t,e.type)||_(t,e.initializer)},t[299]=function(e,t,r){return d(t,r,e.illegalDecorators)||d(t,r,e.modifiers)||_(t,e.name)||_(t,e.questionToken)||_(t,e.exclamationToken)||_(t,e.initializer)},t[257]=function(e,t,r){return _(t,e.name)||_(t,e.exclamationToken)||_(t,e.type)||_(t,e.initializer)},t[205]=function(e,t,r){return _(t,e.dotDotDotToken)||_(t,e.propertyName)||_(t,e.name)||_(t,e.initializer)},t[178]=function(e,t,r){return d(t,r,e.illegalDecorators)||d(t,r,e.modifiers)||d(t,r,e.typeParameters)||d(t,r,e.parameters)||_(t,e.type)},t[182]=function(e,t,r){return d(t,r,e.modifiers)||d(t,r,e.typeParameters)||d(t,r,e.parameters)||_(t,e.type)},t[181]=function(e,t,r){return d(t,r,e.modifiers)||d(t,r,e.typeParameters)||d(t,r,e.parameters)||_(t,e.type)},t[176]=b,t[177]=b,t[171]=function(e,t,r){return d(t,r,e.modifiers)||_(t,e.asteriskToken)||_(t,e.name)||_(t,e.questionToken)||_(t,e.exclamationToken)||d(t,r,e.typeParameters)||d(t,r,e.parameters)||_(t,e.type)||_(t,e.body)},t[170]=function(e,t,r){return d(t,r,e.modifiers)||_(t,e.name)||_(t,e.questionToken)||d(t,r,e.typeParameters)||d(t,r,e.parameters)||_(t,e.type)},t[173]=function(e,t,r){return d(t,r,e.illegalDecorators)||d(t,r,e.modifiers)||_(t,e.name)||d(t,r,e.typeParameters)||d(t,r,e.parameters)||_(t,e.type)||_(t,e.body)},t[174]=function(e,t,r){return d(t,r,e.modifiers)||_(t,e.name)||d(t,r,e.typeParameters)||d(t,r,e.parameters)||_(t,e.type)||_(t,e.body)},t[175]=function(e,t,r){return d(t,r,e.modifiers)||_(t,e.name)||d(t,r,e.typeParameters)||d(t,r,e.parameters)||_(t,e.type)||_(t,e.body)},t[259]=function(e,t,r){return d(t,r,e.illegalDecorators)||d(t,r,e.modifiers)||_(t,e.asteriskToken)||_(t,e.name)||d(t,r,e.typeParameters)||d(t,r,e.parameters)||_(t,e.type)||_(t,e.body)},t[215]=function(e,t,r){return d(t,r,e.modifiers)||_(t,e.asteriskToken)||_(t,e.name)||d(t,r,e.typeParameters)||d(t,r,e.parameters)||_(t,e.type)||_(t,e.body)},t[216]=function(e,t,r){return d(t,r,e.modifiers)||d(t,r,e.typeParameters)||d(t,r,e.parameters)||_(t,e.type)||_(t,e.equalsGreaterThanToken)||_(t,e.body)},t[172]=function(e,t,r){return d(t,r,e.illegalDecorators)||d(t,r,e.modifiers)||_(t,e.body)},t[180]=function(e,t,r){return _(t,e.typeName)||d(t,r,e.typeArguments)},t[179]=function(e,t,r){return _(t,e.assertsModifier)||_(t,e.parameterName)||_(t,e.type)},t[183]=function(e,t,r){return _(t,e.exprName)||d(t,r,e.typeArguments)},t[184]=function(e,t,r){return d(t,r,e.members)},t[185]=function(e,t,r){return _(t,e.elementType)},t[186]=function(e,t,r){return d(t,r,e.elements)},t[189]=x,t[190]=x,t[191]=function(e,t,r){return _(t,e.checkType)||_(t,e.extendsType)||_(t,e.trueType)||_(t,e.falseType)},t[192]=function(e,t,r){return _(t,e.typeParameter)},t[202]=function(e,t,r){return _(t,e.argument)||_(t,e.assertions)||_(t,e.qualifier)||d(t,r,e.typeArguments)},t[298]=function(e,t,r){return _(t,e.assertClause)},t[193]=D,t[195]=D,t[196]=function(e,t,r){return _(t,e.objectType)||_(t,e.indexType)},t[197]=function(e,t,r){return _(t,e.readonlyToken)||_(t,e.typeParameter)||_(t,e.nameType)||_(t,e.questionToken)||_(t,e.type)||d(t,r,e.members)},t[198]=function(e,t,r){return _(t,e.literal)},t[199]=function(e,t,r){return _(t,e.dotDotDotToken)||_(t,e.name)||_(t,e.questionToken)||_(t,e.type)},t[203]=S,t[204]=S,t[206]=function(e,t,r){return d(t,r,e.elements)},t[207]=function(e,t,r){return d(t,r,e.properties)},t[208]=function(e,t,r){return _(t,e.expression)||_(t,e.questionDotToken)||_(t,e.name)},t[209]=function(e,t,r){return _(t,e.expression)||_(t,e.questionDotToken)||_(t,e.argumentExpression)},t[210]=T,t[211]=T,t[212]=function(e,t,r){return _(t,e.tag)||_(t,e.questionDotToken)||d(t,r,e.typeArguments)||_(t,e.template)},t[213]=function(e,t,r){return _(t,e.type)||_(t,e.expression)},t[214]=function(e,t,r){return _(t,e.expression)},t[217]=function(e,t,r){return _(t,e.expression)},t[218]=function(e,t,r){return _(t,e.expression)},t[219]=function(e,t,r){return _(t,e.expression)},t[221]=function(e,t,r){return _(t,e.operand)},t[226]=function(e,t,r){return _(t,e.asteriskToken)||_(t,e.expression)},t[220]=function(e,t,r){return _(t,e.expression)},t[222]=function(e,t,r){return _(t,e.operand)},t[223]=function(e,t,r){return _(t,e.left)||_(t,e.operatorToken)||_(t,e.right)},t[231]=function(e,t,r){return _(t,e.expression)||_(t,e.type)},t[232]=function(e,t,r){return _(t,e.expression)},t[235]=function(e,t,r){return _(t,e.expression)||_(t,e.type)},t[233]=function(e,t,r){return _(t,e.name)},t[224]=function(e,t,r){return _(t,e.condition)||_(t,e.questionToken)||_(t,e.whenTrue)||_(t,e.colonToken)||_(t,e.whenFalse)},t[227]=function(e,t,r){return _(t,e.expression)},t[238]=C,t[265]=C,t[308]=function(e,t,r){return d(t,r,e.statements)||_(t,e.endOfFileToken)},t[240]=function(e,t,r){return d(t,r,e.illegalDecorators)||d(t,r,e.modifiers)||_(t,e.declarationList)},t[258]=function(e,t,r){return d(t,r,e.declarations)},t[241]=function(e,t,r){return _(t,e.expression)},t[242]=function(e,t,r){return _(t,e.expression)||_(t,e.thenStatement)||_(t,e.elseStatement)},t[243]=function(e,t,r){return _(t,e.statement)||_(t,e.expression)},t[244]=function(e,t,r){return _(t,e.expression)||_(t,e.statement)},t[245]=function(e,t,r){return _(t,e.initializer)||_(t,e.condition)||_(t,e.incrementor)||_(t,e.statement)},t[246]=function(e,t,r){return _(t,e.initializer)||_(t,e.expression)||_(t,e.statement)},t[247]=function(e,t,r){return _(t,e.awaitModifier)||_(t,e.initializer)||_(t,e.expression)||_(t,e.statement)},t[248]=E,t[249]=E,t[250]=function(e,t,r){return _(t,e.expression)},t[251]=function(e,t,r){return _(t,e.expression)||_(t,e.statement)},t[252]=function(e,t,r){return _(t,e.expression)||_(t,e.caseBlock)},t[266]=function(e,t,r){return d(t,r,e.clauses)},t[292]=function(e,t,r){return _(t,e.expression)||d(t,r,e.statements)},t[293]=function(e,t,r){return d(t,r,e.statements)},t[253]=function(e,t,r){return _(t,e.label)||_(t,e.statement)},t[254]=function(e,t,r){return _(t,e.expression)},t[255]=function(e,t,r){return _(t,e.tryBlock)||_(t,e.catchClause)||_(t,e.finallyBlock)},t[295]=function(e,t,r){return _(t,e.variableDeclaration)||_(t,e.block)},t[167]=function(e,t,r){return _(t,e.expression)},t[260]=k,t[228]=k,t[261]=function(e,t,r){return d(t,r,e.illegalDecorators)||d(t,r,e.modifiers)||_(t,e.name)||d(t,r,e.typeParameters)||d(t,r,e.heritageClauses)||d(t,r,e.members)},t[262]=function(e,t,r){return d(t,r,e.illegalDecorators)||d(t,r,e.modifiers)||_(t,e.name)||d(t,r,e.typeParameters)||_(t,e.type)},t[263]=function(e,t,r){return d(t,r,e.illegalDecorators)||d(t,r,e.modifiers)||_(t,e.name)||d(t,r,e.members)},t[302]=function(e,t,r){return _(t,e.name)||_(t,e.initializer)},t[264]=function(e,t,r){return d(t,r,e.illegalDecorators)||d(t,r,e.modifiers)||_(t,e.name)||_(t,e.body)},t[268]=function(e,t,r){return d(t,r,e.illegalDecorators)||d(t,r,e.modifiers)||_(t,e.name)||_(t,e.moduleReference)},t[269]=function(e,t,r){return d(t,r,e.illegalDecorators)||d(t,r,e.modifiers)||_(t,e.importClause)||_(t,e.moduleSpecifier)||_(t,e.assertClause)},t[270]=function(e,t,r){return _(t,e.name)||_(t,e.namedBindings)},t[296]=function(e,t,r){return d(t,r,e.elements)},t[297]=function(e,t,r){return _(t,e.name)||_(t,e.value)},t[267]=function(e,t,r){return d(t,r,e.illegalDecorators)||_(t,e.name)},t[271]=function(e,t,r){return _(t,e.name)},t[277]=function(e,t,r){return _(t,e.name)},t[272]=N,t[276]=N,t[275]=function(e,t,r){return d(t,r,e.illegalDecorators)||d(t,r,e.modifiers)||_(t,e.exportClause)||_(t,e.moduleSpecifier)||_(t,e.assertClause)},t[273]=A,t[278]=A,t[274]=function(e,t,r){return d(t,r,e.illegalDecorators)||d(t,r,e.modifiers)||_(t,e.expression)},t[225]=function(e,t,r){return _(t,e.head)||d(t,r,e.templateSpans)},t[236]=function(e,t,r){return _(t,e.expression)||_(t,e.literal)},t[200]=function(e,t,r){return _(t,e.head)||d(t,r,e.templateSpans)},t[201]=function(e,t,r){return _(t,e.type)||_(t,e.literal)},t[164]=function(e,t,r){return _(t,e.expression)},t[294]=function(e,t,r){return d(t,r,e.types)},t[230]=function(e,t,r){return _(t,e.expression)||d(t,r,e.typeArguments)},t[280]=function(e,t,r){return _(t,e.expression)},t[279]=function(e,t,r){return d(t,r,e.illegalDecorators)||d(t,r,e.modifiers)},t[354]=function(e,t,r){return d(t,r,e.elements)},t[281]=function(e,t,r){return _(t,e.openingElement)||d(t,r,e.children)||_(t,e.closingElement)},t[285]=function(e,t,r){return _(t,e.openingFragment)||d(t,r,e.children)||_(t,e.closingFragment)},t[282]=F,t[283]=F,t[289]=function(e,t,r){return d(t,r,e.properties)},t[288]=function(e,t,r){return _(t,e.name)||_(t,e.initializer)},t[290]=function(e,t,r){return _(t,e.expression)},t[291]=function(e,t,r){return _(t,e.dotDotDotToken)||_(t,e.expression)},t[284]=function(e,t,r){return _(t,e.tagName)},t[187]=P,t[188]=P,t[312]=P,t[318]=P,t[317]=P,t[319]=P,t[321]=P,t[320]=function(e,t,r){return d(t,r,e.parameters)||_(t,e.type)},t[323]=function(e,t,r){return("string"==typeof e.comment?void 0:d(t,r,e.comment))||d(t,r,e.tags)},t[349]=function(e,t,r){return _(t,e.tagName)||_(t,e.name)||("string"==typeof e.comment?void 0:d(t,r,e.comment))},t[313]=function(e,t,r){return _(t,e.name)},t[314]=function(e,t,r){return _(t,e.left)||_(t,e.right)},t[343]=w,t[350]=w,t[333]=function(e,t,r){return _(t,e.tagName)||("string"==typeof e.comment?void 0:d(t,r,e.comment))},t[332]=function(e,t,r){return _(t,e.tagName)||_(t,e.class)||("string"==typeof e.comment?void 0:d(t,r,e.comment))},t[331]=function(e,t,r){return _(t,e.tagName)||_(t,e.class)||("string"==typeof e.comment?void 0:d(t,r,e.comment))},t[347]=function(e,t,r){return _(t,e.tagName)||_(t,e.constraint)||d(t,r,e.typeParameters)||("string"==typeof e.comment?void 0:d(t,r,e.comment))},t[348]=function(e,t,r){return _(t,e.tagName)||(e.typeExpression&&312===e.typeExpression.kind?_(t,e.typeExpression)||_(t,e.fullName)||("string"==typeof e.comment?void 0:d(t,r,e.comment)):_(t,e.fullName)||_(t,e.typeExpression)||("string"==typeof e.comment?void 0:d(t,r,e.comment)))},t[341]=function(e,t,r){return _(t,e.tagName)||_(t,e.fullName)||_(t,e.typeExpression)||("string"==typeof e.comment?void 0:d(t,r,e.comment))},t[344]=I,t[346]=I,t[345]=I,t[342]=I,t[326]=function(t,r,n){return e.forEach(t.typeParameters,r)||e.forEach(t.parameters,r)||_(r,t.type)},t[327]=O,t[328]=O,t[329]=O,t[325]=function(t,r,n){return e.forEach(t.jsDocPropertyTags,r)},t[330]=M,t[335]=M,t[336]=M,t[337]=M,t[338]=M,t[339]=M,t[334]=M,t[340]=M,t[353]=function(e,t,r){return _(t,e.expression)},t);function b(e,t,r){return d(t,r,e.typeParameters)||d(t,r,e.parameters)||_(t,e.type)}function x(e,t,r){return d(t,r,e.types)}function D(e,t,r){return _(t,e.type)}function S(e,t,r){return d(t,r,e.elements)}function T(e,t,r){return _(t,e.expression)||_(t,e.questionDotToken)||d(t,r,e.typeArguments)||d(t,r,e.arguments)}function C(e,t,r){return d(t,r,e.statements)}function E(e,t,r){return _(t,e.label)}function k(e,t,r){return d(t,r,e.modifiers)||_(t,e.name)||d(t,r,e.typeParameters)||d(t,r,e.heritageClauses)||d(t,r,e.members)}function N(e,t,r){return d(t,r,e.elements)}function A(e,t,r){return _(t,e.propertyName)||_(t,e.name)}function F(e,t,r){return _(t,e.tagName)||d(t,r,e.typeArguments)||_(t,e.attributes)}function P(e,t,r){return _(t,e.type)}function w(e,t,r){return _(t,e.tagName)||(e.isNameFirst?_(t,e.name)||_(t,e.typeExpression):_(t,e.typeExpression)||_(t,e.name))||("string"==typeof e.comment?void 0:d(t,r,e.comment))}function I(e,t,r){return _(t,e.tagName)||_(t,e.typeExpression)||("string"==typeof e.comment?void 0:d(t,r,e.comment))}function O(e,t,r){return _(t,e.name)}function M(e,t,r){return _(t,e.tagName)||("string"==typeof e.comment?void 0:d(t,r,e.comment))}function L(e,t,r){if(!(void 0===e||e.kind<=162)){var n=h[e.kind];return void 0===n?void 0:n(e,t,r)}}function R(e){var t=[];return L(e,r,r),t;function r(e){t.unshift(e)}}function B(e){e.externalModuleIndicator=f(e)}function j(e){return void 0!==e.externalModuleIndicator}function J(t){return e.fileExtensionIsOneOf(t,e.supportedDeclarationExtensions)}function z(t,r){for(var n=[],i=0,a=e.getLeadingCommentRanges(r,0)||e.emptyArray;i<a.length;i++){var o=a[i];H(n,o,r.substring(o.pos,o.end))}t.pragmas=new e.Map;for(var s=0,c=n;s<c.length;s++){var u=c[s];if(t.pragmas.has(u.name)){var l=t.pragmas.get(u.name);l instanceof Array?l.push(u.args):t.pragmas.set(u.name,[l,u.args])}else t.pragmas.set(u.name,u.args)}}function U(t,r){t.checkJsDirective=void 0,t.referencedFiles=[],t.typeReferenceDirectives=[],t.libReferenceDirectives=[],t.amdDependencies=[],t.hasNoDefaultLib=!1,t.pragmas.forEach((function(n,i){switch(i){case"reference":var a=t.referencedFiles,s=t.typeReferenceDirectives,c=t.libReferenceDirectives;e.forEach(e.toArray(n),(function(n){var i=n.arguments,u=i.types,l=i.lib,_=i.path,d=i["resolution-mode"];if(n.arguments["no-default-lib"])t.hasNoDefaultLib=!0;else if(u){var p=function(t,r,n,i){if(t)return"import"===t?e.ModuleKind.ESNext:"require"===t?e.ModuleKind.CommonJS:void i(r,n-r,e.Diagnostics.resolution_mode_should_be_either_require_or_import)}(d,u.pos,u.end,r);s.push(o({pos:u.pos,end:u.end,fileName:u.value},p?{resolutionMode:p}:{}))}else l?c.push({pos:l.pos,end:l.end,fileName:l.value}):_?a.push({pos:_.pos,end:_.end,fileName:_.value}):r(n.range.pos,n.range.end-n.range.pos,e.Diagnostics.Invalid_reference_directive_syntax)}));break;case"amd-dependency":t.amdDependencies=e.map(e.toArray(n),(function(e){return{name:e.arguments.name,path:e.arguments.path}}));break;case"amd-module":if(n instanceof Array)for(var u=0,l=n;u<l.length;u++){var _=l[u];t.moduleName&&r(_.range.pos,_.range.end-_.range.pos,e.Diagnostics.An_AMD_module_cannot_have_multiple_name_assignments),t.moduleName=_.arguments.name}else t.moduleName=n.arguments.name;break;case"ts-nocheck":case"ts-check":e.forEach(e.toArray(n),(function(e){(!t.checkJsDirective||e.range.pos>t.checkJsDirective.pos)&&(t.checkJsDirective={enabled:"ts-check"===i,end:e.range.end,pos:e.range.pos})}));break;case"jsx":case"jsxfrag":case"jsximportsource":case"jsxruntime":return;default:e.Debug.fail("Unhandled pragma kind")}}))}e.forEachChild=L,e.forEachChildRecursively=function(t,r,n){for(var i=R(t),a=[];a.length<i.length;)a.push(t);for(;0!==i.length;){var o=i.pop(),s=a.pop();if(e.isArray(o)){if(n)if(u=n(o,s)){if("skip"===u)continue;return u}for(var c=o.length-1;c>=0;--c)i.push(o[c]),a.push(s)}else{var u;if(u=r(o,s)){if("skip"===u)continue;return u}if(o.kind>=163)for(var l=0,_=R(o);l<_.length;l++){var d=_[l];i.push(d),a.push(o)}}}},e.createSourceFile=function(t,r,n,i,a){var o;void 0===i&&(i=!1),null===e.tracing||void 0===e.tracing||e.tracing.push("parse","createSourceFile",{path:t},!0),e.performance.mark("beforeParse"),e.perfLogger.logStartParseSourceFile(t);var s="object"==typeof n?n:{languageVersion:n},c=s.languageVersion,u=s.setExternalModuleIndicator,l=s.impliedNodeFormat;if(100===c)o=y.parseSourceFile(t,r,c,void 0,i,6,e.noop);else{var _=void 0===l?u:function(e){return e.impliedNodeFormat=l,(u||B)(e)};o=y.parseSourceFile(t,r,c,void 0,i,a,_)}return e.perfLogger.logStopParseSourceFile(),e.performance.mark("afterParse"),e.performance.measure("Parse","beforeParse","afterParse"),null===e.tracing||void 0===e.tracing||e.tracing.pop(),o},e.parseIsolatedEntityName=function(e,t){return y.parseIsolatedEntityName(e,t)},e.parseJsonText=function(e,t){return y.parseJsonText(e,t)},e.isExternalModule=j,e.updateSourceFile=function(e,t,r,n){void 0===n&&(n=!1);var i=v.updateSourceFile(e,t,r,n);return i.flags|=6291456&e.flags,i},e.parseIsolatedJSDocComment=function(e,t,r){var n=y.JSDocParser.parseIsolatedJSDocComment(e,t,r);return n&&n.jsDoc&&y.fixupParentReferences(n.jsDoc),n},e.parseJSDocTypeExpressionForTests=function(e,t,r){return y.JSDocParser.parseJSDocTypeExpressionForTests(e,t,r)},function(t){var r,n,i,o,s,c=e.createScanner(99,!0),u=20480;function l(e){return S++,e}var _,d,f,g,m,y,h,b,x,D,S,T,C,E,k,N,A,F={createBaseSourceFileNode:function(e){return l(new s(e,0,0))},createBaseIdentifierNode:function(e){return l(new i(e,0,0))},createBasePrivateIdentifierNode:function(e){return l(new o(e,0,0))},createBaseTokenNode:function(e){return l(new n(e,0,0))},createBaseNode:function(e){return l(new r(e,0,0))}},P=e.createNodeFactory(11,F),w=!0,I=!1;function O(t,r,n,i,a){void 0===n&&(n=2),void 0===a&&(a=!1),M(t,r,n,i,6),d=A,Se();var o,s,c=ve();if(1===be())o=$e([],c,c),s=Qe();else{for(var u=void 0;1!==be();){var l=void 0;switch(be()){case 22:l=Ln();break;case 110:case 95:case 104:l=Qe();break;case 40:l=we((function(){return 8===Se()&&58!==Se()}))?_n():Bn();break;case 8:case 10:if(we((function(){return 58!==Se()}))){l=Vt();break}default:l=Bn()}u&&e.isArray(u)?u.push(l):u?u=[u,l]:(u=l,1!==be()&&pe(e.Diagnostics.Unexpected_token))}var _=e.isArray(u)?et(P.createArrayLiteralExpression(u),c):e.Debug.checkDefined(u),p=P.createExpressionStatement(_);et(p,c),o=$e([p],c),s=Ge(1,e.Diagnostics.Unexpected_token)}var f=H(t,2,6,!1,o,s,d,e.noop);a&&W(f),f.nodeCount=S,f.identifierCount=E,f.identifiers=T,f.parseDiagnostics=e.attachFileToDiagnostics(h,f),b&&(f.jsDocDiagnostics=e.attachFileToDiagnostics(b,f));var g=f;return L(),g}function M(t,a,u,l,p){switch(r=e.objectAllocator.getNodeConstructor(),n=e.objectAllocator.getTokenConstructor(),i=e.objectAllocator.getIdentifierConstructor(),o=e.objectAllocator.getPrivateIdentifierConstructor(),s=e.objectAllocator.getSourceFileConstructor(),_=e.normalizePath(t),f=a,g=u,x=l,m=p,y=e.getLanguageVariant(p),h=[],k=0,T=new e.Map,C=new e.Map,E=0,S=0,d=0,w=!0,m){case 1:case 2:A=262144;break;case 6:A=67371008;break;default:A=0}I=!1,c.setText(f),c.setOnError(ye),c.setScriptTarget(g),c.setLanguageVariant(y)}function L(){c.clearCommentDirectives(),c.setText(""),c.setOnError(void 0),f=void 0,g=void 0,x=void 0,m=void 0,y=void 0,d=0,h=void 0,b=void 0,k=0,T=void 0,N=void 0,w=!0}function R(t,r,n,i){var a=J(_);a&&(A|=16777216),d=A,Se();var o=kt(0,ri);e.Debug.assert(1===be());var s=q(Qe()),u=H(_,t,n,a,o,s,d,i);return z(u,f),U(u,(function(t,r,n){h.push(e.createDetachedDiagnostic(_,t,r,n))})),u.commentDirectives=c.getCommentDirectives(),u.nodeCount=S,u.identifierCount=E,u.identifiers=T,u.parseDiagnostics=e.attachFileToDiagnostics(h,u),b&&(u.jsDocDiagnostics=e.attachFileToDiagnostics(b,u)),r&&W(u),u}function K(e,t){return t?q(e):e}t.parseSourceFile=function(t,r,n,i,a,o,s){var c;if(void 0===a&&(a=!1),6===(o=e.ensureScriptKind(t,o))){var u=O(t,r,n,i,a);return e.convertToObjectWorker(u,null===(c=u.statements[0])||void 0===c?void 0:c.expression,u.parseDiagnostics,!1,void 0,void 0),u.referencedFiles=e.emptyArray,u.typeReferenceDirectives=e.emptyArray,u.libReferenceDirectives=e.emptyArray,u.amdDependencies=e.emptyArray,u.hasNoDefaultLib=!1,u.pragmas=e.emptyMap,u}M(t,r,n,i,o);var l=R(n,a,o,s||B);return L(),l},t.parseIsolatedEntityName=function(e,t){M("",e,t,void 0,1),Se();var r=Lt(!0),n=1===be()&&!h.length;return L(),n?r:void 0},t.parseJsonText=O;var V=!1;function q(t){e.Debug.assert(!t.jsDoc);var r=e.mapDefined(e.getJSDocCommentRanges(t,f),(function(e){return je.parseJSDocComment(t,e.pos,e.end-e.pos)}));return r.length&&(t.jsDoc=r),V&&(V=!1,t.flags|=268435456),t}function W(t){e.setParentRecursive(t,!0)}function H(t,r,n,i,a,o,s,u){var l=P.createSourceFile(a,o,s);return e.setTextRangePosWidth(l,0,f.length),_(l),!i&&j(l)&&67108864&l.transformFlags&&(l=function(t){var r=x,n=v.createSyntaxCursor(t);x={currentNode:function(e){var t=n.currentNode(e);return w&&t&&d(t)&&(t.intersectsChange=!0),t}};var i=[],a=h;h=[];for(var o=0,s=p(t.statements,0),u=function(){var r=t.statements[o],n=t.statements[s];e.addRange(i,t.statements,o,s),o=f(t.statements,s);var u=e.findIndex(a,(function(e){return e.start>=r.pos})),l=u>=0?e.findIndex(a,(function(e){return e.start>=n.pos}),u):-1;u>=0&&e.addRange(h,a,u,l>=0?l:void 0),Pe((function(){var e=A;for(A|=32768,c.setTextPos(n.pos),Se();1!==be();){var r=c.getStartPos(),a=Nt(0,ri);if(i.push(a),r===c.getStartPos()&&Se(),o>=0){var s=t.statements[o];if(a.end===s.pos)break;a.end>s.pos&&(o=f(t.statements,o+1))}}A=e}),2),s=o>=0?p(t.statements,o):-1};-1!==s;)u();if(o>=0){var l=t.statements[o];e.addRange(i,t.statements,o);var _=e.findIndex(a,(function(e){return e.start>=l.pos}));_>=0&&e.addRange(h,a,_)}return x=r,P.updateSourceFile(t,e.setTextRange(P.createNodeArray(i),t.statements));function d(e){return!(32768&e.flags||!(67108864&e.transformFlags))}function p(e,t){for(var r=t;r<e.length;r++)if(d(e[r]))return r;return-1}function f(e,t){for(var r=t;r<e.length;r++)if(!d(e[r]))return r;return-1}}(l),_(l)),l;function _(a){a.text=f,a.bindDiagnostics=[],a.bindSuggestionDiagnostics=void 0,a.languageVersion=r,a.fileName=t,a.languageVariant=e.getLanguageVariant(n),a.isDeclarationFile=i,a.scriptKind=n,u(a),a.setExternalModuleIndicator=u}}function G(e,t){e?A|=t:A&=~t}function X(e){G(e,4096)}function Y(e){G(e,8192)}function Z(e){G(e,16384)}function $(e){G(e,32768)}function ee(e,t){var r=e&A;if(r){G(!1,r);var n=t();return G(!0,r),n}return t()}function te(e,t){var r=e&~A;if(r){G(!0,r);var n=t();return G(!1,r),n}return t()}function re(e){return ee(4096,e)}function ne(e){return ee(65536,e)}function ie(e){return te(65536,e)}function ae(e){return te(32768,e)}function oe(e){return ee(32768,e)}function se(e){return 0!=(A&e)}function ce(){return se(8192)}function ue(){return se(4096)}function le(){return se(65536)}function _e(){return se(16384)}function de(){return se(32768)}function pe(e,t){return ge(c.getTokenPos(),c.getTextPos(),e,t)}function fe(t,r,n,i){var a,o=e.lastOrUndefined(h);return o&&t===o.start||(a=e.createDetachedDiagnostic(_,t,r,n,i),h.push(a)),I=!0,a}function ge(e,t,r,n){return fe(e,t-e,r,n)}function me(e,t,r){ge(e.pos,e.end,t,r)}function ye(e,t){fe(c.getTextPos(),t,e)}function ve(){return c.getStartPos()}function he(){return c.hasPrecedingJSDocComment()}function be(){return D}function xe(){return D=c.scan()}function De(e){return Se(),e()}function Se(){return e.isKeyword(D)&&(c.hasUnicodeEscape()||c.hasExtendedUnicodeEscape())&&ge(c.getTokenPos(),c.getTextPos(),e.Diagnostics.Keywords_cannot_contain_escape_characters),xe()}function Te(){return D=c.scanJsDocToken()}function Ce(){return D=c.reScanGreaterToken()}function Ee(){return D=c.reScanTemplateHeadOrNoSubstitutionTemplate()}function ke(){return D=c.reScanLessThanToken()}function Ne(){return D=c.reScanHashToken()}function Ae(){return D=c.scanJsxIdentifier()}function Fe(){return D=c.scanJsxToken()}function Pe(t,r){var n=D,i=h.length,a=I,o=A,s=0!==r?c.lookAhead(t):c.tryScan(t);return e.Debug.assert(o===A),s&&0===r||(D=n,2!==r&&(h.length=i),I=a),s}function we(e){return Pe(e,1)}function Ie(e){return Pe(e,0)}function Oe(){return 79===be()||be()>116}function Me(){return 79===be()||(125!==be()||!ce())&&((133!==be()||!de())&&be()>116)}function Le(t,r,n){return void 0===n&&(n=!0),be()===t?(n&&Se(),!0):(r?pe(r):pe(e.Diagnostics._0_expected,e.tokenToString(t)),!1)}t.fixupParentReferences=W;var Re,Be,je,Je=Object.keys(e.textToKeywordObj).filter((function(e){return e.length>2}));function ze(t){var r;if(e.isTaggedTemplateExpression(t))ge(e.skipTrivia(f,t.template.pos),t.template.end,e.Diagnostics.Module_declaration_names_may_only_use_or_quoted_strings);else{var n=e.isIdentifier(t)?e.idText(t):void 0;if(n&&e.isIdentifierText(n,g)){var i=e.skipTrivia(f,t.pos);switch(n){case"const":case"let":case"var":return void ge(i,t.end,e.Diagnostics.Variable_declaration_not_allowed_at_this_location);case"declare":return;case"interface":return void Ue(e.Diagnostics.Interface_name_cannot_be_0,e.Diagnostics.Interface_must_be_given_a_name,18);case"is":return void ge(i,c.getTextPos(),e.Diagnostics.A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods);case"module":case"namespace":return void Ue(e.Diagnostics.Namespace_name_cannot_be_0,e.Diagnostics.Namespace_must_be_given_a_name,18);case"type":return void Ue(e.Diagnostics.Type_alias_name_cannot_be_0,e.Diagnostics.Type_alias_must_be_given_a_name,63)}var a=null!==(r=e.getSpellingSuggestion(n,Je,(function(e){return e})))&&void 0!==r?r:function(t){for(var r=0,n=Je;r<n.length;r++){var i=n[r];if(t.length>i.length+2&&e.startsWith(t,i))return"".concat(i," ").concat(t.slice(i.length))}return}(n);a?ge(i,t.end,e.Diagnostics.Unknown_keyword_or_identifier_Did_you_mean_0,a):0!==be()&&ge(i,t.end,e.Diagnostics.Unexpected_keyword_or_identifier)}else pe(e.Diagnostics._0_expected,e.tokenToString(26))}}function Ue(e,t,r){be()===r?pe(t):pe(e,c.getTokenValue())}function Ke(t){return be()===t?(Te(),!0):(pe(e.Diagnostics._0_expected,e.tokenToString(t)),!1)}function Ve(t,r,n,i){if(be()!==r){var a=pe(e.Diagnostics._0_expected,e.tokenToString(r));n&&a&&e.addRelatedInfo(a,e.createDetachedDiagnostic(_,i,1,e.Diagnostics.The_parser_expected_to_find_a_1_to_match_the_0_token_here,e.tokenToString(t),e.tokenToString(r)))}else Se()}function qe(e){return be()===e&&(Se(),!0)}function We(e){if(be()===e)return Qe()}function He(e){if(be()===e)return t=ve(),r=be(),Te(),et(P.createToken(r),t);var t,r}function Ge(t,r,n){return We(t)||tt(t,!1,r||e.Diagnostics._0_expected,n||e.tokenToString(t))}function Qe(){var e=ve(),t=be();return Se(),et(P.createToken(t),e)}function Xe(){return 26===be()||(19===be()||1===be()||c.hasPrecedingLineBreak())}function Ye(){return!!Xe()&&(26===be()&&Se(),!0)}function Ze(){return Ye()||Le(26)}function $e(t,r,n,i){var a=P.createNodeArray(t,i);return e.setTextRangePosEnd(a,r,null!=n?n:c.getStartPos()),a}function et(t,r,n){return e.setTextRangePosEnd(t,r,null!=n?n:c.getStartPos()),A&&(t.flags|=A),I&&(I=!1,t.flags|=131072),t}function tt(t,r,n,i){r?fe(c.getStartPos(),0,n,i):n&&pe(n,i);var a=ve();return et(79===t?P.createIdentifier("",void 0,void 0):e.isTemplateLiteralKind(t)?P.createTemplateLiteralLikeNode(t,"","",void 0):8===t?P.createNumericLiteral("",void 0):10===t?P.createStringLiteral("",void 0):279===t?P.createMissingDeclaration():P.createToken(t),a)}function rt(e){var t=T.get(e);return void 0===t&&T.set(e,t=e),t}function nt(t,r,n){if(t){E++;var i=ve(),a=be(),o=rt(c.getTokenValue()),s=c.hasExtendedUnicodeEscape();return xe(),et(P.createIdentifier(o,void 0,a,s),i)}if(80===be())return pe(n||e.Diagnostics.Private_identifiers_are_not_allowed_outside_class_bodies),nt(!0);if(0===be()&&c.tryScan((function(){return 79===c.reScanInvalidIdentifier()})))return nt(!0);E++;var u=1===be(),l=c.isReservedWord(),_=c.getTokenText(),d=l?e.Diagnostics.Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here:e.Diagnostics.Identifier_expected;return tt(79,u,r||d,_)}function it(e){return nt(Oe(),void 0,e)}function at(e,t){return nt(Me(),e,t)}function ot(t){return nt(e.tokenIsIdentifierOrKeyword(be()),t)}function st(){return e.tokenIsIdentifierOrKeyword(be())||10===be()||8===be()}function ct(e){if(10===be()||8===be()){var t=Vt();return t.text=rt(t.text),t}return e&&22===be()?function(){var e=ve();Le(22);var t=re(Xr);return Le(23),et(P.createComputedPropertyName(t),e)}():80===be()?lt():ot()}function ut(){return ct(!0)}function lt(){var e,t,r=ve(),n=P.createPrivateIdentifier((e=c.getTokenValue(),void 0===(t=C.get(e))&&C.set(e,t=e),t));return Se(),et(n,r)}function _t(e){return be()===e&&Ie(pt)}function dt(){return Se(),!c.hasPrecedingLineBreak()&&mt()}function pt(){switch(be()){case 85:return 92===Se();case 93:return Se(),88===be()?we(yt):154===be()?we(gt):ft();case 88:return yt();case 127:case 124:case 137:case 151:return Se(),mt();default:return dt()}}function ft(){return 41!==be()&&128!==be()&&18!==be()&&mt()}function gt(){return Se(),ft()}function mt(){return 22===be()||18===be()||41===be()||25===be()||st()}function yt(){return Se(),84===be()||98===be()||118===be()||126===be()&&we(Qn)||132===be()&&we(Xn)}function vt(t,r){if(At(t))return!0;switch(t){case 0:case 1:case 3:return!(26===be()&&r)&&ei();case 2:return 82===be()||88===be();case 4:return we(pr);case 5:return we(Si)||26===be()&&!r;case 6:return 22===be()||st();case 12:switch(be()){case 22:case 41:case 25:case 24:return!0;default:return st()}case 18:return st();case 9:return 22===be()||25===be()||st();case 24:return e.tokenIsIdentifierOrKeyword(be())||10===be();case 7:return 18===be()?we(ht):r?Me()&&!St():Gr()&&!St();case 8:return li();case 10:return 27===be()||25===be()||li();case 19:return 101===be()||Me();case 15:switch(be()){case 27:case 24:return!0}case 11:return 25===be()||Qr();case 16:return rr(!1);case 17:return rr(!0);case 20:case 21:return 27===be()||wr();case 22:return ji();case 23:return e.tokenIsIdentifierOrKeyword(be());case 13:return e.tokenIsIdentifierOrKeyword(be())||18===be();case 14:return!0}return e.Debug.fail("Non-exhaustive case in 'isListElement'.")}function ht(){if(e.Debug.assert(18===be()),19===Se()){var t=Se();return 27===t||18===t||94===t||117===t}return!0}function bt(){return Se(),Me()}function xt(){return Se(),e.tokenIsIdentifierOrKeyword(be())}function Dt(){return Se(),e.tokenIsIdentifierOrKeywordOrGreaterThan(be())}function St(){return(117===be()||94===be())&&we(Tt)}function Tt(){return Se(),Qr()}function Ct(){return Se(),wr()}function Et(e){if(1===be())return!0;switch(e){case 1:case 2:case 4:case 5:case 6:case 12:case 9:case 23:case 24:return 19===be();case 3:return 19===be()||82===be()||88===be();case 7:return 18===be()||94===be()||117===be();case 8:return function(){if(Xe())return!0;if(on(be()))return!0;if(38===be())return!0;return!1}();case 19:return 31===be()||20===be()||18===be()||94===be()||117===be();case 11:return 21===be()||26===be();case 15:case 21:case 10:return 23===be();case 17:case 16:case 18:return 21===be()||23===be();case 20:return 27!==be();case 22:return 18===be()||19===be();case 13:return 31===be()||43===be();case 14:return 29===be()&&we(Wi);default:return!1}}function kt(e,t){var r=k;k|=1<<e;for(var n=[],i=ve();!Et(e);)if(vt(e,!1))n.push(Nt(e,t));else if(Pt(e))break;return k=r,$e(n,i)}function Nt(e,t){var r=At(e);return r?Ft(r):t()}function At(t,r){if(x&&function(e){switch(e){case 5:case 2:case 0:case 1:case 3:case 6:case 4:case 8:case 17:case 16:return!0}return!1}(t)&&!I){var n=x.currentNode(null!=r?r:c.getStartPos());if(!(e.nodeIsMissing(n)||n.intersectsChange||e.containsParseError(n)))if((50720768&n.flags)===A&&function(e,t){switch(t){case 5:return function(e){if(e)switch(e.kind){case 173:case 178:case 174:case 175:case 169:case 237:return!0;case 171:var t=e;return!(79===t.name.kind&&135===t.name.originalKeywordKind)}return!1}(e);case 2:return function(e){if(e)switch(e.kind){case 292:case 293:return!0}return!1}(e);case 0:case 1:case 3:return function(e){if(e)switch(e.kind){case 259:case 240:case 238:case 242:case 241:case 254:case 250:case 252:case 249:case 248:case 246:case 247:case 245:case 244:case 251:case 239:case 255:case 253:case 243:case 256:case 269:case 268:case 275:case 274:case 264:case 260:case 261:case 263:case 262:return!0}return!1}(e);case 6:return function(e){return 302===e.kind}(e);case 4:return function(e){if(e)switch(e.kind){case 177:case 170:case 178:case 168:case 176:return!0}return!1}(e);case 8:return function(e){if(257!==e.kind)return!1;var t=e;return void 0===t.initializer}(e);case 17:case 16:return function(e){if(166!==e.kind)return!1;var t=e;return void 0===t.initializer}(e)}return!1}(n,t))return n.jsDocCache&&(n.jsDocCache=void 0),n}}function Ft(e){return c.setTextPos(e.end),Se(),e}function Pt(t){return function(t){switch(t){case 0:return 88===be()?pe(e.Diagnostics._0_expected,e.tokenToString(93)):pe(e.Diagnostics.Declaration_or_statement_expected);case 1:return pe(e.Diagnostics.Declaration_or_statement_expected);case 2:return pe(e.Diagnostics.case_or_default_expected);case 3:return pe(e.Diagnostics.Statement_expected);case 18:case 4:return pe(e.Diagnostics.Property_or_signature_expected);case 5:return pe(e.Diagnostics.Unexpected_token_A_constructor_method_accessor_or_property_was_expected);case 6:return pe(e.Diagnostics.Enum_member_expected);case 7:return pe(e.Diagnostics.Expression_expected);case 8:return e.isKeyword(be())?pe(e.Diagnostics._0_is_not_allowed_as_a_variable_declaration_name,e.tokenToString(be())):pe(e.Diagnostics.Variable_declaration_expected);case 9:return pe(e.Diagnostics.Property_destructuring_pattern_expected);case 10:return pe(e.Diagnostics.Array_element_destructuring_pattern_expected);case 11:return pe(e.Diagnostics.Argument_expression_expected);case 12:return pe(e.Diagnostics.Property_assignment_expected);case 15:return pe(e.Diagnostics.Expression_or_comma_expected);case 17:return pe(e.Diagnostics.Parameter_declaration_expected);case 16:return e.isKeyword(be())?pe(e.Diagnostics._0_is_not_allowed_as_a_parameter_name,e.tokenToString(be())):pe(e.Diagnostics.Parameter_declaration_expected);case 19:return pe(e.Diagnostics.Type_parameter_declaration_expected);case 20:return pe(e.Diagnostics.Type_argument_expected);case 21:return pe(e.Diagnostics.Type_expected);case 22:return pe(e.Diagnostics.Unexpected_token_expected);case 23:case 13:case 14:return pe(e.Diagnostics.Identifier_expected);case 24:return pe(e.Diagnostics.Identifier_or_string_literal_expected);case 25:return e.Debug.fail("ParsingContext.Count used as a context");default:e.Debug.assertNever(t)}}(t),!!function(){for(var e=0;e<25;e++)if(k&1<<e&&(vt(e,!0)||Et(e)))return!0;return!1}()||(Se(),!1)}function wt(e,t,r){var n=k;k|=1<<e;for(var i=[],a=ve(),o=-1;;)if(vt(e,!1)){var s=c.getStartPos(),u=Nt(e,t);if(!u)return void(k=n);if(i.push(u),o=c.getTokenPos(),qe(27))continue;if(o=-1,Et(e))break;Le(27,It(e)),r&&26===be()&&!c.hasPrecedingLineBreak()&&Se(),s===c.getStartPos()&&Se()}else{if(Et(e))break;if(Pt(e))break}return k=n,$e(i,a,void 0,o>=0)}function It(t){return 6===t?e.Diagnostics.An_enum_member_name_must_be_followed_by_a_or:void 0}function Ot(){var e=$e([],ve());return e.isMissingList=!0,e}function Mt(e,t,r,n){if(Le(r)){var i=wt(e,t);return Le(n),i}return Ot()}function Lt(e,t){for(var r=ve(),n=e?ot(t):at(t),i=ve();qe(24);){if(29===be()){n.jsdocDotPos=i;break}i=ve(),n=et(P.createQualifiedName(n,Bt(e,!1)),r)}return n}function Rt(e,t){return et(P.createQualifiedName(e,t),e.pos)}function Bt(t,r){if(c.hasPrecedingLineBreak()&&e.tokenIsIdentifierOrKeyword(be())&&we(Gn))return tt(79,!0,e.Diagnostics.Identifier_expected);if(80===be()){var n=lt();return r?n:tt(79,!0,e.Diagnostics.Identifier_expected)}return t?ot():at()}function jt(e){var t=ve();return et(P.createTemplateExpression(qt(e),function(e){var t,r=ve(),n=[];do{t=Kt(e),n.push(t)}while(16===t.literal.kind);return $e(n,r)}(e)),t)}function Jt(){var e=ve();return et(P.createTemplateLiteralType(qt(!1),function(){var e,t=ve(),r=[];do{e=zt(),r.push(e)}while(16===e.literal.kind);return $e(r,t)}()),e)}function zt(){var e=ve();return et(P.createTemplateLiteralTypeSpan(Wr(),Ut(!1)),e)}function Ut(t){return 19===be()?(function(e){D=c.reScanTemplateToken(e)}(t),r=Wt(be()),e.Debug.assert(16===r.kind||17===r.kind,"Template fragment has wrong token kind"),r):Ge(17,e.Diagnostics._0_expected,e.tokenToString(19));var r}function Kt(e){var t=ve();return et(P.createTemplateSpan(re(Xr),Ut(e)),t)}function Vt(){return Wt(be())}function qt(t){t&&Ee();var r=Wt(be());return e.Debug.assert(15===r.kind,"Template head has wrong token kind"),r}function Wt(t){var r=ve(),n=e.isTemplateLiteralKind(t)?P.createTemplateLiteralLikeNode(t,c.getTokenValue(),function(e){var t=14===e||17===e,r=c.getTokenText();return r.substring(1,r.length-(c.isUnterminated()?0:t?1:2))}(t),2048&c.getTokenFlags()):8===t?P.createNumericLiteral(c.getTokenValue(),c.getNumericLiteralFlags()):10===t?P.createStringLiteral(c.getTokenValue(),void 0,c.hasExtendedUnicodeEscape()):e.isLiteralKind(t)?P.createLiteralLikeNode(t,c.getTokenValue()):e.Debug.fail();return c.hasExtendedUnicodeEscape()&&(n.hasExtendedUnicodeEscape=!0),c.isUnterminated()&&(n.isUnterminated=!0),Se(),et(n,r)}function Ht(){return Lt(!0,e.Diagnostics.Type_expected)}function Gt(){if(!c.hasPrecedingLineBreak()&&29===ke())return Mt(20,Wr,29,31)}function Qt(){var e=ve();return et(P.createTypeReferenceNode(Ht(),Gt()),e)}function Xt(t){switch(t.kind){case 180:return e.nodeIsMissing(t.typeName);case 181:case 182:var r=t,n=r.parameters,i=r.type;return!!n.isMissingList||Xt(i);case 193:return Xt(t.type);default:return!1}}function Yt(){var e=ve();return Se(),et(P.createThisTypeNode(),e)}function Zt(){var e,t=ve();return 108!==be()&&103!==be()||(e=ot(),Le(58)),et(P.createParameterDeclaration(void 0,void 0,e,void 0,$t(),void 0),t)}function $t(){c.setInJSDocType(!0);var e=ve();if(qe(142)){var t=P.createJSDocNamepathType(void 0);e:for(;;)switch(be()){case 19:case 1:case 27:case 5:break e;default:Te()}return c.setInJSDocType(!1),et(t,e)}var r=qe(25),n=Vr();return c.setInJSDocType(!1),r&&(n=et(P.createJSDocVariadicType(n),e)),63===be()?(Se(),et(P.createJSDocOptionalType(n),e)):n}function er(){var e,t,r=ve(),n=Fi(),i=at();qe(94)&&(wr()||!Qr()?e=Wr():t=dn());var a=qe(63)?Wr():void 0,o=P.createTypeParameterDeclaration(n,i,e,a);return o.expression=t,et(o,r)}function tr(){if(29===be())return Mt(19,er,29,31)}function rr(t){return 25===be()||li()||e.isModifierKind(be())||59===be()||wr(!t)}function nr(e){return ir(e)}function ir(t,r){void 0===r&&(r=!0);var n=ve(),i=he(),a=t?ae(ki):oe(ki);if(108===be()){var o=P.createParameterDeclaration(a,void 0,nt(!0),void 0,Hr(),void 0);return a&&me(a[0],e.Diagnostics.Decorators_may_not_be_applied_to_this_parameters),K(et(o,n),i)}var s=w;w=!1;var c=Ai(a,Fi()),u=We(25);if(r||Oe()||22===be()||18===be()){var l=K(et(P.createParameterDeclaration(c,u,function(t){var r=_i(e.Diagnostics.Private_identifiers_cannot_be_used_as_parameters);return 0===e.getFullWidth(r)&&!e.some(t)&&e.isModifierKind(be())&&Se(),r}(c),We(57),Hr(),Yr()),n),i);return w=s,l}}function ar(t,r){if(function(t,r){if(38===t)return Le(t),!0;if(qe(58))return!0;if(r&&38===be())return pe(e.Diagnostics._0_expected,e.tokenToString(58)),Se(),!0;return!1}(t,r))return ne(Vr)}function or(e,t){var r=ce(),n=de();Y(!!(1&e)),$(!!(2&e));var i=32&e?wt(17,Zt):wt(16,(function(){return t?nr(n):ir(n,!1)}));return Y(r),$(n),i}function sr(e){if(!Le(20))return Ot();var t=or(e,!0);return Le(21),t}function cr(){qe(27)||Ze()}function ur(e){var t=ve(),r=he();177===e&&Le(103);var n=tr(),i=sr(4),a=ar(58,!0);return cr(),K(et(176===e?P.createCallSignature(n,i,a):P.createConstructSignature(n,i,a),t),r)}function lr(){return 22===be()&&we(_r)}function _r(){if(Se(),25===be()||23===be())return!0;if(e.isModifierKind(be())){if(Se(),Me())return!0}else{if(!Me())return!1;Se()}return 58===be()||27===be()||57===be()&&(Se(),58===be()||27===be()||23===be())}function dr(e,t,r,n){var i=Mt(16,(function(){return nr(!1)}),22,23),a=Hr();cr();var o=P.createIndexSignature(n,i,a);return o.illegalDecorators=r,K(et(o,e),t)}function pr(){if(20===be()||29===be()||137===be()||151===be())return!0;for(var t=!1;e.isModifierKind(be());)t=!0,Se();return 22===be()||(st()&&(t=!0,Se()),!!t&&(20===be()||29===be()||57===be()||58===be()||27===be()||Xe()))}function fr(){if(20===be()||29===be())return ur(176);if(103===be()&&we(gr))return ur(177);var e=ve(),t=he(),r=Fi();return _t(137)?Di(e,t,void 0,r,174,4):_t(151)?Di(e,t,void 0,r,175,4):lr()?dr(e,t,void 0,r):function(e,t,r){var n,i=ut(),a=We(57);if(20===be()||29===be()){var o=tr(),s=sr(4),c=ar(58,!0);n=P.createMethodSignature(r,i,a,o,s,c)}else c=Hr(),n=P.createPropertySignature(r,i,a,c),63===be()&&(n.initializer=Yr());return cr(),K(et(n,e),t)}(e,t,r)}function gr(){return Se(),20===be()||29===be()}function mr(){return 24===Se()}function yr(){switch(Se()){case 20:case 29:case 24:return!0}return!1}function vr(){var e;return Le(18)?(e=kt(4,fr),Le(19)):e=Ot(),e}function hr(){return Se(),39===be()||40===be()?146===Se():(146===be()&&Se(),22===be()&&bt()&&101===Se())}function br(){var e,t=ve();Le(18),146!==be()&&39!==be()&&40!==be()||146!==(e=Qe()).kind&&Le(146),Le(22);var r,n=function(){var e=ve(),t=ot();Le(101);var r=Wr();return et(P.createTypeParameterDeclaration(void 0,t,r,void 0),e)}(),i=qe(128)?Wr():void 0;Le(23),57!==be()&&39!==be()&&40!==be()||57!==(r=Qe()).kind&&Le(57);var a=Hr();Ze();var o=kt(4,fr);return Le(19),et(P.createMappedTypeNode(e,n,i,r,a,o),t)}function xr(){var t=ve();if(qe(25))return et(P.createRestTypeNode(Wr()),t);var r=Wr();if(e.isJSDocNullableType(r)&&r.pos===r.type.pos){var n=P.createOptionalTypeNode(r.type);return e.setTextRange(n,r),n.flags=r.flags,n}return r}function Dr(){return 58===Se()||57===be()&&58===Se()}function Sr(){return 25===be()?e.tokenIsIdentifierOrKeyword(Se())&&Dr():e.tokenIsIdentifierOrKeyword(be())&&Dr()}function Tr(){if(we(Sr)){var e=ve(),t=he(),r=We(25),n=ot(),i=We(57);Le(58);var a=xr();return K(et(P.createNamedTupleMember(r,n,i,a),e),t)}return xr()}function Cr(){var e=ve(),t=he(),r=function(){var e;if(126===be()){var t=ve();Se(),e=$e([et(P.createToken(126),t)],t)}return e}(),n=qe(103),i=tr(),a=sr(4),o=ar(38,!1),s=n?P.createConstructorTypeNode(r,i,a,o):P.createFunctionTypeNode(i,a,o);return n||(s.modifiers=r),K(et(s,e),t)}function Er(){var e=Qe();return 24===be()?void 0:e}function kr(e){var t=ve();e&&Se();var r=110===be()||95===be()||104===be()?Qe():Wt(be());return e&&(r=et(P.createPrefixUnaryExpression(40,r),t)),et(P.createLiteralTypeNode(r),t)}function Nr(){return Se(),100===be()}function Ar(){d|=2097152;var t=ve(),r=qe(112);Le(100),Le(20);var n,i=Wr();qe(27)&&(n=function(){var t=ve(),r=c.getTokenPos();Le(18);var n=c.hasPrecedingLineBreak();Le(130),Le(58);var i=Gi(!0);if(!Le(19)){var a=e.lastOrUndefined(h);a&&a.code===e.Diagnostics._0_expected.code&&e.addRelatedInfo(a,e.createDetachedDiagnostic(_,r,1,e.Diagnostics.The_parser_expected_to_find_a_1_to_match_the_0_token_here,"{","}"))}return et(P.createImportTypeAssertionContainer(i,n),t)}()),Le(21);var a=qe(24)?Ht():void 0,o=Gt();return et(P.createImportTypeNode(i,n,a,o,r),t)}function Fr(){return Se(),8===be()||9===be()}function Pr(){switch(be()){case 131:case 157:case 152:case 148:case 160:case 153:case 134:case 155:case 144:case 149:return Ie(Er)||Qt();case 66:c.reScanAsteriskEqualsToken();case 41:return r=ve(),Se(),et(P.createJSDocAllType(),r);case 60:c.reScanQuestionToken();case 57:return function(){var e=ve();return Se(),27===be()||19===be()||21===be()||31===be()||63===be()||51===be()?et(P.createJSDocUnknownType(),e):et(P.createJSDocNullableType(Wr(),!1),e)}();case 98:return function(){var e=ve(),t=he();if(we(Vi)){Se();var r=sr(36),n=ar(58,!1);return K(et(P.createJSDocFunctionType(r,n),e),t)}return et(P.createTypeReferenceNode(ot(),void 0),e)}();case 53:return function(){var e=ve();return Se(),et(P.createJSDocNonNullableType(Pr(),!1),e)}();case 14:case 10:case 8:case 9:case 110:case 95:case 104:return kr();case 40:return we(Fr)?kr(!0):Qt();case 114:return Qe();case 108:var e=Yt();return 140!==be()||c.hasPrecedingLineBreak()?e:(t=e,Se(),et(P.createTypePredicateNode(void 0,t,Wr()),t.pos));case 112:return we(Nr)?Ar():function(){var e=ve();Le(112);var t=Lt(!0),r=c.hasPrecedingLineBreak()?void 0:Bi();return et(P.createTypeQueryNode(t,r),e)}();case 18:return we(hr)?br():function(){var e=ve();return et(P.createTypeLiteralNode(vr()),e)}();case 22:return function(){var e=ve();return et(P.createTupleTypeNode(Mt(21,Tr,22,23)),e)}();case 20:return function(){var e=ve();Le(20);var t=Wr();return Le(21),et(P.createParenthesizedType(t),e)}();case 100:return Ar();case 129:return we(Gn)?function(){var e=ve(),t=Ge(129),r=108===be()?Yt():at(),n=qe(140)?Wr():void 0;return et(P.createTypePredicateNode(t,r,n),e)}():Qt();case 15:return Jt();default:return Qt()}var t,r}function wr(e){switch(be()){case 131:case 157:case 152:case 148:case 160:case 134:case 146:case 153:case 156:case 114:case 155:case 104:case 108:case 112:case 144:case 18:case 22:case 29:case 51:case 50:case 103:case 10:case 8:case 9:case 110:case 95:case 149:case 41:case 57:case 53:case 25:case 138:case 100:case 129:case 14:case 15:return!0;case 98:return!e;case 40:return!e&&we(Fr);case 20:return!e&&we(Ir);default:return Me()}}function Ir(){return Se(),21===be()||rr(!1)||wr()}function Or(){for(var e=ve(),t=Pr();!c.hasPrecedingLineBreak();)switch(be()){case 53:Se(),t=et(P.createJSDocNonNullableType(t,!0),e);break;case 57:if(we(Ct))return t;Se(),t=et(P.createJSDocNullableType(t,!0),e);break;case 22:if(Le(22),wr()){var r=Wr();Le(23),t=et(P.createIndexedAccessTypeNode(t,r),e)}else Le(23),t=et(P.createArrayTypeNode(t),e);break;default:return t}return t}function Mr(){if(qe(94)){var e=ie(Wr);if(le()||57!==be())return e}}function Lr(){var e=ve();return Le(138),et(P.createInferTypeNode(function(){var e=ve(),t=at(),r=Ie(Mr);return et(P.createTypeParameterDeclaration(void 0,t,r),e)}()),e)}function Rr(){var e=be();switch(e){case 141:case 156:case 146:return function(e){var t=ve();return Le(e),et(P.createTypeOperatorNode(e,Rr()),t)}(e);case 138:return Lr()}return ne(Or)}function Br(t){if(Ur()){var r=Cr();return me(r,e.isFunctionTypeNode(r)?t?e.Diagnostics.Function_type_notation_must_be_parenthesized_when_used_in_a_union_type:e.Diagnostics.Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type:t?e.Diagnostics.Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type:e.Diagnostics.Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type),r}}function jr(e,t,r){var n=ve(),i=51===e,a=qe(e),o=a&&Br(i)||t();if(be()===e||a){for(var s=[o];qe(e);)s.push(Br(i)||t());o=et(r($e(s,n)),n)}return o}function Jr(){return jr(50,Rr,P.createIntersectionTypeNode)}function zr(){return Se(),103===be()}function Ur(){return 29===be()||(!(20!==be()||!we(Kr))||(103===be()||126===be()&&we(zr)))}function Kr(){if(Se(),21===be()||25===be())return!0;if(function(){if(e.isModifierKind(be())&&Fi(),Me()||108===be())return Se(),!0;if(22===be()||18===be()){var t=h.length;return _i(),t===h.length}return!1}()){if(58===be()||27===be()||57===be()||63===be())return!0;if(21===be()&&(Se(),38===be()))return!0}return!1}function Vr(){var e=ve(),t=Me()&&Ie(qr),r=Wr();return t?et(P.createTypePredicateNode(void 0,t,r),e):r}function qr(){var e=at();if(140===be()&&!c.hasPrecedingLineBreak())return Se(),e}function Wr(){if(40960&A)return ee(40960,Wr);if(Ur())return Cr();var e=ve(),t=jr(51,Jr,P.createUnionTypeNode);if(!le()&&!c.hasPrecedingLineBreak()&&qe(94)){var r=ie(Wr);Le(57);var n=ne(Wr);Le(58);var i=ne(Wr);return et(P.createConditionalTypeNode(t,r,n,i),e)}return t}function Hr(){return qe(58)?Wr():void 0}function Gr(){switch(be()){case 108:case 106:case 104:case 110:case 95:case 8:case 9:case 10:case 14:case 15:case 20:case 22:case 18:case 98:case 84:case 103:case 43:case 68:case 79:return!0;case 100:return we(yr);default:return Me()}}function Qr(){if(Gr())return!0;switch(be()){case 39:case 40:case 54:case 53:case 89:case 112:case 114:case 45:case 46:case 29:case 133:case 125:case 80:return!0;default:return!!cn()||Me()}}function Xr(){var e=_e();e&&Z(!1);for(var t,r=ve(),n=Zr(!0);t=We(27);)n=un(n,t,Zr(!0),r);return e&&Z(!0),n}function Yr(){return qe(63)?Zr(!0):void 0}function Zr(t){if(function(){if(125===be())return!!ce()||we(Yn);return!1}())return function(){var e=ve();return Se(),c.hasPrecedingLineBreak()||41!==be()&&!Qr()?et(P.createYieldExpression(void 0,void 0),e):et(P.createYieldExpression(We(41),Zr(!0)),e)}();var r=function(t){var r=function(){if(20===be()||29===be()||132===be())return we(en);if(38===be())return 1;return 0}();if(0===r)return;return 1===r?rn(!0,!0):Ie((function(){return function(t){var r=c.getTokenPos();if(null==N?void 0:N.has(r))return;var n=rn(!1,t);n||(N||(N=new e.Set)).add(r);return n}(t)}))}(t)||function(e){if(132===be()&&1===we(tn)){var t=ve(),r=Pi();return $r(t,an(0),e,r)}return}(t);if(r)return r;var n=ve(),i=an(0);return 79===i.kind&&38===be()?$r(n,i,t,void 0):e.isLeftHandSideExpression(i)&&e.isAssignmentOperator(Ce())?un(i,Qe(),Zr(t),n):function(t,r,n){var i,a=We(57);if(!a)return t;return et(P.createConditionalExpression(t,a,ee(u,(function(){return Zr(!1)})),i=Ge(58),e.nodeIsPresent(i)?Zr(n):tt(79,!1,e.Diagnostics._0_expected,e.tokenToString(58))),r)}(i,n,t)}function $r(t,r,n,i){e.Debug.assert(38===be(),"parseSimpleArrowFunctionExpression should only have been called if we had a =>");var a=P.createParameterDeclaration(void 0,void 0,r,void 0,void 0,void 0);et(a,r.pos);var o=$e([a],a.pos,a.end),s=Ge(38),c=nn(!!i,n);return q(et(P.createArrowFunction(i,void 0,o,void 0,s,c),t))}function en(){if(132===be()){if(Se(),c.hasPrecedingLineBreak())return 0;if(20!==be()&&29!==be())return 0}var t=be(),r=Se();if(20===t){if(21===r)switch(Se()){case 38:case 58:case 18:return 1;default:return 0}if(22===r||18===r)return 2;if(25===r)return 1;if(e.isModifierKind(r)&&132!==r&&we(bt))return 128===Se()?0:1;if(!Me()&&108!==r)return 0;switch(Se()){case 58:return 1;case 57:return Se(),58===be()||27===be()||63===be()||21===be()?1:0;case 27:case 63:case 21:return 2}return 0}if(e.Debug.assert(29===t),!Me())return 0;if(1===y){var n=we((function(){var e=Se();if(94===e)switch(Se()){case 63:case 31:return!1;default:return!0}else if(27===e||63===e)return!0;return!1}));return n?1:0}return 2}function tn(){if(132===be()){if(Se(),c.hasPrecedingLineBreak()||38===be())return 0;var e=an(0);if(!c.hasPrecedingLineBreak()&&79===e.kind&&38===be())return 1}return 0}function rn(t,r){var n,i=ve(),a=he(),o=Pi(),s=e.some(o,e.isAsyncModifier)?2:0,c=tr();if(Le(20)){if(t)n=or(s,t);else{var u=or(s,t);if(!u)return;n=u}if(!Le(21)&&!t)return}else{if(!t)return;n=Ot()}var l=58===be(),_=ar(58,!1);if(!_||t||!Xt(_)){for(var d=_;193===(null==d?void 0:d.kind);)d=d.type;var p=d&&e.isJSDocFunctionType(d);if(t||38===be()||!p&&18===be()){var f=be(),g=Ge(38),m=38===f||18===f?nn(e.some(o,e.isAsyncModifier),r):at();if(r||!l||58===be())return K(et(P.createArrowFunction(o,c,n,_,g,m),i),a)}}}function nn(e,t){if(18===be())return Un(e?2:0);if(26!==be()&&98!==be()&&84!==be()&&ei()&&(18===be()||98===be()||84===be()||59===be()||!Qr()))return Un(16|(e?2:0));var r=w;w=!1;var n=e?ae((function(){return Zr(t)})):oe((function(){return Zr(t)}));return w=r,n}function an(e){var t=ve();return sn(e,dn(),t)}function on(e){return 101===e||162===e}function sn(t,r,n){for(;;){Ce();var i=e.getBinaryOperatorPrecedence(be());if(!(42===be()?i>=t:i>t))break;if(101===be()&&ue())break;if(128===be()||150===be()){if(c.hasPrecedingLineBreak())break;var a=be();Se(),r=150===a?(o=r,s=Wr(),et(P.createSatisfiesExpression(o,s),o.pos)):ln(r,Wr())}else r=un(r,Qe(),an(i),n)}var o,s;return r}function cn(){return(!ue()||101!==be())&&e.getBinaryOperatorPrecedence(be())>0}function un(e,t,r,n){return et(P.createBinaryExpression(e,t,r),n)}function ln(e,t){return et(P.createAsExpression(e,t),e.pos)}function _n(){var e=ve();return et(P.createPrefixUnaryExpression(be(),De(pn)),e)}function dn(){if(function(){switch(be()){case 39:case 40:case 54:case 53:case 89:case 112:case 114:case 133:return!1;case 29:if(1!==y)return!1;default:return!0}}()){var t=ve(),r=fn();return 42===be()?sn(e.getBinaryOperatorPrecedence(be()),r,t):r}var n=be(),i=pn();if(42===be()){t=e.skipTrivia(f,i.pos);var a=i.end;213===i.kind?ge(t,a,e.Diagnostics.A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses):ge(t,a,e.Diagnostics.An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses,e.tokenToString(n))}return i}function pn(){switch(be()){case 39:case 40:case 54:case 53:return _n();case 89:return e=ve(),et(P.createDeleteExpression(De(pn)),e);case 112:return function(){var e=ve();return et(P.createTypeOfExpression(De(pn)),e)}();case 114:return function(){var e=ve();return et(P.createVoidExpression(De(pn)),e)}();case 29:return function(){var e=ve();Le(29);var t=Wr();Le(31);var r=pn();return et(P.createTypeAssertion(t,r),e)}();case 133:if(133===be()&&(de()||we(Yn)))return function(){var e=ve();return et(P.createAwaitExpression(De(pn)),e)}();default:return fn()}var e}function fn(){if(45===be()||46===be()){var t=ve();return et(P.createPrefixUnaryExpression(be(),De(gn)),t)}if(1===y&&29===be()&&we(Dt))return yn(!0);var r=gn();if(e.Debug.assert(e.isLeftHandSideExpression(r)),(45===be()||46===be())&&!c.hasPrecedingLineBreak()){var n=be();return Se(),et(P.createPostfixUnaryExpression(r,n),r.pos)}return r}function gn(){var t,r=ve();return 100===be()?we(gr)?(d|=2097152,t=Qe()):we(mr)?(Se(),Se(),t=et(P.createMetaProperty(100,ot()),r),d|=4194304):t=mn():t=106===be()?function(){var t=ve(),r=Qe();if(29===be()){var n=ve(),i=Ie(wn);void 0!==i&&(ge(n,ve(),e.Diagnostics.super_may_not_use_type_arguments),Nn()||(r=P.createExpressionWithTypeArguments(r,i)))}if(20===be()||24===be()||22===be())return r;return Ge(24,e.Diagnostics.super_must_be_followed_by_an_argument_list_or_member_access),et(P.createPropertyAccessExpression(r,Bt(!0,!0)),t)}():mn(),Fn(r,t)}function mn(){return kn(ve(),In(),!0)}function yn(t,r,n){var i,o=ve(),s=function(e){var t=ve();if(Le(29),31===be())return Fe(),et(P.createJsxOpeningFragment(),t);var r,n=bn(),i=0==(262144&A)?Bi():void 0,a=function(){var e=ve();return et(P.createJsxAttributes(kt(13,Dn)),e)}();31===be()?(Fe(),r=P.createJsxOpeningElement(n,i,a)):(Le(43),Le(31,void 0,!1)&&(e?Se():Fe()),r=P.createJsxSelfClosingElement(n,i,a));return et(r,t)}(t);if(283===s.kind){var c=hn(s),u=void 0,l=c[c.length-1];if(281===(null==l?void 0:l.kind)&&!Q(l.openingElement.tagName,l.closingElement.tagName)&&Q(s.tagName,l.closingElement.tagName)){var _=l.children.end,d=et(P.createJsxElement(l.openingElement,l.children,et(P.createJsxClosingElement(et(P.createIdentifier(""),_,_)),_,_)),l.openingElement.pos,_);c=$e(a(a([],c.slice(0,c.length-1),!0),[d],!1),c.pos,_),u=l.closingElement}else u=function(e,t){var r=ve();Le(30);var n=bn();Le(31,void 0,!1)&&(t||!Q(e.tagName,n)?Se():Fe());return et(P.createJsxClosingElement(n),r)}(s,t),Q(s.tagName,u.tagName)||(n&&e.isJsxOpeningElement(n)&&Q(u.tagName,n.tagName)?me(s.tagName,e.Diagnostics.JSX_element_0_has_no_corresponding_closing_tag,e.getTextOfNodeFromSourceText(f,s.tagName)):me(u.tagName,e.Diagnostics.Expected_corresponding_JSX_closing_tag_for_0,e.getTextOfNodeFromSourceText(f,s.tagName)));i=et(P.createJsxElement(s,c,u),o)}else 286===s.kind?i=et(P.createJsxFragment(s,hn(s),function(t){var r=ve();Le(30),e.tokenIsIdentifierOrKeyword(be())&&me(bn(),e.Diagnostics.Expected_corresponding_closing_tag_for_JSX_fragment);Le(31,void 0,!1)&&(t?Se():Fe());return et(P.createJsxJsxClosingFragment(),r)}(t)),o):(e.Debug.assert(282===s.kind),i=s);if(t&&29===be()){var p=void 0===r?i.pos:r,g=Ie((function(){return yn(!0,p)}));if(g){var m=tt(27,!1);return e.setTextRangePosWidth(m,g.pos,0),ge(e.skipTrivia(f,p),g.end,e.Diagnostics.JSX_expressions_must_have_one_parent_element),et(P.createBinaryExpression(i,m,g),o)}}return i}function vn(t,r){switch(r){case 1:if(e.isJsxOpeningFragment(t))me(t,e.Diagnostics.JSX_fragment_has_no_corresponding_closing_tag);else{var n=t.tagName;ge(e.skipTrivia(f,n.pos),n.end,e.Diagnostics.JSX_element_0_has_no_corresponding_closing_tag,e.getTextOfNodeFromSourceText(f,t.tagName))}return;case 30:case 7:return;case 11:case 12:return i=ve(),a=P.createJsxText(c.getTokenValue(),12===D),D=c.scanJsxToken(),et(a,i);case 18:return xn(!1);case 29:return yn(!1,void 0,t);default:return e.Debug.assertNever(r)}var i,a}function hn(t){var r=[],n=ve(),i=k;for(k|=16384;;){var a=vn(t,D=c.reScanJsxToken());if(!a)break;if(r.push(a),e.isJsxOpeningElement(t)&&281===(null==a?void 0:a.kind)&&!Q(a.openingElement.tagName,a.closingElement.tagName)&&Q(t.tagName,a.closingElement.tagName))break}return k=i,$e(r,n)}function bn(){var e=ve();Ae();for(var t=108===be()?Qe():ot();qe(24);)t=et(P.createPropertyAccessExpression(t,Bt(!0,!1)),e);return t}function xn(e){var t,r,n=ve();if(Le(18))return 19!==be()&&(t=We(25),r=Xr()),e?Le(19):Le(19,void 0,!1)&&Fe(),et(P.createJsxExpression(t,r),n)}function Dn(){if(18===be())return function(){var e=ve();Le(18),Le(25);var t=Xr();return Le(19),et(P.createJsxSpreadAttribute(t),e)}();Ae();var t=ve();return et(P.createJsxAttribute(ot(),function(){if(63===be()){if(10===(D=c.scanJsxAttributeValue()))return Vt();if(18===be())return xn(!0);if(29===be())return yn(!0);pe(e.Diagnostics.or_JSX_element_expected)}return}()),t)}function Sn(){return Se(),e.tokenIsIdentifierOrKeyword(be())||22===be()||Nn()}function Tn(t){if(32&t.flags)return!0;if(e.isNonNullExpression(t)){for(var r=t.expression;e.isNonNullExpression(r)&&!(32&r.flags);)r=r.expression;if(32&r.flags){for(;e.isNonNullExpression(t);)t.flags|=32,t=t.expression;return!0}}return!1}function Cn(t,r,n){var i=Bt(!0,!0),a=n||Tn(r),o=a?P.createPropertyAccessChain(r,n,i):P.createPropertyAccessExpression(r,i);(a&&e.isPrivateIdentifier(o.name)&&me(o.name,e.Diagnostics.An_optional_chain_cannot_contain_private_identifiers),e.isExpressionWithTypeArguments(r)&&r.typeArguments)&&ge(r.typeArguments.pos-1,e.skipTrivia(f,r.typeArguments.end)+1,e.Diagnostics.An_instantiation_expression_cannot_be_followed_by_a_property_access);return et(o,t)}function En(t,r,n){var i;if(23===be())i=tt(79,!0,e.Diagnostics.An_element_access_expression_should_take_an_argument);else{var a=re(Xr);e.isStringOrNumericLiteralLike(a)&&(a.text=rt(a.text)),i=a}return Le(23),et(n||Tn(r)?P.createElementAccessChain(r,n,i):P.createElementAccessExpression(r,i),t)}function kn(t,r,n){for(;;){var i=void 0,a=!1;if(n&&28===be()&&we(Sn)?(i=Ge(28),a=e.tokenIsIdentifierOrKeyword(be())):a=qe(24),a)r=Cn(t,r,i);else if(!i&&_e()||!qe(22)){if(!Nn()){if(!i){if(53===be()&&!c.hasPrecedingLineBreak()){Se(),r=et(P.createNonNullExpression(r),t);continue}var o=Ie(wn);if(o){r=et(P.createExpressionWithTypeArguments(r,o),t);continue}}return r}r=i||230!==r.kind?An(t,r,i,void 0):An(t,r.expression,i,r.typeArguments)}else r=En(t,r,i)}}function Nn(){return 14===be()||15===be()}function An(e,t,r,n){var i=P.createTaggedTemplateExpression(t,n,14===be()?(Ee(),Vt()):jt(!0));return(r||32&t.flags)&&(i.flags|=32),i.questionDotToken=r,et(i,e)}function Fn(t,r){for(;;){r=kn(t,r,!0);var n=void 0,i=We(28);if(i&&(n=Ie(wn),Nn()))r=An(t,r,i,n);else{if(!n&&20!==be()){if(i){var a=tt(79,!1,e.Diagnostics.Identifier_expected);r=et(P.createPropertyAccessChain(r,i,a),t)}break}i||230!==r.kind||(n=r.typeArguments,r=r.expression);var o=Pn();r=et(i||Tn(r)?P.createCallChain(r,i,n,o):P.createCallExpression(r,n,o),t)}}return r}function Pn(){Le(20);var e=wt(11,Mn);return Le(21),e}function wn(){if(0==(262144&A)&&29===ke()){Se();var e=wt(20,Wr);if(31===Ce())return Se(),e&&function(){switch(be()){case 20:case 14:case 15:return!0;case 29:case 31:case 39:case 40:return!1}return c.hasPrecedingLineBreak()||cn()||!Qr()}()?e:void 0}}function In(){switch(be()){case 8:case 9:case 10:case 14:return Vt();case 108:case 106:case 104:case 110:case 95:return Qe();case 20:return function(){var e=ve(),t=he();Le(20);var r=re(Xr);return Le(21),K(et(P.createParenthesizedExpression(r),e),t)}();case 22:return Ln();case 18:return Bn();case 132:if(!we(Xn))break;return jn();case 84:return Oi(ve(),he(),void 0,void 0,228);case 98:return jn();case 103:return function(){var t=ve();if(Le(103),qe(24)){var r=ot();return et(P.createMetaProperty(103,r),t)}var n,i=kn(ve(),In(),!1);230===i.kind&&(n=i.typeArguments,i=i.expression);28===be()&&pe(e.Diagnostics.Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0,e.getTextOfNodeFromSourceText(f,i));var a=20===be()?Pn():void 0;return et(P.createNewExpression(i,n,a),t)}();case 43:case 68:if(13===(D=c.reScanSlashToken()))return Vt();break;case 15:return jt(!1);case 80:return lt()}return at(e.Diagnostics.Expression_expected)}function On(){return 25===be()?function(){var e=ve();Le(25);var t=Zr(!0);return et(P.createSpreadElement(t),e)}():27===be()?et(P.createOmittedExpression(),ve()):Zr(!0)}function Mn(){return ee(u,On)}function Ln(){var e=ve(),t=c.getTokenPos(),r=Le(22),n=c.hasPrecedingLineBreak(),i=wt(15,On);return Ve(22,23,r,t),et(P.createArrayLiteralExpression(i,n),e)}function Rn(){var e=ve(),t=he();if(We(25)){var r=Zr(!0);return K(et(P.createSpreadAssignment(r),e),t)}var n=ki(),i=Fi();if(_t(137))return Di(e,t,n,i,174,0);if(_t(151))return Di(e,t,n,i,175,0);var a,o=We(41),s=Me(),c=ut(),u=We(57),l=We(53);if(o||20===be()||29===be())return hi(e,t,n,i,o,c,u,l);if(s&&58!==be()){var _=We(63),d=_?re((function(){return Zr(!0)})):void 0;(a=P.createShorthandPropertyAssignment(c,d)).equalsToken=_}else{Le(58);var p=re((function(){return Zr(!0)}));a=P.createPropertyAssignment(c,p)}return a.illegalDecorators=n,a.modifiers=i,a.questionToken=u,a.exclamationToken=l,K(et(a,e),t)}function Bn(){var e=ve(),t=c.getTokenPos(),r=Le(18),n=c.hasPrecedingLineBreak(),i=wt(12,Rn,!0);return Ve(18,19,r,t),et(P.createObjectLiteralExpression(i,n),e)}function jn(){var t=_e();Z(!1);var r=ve(),n=he(),i=Fi();Le(98);var a=We(41),o=a?1:0,s=e.some(i,e.isAsyncModifier)?2:0,c=o&&s?te(40960,Jn):o?function(e){return te(8192,e)}(Jn):s?ae(Jn):Jn(),u=tr(),l=sr(o|s),_=ar(58,!1),d=Un(o|s);return Z(t),K(et(P.createFunctionExpression(i,a,c,u,l,_,d),r),n)}function Jn(){return Oe()?it():void 0}function zn(t,r){var n=ve(),i=he(),a=c.getTokenPos(),o=Le(18,r);if(o||t){var s=c.hasPrecedingLineBreak(),u=kt(1,ri);Ve(18,19,o,a);var l=K(et(P.createBlock(u,s),n),i);return 63===be()&&(pe(e.Diagnostics.Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_destructuring_assignment_you_might_need_to_wrap_the_the_whole_assignment_in_parentheses),Se()),l}u=Ot();return K(et(P.createBlock(u,void 0),n),i)}function Un(e,t){var r=ce();Y(!!(1&e));var n=de();$(!!(2&e));var i=w;w=!1;var a=_e();a&&Z(!1);var o=zn(!!(16&e),t);return a&&Z(!0),w=i,Y(r),$(n),o}function Kn(){var e=ve(),t=he();Le(97);var r,n,i=We(133);if(Le(20),26!==be()&&(r=113===be()||119===be()||85===be()?fi(!0):te(4096,Xr)),i?Le(162):qe(162)){var a=re((function(){return Zr(!0)}));Le(21),n=P.createForOfStatement(i,r,a,ri())}else if(qe(101)){a=re(Xr);Le(21),n=P.createForInStatement(r,a,ri())}else{Le(26);var o=26!==be()&&21!==be()?re(Xr):void 0;Le(26);var s=21!==be()?re(Xr):void 0;Le(21),n=P.createForStatement(r,o,s,ri())}return K(et(n,e),t)}function Vn(e){var t=ve(),r=he();Le(249===e?81:86);var n=Xe()?void 0:at();return Ze(),K(et(249===e?P.createBreakStatement(n):P.createContinueStatement(n),t),r)}function qn(){return 82===be()?function(){var e=ve(),t=he();Le(82);var r=re(Xr);Le(58);var n=kt(3,ri);return K(et(P.createCaseClause(r,n),e),t)}():function(){var e=ve();Le(88),Le(58);var t=kt(3,ri);return et(P.createDefaultClause(t),e)}()}function Wn(){var e=ve(),t=he();Le(107),Le(20);var r=re(Xr);Le(21);var n=function(){var e=ve();Le(18);var t=kt(2,qn);return Le(19),et(P.createCaseBlock(t),e)}();return K(et(P.createSwitchStatement(r,n),e),t)}function Hn(){var t=ve(),r=he();Le(111);var n,i=zn(!1),a=83===be()?function(){var e,t=ve();Le(83),qe(20)?(e=pi(),Le(21)):e=void 0;var r=zn(!1);return et(P.createCatchClause(e,r),t)}():void 0;return a&&96!==be()||(Le(96,e.Diagnostics.catch_or_finally_expected),n=zn(!1)),K(et(P.createTryStatement(i,a,n),t),r)}function Gn(){return Se(),e.tokenIsIdentifierOrKeyword(be())&&!c.hasPrecedingLineBreak()}function Qn(){return Se(),84===be()&&!c.hasPrecedingLineBreak()}function Xn(){return Se(),98===be()&&!c.hasPrecedingLineBreak()}function Yn(){return Se(),(e.tokenIsIdentifierOrKeyword(be())||8===be()||9===be()||10===be())&&!c.hasPrecedingLineBreak()}function Zn(){for(;;)switch(be()){case 113:case 119:case 85:case 98:case 84:case 92:return!0;case 118:case 154:return Se(),!c.hasPrecedingLineBreak()&&Me();case 142:case 143:return oi();case 126:case 127:case 132:case 136:case 121:case 122:case 123:case 146:if(Se(),c.hasPrecedingLineBreak())return!1;continue;case 159:return Se(),18===be()||79===be()||93===be();case 100:return Se(),10===be()||41===be()||18===be()||e.tokenIsIdentifierOrKeyword(be());case 93:var t=Se();if(154===t&&(t=we(Se)),63===t||41===t||18===t||88===t||128===t)return!0;continue;case 124:Se();continue;default:return!1}}function $n(){return we(Zn)}function ei(){switch(be()){case 59:case 26:case 18:case 113:case 119:case 98:case 84:case 92:case 99:case 90:case 115:case 97:case 86:case 81:case 105:case 116:case 107:case 109:case 111:case 87:case 83:case 96:case 132:case 136:case 118:case 142:case 143:case 154:case 159:return!0;case 100:return $n()||we(yr);case 85:case 93:return $n();case 127:case 123:case 121:case 122:case 124:case 146:return $n()||!we(Gn);default:return Qr()}}function ti(){return Se(),Oe()||18===be()||22===be()}function ri(){switch(be()){case 26:return t=ve(),r=he(),Le(26),K(et(P.createEmptyStatement(),t),r);case 18:return zn(!1);case 113:return mi(ve(),he(),void 0,void 0);case 119:if(we(ti))return mi(ve(),he(),void 0,void 0);break;case 98:return yi(ve(),he(),void 0,void 0);case 84:return Ii(ve(),he(),void 0,void 0);case 99:return function(){var e=ve(),t=he();Le(99);var r=c.getTokenPos(),n=Le(20),i=re(Xr);Ve(20,21,n,r);var a=ri(),o=qe(91)?ri():void 0;return K(et(P.createIfStatement(i,a,o),e),t)}();case 90:return function(){var e=ve(),t=he();Le(90);var r=ri();Le(115);var n=c.getTokenPos(),i=Le(20),a=re(Xr);return Ve(20,21,i,n),qe(26),K(et(P.createDoStatement(r,a),e),t)}();case 115:return function(){var e=ve(),t=he();Le(115);var r=c.getTokenPos(),n=Le(20),i=re(Xr);Ve(20,21,n,r);var a=ri();return K(et(P.createWhileStatement(i,a),e),t)}();case 97:return Kn();case 86:return Vn(248);case 81:return Vn(249);case 105:return function(){var e=ve(),t=he();Le(105);var r=Xe()?void 0:re(Xr);return Ze(),K(et(P.createReturnStatement(r),e),t)}();case 116:return function(){var e=ve(),t=he();Le(116);var r=c.getTokenPos(),n=Le(20),i=re(Xr);Ve(20,21,n,r);var a=te(33554432,ri);return K(et(P.createWithStatement(i,a),e),t)}();case 107:return Wn();case 109:return function(){var e=ve(),t=he();Le(109);var r=c.hasPrecedingLineBreak()?void 0:re(Xr);return void 0===r&&(E++,r=et(P.createIdentifier(""),ve())),Ye()||ze(r),K(et(P.createThrowStatement(r),e),t)}();case 111:case 83:case 96:return Hn();case 87:return function(){var e=ve(),t=he();return Le(87),Ze(),K(et(P.createDebuggerStatement(),e),t)}();case 59:return ii();case 132:case 118:case 154:case 142:case 143:case 136:case 85:case 92:case 93:case 100:case 121:case 122:case 123:case 126:case 127:case 124:case 146:case 159:if($n())return ii()}var t,r;return function(){var t,r=ve(),n=he(),i=20===be(),a=re(Xr);return e.isIdentifier(a)&&qe(58)?t=P.createLabeledStatement(a,ri()):(Ye()||ze(a),t=P.createExpressionStatement(a),i&&(n=!1)),K(et(t,r),n)}()}function ni(e){return 136===e.kind}function ii(){var t=ve(),r=he(),n=ki(),i=Fi();if(e.some(i,ni)){var a=function(e){return te(16777216,(function(){var t=At(k,e);if(t)return Ft(t)}))}(t);if(a)return a;for(var o=0,s=i;o<s.length;o++){s[o].flags|=16777216}return te(16777216,(function(){return ai(t,r,n,i)}))}return ai(t,r,n,i)}function ai(t,r,n,i){switch(be()){case 113:case 119:case 85:return mi(t,r,n,i);case 98:return yi(t,r,n,i);case 84:return Ii(t,r,n,i);case 118:return function(e,t,r,n){Le(118);var i=at(),a=tr(),o=Mi(),s=vr(),c=P.createInterfaceDeclaration(n,i,a,o,s);return c.illegalDecorators=r,K(et(c,e),t)}(t,r,n,i);case 154:return function(e,t,r,n){Le(154);var i=at(),a=tr();Le(63);var o=139===be()&&Ie(Er)||Wr();Ze();var s=P.createTypeAliasDeclaration(n,i,a,o);return s.illegalDecorators=r,K(et(s,e),t)}(t,r,n,i);case 92:return function(e,t,r,n){Le(92);var i,a=at();Le(18)?(i=ee(40960,(function(){return wt(6,Ji)})),Le(19)):i=Ot();var o=P.createEnumDeclaration(n,a,i);return o.illegalDecorators=r,K(et(o,e),t)}(t,r,n,i);case 159:case 142:case 143:return function(e,t,r,n){var i=0;if(159===be())return Ki(e,t,r,n);if(qe(143))i|=16;else if(Le(142),10===be())return Ki(e,t,r,n);return Ui(e,t,r,n,i)}(t,r,n,i);case 100:return function(e,t,r,n){Le(100);var i,a=c.getStartPos();Me()&&(i=at());var o,s=!1;158===be()||"type"!==(null==i?void 0:i.escapedText)||!Me()&&41!==be()&&18!==be()||(s=!0,i=Me()?at():void 0);if(i&&27!==be()&&158!==be())return function(e,t,r,n,i,a){Le(63);var o=147===be()&&we(Vi)?function(){var e=ve();Le(147),Le(20);var t=Qi();return Le(21),et(P.createExternalModuleReference(t),e)}():Lt(!1);Ze();var s=P.createImportEqualsDeclaration(n,a,i,o);s.illegalDecorators=r;var c=K(et(s,e),t);return c}(e,t,r,n,i,s);(i||41===be()||18===be())&&(o=function(e,t,r){var n;e&&!qe(27)||(n=41===be()?function(){var e=ve();Le(41),Le(128);var t=at();return et(P.createNamespaceImport(t),e)}():Xi(272));return et(P.createImportClause(r,e,n),t)}(i,a,s),Le(158));var u,l=Qi();130!==be()||c.hasPrecedingLineBreak()||(u=Gi());Ze();var _=P.createImportDeclaration(n,o,l,u);return _.illegalDecorators=r,K(et(_,e),t)}(t,r,n,i);case 93:switch(Se(),be()){case 88:case 63:return function(e,t,r,n){var i,a=de();$(!0),qe(63)?i=!0:Le(88);var o=Zr(!0);Ze(),$(a);var s=P.createExportAssignment(n,i,o);return s.illegalDecorators=r,K(et(s,e),t)}(t,r,n,i);case 128:return function(e,t,r,n){Le(128),Le(143);var i=at();Ze();var a=P.createNamespaceExportDeclaration(i);return a.illegalDecorators=r,a.modifiers=n,K(et(a,e),t)}(t,r,n,i);default:return function(e,t,r,n){var i,a,o,s=de();$(!0);var u=qe(154),l=ve();qe(41)?(qe(128)&&(i=function(e){return et(P.createNamespaceExport(ot()),e)}(l)),Le(158),a=Qi()):(i=Xi(276),(158===be()||10===be()&&!c.hasPrecedingLineBreak())&&(Le(158),a=Qi()));a&&130===be()&&!c.hasPrecedingLineBreak()&&(o=Gi());Ze(),$(s);var _=P.createExportDeclaration(n,u,i,a,o);return _.illegalDecorators=r,K(et(_,e),t)}(t,r,n,i)}default:if(n||i){var a=tt(279,!0,e.Diagnostics.Declaration_expected);return e.setTextRangePos(a,t),a.illegalDecorators=n,a.modifiers=i,a}return}}function oi(){return Se(),!c.hasPrecedingLineBreak()&&(Me()||10===be())}function si(e,t){if(18!==be()){if(4&e)return void cr();if(Xe())return void Ze()}return Un(e,t)}function ci(){var e=ve();if(27===be())return et(P.createOmittedExpression(),e);var t=We(25),r=_i(),n=Yr();return et(P.createBindingElement(t,void 0,r,n),e)}function ui(){var e,t=ve(),r=We(25),n=Oe(),i=ut();n&&58!==be()?(e=i,i=void 0):(Le(58),e=_i());var a=Yr();return et(P.createBindingElement(r,i,e,a),t)}function li(){return 18===be()||22===be()||80===be()||Oe()}function _i(e){return 22===be()?function(){var e=ve();Le(22);var t=wt(10,ci);return Le(23),et(P.createArrayBindingPattern(t),e)}():18===be()?function(){var e=ve();Le(18);var t=wt(9,ui);return Le(19),et(P.createObjectBindingPattern(t),e)}():it(e)}function di(){return pi(!0)}function pi(t){var r,n=ve(),i=he(),a=_i(e.Diagnostics.Private_identifiers_are_not_allowed_in_variable_declarations);t&&79===a.kind&&53===be()&&!c.hasPrecedingLineBreak()&&(r=Qe());var o=Hr(),s=on(be())?void 0:Yr();return K(et(P.createVariableDeclaration(a,r,o,s),n),i)}function fi(t){var r,n=ve(),i=0;switch(be()){case 113:break;case 119:i|=1;break;case 85:i|=2;break;default:e.Debug.fail()}if(Se(),162===be()&&we(gi))r=Ot();else{var a=ue();X(t),r=wt(8,t?pi:di),X(a)}return et(P.createVariableDeclarationList(r,i),n)}function gi(){return bt()&&21===Se()}function mi(e,t,r,n){var i=fi(!1);Ze();var a=P.createVariableStatement(n,i);return a.illegalDecorators=r,K(et(a,e),t)}function yi(t,r,n,i){var a=de(),o=e.modifiersToFlags(i);Le(98);var s=We(41),c=1024&o?Jn():it(),u=s?1:0,l=512&o?2:0,_=tr();1&o&&$(!0);var d=sr(u|l),p=ar(58,!1),f=si(u|l,e.Diagnostics.or_expected);$(a);var g=P.createFunctionDeclaration(i,s,c,_,d,p,f);return g.illegalDecorators=n,K(et(g,t),r)}function vi(t,r,n,i){return Ie((function(){if(135===be()?Le(135):10===be()&&20===we(Se)?Ie((function(){var e=Vt();return"constructor"===e.text?e:void 0})):void 0){var a=tr(),o=sr(0),s=ar(58,!1),c=si(0,e.Diagnostics.or_expected),u=P.createConstructorDeclaration(i,o,c);return u.illegalDecorators=n,u.typeParameters=a,u.type=s,K(et(u,t),r)}}))}function hi(t,r,n,i,a,o,s,c,u){var l=a?1:0,_=e.some(i,e.isAsyncModifier)?2:0,d=tr(),p=sr(l|_),f=ar(58,!1),g=si(l|_,u),m=P.createMethodDeclaration(Ai(n,i),a,o,s,d,p,f,g);return m.exclamationToken=c,K(et(m,t),r)}function bi(t,r,n,i,a,o){var s=o||c.hasPrecedingLineBreak()?void 0:We(53),u=Hr(),l=ee(45056,Yr);return function(t,r,n){if(59!==be()||c.hasPrecedingLineBreak())return 20===be()?(pe(e.Diagnostics.Cannot_start_a_function_call_in_a_type_annotation),void Se()):void(!r||Xe()?Ye()||(n?pe(e.Diagnostics._0_expected,e.tokenToString(26)):ze(t)):n?pe(e.Diagnostics._0_expected,e.tokenToString(26)):pe(e.Diagnostics.Expected_for_property_initializer));pe(e.Diagnostics.Decorators_must_precede_the_name_and_all_keywords_of_property_declarations)}(a,u,l),K(et(P.createPropertyDeclaration(Ai(n,i),a,o||s,u,l),t),r)}function xi(t,r,n,i){var a=We(41),o=ut(),s=We(57);return a||20===be()||29===be()?hi(t,r,n,i,a,o,s,void 0,e.Diagnostics.or_expected):bi(t,r,n,i,o,s)}function Di(t,r,n,i,a,o){var s=ut(),c=tr(),u=sr(0),l=ar(58,!1),_=si(o),d=174===a?P.createGetAccessorDeclaration(Ai(n,i),s,u,l,_):P.createSetAccessorDeclaration(Ai(n,i),s,u,_);return d.typeParameters=c,e.isSetAccessorDeclaration(d)&&(d.type=l),K(et(d,t),r)}function Si(){var t;if(59===be())return!0;for(;e.isModifierKind(be());){if(t=be(),e.isClassMemberModifier(t))return!0;Se()}if(41===be())return!0;if(st()&&(t=be(),Se()),22===be())return!0;if(void 0!==t){if(!e.isKeyword(t)||151===t||137===t)return!0;switch(be()){case 20:case 29:case 53:case 58:case 63:case 57:return!0;default:return Xe()}}return!1}function Ti(e,t,r,n){Ge(124);var i=function(){var e=ce(),t=de();Y(!1),$(!0);var r=zn(!1);return Y(e),$(t),r}(),a=K(et(P.createClassStaticBlockDeclaration(i),e),t);return a.illegalDecorators=r,a.modifiers=n,a}function Ci(){if(de()&&133===be()){var t=ve(),r=at(e.Diagnostics.Expression_expected);return Se(),Fn(t,kn(t,r,!0))}return gn()}function Ei(){var e=ve();if(qe(59)){var t=te(16384,Ci);return et(P.createDecorator(t),e)}}function ki(){for(var t,r,n=ve();r=Ei();)t=e.append(t,r);return t&&$e(t,n)}function Ni(t,r,n){var i=ve(),a=be();if(85===be()&&t){if(!Ie(dt))return}else{if(r&&124===be()&&we(qi))return;if(n&&124===be())return;if(!e.isModifierKind(be())||!Ie(pt))return}return et(P.createToken(a),i)}function Ai(t,r){if(!t)return r;if(!r)return t;var n=P.createNodeArray(e.concatenate(t,r));return e.setTextRangePosEnd(n,t.pos,r.end),n}function Fi(t,r){for(var n,i,a=ve(),o=!1;i=Ni(t,r,o);)124===i.kind&&(o=!0),n=e.append(n,i);return n&&$e(n,a)}function Pi(){var e;if(132===be()){var t=ve();Se(),e=$e([et(P.createToken(132),t)],t)}return e}function wi(){var t=ve();if(26===be())return Se(),et(P.createSemicolonClassElement(),t);var r=he(),n=ki(),i=Fi(!0,!0);if(124===be()&&we(qi))return Ti(t,r,n,i);if(_t(137))return Di(t,r,n,i,174,0);if(_t(151))return Di(t,r,n,i,175,0);if(135===be()||10===be()){var a=vi(t,r,n,i);if(a)return a}if(lr())return dr(t,r,n,i);if(e.tokenIsIdentifierOrKeyword(be())||10===be()||8===be()||41===be()||22===be()){if(e.some(i,ni)){for(var o=0,s=i;o<s.length;o++){s[o].flags|=16777216}return te(16777216,(function(){return xi(t,r,n,i)}))}return xi(t,r,n,i)}if(n||i){var c=tt(79,!0,e.Diagnostics.Declaration_expected);return bi(t,r,n,i,c,void 0)}return e.Debug.fail("Should not have attempted to parse class member declaration.")}function Ii(e,t,r,n){return Oi(e,t,r,n,260)}function Oi(t,r,n,i,a){var o=de();Le(84);var s=!Oe()||117===be()&&we(xt)?void 0:nt(Oe()),c=tr();e.some(i,e.isExportModifier)&&$(!0);var u,l=Mi();return Le(18)?(u=kt(5,wi),Le(19)):u=Ot(),$(o),K(et(260===a?P.createClassDeclaration(Ai(n,i),s,c,l,u):P.createClassExpression(Ai(n,i),s,c,l,u),t),r)}function Mi(){if(ji())return kt(22,Li)}function Li(){var t=ve(),r=be();e.Debug.assert(94===r||117===r),Se();var n=wt(7,Ri);return et(P.createHeritageClause(r,n),t)}function Ri(){var e=ve(),t=gn();if(230===t.kind)return t;var r=Bi();return et(P.createExpressionWithTypeArguments(t,r),e)}function Bi(){return 29===be()?Mt(20,Wr,29,31):void 0}function ji(){return 94===be()||117===be()}function Ji(){var e=ve(),t=he(),r=ut(),n=re(Yr);return K(et(P.createEnumMember(r,n),e),t)}function zi(){var e,t=ve();return Le(18)?(e=kt(1,ri),Le(19)):e=Ot(),et(P.createModuleBlock(e),t)}function Ui(e,t,r,n,i){var a=16&i,o=at(),s=qe(24)?Ui(ve(),!1,void 0,void 0,4|a):zi(),c=P.createModuleDeclaration(n,o,s,i);return c.illegalDecorators=r,K(et(c,e),t)}function Ki(e,t,r,n){var i,a,o=0;159===be()?(i=at(),o|=1024):(i=Vt()).text=rt(i.text),18===be()?a=zi():Ze();var s=P.createModuleDeclaration(n,i,a,o);return s.illegalDecorators=r,K(et(s,e),t)}function Vi(){return 20===Se()}function qi(){return 18===Se()}function Wi(){return 43===Se()}function Hi(){var t=ve(),r=e.tokenIsIdentifierOrKeyword(be())?ot():Wt(10);Le(58);var n=Zr(!0);return et(P.createAssertEntry(r,n),t)}function Gi(t){var r=ve();t||Le(130);var n=c.getTokenPos();if(Le(18)){var i=c.hasPrecedingLineBreak(),a=wt(24,Hi,!0);if(!Le(19)){var o=e.lastOrUndefined(h);o&&o.code===e.Diagnostics._0_expected.code&&e.addRelatedInfo(o,e.createDetachedDiagnostic(_,n,1,e.Diagnostics.The_parser_expected_to_find_a_1_to_match_the_0_token_here,"{","}"))}return et(P.createAssertClause(a,i),r)}a=$e([],ve(),void 0,!1);return et(P.createAssertClause(a,!1),r)}function Qi(){if(10===be()){var e=Vt();return e.text=rt(e.text),e}return Xr()}function Xi(e){var t=ve();return et(272===e?P.createNamedImports(Mt(23,Zi,18,19)):P.createNamedExports(Mt(23,Yi,18,19)),t)}function Yi(){var e=he();return K($i(278),e)}function Zi(){return $i(273)}function $i(t){var r,n=ve(),i=e.isKeyword(be())&&!Me(),a=c.getTokenPos(),o=c.getTextPos(),s=!1,u=!0,l=ot();if("type"===l.escapedText)if(128===be()){var _=ot();if(128===be()){var d=ot();e.tokenIsIdentifierOrKeyword(be())?(s=!0,r=_,l=p(),u=!1):(r=l,l=d,u=!1)}else e.tokenIsIdentifierOrKeyword(be())?(r=l,u=!1,l=p()):(s=!0,l=_)}else e.tokenIsIdentifierOrKeyword(be())&&(s=!0,l=p());return u&&128===be()&&(r=l,Le(128),l=p()),273===t&&i&&ge(a,o,e.Diagnostics.Identifier_expected),et(273===t?P.createImportSpecifier(s,r,l):P.createExportSpecifier(s,r,l),n);function p(){return i=e.isKeyword(be())&&!Me(),a=c.getTokenPos(),o=c.getTextPos(),ot()}}!function(e){e[e.SourceElements=0]="SourceElements",e[e.BlockStatements=1]="BlockStatements",e[e.SwitchClauses=2]="SwitchClauses",e[e.SwitchClauseStatements=3]="SwitchClauseStatements",e[e.TypeMembers=4]="TypeMembers",e[e.ClassMembers=5]="ClassMembers",e[e.EnumMembers=6]="EnumMembers",e[e.HeritageClauseElement=7]="HeritageClauseElement",e[e.VariableDeclarations=8]="VariableDeclarations",e[e.ObjectBindingElements=9]="ObjectBindingElements",e[e.ArrayBindingElements=10]="ArrayBindingElements",e[e.ArgumentExpressions=11]="ArgumentExpressions",e[e.ObjectLiteralMembers=12]="ObjectLiteralMembers",e[e.JsxAttributes=13]="JsxAttributes",e[e.JsxChildren=14]="JsxChildren",e[e.ArrayLiteralMembers=15]="ArrayLiteralMembers",e[e.Parameters=16]="Parameters",e[e.JSDocParameters=17]="JSDocParameters",e[e.RestProperties=18]="RestProperties",e[e.TypeParameters=19]="TypeParameters",e[e.TypeArguments=20]="TypeArguments",e[e.TupleElementTypes=21]="TupleElementTypes",e[e.HeritageClauses=22]="HeritageClauses",e[e.ImportOrExportSpecifiers=23]="ImportOrExportSpecifiers",e[e.AssertEntries=24]="AssertEntries",e[e.Count=25]="Count"}(Re||(Re={})),function(e){e[e.False=0]="False",e[e.True=1]="True",e[e.Unknown=2]="Unknown"}(Be||(Be={})),function(t){function r(e){var t=ve(),r=(e?qe:Le)(18),n=te(8388608,$t);e&&!r||Ke(19);var i=P.createJSDocTypeExpression(n);return W(i),et(i,t)}function n(){for(var e=ve(),t=qe(18),r=ve(),n=Lt(!1);80===be();)Ne(),Te(),n=et(P.createJSDocMemberName(n,at()),r);t&&Ke(19);var i=P.createJSDocNameReference(n);return W(i),et(i,e)}var i,a;function o(t,i){void 0===t&&(t=0);var a=f,o=void 0===i?a.length:t+i;if(i=o-t,e.Debug.assert(t>=0),e.Debug.assert(t<=o),e.Debug.assert(o<=a.length),p(a,t)){var s,u,l,d,g,m=[],y=[];return c.scanRange(t+3,i-5,(function(){var r,n=1,i=t-(a.lastIndexOf("\n",t)+1)+4;function _(e){r||(r=i),m.push(e),i+=e.length}for(Te();H(5););H(4)&&(n=0,i=0);e:for(;;){switch(be()){case 59:0===n||1===n?(h(m),g||(g=ve()),w(S(i)),n=0,r=void 0):_(c.getTokenText());break;case 4:m.push(c.getTokenText()),n=0,i=0;break;case 41:var p=c.getTokenText();1===n||2===n?(n=2,_(p)):(n=1,i+=p.length);break;case 5:var f=c.getTokenText();2===n?m.push(f):void 0!==r&&i+f.length>r&&m.push(f.slice(r-i)),i+=f.length;break;case 1:break e;case 18:n=2;var b=c.getStartPos(),x=N(c.getTextPos()-1);if(x){d||v(m),y.push(et(P.createJSDocText(m.join("")),null!=d?d:t,b)),y.push(x),m=[],d=c.getTextPos();break}default:n=2,_(c.getTokenText())}Te()}h(m),y.length&&m.length&&y.push(et(P.createJSDocText(m.join("")),null!=d?d:t,g)),y.length&&s&&e.Debug.assertIsDefined(g,"having parsed tags implies that the end of the comment span should be set");var D=s&&$e(s,u,l);return et(P.createJSDocComment(y.length?$e(y,t,g):m.length?m.join(""):void 0,D),t,o)}))}function v(e){for(;e.length&&("\n"===e[0]||"\r"===e[0]);)e.shift()}function h(e){for(;e.length&&""===e[e.length-1].trim();)e.pop()}function b(){for(;;){if(Te(),1===be())return!0;if(5!==be()&&4!==be())return!1}}function x(){if(5!==be()&&4!==be()||!we(b))for(;5===be()||4===be();)Te()}function D(){if((5===be()||4===be())&&we(b))return"";for(var e=c.hasPrecedingLineBreak(),t=!1,r="";e&&41===be()||5===be()||4===be();)r+=c.getTokenText(),4===be()?(e=!0,t=!0,r=""):41===be()&&(e=!1),Te();return t?r:""}function S(t){e.Debug.assert(59===be());var i=c.getTokenPos();Te();var a,o=G(void 0),u=D();switch(o.escapedText){case"author":a=function(t,r,n,i){var a=ve(),o=function(){var e=[],t=!1,r=c.getToken();for(;1!==r&&4!==r;){if(29===r)t=!0;else{if(59===r&&!t)break;if(31===r&&t){e.push(c.getTokenText()),c.setTextPos(c.getTokenPos()+1);break}}e.push(c.getTokenText()),r=Te()}return P.createJSDocText(e.join(""))}(),s=c.getStartPos(),u=T(t,s,n,i);u||(s=c.getStartPos());var l="string"!=typeof u?$e(e.concatenate([et(o,a,s)],u),a):o.text+u;return et(P.createJSDocAuthorTag(r,l),t)}(i,o,t,u);break;case"implements":a=function(e,t,r,n){var i=B();return et(P.createJSDocImplementsTag(t,i,T(e,ve(),r,n)),e)}(i,o,t,u);break;case"augments":case"extends":a=function(e,t,r,n){var i=B();return et(P.createJSDocAugmentsTag(t,i,T(e,ve(),r,n)),e)}(i,o,t,u);break;case"class":case"constructor":a=j(i,P.createJSDocClassTag,o,t,u);break;case"public":a=j(i,P.createJSDocPublicTag,o,t,u);break;case"private":a=j(i,P.createJSDocPrivateTag,o,t,u);break;case"protected":a=j(i,P.createJSDocProtectedTag,o,t,u);break;case"readonly":a=j(i,P.createJSDocReadonlyTag,o,t,u);break;case"override":a=j(i,P.createJSDocOverrideTag,o,t,u);break;case"deprecated":V=!0,a=j(i,P.createJSDocDeprecatedTag,o,t,u);break;case"this":a=function(e,t,n,i){var a=r(!0);return x(),et(P.createJSDocThisTag(t,a,T(e,ve(),n,i)),e)}(i,o,t,u);break;case"enum":a=function(e,t,n,i){var a=r(!0);return x(),et(P.createJSDocEnumTag(t,a,T(e,ve(),n,i)),e)}(i,o,t,u);break;case"arg":case"argument":case"param":return L(i,o,2,t);case"return":case"returns":a=function(t,r,n,i){e.some(s,e.isJSDocReturnTag)&&ge(r.pos,c.getTokenPos(),e.Diagnostics._0_tag_already_specified,r.escapedText);var a=I();return et(P.createJSDocReturnTag(r,a,T(t,ve(),n,i)),t)}(i,o,t,u);break;case"template":a=function(e,t,n,i){var a=18===be()?r():void 0,o=function(){var e=ve(),t=[];do{x();var r=W();void 0!==r&&t.push(r),D()}while(H(27));return $e(t,e)}();return et(P.createJSDocTemplateTag(t,a,o,T(e,ve(),n,i)),e)}(i,o,t,u);break;case"type":a=R(i,o,t,u);break;case"typedef":a=function(t,r,n,i){var a,o=I();D();var s=J();x();var c,u=C(n);if(!o||M(o.type)){for(var l=void 0,d=void 0,p=void 0,f=!1;l=Ie((function(){return U(n)}));)if(f=!0,346===l.kind){if(d){var g=pe(e.Diagnostics.A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags);g&&e.addRelatedInfo(g,e.createDetachedDiagnostic(_,0,0,e.Diagnostics.The_tag_was_first_specified_here));break}d=l}else p=e.append(p,l);if(f){var m=o&&185===o.type.kind,y=P.createJSDocTypeLiteral(p,m);c=(o=d&&d.typeExpression&&!M(d.typeExpression.type)?d.typeExpression:et(y,t)).end}}c=c||void 0!==u?ve():(null!==(a=null!=s?s:o)&&void 0!==a?a:r).end,u||(u=T(t,c,n,i));var v=P.createJSDocTypedefTag(r,o,s,u);return et(v,t,c)}(i,o,t,u);break;case"callback":a=function(t,r,n,i){var a=J();x();var o=C(n),s=function(t){var r,n,i=ve();for(;r=Ie((function(){return K(4,t)}));)n=e.append(n,r);return $e(n||[],i)}(n),c=Ie((function(){if(H(59)){var e=S(n);if(e&&344===e.kind)return e}})),u=et(P.createJSDocSignature(void 0,s,c),t);o||(o=T(t,ve(),n,i));var l=void 0!==o?ve():u.end;return et(P.createJSDocCallbackTag(r,u,a,o),t,l)}(i,o,t,u);break;case"see":a=function(t,r,i,a){var o=22===be()||we((function(){return 59===Te()&&e.tokenIsIdentifierOrKeyword(Te())&&F(c.getTokenValue())}))?void 0:n(),s=void 0!==i&&void 0!==a?T(t,ve(),i,a):void 0;return et(P.createJSDocSeeTag(r,o,s),t)}(i,o,t,u);break;default:a=function(e,t,r,n){return et(P.createJSDocUnknownTag(t,T(e,ve(),r,n)),e)}(i,o,t,u)}return a}function T(e,t,r,n){return n||(r+=t-e),C(r,n.slice(r))}function C(e,t){var r,n,i=ve(),a=[],o=[],s=0,u=!0;function l(t){n||(n=e),a.push(t),e+=t.length}void 0!==t&&(""!==t&&l(t),s=1);var _=be();e:for(;;){switch(_){case 4:s=0,a.push(c.getTokenText()),e=0;break;case 59:if(3===s||2===s&&(!u||we(k))){a.push(c.getTokenText());break}c.setTextPos(c.getTextPos()-1);case 1:break e;case 5:if(2===s||3===s)l(c.getTokenText());else{var d=c.getTokenText();void 0!==n&&e+d.length>n&&a.push(d.slice(n-e)),e+=d.length}break;case 18:s=2;var p=c.getStartPos(),f=N(c.getTextPos()-1);f?(o.push(et(P.createJSDocText(a.join("")),null!=r?r:i,p)),o.push(f),a=[],r=c.getTextPos()):l(c.getTokenText());break;case 61:s=3===s?2:3,l(c.getTokenText());break;case 41:if(0===s){s=1,e+=1;break}default:3!==s&&(s=2),l(c.getTokenText())}u=5===be(),_=Te()}return v(a),h(a),o.length?(a.length&&o.push(et(P.createJSDocText(a.join("")),null!=r?r:i)),$e(o,i,c.getTextPos())):a.length?a.join(""):void 0}function k(){var e=Te();return 5===e||4===e}function N(t){var r=Ie(A);if(r){Te(),x();var n=ve(),i=e.tokenIsIdentifierOrKeyword(be())?Lt(!0):void 0;if(i)for(;80===be();)Ne(),Te(),i=et(P.createJSDocMemberName(i,at()),n);for(var a=[];19!==be()&&4!==be()&&1!==be();)a.push(c.getTokenText()),Te();return et(("link"===r?P.createJSDocLink:"linkcode"===r?P.createJSDocLinkCode:P.createJSDocLinkPlain)(i,a.join("")),t,c.getTextPos())}}function A(){if(D(),18===be()&&59===Te()&&e.tokenIsIdentifierOrKeyword(Te())){var t=c.getTokenValue();if(F(t))return t}}function F(e){return"link"===e||"linkcode"===e||"linkplain"===e}function w(e){e&&(s?s.push(e):(s=[e],u=e.pos),l=e.end)}function I(){return D(),18===be()?r():void 0}function O(){var t=H(22);t&&x();var r,n=H(61),i=function(){var e=G();qe(22)&&Le(23);for(;qe(24);){var t=G();qe(22)&&Le(23),e=Rt(e,t)}return e}();return n&&(He(r=61)||tt(r,!1,e.Diagnostics._0_expected,e.tokenToString(r))),t&&(x(),We(63)&&Xr(),Le(23)),{name:i,isBracketed:t}}function M(t){switch(t.kind){case 149:return!0;case 185:return M(t.elementType);default:return e.isTypeReferenceNode(t)&&e.isIdentifier(t.typeName)&&"Object"===t.typeName.escapedText&&!t.typeArguments}}function L(t,r,n,i){var a=I(),o=!a;D();var s=O(),c=s.name,u=s.isBracketed,l=D();o&&!we(A)&&(a=I());var _=T(t,ve(),i,l),d=4!==n&&function(t,r,n,i){if(t&&M(t.type)){for(var a=ve(),o=void 0,s=void 0;o=Ie((function(){return K(n,i,r)}));)343!==o.kind&&350!==o.kind||(s=e.append(s,o));if(s){var c=et(P.createJSDocTypeLiteral(s,185===t.type.kind),a);return et(P.createJSDocTypeExpression(c),a)}}}(a,c,n,i);return d&&(a=d,o=!0),et(1===n?P.createJSDocPropertyTag(r,c,u,a,o,_):P.createJSDocParameterTag(r,c,u,a,o,_),t)}function R(t,n,i,a){e.some(s,e.isJSDocTypeTag)&&ge(n.pos,c.getTokenPos(),e.Diagnostics._0_tag_already_specified,n.escapedText);var o=r(!0),u=void 0!==i&&void 0!==a?T(t,ve(),i,a):void 0;return et(P.createJSDocTypeTag(n,o,u),t)}function B(){var e=qe(18),t=ve(),r=function(){var e=ve(),t=G();for(;qe(24);){var r=G();t=et(P.createPropertyAccessExpression(t,r),e)}return t}(),n=Bi(),i=et(P.createExpressionWithTypeArguments(r,n),t);return e&&Le(19),i}function j(e,t,r,n,i){return et(t(r,T(e,ve(),n,i)),e)}function J(t){var r=c.getTokenPos();if(e.tokenIsIdentifierOrKeyword(be())){var n=G();if(qe(24)){var i=J(!0);return et(P.createModuleDeclaration(void 0,n,i,t?4:void 0),r)}return t&&(n.isInJSDocNamespace=!0),n}}function z(t,r){for(;!e.isIdentifier(t)||!e.isIdentifier(r);){if(e.isIdentifier(t)||e.isIdentifier(r)||t.right.escapedText!==r.right.escapedText)return!1;t=t.left,r=r.left}return t.escapedText===r.escapedText}function U(e){return K(1,e)}function K(t,r,n){for(var i=!0,a=!1;;)switch(Te()){case 59:if(i){var o=q(t,r);return!(o&&(343===o.kind||350===o.kind)&&4!==t&&n&&(e.isIdentifier(o.name)||!z(n,o.name.left)))&&o}a=!1;break;case 4:i=!0,a=!1;break;case 41:a&&(i=!1),a=!0;break;case 79:i=!1;break;case 1:return!1}}function q(t,r){e.Debug.assert(59===be());var n=c.getStartPos();Te();var i,a=G();switch(x(),a.escapedText){case"type":return 1===t&&R(n,a);case"prop":case"property":i=1;break;case"arg":case"argument":case"param":i=6;break;default:return!1}return!!(t&i)&&L(n,a,t,r)}function W(){var t=ve(),r=H(22);r&&x();var n,i=G(e.Diagnostics.Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces);if(r&&(x(),Le(63),n=te(8388608,$t),Le(23)),!e.nodeIsMissing(i))return et(P.createTypeParameterDeclaration(void 0,i,void 0,n),t)}function H(e){return be()===e&&(Te(),!0)}function G(t){if(!e.tokenIsIdentifierOrKeyword(be()))return tt(79,!t,t||e.Diagnostics.Identifier_expected);E++;var r=c.getTokenPos(),n=c.getTextPos(),i=be(),a=rt(c.getTokenValue()),o=et(P.createIdentifier(a,void 0,i),r,n);return Te(),o}}t.parseJSDocTypeExpressionForTests=function(t,n,i){M("file.js",t,99,void 0,1),c.setText(t,n,i),D=c.scan();var a=r(),o=H("file.js",99,1,!1,[],P.createToken(1),0,e.noop),s=e.attachFileToDiagnostics(h,o);return b&&(o.jsDocDiagnostics=e.attachFileToDiagnostics(b,o)),L(),a?{jsDocTypeExpression:a,diagnostics:s}:void 0},t.parseJSDocTypeExpression=r,t.parseJSDocNameReference=n,t.parseIsolatedJSDocComment=function(t,r,n){M("",t,99,void 0,1);var i=te(8388608,(function(){return o(r,n)})),a={languageVariant:0,text:t},s=e.attachFileToDiagnostics(h,a);return L(),i?{jsDoc:i,diagnostics:s}:void 0},t.parseJSDocComment=function(t,r,n){var i=D,a=h.length,s=I,c=te(8388608,(function(){return o(r,n)}));return e.setParent(c,t),262144&A&&(b||(b=[]),b.push.apply(b,h)),D=i,h.length=a,I=s,c},function(e){e[e.BeginningOfLine=0]="BeginningOfLine",e[e.SawAsterisk=1]="SawAsterisk",e[e.SavingComments=2]="SavingComments",e[e.SavingBackticks=3]="SavingBackticks"}(i||(i={})),function(e){e[e.Property=1]="Property",e[e.Parameter=2]="Parameter",e[e.CallbackParameter=4]="CallbackParameter"}(a||(a={}))}(je=t.JSDocParser||(t.JSDocParser={}))}(y||(y={})),function(t){function r(t,r,i,o,s,c){return void(r?l(t):u(t));function u(t){var r="";if(c&&n(t)&&(r=o.substring(t.pos,t.end)),t._children&&(t._children=void 0),e.setTextRangePosEnd(t,t.pos+i,t.end+i),c&&n(t)&&e.Debug.assert(r===s.substring(t.pos,t.end)),L(t,u,l),e.hasJSDocNodes(t))for(var _=0,d=t.jsDoc;_<d.length;_++){u(d[_])}a(t,c)}function l(t){t._children=void 0,e.setTextRangePosEnd(t,t.pos+i,t.end+i);for(var r=0,n=t;r<n.length;r++){u(n[r])}}}function n(e){switch(e.kind){case 10:case 8:case 79:return!0}return!1}function i(t,r,n,i,a){e.Debug.assert(t.end>=r,"Adjusting an element that was entirely before the change range"),e.Debug.assert(t.pos<=n,"Adjusting an element that was entirely after the change range"),e.Debug.assert(t.pos<=t.end);var o=Math.min(t.pos,i),s=t.end>=n?t.end+a:Math.min(t.end,i);e.Debug.assert(o<=s),t.parent&&(e.Debug.assertGreaterThanOrEqual(o,t.parent.pos),e.Debug.assertLessThanOrEqual(s,t.parent.end)),e.setTextRangePosEnd(t,o,s)}function a(t,r){if(r){var n=t.pos,i=function(t){e.Debug.assert(t.pos>=n),n=t.end};if(e.hasJSDocNodes(t))for(var a=0,o=t.jsDoc;a<o.length;a++){i(o[a])}L(t,i),e.Debug.assert(n<=t.end)}}function o(t,r){var n,i=t;if(L(t,(function t(a){if(e.nodeIsMissing(a))return;if(!(a.pos<=r))return e.Debug.assert(a.pos>r),!0;if(a.pos>=i.pos&&(i=a),r<a.end)return L(a,t),!0;e.Debug.assert(a.end<=r),n=a})),n){var a=function(t){for(;;){var r=e.getLastChild(t);if(!r)return t;t=r}}(n);a.pos>i.pos&&(i=a)}return i}function s(t,r,n,i){var a=t.text;if(n&&(e.Debug.assert(a.length-n.span.length+n.newLength===r.length),i||e.Debug.shouldAssert(3))){var o=a.substr(0,n.span.start),s=r.substr(0,n.span.start);e.Debug.assert(o===s);var c=a.substring(e.textSpanEnd(n.span),a.length),u=r.substring(e.textSpanEnd(e.textChangeRangeNewSpan(n)),r.length);e.Debug.assert(c===u)}}function c(t){var r=t.statements,n=0;e.Debug.assert(n<r.length);var i=r[n],a=-1;return{currentNode:function(o){return o!==a&&(i&&i.end===o&&n<r.length-1&&(n++,i=r[n]),i&&i.pos===o||function(e){return r=void 0,n=-1,i=void 0,void L(t,a,o);function a(t){return e>=t.pos&&e<t.end&&(L(t,a,o),!0)}function o(t){if(e>=t.pos&&e<t.end)for(var s=0;s<t.length;s++){var c=t[s];if(c){if(c.pos===e)return r=t,n=s,i=c,!0;if(c.pos<e&&e<c.end)return L(c,a,o),!0}}return!1}}(o)),a=o,e.Debug.assert(!i||i.pos===o),i}}}var u;t.updateSourceFile=function(t,n,u,l){if(s(t,n,u,l=l||e.Debug.shouldAssert(2)),e.textChangeRangeIsUnchanged(u))return t;if(0===t.statements.length)return y.parseSourceFile(t.fileName,n,t.languageVersion,void 0,!0,t.scriptKind,t.setExternalModuleIndicator);var _=t;e.Debug.assert(!_.hasBeenIncrementallyParsed),_.hasBeenIncrementallyParsed=!0,y.fixupParentReferences(_);var d=t.text,p=c(t),f=function(t,r){for(var n=1,i=r.span.start,a=0;i>0&&a<=n;a++){var s=o(t,i);e.Debug.assert(s.pos<=i);var c=s.pos;i=Math.max(0,c-1)}var u=e.createTextSpanFromBounds(i,e.textSpanEnd(r.span)),l=r.newLength+(r.span.start-i);return e.createTextChangeRange(u,l)}(t,u);s(t,n,f,l),e.Debug.assert(f.span.start<=u.span.start),e.Debug.assert(e.textSpanEnd(f.span)===e.textSpanEnd(u.span)),e.Debug.assert(e.textSpanEnd(e.textChangeRangeNewSpan(f))===e.textSpanEnd(e.textChangeRangeNewSpan(u)));var g=e.textChangeRangeNewSpan(f).length-f.span.length;!function(t,n,o,s,c,u,l,_){return void d(t);function d(t){if(e.Debug.assert(t.pos<=t.end),t.pos>o)r(t,!1,c,u,l,_);else{var f=t.end;if(f>=n){if(t.intersectsChange=!0,t._children=void 0,i(t,n,o,s,c),L(t,d,p),e.hasJSDocNodes(t))for(var g=0,m=t.jsDoc;g<m.length;g++){d(m[g])}a(t,_)}else e.Debug.assert(f<n)}}function p(t){if(e.Debug.assert(t.pos<=t.end),t.pos>o)r(t,!0,c,u,l,_);else{var a=t.end;if(a>=n){t.intersectsChange=!0,t._children=void 0,i(t,n,o,s,c);for(var p=0,f=t;p<f.length;p++){d(f[p])}}else e.Debug.assert(a<n)}}}(_,f.span.start,e.textSpanEnd(f.span),e.textSpanEnd(e.textChangeRangeNewSpan(f)),g,d,n,l);var m=y.parseSourceFile(t.fileName,n,t.languageVersion,p,!0,t.scriptKind,t.setExternalModuleIndicator);return m.commentDirectives=function(t,r,n,i,a,o,s,c){if(!t)return r;for(var u,l=!1,_=0,d=t;_<d.length;_++){var p=d[_],f=p.range,g=p.type;if(f.end<n)u=e.append(u,p);else if(f.pos>i){y();var m={range:{pos:f.pos+a,end:f.end+a},type:g};u=e.append(u,m),c&&e.Debug.assert(o.substring(f.pos,f.end)===s.substring(m.range.pos,m.range.end))}}return y(),u;function y(){l||(l=!0,u?r&&u.push.apply(u,r):u=r)}}(t.commentDirectives,m.commentDirectives,f.span.start,e.textSpanEnd(f.span),g,d,n,l),m.impliedNodeFormat=t.impliedNodeFormat,m},t.createSyntaxCursor=c,function(e){e[e.Value=-1]="Value"}(u||(u={}))}(v||(v={})),e.isDeclarationFileName=J,e.processCommentPragmas=z,e.processPragmasIntoFields=U;var K=new e.Map;function V(e){if(K.has(e))return K.get(e);var t=new RegExp("(\\s".concat(e,"\\s*=\\s*)(?:(?:'([^']*)')|(?:\"([^\"]*)\"))"),"im");return K.set(e,t),t}var q=/^\/\/\/\s*<(\S+)\s.*?\/>/im,W=/^\/\/\/?\s*@(\S+)\s*(.*)\s*$/im;function H(t,r,n){var i=2===r.kind&&q.exec(n);if(i){var a=i[1].toLowerCase(),o=e.commentPragmas[a];if(!(o&&1&o.kind))return;if(o.args){for(var s={},c=0,u=o.args;c<u.length;c++){var l=u[c],_=V(l.name).exec(n);if(!_&&!l.optional)return;if(_){var d=_[2]||_[3];if(l.captureSpan){var p=r.pos+_.index+_[1].length+1;s[l.name]={value:d,pos:p,end:p+d.length}}else s[l.name]=d}}t.push({name:a,args:{arguments:s,range:r}})}else t.push({name:a,args:{arguments:{},range:r}})}else{var f=2===r.kind&&W.exec(n);if(f)return G(t,r,2,f);if(3===r.kind)for(var g=/@(\S+)(\s+.*)?$/gim,m=void 0;m=g.exec(n);)G(t,r,4,m)}}function G(t,r,n,i){if(i){var a=i[1].toLowerCase(),o=e.commentPragmas[a];if(o&&o.kind&n){var s=function(t,r){if(!r)return{};if(!t.args)return{};for(var n=e.trimString(r).split(/\s+/),i={},a=0;a<t.args.length;a++){var o=t.args[a];if(!n[a]&&!o.optional)return"fail";if(o.captureSpan)return e.Debug.fail("Capture spans not yet implemented for non-xml pragmas");i[o.name]=n[a]}return i}(o,i[2]);"fail"!==s&&t.push({name:a,args:{arguments:s,range:r}})}}}function Q(e,t){return e.kind===t.kind&&(79===e.kind?e.escapedText===t.escapedText:108===e.kind||e.name.escapedText===t.name.escapedText&&Q(e.expression,t.expression))}e.tagNamesAreEquivalent=Q}(_||(_={})),function(e){e.compileOnSaveCommandLineOption={name:"compileOnSave",type:"boolean",defaultValueDescription:!1};var t=new e.Map(e.getEntries({preserve:1,"react-native":3,react:2,"react-jsx":4,"react-jsxdev":5}));e.inverseJsxOptionMap=new e.Map(e.arrayFrom(e.mapIterator(t.entries(),(function(e){var t=e[0];return[""+e[1],t]}))));var r=[["es5","lib.es5.d.ts"],["es6","lib.es2015.d.ts"],["es2015","lib.es2015.d.ts"],["es7","lib.es2016.d.ts"],["es2016","lib.es2016.d.ts"],["es2017","lib.es2017.d.ts"],["es2018","lib.es2018.d.ts"],["es2019","lib.es2019.d.ts"],["es2020","lib.es2020.d.ts"],["es2021","lib.es2021.d.ts"],["es2022","lib.es2022.d.ts"],["esnext","lib.esnext.d.ts"],["dom","lib.dom.d.ts"],["dom.iterable","lib.dom.iterable.d.ts"],["webworker","lib.webworker.d.ts"],["webworker.importscripts","lib.webworker.importscripts.d.ts"],["webworker.iterable","lib.webworker.iterable.d.ts"],["scripthost","lib.scripthost.d.ts"],["es2015.core","lib.es2015.core.d.ts"],["es2015.collection","lib.es2015.collection.d.ts"],["es2015.generator","lib.es2015.generator.d.ts"],["es2015.iterable","lib.es2015.iterable.d.ts"],["es2015.promise","lib.es2015.promise.d.ts"],["es2015.proxy","lib.es2015.proxy.d.ts"],["es2015.reflect","lib.es2015.reflect.d.ts"],["es2015.symbol","lib.es2015.symbol.d.ts"],["es2015.symbol.wellknown","lib.es2015.symbol.wellknown.d.ts"],["es2016.array.include","lib.es2016.array.include.d.ts"],["es2017.object","lib.es2017.object.d.ts"],["es2017.sharedmemory","lib.es2017.sharedmemory.d.ts"],["es2017.string","lib.es2017.string.d.ts"],["es2017.intl","lib.es2017.intl.d.ts"],["es2017.typedarrays","lib.es2017.typedarrays.d.ts"],["es2018.asyncgenerator","lib.es2018.asyncgenerator.d.ts"],["es2018.asynciterable","lib.es2018.asynciterable.d.ts"],["es2018.intl","lib.es2018.intl.d.ts"],["es2018.promise","lib.es2018.promise.d.ts"],["es2018.regexp","lib.es2018.regexp.d.ts"],["es2019.array","lib.es2019.array.d.ts"],["es2019.object","lib.es2019.object.d.ts"],["es2019.string","lib.es2019.string.d.ts"],["es2019.symbol","lib.es2019.symbol.d.ts"],["es2019.intl","lib.es2019.intl.d.ts"],["es2020.bigint","lib.es2020.bigint.d.ts"],["es2020.date","lib.es2020.date.d.ts"],["es2020.promise","lib.es2020.promise.d.ts"],["es2020.sharedmemory","lib.es2020.sharedmemory.d.ts"],["es2020.string","lib.es2020.string.d.ts"],["es2020.symbol.wellknown","lib.es2020.symbol.wellknown.d.ts"],["es2020.intl","lib.es2020.intl.d.ts"],["es2020.number","lib.es2020.number.d.ts"],["es2021.promise","lib.es2021.promise.d.ts"],["es2021.string","lib.es2021.string.d.ts"],["es2021.weakref","lib.es2021.weakref.d.ts"],["es2021.intl","lib.es2021.intl.d.ts"],["es2022.array","lib.es2022.array.d.ts"],["es2022.error","lib.es2022.error.d.ts"],["es2022.intl","lib.es2022.intl.d.ts"],["es2022.object","lib.es2022.object.d.ts"],["es2022.sharedmemory","lib.es2022.sharedmemory.d.ts"],["es2022.string","lib.es2022.string.d.ts"],["esnext.array","lib.es2022.array.d.ts"],["esnext.symbol","lib.es2019.symbol.d.ts"],["esnext.asynciterable","lib.es2018.asynciterable.d.ts"],["esnext.intl","lib.esnext.intl.d.ts"],["esnext.bigint","lib.es2020.bigint.d.ts"],["esnext.string","lib.es2022.string.d.ts"],["esnext.promise","lib.es2021.promise.d.ts"],["esnext.weakref","lib.es2021.weakref.d.ts"]];e.libs=r.map((function(e){return e[0]})),e.libMap=new e.Map(r),e.optionsForWatch=[{name:"watchFile",type:new e.Map(e.getEntries({fixedpollinginterval:e.WatchFileKind.FixedPollingInterval,prioritypollinginterval:e.WatchFileKind.PriorityPollingInterval,dynamicprioritypolling:e.WatchFileKind.DynamicPriorityPolling,fixedchunksizepolling:e.WatchFileKind.FixedChunkSizePolling,usefsevents:e.WatchFileKind.UseFsEvents,usefseventsonparentdirectory:e.WatchFileKind.UseFsEventsOnParentDirectory})),category:e.Diagnostics.Watch_and_Build_Modes,description:e.Diagnostics.Specify_how_the_TypeScript_watch_mode_works,defaultValueDescription:e.WatchFileKind.UseFsEvents},{name:"watchDirectory",type:new e.Map(e.getEntries({usefsevents:e.WatchDirectoryKind.UseFsEvents,fixedpollinginterval:e.WatchDirectoryKind.FixedPollingInterval,dynamicprioritypolling:e.WatchDirectoryKind.DynamicPriorityPolling,fixedchunksizepolling:e.WatchDirectoryKind.FixedChunkSizePolling})),category:e.Diagnostics.Watch_and_Build_Modes,description:e.Diagnostics.Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality,defaultValueDescription:e.WatchDirectoryKind.UseFsEvents},{name:"fallbackPolling",type:new e.Map(e.getEntries({fixedinterval:e.PollingWatchKind.FixedInterval,priorityinterval:e.PollingWatchKind.PriorityInterval,dynamicpriority:e.PollingWatchKind.DynamicPriority,fixedchunksize:e.PollingWatchKind.FixedChunkSize})),category:e.Diagnostics.Watch_and_Build_Modes,description:e.Diagnostics.Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers,defaultValueDescription:e.PollingWatchKind.PriorityInterval},{name:"synchronousWatchDirectory",type:"boolean",category:e.Diagnostics.Watch_and_Build_Modes,description:e.Diagnostics.Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_support_recursive_watching_natively,defaultValueDescription:!1},{name:"excludeDirectories",type:"list",element:{name:"excludeDirectory",type:"string",isFilePath:!0,extraValidation:Te},category:e.Diagnostics.Watch_and_Build_Modes,description:e.Diagnostics.Remove_a_list_of_directories_from_the_watch_process},{name:"excludeFiles",type:"list",element:{name:"excludeFile",type:"string",isFilePath:!0,extraValidation:Te},category:e.Diagnostics.Watch_and_Build_Modes,description:e.Diagnostics.Remove_a_list_of_files_from_the_watch_mode_s_processing}],e.commonOptionsWithBuild=[{name:"help",shortName:"h",type:"boolean",showInSimplifiedHelpView:!0,isCommandLineOnly:!0,category:e.Diagnostics.Command_line_Options,description:e.Diagnostics.Print_this_message,defaultValueDescription:!1},{name:"help",shortName:"?",type:"boolean",isCommandLineOnly:!0,category:e.Diagnostics.Command_line_Options,defaultValueDescription:!1},{name:"watch",shortName:"w",type:"boolean",showInSimplifiedHelpView:!0,isCommandLineOnly:!0,category:e.Diagnostics.Command_line_Options,description:e.Diagnostics.Watch_input_files,defaultValueDescription:!1},{name:"preserveWatchOutput",type:"boolean",showInSimplifiedHelpView:!1,category:e.Diagnostics.Output_Formatting,description:e.Diagnostics.Disable_wiping_the_console_in_watch_mode,defaultValueDescription:!1},{name:"listFiles",type:"boolean",category:e.Diagnostics.Compiler_Diagnostics,description:e.Diagnostics.Print_all_of_the_files_read_during_the_compilation,defaultValueDescription:!1},{name:"explainFiles",type:"boolean",category:e.Diagnostics.Compiler_Diagnostics,description:e.Diagnostics.Print_files_read_during_the_compilation_including_why_it_was_included,defaultValueDescription:!1},{name:"listEmittedFiles",type:"boolean",category:e.Diagnostics.Compiler_Diagnostics,description:e.Diagnostics.Print_the_names_of_emitted_files_after_a_compilation,defaultValueDescription:!1},{name:"pretty",type:"boolean",showInSimplifiedHelpView:!0,category:e.Diagnostics.Output_Formatting,description:e.Diagnostics.Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read,defaultValueDescription:!0},{name:"traceResolution",type:"boolean",category:e.Diagnostics.Compiler_Diagnostics,description:e.Diagnostics.Log_paths_used_during_the_moduleResolution_process,defaultValueDescription:!1},{name:"diagnostics",type:"boolean",category:e.Diagnostics.Compiler_Diagnostics,description:e.Diagnostics.Output_compiler_performance_information_after_building,defaultValueDescription:!1},{name:"extendedDiagnostics",type:"boolean",category:e.Diagnostics.Compiler_Diagnostics,description:e.Diagnostics.Output_more_detailed_compiler_performance_information_after_building,defaultValueDescription:!1},{name:"generateCpuProfile",type:"string",isFilePath:!0,paramType:e.Diagnostics.FILE_OR_DIRECTORY,category:e.Diagnostics.Compiler_Diagnostics,description:e.Diagnostics.Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging,defaultValueDescription:"profile.cpuprofile"},{name:"generateTrace",type:"string",isFilePath:!0,isCommandLineOnly:!0,paramType:e.Diagnostics.DIRECTORY,category:e.Diagnostics.Compiler_Diagnostics,description:e.Diagnostics.Generates_an_event_trace_and_a_list_of_types},{name:"incremental",shortName:"i",type:"boolean",category:e.Diagnostics.Projects,description:e.Diagnostics.Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects,transpileOptionValue:void 0,defaultValueDescription:e.Diagnostics.false_unless_composite_is_set},{name:"assumeChangesOnlyAffectDirectDependencies",type:"boolean",affectsSemanticDiagnostics:!0,affectsEmit:!0,affectsMultiFileEmitBuildInfo:!0,category:e.Diagnostics.Watch_and_Build_Modes,description:e.Diagnostics.Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_will_only_affect_files_directly_depending_on_it,defaultValueDescription:!1},{name:"locale",type:"string",category:e.Diagnostics.Command_line_Options,isCommandLineOnly:!0,description:e.Diagnostics.Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit,defaultValueDescription:e.Diagnostics.Platform_specific}],e.targetOptionDeclaration={name:"target",shortName:"t",type:new e.Map(e.getEntries({es3:0,es5:1,es6:2,es2015:2,es2016:3,es2017:4,es2018:5,es2019:6,es2020:7,es2021:8,es2022:9,esnext:99})),affectsSourceFile:!0,affectsModuleResolution:!0,affectsEmit:!0,affectsMultiFileEmitBuildInfo:!0,paramType:e.Diagnostics.VERSION,showInSimplifiedHelpView:!0,category:e.Diagnostics.Language_and_Environment,description:e.Diagnostics.Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declarations,defaultValueDescription:0},e.moduleOptionDeclaration={name:"module",shortName:"m",type:new e.Map(e.getEntries({none:e.ModuleKind.None,commonjs:e.ModuleKind.CommonJS,amd:e.ModuleKind.AMD,system:e.ModuleKind.System,umd:e.ModuleKind.UMD,es6:e.ModuleKind.ES2015,es2015:e.ModuleKind.ES2015,es2020:e.ModuleKind.ES2020,es2022:e.ModuleKind.ES2022,esnext:e.ModuleKind.ESNext,node16:e.ModuleKind.Node16,nodenext:e.ModuleKind.NodeNext})),affectsModuleResolution:!0,affectsEmit:!0,affectsMultiFileEmitBuildInfo:!0,paramType:e.Diagnostics.KIND,showInSimplifiedHelpView:!0,category:e.Diagnostics.Modules,description:e.Diagnostics.Specify_what_module_code_is_generated,defaultValueDescription:void 0};var n,i=[{name:"all",type:"boolean",showInSimplifiedHelpView:!0,category:e.Diagnostics.Command_line_Options,description:e.Diagnostics.Show_all_compiler_options,defaultValueDescription:!1},{name:"version",shortName:"v",type:"boolean",showInSimplifiedHelpView:!0,category:e.Diagnostics.Command_line_Options,description:e.Diagnostics.Print_the_compiler_s_version,defaultValueDescription:!1},{name:"init",type:"boolean",showInSimplifiedHelpView:!0,category:e.Diagnostics.Command_line_Options,description:e.Diagnostics.Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file,defaultValueDescription:!1},{name:"project",shortName:"p",type:"string",isFilePath:!0,showInSimplifiedHelpView:!0,category:e.Diagnostics.Command_line_Options,paramType:e.Diagnostics.FILE_OR_DIRECTORY,description:e.Diagnostics.Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json},{name:"build",type:"boolean",shortName:"b",showInSimplifiedHelpView:!0,category:e.Diagnostics.Command_line_Options,description:e.Diagnostics.Build_one_or_more_projects_and_their_dependencies_if_out_of_date,defaultValueDescription:!1},{name:"showConfig",type:"boolean",showInSimplifiedHelpView:!0,category:e.Diagnostics.Command_line_Options,isCommandLineOnly:!0,description:e.Diagnostics.Print_the_final_configuration_instead_of_building,defaultValueDescription:!1},{name:"listFilesOnly",type:"boolean",category:e.Diagnostics.Command_line_Options,affectsSemanticDiagnostics:!0,affectsEmit:!0,affectsMultiFileEmitBuildInfo:!0,isCommandLineOnly:!0,description:e.Diagnostics.Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing,defaultValueDescription:!1},e.targetOptionDeclaration,e.moduleOptionDeclaration,{name:"lib",type:"list",element:{name:"lib",type:e.libMap,defaultValueDescription:void 0},affectsProgramStructure:!0,showInSimplifiedHelpView:!0,category:e.Diagnostics.Language_and_Environment,description:e.Diagnostics.Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment,transpileOptionValue:void 0},{name:"allowJs",type:"boolean",affectsModuleResolution:!0,showInSimplifiedHelpView:!0,category:e.Diagnostics.JavaScript_Support,description:e.Diagnostics.Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJS_option_to_get_errors_from_these_files,defaultValueDescription:!1},{name:"checkJs",type:"boolean",showInSimplifiedHelpView:!0,category:e.Diagnostics.JavaScript_Support,description:e.Diagnostics.Enable_error_reporting_in_type_checked_JavaScript_files,defaultValueDescription:!1},{name:"jsx",type:t,affectsSourceFile:!0,affectsEmit:!0,affectsMultiFileEmitBuildInfo:!0,affectsModuleResolution:!0,paramType:e.Diagnostics.KIND,showInSimplifiedHelpView:!0,category:e.Diagnostics.Language_and_Environment,description:e.Diagnostics.Specify_what_JSX_code_is_generated,defaultValueDescription:void 0},{name:"declaration",shortName:"d",type:"boolean",affectsEmit:!0,affectsMultiFileEmitBuildInfo:!0,showInSimplifiedHelpView:!0,category:e.Diagnostics.Emit,transpileOptionValue:void 0,description:e.Diagnostics.Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project,defaultValueDescription:e.Diagnostics.false_unless_composite_is_set},{name:"declarationMap",type:"boolean",affectsEmit:!0,affectsMultiFileEmitBuildInfo:!0,showInSimplifiedHelpView:!0,category:e.Diagnostics.Emit,transpileOptionValue:void 0,defaultValueDescription:!1,description:e.Diagnostics.Create_sourcemaps_for_d_ts_files},{name:"emitDeclarationOnly",type:"boolean",affectsEmit:!0,affectsMultiFileEmitBuildInfo:!0,showInSimplifiedHelpView:!0,category:e.Diagnostics.Emit,description:e.Diagnostics.Only_output_d_ts_files_and_not_JavaScript_files,transpileOptionValue:void 0,defaultValueDescription:!1},{name:"sourceMap",type:"boolean",affectsEmit:!0,affectsMultiFileEmitBuildInfo:!0,showInSimplifiedHelpView:!0,category:e.Diagnostics.Emit,defaultValueDescription:!1,description:e.Diagnostics.Create_source_map_files_for_emitted_JavaScript_files},{name:"outFile",type:"string",affectsEmit:!0,affectsMultiFileEmitBuildInfo:!0,affectsDeclarationPath:!0,affectsBundleEmitBuildInfo:!0,isFilePath:!0,paramType:e.Diagnostics.FILE,showInSimplifiedHelpView:!0,category:e.Diagnostics.Emit,description:e.Diagnostics.Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designates_a_file_that_bundles_all_d_ts_output,transpileOptionValue:void 0},{name:"outDir",type:"string",affectsEmit:!0,affectsMultiFileEmitBuildInfo:!0,affectsDeclarationPath:!0,isFilePath:!0,paramType:e.Diagnostics.DIRECTORY,showInSimplifiedHelpView:!0,category:e.Diagnostics.Emit,description:e.Diagnostics.Specify_an_output_folder_for_all_emitted_files},{name:"rootDir",type:"string",affectsEmit:!0,affectsMultiFileEmitBuildInfo:!0,affectsDeclarationPath:!0,isFilePath:!0,paramType:e.Diagnostics.LOCATION,category:e.Diagnostics.Modules,description:e.Diagnostics.Specify_the_root_folder_within_your_source_files,defaultValueDescription:e.Diagnostics.Computed_from_the_list_of_input_files},{name:"composite",type:"boolean",affectsEmit:!0,affectsMultiFileEmitBuildInfo:!0,affectsBundleEmitBuildInfo:!0,isTSConfigOnly:!0,category:e.Diagnostics.Projects,transpileOptionValue:void 0,defaultValueDescription:!1,description:e.Diagnostics.Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references},{name:"tsBuildInfoFile",type:"string",affectsEmit:!0,affectsMultiFileEmitBuildInfo:!0,affectsBundleEmitBuildInfo:!0,isFilePath:!0,paramType:e.Diagnostics.FILE,category:e.Diagnostics.Projects,transpileOptionValue:void 0,defaultValueDescription:".tsbuildinfo",description:e.Diagnostics.Specify_the_path_to_tsbuildinfo_incremental_compilation_file},{name:"removeComments",type:"boolean",affectsEmit:!0,affectsMultiFileEmitBuildInfo:!0,showInSimplifiedHelpView:!0,category:e.Diagnostics.Emit,defaultValueDescription:!1,description:e.Diagnostics.Disable_emitting_comments},{name:"noEmit",type:"boolean",showInSimplifiedHelpView:!0,category:e.Diagnostics.Emit,description:e.Diagnostics.Disable_emitting_files_from_a_compilation,transpileOptionValue:void 0,defaultValueDescription:!1},{name:"importHelpers",type:"boolean",affectsEmit:!0,affectsMultiFileEmitBuildInfo:!0,category:e.Diagnostics.Emit,description:e.Diagnostics.Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file,defaultValueDescription:!1},{name:"importsNotUsedAsValues",type:new e.Map(e.getEntries({remove:0,preserve:1,error:2})),affectsEmit:!0,affectsSemanticDiagnostics:!0,affectsMultiFileEmitBuildInfo:!0,category:e.Diagnostics.Emit,description:e.Diagnostics.Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types,defaultValueDescription:0},{name:"downlevelIteration",type:"boolean",affectsEmit:!0,affectsMultiFileEmitBuildInfo:!0,category:e.Diagnostics.Emit,description:e.Diagnostics.Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration,defaultValueDescription:!1},{name:"isolatedModules",type:"boolean",category:e.Diagnostics.Interop_Constraints,description:e.Diagnostics.Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports,transpileOptionValue:!0,defaultValueDescription:!1},{name:"strict",type:"boolean",affectsMultiFileEmitBuildInfo:!0,showInSimplifiedHelpView:!0,category:e.Diagnostics.Type_Checking,description:e.Diagnostics.Enable_all_strict_type_checking_options,defaultValueDescription:!1},{name:"noImplicitAny",type:"boolean",affectsSemanticDiagnostics:!0,affectsMultiFileEmitBuildInfo:!0,strictFlag:!0,category:e.Diagnostics.Type_Checking,description:e.Diagnostics.Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type,defaultValueDescription:e.Diagnostics.false_unless_strict_is_set},{name:"strictNullChecks",type:"boolean",affectsSemanticDiagnostics:!0,affectsMultiFileEmitBuildInfo:!0,strictFlag:!0,category:e.Diagnostics.Type_Checking,description:e.Diagnostics.When_type_checking_take_into_account_null_and_undefined,defaultValueDescription:e.Diagnostics.false_unless_strict_is_set},{name:"strictFunctionTypes",type:"boolean",affectsSemanticDiagnostics:!0,affectsMultiFileEmitBuildInfo:!0,strictFlag:!0,category:e.Diagnostics.Type_Checking,description:e.Diagnostics.When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible,defaultValueDescription:e.Diagnostics.false_unless_strict_is_set},{name:"strictBindCallApply",type:"boolean",affectsSemanticDiagnostics:!0,affectsMultiFileEmitBuildInfo:!0,strictFlag:!0,category:e.Diagnostics.Type_Checking,description:e.Diagnostics.Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function,defaultValueDescription:e.Diagnostics.false_unless_strict_is_set},{name:"strictPropertyInitialization",type:"boolean",affectsSemanticDiagnostics:!0,affectsMultiFileEmitBuildInfo:!0,strictFlag:!0,category:e.Diagnostics.Type_Checking,description:e.Diagnostics.Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor,defaultValueDescription:e.Diagnostics.false_unless_strict_is_set},{name:"noImplicitThis",type:"boolean",affectsSemanticDiagnostics:!0,affectsMultiFileEmitBuildInfo:!0,strictFlag:!0,category:e.Diagnostics.Type_Checking,description:e.Diagnostics.Enable_error_reporting_when_this_is_given_the_type_any,defaultValueDescription:e.Diagnostics.false_unless_strict_is_set},{name:"useUnknownInCatchVariables",type:"boolean",affectsSemanticDiagnostics:!0,affectsMultiFileEmitBuildInfo:!0,strictFlag:!0,category:e.Diagnostics.Type_Checking,description:e.Diagnostics.Default_catch_clause_variables_as_unknown_instead_of_any,defaultValueDescription:!1},{name:"alwaysStrict",type:"boolean",affectsSourceFile:!0,affectsEmit:!0,affectsMultiFileEmitBuildInfo:!0,strictFlag:!0,category:e.Diagnostics.Type_Checking,description:e.Diagnostics.Ensure_use_strict_is_always_emitted,defaultValueDescription:e.Diagnostics.false_unless_strict_is_set},{name:"noUnusedLocals",type:"boolean",affectsSemanticDiagnostics:!0,affectsMultiFileEmitBuildInfo:!0,category:e.Diagnostics.Type_Checking,description:e.Diagnostics.Enable_error_reporting_when_local_variables_aren_t_read,defaultValueDescription:!1},{name:"noUnusedParameters",type:"boolean",affectsSemanticDiagnostics:!0,affectsMultiFileEmitBuildInfo:!0,category:e.Diagnostics.Type_Checking,description:e.Diagnostics.Raise_an_error_when_a_function_parameter_isn_t_read,defaultValueDescription:!1},{name:"exactOptionalPropertyTypes",type:"boolean",affectsSemanticDiagnostics:!0,affectsMultiFileEmitBuildInfo:!0,category:e.Diagnostics.Type_Checking,description:e.Diagnostics.Interpret_optional_property_types_as_written_rather_than_adding_undefined,defaultValueDescription:!1},{name:"noImplicitReturns",type:"boolean",affectsSemanticDiagnostics:!0,affectsMultiFileEmitBuildInfo:!0,category:e.Diagnostics.Type_Checking,description:e.Diagnostics.Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function,defaultValueDescription:!1},{name:"noFallthroughCasesInSwitch",type:"boolean",affectsBindDiagnostics:!0,affectsSemanticDiagnostics:!0,affectsMultiFileEmitBuildInfo:!0,category:e.Diagnostics.Type_Checking,description:e.Diagnostics.Enable_error_reporting_for_fallthrough_cases_in_switch_statements,defaultValueDescription:!1},{name:"noUncheckedIndexedAccess",type:"boolean",affectsSemanticDiagnostics:!0,affectsMultiFileEmitBuildInfo:!0,category:e.Diagnostics.Type_Checking,description:e.Diagnostics.Add_undefined_to_a_type_when_accessed_using_an_index,defaultValueDescription:!1},{name:"noImplicitOverride",type:"boolean",affectsSemanticDiagnostics:!0,affectsMultiFileEmitBuildInfo:!0,category:e.Diagnostics.Type_Checking,description:e.Diagnostics.Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier,defaultValueDescription:!1},{name:"noPropertyAccessFromIndexSignature",type:"boolean",affectsSemanticDiagnostics:!0,affectsMultiFileEmitBuildInfo:!0,showInSimplifiedHelpView:!1,category:e.Diagnostics.Type_Checking,description:e.Diagnostics.Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type,defaultValueDescription:!1},{name:"moduleResolution",type:new e.Map(e.getEntries({node:e.ModuleResolutionKind.NodeJs,classic:e.ModuleResolutionKind.Classic,node16:e.ModuleResolutionKind.Node16,nodenext:e.ModuleResolutionKind.NodeNext})),affectsModuleResolution:!0,paramType:e.Diagnostics.STRATEGY,category:e.Diagnostics.Modules,description:e.Diagnostics.Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier,defaultValueDescription:e.Diagnostics.module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node},{name:"baseUrl",type:"string",affectsModuleResolution:!0,isFilePath:!0,category:e.Diagnostics.Modules,description:e.Diagnostics.Specify_the_base_directory_to_resolve_non_relative_module_names},{name:"paths",type:"object",affectsModuleResolution:!0,isTSConfigOnly:!0,category:e.Diagnostics.Modules,description:e.Diagnostics.Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations,transpileOptionValue:void 0},{name:"rootDirs",type:"list",isTSConfigOnly:!0,element:{name:"rootDirs",type:"string",isFilePath:!0},affectsModuleResolution:!0,category:e.Diagnostics.Modules,description:e.Diagnostics.Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules,transpileOptionValue:void 0,defaultValueDescription:e.Diagnostics.Computed_from_the_list_of_input_files},{name:"typeRoots",type:"list",element:{name:"typeRoots",type:"string",isFilePath:!0},affectsModuleResolution:!0,category:e.Diagnostics.Modules,description:e.Diagnostics.Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types},{name:"types",type:"list",element:{name:"types",type:"string"},affectsProgramStructure:!0,showInSimplifiedHelpView:!0,category:e.Diagnostics.Modules,description:e.Diagnostics.Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file,transpileOptionValue:void 0},{name:"allowSyntheticDefaultImports",type:"boolean",affectsSemanticDiagnostics:!0,affectsMultiFileEmitBuildInfo:!0,category:e.Diagnostics.Interop_Constraints,description:e.Diagnostics.Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export,defaultValueDescription:e.Diagnostics.module_system_or_esModuleInterop},{name:"esModuleInterop",type:"boolean",affectsSemanticDiagnostics:!0,affectsEmit:!0,affectsMultiFileEmitBuildInfo:!0,showInSimplifiedHelpView:!0,category:e.Diagnostics.Interop_Constraints,description:e.Diagnostics.Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheticDefaultImports_for_type_compatibility,defaultValueDescription:!1},{name:"preserveSymlinks",type:"boolean",category:e.Diagnostics.Interop_Constraints,description:e.Diagnostics.Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node,defaultValueDescription:!1},{name:"allowUmdGlobalAccess",type:"boolean",affectsSemanticDiagnostics:!0,affectsMultiFileEmitBuildInfo:!0,category:e.Diagnostics.Modules,description:e.Diagnostics.Allow_accessing_UMD_globals_from_modules,defaultValueDescription:!1},{name:"moduleSuffixes",type:"list",element:{name:"suffix",type:"string"},listPreserveFalsyValues:!0,affectsModuleResolution:!0,category:e.Diagnostics.Modules,description:e.Diagnostics.List_of_file_name_suffixes_to_search_when_resolving_a_module},{name:"sourceRoot",type:"string",affectsEmit:!0,affectsMultiFileEmitBuildInfo:!0,paramType:e.Diagnostics.LOCATION,category:e.Diagnostics.Emit,description:e.Diagnostics.Specify_the_root_path_for_debuggers_to_find_the_reference_source_code},{name:"mapRoot",type:"string",affectsEmit:!0,affectsMultiFileEmitBuildInfo:!0,paramType:e.Diagnostics.LOCATION,category:e.Diagnostics.Emit,description:e.Diagnostics.Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations},{name:"inlineSourceMap",type:"boolean",affectsEmit:!0,affectsMultiFileEmitBuildInfo:!0,category:e.Diagnostics.Emit,description:e.Diagnostics.Include_sourcemap_files_inside_the_emitted_JavaScript,defaultValueDescription:!1},{name:"inlineSources",type:"boolean",affectsEmit:!0,affectsMultiFileEmitBuildInfo:!0,category:e.Diagnostics.Emit,description:e.Diagnostics.Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript,defaultValueDescription:!1},{name:"experimentalDecorators",type:"boolean",affectsSemanticDiagnostics:!0,affectsMultiFileEmitBuildInfo:!0,category:e.Diagnostics.Language_and_Environment,description:e.Diagnostics.Enable_experimental_support_for_TC39_stage_2_draft_decorators,defaultValueDescription:!1},{name:"emitDecoratorMetadata",type:"boolean",affectsSemanticDiagnostics:!0,affectsEmit:!0,affectsMultiFileEmitBuildInfo:!0,category:e.Diagnostics.Language_and_Environment,description:e.Diagnostics.Emit_design_type_metadata_for_decorated_declarations_in_source_files,defaultValueDescription:!1},{name:"jsxFactory",type:"string",category:e.Diagnostics.Language_and_Environment,description:e.Diagnostics.Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h,defaultValueDescription:"`React.createElement`"},{name:"jsxFragmentFactory",type:"string",category:e.Diagnostics.Language_and_Environment,description:e.Diagnostics.Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragment_or_Fragment,defaultValueDescription:"React.Fragment"},{name:"jsxImportSource",type:"string",affectsSemanticDiagnostics:!0,affectsEmit:!0,affectsMultiFileEmitBuildInfo:!0,affectsModuleResolution:!0,category:e.Diagnostics.Language_and_Environment,description:e.Diagnostics.Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Asterisk,defaultValueDescription:"react"},{name:"resolveJsonModule",type:"boolean",affectsModuleResolution:!0,category:e.Diagnostics.Modules,description:e.Diagnostics.Enable_importing_json_files,defaultValueDescription:!1},{name:"out",type:"string",affectsEmit:!0,affectsMultiFileEmitBuildInfo:!0,affectsDeclarationPath:!0,affectsBundleEmitBuildInfo:!0,isFilePath:!1,category:e.Diagnostics.Backwards_Compatibility,paramType:e.Diagnostics.FILE,transpileOptionValue:void 0,description:e.Diagnostics.Deprecated_setting_Use_outFile_instead},{name:"reactNamespace",type:"string",affectsEmit:!0,affectsMultiFileEmitBuildInfo:!0,category:e.Diagnostics.Language_and_Environment,description:e.Diagnostics.Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit,defaultValueDescription:"`React`"},{name:"skipDefaultLibCheck",type:"boolean",affectsMultiFileEmitBuildInfo:!0,category:e.Diagnostics.Completeness,description:e.Diagnostics.Skip_type_checking_d_ts_files_that_are_included_with_TypeScript,defaultValueDescription:!1},{name:"charset",type:"string",category:e.Diagnostics.Backwards_Compatibility,description:e.Diagnostics.No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files,defaultValueDescription:"utf8"},{name:"emitBOM",type:"boolean",affectsEmit:!0,affectsMultiFileEmitBuildInfo:!0,category:e.Diagnostics.Emit,description:e.Diagnostics.Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files,defaultValueDescription:!1},{name:"newLine",type:new e.Map(e.getEntries({crlf:0,lf:1})),affectsEmit:!0,affectsMultiFileEmitBuildInfo:!0,paramType:e.Diagnostics.NEWLINE,category:e.Diagnostics.Emit,description:e.Diagnostics.Set_the_newline_character_for_emitting_files,defaultValueDescription:e.Diagnostics.Platform_specific},{name:"noErrorTruncation",type:"boolean",affectsSemanticDiagnostics:!0,affectsMultiFileEmitBuildInfo:!0,category:e.Diagnostics.Output_Formatting,description:e.Diagnostics.Disable_truncating_types_in_error_messages,defaultValueDescription:!1},{name:"noLib",type:"boolean",category:e.Diagnostics.Language_and_Environment,affectsProgramStructure:!0,description:e.Diagnostics.Disable_including_any_library_files_including_the_default_lib_d_ts,transpileOptionValue:!0,defaultValueDescription:!1},{name:"noResolve",type:"boolean",affectsModuleResolution:!0,category:e.Diagnostics.Modules,description:e.Diagnostics.Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add_to_a_project,transpileOptionValue:!0,defaultValueDescription:!1},{name:"stripInternal",type:"boolean",affectsEmit:!0,affectsMultiFileEmitBuildInfo:!0,category:e.Diagnostics.Emit,description:e.Diagnostics.Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments,defaultValueDescription:!1},{name:"disableSizeLimit",type:"boolean",affectsProgramStructure:!0,category:e.Diagnostics.Editor_Support,description:e.Diagnostics.Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server,defaultValueDescription:!1},{name:"disableSourceOfProjectReferenceRedirect",type:"boolean",isTSConfigOnly:!0,category:e.Diagnostics.Projects,description:e.Diagnostics.Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects,defaultValueDescription:!1},{name:"disableSolutionSearching",type:"boolean",isTSConfigOnly:!0,category:e.Diagnostics.Projects,description:e.Diagnostics.Opt_a_project_out_of_multi_project_reference_checking_when_editing,defaultValueDescription:!1},{name:"disableReferencedProjectLoad",type:"boolean",isTSConfigOnly:!0,category:e.Diagnostics.Projects,description:e.Diagnostics.Reduce_the_number_of_projects_loaded_automatically_by_TypeScript,defaultValueDescription:!1},{name:"noImplicitUseStrict",type:"boolean",affectsSemanticDiagnostics:!0,affectsMultiFileEmitBuildInfo:!0,category:e.Diagnostics.Backwards_Compatibility,description:e.Diagnostics.Disable_adding_use_strict_directives_in_emitted_JavaScript_files,defaultValueDescription:!1},{name:"noEmitHelpers",type:"boolean",affectsEmit:!0,affectsMultiFileEmitBuildInfo:!0,category:e.Diagnostics.Emit,description:e.Diagnostics.Disable_generating_custom_helper_functions_like_extends_in_compiled_output,defaultValueDescription:!1},{name:"noEmitOnError",type:"boolean",affectsEmit:!0,affectsMultiFileEmitBuildInfo:!0,category:e.Diagnostics.Emit,transpileOptionValue:void 0,description:e.Diagnostics.Disable_emitting_files_if_any_type_checking_errors_are_reported,defaultValueDescription:!1},{name:"preserveConstEnums",type:"boolean",affectsEmit:!0,affectsMultiFileEmitBuildInfo:!0,category:e.Diagnostics.Emit,description:e.Diagnostics.Disable_erasing_const_enum_declarations_in_generated_code,defaultValueDescription:!1},{name:"declarationDir",type:"string",affectsEmit:!0,affectsMultiFileEmitBuildInfo:!0,affectsDeclarationPath:!0,isFilePath:!0,paramType:e.Diagnostics.DIRECTORY,category:e.Diagnostics.Emit,transpileOptionValue:void 0,description:e.Diagnostics.Specify_the_output_directory_for_generated_declaration_files},{name:"skipLibCheck",type:"boolean",affectsMultiFileEmitBuildInfo:!0,category:e.Diagnostics.Completeness,description:e.Diagnostics.Skip_type_checking_all_d_ts_files,defaultValueDescription:!1},{name:"allowUnusedLabels",type:"boolean",affectsBindDiagnostics:!0,affectsSemanticDiagnostics:!0,affectsMultiFileEmitBuildInfo:!0,category:e.Diagnostics.Type_Checking,description:e.Diagnostics.Disable_error_reporting_for_unused_labels,defaultValueDescription:void 0},{name:"allowUnreachableCode",type:"boolean",affectsBindDiagnostics:!0,affectsSemanticDiagnostics:!0,affectsMultiFileEmitBuildInfo:!0,category:e.Diagnostics.Type_Checking,description:e.Diagnostics.Disable_error_reporting_for_unreachable_code,defaultValueDescription:void 0},{name:"suppressExcessPropertyErrors",type:"boolean",affectsSemanticDiagnostics:!0,affectsMultiFileEmitBuildInfo:!0,category:e.Diagnostics.Backwards_Compatibility,description:e.Diagnostics.Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals,defaultValueDescription:!1},{name:"suppressImplicitAnyIndexErrors",type:"boolean",affectsSemanticDiagnostics:!0,affectsMultiFileEmitBuildInfo:!0,category:e.Diagnostics.Backwards_Compatibility,description:e.Diagnostics.Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures,defaultValueDescription:!1},{name:"forceConsistentCasingInFileNames",type:"boolean",affectsModuleResolution:!0,category:e.Diagnostics.Interop_Constraints,description:e.Diagnostics.Ensure_that_casing_is_correct_in_imports,defaultValueDescription:!1},{name:"maxNodeModuleJsDepth",type:"number",affectsModuleResolution:!0,category:e.Diagnostics.JavaScript_Support,description:e.Diagnostics.Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicable_with_allowJs,defaultValueDescription:0},{name:"noStrictGenericChecks",type:"boolean",affectsSemanticDiagnostics:!0,affectsMultiFileEmitBuildInfo:!0,category:e.Diagnostics.Backwards_Compatibility,description:e.Diagnostics.Disable_strict_checking_of_generic_signatures_in_function_types,defaultValueDescription:!1},{name:"useDefineForClassFields",type:"boolean",affectsSemanticDiagnostics:!0,affectsEmit:!0,affectsMultiFileEmitBuildInfo:!0,category:e.Diagnostics.Language_and_Environment,description:e.Diagnostics.Emit_ECMAScript_standard_compliant_class_fields,defaultValueDescription:e.Diagnostics.true_for_ES2022_and_above_including_ESNext},{name:"preserveValueImports",type:"boolean",affectsEmit:!0,affectsMultiFileEmitBuildInfo:!0,category:e.Diagnostics.Emit,description:e.Diagnostics.Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed,defaultValueDescription:!1},{name:"keyofStringsOnly",type:"boolean",category:e.Diagnostics.Backwards_Compatibility,description:e.Diagnostics.Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option,defaultValueDescription:!1},{name:"plugins",type:"list",isTSConfigOnly:!0,element:{name:"plugin",type:"object"},description:e.Diagnostics.Specify_a_list_of_language_service_plugins_to_include,category:e.Diagnostics.Editor_Support},{name:"moduleDetection",type:new e.Map(e.getEntries({auto:e.ModuleDetectionKind.Auto,legacy:e.ModuleDetectionKind.Legacy,force:e.ModuleDetectionKind.Force})),affectsModuleResolution:!0,description:e.Diagnostics.Control_what_method_is_used_to_detect_module_format_JS_files,category:e.Diagnostics.Language_and_Environment,defaultValueDescription:e.Diagnostics.auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_with_module_Colon_node16_as_modules}];function s(t){var r=new e.Map,n=new e.Map;return e.forEach(t,(function(e){r.set(e.name.toLowerCase(),e),e.shortName&&n.set(e.shortName,e.name)})),{optionsNameMap:r,shortOptionNames:n}}function c(){return n||(n=s(e.optionDeclarations))}e.optionDeclarations=a(a([],e.commonOptionsWithBuild,!0),i,!0),e.semanticDiagnosticsOptionDeclarations=e.optionDeclarations.filter((function(e){return!!e.affectsSemanticDiagnostics})),e.affectsEmitOptionDeclarations=e.optionDeclarations.filter((function(e){return!!e.affectsEmit})),e.affectsDeclarationPathOptionDeclarations=e.optionDeclarations.filter((function(e){return!!e.affectsDeclarationPath})),e.moduleResolutionOptionDeclarations=e.optionDeclarations.filter((function(e){return!!e.affectsModuleResolution})),e.sourceFileAffectingCompilerOptions=e.optionDeclarations.filter((function(e){return!!e.affectsSourceFile||!!e.affectsModuleResolution||!!e.affectsBindDiagnostics})),e.optionsAffectingProgramStructure=e.optionDeclarations.filter((function(e){return!!e.affectsProgramStructure})),e.transpileOptionValueCompilerOptions=e.optionDeclarations.filter((function(t){return e.hasProperty(t,"transpileOptionValue")})),e.optionsForBuild=[{name:"verbose",shortName:"v",category:e.Diagnostics.Command_line_Options,description:e.Diagnostics.Enable_verbose_logging,type:"boolean",defaultValueDescription:!1},{name:"dry",shortName:"d",category:e.Diagnostics.Command_line_Options,description:e.Diagnostics.Show_what_would_be_built_or_deleted_if_specified_with_clean,type:"boolean",defaultValueDescription:!1},{name:"force",shortName:"f",category:e.Diagnostics.Command_line_Options,description:e.Diagnostics.Build_all_projects_including_those_that_appear_to_be_up_to_date,type:"boolean",defaultValueDescription:!1},{name:"clean",category:e.Diagnostics.Command_line_Options,description:e.Diagnostics.Delete_the_outputs_of_all_projects,type:"boolean",defaultValueDescription:!1}],e.buildOpts=a(a([],e.commonOptionsWithBuild,!0),e.optionsForBuild,!0),e.typeAcquisitionDeclarations=[{name:"enableAutoDiscovery",type:"boolean",defaultValueDescription:!1},{name:"enable",type:"boolean",defaultValueDescription:!1},{name:"include",type:"list",element:{name:"include",type:"string"}},{name:"exclude",type:"list",element:{name:"exclude",type:"string"}},{name:"disableFilenameBasedTypeAcquisition",type:"boolean",defaultValueDescription:!1}],e.createOptionNameMap=s,e.getOptionsNameMap=c;var u,l={diagnostic:e.Diagnostics.Compiler_option_0_may_only_be_used_with_build,getOptionsNameMap:D};function _(e){return e&&void 0!==e.enableAutoDiscovery&&void 0===e.enable?{enable:e.enableAutoDiscovery,include:e.include||[],exclude:e.exclude||[]}:e}function d(t){return p(t,e.createCompilerDiagnostic)}function p(t,r){var n=e.arrayFrom(t.type.keys()).map((function(e){return"'".concat(e,"'")})).join(", ");return r(e.Diagnostics.Argument_for_0_option_must_be_Colon_1,"--".concat(t.name),n)}function f(t,r,n){return ye(t,e.trimString(r||""),n)}function g(t,r,n){if(void 0===r&&(r=""),r=e.trimString(r),!e.startsWith(r,"-")){if(""===r)return[];var i=r.split(",");switch(t.element.type){case"number":return e.mapDefined(i,(function(e){return me(t.element,parseInt(e),n)}));case"string":return e.mapDefined(i,(function(e){return me(t.element,e||"",n)}));default:return e.mapDefined(i,(function(e){return f(t.element,e,n)}))}}}function m(e){return e.name}function y(t,r,n,i){var a;if(null===(a=r.alternateMode)||void 0===a?void 0:a.getOptionsNameMap().optionsNameMap.has(t.toLowerCase()))return n(r.alternateMode.diagnostic,t);var o=e.getSpellingSuggestion(t,r.optionDeclarations,m);return o?n(r.unknownDidYouMeanDiagnostic,i||t,o.name):n(r.unknownOptionDiagnostic,i||t)}function v(t,r,n){var i,a={},o=[],s=[];return c(r),{options:a,watchOptions:i,fileNames:o,errors:s};function c(r){for(var n=0;n<r.length;){var c=r[n];if(n++,64===c.charCodeAt(0))u(c.slice(1));else if(45===c.charCodeAt(0)){var l=c.slice(45===c.charCodeAt(1)?2:1),_=x(t.getOptionsNameMap,l,!0);if(_)n=h(r,n,t,_,a,s);else{var d=x(M.getOptionsNameMap,l,!0);d?n=h(r,n,M,d,i||(i={}),s):s.push(y(l,t,e.createCompilerDiagnostic,c))}}else o.push(c)}}function u(t){var r=E(t,n||function(t){return e.sys.readFile(t)});if(e.isString(r)){for(var i=[],a=0;;){for(;a<r.length&&r.charCodeAt(a)<=32;)a++;if(a>=r.length)break;var o=a;if(34===r.charCodeAt(o)){for(a++;a<r.length&&34!==r.charCodeAt(a);)a++;a<r.length?(i.push(r.substring(o+1,a)),a++):s.push(e.createCompilerDiagnostic(e.Diagnostics.Unterminated_quoted_string_in_response_file_0,t))}else{for(;r.charCodeAt(a)>32;)a++;i.push(r.substring(o,a))}}c(i)}else s.push(r)}}function h(t,r,n,i,a,o){if(i.isTSConfigOnly)"null"===(s=t[r])?(a[i.name]=void 0,r++):"boolean"===i.type?"false"===s?(a[i.name]=me(i,!1,o),r++):("true"===s&&r++,o.push(e.createCompilerDiagnostic(e.Diagnostics.Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line,i.name))):(o.push(e.createCompilerDiagnostic(e.Diagnostics.Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line,i.name)),s&&!e.startsWith(s,"-")&&r++);else if(t[r]||"boolean"===i.type||o.push(e.createCompilerDiagnostic(n.optionTypeMismatchDiagnostic,i.name,U(i))),"null"!==t[r])switch(i.type){case"number":a[i.name]=me(i,parseInt(t[r]),o),r++;break;case"boolean":var s=t[r];a[i.name]=me(i,"false"!==s,o),"false"!==s&&"true"!==s||r++;break;case"string":a[i.name]=me(i,t[r]||"",o),r++;break;case"list":var c=g(i,t[r],o);a[i.name]=c||[],c&&r++;break;default:a[i.name]=f(i,t[r],o),r++}else a[i.name]=void 0,r++;return r}function b(e,t){return x(c,e,t)}function x(e,t,r){void 0===r&&(r=!1),t=t.toLowerCase();var n=e(),i=n.optionsNameMap,a=n.shortOptionNames;if(r){var o=a.get(t);void 0!==o&&(t=o)}return i.get(t)}function D(){return u||(u=s(e.buildOpts))}e.defaultInitCompilerOptions={module:e.ModuleKind.CommonJS,target:3,strict:!0,esModuleInterop:!0,forceConsistentCasingInFileNames:!0,skipLibCheck:!0},e.convertEnableAutoDiscoveryToEnable=_,e.createCompilerDiagnosticForInvalidCustomType=d,e.parseCustomTypeOption=f,e.parseListTypeOption=g,e.parseCommandLineWorker=v,e.compilerOptionsDidYouMeanDiagnostics={alternateMode:l,getOptionsNameMap:c,optionDeclarations:e.optionDeclarations,unknownOptionDiagnostic:e.Diagnostics.Unknown_compiler_option_0,unknownDidYouMeanDiagnostic:e.Diagnostics.Unknown_compiler_option_0_Did_you_mean_1,optionTypeMismatchDiagnostic:e.Diagnostics.Compiler_option_0_expects_an_argument},e.parseCommandLine=function(t,r){return v(e.compilerOptionsDidYouMeanDiagnostics,t,r)},e.getOptionFromName=b;var S={alternateMode:{diagnostic:e.Diagnostics.Compiler_option_0_may_not_be_used_with_build,getOptionsNameMap:c},getOptionsNameMap:D,optionDeclarations:e.buildOpts,unknownOptionDiagnostic:e.Diagnostics.Unknown_build_option_0,unknownDidYouMeanDiagnostic:e.Diagnostics.Unknown_build_option_0_Did_you_mean_1,optionTypeMismatchDiagnostic:e.Diagnostics.Build_option_0_requires_a_value_of_type_1};function T(t,r){var n=e.parseJsonText(t,r);return{config:j(n,n.parseDiagnostics,!1,void 0),error:n.parseDiagnostics.length?n.parseDiagnostics[0]:void 0}}function C(t,r){var n=E(t,r);return e.isString(n)?e.parseJsonText(t,n):{fileName:t,parseDiagnostics:[n]}}function E(t,r){var n;try{n=r(t)}catch(i){return e.createCompilerDiagnostic(e.Diagnostics.Cannot_read_file_0_Colon_1,t,i.message)}return void 0===n?e.createCompilerDiagnostic(e.Diagnostics.Cannot_read_file_0,t):n}function k(t){return e.arrayToMap(t,m)}e.parseBuildCommand=function(t){var r=v(S,t),n=r.options,i=r.watchOptions,a=r.fileNames,o=r.errors,s=n;return 0===a.length&&a.push("."),s.clean&&s.force&&o.push(e.createCompilerDiagnostic(e.Diagnostics.Options_0_and_1_cannot_be_combined,"clean","force")),s.clean&&s.verbose&&o.push(e.createCompilerDiagnostic(e.Diagnostics.Options_0_and_1_cannot_be_combined,"clean","verbose")),s.clean&&s.watch&&o.push(e.createCompilerDiagnostic(e.Diagnostics.Options_0_and_1_cannot_be_combined,"clean","watch")),s.watch&&s.dry&&o.push(e.createCompilerDiagnostic(e.Diagnostics.Options_0_and_1_cannot_be_combined,"watch","dry")),{buildOptions:s,watchOptions:i,projects:a,errors:o}},e.getDiagnosticText=function(t){for(var r=[],n=1;n<arguments.length;n++)r[n-1]=arguments[n];var i=e.createCompilerDiagnostic.apply(void 0,arguments);return i.messageText},e.getParsedCommandLineOfConfigFile=function(t,r,n,i,a,o){var s=E(t,(function(e){return n.readFile(e)}));if(e.isString(s)){var c=e.parseJsonText(t,s),u=n.getCurrentDirectory();return c.path=e.toPath(t,u,e.createGetCanonicalFileName(n.useCaseSensitiveFileNames)),c.resolvedPath=c.path,c.originalFileName=c.fileName,Z(c,n,e.getNormalizedAbsolutePath(e.getDirectoryPath(t),u),r,e.getNormalizedAbsolutePath(t,u),void 0,o,i,a)}n.onUnRecoverableConfigFileDiagnostic(s)},e.readConfigFile=function(t,r){var n=E(t,r);return e.isString(n)?T(t,n):{config:{},error:n}},e.parseConfigFileTextToJson=T,e.readJsonConfigFile=C,e.tryReadFile=E;var N,A={optionDeclarations:e.typeAcquisitionDeclarations,unknownOptionDiagnostic:e.Diagnostics.Unknown_type_acquisition_option_0,unknownDidYouMeanDiagnostic:e.Diagnostics.Unknown_type_acquisition_option_0_Did_you_mean_1};function F(){return N||(N=s(e.optionsForWatch))}var P,w,I,O,M={getOptionsNameMap:F,optionDeclarations:e.optionsForWatch,unknownOptionDiagnostic:e.Diagnostics.Unknown_watch_option_0,unknownDidYouMeanDiagnostic:e.Diagnostics.Unknown_watch_option_0_Did_you_mean_1,optionTypeMismatchDiagnostic:e.Diagnostics.Watch_option_0_requires_a_value_of_type_1};function L(){return P||(P=k(e.optionDeclarations))}function R(){return w||(w=k(e.optionsForWatch))}function B(){return I||(I=k(e.typeAcquisitionDeclarations))}function j(t,r,n,i){var a,o=null===(a=t.statements[0])||void 0===a?void 0:a.expression,s=n?(void 0===O&&(O={name:void 0,type:"object",elementOptions:k([{name:"compilerOptions",type:"object",elementOptions:L(),extraKeyDiagnostics:e.compilerOptionsDidYouMeanDiagnostics},{name:"watchOptions",type:"object",elementOptions:R(),extraKeyDiagnostics:M},{name:"typingOptions",type:"object",elementOptions:B(),extraKeyDiagnostics:A},{name:"typeAcquisition",type:"object",elementOptions:B(),extraKeyDiagnostics:A},{name:"extends",type:"string",category:e.Diagnostics.File_Management},{name:"references",type:"list",element:{name:"references",type:"object"},category:e.Diagnostics.Projects},{name:"files",type:"list",element:{name:"files",type:"string"},category:e.Diagnostics.File_Management},{name:"include",type:"list",element:{name:"include",type:"string"},category:e.Diagnostics.File_Management,defaultValueDescription:e.Diagnostics.if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk},{name:"exclude",type:"list",element:{name:"exclude",type:"string"},category:e.Diagnostics.File_Management,defaultValueDescription:e.Diagnostics.node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified},e.compileOnSaveCommandLineOption])}),O):void 0;if(o&&207!==o.kind){if(r.push(e.createDiagnosticForNodeInSourceFile(t,o,e.Diagnostics.The_root_value_of_a_0_file_must_be_an_object,"jsconfig.json"===e.getBaseFileName(t.fileName)?"jsconfig.json":"tsconfig.json")),e.isArrayLiteralExpression(o)){var c=e.find(o.elements,e.isObjectLiteralExpression);if(c)return z(t,c,r,!0,s,i)}return{}}return z(t,o,r,!0,s,i)}function J(e,t){var r;return z(e,null===(r=e.statements[0])||void 0===r?void 0:r.expression,t,!0,void 0,void 0)}function z(t,r,n,i,o,s){return r?l(r,o):i?{}:void 0;function c(e){return o&&o.elementOptions===e}function u(r,a,o,u){for(var d=i?{}:void 0,p=function(r){if(299!==r.kind)return n.push(e.createDiagnosticForNodeInSourceFile(t,r,e.Diagnostics.Property_assignment_expected)),"continue";r.questionToken&&n.push(e.createDiagnosticForNodeInSourceFile(t,r.questionToken,e.Diagnostics.The_0_modifier_can_only_be_used_in_TypeScript_files,"?")),_(r.name)||n.push(e.createDiagnosticForNodeInSourceFile(t,r.name,e.Diagnostics.String_literal_with_double_quotes_expected));var p=e.isComputedNonLiteralName(r.name)?void 0:e.getTextOfPropertyName(r.name),f=p&&e.unescapeLeadingUnderscores(p),g=f&&a?a.get(f):void 0;f&&o&&!g&&(a?n.push(y(f,o,(function(n,i,a){return e.createDiagnosticForNodeInSourceFile(t,r.name,n,i,a)}))):n.push(e.createDiagnosticForNodeInSourceFile(t,r.name,o.unknownOptionDiagnostic,f)));var m=l(r.initializer,g);if(void 0!==f&&(i&&(d[f]=m),s&&(u||c(a)))){var v=K(g,m);u?v&&s.onSetValidOptionKeyValueInParent(u,g,m):c(a)&&(v?s.onSetValidOptionKeyValueInRoot(f,r.name,m,r.initializer):g||s.onSetUnknownOptionKeyValueInRoot(f,r.name,m,r.initializer))}},f=0,g=r.properties;f<g.length;f++){p(g[f])}return d}function l(r,o){var s;switch(r.kind){case 110:return y(o&&"boolean"!==o.type),m(!0);case 95:return y(o&&"boolean"!==o.type),m(!1);case 104:return y(o&&"extends"===o.name),m(null);case 10:_(r)||n.push(e.createDiagnosticForNodeInSourceFile(t,r,e.Diagnostics.String_literal_with_double_quotes_expected)),y(o&&e.isString(o.type)&&"string"!==o.type);var c=r.text;if(o&&!e.isString(o.type)){var d=o;d.type.has(c.toLowerCase())||(n.push(p(d,(function(n,i,a){return e.createDiagnosticForNodeInSourceFile(t,r,n,i,a)}))),s=!0)}return m(c);case 8:return y(o&&"number"!==o.type),m(Number(r.text));case 221:if(40!==r.operator||8!==r.operand.kind)break;return y(o&&"number"!==o.type),m(-Number(r.operand.text));case 207:y(o&&"object"!==o.type);var f=r;if(o){var g=o;return m(u(f,g.elementOptions,g.extraKeyDiagnostics,g.name))}return m(u(f,void 0,void 0,void 0));case 206:return y(o&&"list"!==o.type),m(function(t,r){if(i)return e.filter(t.map((function(e){return l(e,r)})),(function(e){return void 0!==e}));t.forEach((function(e){return l(e,r)}))}(r.elements,o&&o.element))}return void(o?y(!0):n.push(e.createDiagnosticForNodeInSourceFile(t,r,e.Diagnostics.Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_literal)));function m(i){var c;if(!s){var u=null===(c=null==o?void 0:o.extraValidation)||void 0===c?void 0:c.call(o,i);if(u)return void n.push(e.createDiagnosticForNodeInSourceFile.apply(void 0,a([t,r],u,!1)))}return i}function y(i){i&&(n.push(e.createDiagnosticForNodeInSourceFile(t,r,e.Diagnostics.Compiler_option_0_requires_a_value_of_type_1,o.name,U(o))),s=!0)}}function _(r){return e.isStringLiteral(r)&&e.isStringDoubleQuoted(r,t)}}function U(t){return"list"===t.type?"Array":e.isString(t.type)?t.type:"string"}function K(t,r){return!!t&&(!!ee(r)||("list"===t.type?e.isArray(r):typeof r===(e.isString(t.type)?t.type:"string")))}function V(t){return o({},e.arrayFrom(t.entries()).reduce((function(e,t){var r;return o(o({},e),((r={})[t[0]]=t[1],r))}),{}))}function q(t){if(e.length(t)){if(1!==e.length(t))return t;if(t[0]!==e.defaultIncludeSpec)return t}}function W(e){return"string"===e.type||"number"===e.type||"boolean"===e.type||"object"===e.type?void 0:"list"===e.type?W(e.element):e.type}function H(t,r){return e.forEachEntry(r,(function(e,r){if(e===t)return r}))}function G(e,t){return Q(e,c(),t)}function Q(t,r,n){var i=r.optionsNameMap,a=new e.Map,o=n&&e.createGetCanonicalFileName(n.useCaseSensitiveFileNames),s=function(r){if(e.hasProperty(t,r)){if(i.has(r)&&(i.get(r).category===e.Diagnostics.Command_line_Options||i.get(r).category===e.Diagnostics.Output_Formatting))return"continue";var s=t[r],c=i.get(r.toLowerCase());if(c){var u=W(c);u?"list"===c.type?a.set(r,s.map((function(e){return H(e,u)}))):a.set(r,H(s,u)):n&&c.isFilePath?a.set(r,e.getRelativePathFromFile(n.configFilePath,e.getNormalizedAbsolutePath(s,e.getDirectoryPath(n.configFilePath)),o)):a.set(r,s)}}};for(var c in t)s(c);return a}function X(t){return G(e.extend(t,e.defaultInitCompilerOptions))}function Y(e,t,r){if(e&&!ee(t))if("list"===e.type){var n=t;if(e.element.isFilePath&&n.length)return n.map(r)}else if(e.isFilePath)return r(t);return t}function Z(t,r,n,i,a,o,s,c,u){null===e.tracing||void 0===e.tracing||e.tracing.push("parse","parseJsonSourceFileConfigFileContent",{path:t.fileName});var l=re(void 0,t,r,n,i,u,a,o,s,c);return null===e.tracing||void 0===e.tracing||e.tracing.pop(),l}function $(e,t){t&&Object.defineProperty(e,"configFile",{enumerable:!1,writable:!1,value:t})}function ee(e){return null==e}function te(t,r){return e.getDirectoryPath(e.getNormalizedAbsolutePath(t,r))}function re(t,r,n,i,a,o,s,c,u,l){void 0===a&&(a={}),void 0===c&&(c=[]),void 0===u&&(u=[]),e.Debug.assert(void 0===t&&void 0!==r||void 0!==t&&void 0===r);var _=[],d=oe(t,r,n,i,s,c,_,l),p=d.raw,f=e.extend(a,d.options||{}),g=o&&d.watchOptions?e.extend(o,d.watchOptions):d.watchOptions||o;f.configFilePath=s&&e.normalizeSlashes(s);var m=function(){var t=b("references",(function(e){return"object"==typeof e}),"object"),n=v(h("files"));if(n){var i="no-prop"===t||e.isArray(t)&&0===t.length,a=e.hasProperty(p,"extends");if(0===n.length&&i&&!a)if(r){var o=s||"tsconfig.json",c=e.Diagnostics.The_files_list_in_config_file_0_is_empty,u=e.firstDefined(e.getTsConfigPropArray(r,"files"),(function(e){return e.initializer})),l=u?e.createDiagnosticForNodeInSourceFile(r,u,c,o):e.createCompilerDiagnostic(c,o);_.push(l)}else x(e.Diagnostics.The_files_list_in_config_file_0_is_empty,s||"tsconfig.json")}var d,f,g=v(h("include")),m=h("exclude"),y=!1,D=v(m);if("no-prop"===m&&p.compilerOptions){var S=p.compilerOptions.outDir,T=p.compilerOptions.declarationDir;(S||T)&&(D=[S,T].filter((function(e){return!!e})))}void 0===n&&void 0===g&&(g=[e.defaultIncludeSpec],y=!0);g&&(d=Se(g,_,!0,r,"include"));D&&(f=Se(D,_,!1,r,"exclude"));return{filesSpecs:n,includeSpecs:g,excludeSpecs:D,validatedFilesSpec:e.filter(n,e.isString),validatedIncludeSpecs:d,validatedExcludeSpecs:f,pathPatterns:void 0,isDefaultIncludeSpec:y}}();r&&(r.configFileSpecs=m),$(f,r);var y=e.normalizePath(s?te(s,i):i);return{options:f,watchOptions:g,fileNames:function(e){var t=be(m,e,f,n,u);ie(t,ae(p),c)&&_.push(ne(m,s));return t}(y),projectReferences:function(t){var r,n=b("references",(function(e){return"object"==typeof e}),"object");if(e.isArray(n))for(var i=0,a=n;i<a.length;i++){var o=a[i];"string"!=typeof o.path?x(e.Diagnostics.Compiler_option_0_requires_a_value_of_type_1,"reference.path","string"):(r||(r=[])).push({path:e.getNormalizedAbsolutePath(o.path,t),originalPath:o.path,prepend:o.prepend,circular:o.circular})}return r}(y),typeAcquisition:d.typeAcquisition||le(),raw:p,errors:_,wildcardDirectories:Ce(m,y,n.useCaseSensitiveFileNames),compileOnSave:!!p.compileOnSave};function v(t){return e.isArray(t)?t:void 0}function h(t){return b(t,e.isString,"string")}function b(t,n,i){if(e.hasProperty(p,t)&&!ee(p[t])){if(e.isArray(p[t])){var a=p[t];return r||e.every(a,n)||_.push(e.createCompilerDiagnostic(e.Diagnostics.Compiler_option_0_requires_a_value_of_type_1,t,i)),a}return x(e.Diagnostics.Compiler_option_0_requires_a_value_of_type_1,t,"Array"),"not-array"}return"no-prop"}function x(t,n,i){r||_.push(e.createCompilerDiagnostic(t,n,i))}}function ne(t,r){var n=t.includeSpecs,i=t.excludeSpecs;return e.createCompilerDiagnostic(e.Diagnostics.No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2,r||"tsconfig.json",JSON.stringify(n||[]),JSON.stringify(i||[]))}function ie(e,t,r){return 0===e.length&&t&&(!r||0===r.length)}function ae(t){return!e.hasProperty(t,"files")&&!e.hasProperty(t,"references")}function oe(t,r,n,o,s,c,u,l){var _;o=e.normalizeSlashes(o);var d=e.getNormalizedAbsolutePath(s||"",o);if(c.indexOf(d)>=0)return u.push(e.createCompilerDiagnostic(e.Diagnostics.Circularity_detected_while_resolving_configuration_Colon_0,a(a([],c,!0),[d],!1).join(" -> "))),{raw:t||J(r,u)};var p=t?function(t,r,n,i,a){e.hasProperty(t,"excludes")&&a.push(e.createCompilerDiagnostic(e.Diagnostics.Unknown_option_excludes_Did_you_mean_exclude));var o,s=ue(t.compilerOptions,n,a,i),c=_e(t.typeAcquisition||t.typingOptions,n,a,i),u=function(e,t,r){return de(R(),e,t,void 0,M,r)}(t.watchOptions,n,a);if(t.compileOnSave=function(t,r,n){if(!e.hasProperty(t,e.compileOnSaveCommandLineOption.name))return!1;var i=pe(e.compileOnSaveCommandLineOption,t.compileOnSave,r,n);return"boolean"==typeof i&&i}(t,n,a),t.extends)if(e.isString(t.extends)){var l=i?te(i,n):n;o=se(t.extends,r,l,a,e.createCompilerDiagnostic)}else a.push(e.createCompilerDiagnostic(e.Diagnostics.Compiler_option_0_requires_a_value_of_type_1,"extends","string"));return{raw:t,options:s,watchOptions:u,typeAcquisition:c,extendedConfigPath:o}}(t,n,o,s,u):function(t,r,n,a,o){var s,c,u,l,_,d=ce(a),p={onSetValidOptionKeyValueInParent:function(t,r,i){var o;switch(t){case"compilerOptions":o=d;break;case"watchOptions":o=u||(u={});break;case"typeAcquisition":o=s||(s=le(a));break;case"typingOptions":o=c||(c=le(a));break;default:e.Debug.fail("Unknown option")}o[r.name]=fe(r,n,i)},onSetValidOptionKeyValueInRoot:function(i,s,c,u){if("extends"!==i);else{var _=a?te(a,n):n;l=se(c,r,_,o,(function(r,n){return e.createDiagnosticForNodeInSourceFile(t,u,r,n)}))}},onSetUnknownOptionKeyValueInRoot:function(r,n,a,s){"excludes"===r&&o.push(e.createDiagnosticForNodeInSourceFile(t,n,e.Diagnostics.Unknown_option_excludes_Did_you_mean_exclude)),e.find(i,(function(e){return e.name===r}))&&(_=e.append(_,n))}},f=j(t,o,!0,p);s||(s=c?void 0!==c.enableAutoDiscovery?{enable:c.enableAutoDiscovery,include:c.include,exclude:c.exclude}:c:le(a));_&&f&&void 0===f.compilerOptions&&o.push(e.createDiagnosticForNodeInSourceFile(t,_[0],e.Diagnostics._0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file,e.getTextOfPropertyName(_[0])));return{raw:f,options:d,watchOptions:u,typeAcquisition:s,extendedConfigPath:l}}(r,n,o,s,u);if((null===(_=p.options)||void 0===_?void 0:_.paths)&&(p.options.pathsBasePath=o),p.extendedConfigPath){c=c.concat([d]);var f=function(t,r,n,i,a,o){var s,c,u,l,_=n.useCaseSensitiveFileNames?r:e.toFileNameLowerCase(r);o&&(c=o.get(_))?(u=c.extendedResult,l=c.extendedConfig):(u=C(r,(function(e){return n.readFile(e)})),u.parseDiagnostics.length||(l=oe(void 0,u,n,e.getDirectoryPath(r),e.getBaseFileName(r),i,a,o)),o&&o.set(_,{extendedResult:u,extendedConfig:l}));t&&(t.extendedSourceFiles=[u.fileName],u.extendedSourceFiles&&(s=t.extendedSourceFiles).push.apply(s,u.extendedSourceFiles));if(u.parseDiagnostics.length)return void a.push.apply(a,u.parseDiagnostics);return l}(r,p.extendedConfigPath,n,c,u,l);if(f&&f.options){var g,m=f.raw,y=p.raw,v=function(t){!y[t]&&m[t]&&(y[t]=e.map(m[t],(function(t){return e.isRootedDiskPath(t)?t:e.combinePaths(g||(g=e.convertToRelativePath(e.getDirectoryPath(p.extendedConfigPath),o,e.createGetCanonicalFileName(n.useCaseSensitiveFileNames))),t)})))};v("include"),v("exclude"),v("files"),void 0===y.compileOnSave&&(y.compileOnSave=m.compileOnSave),p.options=e.assign({},f.options,p.options),p.watchOptions=p.watchOptions&&f.watchOptions?e.assign({},f.watchOptions,p.watchOptions):p.watchOptions||f.watchOptions}}return p}function se(t,r,n,i,a){if(t=e.normalizeSlashes(t),e.isRootedDiskPath(t)||e.startsWith(t,"./")||e.startsWith(t,"../")){var o=e.getNormalizedAbsolutePath(t,n);return r.fileExists(o)||e.endsWith(o,".json")||(o="".concat(o,".json"),r.fileExists(o))?o:void i.push(a(e.Diagnostics.File_0_not_found,t))}var s=e.nodeModuleNameResolver(t,e.combinePaths(n,"tsconfig.json"),{moduleResolution:e.ModuleResolutionKind.NodeJs},r,void 0,void 0,!0);if(s.resolvedModule)return s.resolvedModule.resolvedFileName;i.push(a(e.Diagnostics.File_0_not_found,t))}function ce(t){return t&&"jsconfig.json"===e.getBaseFileName(t)?{allowJs:!0,maxNodeModuleJsDepth:2,allowSyntheticDefaultImports:!0,skipLibCheck:!0,noEmit:!0}:{}}function ue(t,r,n,i){var a=ce(i);return de(L(),t,r,a,e.compilerOptionsDidYouMeanDiagnostics,n),i&&(a.configFilePath=e.normalizeSlashes(i)),a}function le(t){return{enable:!!t&&"jsconfig.json"===e.getBaseFileName(t),include:[],exclude:[]}}function _e(e,t,r,n){var i=le(n),a=_(e);return de(B(),a,t,i,A,r),i}function de(t,r,n,i,a,o){if(r){for(var s in r){var c=t.get(s);c?(i||(i={}))[c.name]=pe(c,r[s],n,o):o.push(y(s,a,e.createCompilerDiagnostic))}return i}}function pe(t,r,n,i){if(K(t,r)){var a=t.type;if("list"===a&&e.isArray(r))return function(t,r,n,i){return e.filter(e.map(r,(function(e){return pe(t.element,e,n,i)})),(function(e){return!!t.listPreserveFalsyValues||!!e}))}(t,r,n,i);if(!e.isString(a))return ye(t,r,i);var o=me(t,r,i);return ee(o)?o:ge(t,n,o)}i.push(e.createCompilerDiagnostic(e.Diagnostics.Compiler_option_0_requires_a_value_of_type_1,t.name,U(t)))}function fe(t,r,n){if(!ee(n)){if("list"===t.type){var i=t;return i.element.isFilePath||!e.isString(i.element.type)?e.filter(e.map(n,(function(e){return fe(i.element,r,e)})),(function(e){return!!i.listPreserveFalsyValues||!!e})):n}return e.isString(t.type)?ge(t,r,n):t.type.get(e.isString(n)?n.toLowerCase():n)}}function ge(t,r,n){return t.isFilePath&&""===(n=e.getNormalizedAbsolutePath(n,r))&&(n="."),n}function me(t,r,n){var i;if(!ee(r)){var a=null===(i=t.extraValidation)||void 0===i?void 0:i.call(t,r);if(!a)return r;n.push(e.createCompilerDiagnostic.apply(void 0,a))}}function ye(e,t,r){if(!ee(t)){var n=t.toLowerCase(),i=e.type.get(n);if(void 0!==i)return me(e,i,r);r.push(d(e))}}e.convertToObject=J,e.convertToObjectWorker=z,e.convertToTSConfig=function(t,r,n){var i,a,s,c=e.createGetCanonicalFileName(n.useCaseSensitiveFileNames),u=e.map(e.filter(t.fileNames,(null===(a=null===(i=t.options.configFile)||void 0===i?void 0:i.configFileSpecs)||void 0===a?void 0:a.validatedIncludeSpecs)?function(t,r,n,i){if(!r)return e.returnTrue;var a=e.getFileMatcherPatterns(t,n,r,i.useCaseSensitiveFileNames,i.getCurrentDirectory()),o=a.excludePattern&&e.getRegexFromPattern(a.excludePattern,i.useCaseSensitiveFileNames),s=a.includeFilePattern&&e.getRegexFromPattern(a.includeFilePattern,i.useCaseSensitiveFileNames);if(s)return o?function(e){return!(s.test(e)&&!o.test(e))}:function(e){return!s.test(e)};if(o)return function(e){return o.test(e)};return e.returnTrue}(r,t.options.configFile.configFileSpecs.validatedIncludeSpecs,t.options.configFile.configFileSpecs.validatedExcludeSpecs,n):e.returnTrue),(function(t){return e.getRelativePathFromFile(e.getNormalizedAbsolutePath(r,n.getCurrentDirectory()),e.getNormalizedAbsolutePath(t,n.getCurrentDirectory()),c)})),l=G(t.options,{configFilePath:e.getNormalizedAbsolutePath(r,n.getCurrentDirectory()),useCaseSensitiveFileNames:n.useCaseSensitiveFileNames}),_=t.watchOptions&&Q(t.watchOptions,F());return o(o({compilerOptions:o(o({},V(l)),{showConfig:void 0,configFile:void 0,configFilePath:void 0,help:void 0,init:void 0,listFiles:void 0,listEmittedFiles:void 0,project:void 0,build:void 0,version:void 0}),watchOptions:_&&V(_),references:e.map(t.projectReferences,(function(e){return o(o({},e),{path:e.originalPath?e.originalPath:"",originalPath:void 0})})),files:e.length(u)?u:void 0},(null===(s=t.options.configFile)||void 0===s?void 0:s.configFileSpecs)?{include:q(t.options.configFile.configFileSpecs.validatedIncludeSpecs),exclude:t.options.configFile.configFileSpecs.validatedExcludeSpecs}:{}),{compileOnSave:!!t.compileOnSave||void 0})},e.getNameOfCompilerOptionValue=H,e.getCompilerOptionsDiffValue=function(t,r){var n,a,o,s=X(t);return n=[],o=2,a=Array(o+1).join(" "),i.forEach((function(t){if(s.has(t.name)){var r=s.get(t.name),i=Ne(t);r!==i?n.push("".concat(a).concat(t.name,": ").concat(r)):e.hasProperty(e.defaultInitCompilerOptions,t.name)&&n.push("".concat(a).concat(t.name,": ").concat(i))}})),n.join(r)+r},e.generateTSConfig=function(t,r,n){var i=X(t);return function(){var t=new e.Map;t.set(e.Diagnostics.Projects,[]),t.set(e.Diagnostics.Language_and_Environment,[]),t.set(e.Diagnostics.Modules,[]),t.set(e.Diagnostics.JavaScript_Support,[]),t.set(e.Diagnostics.Emit,[]),t.set(e.Diagnostics.Interop_Constraints,[]),t.set(e.Diagnostics.Type_Checking,[]),t.set(e.Diagnostics.Completeness,[]);for(var s=0,c=e.optionDeclarations;s<c.length;s++){var u=c[s];if(o(u)){var l=t.get(u.category);l||t.set(u.category,l=[]),l.push(u)}}var _=0,d=0,p=[];t.forEach((function(t,r){0!==p.length&&p.push({value:""}),p.push({value:"/* ".concat(e.getLocaleSpecificMessage(r)," */")});for(var n=0,a=t;n<a.length;n++){var o=a[n],s=void 0;s=i.has(o.name)?'"'.concat(o.name,'": ').concat(JSON.stringify(i.get(o.name))).concat((d+=1)===i.size?"":","):'// "'.concat(o.name,'": ').concat(JSON.stringify(Ne(o)),","),p.push({value:s,description:"/* ".concat(o.description&&e.getLocaleSpecificMessage(o.description)||o.name," */")}),_=Math.max(s.length,_)}}));var f=a(2),g=[];g.push("{"),g.push("".concat(f,'"compilerOptions": {')),g.push("".concat(f).concat(f,"/* ").concat(e.getLocaleSpecificMessage(e.Diagnostics.Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file)," */")),g.push("");for(var m=0,y=p;m<y.length;m++){var v=y[m],h=v.value,b=v.description,x=void 0===b?"":b;g.push(h&&"".concat(f).concat(f).concat(h).concat(x&&a(_-h.length+2)+x))}if(r.length){g.push("".concat(f,"},")),g.push("".concat(f,'"files": ['));for(var D=0;D<r.length;D++)g.push("".concat(f).concat(f).concat(JSON.stringify(r[D])).concat(D===r.length-1?"":","));g.push("".concat(f,"]"))}else g.push("".concat(f,"}"));return g.push("}"),g.join(n)+n}();function a(e){return Array(e+1).join(" ")}function o(t){var r=t.category,n=t.name,a=t.isCommandLineOnly,o=[e.Diagnostics.Command_line_Options,e.Diagnostics.Editor_Support,e.Diagnostics.Compiler_Diagnostics,e.Diagnostics.Backwards_Compatibility,e.Diagnostics.Watch_and_Build_Modes,e.Diagnostics.Output_Formatting];return!a&&void 0!==r&&(!o.includes(r)||i.has(n))}},e.convertToOptionsWithAbsolutePaths=function(t,r){var n={},i=c().optionsNameMap;for(var a in t)e.hasProperty(t,a)&&(n[a]=Y(i.get(a.toLowerCase()),t[a],r));return n.configFilePath&&(n.configFilePath=r(n.configFilePath)),n},e.parseJsonConfigFileContent=function(e,t,r,n,i,a,o,s,c){return re(e,void 0,t,r,n,c,i,a,o,s)},e.parseJsonSourceFileConfigFileContent=Z,e.setConfigFileInOptions=$,e.defaultIncludeSpec="**/*",e.canJsonReportNoInputFiles=ae,e.updateErrorForNoInputFiles=function(t,r,n,i,a){var o=i.length;return ie(t,a)?i.push(ne(n,r)):e.filterMutate(i,(function(t){return!function(t){return t.code===e.Diagnostics.No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2.code}(t)})),o!==i.length},e.convertCompilerOptionsFromJson=function(e,t,r){var n=[];return{options:ue(e,t,n,r),errors:n}},e.convertTypeAcquisitionFromJson=function(e,t,r){var n=[];return{options:_e(e,t,n,r),errors:n}},e.convertJsonOption=pe;var ve=/(^|\/)\*\*\/?$/,he=/^[^*?]*(?=\/[^/]*[*?])/;function be(t,r,n,i,a){void 0===a&&(a=e.emptyArray),r=e.normalizePath(r);var o,s=e.createGetCanonicalFileName(i.useCaseSensitiveFileNames),c=new e.Map,u=new e.Map,l=new e.Map,_=t.validatedFilesSpec,d=t.validatedIncludeSpecs,p=t.validatedExcludeSpecs,f=e.getSupportedExtensions(n,a),g=e.getSupportedExtensionsWithJsonIfResolveJsonModule(n,f);if(_)for(var m=0,y=_;m<y.length;m++){var v=y[m],h=e.getNormalizedAbsolutePath(v,r);c.set(s(h),h)}if(d&&d.length>0)for(var b=function(t){if(e.fileExtensionIs(t,".json")){if(!o){var n=d.filter((function(t){return e.endsWith(t,".json")})),a=e.map(e.getRegularExpressionsForWildcards(n,r,"files"),(function(e){return"^".concat(e,"$")}));o=a?a.map((function(t){return e.getRegexFromPattern(t,i.useCaseSensitiveFileNames)})):e.emptyArray}if(-1!==e.findIndex(o,(function(e){return e.test(t)}))){var _=s(t);c.has(_)||l.has(_)||l.set(_,t)}return"continue"}if(function(t,r,n,i,a){var o=e.forEach(i,(function(r){return e.fileExtensionIsOneOf(t,r)?r:void 0}));if(!o)return!1;for(var s=0,c=o;s<c.length;s++){var u=c[s];if(e.fileExtensionIs(t,u))return!1;var l=a(e.changeExtension(t,u));if(r.has(l)||n.has(l)){if(".d.ts"===u&&(e.fileExtensionIs(t,".js")||e.fileExtensionIs(t,".jsx")))continue;return!0}}return!1}(t,c,u,f,s))return"continue";!function(t,r,n,i){var a=e.forEach(n,(function(r){return e.fileExtensionIsOneOf(t,r)?r:void 0}));if(!a)return;for(var o=a.length-1;o>=0;o--){var s=a[o];if(e.fileExtensionIs(t,s))return;var c=i(e.changeExtension(t,s));r.delete(c)}}(t,u,f,s);var p=s(t);c.has(p)||u.has(p)||u.set(p,t)},x=0,D=i.readDirectory(r,e.flatten(g),p,d,void 0);x<D.length;x++){b(h=D[x])}var S=e.arrayFrom(c.values()),T=e.arrayFrom(u.values());return S.concat(T,e.arrayFrom(l.values()))}function xe(t){var r=e.startsWith(t,"**/")?0:t.indexOf("/**/");return-1!==r&&(e.endsWith(t,"/..")?t.length:t.lastIndexOf("/../"))>r}function De(t,r,n,i,a){var o=e.getRegularExpressionForWildcard(r,e.combinePaths(e.normalizePath(i),a),"exclude"),s=o&&e.getRegexFromPattern(o,n);return!!s&&(!!s.test(t)||!e.hasExtension(t)&&s.test(e.ensureTrailingDirectorySeparator(t)))}function Se(t,r,n,i,a){return t.filter((function(t){if(!e.isString(t))return!1;var i=Te(t,n);return void 0!==i&&r.push(o.apply(void 0,i)),void 0===i}));function o(t,r){var n=e.getTsConfigPropArrayElementValue(i,a,r);return n?e.createDiagnosticForNodeInSourceFile(i,n,t,r):e.createCompilerDiagnostic(t,r)}}function Te(t,r){return r&&ve.test(t)?[e.Diagnostics.File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0,t]:xe(t)?[e.Diagnostics.File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0,t]:void 0}function Ce(t,r,n){var i=t.validatedIncludeSpecs,a=t.validatedExcludeSpecs,o=e.getRegularExpressionForWildcard(a,r,"exclude"),s=o&&new RegExp(o,n?"":"i"),c={};if(void 0!==i){for(var u=[],l=0,_=i;l<_.length;l++){var d=_[l],p=e.normalizePath(e.combinePaths(r,d));if(!s||!s.test(p)){var f=Ee(p,n);if(f){var g=f.key,m=f.flags,y=c[g];(void 0===y||y<m)&&(c[g]=m,1===m&&u.push(g))}}}for(var g in c)if(e.hasProperty(c,g))for(var v=0,h=u;v<h.length;v++){var b=h[v];g!==b&&e.containsPath(b,g,r,!n)&&delete c[g]}}return c}function Ee(t,r){var n=he.exec(t);if(n){var i=t.indexOf("?"),a=t.indexOf("*"),o=t.lastIndexOf(e.directorySeparator);return{key:r?n[0]:e.toFileNameLowerCase(n[0]),flags:-1!==i&&i<o||-1!==a&&a<o?1:0}}if(e.isImplicitGlob(t.substring(t.lastIndexOf(e.directorySeparator)+1)))return{key:e.removeTrailingDirectorySeparator(r?t:e.toFileNameLowerCase(t)),flags:1}}function ke(t,r){switch(r.type){case"object":case"string":return"";case"number":return"number"==typeof t?t:"";case"boolean":return"boolean"==typeof t?t:"";case"list":var n=r.element;return e.isArray(t)?t.map((function(e){return ke(e,n)})):"";default:return e.forEachEntry(r.type,(function(e,r){if(e===t)return r}))}}function Ne(t){switch(t.type){case"number":return 1;case"boolean":return!0;case"string":var r=t.defaultValueDescription;return t.isFilePath?"./".concat(r&&"string"==typeof r?r:""):"";case"list":return[];case"object":return{};default:var n=t.type.keys().next();return n.done?e.Debug.fail("Expected 'option.type' to have entries."):n.value}}e.getFileNamesFromConfigSpecs=be,e.isExcludedFile=function(t,r,n,i,a){var o=r.validatedFilesSpec,s=r.validatedIncludeSpecs,c=r.validatedExcludeSpecs;if(!e.length(s)||!e.length(c))return!1;n=e.normalizePath(n);var u=e.createGetCanonicalFileName(i);if(o)for(var l=0,_=o;l<_.length;l++){var d=_[l];if(u(e.getNormalizedAbsolutePath(d,n))===t)return!1}return De(t,c,i,a,n)},e.matchesExclude=function(t,r,n,i){return De(t,e.filter(r,(function(e){return!xe(e)})),n,i)},e.convertCompilerOptionsForTelemetry=function(t){var r={};for(var n in t)if(e.hasProperty(t,n)){var i=b(n);void 0!==i&&(r[n]=ke(t[n],i))}return r}}(_||(_={})),function(e){function t(t){t.trace(e.formatMessage.apply(void 0,arguments))}function r(e,t){return!!e.traceResolution&&void 0!==t.trace}function n(t,r){var n;if(r&&t){var i=t.contents.packageJsonContent;"string"==typeof i.name&&"string"==typeof i.version&&(n={name:i.name,subModuleName:r.path.slice(t.packageDirectory.length+e.directorySeparator.length),version:i.version})}return r&&{path:r.path,extension:r.ext,packageId:n}}function i(e){return n(void 0,e)}function s(t){if(t)return e.Debug.assert(void 0===t.packageId),{path:t.path,ext:t.extension}}var c,u;function l(t){if(t)return e.Debug.assert(e.extensionIsTS(t.extension)),{fileName:t.path,packageId:t.packageId}}function _(e,t,r,n,i,a){var o,s;return a?((o=a.failedLookupLocations).push.apply(o,r),(s=a.affectingLocations).push.apply(s,n),a):{resolvedModule:e&&{resolvedFileName:e.path,originalPath:!0===e.originalPath?void 0:e.originalPath,extension:e.extension,isExternalLibraryImport:t,packageId:e.packageId},failedLookupLocations:r,affectingLocations:n,resolutionDiagnostics:i}}function d(r,n,i,a){if(e.hasProperty(r,n)){var o=r[n];if(typeof o===i&&null!==o)return o;a.traceEnabled&&t(a.host,e.Diagnostics.Expected_type_of_0_field_in_package_json_to_be_1_got_2,n,i,null===o?"null":typeof o)}else a.traceEnabled&&t(a.host,e.Diagnostics.package_json_does_not_have_a_0_field,n)}function p(r,n,i,a){var o=d(r,n,"string",a);if(void 0!==o){if(o){var s=e.normalizePath(e.combinePaths(i,o));return a.traceEnabled&&t(a.host,e.Diagnostics.package_json_has_0_field_1_that_references_2,n,o,s),s}a.traceEnabled&&t(a.host,e.Diagnostics.package_json_had_a_falsy_0_field,n)}}function f(e,t,r){return p(e,"typings",t,r)||p(e,"types",t,r)}function g(e,t,r){return p(e,"main",t,r)}function m(r,n){var i=function(r,n){var i=d(r,"typesVersions","object",n);if(void 0!==i)return n.traceEnabled&&t(n.host,e.Diagnostics.package_json_has_a_typesVersions_field_with_version_specific_path_mappings),i}(r,n);if(void 0!==i){if(n.traceEnabled)for(var a in i)e.hasProperty(i,a)&&!e.VersionRange.tryParse(a)&&t(n.host,e.Diagnostics.package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range,a);var o=y(i);if(o){var s=o.version,c=o.paths;if("object"==typeof c)return o;n.traceEnabled&&t(n.host,e.Diagnostics.Expected_type_of_0_field_in_package_json_to_be_1_got_2,"typesVersions['".concat(s,"']"),"object",typeof c)}else n.traceEnabled&&t(n.host,e.Diagnostics.package_json_does_not_have_a_typesVersions_entry_that_matches_version_0,e.versionMajorMinor)}}function y(t){for(var r in u||(u=new e.Version(e.version)),t)if(e.hasProperty(t,r)){var n=e.VersionRange.tryParse(r);if(void 0!==n&&n.test(u))return{version:r,paths:t[r]}}}function v(t,r){return t.typeRoots?t.typeRoots:(t.configFilePath?n=e.getDirectoryPath(t.configFilePath):r.getCurrentDirectory&&(n=r.getCurrentDirectory()),void 0!==n?function(t,r){if(!r.directoryExists)return[e.combinePaths(t,b)];var n;return e.forEachAncestorDirectory(e.normalizePath(t),(function(t){var i=e.combinePaths(t,b);r.directoryExists(i)&&(n||(n=[])).push(i)})),n}(n,r):void 0);var n}e.trace=t,e.isTraceEnabled=r,function(e){e[e.TypeScript=0]="TypeScript",e[e.JavaScript=1]="JavaScript",e[e.Json=2]="Json",e[e.TSConfig=3]="TSConfig",e[e.DtsOnly=4]="DtsOnly",e[e.TsOnly=5]="TsOnly"}(c||(c={})),e.getPackageJsonTypesVersionsPaths=y,e.getEffectiveTypeRoots=v;var h,b=e.combinePaths("node_modules","@types");function x(t,r,n){var i="function"==typeof n.useCaseSensitiveFileNames?n.useCaseSensitiveFileNames():n.useCaseSensitiveFileNames;return 0===e.comparePaths(t,r,!i)}function D(t){return e.getEmitModuleResolutionKind(t)===e.ModuleResolutionKind.Node16?h.Node16Default:e.getEmitModuleResolutionKind(t)===e.ModuleResolutionKind.NodeNext?h.NodeNextDefault:h.None}function S(t){var r=new e.Map,n=new e.Map;return{getOwnMap:function(){return r},redirectsMap:n,getOrCreateMapOfCacheRedirects:function(i){if(!i)return r;var a=i.sourceFile.path,o=n.get(a);o||(o=!t||e.optionsHaveModuleResolutionChanges(t,i.commandLine.options)?new e.Map:r,n.set(a,o));return o},clear:function(){r.clear(),n.clear()},setOwnOptions:function(e){t=e},setOwnMap:function(e){r=e}}}function T(t,r){var n;return{getPackageJsonInfo:function(i){return null==n?void 0:n.get(e.toPath(i,t,r))},setPackageJsonInfo:function(i,a){(n||(n=new e.Map)).set(e.toPath(i,t,r),a)},clear:function(){n=void 0},entries:function(){var t=null==n?void 0:n.entries();return t?e.arrayFrom(t):[]},getInternalMap:function(){return n}}}function C(e,t,r,n){var i=e.getOrCreateMapOfCacheRedirects(t),a=i.get(r);return a||(a=n(),i.set(r,a)),a}function E(t,r,n){if(t.configFile){if(0===r.redirectsMap.size)e.Debug.assert(!n||0===n.redirectsMap.size),e.Debug.assert(0===r.getOwnMap().size),e.Debug.assert(!n||0===n.getOwnMap().size),r.redirectsMap.set(t.configFile.path,r.getOwnMap()),null==n||n.redirectsMap.set(t.configFile.path,n.getOwnMap());else{e.Debug.assert(!n||n.redirectsMap.size>0);var i={sourceFile:t.configFile,commandLine:{options:t}};r.setOwnMap(r.getOrCreateMapOfCacheRedirects(i)),null==n||n.setOwnMap(n.getOrCreateMapOfCacheRedirects(i))}r.setOwnOptions(t),null==n||n.setOwnOptions(t)}}function k(t,r,n){return{getOrCreateCacheForDirectory:function(i,a){var o=e.toPath(i,t,r);return C(n,a,o,(function(){return N()}))},clear:function(){n.clear()},update:function(e){E(e,n)}}}function N(){var t=new e.Map,r=new e.Map,n={get:function(e,r){return t.get(i(e,r))},set:function(e,r,a){return t.set(i(e,r),a),n},delete:function(e,r){return t.delete(i(e,r)),n},has:function(e,r){return t.has(i(e,r))},forEach:function(e){return t.forEach((function(t,n){var i=r.get(n),a=i[0],o=i[1];return e(t,a,o)}))},size:function(){return t.size}};return n;function i(e,t){var n=void 0===t?e:"".concat(t,"|").concat(e);return r.set(n,[e,t]),n}}function A(r,n,i,a,o){var s=function(r,n,i,a){var o,s=a.compilerOptions,c=s.baseUrl,u=s.paths,l=s.configFile;if(u&&!e.pathIsRelative(n)){return a.traceEnabled&&(c&&t(a.host,e.Diagnostics.baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1,c,n),t(a.host,e.Diagnostics.paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0,n)),pe(r,n,e.getPathsBasePath(a.compilerOptions,a.host),u,(null==l?void 0:l.configFileSpecs)?(o=l.configFileSpecs).pathPatterns||(o.pathPatterns=e.tryParsePatterns(u)):void 0,i,!1,a)}}(r,n,a,o);return s?s.value:e.isExternalModuleNameRelative(n)?function(r,n,i,a,o){if(!o.compilerOptions.rootDirs)return;o.traceEnabled&&t(o.host,e.Diagnostics.rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0,n);for(var s,c,u=e.normalizePath(e.combinePaths(i,n)),l=0,_=o.compilerOptions.rootDirs;l<_.length;l++){var d=_[l],p=e.normalizePath(d);e.endsWith(p,e.directorySeparator)||(p+=e.directorySeparator);var f=e.startsWith(u,p)&&(void 0===c||c.length<p.length);o.traceEnabled&&t(o.host,e.Diagnostics.Checking_if_0_is_the_longest_matching_prefix_for_1_2,p,u,f),f&&(c=p,s=d)}if(c){o.traceEnabled&&t(o.host,e.Diagnostics.Longest_matching_prefix_for_0_is_1,u,c);var g=u.substr(c.length);o.traceEnabled&&t(o.host,e.Diagnostics.Loading_0_from_the_root_dir_1_candidate_location_2,g,c,u);var m=a(r,u,!e.directoryProbablyExists(i,o.host),o);if(m)return m;o.traceEnabled&&t(o.host,e.Diagnostics.Trying_other_entries_in_rootDirs);for(var y=0,v=o.compilerOptions.rootDirs;y<v.length;y++){if((d=v[y])!==s){var h=e.combinePaths(e.normalizePath(d),g);o.traceEnabled&&t(o.host,e.Diagnostics.Loading_0_from_the_root_dir_1_candidate_location_2,g,d,h);var b=e.getDirectoryPath(h),x=a(r,h,!e.directoryProbablyExists(b,o.host),o);if(x)return x}}o.traceEnabled&&t(o.host,e.Diagnostics.Module_resolution_using_rootDirs_has_failed)}return}(r,n,i,a,o):function(r,n,i,a){var o=a.compilerOptions.baseUrl;if(!o)return;a.traceEnabled&&t(a.host,e.Diagnostics.baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1,o,n);var s=e.normalizePath(e.combinePaths(o,n));a.traceEnabled&&t(a.host,e.Diagnostics.Resolving_module_name_0_relative_to_base_url_1_2,n,o,s);return i(r,s,!e.directoryProbablyExists(e.getDirectoryPath(s),a.host),a)}(r,n,a,o)}e.resolveTypeReferenceDirective=function(n,i,a,o,s,u,_){e.Debug.assert("string"==typeof n,"Non-string value passed to `ts.resolveTypeReferenceDirective`, likely by a wrapping package working with an outdated `resolveTypeReferenceDirectives` signature. This is probably not a problem in TS itself.");var d=r(a,o);s&&(a=s.commandLine.options);var p=i?e.getDirectoryPath(i):void 0,f=p?u&&u.getOrCreateCacheForDirectory(p,s):void 0,g=f&&f.get(n,_);if(g)return d&&(t(o,e.Diagnostics.Resolving_type_reference_directive_0_containing_file_1,n,i),s&&t(o,e.Diagnostics.Using_compiler_options_of_project_reference_redirect_0,s.sourceFile.fileName),t(o,e.Diagnostics.Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1,n,p),O(g)),g;var m=v(a,o);d&&(void 0===i?void 0===m?t(o,e.Diagnostics.Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set,n):t(o,e.Diagnostics.Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1,n,m):void 0===m?t(o,e.Diagnostics.Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set,n,i):t(o,e.Diagnostics.Resolving_type_reference_directive_0_containing_file_1_root_directory_2,n,i,m),s&&t(o,e.Diagnostics.Using_compiler_options_of_project_reference_redirect_0,s.sourceFile.fileName));var y=[],b=[],S=D(a);_!==e.ModuleKind.ESNext||e.getEmitModuleResolutionKind(a)!==e.ModuleResolutionKind.Node16&&e.getEmitModuleResolutionKind(a)!==e.ModuleResolutionKind.NodeNext||(S|=h.EsmMode);var T,C=S&h.Exports?S&h.EsmMode?["node","import","types"]:["node","require","types"]:[],E=[],k={compilerOptions:a,host:o,traceEnabled:d,failedLookupLocations:y,affectingLocations:b,packageJsonInfoCache:u,features:S,conditions:C,requestContainingDirectory:p,reportDiagnostic:function(e){E.push(e)}},N=function(){if(m&&m.length)return d&&t(o,e.Diagnostics.Resolving_with_primary_search_path_0,m.join(", ")),e.firstDefined(m,(function(r){var i=e.combinePaths(r,n),a=e.getDirectoryPath(i),s=e.directoryProbablyExists(a,o);return!s&&d&&t(o,e.Diagnostics.Directory_0_does_not_exist_skipping_all_lookups_in_it,a),l(X(c.DtsOnly,i,!s,k))}));d&&t(o,e.Diagnostics.Root_directory_cannot_be_determined_skipping_primary_search_paths)}(),A=!0;if(N||(N=function(){var r=i&&e.getDirectoryPath(i);if(void 0!==r){var a;if(d&&t(o,e.Diagnostics.Looking_up_in_node_modules_folder_initial_location_0,r),e.isExternalModuleNameRelative(n)){var s=R(r,n).path;a=j(c.DtsOnly,s,!1,k,!0)}else{var u=ue(c.DtsOnly,n,r,k,void 0,void 0);a=u&&u.value}return l(a)}d&&t(o,e.Diagnostics.Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_modules_folder)}(),A=!1),N){var F=N.fileName,P=N.packageId,w=a.preserveSymlinks?F:B(F,o,d),I=x(F,w,o);T={primary:A,resolvedFileName:I?F:w,originalPath:I?void 0:F,packageId:P,isExternalLibraryImport:J(F)}}return g={resolvedTypeReferenceDirective:T,failedLookupLocations:y,affectingLocations:b,resolutionDiagnostics:E},null==f||f.set(n,_,g),d&&O(g),g;function O(r){var i;(null===(i=r.resolvedTypeReferenceDirective)||void 0===i?void 0:i.resolvedFileName)?r.resolvedTypeReferenceDirective.packageId?t(o,e.Diagnostics.Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3,n,r.resolvedTypeReferenceDirective.resolvedFileName,e.packageIdToString(r.resolvedTypeReferenceDirective.packageId),r.resolvedTypeReferenceDirective.primary):t(o,e.Diagnostics.Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2,n,r.resolvedTypeReferenceDirective.resolvedFileName,r.resolvedTypeReferenceDirective.primary):t(o,e.Diagnostics.Type_reference_directive_0_was_not_resolved,n)}},e.resolvePackageNameToPackageJson=function(t,r,n,i,a){var o=Z(null==a?void 0:a.getPackageJsonInfoCache(),i,n);return e.forEachAncestorDirectory(r,(function(r){if("node_modules"!==e.getBaseFileName(r)){var n=e.combinePaths(r,"node_modules");return ee(e.combinePaths(n,t),!1,o)}}))},e.getAutomaticTypeDirectiveNames=function(t,r){if(t.types)return t.types;var n=[];if(r.directoryExists&&r.getDirectories){var i=v(t,r);if(i)for(var a=0,o=i;a<o.length;a++){var s=o[a];if(r.directoryExists(s))for(var c=0,u=r.getDirectories(s);c<u.length;c++){var l=u[c],_=e.normalizePath(l),d=e.combinePaths(s,_,"package.json");if(!(r.fileExists(d)&&null===e.readJson(d,r).typings)){var p=e.getBaseFileName(_);46!==p.charCodeAt(0)&&n.push(p)}}}}return n},e.createCacheWithRedirects=S,e.createModeAwareCache=N,e.zipToModeAwareCache=function(t,r,n){e.Debug.assert(r.length===n.length);for(var i=N(),a=0;a<r.length;++a){var o=r[a],s=e.isString(o)?o:o.fileName.toLowerCase(),c=e.isString(o)?e.getModeForResolutionAtIndex(t,a):o.resolutionMode||t.impliedNodeFormat;i.set(s,c,n[a])}return i},e.createModuleResolutionCache=function(t,r,n,i,a){var s=k(t,r,i||(i=S(n)));a||(a=S(n));var c=T(t,r);return o(o(o({},c),s),{getOrCreateCacheForModuleName:function(t,r,n){return e.Debug.assert(!e.isExternalModuleNameRelative(t)),C(a,n,void 0===r?t:"".concat(r,"|").concat(t),l)},clear:function(){u(),c.clear()},update:function(e){E(e,i,a)},getPackageJsonInfoCache:function(){return c},clearAllExceptPackageJsonInfoCache:u});function u(){s.clear(),a.clear()}function l(){var n=new e.Map;return{get:function(i){return n.get(e.toPath(i,t,r))},set:function(i,a){var o=e.toPath(i,t,r);if(n.has(o))return;n.set(o,a);var s=a.resolvedModule&&(a.resolvedModule.originalPath||a.resolvedModule.resolvedFileName),c=s&&function(n,i){var a=e.toPath(e.getDirectoryPath(i),t,r),o=0,s=Math.min(n.length,a.length);for(;o<s&&n.charCodeAt(o)===a.charCodeAt(o);)o++;if(o===n.length&&(a.length===o||a[o]===e.directorySeparator))return n;var c=e.getRootLength(n);if(o<c)return;var u=n.lastIndexOf(e.directorySeparator,o-1);if(-1===u)return;return n.substr(0,Math.max(u,c))}(o,s),u=o;for(;u!==c;){var l=e.getDirectoryPath(u);if(l===u||n.has(l))break;n.set(l,a),u=l}}}}},e.createTypeReferenceDirectiveResolutionCache=function(e,t,r,n,i){var a=k(e,t,i||(i=S(r)));return n||(n=T(e,t)),o(o(o({},n),a),{clear:function(){s(),n.clear()},clearAllExceptPackageJsonInfoCache:s});function s(){a.clear()}},e.resolveModuleNameFromCache=function(t,r,n,i){var a=e.getDirectoryPath(r),o=n&&n.getOrCreateCacheForDirectory(a);if(o)return o.get(t,i)},e.resolveModuleName=function(n,i,a,o,s,c,u){var l=r(a,o);c&&(a=c.commandLine.options),l&&(t(o,e.Diagnostics.Resolving_module_0_from_1,n,i),c&&t(o,e.Diagnostics.Using_compiler_options_of_project_reference_redirect_0,c.sourceFile.fileName));var _=e.getDirectoryPath(i),d=s&&s.getOrCreateCacheForDirectory(_,c),p=d&&d.get(n,u);if(p)l&&t(o,e.Diagnostics.Resolution_for_module_0_was_found_in_cache_from_location_1,n,_);else{var f=a.moduleResolution;if(void 0===f){switch(e.getEmitModuleKind(a)){case e.ModuleKind.CommonJS:f=e.ModuleResolutionKind.NodeJs;break;case e.ModuleKind.Node16:f=e.ModuleResolutionKind.Node16;break;case e.ModuleKind.NodeNext:f=e.ModuleResolutionKind.NodeNext;break;default:f=e.ModuleResolutionKind.Classic}l&&t(o,e.Diagnostics.Module_resolution_kind_is_not_specified_using_0,e.ModuleResolutionKind[f])}else l&&t(o,e.Diagnostics.Explicitly_specified_module_resolution_kind_Colon_0,e.ModuleResolutionKind[f]);switch(e.perfLogger.logStartResolveModule(n),f){case e.ModuleResolutionKind.Node16:p=function(e,t,r,n,i,a,o){return O(h.Node16Default,e,t,r,n,i,a,o)}(n,i,a,o,s,c,u);break;case e.ModuleResolutionKind.NodeNext:p=function(e,t,r,n,i,a,o){return O(h.NodeNextDefault,e,t,r,n,i,a,o)}(n,i,a,o,s,c,u);break;case e.ModuleResolutionKind.NodeJs:p=M(n,i,a,o,s,c);break;case e.ModuleResolutionKind.Classic:p=ve(n,i,a,o,s,c);break;default:return e.Debug.fail("Unexpected moduleResolution: ".concat(f))}p&&p.resolvedModule&&e.perfLogger.logInfoEvent('Module "'.concat(n,'" resolved to "').concat(p.resolvedModule.resolvedFileName,'"')),e.perfLogger.logStopResolveModule(p&&p.resolvedModule?""+p.resolvedModule.resolvedFileName:"null"),d&&(d.set(n,u,p),e.isExternalModuleNameRelative(n)||s.getOrCreateCacheForModuleName(n,u,c).set(_,p))}return l&&(p.resolvedModule?p.resolvedModule.packageId?t(o,e.Diagnostics.Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2,n,p.resolvedModule.resolvedFileName,e.packageIdToString(p.resolvedModule.packageId)):t(o,e.Diagnostics.Module_name_0_was_successfully_resolved_to_1,n,p.resolvedModule.resolvedFileName):t(o,e.Diagnostics.Module_name_0_was_not_resolved,n)),p},e.resolveJSModule=function(t,r,n){var i=function(t,r,n){return L(h.None,t,r,{moduleResolution:e.ModuleResolutionKind.NodeJs,allowJs:!0},n,void 0,F,void 0)}(t,r,n),a=i.resolvedModule,o=i.failedLookupLocations;if(!a)throw new Error("Could not resolve JS module '".concat(t,"' starting at '").concat(r,"'. Looked in: ").concat(o.join(", ")));return a.resolvedFileName},function(e){e[e.None=0]="None",e[e.Imports=2]="Imports",e[e.SelfName=4]="SelfName",e[e.Exports=8]="Exports",e[e.ExportsPatternTrailers=16]="ExportsPatternTrailers",e[e.AllFeatures=30]="AllFeatures",e[e.Node16Default=30]="Node16Default",e[e.NodeNextDefault=30]="NodeNextDefault",e[e.EsmMode=32]="EsmMode"}(h||(h={}));var F=[c.JavaScript],P=[c.TypeScript,c.JavaScript],w=a(a([],P,!0),[c.Json],!1),I=[c.TSConfig];function O(t,r,n,i,o,s,u,l){var _=e.getDirectoryPath(n),d=l===e.ModuleKind.ESNext?h.EsmMode:0,p=i.noDtsResolution?[c.TsOnly,c.JavaScript]:P;return i.resolveJsonModule&&(p=a(a([],p,!0),[c.Json],!1)),L(t|d,r,_,i,o,s,p,u)}function M(t,r,n,i,a,o,s){var u;return s?u=I:n.noDtsResolution?(u=[c.TsOnly],n.allowJs&&u.push(c.JavaScript),n.resolveJsonModule&&u.push(c.Json)):u=n.resolveJsonModule?w:P,L(h.None,t,e.getDirectoryPath(r),n,i,a,u,o)}function L(n,i,a,s,u,l,d,p){var f,g,m=r(s,u),y=[],v=[],b=n&h.EsmMode?["node","import","types"]:["node","require","types"];s.noDtsResolution&&b.pop();var D=[],S={compilerOptions:s,host:u,traceEnabled:m,failedLookupLocations:y,affectingLocations:v,packageJsonInfoCache:l,features:n,conditions:b,requestContainingDirectory:a,reportDiagnostic:function(e){D.push(e)}};m&&e.getEmitModuleResolutionKind(s)>=e.ModuleResolutionKind.Node16&&e.getEmitModuleResolutionKind(s)<=e.ModuleResolutionKind.NodeNext&&t(u,e.Diagnostics.Resolving_in_0_mode_with_conditions_1,n&h.EsmMode?"ESM":"CJS",b.map((function(e){return"'".concat(e,"'")})).join(", "));var T=e.forEach(d,(function(r){return function(r){var _=function(e,t,r,n){return j(e,t,r,n,!0)},d=A(r,i,a,_,S);if(d)return he({resolved:d,isExternalLibraryImport:J(d.path)});if(e.isExternalModuleNameRelative(i)){var f=R(a,i),g=f.path,y=f.parts,v=j(r,g,!1,S,!0);return v&&he({resolved:v,isExternalLibraryImport:e.contains(y,"node_modules")})}var b;if(n&h.Imports&&e.startsWith(i,"#")&&(b=function(r,n,i,a,o,s){var c,u;if("#"===n||e.startsWith(n,"#/"))return a.traceEnabled&&t(a.host,e.Diagnostics.Invalid_import_specifier_0_has_no_possible_resolutions,n),he(void 0);var l=e.getNormalizedAbsolutePath(e.combinePaths(i,"dummy"),null===(u=(c=a.host).getCurrentDirectory)||void 0===u?void 0:u.call(c)),_=$(l,a);if(!_)return a.traceEnabled&&t(a.host,e.Diagnostics.Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve,l),he(void 0);if(!_.contents.packageJsonContent.imports)return a.traceEnabled&&t(a.host,e.Diagnostics.package_json_scope_0_has_no_imports_defined,_.packageDirectory),he(void 0);var d=oe(r,a,o,s,n,_.contents.packageJsonContent.imports,_,!0);if(d)return d;a.traceEnabled&&t(a.host,e.Diagnostics.Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1,n,_.packageDirectory);return he(void 0)}(r,i,a,S,l,p)),!b&&n&h.SelfName&&(b=function(t,r,n,i,a,o){var s,c,u=e.getNormalizedAbsolutePath(e.combinePaths(n,"dummy"),null===(c=(s=i.host).getCurrentDirectory)||void 0===c?void 0:c.call(s)),l=$(u,i);if(!l||!l.contents.packageJsonContent.exports)return;if("string"!=typeof l.contents.packageJsonContent.name)return;var _=e.getPathComponents(r),d=e.getPathComponents(l.contents.packageJsonContent.name);if(!e.every(d,(function(e,t){return _[t]===e})))return;var p=_.slice(d.length);return ie(l,t,e.length(p)?".".concat(e.directorySeparator).concat(p.join(e.directorySeparator)):".",i,a,o)}(r,i,a,S,l,p)),b||(m&&t(u,e.Diagnostics.Loading_module_0_from_node_modules_folder_target_file_type_1,i,c[r]),b=ue(r,i,a,S,l,p)),!b)return;var D=b.value;if(!s.preserveSymlinks&&D&&!D.originalPath){var T=B(D.path,u,m),C=x(T,D.path,u),E=C?void 0:D.path;D=o(o({},D),{path:C?D.path:T,originalPath:E})}return{value:D&&{resolved:D,isExternalLibraryImport:!0}}}(r)}));return _(null===(f=null==T?void 0:T.value)||void 0===f?void 0:f.resolved,null===(g=null==T?void 0:T.value)||void 0===g?void 0:g.isExternalLibraryImport,y,v,D,S.resultFromCache)}function R(t,r){var n=e.combinePaths(t,r),i=e.getPathComponents(n),a=e.lastOrUndefined(i);return{path:"."===a||".."===a?e.ensureTrailingDirectorySeparator(e.normalizePath(n)):e.normalizePath(n),parts:i}}function B(r,n,i){if(!n.realpath)return r;var a=e.normalizePath(n.realpath(r));return i&&t(n,e.Diagnostics.Resolving_real_path_for_0_result_1,r,a),e.Debug.assert(n.fileExists(a),"".concat(r," linked to nonexistent file ").concat(a)),a}function j(r,i,a,o,s){if(o.traceEnabled&&t(o.host,e.Diagnostics.Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_type_1,i,c[r]),!e.hasTrailingDirectorySeparator(i)){if(!a){var u=e.getDirectoryPath(i);e.directoryProbablyExists(u,o.host)||(o.traceEnabled&&t(o.host,e.Diagnostics.Directory_0_does_not_exist_skipping_all_lookups_in_it,u),a=!0)}var l=V(r,i,a,o);if(l){var _=s?z(l.path):void 0;return n(_?ee(_,!1,o):void 0,l)}}a||(e.directoryProbablyExists(i,o.host)||(o.traceEnabled&&t(o.host,e.Diagnostics.Directory_0_does_not_exist_skipping_all_lookups_in_it,i),a=!0));if(!(o.features&h.EsmMode))return X(r,i,a,o,s)}function J(t){return e.stringContains(t,e.nodeModulesPathPart)}function z(t){var r=e.normalizePath(t),n=r.lastIndexOf(e.nodeModulesPathPart);if(-1!==n){var i=n+e.nodeModulesPathPart.length,a=U(r,i);return 64===r.charCodeAt(i)&&(a=U(r,a)),r.slice(0,a)}}function U(t,r){var n=t.indexOf(e.directorySeparator,r+1);return-1===n?r:n}function K(e,t,r,n){return i(V(e,t,r,n))}function V(t,r,n,i){if(t===c.Json||t===c.TSConfig){var a=e.tryRemoveExtension(r,".json"),o=a?r.substring(a.length):"";return void 0===a&&t===c.Json?void 0:H(a||r,t,o,n,i)}if(!(i.features&h.EsmMode)){var s=H(r,t,"",n,i);if(s)return s}return q(t,r,n,i)}function q(r,n,i,a){if(e.hasJSFileExtension(n)||e.fileExtensionIs(n,".json")&&a.compilerOptions.resolveJsonModule){var o=e.removeFileExtension(n),s=n.substring(o.length);return a.traceEnabled&&t(a.host,e.Diagnostics.File_name_0_has_a_1_extension_stripping_it,n,s),H(o,r,s,i,a)}}function W(t,r,n,i){return t!==c.TypeScript&&t!==c.DtsOnly||!e.fileExtensionIsOneOf(r,e.supportedTSExtensionsFlat)?q(t,r,n,i):void 0!==G(r,n,i)?{path:r,ext:e.tryExtractTSExtension(r)}:void 0}function H(t,r,n,i,a){if(!i){var o=e.getDirectoryPath(t);o&&(i=!e.directoryProbablyExists(o,a.host))}switch(r){case c.DtsOnly:switch(n){case".mjs":case".mts":case".d.mts":return u(".d.mts");case".cjs":case".cts":case".d.cts":return u(".d.cts");case".json":return t+=".json",u(".d.ts");default:return u(".d.ts")}case c.TypeScript:case c.TsOnly:var s=r===c.TypeScript;switch(n){case".mjs":case".mts":case".d.mts":return u(".mts")||(s?u(".d.mts"):void 0);case".cjs":case".cts":case".d.cts":return u(".cts")||(s?u(".d.cts"):void 0);case".json":return t+=".json",s?u(".d.ts"):void 0;default:return u(".ts")||u(".tsx")||(s?u(".d.ts"):void 0)}case c.JavaScript:switch(n){case".mjs":case".mts":case".d.mts":return u(".mjs");case".cjs":case".cts":case".d.cts":return u(".cjs");case".json":return u(".json");default:return u(".js")||u(".jsx")}case c.TSConfig:case c.Json:return u(".json")}function u(e){var r=G(t+e,i,a);return void 0===r?void 0:{path:r,ext:e}}}function G(t,r,n){var i,a;if(!(null===(i=n.compilerOptions.moduleSuffixes)||void 0===i?void 0:i.length))return Q(t,r,n);var o=null!==(a=e.tryGetExtensionFromPath(t))&&void 0!==a?a:"",s=o?e.removeExtension(t,o):t;return e.forEach(n.compilerOptions.moduleSuffixes,(function(e){return Q(s+e+o,r,n)}))}function Q(r,n,i){if(!n){if(i.host.fileExists(r))return i.traceEnabled&&t(i.host,e.Diagnostics.File_0_exist_use_it_as_a_name_resolution_result,r),r;i.traceEnabled&&t(i.host,e.Diagnostics.File_0_does_not_exist,r)}i.failedLookupLocations.push(r)}function X(e,t,r,i,a){void 0===a&&(a=!0);var o=a?ee(t,r,i):void 0;return n(o,te(e,t,r,i,o&&o.contents.packageJsonContent,o&&o.contents.versionPaths))}function Y(t,r,n,i){var a;if(e.isArray(r))for(var o=0,s=r;o<s.length;o++){u(s[o])}else if("object"==typeof r&&null!==r&&ne(r))for(var c in r)u(r[c]);else u(r);return a;function u(r){var o,s;if("string"==typeof r&&e.startsWith(r,"./")&&-1===r.indexOf("*")){var c=e.getPathComponents(r).slice(2);if(c.indexOf("..")>=0||c.indexOf(".")>=0||c.indexOf("node_modules")>=0)return!1;var l=e.combinePaths(t.packageDirectory,r),_=e.getNormalizedAbsolutePath(l,null===(s=(o=n.host).getCurrentDirectory)||void 0===s?void 0:s.call(o)),d=W(i,_,!1,n);if(d)return a=e.appendIfUnique(a,d,(function(e,t){return e.path===t.path})),!0}else if(Array.isArray(r))for(var p=0,f=r;p<f.length;p++){if(u(f[p]))return!0}else if("object"==typeof r&&null!==r)return e.forEach(e.getOwnKeys(r),(function(t){if("default"===t||e.contains(n.conditions,t)||ce(n.conditions,t))return u(r[t]),!0}))}}function Z(t,n,i){return{host:n,compilerOptions:i,traceEnabled:r(i,n),failedLookupLocations:e.noopPush,affectingLocations:e.noopPush,packageJsonInfoCache:t,features:h.None,conditions:e.emptyArray,requestContainingDirectory:void 0,reportDiagnostic:e.noop}}function $(t,r){var n=e.getPathComponents(t);for(n.pop();n.length>0;){var i=ee(e.getPathFromPathComponents(n),!1,r);if(i)return i;n.pop()}}function ee(r,n,i){var a,o,s,c=i.host,u=i.traceEnabled,l=e.combinePaths(r,"package.json");if(n)i.failedLookupLocations.push(l);else{var _=null===(a=i.packageJsonInfoCache)||void 0===a?void 0:a.getPackageJsonInfo(l);if(void 0!==_)return"boolean"!=typeof _?(u&&t(c,e.Diagnostics.File_0_exists_according_to_earlier_cached_lookups,l),i.affectingLocations.push(l),_.packageDirectory===r?_:{packageDirectory:r,contents:_.contents}):(_&&u&&t(c,e.Diagnostics.File_0_does_not_exist_according_to_earlier_cached_lookups,l),void i.failedLookupLocations.push(l));var d=e.directoryProbablyExists(r,c);if(d&&c.fileExists(l)){var p=e.readJson(l,c);u&&t(c,e.Diagnostics.Found_package_json_at_0,l);var f={packageDirectory:r,contents:{packageJsonContent:p,versionPaths:m(p,i),resolvedEntrypoints:void 0}};return null===(o=i.packageJsonInfoCache)||void 0===o||o.setPackageJsonInfo(l,f),i.affectingLocations.push(l),f}d&&u&&t(c,e.Diagnostics.File_0_does_not_exist,l),null===(s=i.packageJsonInfoCache)||void 0===s||s.setPackageJsonInfo(l,d),i.failedLookupLocations.push(l)}}function te(r,n,a,o,u,l){var _;if(u)switch(r){case c.JavaScript:case c.Json:case c.TsOnly:_=g(u,n,o);break;case c.TypeScript:_=f(u,n,o)||g(u,n,o);break;case c.DtsOnly:_=f(u,n,o);break;case c.TSConfig:_=function(e,t,r){return p(e,"tsconfig",t,r)}(u,n,o);break;default:return e.Debug.assertNever(r)}var d=function(r,n,a,o){var s=G(n,a,o);if(s){var l=function(t,r){var n=e.tryGetExtensionFromPath(r);return void 0!==n&&function(e,t){switch(e){case c.JavaScript:return".js"===t||".jsx"===t||".mjs"===t||".cjs"===t;case c.TSConfig:case c.Json:return".json"===t;case c.TypeScript:return".ts"===t||".tsx"===t||".mts"===t||".cts"===t||".d.ts"===t||".d.mts"===t||".d.cts"===t;case c.TsOnly:return".ts"===t||".tsx"===t||".mts"===t||".cts"===t;case c.DtsOnly:return".d.ts"===t||".d.mts"===t||".d.cts"===t}}(t,n)?{path:r,ext:n}:void 0}(r,s);if(l)return i(l);o.traceEnabled&&t(o.host,e.Diagnostics.File_0_has_an_unsupported_extension_so_skipping_it,s)}var _=r===c.DtsOnly?c.TypeScript:r,d=o.features;"module"!==(null==u?void 0:u.type)&&(o.features&=~h.EsmMode);var p=j(_,n,a,o,!1);return o.features=d,p},m=_?!e.directoryProbablyExists(e.getDirectoryPath(_),o.host):void 0,y=a||!e.directoryProbablyExists(n,o.host),v=e.combinePaths(n,r===c.TSConfig?"tsconfig":"index");if(l&&(!_||e.containsPath(n,_))){var b=e.getRelativePathFromDirectory(n,_||v,!1);o.traceEnabled&&t(o.host,e.Diagnostics.package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_match_module_name_2,l.version,e.version,b);var x=pe(r,b,n,l.paths,void 0,d,m||y,o);if(x)return s(x.value)}var D=_&&s(d(r,_,m,o));return D||(o.features&h.EsmMode?void 0:V(r,v,y,o))}function re(t){var r=t.indexOf(e.directorySeparator);return"@"===t[0]&&(r=t.indexOf(e.directorySeparator,r+1)),-1===r?{packageName:t,rest:""}:{packageName:t.slice(0,r),rest:t.slice(r+1)}}function ne(t){return e.every(e.getOwnKeys(t),(function(t){return e.startsWith(t,".")}))}function ie(r,n,i,a,o,s){if(r.contents.packageJsonContent.exports){if("."===i){var c=void 0;if("string"==typeof r.contents.packageJsonContent.exports||Array.isArray(r.contents.packageJsonContent.exports)||"object"==typeof r.contents.packageJsonContent.exports&&(l=r.contents.packageJsonContent.exports,!e.some(e.getOwnKeys(l),(function(t){return e.startsWith(t,".")})))?c=r.contents.packageJsonContent.exports:e.hasProperty(r.contents.packageJsonContent.exports,".")&&(c=r.contents.packageJsonContent.exports["."]),c)return se(n,a,o,s,i,r,!1)(c,"",!1,".")}else if(ne(r.contents.packageJsonContent.exports)){if("object"!=typeof r.contents.packageJsonContent.exports)return a.traceEnabled&&t(a.host,e.Diagnostics.Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1,i,r.packageDirectory),he(void 0);var u=oe(n,a,o,s,i,r.contents.packageJsonContent.exports,r,!1);if(u)return u}var l;return a.traceEnabled&&t(a.host,e.Diagnostics.Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1,i,r.packageDirectory),he(void 0)}}function ae(e,t){var r=e.indexOf("*"),n=t.indexOf("*"),i=-1===r?e.length:r+1,a=-1===n?t.length:n+1;return i>a?-1:a>i||-1===r?1:-1===n||e.length>t.length?-1:t.length>e.length?1:0}function oe(t,r,n,i,a,o,s,c){var u=se(t,r,n,i,a,s,c);if(!e.endsWith(a,e.directorySeparator)&&-1===a.indexOf("*")&&e.hasProperty(o,a))return u(p=o[a],"",!1,a);for(var l=0,_=e.sort(e.filter(e.getOwnKeys(o),(function(t){return-1!==t.indexOf("*")||e.endsWith(t,"/")})),ae);l<_.length;l++){var d=_[l];if(r.features&h.ExportsPatternTrailers&&g(d,a)){var p=o[d],f=d.indexOf("*");return u(p,a.substring(d.substring(0,f).length,a.length-(d.length-1-f)),!0,d)}if(e.endsWith(d,"*")&&e.startsWith(a,d.substring(0,d.length-1)))return u(p=o[d],a.substring(d.length-1),!0,d);if(e.startsWith(a,d))return u(p=o[d],a.substring(d.length),!1,d)}function g(t,r){if(e.endsWith(t,"*"))return!1;var n=t.indexOf("*");return-1!==n&&(e.startsWith(r,t.substring(0,n))&&e.endsWith(r,t.substring(n+1)))}}function se(r,i,a,o,s,u,l){return function _(d,p,f,g){if("string"==typeof d){if(!f&&p.length>0&&!e.endsWith(d,"/"))return i.traceEnabled&&t(i.host,e.Diagnostics.package_json_scope_0_has_invalid_type_for_target_of_specifier_1,u.packageDirectory,s),he(void 0);if(!e.startsWith(d,"./")){if(l&&!e.startsWith(d,"../")&&!e.startsWith(d,"/")&&!e.isRootedDiskPath(d)){var m=f?d.replace(/\*/g,p):d+p;return be(i,e.Diagnostics.Using_0_subpath_1_with_target_2,"imports",g,m),be(i,e.Diagnostics.Resolving_module_0_from_1,m,u.packageDirectory+"/"),he((N=L(i.features,m,u.packageDirectory+"/",i.compilerOptions,i.host,a,[r],o)).resolvedModule?{path:N.resolvedModule.resolvedFileName,extension:N.resolvedModule.extension,packageId:N.resolvedModule.packageId,originalPath:N.resolvedModule.originalPath}:void 0)}return i.traceEnabled&&t(i.host,e.Diagnostics.package_json_scope_0_has_invalid_type_for_target_of_specifier_1,u.packageDirectory,s),he(void 0)}var y=(e.pathIsRelative(d)?e.getPathComponents(d).slice(1):e.getPathComponents(d)).slice(1);if(y.indexOf("..")>=0||y.indexOf(".")>=0||y.indexOf("node_modules")>=0)return i.traceEnabled&&t(i.host,e.Diagnostics.package_json_scope_0_has_invalid_type_for_target_of_specifier_1,u.packageDirectory,s),he(void 0);var v=e.combinePaths(u.packageDirectory,d),h=e.getPathComponents(p);if(h.indexOf("..")>=0||h.indexOf(".")>=0||h.indexOf("node_modules")>=0)return i.traceEnabled&&t(i.host,e.Diagnostics.package_json_scope_0_has_invalid_type_for_target_of_specifier_1,u.packageDirectory,s),he(void 0);i.traceEnabled&&t(i.host,e.Diagnostics.Using_0_subpath_1_with_target_2,l?"imports":"exports",g,f?d.replace(/\*/g,p):d+p);var b=F(f?v.replace(/\*/g,p):v+p),x=function(t,a,o,s){var l,_,d,p;if((r===c.TypeScript||r===c.JavaScript||r===c.Json)&&(i.compilerOptions.declarationDir||i.compilerOptions.outDir)&&-1===t.indexOf("/node_modules/")&&(!i.compilerOptions.configFile||e.containsPath(u.packageDirectory,F(i.compilerOptions.configFile.fileName),!w()))){var f=e.hostGetCanonicalFileName({useCaseSensitiveFileNames:w}),g=[];if(i.compilerOptions.rootDir||i.compilerOptions.composite&&i.compilerOptions.configFilePath){var m=F(e.getCommonSourceDirectory(i.compilerOptions,(function(){return[]}),(null===(_=(l=i.host).getCurrentDirectory)||void 0===_?void 0:_.call(l))||"",f));g.push(m)}else if(i.requestContainingDirectory){var y=F(e.combinePaths(i.requestContainingDirectory,"index.ts"));m=F(e.getCommonSourceDirectory(i.compilerOptions,(function(){return[y,F(o)]}),(null===(p=(d=i.host).getCurrentDirectory)||void 0===p?void 0:p.call(d))||"",f));g.push(m);for(var v=e.ensureTrailingDirectorySeparator(m);v&&v.length>1;){var h=e.getPathComponents(v);h.pop();var b=e.getPathFromPathComponents(h);g.unshift(b),v=e.ensureTrailingDirectorySeparator(b)}}g.length>1&&i.reportDiagnostic(e.createCompilerDiagnostic(s?e.Diagnostics.The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_rootDir_compiler_option_to_disambiguate:e.Diagnostics.The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_rootDir_compiler_option_to_disambiguate,""===a?".":a,o));for(var x=0,D=g;x<D.length;x++)for(var S=D[x],T=0,C=j(S);T<C.length;T++){var E=C[T];if(e.containsPath(E,t,!w()))for(var k=t.slice(E.length+1),N=e.combinePaths(S,k),A=0,I=[".mjs",".cjs",".js",".json",".d.mts",".d.cts",".d.ts"];A<I.length;A++){var O=I[A];if(e.fileExtensionIs(N,O))for(var M=0,L=e.getPossibleOriginalInputExtensionForExtension(N);M<L.length;M++){var R=L[M],B=e.changeAnyExtension(N,R,O,!w());if(!(r===c.TypeScript&&e.hasJSFileExtension(B)||r===c.JavaScript&&e.hasTSFileExtension(B))&&i.host.fileExists(B))return he(n(u,W(r,B,!1,i)))}}}}return;function j(e){var t,r,n=i.compilerOptions.configFile?(null===(r=(t=i.host).getCurrentDirectory)||void 0===r?void 0:r.call(t))||"":e,a=[];return i.compilerOptions.declarationDir&&a.push(F(P(n,i.compilerOptions.declarationDir))),i.compilerOptions.outDir&&i.compilerOptions.outDir!==i.compilerOptions.declarationDir&&a.push(F(P(n,i.compilerOptions.outDir))),a}}(b,p,e.combinePaths(u.packageDirectory,"package.json"),l);return x||he(n(u,W(r,b,!1,i)))}if("object"==typeof d&&null!==d){if(!Array.isArray(d)){for(var D=0,S=e.getOwnKeys(d);D<S.length;D++){var T=S[D];if("default"===T||i.conditions.indexOf(T)>=0||ce(i.conditions,T)){be(i,e.Diagnostics.Matched_0_condition_1,l?"imports":"exports",T);var C=d[T];if(N=_(C,p,f,g))return N}else be(i,e.Diagnostics.Saw_non_matching_condition_0,T)}return}if(!e.length(d))return i.traceEnabled&&t(i.host,e.Diagnostics.package_json_scope_0_has_invalid_type_for_target_of_specifier_1,u.packageDirectory,s),he(void 0);for(var E=0,k=d;E<k.length;E++){var N,A=k[E];if(N=_(A,p,f,g))return N}}else if(null===d)return i.traceEnabled&&t(i.host,e.Diagnostics.package_json_scope_0_explicitly_maps_specifier_1_to_null,u.packageDirectory,s),he(void 0);i.traceEnabled&&t(i.host,e.Diagnostics.package_json_scope_0_has_invalid_type_for_target_of_specifier_1,u.packageDirectory,s);return he(void 0);function F(t){var r,n;return void 0===t?t:e.getNormalizedAbsolutePath(t,null===(n=(r=i.host).getCurrentDirectory)||void 0===n?void 0:n.call(r))}function P(t,r){return e.ensureTrailingDirectorySeparator(e.combinePaths(t,r))}function w(){return!i.host.useCaseSensitiveFileNames||("boolean"==typeof i.host.useCaseSensitiveFileNames?i.host.useCaseSensitiveFileNames:i.host.useCaseSensitiveFileNames())}}}function ce(t,r){if(-1===t.indexOf("types"))return!1;if(!e.startsWith(r,"types@"))return!1;var n=e.VersionRange.tryParse(r.substring("types@".length));return!!n&&n.test(e.version)}function ue(e,t,r,n,i,a){return le(e,t,r,n,!1,i,a)}function le(t,r,n,i,a,o,s){var c=o&&o.getOrCreateCacheForModuleName(r,0===i.features?void 0:i.features&h.EsmMode?e.ModuleKind.ESNext:e.ModuleKind.CommonJS,s);return e.forEachAncestorDirectory(e.normalizeSlashes(n),(function(n){if("node_modules"!==e.getBaseFileName(n)){var u=ye(c,r,n,i);return u||he(_e(t,r,n,i,a,o,s))}}))}function _e(r,n,i,a,o,s,u){var l=e.combinePaths(i,"node_modules"),_=e.directoryProbablyExists(l,a.host);!_&&a.traceEnabled&&t(a.host,e.Diagnostics.Directory_0_does_not_exist_skipping_all_lookups_in_it,l);var d=o?void 0:de(r,n,l,_,a,s,u);if(d)return d;if(r===c.TypeScript||r===c.DtsOnly){var p=e.combinePaths(l,"@types"),f=_;return _&&!e.directoryProbablyExists(p,a.host)&&(a.traceEnabled&&t(a.host,e.Diagnostics.Directory_0_does_not_exist_skipping_all_lookups_in_it,p),f=!1),de(c.DtsOnly,function(r,n){var i=ge(r);n.traceEnabled&&i!==r&&t(n.host,e.Diagnostics.Scoped_package_detected_looking_in_0,i);return i}(n,a),p,f,a,s,u)}}function de(r,a,o,s,c,u,l){var _,d=e.normalizePath(e.combinePaths(o,a)),p=ee(d,!s,c);if(!(c.features&h.Exports)&&p){var f=V(r,d,!s,c);if(f)return i(f);var g=te(r,d,!s,c,p.contents.packageJsonContent,p.contents.versionPaths);return n(p,g)}var m=function(t,r,i,a){var o=V(t,r,i,a)||te(t,r,i,a,p&&p.contents.packageJsonContent,p&&p.contents.versionPaths);return!o&&p&&(void 0===p.contents.packageJsonContent.exports||null===p.contents.packageJsonContent.exports)&&a.features&h.EsmMode&&(o=V(t,e.combinePaths(r,"index.js"),i,a)),n(p,o)},y=re(a),v=y.packageName,b=y.rest,x=e.combinePaths(o,v);if(""!==b&&(p=ee(x,!s,c)),p&&p.contents.packageJsonContent.exports&&c.features&h.Exports)return null===(_=ie(p,r,e.combinePaths(".",b),c,u,l))||void 0===_?void 0:_.value;if(""!==b&&p&&p.contents.versionPaths){c.traceEnabled&&t(c.host,e.Diagnostics.package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_match_module_name_2,p.contents.versionPaths.version,e.version,b);var D=s&&e.directoryProbablyExists(x,c.host),S=pe(r,b,x,p.contents.versionPaths.paths,void 0,m,!D,c);if(S)return S.value}return m(r,d,!s,c)}function pe(r,n,a,o,s,c,u,l){s||(s=e.tryParsePatterns(o));var _=e.matchPatternOrExact(s,n);if(_){var d=e.isString(_)?void 0:e.matchedText(_,n),p=e.isString(_)?_:e.patternText(_);return l.traceEnabled&&t(l.host,e.Diagnostics.Module_name_0_matched_pattern_1,n,p),{value:e.forEach(o[p],(function(n){var o=d?n.replace("*",d):n,s=e.normalizePath(e.combinePaths(a,o));l.traceEnabled&&t(l.host,e.Diagnostics.Trying_substitution_0_candidate_module_location_Colon_1,n,o);var _=e.tryGetExtensionFromPath(n);if(void 0!==_){var p=G(s,u,l);if(void 0!==p)return i({path:p,ext:_})}return c(r,s,u||!e.directoryProbablyExists(e.getDirectoryPath(s),l.host),l)}))}}}e.nodeModuleNameResolver=M,e.nodeModulesPathPart="/node_modules/",e.pathContainsNodeModules=J,e.parseNodeModuleFromPath=z,e.getEntrypointsFromPackageJsonInfo=function(t,r,n,i,a){if(!a&&void 0!==t.contents.resolvedEntrypoints)return t.contents.resolvedEntrypoints;var s,u=a?c.JavaScript:c.TypeScript,l=D(r),_=Z(null==i?void 0:i.getPackageJsonInfoCache(),n,r);_.conditions=["node","require","types"],_.requestContainingDirectory=t.packageDirectory;var d=te(u,t.packageDirectory,!1,_,t.contents.packageJsonContent,t.contents.versionPaths);if(s=e.append(s,null==d?void 0:d.path),l&h.Exports&&t.contents.packageJsonContent.exports)for(var p=0,f=[["node","import","types"],["node","require","types"]];p<f.length;p++){var g=f[p],m=o(o({},_),{failedLookupLocations:[],conditions:g}),y=Y(t,t.contents.packageJsonContent.exports,m,u);if(y)for(var v=0,b=y;v<b.length;v++){var x=b[v];s=e.appendIfUnique(s,x.path)}}return t.contents.resolvedEntrypoints=s||!1},e.getTemporaryModuleResolutionState=Z,e.getPackageScopeForPath=$,e.getPackageJsonInfo=ee,e.parsePackageName=re,e.allKeysStartWithDot=ne,e.comparePatternKeys=ae,e.isApplicableVersionedTypesKey=ce;var fe="__";function ge(t){if(e.startsWith(t,"@")){var r=t.replace(e.directorySeparator,fe);if(r!==t)return r.slice(1)}return t}function me(t){return e.stringContains(t,fe)?"@"+t.replace(fe,e.directorySeparator):t}function ye(r,n,i,a){var o=r&&r.get(i);if(o)return a.traceEnabled&&t(a.host,e.Diagnostics.Resolution_for_module_0_was_found_in_cache_from_location_1,n,i),a.resultFromCache=o,{value:o.resolvedModule&&{path:o.resolvedModule.resolvedFileName,originalPath:o.resolvedModule.originalPath||!0,extension:o.resolvedModule.extension,packageId:o.resolvedModule.packageId}}}function ve(t,n,i,a,o,s){var u=r(i,a),l=[],d=[],p=e.getDirectoryPath(n),f=[],g={compilerOptions:i,host:a,traceEnabled:u,failedLookupLocations:l,affectingLocations:d,packageJsonInfoCache:o,features:h.None,conditions:[],requestContainingDirectory:p,reportDiagnostic:function(e){f.push(e)}},m=y(c.TypeScript)||y(c.JavaScript);return _(m&&m.value,!1,l,d,f,g.resultFromCache);function y(r){var n=A(r,t,p,K,g);if(n)return{value:n};if(e.isExternalModuleNameRelative(t)){var i=e.normalizePath(e.combinePaths(p,t));return he(K(r,i,!1,g))}var a=o&&o.getOrCreateCacheForModuleName(t,void 0,s),u=e.forEachAncestorDirectory(p,(function(n){var i=ye(a,t,n,g);if(i)return i;var o=e.normalizePath(e.combinePaths(n,t));return he(K(r,o,!1,g))}));return u||(r===c.TypeScript?function(e,t,r){return le(c.DtsOnly,e,t,r,!0,void 0,void 0)}(t,p,g):void 0)}}function he(e){return void 0!==e?{value:e}:void 0}function be(e,r){for(var n=[],i=2;i<arguments.length;i++)n[i-2]=arguments[i];e.traceEnabled&&t.apply(void 0,a([e.host,r],n,!1))}e.getTypesPackageName=function(e){return"@types/".concat(ge(e))},e.mangleScopedPackageName=ge,e.getPackageNameFromTypesPackageName=function(t){var r=e.removePrefix(t,"@types/");return r!==t?me(r):t},e.unmangleScopedPackageName=me,e.classicNameResolver=ve,e.loadModuleFromGlobalCache=function(n,i,a,o,s,u){var l=r(a,o);l&&t(o,e.Diagnostics.Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using_cache_location_2,i,n,s);var d=[],p=[],f=[],g={compilerOptions:a,host:o,traceEnabled:l,failedLookupLocations:d,affectingLocations:p,packageJsonInfoCache:u,features:h.None,conditions:[],requestContainingDirectory:void 0,reportDiagnostic:function(e){f.push(e)}};return _(_e(c.DtsOnly,n,s,g,!1,void 0,void 0),!0,d,p,f,g.resultFromCache)}}(_||(_={})),function(e){var t;function r(t,r){return t.body&&!t.body.parent&&(e.setParent(t.body,t),e.setParentRecursive(t.body,!1)),t.body?n(t.body,r):1}function n(t,a){void 0===a&&(a=new e.Map);var o=e.getNodeId(t);if(a.has(o))return a.get(o)||0;a.set(o,void 0);var s=function(t,a){switch(t.kind){case 261:case 262:return 0;case 263:if(e.isEnumConst(t))return 2;break;case 269:case 268:if(!e.hasSyntacticModifier(t,1))return 0;break;case 275:var o=t;if(!o.moduleSpecifier&&o.exportClause&&276===o.exportClause.kind){for(var s=0,c=0,u=o.exportClause.elements;c<u.length;c++){var l=i(u[c],a);if(l>s&&(s=l),1===s)return s}return s}break;case 265:var _=0;return e.forEachChild(t,(function(t){var r=n(t,a);switch(r){case 0:return;case 2:return void(_=2);case 1:return _=1,!0;default:e.Debug.assertNever(r)}})),_;case 264:return r(t,a);case 79:if(t.isInJSDocNamespace)return 0}return 1}(t,a);return a.set(o,s),s}function i(t,r){for(var i=t.propertyName||t.name,a=t.parent;a;){if(e.isBlock(a)||e.isModuleBlock(a)||e.isSourceFile(a)){for(var o=void 0,s=0,c=a.statements;s<c.length;s++){var u=c[s];if(e.nodeHasName(u,i)){u.parent||(e.setParent(u,a),e.setParentRecursive(u,!1));var l=n(u,r);if((void 0===o||l>o)&&(o=l),1===o)return o}}if(void 0!==o)return o}a=a.parent}return 1}function s(t){return e.Debug.attachFlowNodeDebugInfo(t),t}!function(e){e[e.NonInstantiated=0]="NonInstantiated",e[e.Instantiated=1]="Instantiated",e[e.ConstEnumOnly=2]="ConstEnumOnly"}(e.ModuleInstanceState||(e.ModuleInstanceState={})),e.getModuleInstanceState=r,function(e){e[e.None=0]="None",e[e.IsContainer=1]="IsContainer",e[e.IsBlockScopedContainer=2]="IsBlockScopedContainer",e[e.IsControlFlowContainer=4]="IsControlFlowContainer",e[e.IsFunctionLike=8]="IsFunctionLike",e[e.IsFunctionExpression=16]="IsFunctionExpression",e[e.HasLocals=32]="HasLocals",e[e.IsInterface=64]="IsInterface",e[e.IsObjectLiteralOrClassExpressionMethodOrAccessor=128]="IsObjectLiteralOrClassExpressionMethodOrAccessor"}(t||(t={}));var c=function(){var t,n,i,c,d,p,f,g,m,y,v,h,b,x,D,S,T,C,E,k,N,A,F,P,w=!1,I=0,O={flags:1},M={flags:1},L=function(){return e.createBinaryExpressionTrampoline(t,r,n,i,a,void 0);function t(t,r){if(r){r.stackIndex++,e.setParent(t,c);var n=A;ze(t);var i=c;c=t,r.skip=!1,r.inStrictModeStack[r.stackIndex]=n,r.parentStack[r.stackIndex]=i}else r={stackIndex:0,skip:!1,inStrictModeStack:[void 0],parentStack:[void 0]};var a=t.operatorToken.kind;if(55===a||56===a||60===a||e.isLogicalOrCoalescingAssignmentOperator(a)){if(le(t)){var o=$();he(t,o,o),v=ce(o)}else he(t,D,S);r.skip=!0}return r}function r(e,t,r){if(!t.skip){var n=o(e);return 27===r.operatorToken.kind&&me(e),n}}function n(e,t,r){t.skip||Be(e)}function i(e,t,r){if(!t.skip){var n=o(e);return 27===r.operatorToken.kind&&me(e),n}}function a(t,r){if(!r.skip){var n=t.operatorToken.kind;if(e.isAssignmentOperator(n)&&!e.isAssignmentTarget(t))if(ve(t.left),63===n&&209===t.left.kind)Z(t.left.expression)&&(v=oe(256,v,t))}var i=r.inStrictModeStack[r.stackIndex],a=r.parentStack[r.stackIndex];void 0!==i&&(A=i),void 0!==a&&(c=a),r.skip=!1,r.stackIndex--}function o(t){if(t&&e.isBinaryExpression(t)&&!e.isDestructuringAssignment(t))return t;Be(t)}}();function R(r,n,i,a,o){return e.createDiagnosticForNodeInSourceFile(e.getSourceFileOfNode(r)||t,r,n,i,a,o)}return function(r,a){t=r,n=a,i=e.getEmitScriptTarget(n),A=function(t,r){return!(!e.getStrictOptionValue(r,"alwaysStrict")||t.isDeclarationFile)||!!t.externalModuleIndicator}(t,a),P=new e.Set,I=0,F=e.objectAllocator.getSymbolConstructor(),e.Debug.attachFlowNodeDebugInfo(O),e.Debug.attachFlowNodeDebugInfo(M),t.locals||(null===e.tracing||void 0===e.tracing||e.tracing.push("bind","bindSourceFile",{path:t.path},!0),Be(t),null===e.tracing||void 0===e.tracing||e.tracing.pop(),t.symbolCount=I,t.classifiableNames=P,function(){if(m){for(var r=d,n=g,i=f,a=c,o=v,u=0,_=m;u<_.length;u++){var p=_[u],y=p.parent.parent;d=e.findAncestor(y.parent,(function(e){return!!(1&Ce(e))}))||t,f=e.getEnclosingBlockScopeContainer(y)||t,v=s({flags:2}),c=p,Be(p.typeExpression);var h=e.getNameOfDeclaration(p);if((e.isJSDocEnumTag(p)||!p.fullName)&&h&&e.isPropertyAccessEntityNameExpression(h.parent)){var b=$e(h.parent);if(b){Ye(t.symbol,h.parent,b,!!e.findAncestor(h,(function(t){return e.isPropertyAccessExpression(t)&&"prototype"===t.name.escapedText})),!1);var x=d;switch(e.getAssignmentDeclarationPropertyAccessKind(h.parent)){case 1:case 2:d=e.isExternalOrCommonJsModule(t)?t:void 0;break;case 4:d=h.parent.expression;break;case 3:d=h.parent.expression.name;break;case 5:d=l(t,h.parent.expression)?t:e.isPropertyAccessExpression(h.parent.expression)?h.parent.expression.name:h.parent.expression;break;case 0:return e.Debug.fail("Shouldn't have detected typedef or enum on non-assignment declaration")}d&&K(p,524288,788968),d=x}}else e.isJSDocEnumTag(p)||!p.fullName||79===p.fullName.kind?(c=p.parent,Pe(p,524288,788968)):Be(p.fullName)}d=r,g=n,f=i,c=a,v=o}}()),t=void 0,n=void 0,i=void 0,c=void 0,d=void 0,p=void 0,f=void 0,g=void 0,m=void 0,y=!1,v=void 0,h=void 0,b=void 0,x=void 0,D=void 0,S=void 0,T=void 0,E=void 0,k=!1,w=!1,N=0};function B(e,t){return I++,new F(e,t)}function j(t,r,n){t.flags|=n,r.symbol=t,t.declarations=e.appendIfUnique(t.declarations,r),1955&n&&!t.exports&&(t.exports=e.createSymbolTable()),6240&n&&!t.members&&(t.members=e.createSymbolTable()),t.constEnumOnlyModule&&304&t.flags&&(t.constEnumOnlyModule=!1),111551&n&&e.setValueDeclaration(t,r)}function J(t){if(274===t.kind)return t.isExportEquals?"export=":"default";var r=e.getNameOfDeclaration(t);if(r){if(e.isAmbientModule(t)){var n=e.getTextOfIdentifierOrLiteral(r);return e.isGlobalScopeAugmentation(t)?"__global":'"'.concat(n,'"')}if(164===r.kind){var i=r.expression;if(e.isStringOrNumericLiteralLike(i))return e.escapeLeadingUnderscores(i.text);if(e.isSignedNumericLiteral(i))return e.tokenToString(i.operator)+i.operand.text;e.Debug.fail("Only computed properties with literal names have declaration names")}if(e.isPrivateIdentifier(r)){var a=e.getContainingClass(t);if(!a)return;var o=a.symbol;return e.getSymbolNameForPrivateIdentifier(o,r.escapedText)}return e.isPropertyNameLiteral(r)?e.getEscapedTextOfIdentifierOrLiteral(r):void 0}switch(t.kind){case 173:return"__constructor";case 181:case 176:case 326:return"__call";case 182:case 177:return"__new";case 178:return"__index";case 275:return"__export";case 308:return"export=";case 223:if(2===e.getAssignmentDeclarationKind(t))return"export=";e.Debug.fail("Unknown binary declaration kind");break;case 320:return e.isJSDocConstructSignature(t)?"__new":"__call";case 166:return e.Debug.assert(320===t.parent.kind,"Impossible parameter parent kind",(function(){return"parent is: ".concat(e.Debug.formatSyntaxKind(t.parent.kind),", expected JSDocFunctionType")})),"arg"+t.parent.parameters.indexOf(t)}}function z(t){return e.isNamedDeclaration(t)?e.declarationNameToString(t.name):e.unescapeLeadingUnderscores(e.Debug.checkDefined(J(t)))}function U(r,n,i,o,s,c,u){e.Debug.assert(u||!e.hasDynamicName(i));var l,_=e.hasSyntacticModifier(i,1024)||e.isExportSpecifier(i)&&"default"===i.name.escapedText,d=u?"__computed":_&&n?"default":J(i);if(void 0===d)l=B(0,"__missing");else if(l=r.get(d),2885600&o&&P.add(d),l){if(c&&!l.isReplaceableByMethod)return l;if(l.flags&s)if(l.isReplaceableByMethod)r.set(d,l=B(0,d));else if(!(3&o&&67108864&l.flags)){e.isNamedDeclaration(i)&&e.setParent(i.name,i);var p=2&l.flags?e.Diagnostics.Cannot_redeclare_block_scoped_variable_0:e.Diagnostics.Duplicate_identifier_0,f=!0;(384&l.flags||384&o)&&(p=e.Diagnostics.Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations,f=!1);var g=!1;e.length(l.declarations)&&(_||l.declarations&&l.declarations.length&&274===i.kind&&!i.isExportEquals)&&(p=e.Diagnostics.A_module_cannot_have_multiple_default_exports,f=!1,g=!0);var m=[];e.isTypeAliasDeclaration(i)&&e.nodeIsMissing(i.type)&&e.hasSyntacticModifier(i,1)&&2887656&l.flags&&m.push(R(i,e.Diagnostics.Did_you_mean_0,"export type { ".concat(e.unescapeLeadingUnderscores(i.name.escapedText)," }")));var y=e.getNameOfDeclaration(i)||i;e.forEach(l.declarations,(function(r,n){var i=e.getNameOfDeclaration(r)||r,a=R(i,p,f?z(r):void 0);t.bindDiagnostics.push(g?e.addRelatedInfo(a,R(y,0===n?e.Diagnostics.Another_export_default_is_here:e.Diagnostics.and_here)):a),g&&m.push(R(i,e.Diagnostics.The_first_export_default_is_here))}));var v=R(y,p,f?z(i):void 0);t.bindDiagnostics.push(e.addRelatedInfo.apply(void 0,a([v],m,!1))),l=B(0,d)}}else r.set(d,l=B(0,d)),c&&(l.isReplaceableByMethod=!0);return j(l,i,o),l.parent?e.Debug.assert(l.parent===n,"Existing symbol parent should match new one"):l.parent=n,l}function K(t,r,n){var i=!!(1&e.getCombinedModifierFlags(t))||function(t){t.parent&&e.isModuleDeclaration(t)&&(t=t.parent);if(!e.isJSDocTypeAlias(t))return!1;if(!e.isJSDocEnumTag(t)&&t.fullName)return!0;var r=e.getNameOfDeclaration(t);return!!r&&(!(!e.isPropertyAccessEntityNameExpression(r.parent)||!$e(r.parent))||!!(e.isDeclaration(r.parent)&&1&e.getCombinedModifierFlags(r.parent)))}(t);if(2097152&r)return 278===t.kind||268===t.kind&&i?U(d.symbol.exports,d.symbol,t,r,n):U(d.locals,void 0,t,r,n);if(e.isJSDocTypeAlias(t)&&e.Debug.assert(e.isInJSFile(t)),!e.isAmbientModule(t)&&(i||64&d.flags)){if(!d.locals||e.hasSyntacticModifier(t,1024)&&!J(t))return U(d.symbol.exports,d.symbol,t,r,n);var a=111551&r?1048576:0,o=U(d.locals,void 0,t,a,n);return o.exportSymbol=U(d.symbol.exports,d.symbol,t,r,n),t.localSymbol=o,o}return U(d.locals,void 0,t,r,n)}function V(e){q(e,(function(e){return 259===e.kind?Be(e):void 0})),q(e,(function(e){return 259!==e.kind?Be(e):void 0}))}function q(t,r){void 0===r&&(r=Be),void 0!==t&&e.forEach(t,r)}function W(t){e.forEachChild(t,Be,q)}function H(t){var i=w;if(w=!1,function(t){if(!(1&v.flags))return!1;if(v===O){var i=e.isStatementButNotDeclaration(t)&&239!==t.kind||260===t.kind||264===t.kind&&function(t){var i=r(t);return 1===i||2===i&&e.shouldPreserveConstEnums(n)}(t);if(i&&(v=M,!n.allowUnreachableCode)){var a=e.unreachableCodeIsError(n)&&!(16777216&t.flags)&&(!e.isVariableStatement(t)||!!(3&e.getCombinedNodeFlags(t.declarationList))||t.declarationList.declarations.some((function(e){return!!e.initializer})));!function(t,r){if(e.isStatement(t)&&u(t)&&e.isBlock(t.parent)){var n=t.parent.statements,i=e.sliceAfter(n,t);e.getRangesWhere(i,u,(function(e,t){return r(i[e],i[t-1])}))}else r(t,t)}(t,(function(t,r){return Re(a,t,r,e.Diagnostics.Unreachable_code_detected)}))}}return!0}(t))return W(t),je(t),void(w=i);switch(t.kind>=240&&t.kind<=256&&!n.allowUnreachableCode&&(t.flowNode=v),t.kind){case 244:!function(e){var t=fe(e,ee()),r=$(),n=$();ne(t,v),v=t,de(e.expression,r,n),v=ce(r),pe(e.statement,n,t),ne(t,v),v=ce(n)}(t);break;case 243:!function(e){var t=ee(),r=fe(e,$()),n=$();ne(t,v),v=t,pe(e.statement,n,r),ne(r,v),v=ce(r),de(e.expression,t,n),v=ce(n)}(t);break;case 245:!function(e){var t=fe(e,ee()),r=$(),n=$();Be(e.initializer),ne(t,v),v=t,de(e.condition,r,n),v=ce(r),pe(e.statement,n,t),Be(e.incrementor),ne(t,v),v=ce(n)}(t);break;case 246:case 247:!function(e){var t=fe(e,ee()),r=$();Be(e.expression),ne(t,v),v=t,247===e.kind&&Be(e.awaitModifier);ne(r,v),Be(e.initializer),258!==e.initializer.kind&&ve(e.initializer);pe(e.statement,r,t),ne(t,v),v=ce(r)}(t);break;case 242:!function(e){var t=$(),r=$(),n=$();de(e.expression,t,r),v=ce(t),Be(e.thenStatement),ne(n,v),v=ce(r),Be(e.elseStatement),ne(n,v),v=ce(n)}(t);break;case 250:case 254:!function(e){Be(e.expression),250===e.kind&&(k=!0,x&&ne(x,v));v=O}(t);break;case 249:case 248:!function(e){if(Be(e.label),e.label){var t=function(e){for(var t=E;t;t=t.next)if(t.name===e)return t;return}(e.label.escapedText);t&&(t.referenced=!0,ge(e,t.breakTarget,t.continueTarget))}else ge(e,h,b)}(t);break;case 255:!function(t){var r=x,n=T,i=$(),a=$(),o=$();t.finallyBlock&&(x=a);ne(o,v),T=o,Be(t.tryBlock),ne(i,v),t.catchClause&&(v=ce(o),ne(o=$(),v),T=o,Be(t.catchClause),ne(i,v));if(x=r,T=n,t.finallyBlock){var s=$();s.antecedents=e.concatenate(e.concatenate(i.antecedents,o.antecedents),a.antecedents),v=s,Be(t.finallyBlock),1&v.flags?v=O:(x&&a.antecedents&&ne(x,te(s,a.antecedents,v)),T&&o.antecedents&&ne(T,te(s,o.antecedents,v)),v=i.antecedents?te(s,i.antecedents,v):O)}else v=ce(i)}(t);break;case 252:!function(t){var r=$();Be(t.expression);var n=h,i=C;h=r,C=v,Be(t.caseBlock),ne(r,v);var a=e.forEach(t.caseBlock.clauses,(function(e){return 293===e.kind}));t.possiblyExhaustive=!a&&!r.antecedents,a||ne(r,ae(C,t,0,0));h=n,C=i,v=ce(r)}(t);break;case 266:!function(e){for(var t=e.clauses,r=G(e.parent.expression),i=O,a=0;a<t.length;a++){for(var o=a;!t[a].statements.length&&a+1<t.length;)Be(t[a]),a++;var s=$();ne(s,r?ae(C,e.parent,o,a+1):C),ne(s,i),v=ce(s);var c=t[a];Be(c),i=v,1&v.flags||a===t.length-1||!n.noFallthroughCasesInSwitch||(c.fallthroughFlowNode=v)}}(t);break;case 292:!function(e){var t=v;v=C,Be(e.expression),v=t,q(e.statements)}(t);break;case 241:!function(e){Be(e.expression),me(e.expression)}(t);break;case 253:!function(t){var r=$();E={next:E,name:t.label.escapedText,breakTarget:r,continueTarget:void 0,referenced:!1},Be(t.label),Be(t.statement),E.referenced||n.allowUnusedLabels||function(e,t,r){Re(e,t,t,r)}(e.unusedLabelIsError(n),t.label,e.Diagnostics.Unused_label);E=E.next,ne(r,v),v=ce(r)}(t);break;case 221:!function(e){if(53===e.operator){var t=D;D=S,S=t,W(e),S=D,D=t}else W(e),45!==e.operator&&46!==e.operator||ve(e.operand)}(t);break;case 222:!function(e){W(e),(45===e.operator||46===e.operator)&&ve(e.operand)}(t);break;case 223:if(e.isDestructuringAssignment(t))return w=i,void function(e){w?(w=!1,Be(e.operatorToken),Be(e.right),w=!0,Be(e.left)):(w=!0,Be(e.left),w=!1,Be(e.operatorToken),Be(e.right));ve(e.left)}(t);L(t);break;case 217:!function(e){W(e),208===e.expression.kind&&ve(e.expression)}(t);break;case 224:!function(e){var t=$(),r=$(),n=$();de(e.condition,t,r),v=ce(t),Be(e.questionToken),Be(e.whenTrue),ne(n,v),v=ce(r),Be(e.colonToken),Be(e.whenFalse),ne(n,v),v=ce(n)}(t);break;case 257:!function(t){W(t),(t.initializer||e.isForInOrOfStatement(t.parent.parent))&&be(t)}(t);break;case 208:case 209:!function(t){e.isOptionalChain(t)?Te(t):W(t)}(t);break;case 210:!function(t){if(e.isOptionalChain(t))Te(t);else{var r=e.skipParentheses(t.expression);215===r.kind||216===r.kind?(q(t.typeArguments),q(t.arguments),Be(t.expression)):(W(t),106===t.expression.kind&&(v=se(v,t)))}if(208===t.expression.kind){var n=t.expression;e.isIdentifier(n.name)&&Z(n.expression)&&e.isPushOrUnshiftIdentifier(n.name)&&(v=oe(256,v,t))}}(t);break;case 232:!function(t){e.isOptionalChain(t)?Te(t):W(t)}(t);break;case 348:case 341:case 342:!function(t){Be(t.tagName),342!==t.kind&&t.fullName&&(e.setParent(t.fullName,t),e.setParentRecursive(t.fullName,!1));"string"!=typeof t.comment&&q(t.comment)}(t);break;case 308:V(t.statements),Be(t.endOfFileToken);break;case 238:case 265:V(t.statements);break;case 205:!function(e){Be(e.dotDotDotToken),Be(e.propertyName),xe(e.initializer),Be(e.name)}(t);break;case 166:!function(e){q(e.modifiers),Be(e.dotDotDotToken),Be(e.questionToken),Be(e.type),xe(e.initializer),Be(e.name)}(t);break;case 207:case 206:case 299:case 227:w=i;default:W(t)}je(t),w=i}function G(e){switch(e.kind){case 79:case 80:case 108:case 208:case 209:return X(e);case 210:return function(e){if(e.arguments)for(var t=0,r=e.arguments;t<r.length;t++){if(X(r[t]))return!0}if(208===e.expression.kind&&X(e.expression.expression))return!0;return!1}(e);case 214:case 232:case 218:return G(e.expression);case 223:return function(e){switch(e.operatorToken.kind){case 63:case 75:case 76:case 77:return X(e.left);case 34:case 35:case 36:case 37:return Z(e.left)||Z(e.right)||Y(e.right,e.left)||Y(e.left,e.right);case 102:return Z(e.left);case 101:case 27:return G(e.right)}return!1}(e);case 221:return 53===e.operator&&G(e.operand)}return!1}function Q(t){return e.isDottedName(t)||(e.isPropertyAccessExpression(t)||e.isNonNullExpression(t)||e.isParenthesizedExpression(t))&&Q(t.expression)||e.isBinaryExpression(t)&&27===t.operatorToken.kind&&Q(t.right)||e.isElementAccessExpression(t)&&(e.isStringOrNumericLiteralLike(t.argumentExpression)||e.isEntityNameExpression(t.argumentExpression))&&Q(t.expression)||e.isAssignmentExpression(t)&&Q(t.left)}function X(t){return Q(t)||e.isOptionalChain(t)&&X(t.expression)}function Y(t,r){return e.isTypeOfExpression(t)&&Z(t.expression)&&e.isStringLiteralLike(r)}function Z(e){switch(e.kind){case 214:return Z(e.expression);case 223:switch(e.operatorToken.kind){case 63:return Z(e.left);case 27:return Z(e.right)}}return X(e)}function $(){return s({flags:4,antecedents:void 0})}function ee(){return s({flags:8,antecedents:void 0})}function te(e,t,r){return s({flags:1024,target:e,antecedents:t,antecedent:r})}function re(e){e.flags|=2048&e.flags?4096:2048}function ne(t,r){1&r.flags||e.contains(t.antecedents,r)||((t.antecedents||(t.antecedents=[])).push(r),re(r))}function ie(t,r,n){return 1&r.flags?r:n?!(110===n.kind&&64&t||95===n.kind&&32&t)||e.isExpressionOfOptionalChainRoot(n)||e.isNullishCoalesce(n.parent)?G(n)?(re(r),s({flags:t,antecedent:r,node:n})):r:O:32&t?r:O}function ae(e,t,r,n){return re(e),s({flags:128,antecedent:e,switchStatement:t,clauseStart:r,clauseEnd:n})}function oe(e,t,r){re(t);var n=s({flags:e,antecedent:t,node:r});return T&&ne(T,n),n}function se(e,t){return re(e),s({flags:512,antecedent:e,node:t})}function ce(e){var t=e.antecedents;return t?1===t.length?t[0]:e:O}function ue(e){for(;;)if(214===e.kind)e=e.expression;else{if(221!==e.kind||53!==e.operator)return 223===e.kind&&(55===e.operatorToken.kind||56===e.operatorToken.kind||60===e.operatorToken.kind);e=e.operand}}function le(t){for(;e.isParenthesizedExpression(t.parent)||e.isPrefixUnaryExpression(t.parent)&&53===t.parent.operator;)t=t.parent;return!(function(e){var t=e.parent;switch(t.kind){case 242:case 244:case 243:return t.expression===e;case 245:case 224:return t.condition===e}return!1}(t)||ue(t.parent)||e.isOptionalChain(t.parent)&&t.parent.expression===t)}function _e(e,t,r,n){var i=D,a=S;D=r,S=n,e(t),D=i,S=a}function de(t,r,n){_e(Be,t,r,n),t&&(function(t){return t=e.skipParentheses(t),e.isBinaryExpression(t)&&e.isLogicalOrCoalescingAssignmentOperator(t.operatorToken.kind)}(t)||ue(t)||e.isOptionalChain(t)&&e.isOutermostOptionalChain(t))||(ne(r,ie(32,v,t)),ne(n,ie(64,v,t)))}function pe(e,t,r){var n=h,i=b;h=t,b=r,Be(e),h=n,b=i}function fe(e,t){for(var r=E;r&&253===e.parent.kind;)r.continueTarget=t,r=r.next,e=e.parent;return t}function ge(e,t,r){var n=249===e.kind?t:r;n&&(ne(n,v),v=O)}function me(t){if(210===t.kind){var r=t;106!==r.expression.kind&&e.isDottedName(r.expression)&&(v=se(v,r))}}function ye(e){223===e.kind&&63===e.operatorToken.kind?ve(e.left):ve(e)}function ve(e){if(Q(e))v=oe(16,v,e);else if(206===e.kind)for(var t=0,r=e.elements;t<r.length;t++){var n=r[t];227===n.kind?ve(n.expression):ye(n)}else if(207===e.kind)for(var i=0,a=e.properties;i<a.length;i++){var o=a[i];299===o.kind?ye(o.initializer):300===o.kind?ve(o.name):301===o.kind&&ve(o.expression)}}function he(t,r,n){var i=$();55===t.operatorToken.kind||76===t.operatorToken.kind?de(t.left,i,n):de(t.left,r,i),v=ce(i),Be(t.operatorToken),e.isLogicalOrCoalescingAssignmentOperator(t.operatorToken.kind)?(_e(Be,t.right,r,n),ve(t.left),ne(r,ie(32,v,t)),ne(n,ie(64,v,t))):de(t.right,r,n)}function be(t){var r=e.isOmittedExpression(t)?void 0:t.name;if(e.isBindingPattern(r))for(var n=0,i=r.elements;n<i.length;n++){be(i[n])}else v=oe(16,v,t)}function xe(e){if(e){var t=v;if(Be(e),t!==O&&t!==v){var r=$();ne(r,t),ne(r,v),v=ce(r)}}}function De(e){switch(e.kind){case 208:Be(e.questionDotToken),Be(e.name);break;case 209:Be(e.questionDotToken),Be(e.argumentExpression);break;case 210:Be(e.questionDotToken),q(e.typeArguments),q(e.arguments)}}function Se(t,r,n){var i=e.isOptionalChainRoot(t)?$():void 0;!function(t,r,n){_e(Be,t,r,n),e.isOptionalChain(t)&&!e.isOutermostOptionalChain(t)||(ne(r,ie(32,v,t)),ne(n,ie(64,v,t)))}(t.expression,i||r,n),i&&(v=ce(i)),_e(De,t,r,n),e.isOutermostOptionalChain(t)&&(ne(r,ie(32,v,t)),ne(n,ie(64,v,t)))}function Te(e){if(le(e)){var t=$();Se(e,t,t),v=ce(t)}else Se(e,D,S)}function Ce(t){switch(t.kind){case 228:case 260:case 263:case 207:case 184:case 325:case 289:return 1;case 261:return 65;case 264:case 262:case 197:case 178:return 33;case 308:return 37;case 174:case 175:case 171:if(e.isObjectLiteralOrClassExpressionMethodOrAccessor(t))return 173;case 173:case 259:case 170:case 176:case 326:case 320:case 181:case 177:case 182:case 172:return 45;case 215:case 216:return 61;case 265:return 4;case 169:return t.initializer?4:0;case 295:case 245:case 246:case 247:case 266:return 2;case 238:return e.isFunctionLike(t.parent)||e.isClassStaticBlockDeclaration(t.parent)?0:2}return 0}function Ee(e){g&&(g.nextContainer=e),g=e}function ke(r,n,i){switch(d.kind){case 264:return K(r,n,i);case 308:return function(r,n,i){return e.isExternalModule(t)?K(r,n,i):U(t.locals,void 0,r,n,i)}(r,n,i);case 228:case 260:return function(t,r,n){return e.isStatic(t)?U(d.symbol.exports,d.symbol,t,r,n):U(d.symbol.members,d.symbol,t,r,n)}(r,n,i);case 263:return U(d.symbol.exports,d.symbol,r,n,i);case 184:case 325:case 207:case 261:case 289:return U(d.symbol.members,d.symbol,r,n,i);case 181:case 182:case 176:case 177:case 326:case 178:case 171:case 170:case 173:case 174:case 175:case 259:case 215:case 216:case 320:case 348:case 341:case 172:case 262:case 197:return U(d.locals,void 0,r,n,i)}}function Ne(t){16777216&t.flags&&!function(t){var r=e.isSourceFile(t)?t:e.tryCast(t.body,e.isModuleBlock);return!!r&&r.statements.some((function(t){return e.isExportDeclaration(t)||e.isExportAssignment(t)}))}(t)?t.flags|=64:t.flags&=-65}function Ae(e){var t=r(e),n=0!==t;return ke(e,n?512:1024,n?110735:0),t}function Fe(e,t,r){var n=B(t,r);return 106508&t&&(n.parent=d.symbol),j(n,e,t),n}function Pe(t,r,n){switch(f.kind){case 264:K(t,r,n);break;case 308:if(e.isExternalOrCommonJsModule(d)){K(t,r,n);break}default:f.locals||(f.locals=e.createSymbolTable(),Ee(f)),U(f.locals,void 0,t,r,n)}}function we(r){t.parseDiagnostics.length||16777216&r.flags||8388608&r.flags||e.isIdentifierName(r)||(A&&r.originalKeywordKind>=117&&r.originalKeywordKind<=125?t.bindDiagnostics.push(R(r,function(r){if(e.getContainingClass(r))return e.Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_strict_mode;if(t.externalModuleIndicator)return e.Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode;return e.Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode}(r),e.declarationNameToString(r))):133===r.originalKeywordKind?e.isExternalModule(t)&&e.isInTopLevelContext(r)?t.bindDiagnostics.push(R(r,e.Diagnostics.Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module,e.declarationNameToString(r))):32768&r.flags&&t.bindDiagnostics.push(R(r,e.Diagnostics.Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here,e.declarationNameToString(r))):125===r.originalKeywordKind&&8192&r.flags&&t.bindDiagnostics.push(R(r,e.Diagnostics.Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here,e.declarationNameToString(r))))}function Ie(r,n){if(n&&79===n.kind){var i=n;if(o=i,e.isIdentifier(o)&&("eval"===o.escapedText||"arguments"===o.escapedText)){var a=e.getErrorSpanForNode(t,n);t.bindDiagnostics.push(e.createFileDiagnostic(t,a.start,a.length,function(r){if(e.getContainingClass(r))return e.Diagnostics.Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of_0_For_more_information_see_https_Colon_Slash_Slashdeveloper_mozilla_org_Slashen_US_Slashdocs_SlashWeb_SlashJavaScript_SlashReference_SlashStrict_mode;if(t.externalModuleIndicator)return e.Diagnostics.Invalid_use_of_0_Modules_are_automatically_in_strict_mode;return e.Diagnostics.Invalid_use_of_0_in_strict_mode}(r),e.idText(i)))}}var o}function Oe(e){A&&Ie(e,e.name)}function Me(r){if(i<2&&308!==f.kind&&264!==f.kind&&!e.isFunctionLikeOrClassStaticBlockDeclaration(f)){var n=e.getErrorSpanForNode(t,r);t.bindDiagnostics.push(e.createFileDiagnostic(t,n.start,n.length,function(r){return e.getContainingClass(r)?e.Diagnostics.Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Class_definitions_are_automatically_in_strict_mode:t.externalModuleIndicator?e.Diagnostics.Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5_Modules_are_automatically_in_strict_mode:e.Diagnostics.Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES3_or_ES5}(r)))}}function Le(r,n,i,a,o){var s=e.getSpanOfTokenAtPosition(t,r.pos);t.bindDiagnostics.push(e.createFileDiagnostic(t,s.start,s.length,n,i,a,o))}function Re(r,n,i,a){!function(r,n,i){var a=e.createFileDiagnostic(t,n.pos,n.end-n.pos,i);r?t.bindDiagnostics.push(a):t.bindSuggestionDiagnostics=e.append(t.bindSuggestionDiagnostics,o(o({},a),{category:e.DiagnosticCategory.Suggestion}))}(r,{pos:e.getTokenPosOfNode(n,t),end:i.end},a)}function Be(r){if(r){e.setParent(r,c),e.tracing&&(r.tracingPath=t.path);var n=A;if(ze(r),r.kind>162){var i=c;c=r;var a=Ce(r);0===a?H(r):function(t,r){var n=d,i=p,a=f;if(1&r?(216!==t.kind&&(p=d),d=f=t,32&r&&(d.locals=e.createSymbolTable()),Ee(d)):2&r&&((f=t).locals=void 0),4&r){var o=v,c=h,u=b,l=x,_=T,g=E,m=k,D=16&r&&!e.hasSyntacticModifier(t,512)&&!t.asteriskToken&&!!e.getImmediatelyInvokedFunctionExpression(t)||172===t.kind;D||(v=s({flags:2}),144&r&&(v.node=t)),x=D||173===t.kind||e.isInJSFile(t)&&(259===t.kind||215===t.kind)?$():void 0,T=void 0,h=void 0,b=void 0,E=void 0,k=!1,H(t),t.flags&=-2817,!(1&v.flags)&&8&r&&e.nodeIsPresent(t.body)&&(t.flags|=256,k&&(t.flags|=512),t.endFlowNode=v),308===t.kind&&(t.flags|=N,t.endFlowNode=v),x&&(ne(x,v),v=ce(x),(173===t.kind||172===t.kind||e.isInJSFile(t)&&(259===t.kind||215===t.kind))&&(t.returnFlowNode=v)),D||(v=o),h=c,b=u,x=l,T=_,E=g,k=m}else 64&r?(y=!1,H(t),t.flags=y?128|t.flags:-129&t.flags):H(t);d=n,p=i,f=a}(r,a),c=i}else{i=c;1===r.kind&&(c=r),je(r),c=i}A=n}}function je(t){if(e.hasJSDocNodes(t))if(e.isInJSFile(t))for(var r=0,n=t.jsDoc;r<n.length;r++){Be(o=n[r])}else for(var i=0,a=t.jsDoc;i<a.length;i++){var o=a[i];e.setParent(o,t),e.setParentRecursive(o,!1)}}function Je(r){if(!A)for(var n=0,i=r;n<i.length;n++){var a=i[n];if(!e.isPrologueDirective(a))return;if(o=a,s=void 0,'"use strict"'===(s=e.getSourceTextOfNodeFromSourceFile(t,o.expression))||"'use strict'"===s)return void(A=!0)}var o,s}function ze(r){switch(r.kind){case 79:if(r.isInJSDocNamespace){for(var a=r.parent;a&&!e.isJSDocTypeAlias(a);)a=a.parent;Pe(a,524288,788968);break}case 108:return v&&(e.isExpression(r)||300===c.kind)&&(r.flowNode=v),we(r);case 163:v&&e.isPartOfTypeQuery(r)&&(r.flowNode=v);break;case 233:case 106:r.flowNode=v;break;case 80:return function(r){"#constructor"===r.escapedText&&(t.parseDiagnostics.length||t.bindDiagnostics.push(R(r,e.Diagnostics.constructor_is_a_reserved_word,e.declarationNameToString(r))))}(r);case 208:case 209:var o=r;v&&Q(o)&&(o.flowNode=v),e.isSpecialPropertyDeclaration(o)&&function(t){108===t.expression.kind?We(t):e.isBindableStaticAccessExpression(t)&&308===t.parent.parent.kind&&(e.isPrototypeAccess(t.expression)?Qe(t,t.parent):Xe(t))}(o),e.isInJSFile(o)&&t.commonJsModuleIndicator&&e.isModuleExportsAccessExpression(o)&&!_(f,"module")&&U(t.locals,void 0,o.expression,134217729,111550);break;case 223:switch(e.getAssignmentDeclarationKind(r)){case 1:Ve(r);break;case 2:!function(r){if(!Ke(r))return;var n=e.getRightMostAssignedExpression(r.right);if(e.isEmptyObjectLiteral(n)||d===t&&l(t,n))return;if(e.isObjectLiteralExpression(n)&&e.every(n.properties,e.isShorthandPropertyAssignment))return void e.forEach(n.properties,qe);var i=e.exportAssignmentIsAlias(r)?2097152:1049092,a=U(t.symbol.exports,t.symbol,r,67108864|i,0);e.setValueDeclaration(a,r)}(r);break;case 3:Qe(r.left,r);break;case 6:!function(t){e.setParent(t.left,t),e.setParent(t.right,t),et(t.left.expression,t.left,!1,!0)}(r);break;case 4:We(r);break;case 5:var s=r.left.expression;if(e.isInJSFile(r)&&e.isIdentifier(s)){var u=_(f,s.escapedText);if(e.isThisInitializedDeclaration(null==u?void 0:u.valueDeclaration)){We(r);break}}!function(r){var n,i=tt(r.left.expression,d)||tt(r.left.expression,f);if(!e.isInJSFile(r)&&!e.isFunctionSymbol(i))return;var a=e.getLeftmostAccessExpression(r.left);if(e.isIdentifier(a)&&2097152&(null===(n=_(d,a.escapedText))||void 0===n?void 0:n.flags))return;if(e.setParent(r.left,r),e.setParent(r.right,r),e.isIdentifier(r.left.expression)&&d===t&&l(t,r.left.expression))Ve(r);else if(e.hasDynamicName(r)){Fe(r,67108868,"__computed"),Ge(r,Ye(i,r.left.expression,$e(r.left),!1,!1))}else Xe(e.cast(r.left,e.isBindableStaticNameExpression))}(r);break;case 0:break;default:e.Debug.fail("Unknown binary expression special property assignment kind")}return function(t){A&&e.isLeftHandSideExpression(t.left)&&e.isAssignmentOperator(t.operatorToken.kind)&&Ie(t,t.left)}(r);case 295:return function(e){A&&e.variableDeclaration&&Ie(e,e.variableDeclaration.name)}(r);case 217:return function(r){if(A&&79===r.expression.kind){var n=e.getErrorSpanForNode(t,r.expression);t.bindDiagnostics.push(e.createFileDiagnostic(t,n.start,n.length,e.Diagnostics.delete_cannot_be_called_on_an_identifier_in_strict_mode))}}(r);case 8:return function(r){i<1&&A&&32&r.numericLiteralFlags&&t.bindDiagnostics.push(R(r,e.Diagnostics.Octal_literals_are_not_allowed_in_strict_mode))}(r);case 222:return function(e){A&&Ie(e,e.operand)}(r);case 221:return function(e){A&&(45!==e.operator&&46!==e.operator||Ie(e,e.operand))}(r);case 251:return function(t){A&&Le(t,e.Diagnostics.with_statements_are_not_allowed_in_strict_mode)}(r);case 253:return function(t){A&&e.getEmitScriptTarget(n)>=2&&(e.isDeclarationStatement(t.statement)||e.isVariableStatement(t.statement))&&Le(t.label,e.Diagnostics.A_label_is_not_allowed_here)}(r);case 194:return void(y=!0);case 179:break;case 165:return function(t){if(e.isJSDocTemplateTag(t.parent)){var r=e.getEffectiveContainerForJSDocTemplateTag(t.parent);r?(r.locals||(r.locals=e.createSymbolTable()),U(r.locals,void 0,t,262144,526824)):ke(t,262144,526824)}else if(192===t.parent.kind){var n=function(t){var r=e.findAncestor(t,(function(t){return t.parent&&e.isConditionalTypeNode(t.parent)&&t.parent.extendsType===t}));return r&&r.parent}(t.parent);n?(n.locals||(n.locals=e.createSymbolTable()),U(n.locals,void 0,t,262144,526824)):Fe(t,262144,J(t))}else ke(t,262144,526824)}(r);case 166:return it(r);case 257:return nt(r);case 205:return r.flowNode=v,nt(r);case 169:case 168:return function(t){var r=e.isAutoAccessorPropertyDeclaration(t),n=r?13247:0;return at(t,(r?98304:4)|(t.questionToken?16777216:0),n)}(r);case 299:case 300:return at(r,4,0);case 302:return at(r,8,900095);case 176:case 177:case 178:return ke(r,131072,0);case 171:case 170:return at(r,8192|(r.questionToken?16777216:0),e.isObjectLiteralMethod(r)?0:103359);case 259:return function(r){t.isDeclarationFile||16777216&r.flags||e.isAsyncFunction(r)&&(N|=2048);Oe(r),A?(Me(r),Pe(r,16,110991)):ke(r,16,110991)}(r);case 173:return ke(r,16384,0);case 174:return at(r,32768,46015);case 175:return at(r,65536,78783);case 181:case 320:case 326:case 182:return function(t){var r=B(131072,J(t));j(r,t,131072);var n=B(2048,"__type");j(n,t,2048),n.members=e.createSymbolTable(),n.members.set(r.escapedName,r)}(r);case 184:case 325:case 197:return function(e){return Fe(e,2048,"__type")}(r);case 335:return function(t){W(t);var r=e.getHostSignatureFromJSDoc(t);r&&171!==r.kind&&j(r.symbol,r,32)}(r);case 207:return function(e){return Fe(e,4096,"__object")}(r);case 215:case 216:return function(r){t.isDeclarationFile||16777216&r.flags||e.isAsyncFunction(r)&&(N|=2048);v&&(r.flowNode=v);Oe(r);var n=r.name?r.name.escapedText:"__function";return Fe(r,16,n)}(r);case 210:switch(e.getAssignmentDeclarationKind(r)){case 7:return function(e){var t=tt(e.arguments[0]),r=308===e.parent.parent.kind;t=Ye(t,e.arguments[0],r,!1,!1),Ze(e,t,!1)}(r);case 8:return function(e){if(!Ke(e))return;var t=rt(e.arguments[0],void 0,(function(e,t){return t&&j(t,e,67110400),t}));if(t){var r=1048580;U(t.exports,t,e,r,0)}}(r);case 9:return function(e){var t=tt(e.arguments[0].expression);t&&t.valueDeclaration&&j(t,t.valueDeclaration,32);Ze(e,t,!0)}(r);case 0:break;default:return e.Debug.fail("Unknown call expression assignment declaration kind")}e.isInJSFile(r)&&function(r){!t.commonJsModuleIndicator&&e.isRequireCall(r,!1)&&Ke(r)}(r);break;case 228:case 260:return A=!0,function(r){if(260===r.kind)Pe(r,32,899503);else{Fe(r,32,r.name?r.name.escapedText:"__class"),r.name&&P.add(r.name.escapedText)}var n=r.symbol,i=B(4194308,"prototype"),a=n.exports.get(i.escapedName);a&&(r.name&&e.setParent(r.name,r),t.bindDiagnostics.push(R(a.declarations[0],e.Diagnostics.Duplicate_identifier_0,e.symbolName(i))));n.exports.set(i.escapedName,i),i.parent=n}(r);case 261:return Pe(r,64,788872);case 262:return Pe(r,524288,788968);case 263:return function(t){return e.isEnumConst(t)?Pe(t,128,899967):Pe(t,256,899327)}(r);case 264:return function(r){if(Ne(r),e.isAmbientModule(r))if(e.hasSyntacticModifier(r,1)&&Le(r,e.Diagnostics.export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always_visible),e.isModuleAugmentationExternal(r))Ae(r);else{var n=void 0;if(10===r.name.kind){var i=r.name.text;void 0===(n=e.tryParsePattern(i))&&Le(r.name,e.Diagnostics.Pattern_0_can_have_at_most_one_Asterisk_character,i)}var a=ke(r,512,110735);t.patternAmbientModules=e.append(t.patternAmbientModules,n&&!e.isString(n)?{pattern:n,symbol:a}:void 0)}else{var o=Ae(r);0!==o&&((a=r.symbol).constEnumOnlyModule=!(304&a.flags)&&2===o&&!1!==a.constEnumOnlyModule)}}(r);case 289:return function(e){return Fe(e,4096,"__jsxAttributes")}(r);case 288:return function(e,t,r){return ke(e,t,r)}(r,4,0);case 268:case 271:case 273:case 278:return ke(r,2097152,2097152);case 267:return function(r){e.some(r.modifiers)&&t.bindDiagnostics.push(R(r,e.Diagnostics.Modifiers_cannot_appear_here));var n=e.isSourceFile(r.parent)?e.isExternalModule(r.parent)?r.parent.isDeclarationFile?void 0:e.Diagnostics.Global_module_exports_may_only_appear_in_declaration_files:e.Diagnostics.Global_module_exports_may_only_appear_in_module_files:e.Diagnostics.Global_module_exports_may_only_appear_at_top_level;n?t.bindDiagnostics.push(R(r,n)):(t.symbol.globalExports=t.symbol.globalExports||e.createSymbolTable(),U(t.symbol.globalExports,t.symbol,r,2097152,2097152))}(r);case 270:return function(e){e.name&&ke(e,2097152,2097152)}(r);case 275:return function(t){d.symbol&&d.symbol.exports?t.exportClause?e.isNamespaceExport(t.exportClause)&&(e.setParent(t.exportClause,t),U(d.symbol.exports,d.symbol,t.exportClause,2097152,2097152)):U(d.symbol.exports,d.symbol,t,8388608,0):Fe(t,8388608,J(t))}(r);case 274:return function(t){if(d.symbol&&d.symbol.exports){var r=e.exportAssignmentIsAlias(t)?2097152:4,n=U(d.symbol.exports,d.symbol,t,r,67108863);t.isExportEquals&&e.setValueDeclaration(n,t)}else Fe(t,111551,J(t))}(r);case 308:return Je(r.statements),function(){if(Ne(t),e.isExternalModule(t))Ue();else if(e.isJsonSourceFile(t)){Ue();var r=t.symbol;U(t.symbol.exports,t.symbol,t,4,67108863),t.symbol=r}}();case 238:if(!e.isFunctionLikeOrClassStaticBlockDeclaration(r.parent))return;case 265:return Je(r.statements);case 343:if(326===r.parent.kind)return it(r);if(325!==r.parent.kind)break;case 350:var p=r;return ke(p,p.isBracketed||p.typeExpression&&319===p.typeExpression.type.kind?16777220:4,0);case 348:case 341:case 342:return(m||(m=[])).push(r)}}function Ue(){Fe(t,512,'"'.concat(e.removeFileExtension(t.fileName),'"'))}function Ke(e){return(!t.externalModuleIndicator||!0===t.externalModuleIndicator)&&(t.commonJsModuleIndicator||(t.commonJsModuleIndicator=e,t.externalModuleIndicator||Ue()),!0)}function Ve(t){if(Ke(t)){var r=rt(t.left.expression,void 0,(function(e,t){return t&&j(t,e,67110400),t}));if(r){var n=e.isAliasableExpression(t.right)&&(e.isExportsIdentifier(t.left.expression)||e.isModuleExportsAccessExpression(t.left.expression))?2097152:1048580;e.setParent(t.left,t),U(r.exports,r,t.left,n,0)}}}function qe(e){U(t.symbol.exports,t.symbol,e,69206016,0)}function We(t){if(e.Debug.assert(e.isInJSFile(t)),!(e.isBinaryExpression(t)&&e.isPropertyAccessExpression(t.left)&&e.isPrivateIdentifier(t.left.name)||e.isPropertyAccessExpression(t)&&e.isPrivateIdentifier(t.name))){var r=e.getThisContainer(t,!1);switch(r.kind){case 259:case 215:var n=r.symbol;if(e.isBinaryExpression(r.parent)&&63===r.parent.operatorToken.kind){var i=r.parent.left;e.isBindableStaticAccessExpression(i)&&e.isPrototypeAccess(i.expression)&&(n=tt(i.expression.expression,p))}n&&n.valueDeclaration&&(n.members=n.members||e.createSymbolTable(),e.hasDynamicName(t)?He(t,n,n.members):U(n.members,n,t,67108868,0),j(n,n.valueDeclaration,32));break;case 173:case 169:case 171:case 174:case 175:case 172:var a=r.parent,o=e.isStatic(r)?a.symbol.exports:a.symbol.members;e.hasDynamicName(t)?He(t,a.symbol,o):U(o,a.symbol,t,67108868,0,!0);break;case 308:if(e.hasDynamicName(t))break;r.commonJsModuleIndicator?U(r.symbol.exports,r.symbol,t,1048580,0):ke(t,1,111550);break;default:e.Debug.failBadSyntaxKind(r)}}}function He(e,t,r){U(r,t,e,4,0,!0,!0),Ge(e,t)}function Ge(t,r){r&&(r.assignmentDeclarationMembers||(r.assignmentDeclarationMembers=new e.Map)).set(e.getNodeId(t),t)}function Qe(t,r){var n=t.expression,i=n.expression;e.setParent(i,n),e.setParent(n,t),e.setParent(t,r),et(i,t,!0,!0)}function Xe(t){e.Debug.assert(!e.isIdentifier(t)),e.setParent(t.expression,t),et(t.expression,t,!1,!1)}function Ye(r,n,i,a,o){if(2097152&(null==r?void 0:r.flags))return r;if(i&&!a){var s=67110400;r=rt(n,r,(function(r,n,i){return n?(j(n,r,s),n):U(i?i.exports:t.jsGlobalAugmentations||(t.jsGlobalAugmentations=e.createSymbolTable()),i,r,s,110735)}))}return o&&r&&r.valueDeclaration&&j(r,r.valueDeclaration,32),r}function Ze(t,r,n){if(r&&function(t){if(1072&t.flags)return!0;var r=t.valueDeclaration;if(r&&e.isCallExpression(r))return!!e.getAssignedExpandoInitializer(r);var n=r?e.isVariableDeclaration(r)?r.initializer:e.isBinaryExpression(r)?r.right:e.isPropertyAccessExpression(r)&&e.isBinaryExpression(r.parent)?r.parent.right:void 0:void 0;if(n=n&&e.getRightMostAssignedExpression(n)){var i=e.isPrototypeAccess(e.isVariableDeclaration(r)?r.name:e.isBinaryExpression(r)?r.left:r);return!!e.getExpandoInitializer(!e.isBinaryExpression(n)||56!==n.operatorToken.kind&&60!==n.operatorToken.kind?n:n.right,i)}return!1}(r)){var i=n?r.members||(r.members=e.createSymbolTable()):r.exports||(r.exports=e.createSymbolTable()),a=0,o=0;e.isFunctionLikeDeclaration(e.getAssignedExpandoInitializer(t))?(a=8192,o=103359):e.isCallExpression(t)&&e.isBindableObjectDefinePropertyCall(t)&&(e.some(t.arguments[2].properties,(function(t){var r=e.getNameOfDeclaration(t);return!!r&&e.isIdentifier(r)&&"set"===e.idText(r)}))&&(a|=65540,o|=78783),e.some(t.arguments[2].properties,(function(t){var r=e.getNameOfDeclaration(t);return!!r&&e.isIdentifier(r)&&"get"===e.idText(r)}))&&(a|=32772,o|=46015)),0===a&&(a=4,o=0),U(i,r,t,67108864|a,-67108865&o)}}function $e(t){return e.isBinaryExpression(t.parent)?308===function(t){for(;e.isBinaryExpression(t.parent);)t=t.parent;return t.parent}(t.parent).parent.kind:308===t.parent.parent.kind}function et(e,t,r,n){var i=tt(e,d)||tt(e,f),a=$e(t);Ze(t,i=Ye(i,t.expression,a,r,n),r)}function tt(t,r){if(void 0===r&&(r=d),e.isIdentifier(t))return _(r,t.escapedText);var n=tt(t.expression);return n&&n.exports&&n.exports.get(e.getElementOrPropertyAccessName(t))}function rt(r,n,i){if(l(t,r))return t.symbol;if(e.isIdentifier(r))return i(r,tt(r),n);var a=rt(r.expression,n,i),o=e.getNameOrArgument(r);return e.isPrivateIdentifier(o)&&e.Debug.fail("unexpected PrivateIdentifier"),i(o,a&&a.exports&&a.exports.get(e.getElementOrPropertyAccessName(r)),a)}function nt(t){if(A&&Ie(t,t.name),!e.isBindingPattern(t.name)){var r=257===t.kind?t:t.parent.parent;!e.isInJSFile(t)||!e.isVariableDeclarationInitializedToBareOrAccessedRequire(r)||e.getJSDocTypeTag(t)||1&e.getCombinedModifierFlags(t)?e.isBlockOrCatchScoped(t)?Pe(t,2,111551):e.isParameterDeclaration(t)?ke(t,1,111551):ke(t,1,111550):ke(t,2097152,2097152)}}function it(t){if((343!==t.kind||326===d.kind)&&(!A||16777216&t.flags||Ie(t,t.name),e.isBindingPattern(t.name)?Fe(t,1,"__"+t.parent.parameters.indexOf(t)):ke(t,1,111551),e.isParameterPropertyDeclaration(t,t.parent))){var r=t.parent.parent;U(r.symbol.members,r.symbol,t,4|(t.questionToken?16777216:0),0)}}function at(r,n,i){return t.isDeclarationFile||16777216&r.flags||!e.isAsyncFunction(r)||(N|=2048),v&&e.isObjectLiteralOrClassExpressionMethodOrAccessor(r)&&(r.flowNode=v),e.hasDynamicName(r)?Fe(r,n,"__computed"):ke(r,n,i)}}();function u(t){return!(e.isFunctionDeclaration(t)||function(t){switch(t.kind){case 261:case 262:return!0;case 264:return 1!==r(t);case 263:return e.hasSyntacticModifier(t,2048);default:return!1}}(t)||e.isEnumDeclaration(t)||e.isVariableStatement(t)&&!(3&e.getCombinedNodeFlags(t))&&t.declarationList.declarations.some((function(e){return!e.initializer})))}function l(t,r){var n=0,i=e.createQueue();for(i.enqueue(r);!i.isEmpty()&&n<100;){if(n++,r=i.dequeue(),e.isExportsIdentifier(r)||e.isModuleExportsAccessExpression(r))return!0;if(e.isIdentifier(r)){var a=_(t,r.escapedText);if(a&&a.valueDeclaration&&e.isVariableDeclaration(a.valueDeclaration)&&a.valueDeclaration.initializer){var o=a.valueDeclaration.initializer;i.enqueue(o),e.isAssignmentExpression(o,!0)&&(i.enqueue(o.left),i.enqueue(o.right))}}}return!1}function _(t,r){var n=t.locals&&t.locals.get(r);return n?n.exportSymbol||n:e.isSourceFile(t)&&t.jsGlobalAugmentations&&t.jsGlobalAugmentations.has(r)?t.jsGlobalAugmentations.get(r):t.symbol&&t.symbol.exports&&t.symbol.exports.get(r)}e.bindSourceFile=function(t,r){e.performance.mark("beforeBind"),e.perfLogger.logStartBindFile(""+t.fileName),c(t,r),e.perfLogger.logStopBindFile(),e.performance.mark("afterBind"),e.performance.measure("Bind","beforeBind","afterBind")},e.isExportsOrModuleExportsOrAlias=l}(_||(_={})),function(e){e.createGetSymbolWalker=function(t,r,n,i,a,o,s,c,u,l){return function(_){void 0===_&&(_=function(){return!0});var d=[],p=[];return{walkType:function(t){try{return f(t),{visitedTypes:e.getOwnValues(d),visitedSymbols:e.getOwnValues(p)}}finally{e.clear(d),e.clear(p)}},walkSymbol:function(t){try{return y(t),{visitedTypes:e.getOwnValues(d),visitedSymbols:e.getOwnValues(p)}}finally{e.clear(d),e.clear(p)}}};function f(t){if(t&&(!d[t.id]&&(d[t.id]=t,!y(t.symbol)))){if(524288&t.flags){var r=t,n=r.objectFlags;4&n&&function(t){f(t.target),e.forEach(l(t),f)}(t),32&n&&function(e){f(e.typeParameter),f(e.constraintType),f(e.templateType),f(e.modifiersType)}(t),3&n&&(m(a=t),e.forEach(a.typeParameters,f),e.forEach(i(a),f),f(a.thisType)),24&n&&m(r)}var a;262144&t.flags&&function(e){f(c(e))}(t),3145728&t.flags&&function(t){e.forEach(t.types,f)}(t),4194304&t.flags&&function(e){f(e.type)}(t),8388608&t.flags&&function(e){f(e.objectType),f(e.indexType),f(e.constraint)}(t)}}function g(i){var a=r(i);a&&f(a.type),e.forEach(i.typeParameters,f);for(var o=0,s=i.parameters;o<s.length;o++){y(s[o])}f(t(i)),f(n(i))}function m(e){for(var t=a(e),r=0,n=t.indexInfos;r<n.length;r++){var i=n[r];f(i.keyType),f(i.type)}for(var o=0,s=t.callSignatures;o<s.length;o++){g(s[o])}for(var c=0,u=t.constructSignatures;c<u.length;c++){g(u[c])}for(var l=0,_=t.properties;l<_.length;l++){y(_[l])}}function y(t){if(!t)return!1;var r=e.getSymbolId(t);return!p[r]&&(p[r]=t,!_(t)||(f(o(t)),t.exports&&t.exports.forEach(y),e.forEach(t.declarations,(function(e){if(e.type&&183===e.type.kind){var t=e.type;y(s(u(t.exprName)))}})),!1))}}}}(_||(_={})),function(e){var t,r,n,i=/^".+"$/,s="(anonymous)",u=1,l=1,_=1,d=1;!function(e){e[e.AllowsSyncIterablesFlag=1]="AllowsSyncIterablesFlag",e[e.AllowsAsyncIterablesFlag=2]="AllowsAsyncIterablesFlag",e[e.AllowsStringInputFlag=4]="AllowsStringInputFlag",e[e.ForOfFlag=8]="ForOfFlag",e[e.YieldStarFlag=16]="YieldStarFlag",e[e.SpreadFlag=32]="SpreadFlag",e[e.DestructuringFlag=64]="DestructuringFlag",e[e.PossiblyOutOfBounds=128]="PossiblyOutOfBounds",e[e.Element=1]="Element",e[e.Spread=33]="Spread",e[e.Destructuring=65]="Destructuring",e[e.ForOf=13]="ForOf",e[e.ForAwaitOf=15]="ForAwaitOf",e[e.YieldStar=17]="YieldStar",e[e.AsyncYieldStar=19]="AsyncYieldStar",e[e.GeneratorReturnType=1]="GeneratorReturnType",e[e.AsyncGeneratorReturnType=2]="AsyncGeneratorReturnType"}(t||(t={})),function(e){e[e.Yield=0]="Yield",e[e.Return=1]="Return",e[e.Next=2]="Next"}(r||(r={})),function(e){e[e.Normal=0]="Normal",e[e.FunctionReturn=1]="FunctionReturn",e[e.GeneratorNext=2]="GeneratorNext",e[e.GeneratorYield=3]="GeneratorYield"}(n||(n={})),function(e){e[e.None=0]="None",e[e.TypeofEQString=1]="TypeofEQString",e[e.TypeofEQNumber=2]="TypeofEQNumber",e[e.TypeofEQBigInt=4]="TypeofEQBigInt",e[e.TypeofEQBoolean=8]="TypeofEQBoolean",e[e.TypeofEQSymbol=16]="TypeofEQSymbol",e[e.TypeofEQObject=32]="TypeofEQObject",e[e.TypeofEQFunction=64]="TypeofEQFunction",e[e.TypeofEQHostObject=128]="TypeofEQHostObject",e[e.TypeofNEString=256]="TypeofNEString",e[e.TypeofNENumber=512]="TypeofNENumber",e[e.TypeofNEBigInt=1024]="TypeofNEBigInt",e[e.TypeofNEBoolean=2048]="TypeofNEBoolean",e[e.TypeofNESymbol=4096]="TypeofNESymbol",e[e.TypeofNEObject=8192]="TypeofNEObject",e[e.TypeofNEFunction=16384]="TypeofNEFunction",e[e.TypeofNEHostObject=32768]="TypeofNEHostObject",e[e.EQUndefined=65536]="EQUndefined",e[e.EQNull=131072]="EQNull",e[e.EQUndefinedOrNull=262144]="EQUndefinedOrNull",e[e.NEUndefined=524288]="NEUndefined",e[e.NENull=1048576]="NENull",e[e.NEUndefinedOrNull=2097152]="NEUndefinedOrNull",e[e.Truthy=4194304]="Truthy",e[e.Falsy=8388608]="Falsy",e[e.IsUndefined=16777216]="IsUndefined",e[e.IsNull=33554432]="IsNull",e[e.IsUndefinedOrNull=50331648]="IsUndefinedOrNull",e[e.All=134217727]="All",e[e.BaseStringStrictFacts=3735041]="BaseStringStrictFacts",e[e.BaseStringFacts=12582401]="BaseStringFacts",e[e.StringStrictFacts=16317953]="StringStrictFacts",e[e.StringFacts=16776705]="StringFacts",e[e.EmptyStringStrictFacts=12123649]="EmptyStringStrictFacts",e[e.EmptyStringFacts=12582401]="EmptyStringFacts",e[e.NonEmptyStringStrictFacts=7929345]="NonEmptyStringStrictFacts",e[e.NonEmptyStringFacts=16776705]="NonEmptyStringFacts",e[e.BaseNumberStrictFacts=3734786]="BaseNumberStrictFacts",e[e.BaseNumberFacts=12582146]="BaseNumberFacts",e[e.NumberStrictFacts=16317698]="NumberStrictFacts",e[e.NumberFacts=16776450]="NumberFacts",e[e.ZeroNumberStrictFacts=12123394]="ZeroNumberStrictFacts",e[e.ZeroNumberFacts=12582146]="ZeroNumberFacts",e[e.NonZeroNumberStrictFacts=7929090]="NonZeroNumberStrictFacts",e[e.NonZeroNumberFacts=16776450]="NonZeroNumberFacts",e[e.BaseBigIntStrictFacts=3734276]="BaseBigIntStrictFacts",e[e.BaseBigIntFacts=12581636]="BaseBigIntFacts",e[e.BigIntStrictFacts=16317188]="BigIntStrictFacts",e[e.BigIntFacts=16775940]="BigIntFacts",e[e.ZeroBigIntStrictFacts=12122884]="ZeroBigIntStrictFacts",e[e.ZeroBigIntFacts=12581636]="ZeroBigIntFacts",e[e.NonZeroBigIntStrictFacts=7928580]="NonZeroBigIntStrictFacts",e[e.NonZeroBigIntFacts=16775940]="NonZeroBigIntFacts",e[e.BaseBooleanStrictFacts=3733256]="BaseBooleanStrictFacts",e[e.BaseBooleanFacts=12580616]="BaseBooleanFacts",e[e.BooleanStrictFacts=16316168]="BooleanStrictFacts",e[e.BooleanFacts=16774920]="BooleanFacts",e[e.FalseStrictFacts=12121864]="FalseStrictFacts",e[e.FalseFacts=12580616]="FalseFacts",e[e.TrueStrictFacts=7927560]="TrueStrictFacts",e[e.TrueFacts=16774920]="TrueFacts",e[e.SymbolStrictFacts=7925520]="SymbolStrictFacts",e[e.SymbolFacts=16772880]="SymbolFacts",e[e.ObjectStrictFacts=7888800]="ObjectStrictFacts",e[e.ObjectFacts=16736160]="ObjectFacts",e[e.FunctionStrictFacts=7880640]="FunctionStrictFacts",e[e.FunctionFacts=16728e3]="FunctionFacts",e[e.VoidFacts=9830144]="VoidFacts",e[e.UndefinedFacts=26607360]="UndefinedFacts",e[e.NullFacts=42917664]="NullFacts",e[e.EmptyObjectStrictFacts=83427327]="EmptyObjectStrictFacts",e[e.EmptyObjectFacts=83886079]="EmptyObjectFacts",e[e.UnknownFacts=83886079]="UnknownFacts",e[e.AllTypeofNE=556800]="AllTypeofNE",e[e.OrFactsMask=8256]="OrFactsMask",e[e.AndFactsMask=134209471]="AndFactsMask"}(e.TypeFacts||(e.TypeFacts={}));var p,f,g,m,y,v,h,b=new e.Map(e.getEntries({string:256,number:512,bigint:1024,boolean:2048,symbol:4096,undefined:524288,object:8192,function:16384}));!function(e){e[e.Type=0]="Type",e[e.ResolvedBaseConstructorType=1]="ResolvedBaseConstructorType",e[e.DeclaredType=2]="DeclaredType",e[e.ResolvedReturnType=3]="ResolvedReturnType",e[e.ImmediateBaseConstraint=4]="ImmediateBaseConstraint",e[e.EnumTagType=5]="EnumTagType",e[e.ResolvedTypeArguments=6]="ResolvedTypeArguments",e[e.ResolvedBaseTypes=7]="ResolvedBaseTypes",e[e.WriteType=8]="WriteType"}(p||(p={})),function(e){e[e.Normal=0]="Normal",e[e.Contextual=1]="Contextual",e[e.Inferential=2]="Inferential",e[e.SkipContextSensitive=4]="SkipContextSensitive",e[e.SkipGenericFunctions=8]="SkipGenericFunctions",e[e.IsForSignatureHelp=16]="IsForSignatureHelp",e[e.IsForStringLiteralArgumentCompletions=32]="IsForStringLiteralArgumentCompletions",e[e.RestBindingElement=64]="RestBindingElement"}(e.CheckMode||(e.CheckMode={})),function(e){e[e.BivariantCallback=1]="BivariantCallback",e[e.StrictCallback=2]="StrictCallback",e[e.IgnoreReturnTypes=4]="IgnoreReturnTypes",e[e.StrictArity=8]="StrictArity",e[e.Callback=3]="Callback"}(e.SignatureCheckMode||(e.SignatureCheckMode={})),function(e){e[e.None=0]="None",e[e.Source=1]="Source",e[e.Target=2]="Target"}(f||(f={})),function(e){e[e.None=0]="None",e[e.Source=1]="Source",e[e.Target=2]="Target",e[e.Both=3]="Both"}(g||(g={})),function(e){e[e.IncludeReadonly=1]="IncludeReadonly",e[e.ExcludeReadonly=2]="ExcludeReadonly",e[e.IncludeOptional=4]="IncludeOptional",e[e.ExcludeOptional=8]="ExcludeOptional"}(m||(m={})),function(e){e[e.None=0]="None",e[e.Source=1]="Source",e[e.Target=2]="Target",e[e.Both=3]="Both"}(y||(y={})),function(e){e.resolvedExports="resolvedExports",e.resolvedMembers="resolvedMembers"}(v||(v={})),function(e){e[e.Local=0]="Local",e[e.Parameter=1]="Parameter"}(h||(h={}));var x,D,S,T,C=e.and(I,(function(t){return!e.isAccessor(t)}));!function(e){e[e.GetAccessor=1]="GetAccessor",e[e.SetAccessor=2]="SetAccessor",e[e.PropertyAssignment=4]="PropertyAssignment",e[e.Method=8]="Method",e[e.PrivateStatic=16]="PrivateStatic",e[e.GetOrSetAccessor=3]="GetOrSetAccessor",e[e.PropertyAssignmentOrMethod=12]="PropertyAssignmentOrMethod"}(x||(x={})),function(e){e[e.None=0]="None",e[e.ExportValue=1]="ExportValue",e[e.ExportType=2]="ExportType",e[e.ExportNamespace=4]="ExportNamespace"}(D||(D={})),function(e){e[e.None=0]="None",e[e.StrongArityForUntypedJS=1]="StrongArityForUntypedJS",e[e.VoidIsNonOptional=2]="VoidIsNonOptional"}(S||(S={})),function(e){e[e.Uppercase=0]="Uppercase",e[e.Lowercase=1]="Lowercase",e[e.Capitalize=2]="Capitalize",e[e.Uncapitalize=3]="Uncapitalize"}(T||(T={}));var E,k=new e.Map(e.getEntries({Uppercase:0,Lowercase:1,Capitalize:2,Uncapitalize:3}));function N(){}function A(){this.flags=0}function F(e){return e.id||(e.id=l,l++),e.id}function P(e){return e.id||(e.id=u,u++),e.id}function w(t,r){var n=e.getModuleInstanceState(t);return 1===n||r&&2===n}function I(e){return 259!==e.kind&&171!==e.kind||!!e.body}function O(t){switch(t.parent.kind){case 273:case 278:return e.isIdentifier(t);default:return e.isDeclarationName(t)}}function M(e){switch(e){case 0:return"yieldType";case 1:return"returnType";case 2:return"nextType"}}function L(e){return!!(1&e.flags)}function R(e){return!!(2&e.flags)}e.getNodeId=F,e.getSymbolId=P,e.isInstantiatedModule=w,e.createTypeChecker=function(t){var r,n,u,l,p,f=e.memoize((function(){var r=new e.Map;return t.getSourceFiles().forEach((function(e){e.resolvedModules&&e.resolvedModules.forEach((function(e){e&&e.packageId&&r.set(e.packageId.name,".d.ts"===e.extension||!!r.get(e.packageId.name))}))})),r})),g=[],m=function(e){g.push(e)},y=e.objectAllocator.getSymbolConstructor(),v=e.objectAllocator.getTypeConstructor(),h=e.objectAllocator.getSignatureConstructor(),x=0,D=0,S=0,T=0,B=0,j=0,J=0,z=e.createSymbolTable(),U=[1],K=t.getCompilerOptions(),V=e.getEmitScriptTarget(K),q=e.getEmitModuleKind(K),W=e.getUseDefineForClassFields(K),H=e.getAllowSyntheticDefaultImports(K),G=e.getStrictOptionValue(K,"strictNullChecks"),Q=e.getStrictOptionValue(K,"strictFunctionTypes"),X=e.getStrictOptionValue(K,"strictBindCallApply"),Y=e.getStrictOptionValue(K,"strictPropertyInitialization"),Z=e.getStrictOptionValue(K,"noImplicitAny"),$=e.getStrictOptionValue(K,"noImplicitThis"),ee=e.getStrictOptionValue(K,"useUnknownInCatchVariables"),te=!!K.keyofStringsOnly,re=K.suppressExcessPropertyErrors?0:8192,ne=K.exactOptionalPropertyTypes,ie=function(){var t=e.createBinaryExpressionTrampoline((function(t,r,i){r?(r.stackIndex++,r.skip=!1,n(r,void 0),a(r,void 0)):r={checkMode:i,skip:!1,stackIndex:0,typeStack:[void 0,void 0]};if(e.isInJSFile(t)&&e.getAssignedExpandoInitializer(t))return r.skip=!0,a(r,wD(t.right,i)),r;if(function(t){var r=t.left,n=t.operatorToken,i=t.right;60===n.kind&&(!e.isBinaryExpression(r)||56!==r.operatorToken.kind&&55!==r.operatorToken.kind||WE(r,e.Diagnostics._0_and_1_operations_cannot_be_mixed_without_parentheses,e.tokenToString(r.operatorToken.kind),e.tokenToString(n.kind)),!e.isBinaryExpression(i)||56!==i.operatorToken.kind&&55!==i.operatorToken.kind||WE(i,e.Diagnostics._0_and_1_operations_cannot_be_mixed_without_parentheses,e.tokenToString(i.operatorToken.kind),e.tokenToString(n.kind)))}(t),63===t.operatorToken.kind&&(207===t.left.kind||206===t.left.kind))return r.skip=!0,a(r,aD(t.left,wD(t.right,i),i,108===t.right.kind)),r;return r}),(function(e,t,n){if(!t.skip)return r(t,e)}),(function(t,r,o){if(!r.skip){var s=i(r);e.Debug.assertIsDefined(s),n(r,s),a(r,void 0);var c=t.kind;if(55===c||56===c||60===c){if(55===c){for(var u=o.parent;214===u.kind||e.isBinaryExpression(u)&&(55===u.operatorToken.kind||56===u.operatorToken.kind);)u=u.parent;GS(o.left,s,e.isIfStatement(u)?u.thenStatement:void 0)}QS(s,o.left)}}}),(function(e,t,n){if(!t.skip)return r(t,e)}),(function(t,r){var o;if(r.skip)o=i(r);else{var s=function(e){return e.typeStack[e.stackIndex]}(r);e.Debug.assertIsDefined(s);var c=i(r);e.Debug.assertIsDefined(c),o=cD(t.left,t.operatorToken,t.right,s,c,t)}return r.skip=!1,n(r,void 0),a(r,void 0),r.stackIndex--,o}),(function(e,t,r){return a(e,t),e}));return function(r,n){var i=t(r,n);return e.Debug.assertIsDefined(i),i};function r(t,r){if(e.isBinaryExpression(r))return r;a(t,wD(r,t.checkMode))}function n(e,t){e.typeStack[e.stackIndex]=t}function i(e){return e.typeStack[e.stackIndex+1]}function a(e,t){e.typeStack[e.stackIndex+1]=t}}(),ae=function(){var r,n=t.getResolvedTypeReferenceDirectives();n&&(r=new e.Map,n.forEach((function(e,r,n){if(e&&e.resolvedFileName){var i=t.getSourceFile(e.resolvedFileName);i&&a(i,r,n)}})));return{getReferencedExportContainer:jC,getReferencedImportDeclaration:JC,getReferencedDeclarationWithCollidingName:UC,isDeclarationWithCollidingName:KC,isValueAliasDeclaration:function(t){var r=e.getParseTreeNode(t);return!r||VC(r)},hasGlobalName:uE,isReferencedAliasDeclaration:function(t,r){var n=e.getParseTreeNode(t);return!n||GC(n,r)},getNodeCheckFlags:function(t){var r=e.getParseTreeNode(t);return r?eE(r):0},isTopLevelValueImportEqualsWithEntityName:qC,isDeclarationVisible:vo,isImplementationOfOverload:QC,isRequiredInitializedParameter:XC,isOptionalUninitializedParameterProperty:YC,isExpandoFunctionDeclaration:ZC,getPropertiesOfContainerFunction:$C,createTypeOfDeclaration:oE,createReturnTypeOfSignatureDeclaration:sE,createTypeOfExpression:cE,createLiteralConstValue:pE,isSymbolAccessible:Xa,isEntityNameVisible:ro,getConstantValue:function(t){var r=e.getParseTreeNode(t,rE);return r?nE(r):void 0},collectLinkedAliases:ho,getReferencedValueDeclaration:_E,getTypeReferenceSerializationKind:aE,isOptionalParameter:Bu,moduleExportsSomeValue:BC,isArgumentsLocalBinding:RC,getExternalModuleFileFromDeclaration:function(t){var r=e.getParseTreeNode(t,e.hasPossibleExternalModuleReference);return r&&mE(r)},getTypeReferenceDirectivesForEntityName:function(e){if(!r)return;var t;164===e.parent.kind?t=1160127:(t=790504,(79===e.kind&&km(e)||208===e.kind&&!function(e){return e.parent&&230===e.parent.kind&&e.parent.parent&&294===e.parent.parent.kind}(e))&&(t=1160127));var n=aa(e,t,!0);return n&&n!==we?i(n,t):void 0},getTypeReferenceDirectivesForSymbol:i,isLiteralConstDeclaration:dE,isLateBound:function(t){var r=e.getParseTreeNode(t,e.isDeclaration),n=r&&Sa(r);return!!(n&&4096&e.getCheckFlags(n))},getJsxFactoryEntity:fE,getJsxFragmentFactoryEntity:gE,getAllAccessorDeclarations:function(t){var r=175===(t=e.getParseTreeNode(t,e.isGetOrSetAccessorDeclaration)).kind?174:175,n=e.getDeclarationOfKind(Sa(t),r);return{firstAccessor:n&&n.pos<t.pos?n:t,secondAccessor:n&&n.pos<t.pos?t:n,setAccessor:175===t.kind?t:n,getAccessor:174===t.kind?t:n}},getSymbolOfExternalModuleSpecifier:function(e){return ca(e,e,void 0)},isBindingCapturedByNode:function(t,r){var n=e.getParseTreeNode(t),i=e.getParseTreeNode(r);return!!n&&!!i&&(e.isVariableDeclaration(i)||e.isBindingElement(i))&&function(t,r){var n=di(t);return!!n&&e.contains(n.capturedBlockScopeBindings,Sa(r))}(n,i)},getDeclarationStatementsForSourceFile:function(t,r,n,i){var a=e.getParseTreeNode(t);e.Debug.assert(a&&308===a.kind,"Non-sourcefile node passed into getDeclarationsForSourceFile");var o=Sa(t);return o?o.exports?oe.symbolTableToDeclarationStatements(o.exports,t,r,n,i):[]:t.locals?oe.symbolTableToDeclarationStatements(t.locals,t,r,n,i):[]},isImportRequiredByAugmentation:function(t){var r=e.getSourceFileOfNode(t);if(!r.symbol)return!1;var n=mE(t);if(!n)return!1;if(n===r)return!1;for(var i=ha(r.symbol),a=0,o=e.arrayFrom(i.values());a<o.length;a++){var s=o[a];if(s.mergeId){var c=Da(s);if(c.declarations)for(var u=0,l=c.declarations;u<l.length;u++){var _=l[u];if(e.getSourceFileOfNode(_)===n)return!0}}}return!1}};function i(t,n){if(r&&function(t){if(!t.declarations)return!1;var n=t;for(;;){var i=Ta(n);if(!i)break;n=i}if(n.valueDeclaration&&308===n.valueDeclaration.kind&&512&n.flags)return!1;for(var a=0,o=t.declarations;a<o.length;a++){var s=o[a],c=e.getSourceFileOfNode(s);if(r.has(c.path))return!0}return!1}(t)){for(var i,a=0,o=t.declarations;a<o.length;a++){var s=o[a];if(s.symbol&&s.symbol.flags&n){var c=e.getSourceFileOfNode(s),u=r.get(c.path);if(!u)return;(i||(i=[])).push(u)}}return i}}function a(n,i,o){if(!r.has(n.path)){r.set(n.path,[i,o]);for(var s=0,c=n.referencedFiles;s<c.length;s++){var u=c[s],l=u.fileName,_=u.resolutionMode,d=e.resolveTripleslashReference(l,n.fileName),p=t.getSourceFile(d);p&&a(p,i,_||n.impliedNodeFormat)}}}}(),oe=function(){return{typeToTypeNode:function(e,t,r,i){return n(t,r,i,(function(t){return u(e,t)}))},indexInfoToIndexSignatureDeclaration:function(e,t,r,i){return n(t,r,i,(function(t){return g(e,t,void 0)}))},signatureToSignatureDeclaration:function(e,t,r,i,a){return n(r,i,a,(function(r){return m(e,t,r)}))},symbolToEntityName:function(e,t,r,i,a){return n(r,i,a,(function(r){return I(e,r,t,!1)}))},symbolToExpression:function(e,t,r,i,a){return n(r,i,a,(function(r){return O(e,r,t)}))},symbolToTypeParameterDeclarations:function(e,t,r,i){return n(t,r,i,(function(t){return S(e,t)}))},symbolToParameterDeclaration:function(e,t,r,i){return n(t,r,i,(function(t){return h(e,t)}))},typeParameterToDeclaration:function(e,t,r,i){return n(t,r,i,(function(t){return v(e,t)}))},symbolTableToDeclarationStatements:function(t,r,i,c,l){return n(r,i,c,(function(r){return function(t,r,n){var i=ue(e.factory.createPropertyDeclaration,171,!0),c=ue((function(t,r,n,i){return e.factory.createPropertySignature(t,r,n,i)}),170,!1),l=r.enclosingDeclaration,_=[],d=new e.Set,p=[],f=r;r=o(o({},f),{usedSymbolNames:new e.Set(f.usedSymbolNames),remappedSymbolNames:new e.Map,tracker:o(o({},f.tracker),{trackSymbol:function(e,t,n){if(0===Xa(e,t,n,!1).accessibility){var i=D(e,r,n);4&e.flags||L(i[0])}else if(f.tracker&&f.tracker.trackSymbol)return f.tracker.trackSymbol(e,t,n);return!1}})}),r.tracker=s(r,r.tracker),e.forEachEntry(t,(function(t,r){ve(t,e.unescapeLeadingUnderscores(r))}));var y=!n,h=t.get("export=");h&&t.size>1&&2097152&h.flags&&(t=e.createSymbolTable()).set("export=",h);return F(t),k(_);function b(e){return!!e&&79===e.kind}function x(t){return e.isVariableStatement(t)?e.filter(e.map(t.declarationList.declarations,e.getNameOfDeclaration),b):e.filter([e.getNameOfDeclaration(t)],b)}function S(t){var r=e.find(t,e.isExportAssignment),n=e.findIndex(t,e.isModuleDeclaration),i=-1!==n?t[n]:void 0;if(i&&r&&r.isExportEquals&&e.isIdentifier(r.expression)&&e.isIdentifier(i.name)&&e.idText(i.name)===e.idText(r.expression)&&i.body&&e.isModuleBlock(i.body)){var o=e.filter(t,(function(t){return!!(1&e.getEffectiveModifierFlags(t))})),s=i.name,c=i.body;if(e.length(o)&&(i=e.factory.updateModuleDeclaration(i,i.modifiers,i.name,c=e.factory.updateModuleBlock(c,e.factory.createNodeArray(a(a([],i.body.statements,!0),[e.factory.createExportDeclaration(void 0,!1,e.factory.createNamedExports(e.map(e.flatMap(o,(function(e){return x(e)})),(function(t){return e.factory.createExportSpecifier(!1,void 0,t)}))),void 0)],!1)))),t=a(a(a([],t.slice(0,n),!0),[i],!1),t.slice(n+1),!0)),!e.find(t,(function(t){return t!==i&&e.nodeHasName(t,s)}))){_=[];var u=!e.some(c.statements,(function(t){return e.hasSyntacticModifier(t,1)||e.isExportAssignment(t)||e.isExportDeclaration(t)}));e.forEach(c.statements,(function(e){q(e,u?1:0)})),t=a(a([],e.filter(t,(function(e){return e!==i&&e!==r})),!0),_,!0)}}return t}function T(t){var r=e.filter(t,(function(t){return e.isExportDeclaration(t)&&!t.moduleSpecifier&&!!t.exportClause&&e.isNamedExports(t.exportClause)}));if(e.length(r)>1){var n=e.filter(t,(function(t){return!e.isExportDeclaration(t)||!!t.moduleSpecifier||!t.exportClause}));t=a(a([],n,!0),[e.factory.createExportDeclaration(void 0,!1,e.factory.createNamedExports(e.flatMap(r,(function(t){return e.cast(t.exportClause,e.isNamedExports).elements}))),void 0)],!1)}var i=e.filter(t,(function(t){return e.isExportDeclaration(t)&&!!t.moduleSpecifier&&!!t.exportClause&&e.isNamedExports(t.exportClause)}));if(e.length(i)>1){var o=e.group(i,(function(t){return e.isStringLiteral(t.moduleSpecifier)?">"+t.moduleSpecifier.text:">"}));if(o.length!==i.length)for(var s=function(r){r.length>1&&(t=a(a([],e.filter(t,(function(e){return-1===r.indexOf(e)})),!0),[e.factory.createExportDeclaration(void 0,!1,e.factory.createNamedExports(e.flatMap(r,(function(t){return e.cast(t.exportClause,e.isNamedExports).elements}))),r[0].moduleSpecifier)],!1))},c=0,u=o;c<u.length;c++){s(u[c])}}return t}function C(t){var r=e.findIndex(t,(function(t){return e.isExportDeclaration(t)&&!t.moduleSpecifier&&!t.assertClause&&!!t.exportClause&&e.isNamedExports(t.exportClause)}));if(r>=0){var n=t[r],i=e.mapDefined(n.exportClause.elements,(function(r){if(!r.propertyName){var n=e.indicesOf(t),i=e.filter(n,(function(n){return e.nodeHasName(t[n],r.name)}));if(e.length(i)&&e.every(i,(function(r){return e.canHaveExportModifier(t[r])}))){for(var a=0,o=i;a<o.length;a++){var s=o[a];t[s]=N(t[s])}return}}return r}));e.length(i)?t[r]=e.factory.updateExportDeclaration(n,n.modifiers,n.isTypeOnly,e.factory.updateNamedExports(n.exportClause,i),n.moduleSpecifier,n.assertClause):e.orderedRemoveItemAt(t,r)}return t}function k(t){return t=C(t=T(t=S(t))),l&&(e.isSourceFile(l)&&e.isExternalOrCommonJsModule(l)||e.isModuleDeclaration(l))&&(!e.some(t,e.isExternalModuleIndicator)||!e.hasScopeMarker(t)&&e.some(t,e.needsScopeMarker))&&t.push(e.createEmptyExports(e.factory)),t}function N(t){var r=-3&(1|e.getEffectiveModifierFlags(t));return e.factory.updateModifiers(t,r)}function A(t){var r=-2&e.getEffectiveModifierFlags(t);return e.factory.updateModifiers(t,r)}function F(t,r,n){r||p.push(new e.Map),t.forEach((function(e){w(e,!1,!!n)})),r||(p[p.length-1].forEach((function(e){w(e,!0,!!n)})),p.pop())}function w(t,n,i){var a=Da(t);if(!d.has(P(a))&&(d.add(P(a)),!n||e.length(t.declarations)&&e.some(t.declarations,(function(t){return!!e.findAncestor(t,(function(e){return e===l}))})))){var c=r;r=function(t){var r=o({},t);r.typeParameterNames&&(r.typeParameterNames=new e.Map(r.typeParameterNames));r.typeParameterNamesByText&&(r.typeParameterNamesByText=new e.Set(r.typeParameterNamesByText));r.typeParameterSymbolList&&(r.typeParameterSymbolList=new e.Set(r.typeParameterSymbolList));return r.tracker=s(r,r.tracker),r}(r),M(t,n,i),r.reportedDiagnostic&&(f.reportedDiagnostic=r.reportedDiagnostic),r=c}}function M(t,i,a){var o,s,c,u,_=e.unescapeLeadingUnderscores(t.escapedName),d="default"===t.escapedName;if(!i||131072&r.flags||!e.isStringANonContextualKeyword(_)||d){var p=d&&!!(-113&t.flags||16&t.flags&&e.length(Qc(ys(t))))&&!(2097152&t.flags),f=!p&&!i&&e.isStringANonContextualKeyword(_)&&!d;(p||f)&&(i=!0);var g=(i?0:1)|(d&&!p?1024:0),m=1536&t.flags&&7&t.flags&&"export="!==t.escapedName,y=m&&ce(ys(t),t);if((8208&t.flags||y)&&Z(ys(t),t,ve(t,_),g),524288&t.flags&&W(t,_,g),7&t.flags&&"export="!==t.escapedName&&!(4194304&t.flags)&&!(32&t.flags)&&!(8192&t.flags)&&!y)if(a){se(t)&&(f=!1,p=!1)}else{var v=ys(t),h=ve(t,_);if(16&t.flags||!ce(v,t)){var b=2&t.flags?Uy(t)?2:1:(null===(o=t.parent)||void 0===o?void 0:o.valueDeclaration)&&e.isSourceFile(null===(s=t.parent)||void 0===s?void 0:s.valueDeclaration)?2:void 0,x=!p&&4&t.flags?me(h,t):h,D=t.declarations&&e.find(t.declarations,(function(t){return e.isVariableDeclaration(t)}));D&&e.isVariableDeclarationList(D.parent)&&1===D.parent.declarations.length&&(D=D.parent.parent);var S=null===(c=t.declarations)||void 0===c?void 0:c.find(e.isPropertyAccessExpression);if(S&&e.isBinaryExpression(S.parent)&&e.isIdentifier(S.parent.right)&&(null===(u=v.symbol)||void 0===u?void 0:u.valueDeclaration)&&e.isSourceFile(v.symbol.valueDeclaration)){var T=h===S.parent.right.escapedText?void 0:S.parent.right;q(e.factory.createExportDeclaration(void 0,!1,e.factory.createNamedExports([e.factory.createExportSpecifier(!1,T,h)])),0),r.tracker.trackSymbol(v.symbol,r.enclosingDeclaration,111551)}else{q(e.setTextRange(e.factory.createVariableStatement(void 0,e.factory.createVariableDeclarationList([e.factory.createVariableDeclaration(x,void 0,J(r,v,t,l,L,n))],b)),D),x!==h?-2&g:g),x===h||i||(q(e.factory.createExportDeclaration(void 0,!1,e.factory.createNamedExports([e.factory.createExportSpecifier(!1,x,h)])),0),f=!1,p=!1)}}else Z(v,t,h,g)}if(384&t.flags&&Y(t,_,g),32&t.flags&&(4&t.flags&&t.valueDeclaration&&e.isBinaryExpression(t.valueDeclaration.parent)&&e.isClassExpression(t.valueDeclaration.parent.right)?ae(t,ve(t,_),g):ne(t,ve(t,_),g)),(1536&t.flags&&(!m||Q(t))||y)&&X(t,_,g),64&t.flags&&!(32&t.flags)&&H(t,_,g),2097152&t.flags&&ae(t,ve(t,_),g),4&t.flags&&"export="===t.escapedName&&se(t),8388608&t.flags&&t.declarations)for(var C=0,k=t.declarations;C<k.length;C++){var N=k[C],A=sa(N,N.moduleSpecifier);A&&q(e.factory.createExportDeclaration(void 0,!1,void 0,e.factory.createStringLiteral(E(A,r))),0)}p?q(e.factory.createExportAssignment(void 0,!1,e.factory.createIdentifier(ve(t,_))),0):f&&q(e.factory.createExportDeclaration(void 0,!1,e.factory.createNamedExports([e.factory.createExportSpecifier(!1,ve(t,_),_)])),0)}else r.encounteredError=!0}function L(t){if(!e.some(t.declarations,e.isParameterDeclaration)){e.Debug.assertIsDefined(p[p.length-1]),me(e.unescapeLeadingUnderscores(t.escapedName),t);var r=!!(2097152&t.flags)&&!e.some(t.declarations,(function(t){return!!e.findAncestor(t,e.isExportDeclaration)||e.isNamespaceExport(t)||e.isImportEqualsDeclaration(t)&&!e.isExternalModuleReference(t.moduleReference)}));p[r?0:p.length-1].set(P(t),t)}}function j(t){return e.isSourceFile(t)&&(e.isExternalOrCommonJsModule(t)||e.isJsonSourceFile(t))||e.isAmbientModule(t)&&!e.isGlobalScopeAugmentation(t)}function q(t,n){if(e.canHaveModifiers(t)){var i=0,a=r.enclosingDeclaration&&(e.isJSDocTypeAlias(r.enclosingDeclaration)?e.getSourceFileOfNode(r.enclosingDeclaration):r.enclosingDeclaration);1&n&&a&&(j(a)||e.isModuleDeclaration(a))&&e.canHaveExportModifier(t)&&(i|=1),!y||1&i||a&&16777216&a.flags||!(e.isEnumDeclaration(t)||e.isVariableStatement(t)||e.isFunctionDeclaration(t)||e.isClassDeclaration(t)||e.isModuleDeclaration(t))||(i|=2),1024&n&&(e.isClassDeclaration(t)||e.isInterfaceDeclaration(t)||e.isFunctionDeclaration(t))&&(i|=1024),i&&(t=e.factory.updateModifiers(t,i|e.getEffectiveModifierFlags(t)))}_.push(t)}function W(t,i,a){var o,s=Rs(t),c=_i(t).typeParameters,l=e.map(c,(function(e){return v(e,r)})),_=null===(o=t.declarations)||void 0===o?void 0:o.find(e.isJSDocTypeAlias),d=e.getTextOfJSDocComment(_?_.comment||_.parent.comment:void 0),p=r.flags;r.flags|=8388608;var f=r.enclosingDeclaration;r.enclosingDeclaration=_;var g=_&&_.typeExpression&&e.isJSDocTypeExpression(_.typeExpression)&&U(r,_.typeExpression.type,L,n)||u(s,r);q(e.setSyntheticLeadingComments(e.factory.createTypeAliasDeclaration(void 0,ve(t,i),l,g),d?[{kind:3,text:"*\n * "+d.replace(/\n/g,"\n * ")+"\n ",pos:-1,end:-1,hasTrailingNewLine:!0}]:[]),a),r.flags=p,r.enclosingDeclaration=f}function H(t,n,i){var o=Ls(t),s=Cs(t),c=e.map(s,(function(e){return v(e,r)})),u=Is(o),l=e.length(u)?j_(u):void 0,_=e.flatMap(Qc(o),(function(e){return le(e,l)})),d=_e(0,o,l,176),p=_e(1,o,l,177),f=de(o,l),g=e.length(u)?[e.factory.createHeritageClause(94,e.mapDefined(u,(function(e){return fe(e,111551)})))]:void 0;q(e.factory.createInterfaceDeclaration(void 0,ve(t,n),c,g,a(a(a(a([],f,!0),p,!0),d,!0),_,!0)),i)}function G(t){return t.exports?e.filter(e.arrayFrom(t.exports.values()),te):[]}function Q(t){return e.every(G(t),(function(e){return!(111551&Yi(Qi(e)))}))}function X(t,n,i){var a=G(t),o=e.arrayToMultiMap(a,(function(e){return e.parent&&e.parent===t?"real":"merged"})),s=o.get("real")||e.emptyArray,c=o.get("merged")||e.emptyArray;e.length(s)&&ee(s,l=ve(t,n),i,!!(67108880&t.flags));if(e.length(c)){var u=e.getSourceFileOfNode(r.enclosingDeclaration),l=ve(t,n),_=e.factory.createModuleBlock([e.factory.createExportDeclaration(void 0,!1,e.factory.createNamedExports(e.mapDefined(e.filter(c,(function(e){return"export="!==e.escapedName})),(function(n){var i,a,o=e.unescapeLeadingUnderscores(n.escapedName),s=ve(n,o),c=n.declarations&&Fi(n);if(!u||(c?u===e.getSourceFileOfNode(c):e.some(n.declarations,(function(t){return e.getSourceFileOfNode(t)===u})))){var l=c&&Hi(c,!0);L(l||n);var _=l?ve(l,e.unescapeLeadingUnderscores(l.escapedName)):s;return e.factory.createExportSpecifier(!1,o===_?void 0:_,o)}null===(a=null===(i=r.tracker)||void 0===i?void 0:i.reportNonlocalAugmentation)||void 0===a||a.call(i,u,t,n)}))))]);q(e.factory.createModuleDeclaration(void 0,e.factory.createIdentifier(l),_,16),0)}}function Y(t,r,n){q(e.factory.createEnumDeclaration(e.factory.createModifiersFromModifierFlags(tD(t)?2048:0),ve(t,r),e.map(e.filter(Qc(ys(t)),(function(e){return!!(8&e.flags)})),(function(t){var r=t.declarations&&t.declarations[0]&&e.isEnumMember(t.declarations[0])?nE(t.declarations[0]):void 0;return e.factory.createEnumMember(e.unescapeLeadingUnderscores(t.escapedName),void 0===r?void 0:"string"==typeof r?e.factory.createStringLiteral(r):e.factory.createNumericLiteral(r))}))),n)}function Z(t,i,a,o){for(var s=0,c=Su(t,0);s<c.length;s++){var u=c[s],l=m(u,259,r,{name:e.factory.createIdentifier(a),privateSymbolVisitor:L,bundledImports:n});q(e.setTextRange(l,$(u)),o)}1536&i.flags&&i.exports&&i.exports.size||ee(e.filter(Qc(t),te),a,o,!0)}function $(t){if(t.declaration&&t.declaration.parent){if(e.isBinaryExpression(t.declaration.parent)&&5===e.getAssignmentDeclarationKind(t.declaration.parent))return t.declaration.parent;if(e.isVariableDeclaration(t.declaration.parent)&&t.declaration.parent.parent)return t.declaration.parent.parent}return t.declaration}function ee(t,n,i,a){if(e.length(t)){var s=e.arrayToMultiMap(t,(function(t){return!e.length(t.declarations)||e.some(t.declarations,(function(t){return e.getSourceFileOfNode(t)===e.getSourceFileOfNode(r.enclosingDeclaration)}))?"local":"remote"})).get("local")||e.emptyArray,c=e.parseNodeFactory.createModuleDeclaration(void 0,e.factory.createIdentifier(n),e.factory.createModuleBlock([]),16);e.setParent(c,l),c.locals=e.createSymbolTable(t),c.symbol=t[0].parent;var u=_;_=[];var d=y;y=!1;var p=o(o({},r),{enclosingDeclaration:c}),f=r;r=p,F(e.createSymbolTable(s),a,!0),r=f,y=d;var g=_;_=u;var m=e.map(g,(function(t){return e.isExportAssignment(t)&&!t.isExportEquals&&e.isIdentifier(t.expression)?e.factory.createExportDeclaration(void 0,!1,e.factory.createNamedExports([e.factory.createExportSpecifier(!1,t.expression,e.factory.createIdentifier("default"))])):t})),v=e.every(m,(function(t){return e.hasSyntacticModifier(t,1)}))?e.map(m,A):m;q(c=e.factory.updateModuleDeclaration(c,c.modifiers,c.name,e.factory.createModuleBlock(v)),i)}}function te(t){return!!(2887656&t.flags)||!(4194304&t.flags||"prototype"===t.escapedName||t.valueDeclaration&&e.isStatic(t.valueDeclaration)&&e.isClassLike(t.valueDeclaration.parent))}function re(t){var i=e.mapDefined(t,(function(t){var i,a=r.enclosingDeclaration;r.enclosingDeclaration=t;var o=t.expression;if(e.isEntityNameExpression(o)){if(e.isIdentifier(o)&&""===e.idText(o))return c(void 0);var s=void 0;if(s=(i=z(o,r,L)).introducesError,o=i.node,s)return c(void 0)}return c(e.factory.createExpressionWithTypeArguments(o,e.map(t.typeArguments,(function(e){return U(r,e,L,n)||u(ip(e),r)}))));function c(e){return r.enclosingDeclaration=a,e}}));if(i.length===t.length)return i}function ne(t,n,o){var s,c,u=null===(s=t.declarations)||void 0===s?void 0:s.find(e.isClassLike),l=r.enclosingDeclaration;r.enclosingDeclaration=u||l;var _=Cs(t),d=e.map(_,(function(e){return v(e,r)})),p=Ls(t),f=Is(p),g=u&&e.getEffectiveImplementsTypeNodes(u),m=g&&re(g)||e.mapDefined(function(t){var r=e.emptyArray;if(t.symbol.declarations)for(var n=0,i=t.symbol.declarations;n<i.length;n++){var a=i[n],o=e.getEffectiveImplementsTypeNodes(a);if(o)for(var s=0,c=o;s<c.length;s++){var u=ip(c[s]);ko(u)||(r===e.emptyArray?r=[u]:r.push(u))}}return r}(p),ge),y=ys(t),h=!!(null===(c=y.symbol)||void 0===c?void 0:c.valueDeclaration)&&e.isClassLike(y.symbol.valueDeclaration),b=h?Ps(y):Le,x=a(a([],e.length(f)?[e.factory.createHeritageClause(94,e.map(f,(function(e){return pe(e,b,n)})))]:[],!0),e.length(m)?[e.factory.createHeritageClause(117,m)]:[],!0),D=function(t,r,n){if(!e.length(r))return n;var i=new e.Map;e.forEach(n,(function(e){i.set(e.escapedName,e)}));for(var a=0,o=r;a<o.length;a++)for(var s=0,c=Qc(_c(o[a],t.thisType));s<c.length;s++){var u=c[s],l=i.get(u.escapedName);l&&u.parent===l.parent&&i.delete(u.escapedName)}return e.arrayFrom(i.values())}(p,f,Qc(p)),S=e.filter(D,(function(t){var r=t.valueDeclaration;return!(!r||e.isNamedDeclaration(r)&&e.isPrivateIdentifier(r.name))})),T=e.some(D,(function(t){var r=t.valueDeclaration;return!!r&&e.isNamedDeclaration(r)&&e.isPrivateIdentifier(r.name)}))?[e.factory.createPropertyDeclaration(void 0,e.factory.createPrivateIdentifier("#private"),void 0,void 0,void 0)]:e.emptyArray,C=e.flatMap(S,(function(e){return i(e,!1,f[0])})),E=e.flatMap(e.filter(Qc(y),(function(e){return!(4194304&e.flags||"prototype"===e.escapedName||te(e))})),(function(e){return i(e,!0,b)})),k=!h&&!!t.valueDeclaration&&e.isInJSFile(t.valueDeclaration)&&!e.some(Su(y,1))?[e.factory.createConstructorDeclaration(e.factory.createModifiersFromModifierFlags(8),[],void 0)]:_e(1,y,b,173),N=de(p,f[0]);r.enclosingDeclaration=l,q(e.setTextRange(e.factory.createClassDeclaration(void 0,n,d,x,a(a(a(a(a([],N,!0),E,!0),k,!0),C,!0),T,!0)),t.declarations&&e.filter(t.declarations,(function(t){return e.isClassDeclaration(t)||e.isClassExpression(t)}))[0]),o)}function ie(t){return e.firstDefined(t,(function(t){if(e.isImportSpecifier(t)||e.isExportSpecifier(t))return e.idText(t.propertyName||t.name);if(e.isBinaryExpression(t)||e.isExportAssignment(t)){var r=e.isExportAssignment(t)?t.expression:t.right;if(e.isPropertyAccessExpression(r))return e.idText(r.name)}if(Pi(t)){var n=e.getNameOfDeclaration(t);if(n&&e.isIdentifier(n))return e.idText(n)}}))}function ae(t,n,i){var a,o,s,c,u,l=Fi(t);if(!l)return e.Debug.fail();var _=Da(Hi(l,!0));if(_){var d=e.isShorthandAmbientModuleSymbol(_)&&ie(t.declarations)||e.unescapeLeadingUnderscores(_.escapedName);"export="===d&&(e.getESModuleInterop(K)||K.allowSyntheticDefaultImports)&&(d="default");var p=ve(_,d);switch(L(_),l.kind){case 205:if(257===(null===(o=null===(a=l.parent)||void 0===a?void 0:a.parent)||void 0===o?void 0:o.kind)){var f=E(_.parent||_,r),g=l.propertyName;q(e.factory.createImportDeclaration(void 0,e.factory.createImportClause(!1,void 0,e.factory.createNamedImports([e.factory.createImportSpecifier(!1,g&&e.isIdentifier(g)?e.factory.createIdentifier(e.idText(g)):void 0,e.factory.createIdentifier(n))])),e.factory.createStringLiteral(f),void 0),0);break}e.Debug.failBadSyntaxKind((null===(s=l.parent)||void 0===s?void 0:s.parent)||l,"Unhandled binding element grandparent kind in declaration serialization");break;case 300:223===(null===(u=null===(c=l.parent)||void 0===c?void 0:c.parent)||void 0===u?void 0:u.kind)&&oe(e.unescapeLeadingUnderscores(t.escapedName),p);break;case 257:if(e.isPropertyAccessExpression(l.initializer)){var m=l.initializer,y=e.factory.createUniqueName(n),v=E(_.parent||_,r);q(e.factory.createImportEqualsDeclaration(void 0,!1,y,e.factory.createExternalModuleReference(e.factory.createStringLiteral(v))),0),q(e.factory.createImportEqualsDeclaration(void 0,!1,e.factory.createIdentifier(n),e.factory.createQualifiedName(y,m.name)),i);break}case 268:if("export="===_.escapedName&&e.some(_.declarations,e.isJsonSourceFile)){se(t);break}var h=!(512&_.flags||e.isVariableDeclaration(l));q(e.factory.createImportEqualsDeclaration(void 0,!1,e.factory.createIdentifier(n),h?I(_,r,67108863,!1):e.factory.createExternalModuleReference(e.factory.createStringLiteral(E(_,r)))),h?i:0);break;case 267:q(e.factory.createNamespaceExportDeclaration(e.idText(l.name)),0);break;case 270:q(e.factory.createImportDeclaration(void 0,e.factory.createImportClause(!1,e.factory.createIdentifier(n),void 0),e.factory.createStringLiteral(E(_.parent||_,r)),void 0),0);break;case 271:q(e.factory.createImportDeclaration(void 0,e.factory.createImportClause(!1,void 0,e.factory.createNamespaceImport(e.factory.createIdentifier(n))),e.factory.createStringLiteral(E(_,r)),void 0),0);break;case 277:q(e.factory.createExportDeclaration(void 0,!1,e.factory.createNamespaceExport(e.factory.createIdentifier(n)),e.factory.createStringLiteral(E(_,r))),0);break;case 273:q(e.factory.createImportDeclaration(void 0,e.factory.createImportClause(!1,void 0,e.factory.createNamedImports([e.factory.createImportSpecifier(!1,n!==d?e.factory.createIdentifier(d):void 0,e.factory.createIdentifier(n))])),e.factory.createStringLiteral(E(_.parent||_,r)),void 0),0);break;case 278:var b=l.parent.parent.moduleSpecifier;oe(e.unescapeLeadingUnderscores(t.escapedName),b?d:p,b&&e.isStringLiteralLike(b)?e.factory.createStringLiteral(b.text):void 0);break;case 274:se(t);break;case 223:case 208:case 209:"default"===t.escapedName||"export="===t.escapedName?se(t):oe(n,p);break;default:return e.Debug.failBadSyntaxKind(l,"Unhandled alias declaration kind in symbol serializer!")}}}function oe(t,r,n){q(e.factory.createExportDeclaration(void 0,!1,e.factory.createNamedExports([e.factory.createExportSpecifier(!1,t!==r?r:void 0,t)]),n),0)}function se(t){if(4194304&t.flags)return!1;var i=e.unescapeLeadingUnderscores(t.escapedName),a="export="===i,o=a||"default"===i,s=t.declarations&&Fi(t),c=s&&Hi(s,!0);if(c&&e.length(c.declarations)&&e.some(c.declarations,(function(t){return e.getSourceFileOfNode(t)===e.getSourceFileOfNode(l)}))){var u=s&&(e.isExportAssignment(s)||e.isBinaryExpression(s)?e.getExportAssignmentExpression(s):e.getPropertyAssignmentAliasLikeExpression(s)),d=u&&e.isEntityNameExpression(u)?function(t){switch(t.kind){case 79:return t;case 163:do{t=t.left}while(79!==t.kind);return t;case 208:do{if(e.isModuleExportsAccessExpression(t.expression)&&!e.isPrivateIdentifier(t.name))return t.name;t=t.expression}while(79!==t.kind);return t}}(u):void 0,p=d&&aa(d,67108863,!0,!0,l);(p||c)&&L(p||c);var f=r.tracker.trackSymbol;if(r.tracker.trackSymbol=function(){return!1},o)_.push(e.factory.createExportAssignment(void 0,a,O(c,r,67108863)));else if(d===u&&d)oe(i,e.idText(d));else if(u&&e.isClassExpression(u))oe(i,ve(c,e.symbolName(c)));else{var g=me(i,t);q(e.factory.createImportEqualsDeclaration(void 0,!1,e.factory.createIdentifier(g),I(c,r,67108863,!1)),0),oe(i,g)}return r.tracker.trackSymbol=f,!0}g=me(i,t);var m=Rg(ys(Da(t)));return ce(m,t)?Z(m,t,g,o?0:1):q(e.factory.createVariableStatement(void 0,e.factory.createVariableDeclarationList([e.factory.createVariableDeclaration(g,void 0,J(r,m,t,l,L,n))],2)),c&&4&c.flags&&"export="===c.escapedName?2:i===g?1:0),o?(_.push(e.factory.createExportAssignment(void 0,a,e.factory.createIdentifier(g))),!0):i!==g&&(oe(i,g),!0)}function ce(t,n){var i=e.getSourceFileOfNode(r.enclosingDeclaration);return 48&e.getObjectFlags(t)&&!e.length(Nu(t))&&!lo(t)&&!(!e.length(e.filter(Qc(t),te))&&!e.length(Su(t,0)))&&!e.length(Su(t,1))&&!B(n,l)&&!(t.symbol&&e.some(t.symbol.declarations,(function(t){return e.getSourceFileOfNode(t)!==i})))&&!e.some(Qc(t),(function(e){return nc(e.escapedName)}))&&!e.some(Qc(t),(function(t){return e.some(t.declarations,(function(t){return e.getSourceFileOfNode(t)!==i}))}))&&e.every(Qc(t),(function(t){return e.isIdentifierText(e.symbolName(t),V)}))}function ue(t,i,a){return function(o,s,c){var u,_,d,p,f,g=e.getDeclarationModifierFlagsFromSymbol(o),y=!!(8&g);if(s&&2887656&o.flags)return[];if(4194304&o.flags||c&&xu(c,o.escapedName)&&Vx(xu(c,o.escapedName))===Vx(o)&&(16777216&o.flags)==(16777216&xu(c,o.escapedName).flags)&&jp(ys(o),Co(c,o.escapedName)))return[];var v=-513&g|(s?32:0),h=R(o,r),b=null===(u=o.declarations)||void 0===u?void 0:u.find(e.or(e.isPropertyDeclaration,e.isAccessor,e.isVariableDeclaration,e.isPropertySignature,e.isBinaryExpression,e.isPropertyAccessExpression));if(98304&o.flags&&a){var x=[];if(65536&o.flags&&x.push(e.setTextRange(e.factory.createSetAccessorDeclaration(e.factory.createModifiersFromModifierFlags(v),h,[e.factory.createParameterDeclaration(void 0,void 0,"arg",void 0,y?void 0:J(r,ys(o),o,l,L,n))],void 0),(null===(_=o.declarations)||void 0===_?void 0:_.find(e.isSetAccessor))||b)),32768&o.flags){var D=8&g;x.push(e.setTextRange(e.factory.createGetAccessorDeclaration(e.factory.createModifiersFromModifierFlags(v),h,[],D?void 0:J(r,ys(o),o,l,L,n),void 0),(null===(d=o.declarations)||void 0===d?void 0:d.find(e.isGetAccessor))||b))}return x}if(98311&o.flags)return e.setTextRange(t(e.factory.createModifiersFromModifierFlags((Vx(o)?64:0)|v),h,16777216&o.flags?e.factory.createToken(57):void 0,y?void 0:J(r,ms(o),o,l,L,n),void 0),(null===(p=o.declarations)||void 0===p?void 0:p.find(e.or(e.isPropertyDeclaration,e.isVariableDeclaration)))||b);if(8208&o.flags){var S=Su(ys(o),0);if(8&v)return e.setTextRange(t(e.factory.createModifiersFromModifierFlags((Vx(o)?64:0)|v),h,16777216&o.flags?e.factory.createToken(57):void 0,void 0,void 0),(null===(f=o.declarations)||void 0===f?void 0:f.find(e.isFunctionLikeDeclaration))||S[0]&&S[0].declaration||o.declarations&&o.declarations[0]);for(var T=[],C=0,E=S;C<E.length;C++){var k=E[C],N=m(k,i,r,{name:h,questionToken:16777216&o.flags?e.factory.createToken(57):void 0,modifiers:v?e.factory.createModifiersFromModifierFlags(v):void 0}),A=k.declaration&&e.isPrototypePropertyAssignment(k.declaration.parent)?k.declaration.parent:k.declaration;T.push(e.setTextRange(N,A))}return T}return e.Debug.fail("Unhandled class member kind! ".concat(o.__debugFlags||o.flags))}}function le(e,t){return c(e,!1,t)}function _e(t,n,i,a){var o=Su(n,t);if(1===t){if(!i&&e.every(o,(function(t){return 0===e.length(t.parameters)})))return[];if(i){var s=Su(i,1);if(!e.length(s)&&e.every(o,(function(t){return 0===e.length(t.parameters)})))return[];if(s.length===o.length){for(var c=!1,u=0;u<s.length;u++)if(!Uf(o[u],s[u],!1,!1,!0,Jp)){c=!0;break}if(!c)return[]}}for(var l=0,_=0,d=o;_<d.length;_++){var p=d[_];p.declaration&&(l|=e.getSelectedEffectiveModifierFlags(p.declaration,24))}if(l)return[e.setTextRange(e.factory.createConstructorDeclaration(e.factory.createModifiersFromModifierFlags(l),[],void 0),o[0].declaration)]}for(var f=[],g=0,y=o;g<y.length;g++){var v=y[g],h=m(v,a,r);f.push(e.setTextRange(h,v.declaration))}return f}function de(e,t){for(var n=[],i=0,a=Nu(e);i<a.length;i++){var o=a[i];if(t){var s=Au(t,o.keyType);if(s&&jp(o.type,s.type))continue}n.push(g(o,r,void 0))}return n}function pe(t,n,i){var a=fe(t,111551);if(a)return a;var o=me("".concat(i,"_base"));return q(e.factory.createVariableStatement(void 0,e.factory.createVariableDeclarationList([e.factory.createVariableDeclaration(o,void 0,u(n,r))],2)),0),e.factory.createExpressionWithTypeArguments(e.factory.createIdentifier(o),void 0)}function fe(t,n){var i,a;if(t.target&&Ga(t.target.symbol,l,n)?(i=e.map(Tl(t),(function(e){return u(e,r)})),a=O(t.target.symbol,r,788968)):t.symbol&&Ga(t.symbol,l,n)&&(a=O(t.symbol,r,788968)),a)return e.factory.createExpressionWithTypeArguments(a,i)}function ge(t){var n=fe(t,788968);return n||(t.symbol?e.factory.createExpressionWithTypeArguments(O(t.symbol,r,788968),void 0):void 0)}function me(e,t){var n,i,a=t?P(t):void 0;if(a&&r.remappedSymbolNames.has(a))return r.remappedSymbolNames.get(a);t&&(e=ye(t,e));for(var o=0,s=e;null===(n=r.usedSymbolNames)||void 0===n?void 0:n.has(e);)o++,e="".concat(s,"_").concat(o);return null===(i=r.usedSymbolNames)||void 0===i||i.add(e),a&&r.remappedSymbolNames.set(a,e),e}function ye(t,n){if("default"===n||"__class"===n||"__function"===n){var i=r.flags;r.flags|=16777216;var a=yo(t,r);r.flags=i,n=a.length>0&&e.isSingleOrDoubleQuote(a.charCodeAt(0))?e.stripQuotes(a):a}return"default"===n?n="_default":"export="===n&&(n="_exports"),n=e.isIdentifierText(n,V)&&!e.isStringANonContextualKeyword(n)?n:"_"+n.replace(/[^a-zA-Z0-9]/g,"_")}function ve(e,t){var n=P(e);return r.remappedSymbolNames.has(n)?r.remappedSymbolNames.get(n):(t=ye(e,t),r.remappedSymbolNames.set(n,t),t)}}(t,r,l)}))},symbolToNode:function(t,r,i,a,o){return n(i,a,o,(function(n){return function(t,r,n){if(1073741824&r.flags){if(t.valueDeclaration){var i=e.getNameOfDeclaration(t.valueDeclaration);if(i&&e.isComputedPropertyName(i))return i}var a=_i(t).nameType;if(a&&9216&a.flags)return r.enclosingDeclaration=a.symbol.valueDeclaration,e.factory.createComputedPropertyName(O(a.symbol,r,n))}return O(t,r,n)}(t,n,r)}))}};function n(r,n,i,a){var o,c;e.Debug.assert(void 0===r||0==(8&r.flags));var u={enclosingDeclaration:r,flags:n||0,tracker:i&&i.trackSymbol?i:{trackSymbol:function(){return!1},moduleResolverHost:134217728&n?{getCommonSourceDirectory:t.getCommonSourceDirectory?function(){return t.getCommonSourceDirectory()}:function(){return""},getCurrentDirectory:function(){return t.getCurrentDirectory()},getSymlinkCache:e.maybeBind(t,t.getSymlinkCache),getPackageJsonInfoCache:function(){var e;return null===(e=t.getPackageJsonInfoCache)||void 0===e?void 0:e.call(t)},useCaseSensitiveFileNames:e.maybeBind(t,t.useCaseSensitiveFileNames),redirectTargetsMap:t.redirectTargetsMap,getProjectReferenceRedirect:function(e){return t.getProjectReferenceRedirect(e)},isSourceOfProjectReferenceRedirect:function(e){return t.isSourceOfProjectReferenceRedirect(e)},fileExists:function(e){return t.fileExists(e)},getFileIncludeReasons:function(){return t.getFileIncludeReasons()},readFile:t.readFile?function(e){return t.readFile(e)}:void 0}:void 0},encounteredError:!1,reportedDiagnostic:!1,visitedTypes:void 0,symbolDepth:void 0,inferTypeParameters:void 0,approximateLength:0};u.tracker=s(u,u.tracker);var l=a(u);return u.truncating&&1&u.flags&&(null===(c=null===(o=u.tracker)||void 0===o?void 0:o.reportTruncationError)||void 0===c||c.call(o)),u.encounteredError?void 0:l}function s(e,t){var r=t.trackSymbol;return o(o({},t),{reportCyclicStructureError:n(t.reportCyclicStructureError),reportInaccessibleThisError:n(t.reportInaccessibleThisError),reportInaccessibleUniqueSymbolError:n(t.reportInaccessibleUniqueSymbolError),reportLikelyUnsafeImportRequiredError:n(t.reportLikelyUnsafeImportRequiredError),reportNonlocalAugmentation:n(t.reportNonlocalAugmentation),reportPrivateInBaseOfClassExpression:n(t.reportPrivateInBaseOfClassExpression),reportNonSerializableProperty:n(t.reportNonSerializableProperty),trackSymbol:r&&function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];var i=r.apply(void 0,t);return i&&(e.reportedDiagnostic=!0),i}});function n(t){return t?function(){for(var r=[],n=0;n<arguments.length;n++)r[n]=arguments[n];return e.reportedDiagnostic=!0,t.apply(void 0,r)}:t}}function c(t){return t.truncating?t.truncating:t.truncating=t.approximateLength>(1&t.flags?e.noTruncationMaximumTruncationLength:e.defaultMaximumTruncationLength)}function u(t,n){var i=n.flags,a=function(t,n){r&&r.throwIfCancellationRequested&&r.throwIfCancellationRequested();var i=8388608&n.flags;if(n.flags&=-8388609,!t)return 262144&n.flags?(n.approximateLength+=3,e.factory.createKeywordTypeNode(131)):void(n.encounteredError=!0);536870912&n.flags||(t=mu(t));if(1&t.flags)return t.aliasSymbol?e.factory.createTypeReferenceNode(k(t.aliasSymbol),f(t.aliasTypeArguments,n)):t===Je?e.addSyntheticLeadingComment(e.factory.createKeywordTypeNode(131),3,"unresolved"):(n.approximateLength+=3,e.factory.createKeywordTypeNode(t===Ue?139:131));if(2&t.flags)return e.factory.createKeywordTypeNode(157);if(4&t.flags)return n.approximateLength+=6,e.factory.createKeywordTypeNode(152);if(8&t.flags)return n.approximateLength+=6,e.factory.createKeywordTypeNode(148);if(64&t.flags)return n.approximateLength+=6,e.factory.createKeywordTypeNode(160);if(16&t.flags&&!t.aliasSymbol)return n.approximateLength+=7,e.factory.createKeywordTypeNode(134);if(1024&t.flags&&!(1048576&t.flags)){var a=Ta(t.symbol),o=N(a,n,788968);if(qs(a)===t)return o;var s=e.symbolName(t.symbol);return e.isIdentifierText(s,0)?G(o,e.factory.createTypeReferenceNode(s,void 0)):e.isImportTypeNode(o)?(o.isTypeOf=!0,e.factory.createIndexedAccessTypeNode(o,e.factory.createLiteralTypeNode(e.factory.createStringLiteral(s)))):e.isTypeReferenceNode(o)?e.factory.createIndexedAccessTypeNode(e.factory.createTypeQueryNode(o.typeName),e.factory.createLiteralTypeNode(e.factory.createStringLiteral(s))):e.Debug.fail("Unhandled type node kind returned from `symbolToTypeNode`.")}if(1056&t.flags)return N(t.symbol,n,788968);if(128&t.flags)return n.approximateLength+=t.value.length+2,e.factory.createLiteralTypeNode(e.setEmitFlags(e.factory.createStringLiteral(t.value,!!(268435456&n.flags)),16777216));if(256&t.flags){var _=t.value;return n.approximateLength+=(""+_).length,e.factory.createLiteralTypeNode(_<0?e.factory.createPrefixUnaryExpression(40,e.factory.createNumericLiteral(-_)):e.factory.createNumericLiteral(_))}if(2048&t.flags)return n.approximateLength+=e.pseudoBigIntToString(t.value).length+1,e.factory.createLiteralTypeNode(e.factory.createBigIntLiteral(t.value));if(512&t.flags)return n.approximateLength+=t.intrinsicName.length,e.factory.createLiteralTypeNode("true"===t.intrinsicName?e.factory.createTrue():e.factory.createFalse());if(8192&t.flags){if(!(1048576&n.flags)){if(Ha(t.symbol,n.enclosingDeclaration))return n.approximateLength+=6,N(t.symbol,n,111551);n.tracker.reportInaccessibleUniqueSymbolError&&n.tracker.reportInaccessibleUniqueSymbolError()}return n.approximateLength+=13,e.factory.createTypeOperatorNode(156,e.factory.createKeywordTypeNode(153))}if(16384&t.flags)return n.approximateLength+=4,e.factory.createKeywordTypeNode(114);if(32768&t.flags)return n.approximateLength+=9,e.factory.createKeywordTypeNode(155);if(65536&t.flags)return n.approximateLength+=4,e.factory.createLiteralTypeNode(e.factory.createNull());if(131072&t.flags)return n.approximateLength+=5,e.factory.createKeywordTypeNode(144);if(4096&t.flags)return n.approximateLength+=6,e.factory.createKeywordTypeNode(153);if(67108864&t.flags)return n.approximateLength+=6,e.factory.createKeywordTypeNode(149);if(e.isThisTypeParameter(t))return 4194304&n.flags&&(n.encounteredError||32768&n.flags||(n.encounteredError=!0),n.tracker.reportInaccessibleThisError&&n.tracker.reportInaccessibleThisError()),n.approximateLength+=4,e.factory.createThisTypeNode();if(!i&&t.aliasSymbol&&(16384&n.flags||Wa(t.aliasSymbol,n.enclosingDeclaration))){var v=f(t.aliasTypeArguments,n);return!Ra(t.aliasSymbol.escapedName)||32&t.aliasSymbol.flags?1===e.length(v)&&t.aliasSymbol===Qt.symbol?e.factory.createArrayTypeNode(v[0]):N(t.aliasSymbol,n,788968,v):e.factory.createTypeReferenceNode(e.factory.createIdentifier(""),v)}var h=e.getObjectFlags(t);if(4&h)return e.Debug.assert(!!(524288&t.flags)),t.node?q(t,H):H(t);if(262144&t.flags||3&h){if(262144&t.flags&&e.contains(n.inferTypeParameters,t)){n.approximateLength+=e.symbolName(t.symbol).length+6;var b=void 0,x=Yc(t);if(x){var D=gl(t,!0);D&&jp(x,D)||(n.approximateLength+=9,b=x&&u(x,n))}return e.factory.createInferTypeNode(y(t,n,b))}if(4&n.flags&&262144&t.flags&&!Wa(t.symbol,n.enclosingDeclaration)){var S=w(t,n);return n.approximateLength+=e.idText(S).length,e.factory.createTypeReferenceNode(e.factory.createIdentifier(e.idText(S)),void 0)}if(t.symbol)return N(t.symbol,n,788968);var T=(t===jt||t===Jt)&&p&&p.symbol?(t===Jt?"sub-":"super-")+e.symbolName(p.symbol):"?";return e.factory.createTypeReferenceNode(e.factory.createIdentifier(T),void 0)}1048576&t.flags&&t.origin&&(t=t.origin);if(3145728&t.flags){var C=1048576&t.flags?function(e){for(var t=[],r=0,n=0;n<e.length;n++){var i=e[n];if(r|=i.flags,!(98304&i.flags)){if(1536&i.flags){var a=512&i.flags?at:zs(i);if(1048576&a.flags){var o=a.types.length;if(n+o<=e.length&&Gd(e[n+o-1])===Gd(a.types[o-1])){t.push(a),n+=o-1;continue}}}t.push(i)}}65536&r&&t.push(Qe);32768&r&&t.push(qe);return t||e}(t.types):t.types;if(1===e.length(C))return u(C[0],n);var E=f(C,n,!0);return E&&E.length>0?1048576&t.flags?e.factory.createUnionTypeNode(E):e.factory.createIntersectionTypeNode(E):void(n.encounteredError||262144&n.flags||(n.encounteredError=!0))}if(48&h)return e.Debug.assert(!!(524288&t.flags)),V(t);if(4194304&t.flags){var A=t.type;n.approximateLength+=6;var I=u(A,n);return e.factory.createTypeOperatorNode(141,I)}if(134217728&t.flags){var O=t.texts,M=t.types,L=e.factory.createTemplateHead(O[0]),R=e.factory.createNodeArray(e.map(M,(function(t,r){return e.factory.createTemplateLiteralTypeSpan(u(t,n),(r<M.length-1?e.factory.createTemplateMiddle:e.factory.createTemplateTail)(O[r+1]))})));return n.approximateLength+=2,e.factory.createTemplateLiteralType(L,R)}if(268435456&t.flags){var B=u(t.type,n);return N(t.symbol,n,788968,[B])}if(8388608&t.flags){var j=u(t.objectType,n);I=u(t.indexType,n);return n.approximateLength+=2,e.factory.createIndexedAccessTypeNode(j,I)}if(16777216&t.flags)return q(t,(function(e){return J(e)}));if(33554432&t.flags)return u(t.baseType,n);return e.Debug.fail("Should be unreachable.");function J(t){var r=u(t.checkType,n);if(n.approximateLength+=15,4&n.flags&&t.root.isDistributive&&!(262144&t.checkType.flags)){var i=La(ri(262144,"T")),a=w(i,n),o=e.factory.createTypeReferenceNode(a);n.approximateLength+=37;var s=vp(t.root.checkType,i,t.mapper),c=n.inferTypeParameters;n.inferTypeParameters=t.root.inferTypeParameters;var l=u(Fp(t.root.extendsType,s),n);n.inferTypeParameters=c;var _=z(Fp(ip(t.root.node.trueType),s)),d=z(Fp(ip(t.root.node.falseType),s));return e.factory.createConditionalTypeNode(r,e.factory.createInferTypeNode(e.factory.createTypeParameterDeclaration(void 0,e.factory.cloneNode(o.typeName))),e.factory.createConditionalTypeNode(e.factory.createTypeReferenceNode(e.factory.cloneNode(a)),u(t.checkType,n),e.factory.createConditionalTypeNode(o,l,_,d),e.factory.createKeywordTypeNode(144)),e.factory.createKeywordTypeNode(144))}var p=n.inferTypeParameters;n.inferTypeParameters=t.root.inferTypeParameters;var f=u(t.extendsType,n);n.inferTypeParameters=p;var g=z(Pd(t)),m=z(wd(t));return e.factory.createConditionalTypeNode(r,f,g,m)}function z(e){var t,r,i;return 1048576&e.flags?(null===(t=n.visitedTypes)||void 0===t?void 0:t.has(T_(e)))?(131072&n.flags||(n.encounteredError=!0,null===(i=null===(r=n.tracker)||void 0===r?void 0:r.reportCyclicStructureError)||void 0===i||i.call(r)),l(n)):q(e,(function(e){return u(e,n)})):u(e,n)}function U(e){return jc(e)&&!(262144&Jc(e).flags)}function K(t){e.Debug.assert(!!(524288&t.flags));var r,i,a=t.declaration.readonlyToken?e.factory.createToken(t.declaration.readonlyToken.kind):void 0,o=t.declaration.questionToken?e.factory.createToken(t.declaration.questionToken.kind):void 0;if(jc(t)){if(U(t)&&4&n.flags){var s=w(La(ri(262144,"T")),n);i=e.factory.createTypeReferenceNode(s)}r=e.factory.createTypeOperatorNode(141,i||u(Jc(t),n))}else r=u(Mc(t),n);var c=y(Oc(t),n,r),l=t.declaration.nameType?u(Lc(t),n):void 0,_=u(Eg(Rc(t),!!(4&zc(t))),n),d=e.factory.createMappedTypeNode(a,c,l,o,_,void 0);n.approximateLength+=10;var p=e.setEmitFlags(d,1);if(U(t)&&4&n.flags){var f=Fp(Yc(ip(t.declaration.typeParameter.constraint.type))||Ke,t.mapper);return e.factory.createConditionalTypeNode(u(Jc(t),n),e.factory.createInferTypeNode(e.factory.createTypeParameterDeclaration(void 0,e.factory.cloneNode(i.typeName),2&f.flags?void 0:u(f,n))),p,e.factory.createKeywordTypeNode(144))}return p}function V(t){var r,i=t.id,a=t.symbol;if(a){var o=lo(t)?788968:111551;if(Hb(a.valueDeclaration))return N(a,n,o);if(32&a.flags&&!ls(a)&&(!(a.valueDeclaration&&e.isClassLike(a.valueDeclaration)&&2048&n.flags)||e.isClassDeclaration(a.valueDeclaration)&&0===Xa(a,n.enclosingDeclaration,o,!1).accessibility)||896&a.flags||c())return N(a,n,o);if(null===(r=n.visitedTypes)||void 0===r?void 0:r.has(i)){var s=function(t){if(t.symbol&&2048&t.symbol.flags&&t.symbol.declarations){var r=e.walkUpParenthesizedTypes(t.symbol.declarations[0].parent);if(262===r.kind)return Sa(r)}return}(t);return s?N(s,n,788968):l(n)}return q(t,W)}return W(t);function c(){var t,r=!!(8192&a.flags)&&e.some(a.declarations,(function(t){return e.isStatic(t)})),o=!!(16&a.flags)&&(a.parent||e.forEach(a.declarations,(function(e){return 308===e.parent.kind||265===e.parent.kind})));if(r||o)return(!!(4096&n.flags)||(null===(t=n.visitedTypes)||void 0===t?void 0:t.has(i)))&&(!(8&n.flags)||Ha(a,n.enclosingDeclaration))}}function q(t,r){var i,a,o=t.id,s=16&e.getObjectFlags(t)&&t.symbol&&32&t.symbol.flags,c=4&e.getObjectFlags(t)&&t.node?"N"+F(t.node):16777216&t.flags?"N"+F(t.root.node):t.symbol?(s?"+":"")+P(t.symbol):void 0;n.visitedTypes||(n.visitedTypes=new e.Set),c&&!n.symbolDepth&&(n.symbolDepth=new e.Map);var u=n.enclosingDeclaration&&di(n.enclosingDeclaration),_="".concat(T_(t),"|").concat(n.flags);u&&(u.serializedTypes||(u.serializedTypes=new e.Map));var d,p=null===(i=null==u?void 0:u.serializedTypes)||void 0===i?void 0:i.get(_);if(p)return p.truncating&&(n.truncating=!0),n.approximateLength+=p.addedLength,y(p);if(c){if((d=n.symbolDepth.get(c)||0)>10)return l(n);n.symbolDepth.set(c,d+1)}n.visitedTypes.add(o);var f=n.approximateLength,g=r(t),m=n.approximateLength-f;return n.reportedDiagnostic||n.encounteredError||(n.truncating&&(g.truncating=!0),g.addedLength=m,null===(a=null==u?void 0:u.serializedTypes)||void 0===a||a.set(_,g)),n.visitedTypes.delete(o),c&&n.symbolDepth.set(c,d),g;function y(t){return e.nodeIsSynthesized(t)||e.getParseTreeNode(t)!==t?e.setTextRange(e.factory.cloneNode(e.visitEachChild(t,y,e.nullTransformationContext,v)),t):t}function v(t,r,n,i,a){return t&&0===t.length?e.setTextRange(e.factory.createNodeArray(void 0,t.hasTrailingComma),t):e.visitNodes(t,r,n,i,a)}}function W(t){if(Vc(t)||t.containsError)return K(t);var r=qc(t);if(!r.properties.length&&!r.indexInfos.length){if(!r.callSignatures.length&&!r.constructSignatures.length)return n.approximateLength+=2,e.setEmitFlags(e.factory.createTypeLiteralNode(void 0),1);if(1===r.callSignatures.length&&!r.constructSignatures.length)return m(r.callSignatures[0],181,n);if(1===r.constructSignatures.length&&!r.callSignatures.length)return m(r.constructSignatures[0],182,n)}var i=e.filter(r.constructSignatures,(function(e){return!!(4&e.flags)}));if(e.some(i)){var a=e.map(i,sl);return r.callSignatures.length+(r.constructSignatures.length-i.length)+r.indexInfos.length+(2048&n.flags?e.countWhere(r.properties,(function(e){return!(4194304&e.flags)})):e.length(r.properties))&&a.push(function(t){if(0===t.constructSignatures.length)return t;if(t.objectTypeWithoutAbstractConstructSignatures)return t.objectTypeWithoutAbstractConstructSignatures;var r=e.filter(t.constructSignatures,(function(e){return!(4&e.flags)}));if(t.constructSignatures===r)return t;var n=za(t.symbol,t.members,t.callSignatures,e.some(r)?r:e.emptyArray,t.indexInfos);return t.objectTypeWithoutAbstractConstructSignatures=n,n.objectTypeWithoutAbstractConstructSignatures=n,n}(r)),u(j_(a),n)}var o=n.flags;n.flags|=4194304;var s=X(r);n.flags=o;var c=e.factory.createTypeLiteralNode(s);return n.approximateLength+=2,e.setEmitFlags(c,1024&n.flags?0:1),c}function H(t){var r=Tl(t);if(t.target===Qt||t.target===Xt){if(2&n.flags){var i=u(r[0],n);return e.factory.createTypeReferenceNode(t.target===Qt?"Array":"ReadonlyArray",[i])}var a=u(r[0],n),o=e.factory.createArrayTypeNode(a);return t.target===Qt?o:e.factory.createTypeOperatorNode(146,o)}if(!(8&t.target.objectFlags)){if(2048&n.flags&&t.symbol.valueDeclaration&&e.isClassLike(t.symbol.valueDeclaration)&&!Ha(t.symbol,n.enclosingDeclaration))return V(t);var s=t.target.outerTypeParameters,c=(D=0,void 0);if(s)for(var l=s.length;D<l;){var _=D,d=yl(s[D]);do{D++}while(D<l&&yl(s[D])===d);if(!e.rangeEquals(s,r,_,D)){var p=f(r.slice(_,D),n),g=n.flags;n.flags|=16;var m=N(d,n,788968,p);n.flags=g,c=c?G(c,m):m}}var y=void 0;if(r.length>0){var v=(t.target.typeParameters||e.emptyArray).length;y=f(r.slice(D,v),n)}S=n.flags;n.flags|=16;var h=N(t.symbol,n,788968,y);return n.flags=S,c?G(c,h):h}if(r=e.sameMap(r,(function(e,r){return Eg(e,!!(2&t.target.elementFlags[r]))})),r.length>0){var b=Cl(t),x=f(r.slice(0,b),n);if(x){if(t.target.labeledElementDeclarations)for(var D=0;D<x.length;D++){var S=t.target.elementFlags[D];x[D]=e.factory.createNamedTupleMember(12&S?e.factory.createToken(25):void 0,e.factory.createIdentifier(e.unescapeLeadingUnderscores(px(t.target.labeledElementDeclarations[D]))),2&S?e.factory.createToken(57):void 0,4&S?e.factory.createArrayTypeNode(x[D]):x[D])}else for(var D=0;D<Math.min(b,x.length);D++){var S=t.target.elementFlags[D];x[D]=12&S?e.factory.createRestTypeNode(4&S?e.factory.createArrayTypeNode(x[D]):x[D]):2&S?e.factory.createOptionalTypeNode(x[D]):x[D]}var T=e.setEmitFlags(e.factory.createTupleTypeNode(x),1);return t.target.readonly?e.factory.createTypeOperatorNode(146,T):T}}if(n.encounteredError||524288&n.flags){T=e.setEmitFlags(e.factory.createTupleTypeNode([]),1);return t.target.readonly?e.factory.createTypeOperatorNode(146,T):T}n.encounteredError=!0}function G(t,r){if(e.isImportTypeNode(t)){var n=t.typeArguments,i=t.qualifier;i&&(i=e.isIdentifier(i)?e.factory.updateIdentifier(i,n):e.factory.updateQualifiedName(i,i.left,e.factory.updateIdentifier(i.right,n))),n=r.typeArguments;for(var a=0,o=Q(r);a<o.length;a++){var s=o[a];i=i?e.factory.createQualifiedName(i,s):s}return e.factory.updateImportTypeNode(t,t.argument,t.assertions,i,n,t.isTypeOf)}n=t.typeArguments;var c=t.typeName;c=e.isIdentifier(c)?e.factory.updateIdentifier(c,n):e.factory.updateQualifiedName(c,c.left,e.factory.updateIdentifier(c.right,n)),n=r.typeArguments;for(var u=0,l=Q(r);u<l.length;u++){s=l[u];c=e.factory.createQualifiedName(c,s)}return e.factory.updateTypeReferenceNode(t,c,n)}function Q(t){for(var r=t.typeName,n=[];!e.isIdentifier(r);)n.unshift(r.right),r=r.left;return n.unshift(r),n}function X(t){if(c(n))return[e.factory.createPropertySignature(void 0,"...",void 0,void 0)];for(var r=[],i=0,a=t.callSignatures;i<a.length;i++){var o=a[i];r.push(m(o,176,n))}for(var s=0,u=t.constructSignatures;s<u.length;s++){4&(o=u[s]).flags||r.push(m(o,177,n))}for(var _=0,p=t.indexInfos;_<p.length;_++){var f=p[_];r.push(g(f,n,1024&t.objectFlags?l(n):void 0))}var y=t.properties;if(!y)return r;for(var v=0,h=0,b=y;h<b.length;h++){var x=b[h];if(v++,2048&n.flags){if(4194304&x.flags)continue;24&e.getDeclarationModifierFlagsFromSymbol(x)&&n.tracker.reportPrivateInBaseOfClassExpression&&n.tracker.reportPrivateInBaseOfClassExpression(e.unescapeLeadingUnderscores(x.escapedName))}if(c(n)&&v+2<y.length-1){r.push(e.factory.createPropertySignature(void 0,"... ".concat(y.length-v," more ..."),void 0,void 0)),d(y[y.length-1],n,r);break}d(x,n,r)}return r.length?r:void 0}}(t,n);return n.flags=i,a}function l(t){return t.approximateLength+=3,1&t.flags?e.factory.createKeywordTypeNode(131):e.factory.createTypeReferenceNode(e.factory.createIdentifier("..."),void 0)}function _(t,r){var n;return!!(8192&e.getCheckFlags(t))&&(e.contains(r.reverseMappedStack,t)||(null===(n=r.reverseMappedStack)||void 0===n?void 0:n[0])&&!(16&e.getObjectFlags(e.last(r.reverseMappedStack).propertyType)))}function d(t,r,n){var i,a,o=!!(8192&e.getCheckFlags(t)),s=_(t,r)?Le:vs(t),c=r.enclosingDeclaration;if(r.enclosingDeclaration=void 0,r.tracker.trackSymbol&&nc(t.escapedName))if(t.declarations){var u=e.first(t.declarations);if(ic(u))if(e.isBinaryExpression(u)){var d=e.getNameOfDeclaration(u);d&&e.isElementAccessExpression(d)&&e.isPropertyAccessEntityNameExpression(d.argumentExpression)&&b(d.argumentExpression,c,r)}else b(u.name.expression,c,r)}else(null===(i=r.tracker)||void 0===i?void 0:i.reportNonSerializableProperty)&&r.tracker.reportNonSerializableProperty(no(t));r.enclosingDeclaration=t.valueDeclaration||(null===(a=t.declarations)||void 0===a?void 0:a[0])||c;var p=R(t,r);r.enclosingDeclaration=c,r.approximateLength+=e.symbolName(t).length+1;var f=16777216&t.flags?e.factory.createToken(57):void 0;if(8208&t.flags&&!Wc(s).length&&!Vx(t))for(var g=0,y=Su(py(s,(function(e){return!(32768&e.flags)})),0);g<y.length;g++){var v=m(y[g],170,r,{name:p,questionToken:f});n.push(S(v))}else{var h=void 0;_(t,r)?h=l(r):(o&&(r.reverseMappedStack||(r.reverseMappedStack=[]),r.reverseMappedStack.push(t)),h=s?J(r,s,t,c):e.factory.createKeywordTypeNode(131),o&&r.reverseMappedStack.pop());var x=Vx(t)?[e.factory.createToken(146)]:void 0;x&&(r.approximateLength+=9);var D=e.factory.createPropertySignature(x,p,f,h);n.push(S(D))}function S(r){var n;if(e.some(t.declarations,(function(e){return 350===e.kind}))){var i=null===(n=t.declarations)||void 0===n?void 0:n.find((function(e){return 350===e.kind})),a=e.getTextOfJSDocComment(i.comment);a&&e.setSyntheticLeadingComments(r,[{kind:3,text:"*\n * "+a.replace(/\n/g,"\n * ")+"\n ",pos:-1,end:-1,hasTrailingNewLine:!0}])}else t.valueDeclaration&&e.setCommentRange(r,t.valueDeclaration);return r}}function f(t,r,n){if(e.some(t)){if(c(r)){if(!n)return[e.factory.createTypeReferenceNode("...",void 0)];if(t.length>2)return[u(t[0],r),e.factory.createTypeReferenceNode("... ".concat(t.length-2," more ..."),void 0),u(t[t.length-1],r)]}for(var i=!(64&r.flags)?e.createUnderscoreEscapedMultiMap():void 0,a=[],o=0,s=0,l=t;s<l.length;s++){var _=l[s];if(o++,c(r)&&o+2<t.length-1){a.push(e.factory.createTypeReferenceNode("... ".concat(t.length-o," more ..."),void 0));var d=u(t[t.length-1],r);d&&a.push(d);break}r.approximateLength+=2;var p=u(_,r);p&&(a.push(p),i&&e.isIdentifierTypeReference(p)&&i.add(p.typeName.escapedText,[_,a.length-1]))}if(i){var f=r.flags;r.flags|=64,i.forEach((function(t){if(!e.arrayIsHomogeneous(t,(function(e,t){return function(e,t){return e===t||!!e.symbol&&e.symbol===t.symbol||!!e.aliasSymbol&&e.aliasSymbol===t.aliasSymbol}(e[0],t[0])})))for(var n=0,i=t;n<i.length;n++){var o=i[n],s=o[0],c=o[1];a[c]=u(s,r)}})),r.flags=f}return a}}function g(t,r,n){var i=e.getNameFromIndexInfo(t)||"x",a=u(t.keyType,r),o=e.factory.createParameterDeclaration(void 0,void 0,i,void 0,a,void 0);return n||(n=u(t.type||Le,r)),t.type||2097152&r.flags||(r.encounteredError=!0),r.approximateLength+=i.length+4,e.factory.createIndexSignature(t.isReadonly?[e.factory.createToken(146)]:void 0,[o],n)}function m(t,r,n,i){var a,o,s,c,l,_,d=256&n.flags;d&&(n.flags&=-257),n.approximateLength+=3,32&n.flags&&t.target&&t.mapper&&t.target.typeParameters?_=t.target.typeParameters.map((function(e){return u(Fp(e,t.mapper),n)})):l=t.typeParameters&&t.typeParameters.map((function(e){return v(e,n)}));var p,f=yc(t,!0)[0],g=(e.some(f,(function(t){return t!==f[f.length-1]&&!!(32768&e.getCheckFlags(t))}))?t.parameters:f).map((function(e){return h(e,n,173===r,null==i?void 0:i.privateSymbolVisitor,null==i?void 0:i.bundledImports)})),m=33554432&n.flags?void 0:function(t,r){if(t.thisParameter)return h(t.thisParameter,r);if(t.declaration){var n=e.getJSDocThisTag(t.declaration);if(n&&n.typeExpression)return e.factory.createParameterDeclaration(void 0,void 0,"this",void 0,u(ip(n.typeExpression),r))}}(t,n);m&&g.unshift(m);var y=Qu(t);if(y){var b=2===y.kind||3===y.kind?e.factory.createToken(129):void 0,x=1===y.kind||3===y.kind?e.setEmitFlags(e.factory.createIdentifier(y.parameterName),16777216):e.factory.createThisTypeNode(),D=y.type&&u(y.type,n);p=e.factory.createTypePredicateNode(b,x,D)}else{var S=Yu(t);!S||d&&Eo(S)?d||(p=e.factory.createKeywordTypeNode(131)):p=function(t,r,n,i,a){if(!ko(r)&&t.enclosingDeclaration){var o=n.declaration&&e.getEffectiveReturnTypeNode(n.declaration);if(e.findAncestor(o,(function(e){return e===t.enclosingDeclaration}))&&o){var s=ip(o);if((262144&s.flags&&s.isThisType?Fp(s,n.mapper):s)===r&&j(o,r)){var c=U(t,o,i,a);if(c)return c}}}return u(r,t)}(n,S,t,null==i?void 0:i.privateSymbolVisitor,null==i?void 0:i.bundledImports)}var T=null==i?void 0:i.modifiers;if(182===r&&4&t.flags){var C=e.modifiersToFlags(T);T=e.factory.createModifiersFromModifierFlags(256|C)}var E=176===r?e.factory.createCallSignature(l,g,p):177===r?e.factory.createConstructSignature(l,g,p):170===r?e.factory.createMethodSignature(T,null!==(a=null==i?void 0:i.name)&&void 0!==a?a:e.factory.createIdentifier(""),null==i?void 0:i.questionToken,l,g,p):171===r?e.factory.createMethodDeclaration(T,void 0,null!==(o=null==i?void 0:i.name)&&void 0!==o?o:e.factory.createIdentifier(""),void 0,l,g,p,void 0):173===r?e.factory.createConstructorDeclaration(T,g,void 0):174===r?e.factory.createGetAccessorDeclaration(T,null!==(s=null==i?void 0:i.name)&&void 0!==s?s:e.factory.createIdentifier(""),g,p,void 0):175===r?e.factory.createSetAccessorDeclaration(T,null!==(c=null==i?void 0:i.name)&&void 0!==c?c:e.factory.createIdentifier(""),g,void 0):178===r?e.factory.createIndexSignature(T,g,p):320===r?e.factory.createJSDocFunctionType(g,p):181===r?e.factory.createFunctionTypeNode(l,g,null!=p?p:e.factory.createTypeReferenceNode(e.factory.createIdentifier(""))):182===r?e.factory.createConstructorTypeNode(T,l,g,null!=p?p:e.factory.createTypeReferenceNode(e.factory.createIdentifier(""))):259===r?e.factory.createFunctionDeclaration(T,void 0,(null==i?void 0:i.name)?e.cast(i.name,e.isIdentifier):e.factory.createIdentifier(""),l,g,p,void 0):215===r?e.factory.createFunctionExpression(T,void 0,(null==i?void 0:i.name)?e.cast(i.name,e.isIdentifier):e.factory.createIdentifier(""),l,g,p,e.factory.createBlock([])):216===r?e.factory.createArrowFunction(T,l,g,p,void 0,e.factory.createBlock([])):e.Debug.assertNever(r);return _&&(E.typeArguments=e.factory.createNodeArray(_)),E}function y(t,r,n){var i=r.flags;r.flags&=-513;var a=e.factory.createModifiersFromModifierFlags(Pf(t)),o=w(t,r),s=su(t),c=s&&u(s,r);return r.flags=i,e.factory.createTypeParameterDeclaration(a,o,n,c)}function v(e,t,r){return void 0===r&&(r=Yc(e)),y(e,t,r&&u(r,t))}function h(t,r,n,i,a){var o=e.getDeclarationOfKind(t,166);o||e.isTransientSymbol(t)||(o=e.getDeclarationOfKind(t,343));var s=ys(t);o&&XC(o)&&(s=bg(s));var c=J(r,s,t,r.enclosingDeclaration,i,a),u=!(8192&r.flags)&&n&&o&&e.canHaveModifiers(o)?e.map(e.getModifiers(o),e.factory.cloneNode):void 0,l=o&&e.isRestParameter(o)||32768&e.getCheckFlags(t)?e.factory.createToken(25):void 0,_=o&&o.name?79===o.name.kind?e.setEmitFlags(e.factory.cloneNode(o.name),16777216):163===o.name.kind?e.setEmitFlags(e.factory.cloneNode(o.name.right),16777216):function t(n){r.tracker.trackSymbol&&e.isComputedPropertyName(n)&&rc(n)&&b(n.expression,r.enclosingDeclaration,r);var i=e.visitEachChild(n,t,e.nullTransformationContext,void 0,t);return e.isBindingElement(i)&&(i=e.factory.updateBindingElement(i,i.dotDotDotToken,i.propertyName,i.name,void 0)),e.nodeIsSynthesized(i)||(i=e.factory.cloneNode(i)),e.setEmitFlags(i,16777217)}(o.name):e.symbolName(t),d=o&&Bu(o)||16384&e.getCheckFlags(t)?e.factory.createToken(57):void 0,p=e.factory.createParameterDeclaration(u,l,_,d,c,void 0);return r.approximateLength+=e.symbolName(t).length+3,p}function b(t,r,n){if(n.tracker.trackSymbol){var i=e.getFirstIdentifier(t),a=vi(i,i.escapedText,1160127,void 0,void 0,!0);a&&n.tracker.trackSymbol(a,r,111551)}}function x(e,t,r,n){return t.tracker.trackSymbol(e,t.enclosingDeclaration,r),D(e,t,r,n)}function D(t,r,n,i){var a;return 262144&t.flags||!(r.enclosingDeclaration||64&r.flags)||134217728&r.flags?a=[t]:(a=e.Debug.checkDefined(function t(n,a,o){var s,c=Va(n,r.enclosingDeclaration,a,!!(128&r.flags));if(!c||qa(c[0],r.enclosingDeclaration,1===c.length?a:Ka(a))){var u=Ca(c?c[0]:n,r.enclosingDeclaration,a);if(e.length(u)){s=u.map((function(t){return e.some(t.declarations,eo)?E(t,r):void 0}));var l=u.map((function(e,t){return t}));l.sort(g);for(var _=0,d=l.map((function(e){return u[e]}));_<d.length;_++){var p=d[_],f=t(p,Ka(a),!1);if(f){if(p.exports&&p.exports.get("export=")&&Na(p.exports.get("export="),n)){c=f;break}c=f.concat(c||[ka(p,n)||n]);break}}}}if(c)return c;if(o||!(6144&n.flags)){if(!o&&!i&&e.forEach(n.declarations,eo))return;return[n]}function g(t,r){var n=s[t],i=s[r];if(n&&i){var a=e.pathIsRelative(i);return e.pathIsRelative(n)===a?e.moduleSpecifiers.countPathComponents(n)-e.moduleSpecifiers.countPathComponents(i):a?-1:1}return 0}}(t,n,!0)),e.Debug.assert(a&&a.length>0)),a}function S(t,r){var n;return 524384&JT(t).flags&&(n=e.factory.createNodeArray(e.map(Cs(t),(function(e){return v(e,r)})))),n}function T(t,r,n){var i;e.Debug.assert(t&&0<=r&&r<t.length);var a=t[r],o=P(a);if(!(null===(i=n.typeParameterSymbolList)||void 0===i?void 0:i.has(o))){var s;if((n.typeParameterSymbolList||(n.typeParameterSymbolList=new e.Set)).add(o),512&n.flags&&r<t.length-1){var c=a,u=t[r+1];if(1&e.getCheckFlags(u)){var l=function(t){return e.concatenate(Ts(t),Cs(t))}(2097152&c.flags?Xi(c):c);s=f(e.map(l,(function(e){return _p(e,u.mapper)})),n)}else s=S(a,n)}return s}}function C(t){return e.isIndexedAccessTypeNode(t.objectType)?C(t.objectType):t}function E(t,r,n){var a,s=e.getDeclarationOfKind(t,308);if(!s){var c=e.firstDefined(t.declarations,(function(e){return Ea(e,t)}));c&&(s=e.getDeclarationOfKind(c,308))}if(s&&void 0!==s.moduleName)return s.moduleName;if(!s){if(r.tracker.trackReferencedAmbientModule){var u=e.filter(t.declarations,e.isAmbientModule);if(e.length(u))for(var l=0,_=u;l<_.length;l++){var d=_[l];r.tracker.trackReferencedAmbientModule(d,t)}}if(i.test(t.escapedName))return t.escapedName.substring(1,t.escapedName.length-1)}if(!r.enclosingDeclaration||!r.tracker.moduleResolverHost)return i.test(t.escapedName)?t.escapedName.substring(1,t.escapedName.length-1):e.getSourceFileOfNode(e.getNonAugmentationDeclaration(t)).fileName;var p,f,g=e.getSourceFileOfNode(e.getOriginalNode(r.enclosingDeclaration)),m=n||(null==g?void 0:g.impliedNodeFormat),y=(p=g.path,void 0===(f=m)?p:"".concat(f,"|").concat(p)),v=_i(t),h=v.specifierCache&&v.specifierCache.get(y);if(!h){var b=!!e.outFile(K),x=r.tracker.moduleResolverHost,D=b?o(o({},K),{baseUrl:x.getCommonSourceDirectory()}):K;h=e.first(e.moduleSpecifiers.getModuleSpecifiers(t,pe,D,g,x,{importModuleSpecifierPreference:b?"non-relative":"project-relative",importModuleSpecifierEnding:b?"minimal":m===e.ModuleKind.ESNext?"js":void 0},{overrideImportMode:n})),null!==(a=v.specifierCache)&&void 0!==a||(v.specifierCache=new e.Map),v.specifierCache.set(y,h)}return h}function k(t){var r=e.factory.createIdentifier(e.unescapeLeadingUnderscores(t.escapedName));return t.parent?e.factory.createQualifiedName(k(t.parent),r):r}function N(t,r,n,i){var a,o,s,c,u=x(t,r,n,!(16384&r.flags)),l=111551===n;if(e.some(u[0].declarations,eo)){var _=u.length>1?A(u,u.length-1,1):void 0,d=i||T(u,0,r),p=e.getSourceFileOfNode(e.getOriginalNode(r.enclosingDeclaration)),f=e.getSourceFileOfModule(u[0]),g=void 0,m=void 0;if(e.getEmitModuleResolutionKind(K)!==e.ModuleResolutionKind.Node16&&e.getEmitModuleResolutionKind(K)!==e.ModuleResolutionKind.NodeNext||(null==f?void 0:f.impliedNodeFormat)===e.ModuleKind.ESNext&&f.impliedNodeFormat!==(null==p?void 0:p.impliedNodeFormat)&&(g=E(u[0],r,e.ModuleKind.ESNext),m=e.factory.createImportTypeAssertionContainer(e.factory.createAssertClause(e.factory.createNodeArray([e.factory.createAssertEntry(e.factory.createStringLiteral("resolution-mode"),e.factory.createStringLiteral("import"))]))),null===(o=(a=r.tracker).reportImportTypeNodeResolutionModeOverride)||void 0===o||o.call(a)),g||(g=E(u[0],r)),!(67108864&r.flags)&&e.getEmitModuleResolutionKind(K)!==e.ModuleResolutionKind.Classic&&g.indexOf("/node_modules/")>=0){var y=g;if(e.getEmitModuleResolutionKind(K)===e.ModuleResolutionKind.Node16||e.getEmitModuleResolutionKind(K)===e.ModuleResolutionKind.NodeNext){var v=(null==p?void 0:p.impliedNodeFormat)===e.ModuleKind.ESNext?e.ModuleKind.CommonJS:e.ModuleKind.ESNext;(g=E(u[0],r,v)).indexOf("/node_modules/")>=0?g=y:(m=e.factory.createImportTypeAssertionContainer(e.factory.createAssertClause(e.factory.createNodeArray([e.factory.createAssertEntry(e.factory.createStringLiteral("resolution-mode"),e.factory.createStringLiteral(v===e.ModuleKind.ESNext?"import":"require"))]))),null===(c=(s=r.tracker).reportImportTypeNodeResolutionModeOverride)||void 0===c||c.call(s))}m||(r.encounteredError=!0,r.tracker.reportLikelyUnsafeImportRequiredError&&r.tracker.reportLikelyUnsafeImportRequiredError(y))}var h=e.factory.createLiteralTypeNode(e.factory.createStringLiteral(g));if(r.tracker.trackExternalModuleSymbolOfImportTypeNode&&r.tracker.trackExternalModuleSymbolOfImportTypeNode(u[0]),r.approximateLength+=g.length+10,!_||e.isEntityName(_)){if(_)(k=e.isIdentifier(_)?_:_.right).typeArguments=void 0;return e.factory.createImportTypeNode(h,m,_,d,l)}var b=C(_),D=b.objectType.typeName;return e.factory.createIndexedAccessTypeNode(e.factory.createImportTypeNode(h,m,D,d,l),b.indexType)}var S=A(u,u.length-1,0);if(e.isIndexedAccessTypeNode(S))return S;if(l)return e.factory.createTypeQueryNode(S);var k,N=(k=e.isIdentifier(S)?S:S.right).typeArguments;return k.typeArguments=void 0,e.factory.createTypeReferenceNode(S,N);function A(t,n,a){var o,s=n===t.length-1?i:T(t,n,r),c=t[n],u=t[n-1];if(0===n)r.flags|=16777216,o=yo(c,r),r.approximateLength+=(o?o.length:0)+1,r.flags^=16777216;else if(u&&va(u)){var l=va(u);e.forEachEntry(l,(function(t,r){if(Na(t,c)&&!nc(r)&&"export="!==r)return o=e.unescapeLeadingUnderscores(r),!0}))}if(void 0===o){var _=e.firstDefined(c.declarations,e.getNameOfDeclaration);if(_&&e.isComputedPropertyName(_)&&e.isEntityName(_.expression)){var d=A(t,n-1,a);return e.isEntityName(d)?e.factory.createIndexedAccessTypeNode(e.factory.createParenthesizedType(e.factory.createTypeQueryNode(d)),e.factory.createTypeQueryNode(_.expression)):d}o=yo(c,r)}if(r.approximateLength+=o.length+1,!(16&r.flags)&&u&&uc(u)&&uc(u).get(c.escapedName)&&Na(uc(u).get(c.escapedName),c)){d=A(t,n-1,a);return e.isIndexedAccessTypeNode(d)?e.factory.createIndexedAccessTypeNode(d,e.factory.createLiteralTypeNode(e.factory.createStringLiteral(o))):e.factory.createIndexedAccessTypeNode(e.factory.createTypeReferenceNode(d,s),e.factory.createLiteralTypeNode(e.factory.createStringLiteral(o)))}var p=e.setEmitFlags(e.factory.createIdentifier(o,s),16777216);if(p.symbol=c,n>a){d=A(t,n-1,a);return e.isEntityName(d)?e.factory.createQualifiedName(d,p):e.Debug.fail("Impossible construct - an export of an indexed access cannot be reachable")}return p}}function A(e,t,r){var n=vi(t.enclosingDeclaration,e,788968,void 0,e,!1);return!!n&&!(262144&n.flags&&n===r.symbol)}function w(t,r){var n,i;if(4&r.flags&&r.typeParameterNames){var a=r.typeParameterNames.get(T_(t));if(a)return a}var o=I(t.symbol,r,788968,!0);if(!(79&o.kind))return e.factory.createIdentifier("(Missing type parameter)");if(4&r.flags){for(var s=o.escapedText,c=(null===(n=r.typeParameterNamesByTextNextNameCount)||void 0===n?void 0:n.get(s))||0,u=s;(null===(i=r.typeParameterNamesByText)||void 0===i?void 0:i.has(u))||A(u,r,t);)c++,u="".concat(s,"_").concat(c);u!==s&&(o=e.factory.createIdentifier(u,o.typeArguments)),(r.typeParameterNamesByTextNextNameCount||(r.typeParameterNamesByTextNextNameCount=new e.Map)).set(s,c),(r.typeParameterNames||(r.typeParameterNames=new e.Map)).set(T_(t),o),(r.typeParameterNamesByText||(r.typeParameterNamesByText=new e.Set)).add(s)}return o}function I(t,r,n,i){var a=x(t,r,n);return!i||1===a.length||r.encounteredError||65536&r.flags||(r.encounteredError=!0),function t(n,i){var a=T(n,i,r),o=n[i];0===i&&(r.flags|=16777216);var s=yo(o,r);0===i&&(r.flags^=16777216);var c=e.setEmitFlags(e.factory.createIdentifier(s,a),16777216);return c.symbol=o,i>0?e.factory.createQualifiedName(t(n,i-1),c):c}(a,a.length-1)}function O(t,r,n){var i=x(t,r,n);return function t(n,i){var a=T(n,i,r),o=n[i];0===i&&(r.flags|=16777216);var s=yo(o,r);0===i&&(r.flags^=16777216);var c=s.charCodeAt(0);if(e.isSingleOrDoubleQuote(c)&&e.some(o.declarations,eo))return e.factory.createStringLiteral(E(o,r));var u=35===c?s.length>1&&e.isIdentifierStart(s.charCodeAt(1),V):e.isIdentifierStart(c,V);if(0===i||u){var l=e.setEmitFlags(e.factory.createIdentifier(s,a),16777216);return l.symbol=o,i>0?e.factory.createPropertyAccessExpression(t(n,i-1),l):l}91===c&&(c=(s=s.substring(1,s.length-1)).charCodeAt(0));var _=void 0;return!e.isSingleOrDoubleQuote(c)||8&o.flags?""+ +s===s&&(_=e.factory.createNumericLiteral(+s)):_=e.factory.createStringLiteral(e.stripQuotes(s).replace(/\\./g,(function(e){return e.substring(1)})),39===c),_||((_=e.setEmitFlags(e.factory.createIdentifier(s,a),16777216)).symbol=o),e.factory.createElementAccessExpression(t(n,i-1),_)}(i,i.length-1)}function M(t){var r=e.getNameOfDeclaration(t);return!!r&&e.isStringLiteral(r)}function L(t){var r=e.getNameOfDeclaration(t);return!!(r&&e.isStringLiteral(r)&&(r.singleQuote||!e.nodeIsSynthesized(r)&&e.startsWith(e.getTextOfNode(r,!1),"'")))}function R(t,r){var n=!!e.length(t.declarations)&&e.every(t.declarations,L),i=function(t,r,n){var i=_i(t).nameType;if(i){if(384&i.flags){var a=""+i.value;return e.isIdentifierText(a,e.getEmitScriptTarget(K))||e.isNumericLiteralName(a)?e.isNumericLiteralName(a)&&e.startsWith(a,"-")?e.factory.createComputedPropertyName(e.factory.createNumericLiteral(+a)):e.createPropertyNameNodeForIdentifierOrLiteral(a,e.getEmitScriptTarget(K)):e.factory.createStringLiteral(a,!!n)}if(8192&i.flags)return e.factory.createComputedPropertyName(O(i.symbol,r,111551))}}(t,r,n);if(i)return i;var a=e.unescapeLeadingUnderscores(t.escapedName),o=!!e.length(t.declarations)&&e.every(t.declarations,M);return e.createPropertyNameNodeForIdentifierOrLiteral(a,e.getEmitScriptTarget(K),n,o)}function B(t,r){return t.declarations&&e.find(t.declarations,(function(t){return!(!e.getEffectiveTypeAnnotationNode(t)||r&&!e.findAncestor(t,(function(e){return e===r})))}))}function j(t,r){return!(4&e.getObjectFlags(r))||!e.isTypeReferenceNode(t)||e.length(t.typeArguments)>=zu(r.target.typeParameters)}function J(t,r,n,i,a,o){if(!ko(r)&&i){var s=B(n,i);if(s&&!e.isFunctionLikeDeclaration(s)&&!e.isGetAccessorDeclaration(s)){var c=e.getEffectiveTypeAnnotationNode(s);if(function(t,r,n){var i=ip(t);if(i===n)return!0;if(e.isParameter(r)&&r.questionToken)return qm(n,524288)===i;return!1}(c,s,r)&&j(c,r)){var l=U(t,c,a,o);if(l)return l}}}var _=t.flags;8192&r.flags&&r.symbol===n&&(!t.enclosingDeclaration||e.some(n.declarations,(function(r){return e.getSourceFileOfNode(r)===e.getSourceFileOfNode(t.enclosingDeclaration)})))&&(t.flags|=1048576);var d=u(r,t);return t.flags=_,d}function z(t,r,n){var i,a,o=!1,s=e.getFirstIdentifier(t);if(e.isInJSFile(t)&&(e.isExportsIdentifier(s)||e.isModuleExportsAccessExpression(s.parent)||e.isQualifiedName(s.parent)&&e.isModuleIdentifier(s.parent.left)&&e.isExportsIdentifier(s.parent.right)))return{introducesError:o=!0,node:t};var c=aa(s,67108863,!0,!0);if(c&&(0!==Xa(c,r.enclosingDeclaration,67108863,!1).accessibility?o=!0:(null===(a=null===(i=r.tracker)||void 0===i?void 0:i.trackSymbol)||void 0===a||a.call(i,c,r.enclosingDeclaration,67108863),null==n||n(c)),e.isIdentifier(t))){var u=qs(c),l=262144&c.flags&&!Wa(u.symbol,r.enclosingDeclaration)?w(u,r):e.factory.cloneNode(t);return l.symbol=c,{introducesError:o,node:e.setEmitFlags(e.setOriginalNode(l,t),16777216)}}return{introducesError:o,node:t}}function U(n,i,a,o){r&&r.throwIfCancellationRequested&&r.throwIfCancellationRequested();var s=!1,c=e.getSourceFileOfNode(i),l=e.visitNode(i,(function r(i){if(e.isJSDocAllType(i)||322===i.kind)return e.factory.createKeywordTypeNode(131);if(e.isJSDocUnknownType(i))return e.factory.createKeywordTypeNode(157);if(e.isJSDocNullableType(i))return e.factory.createUnionTypeNode([e.visitNode(i.type,r),e.factory.createLiteralTypeNode(e.factory.createNull())]);if(e.isJSDocOptionalType(i))return e.factory.createUnionTypeNode([e.visitNode(i.type,r),e.factory.createKeywordTypeNode(155)]);if(e.isJSDocNonNullableType(i))return e.visitNode(i.type,r);if(e.isJSDocVariadicType(i))return e.factory.createArrayTypeNode(e.visitNode(i.type,r));if(e.isJSDocTypeLiteral(i))return e.factory.createTypeLiteralNode(e.map(i.jsDocPropertyTags,(function(t){var a=e.isIdentifier(t.name)?t.name:t.name.right,o=Co(ip(i),a.escapedText),s=o&&t.typeExpression&&ip(t.typeExpression.type)!==o?u(o,n):void 0;return e.factory.createPropertySignature(void 0,a,t.isBracketed||t.typeExpression&&e.isJSDocOptionalType(t.typeExpression.type)?e.factory.createToken(57):void 0,s||t.typeExpression&&e.visitNode(t.typeExpression.type,r)||e.factory.createKeywordTypeNode(131))})));if(e.isTypeReferenceNode(i)&&e.isIdentifier(i.typeName)&&""===i.typeName.escapedText)return e.setOriginalNode(e.factory.createKeywordTypeNode(131),i);if((e.isExpressionWithTypeArguments(i)||e.isTypeReferenceNode(i))&&e.isJSDocIndexSignature(i))return e.factory.createTypeLiteralNode([e.factory.createIndexSignature(void 0,[e.factory.createParameterDeclaration(void 0,void 0,"x",void 0,e.visitNode(i.typeArguments[0],r))],e.visitNode(i.typeArguments[1],r))]);if(e.isJSDocFunctionType(i)){var l;return e.isJSDocConstructSignature(i)?e.factory.createConstructorTypeNode(void 0,e.visitNodes(i.typeParameters,r),e.mapDefined(i.parameters,(function(t,n){return t.name&&e.isIdentifier(t.name)&&"new"===t.name.escapedText?void(l=t.type):e.factory.createParameterDeclaration(void 0,g(t),m(t,n),t.questionToken,e.visitNode(t.type,r),void 0)})),e.visitNode(l||i.type,r)||e.factory.createKeywordTypeNode(131)):e.factory.createFunctionTypeNode(e.visitNodes(i.typeParameters,r),e.map(i.parameters,(function(t,n){return e.factory.createParameterDeclaration(void 0,g(t),m(t,n),t.questionToken,e.visitNode(t.type,r),void 0)})),e.visitNode(i.type,r)||e.factory.createKeywordTypeNode(131))}if(e.isTypeReferenceNode(i)&&e.isInJSDoc(i)&&(!j(i,ip(i))||jl(i)||we===Pl(i,788968,!0)))return e.setOriginalNode(u(ip(i),n),i);if(e.isLiteralImportTypeNode(i)){var _=di(i).resolvedSymbol;return!e.isInJSDoc(i)||!_||(i.isTypeOf||788968&_.flags)&&e.length(i.typeArguments)>=zu(Cs(_))?e.factory.updateImportTypeNode(i,e.factory.updateLiteralTypeNode(i.argument,function(r,i){if(o){if(n.tracker&&n.tracker.moduleResolverHost){var a=mE(r);if(a){var s={getCanonicalFileName:e.createGetCanonicalFileName(!!t.useCaseSensitiveFileNames),getCurrentDirectory:function(){return n.tracker.moduleResolverHost.getCurrentDirectory()},getCommonSourceDirectory:function(){return n.tracker.moduleResolverHost.getCommonSourceDirectory()}},c=e.getResolvedExternalModuleName(s,a);return e.factory.createStringLiteral(c)}}}else if(n.tracker&&n.tracker.trackExternalModuleSymbolOfImportTypeNode){var u=ca(i,i,void 0);u&&n.tracker.trackExternalModuleSymbolOfImportTypeNode(u)}return i}(i,i.argument.literal)),i.assertions,i.qualifier,e.visitNodes(i.typeArguments,r,e.isTypeNode),i.isTypeOf):e.setOriginalNode(u(ip(i),n),i)}if(e.isEntityName(i)||e.isEntityNameExpression(i)){var d=z(i,n,a),p=d.introducesError,f=d.node;if(s=s||p,f!==i)return f}c&&e.isTupleTypeNode(i)&&e.getLineAndCharacterOfPosition(c,i.pos).line===e.getLineAndCharacterOfPosition(c,i.end).line&&e.setEmitFlags(i,1);return e.visitEachChild(i,r,e.nullTransformationContext);function g(t){return t.dotDotDotToken||(t.type&&e.isJSDocVariadicType(t.type)?e.factory.createToken(25):void 0)}function m(t,r){return t.name&&e.isIdentifier(t.name)&&"this"===t.name.escapedText?"this":g(t)?"args":"arg".concat(r)}}));if(!s)return l===i?e.setTextRange(e.factory.cloneNode(i),i):l}}(),se=e.createSymbolTable(),ce=ri(4,"undefined");ce.declarations=[];var ue=ri(1536,"globalThis",8);ue.exports=se,ue.declarations=[],se.set(ue.escapedName,ue);var le,_e=ri(4,"arguments"),de=ri(4,"require"),pe={getNodeCount:function(){return e.sum(t.getSourceFiles(),"nodeCount")},getIdentifierCount:function(){return e.sum(t.getSourceFiles(),"identifierCount")},getSymbolCount:function(){return e.sum(t.getSourceFiles(),"symbolCount")+D},getTypeCount:function(){return x},getInstantiationCount:function(){return T},getRelationCacheSizes:function(){return{assignable:Ln.size,identity:Bn.size,subtype:On.size,strictSubtype:Mn.size}},isUndefinedSymbol:function(e){return e===ce},isArgumentsSymbol:function(e){return e===_e},isUnknownSymbol:function(e){return e===we},getMergedSymbol:Da,getDiagnostics:bC,getGlobalDiagnostics:function(){return xC(),Pn.getGlobalDiagnostics()},getRecursionIdentity:Jf,getUnmatchedProperties:nm,getTypeOfSymbolAtLocation:function(t,r){var n=e.getParseTreeNode(r);return n?function(t,r){if(t=t.exportSymbol||t,(79===r.kind||80===r.kind)&&(e.isRightSideOfQualifiedNameOrPropertyAccess(r)&&(r=r.parent),e.isExpressionNode(r)&&(!e.isAssignmentTarget(r)||e.isWriteAccess(r)))){var n=AD(r);if(Aa(di(r).resolvedSymbol)===t)return n}if(e.isDeclarationName(r)&&e.isSetAccessor(r.parent)&&os(r.parent))return us(r.parent.symbol);return vs(t)}(t,n):je},getTypeOfSymbol:ys,getSymbolsOfParameterPropertyDeclaration:function(t,r){var n=e.getParseTreeNode(t,e.isParameter);return void 0===n?e.Debug.fail("Cannot get symbols of a synthetic parameter that cannot be resolved to a parse-tree node."):function(t,r){var n=t.parent,i=t.parent.parent,a=fi(n.locals,r,111551),o=fi(uc(i.symbol),r,111551);if(a&&o)return[a,o];return e.Debug.fail("There should exist two symbols, one as property declaration and one as parameter declaration")}(n,e.escapeLeadingUnderscores(r))},getDeclaredTypeOfSymbol:qs,getPropertiesOfType:Qc,getPropertyOfType:function(t,r){return xu(t,e.escapeLeadingUnderscores(r))},getPrivateIdentifierPropertyOfType:function(t,r,n){var i=e.getParseTreeNode(n);if(i){var a=Fh(e.escapeLeadingUnderscores(r),i);return a?Ih(t,a):void 0}},getTypeOfPropertyOfType:function(t,r){return Co(t,e.escapeLeadingUnderscores(r))},getIndexInfoOfType:function(e,t){return Au(e,0===t?Ye:Ze)},getIndexInfosOfType:Nu,getIndexInfosOfIndexSymbol:dl,getSignaturesOfType:Su,getIndexTypeOfType:function(e,t){return Fu(e,0===t?Ye:Ze)},getIndexType:function(e){return Z_(e)},getBaseTypes:Is,getBaseTypeOfLiteralType:og,getWidenedType:Rg,getTypeFromTypeNode:function(t){var r=e.getParseTreeNode(t,e.isTypeNode);return r?ip(r):je},getParameterType:vx,getParameterIdentifierNameAtPosition:function(e,t){var r;if(320===(null===(r=e.declaration)||void 0===r?void 0:r.kind))return;var n=e.parameters.length-(L(e)?1:0);if(t<n){var i=e.parameters[t];return gx(i)?[i.escapedName,!1]:void 0}var a=e.parameters[n]||we;if(!gx(a))return;var o=ys(a);if(_g(o)){var s=o.target.labeledElementDeclarations,c=null==s?void 0:s[t-n],u=!!(null==c?void 0:c.dotDotDotToken);return c?[px(c),u]:void 0}if(t===n)return[a.escapedName,!0];return},getPromisedTypeOfPromise:rS,getAwaitedType:function(e){return uS(e)},getReturnTypeOfSignature:Yu,isNullableType:bh,getNullableType:hg,getNonNullableType:xg,getNonOptionalType:Sg,getTypeArguments:Tl,typeToTypeNode:oe.typeToTypeNode,indexInfoToIndexSignatureDeclaration:oe.indexInfoToIndexSignatureDeclaration,signatureToSignatureDeclaration:oe.signatureToSignatureDeclaration,symbolToEntityName:oe.symbolToEntityName,symbolToExpression:oe.symbolToExpression,symbolToNode:oe.symbolToNode,symbolToTypeParameterDeclarations:oe.symbolToTypeParameterDeclarations,symbolToParameterDeclaration:oe.symbolToParameterDeclaration,typeParameterToDeclaration:oe.typeParameterToDeclaration,getSymbolsInScope:function(t,r){var n=e.getParseTreeNode(t);return n?function(t,r){if(33554432&t.flags)return[];var n=e.createSymbolTable(),i=!1;return a(),n.delete("this"),Mu(n);function a(){for(;t;){switch(t.locals&&!pi(t)&&s(t.locals,r),t.kind){case 308:if(!e.isExternalModule(t))break;case 264:c(Sa(t).exports,2623475&r);break;case 263:s(Sa(t).exports,8&r);break;case 228:t.name&&o(t.symbol,r);case 260:case 261:i||s(uc(Sa(t)),788968&r);break;case 215:t.name&&o(t.symbol,r)}e.introducesArgumentsExoticObject(t)&&o(_e,r),i=e.isStatic(t),t=t.parent}s(se,r)}function o(t,r){if(e.getCombinedLocalAndExportSymbolFlags(t)&r){var i=t.escapedName;n.has(i)||n.set(i,t)}}function s(e,t){t&&e.forEach((function(e){o(e,t)}))}function c(t,r){r&&t.forEach((function(t){e.getDeclarationOfKind(t,278)||e.getDeclarationOfKind(t,277)||o(t,r)}))}}(n,r):[]},getSymbolAtLocation:function(t){var r=e.getParseTreeNode(t);return r?AC(r,!0):void 0},getIndexInfosAtLocation:function(t){var r=e.getParseTreeNode(t);return r?function(t){if(e.isIdentifier(t)&&e.isPropertyAccessExpression(t.parent)&&t.parent.name===t){var r=W_(t),n=AD(t.parent.expression),i=1048576&n.flags?n.types:[n];return e.flatMap(i,(function(t){return e.filter(Nu(t),(function(e){return Eu(r,e.keyType)}))}))}return}(r):void 0},getShorthandAssignmentValueSymbol:function(t){var r=e.getParseTreeNode(t);return r?function(e){if(e&&300===e.kind)return aa(e.name,2208703);return}(r):void 0},getExportSpecifierLocalTargetSymbol:function(t){var r=e.getParseTreeNode(t,e.isExportSpecifier);return r?function(t){return e.isExportSpecifier(t)?t.parent.parent.moduleSpecifier?Ui(t.parent.parent,t):aa(t.propertyName||t.name,2998271):aa(t,2998271)}(r):void 0},getExportSymbolOfSymbol:function(e){return Da(e.exportSymbol||e)},getTypeAtLocation:function(t){var r=e.getParseTreeNode(t);return r?FC(r):je},getTypeOfAssignmentPattern:function(t){var r=e.getParseTreeNode(t,e.isAssignmentPattern);return r&&PC(r)||je},getPropertySymbolOfDestructuringAssignment:function(t){var r=e.getParseTreeNode(t,e.isIdentifier);return r?function(t){var r=PC(e.cast(t.parent.parent,e.isAssignmentPattern));return r&&xu(r,t.escapedText)}(r):void 0},signatureToString:function(t,r,n,i){return io(t,e.getParseTreeNode(r),n,i)},typeToString:function(t,r,n){return ao(t,e.getParseTreeNode(r),n)},symbolToString:function(t,r,n,i){return no(t,e.getParseTreeNode(r),n,i)},typePredicateToString:function(t,r,n){return _o(t,e.getParseTreeNode(r),n)},writeSignature:function(t,r,n,i,a){return io(t,e.getParseTreeNode(r),n,i,a)},writeType:function(t,r,n,i){return ao(t,e.getParseTreeNode(r),n,i)},writeSymbol:function(t,r,n,i,a){return no(t,e.getParseTreeNode(r),n,i,a)},writeTypePredicate:function(t,r,n,i){return _o(t,e.getParseTreeNode(r),n,i)},getAugmentedPropertiesOfType:MC,getRootSymbols:function t(r){var n=function(t){if(6&e.getCheckFlags(t))return e.mapDefined(_i(t).containingType.types,(function(e){return xu(e,t.escapedName)}));if(33554432&t.flags){var r=t,n=r.leftSpread,i=r.rightSpread,a=r.syntheticOrigin;return n?[n,i]:a?[a]:e.singleElementArray(function(e){var t,r=e;for(;r=_i(r).target;)t=r;return t}(t))}return}(r);return n?e.flatMap(n,t):[r]},getSymbolOfExpando:Qb,getContextualType:function(t,r){var n=e.getParseTreeNode(t,e.isExpression);if(n)return 4&r?fe(n,(function(){return Nv(n,r)})):Nv(n,r)},getContextualTypeForObjectLiteralElement:function(t){var r=e.getParseTreeNode(t,e.isObjectLiteralElementLike);return r?hv(r,void 0):void 0},getContextualTypeForArgumentAtIndex:function(t,r){var n=e.getParseTreeNode(t,e.isCallLikeExpression);return n&&pv(n,r)},getContextualTypeForJsxAttribute:function(t){var r=e.getParseTreeNode(t,e.isJsxAttributeLike);return r&&Dv(r,void 0)},isContextSensitive:Mp,getTypeOfPropertyOfContextualType:yv,getFullyQualifiedName:ia,getResolvedSignature:function(e,t,r){return ge(e,t,r,0)},getResolvedSignatureForStringLiteralCompletions:function(e,t,r){return ge(e,r,void 0,32,t)},getResolvedSignatureForSignatureHelp:function(e,t,r){return ge(e,t,r,16)},getExpandedParameters:yc,hasEffectiveRestParameter:Sx,containsArgumentsReference:qu,getConstantValue:function(t){var r=e.getParseTreeNode(t,rE);return r?nE(r):void 0},isValidPropertyAccess:function(t,r){var n=e.getParseTreeNode(t,e.isPropertyAccessOrQualifiedNameOrImportTypeNode);return!!n&&function(e,t){switch(e.kind){case 208:return Zh(e,106===e.expression.kind,t,Rg(wD(e.expression)));case 163:return Zh(e,!1,t,Rg(wD(e.left)));case 202:return Zh(e,!1,t,ip(e))}}(n,e.escapeLeadingUnderscores(r))},isValidPropertyAccessForCompletions:function(t,r,n){var i=e.getParseTreeNode(t,e.isPropertyAccessExpression);return!!i&&Yh(i,r,n)},getSignatureFromDeclaration:function(t){var r=e.getParseTreeNode(t,e.isFunctionLike);return r?Ku(r):void 0},isImplementationOfOverload:function(t){var r=e.getParseTreeNode(t,e.isFunctionLike);return r?QC(r):void 0},getImmediateAliasedSymbol:Kv,getAliasedSymbol:Xi,getEmitResolver:function(e,t){return bC(e,t),ae},getExportsOfModule:ga,getExportsAndPropertiesOfModule:function(t){var r=ga(t),n=_a(t);if(n!==t){var i=ys(n);ya(i)&&e.addRange(r,Qc(i))}return r},forEachExportAndPropertyOfModule:function(e,t){ha(e).forEach((function(e,r){Ra(r)||t(e,r)}));var r=_a(e);if(r!==e){var n=ys(r);ya(n)&&function(e,t){e=du(e),3670016&e.flags&&qc(e).members.forEach((function(e,r){ja(e,r)&&t(e,r)}))}(n,(function(e,r){t(e,r)}))}},getSymbolWalker:e.createGetSymbolWalker((function(e){return el(e)||Le}),Qu,Yu,Is,qc,ys,Em,Yc,e.getFirstIdentifier,Tl),getAmbientModules:function(){Ut||(Ut=[],se.forEach((function(e,t){i.test(t)&&Ut.push(e)})));return Ut},getJsxIntrinsicTagNamesAt:function(t){var r=Zv(E.IntrinsicElements,t);return r?Qc(r):e.emptyArray},isOptionalParameter:function(t){var r=e.getParseTreeNode(t,e.isParameter);return!!r&&Bu(r)},tryGetMemberInModuleExports:function(t,r){return ma(e.escapeLeadingUnderscores(t),r)},tryGetMemberInModuleExportsAndProperties:function(t,r){return function(e,t){var r=ma(e,t);if(r)return r;var n=_a(t);if(n===t)return;var i=ys(n);return ya(i)?xu(i,e):void 0}(e.escapeLeadingUnderscores(t),r)},tryFindAmbientModule:function(e){return Ru(e,!0)},tryFindAmbientModuleWithoutAugmentations:function(e){return Ru(e,!1)},getApparentType:_u,getUnionType:P_,isTypeAssignableTo:Vp,createAnonymousType:za,createSignature:pc,createSymbol:ri,createIndexInfo:ll,getAnyType:function(){return Le},getStringType:function(){return Ye},getNumberType:function(){return Ze},createPromiseType:Fx,createArrayType:u_,getElementTypeOfArrayType:Qf,getBooleanType:function(){return at},getFalseType:function(e){return e?et:tt},getTrueType:function(e){return e?rt:nt},getVoidType:function(){return st},getUndefinedType:function(){return qe},getNullType:function(){return Qe},getESSymbolType:function(){return ot},getNeverType:function(){return ct},getOptionalType:function(){return He},getPromiseType:function(){return e_(!1)},getPromiseLikeType:function(){return t_(!1)},getAsyncIterableType:function(){var e=n_(!1);if(e!==Pt)return e},isSymbolAccessible:Xa,isArrayType:qf,isTupleType:_g,isArrayLikeType:Xf,isTypeInvalidDueToUnionDiscriminant:function(e,t){return t.properties.some((function(t){var r=t.name&&W_(t.name),n=r&&tc(r)?oc(r):void 0,i=void 0===n?void 0:Co(e,n);return!!i&&ag(i)&&!Vp(FC(t),i)}))},getExactOptionalProperties:function(e){return Qc(e).filter((function(e){return kg(ys(e))}))},getAllPossiblePropertiesOfTypes:function(t){var r=P_(t);if(!(1048576&r.flags))return MC(r);for(var n=e.createSymbolTable(),i=0,a=t;i<a.length;i++)for(var o=0,s=MC(a[i]);o<s.length;o++){var c=s[o].escapedName;if(!n.has(c)){var u=pu(r,c);u&&n.set(c,u)}}return e.arrayFrom(n.values())},getSuggestedSymbolForNonexistentProperty:Kh,getSuggestionForNonexistentProperty:qh,getSuggestedSymbolForNonexistentJSXAttribute:Vh,getSuggestedSymbolForNonexistentSymbol:function(t,r,n){return Wh(t,e.escapeLeadingUnderscores(r),n)},getSuggestionForNonexistentSymbol:function(t,r,n){return function(t,r,n){var i=Wh(t,r,n);return i&&e.symbolName(i)}(t,e.escapeLeadingUnderscores(r),n)},getSuggestedSymbolForNonexistentModule:Hh,getSuggestionForNonexistentExport:function(t,r){var n=Hh(t,r);return n&&e.symbolName(n)},getSuggestedSymbolForNonexistentClassMember:Uh,getBaseConstraintOfType:ru,getDefaultFromTypeParameter:function(e){return e&&262144&e.flags?su(e):void 0},resolveName:function(t,r,n,i){return vi(r,e.escapeLeadingUnderscores(t),n,void 0,void 0,!1,i)},getJsxNamespace:function(t){return e.unescapeLeadingUnderscores(Vn(t))},getJsxFragmentFactory:function(t){var r=gE(t);return r&&e.unescapeLeadingUnderscores(e.getFirstIdentifier(r).escapedText)},getAccessibleSymbolChain:Va,getTypePredicateOfSignature:Qu,resolveExternalModuleName:function(t){var r=e.getParseTreeNode(t,e.isExpression);return r&&sa(r,r,!0)},resolveExternalModuleSymbol:_a,tryGetThisTypeAt:function(t,r,n){var i=e.getParseTreeNode(t);return i&&tv(i,r,n)},getTypeArgumentConstraint:function(t){var r=e.getParseTreeNode(t,e.isTypeNode);return r&&function(t){var r=e.tryCast(t.parent,e.isTypeReferenceType);if(!r)return;var n=WD(r);if(!n)return;var i=Yc(n[r.typeArguments.indexOf(t)]);return i&&Fp(i,lp(n,VD(r,n)))}(r)},getSuggestionDiagnostics:function(n,i){var a,s=e.getParseTreeNode(n,e.isSourceFile)||e.Debug.fail("Could not determine parsed source file.");if(e.skipTypeChecking(s,K,t))return e.emptyArray;try{return r=i,DC(s),e.Debug.assert(!!(1&di(s).flags)),a=e.addRange(a,wn.getDiagnostics(s.fileName)),xS(hC(s),(function(t,r,n){e.containsParseError(t)||vC(r,!!(16777216&t.flags))||(a||(a=[])).push(o(o({},n),{category:e.DiagnosticCategory.Suggestion}))})),a||e.emptyArray}finally{r=void 0}},runWithCancellationToken:function(e,t){try{return r=e,t(pe)}finally{r=void 0}},getLocalTypeParametersOfClassOrInterfaceOrTypeAlias:Cs,isDeclarationVisible:vo,isPropertyAccessible:$h,getTypeOnlyAliasDeclaration:ea,getMemberOverrideModifierStatus:function(t,r){if(!r.name)return 0;var n=Sa(t),i=qs(n),a=_c(i),o=ys(n),s=e.getEffectiveBaseTypeNode(t)&&Is(i),c=(null==s?void 0:s.length)?_c(e.first(s),i.thisType):void 0,u=Ps(i),l=r.parent?e.hasOverrideModifier(r):e.hasSyntacticModifier(r,16384),_=e.unescapeLeadingUnderscores(e.getTextOfPropertyName(r.name));return BT(t,o,u,c,i,a,l,e.hasAbstractModifier(r),e.isStatic(r),!1,_)},isTypeParameterPossiblyReferenced:Sp};function fe(t,r){var n=e.findAncestor(t,e.isCallLikeExpression),i=n&&di(n).resolvedSignature;if(n){var a=t;do{di(a).skipDirectInference=!0,a=a.parent}while(a&&a!==n);di(n).resolvedSignature=void 0}var o=r();if(n){a=t;do{di(a).skipDirectInference=void 0,a=a.parent}while(a&&a!==n);di(n).resolvedSignature=i}return o}function ge(t,r,n,i,a){var o=e.getParseTreeNode(t,e.isCallLikeExpression);le=n;var s=o?a?fe(a,(function(){return Wb(o,r,i)})):Wb(o,r,i):void 0;return le=void 0,s}var me=new e.Map,ye=new e.Map,ve=new e.Map,he=new e.Map,be=new e.Map,xe=new e.Map,De=new e.Map,Se=new e.Map,Te=new e.Map,Ce=new e.Map,Ee=new e.Map,ke=new e.Map,Ne=new e.Map,Ae=[],Fe=new e.Map,Pe=new e.Set,we=ri(4,"unknown"),Ie=ri(0,"__resolving__"),Oe=new e.Map,Me=new e.Map,Le=Oa(1,"any"),Re=Oa(1,"any",262144),Be=Oa(1,"any"),je=Oa(1,"error"),Je=Oa(1,"unresolved"),ze=Oa(1,"any",65536),Ue=Oa(1,"intrinsic"),Ke=Oa(2,"unknown"),Ve=Oa(2,"unknown"),qe=Oa(32768,"undefined"),We=G?qe:Oa(32768,"undefined",65536),He=Oa(32768,"undefined"),Ge=ne?Oa(32768,"undefined"):qe,Qe=Oa(65536,"null"),Xe=G?Qe:Oa(65536,"null",65536),Ye=Oa(4,"string"),Ze=Oa(8,"number"),$e=Oa(64,"bigint"),et=Oa(512,"false"),tt=Oa(512,"false"),rt=Oa(512,"true"),nt=Oa(512,"true");rt.regularType=nt,rt.freshType=rt,nt.regularType=nt,nt.freshType=rt,et.regularType=tt,et.freshType=et,tt.regularType=tt,tt.freshType=et;var it,at=P_([tt,nt]),ot=Oa(4096,"symbol"),st=Oa(16384,"void"),ct=Oa(131072,"never"),ut=Oa(131072,"never",262144),lt=Oa(131072,"never"),_t=Oa(131072,"never"),dt=Oa(67108864,"object"),pt=P_([Ye,Ze]),ft=P_([Ye,Ze,ot]),gt=te?Ye:ft,mt=P_([Ze,$e]),yt=P_([Ye,Ze,at,$e,Qe,qe]),vt=ed(["",""],[Ze]),ht=pp((function(e){return 262144&e.flags?!(t=e).constraint&&!fl(t)||t.constraint===It?t:t.restrictiveInstantiation||(t.restrictiveInstantiation=La(t.symbol),t.restrictiveInstantiation.constraint=It,t.restrictiveInstantiation):e;var t}),(function(){return"(restrictive mapper)"})),bt=pp((function(e){return 262144&e.flags?Be:e}),(function(){return"(permissive mapper)"})),xt=Oa(131072,"never"),Dt=pp((function(e){return 262144&e.flags?xt:e}),(function(){return"(unique literal mapper)"})),St=pp((function(e){return!it||e!==Lt&&e!==Rt&&e!==Bt||it(!0),e}),(function(){return"(unmeasurable reporter)"})),Tt=pp((function(e){return!it||e!==Lt&&e!==Rt&&e!==Bt||it(!1),e}),(function(){return"(unreliable reporter)"})),Ct=za(void 0,z,e.emptyArray,e.emptyArray,e.emptyArray),Et=za(void 0,z,e.emptyArray,e.emptyArray,e.emptyArray);Et.objectFlags|=2048;var kt=ri(2048,"__type");kt.members=e.createSymbolTable();var Nt=za(kt,z,e.emptyArray,e.emptyArray,e.emptyArray),At=za(void 0,z,e.emptyArray,e.emptyArray,e.emptyArray),Ft=G?P_([qe,Qe,At]):Ke,Pt=za(void 0,z,e.emptyArray,e.emptyArray,e.emptyArray);Pt.instantiations=new e.Map;var wt=za(void 0,z,e.emptyArray,e.emptyArray,e.emptyArray);wt.objectFlags|=262144;var It=za(void 0,z,e.emptyArray,e.emptyArray,e.emptyArray),Ot=za(void 0,z,e.emptyArray,e.emptyArray,e.emptyArray),Mt=za(void 0,z,e.emptyArray,e.emptyArray,e.emptyArray),Lt=La(),Rt=La();Rt.constraint=Lt;var Bt=La(),jt=La(),Jt=La();Jt.constraint=jt;var zt,Ut,Kt,Vt,qt,Wt,Ht,Gt,Qt,Xt,Yt,Zt,$t,er,tr,rr,nr,ir,ar,or,sr,cr,ur,lr,_r,dr,pr,fr,gr,mr,yr,vr,hr,br,xr,Dr,Sr,Tr,Cr,Er,kr,Nr,Ar,Fr,Pr,wr,Ir,Or,Mr,Lr,Rr,Br,jr=Ju(1,"<<unresolved>>",0,Le),Jr=pc(void 0,void 0,void 0,e.emptyArray,Le,void 0,0,0),zr=pc(void 0,void 0,void 0,e.emptyArray,je,void 0,0,0),Ur=pc(void 0,void 0,void 0,e.emptyArray,Le,void 0,0,0),Kr=pc(void 0,void 0,void 0,e.emptyArray,ut,void 0,0,0),Vr=ll(Ze,Ye,!0),qr=new e.Map,Wr={get yieldType(){return e.Debug.fail("Not supported")},get returnType(){return e.Debug.fail("Not supported")},get nextType(){return e.Debug.fail("Not supported")}},Hr=nT(Le,Le,Le),Gr=nT(Le,Le,Ke),Qr=nT(ct,Le,qe),Xr={iterableCacheKey:"iterationTypesOfAsyncIterable",iteratorCacheKey:"iterationTypesOfAsyncIterator",iteratorSymbolName:"asyncIterator",getGlobalIteratorType:function(e){return xr||(xr=Gl("AsyncIterator",3,e))||Pt},getGlobalIterableType:n_,getGlobalIterableIteratorType:function(e){return Dr||(Dr=Gl("AsyncIterableIterator",1,e))||Pt},getGlobalGeneratorType:function(e){return Sr||(Sr=Gl("AsyncGenerator",3,e))||Pt},resolveIterationType:uS,mustHaveANextMethodDiagnostic:e.Diagnostics.An_async_iterator_must_have_a_next_method,mustBeAMethodDiagnostic:e.Diagnostics.The_0_property_of_an_async_iterator_must_be_a_method,mustHaveAValueDiagnostic:e.Diagnostics.The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_property},Yr={iterableCacheKey:"iterationTypesOfIterable",iteratorCacheKey:"iterationTypesOfIterator",iteratorSymbolName:"iterator",getGlobalIteratorType:function(e){return gr||(gr=Gl("Iterator",3,e))||Pt},getGlobalIterableType:i_,getGlobalIterableIteratorType:function(e){return mr||(mr=Gl("IterableIterator",1,e))||Pt},getGlobalGeneratorType:function(e){return yr||(yr=Gl("Generator",3,e))||Pt},resolveIterationType:function(e,t){return e},mustHaveANextMethodDiagnostic:e.Diagnostics.An_iterator_must_have_a_next_method,mustBeAMethodDiagnostic:e.Diagnostics.The_0_property_of_an_iterator_must_be_a_method,mustHaveAValueDiagnostic:e.Diagnostics.The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property},Zr=new e.Map,$r=!1,en=new e.Map,tn=0,rn=0,nn=0,an=!1,on=0,sn=Xd(""),cn=Yd(0),un=Zd({negative:!1,base10Value:"0"}),ln=[],_n=[],dn=[],pn=0,fn=[],gn=[],mn=[],yn=[],vn=[],hn=[],bn=[],xn=[],Dn=[],Sn=[],Tn=[],Cn=[],En=[],kn=[],Nn=[],An=[],Fn=[],Pn=e.createDiagnosticCollection(),wn=e.createDiagnosticCollection(),In=P_(e.arrayFrom(b.keys(),Xd)),On=new e.Map,Mn=new e.Map,Ln=new e.Map,Rn=new e.Map,Bn=new e.Map,jn=new e.Map,Jn=e.createSymbolTable();Jn.set(ce.escapedName,ce);var zn=[[".mts",".mjs"],[".ts",".js"],[".cts",".cjs"],[".mjs",".mjs"],[".js",".js"],[".cjs",".cjs"],[".tsx",1===K.jsx?".jsx":".js"],[".jsx",".jsx"],[".json",".json"]];return function(){for(var r=0,n=t.getSourceFiles();r<n.length;r++){var i=n[r];e.bindSourceFile(i,K)}var a;zt=new e.Map;for(var o=0,s=t.getSourceFiles();o<s.length;o++){if(!(i=s[o]).redirectInfo){if(!e.isExternalOrCommonJsModule(i)){var c=i.locals.get("globalThis");if(null==c?void 0:c.declarations)for(var u=0,l=c.declarations;u<l.length;u++){var _=l[u];Pn.add(e.createDiagnosticForNode(_,e.Diagnostics.Declaration_name_conflicts_with_built_in_global_identifier_0,"globalThis"))}ui(se,i.locals)}if(i.jsGlobalAugmentations&&ui(se,i.jsGlobalAugmentations),i.patternAmbientModules&&i.patternAmbientModules.length&&(Kt=e.concatenate(Kt,i.patternAmbientModules)),i.moduleAugmentations.length&&(a||(a=[])).push(i.moduleAugmentations),i.symbol&&i.symbol.globalExports)i.symbol.globalExports.forEach((function(e,t){se.has(t)||se.set(t,e)}))}}if(a)for(var d=0,p=a;d<p.length;d++)for(var f=0,g=p[d];f<g.length;f++){var m=g[f];e.isGlobalScopeAugmentation(m.parent)&&li(m)}(function(t,r,n){r.forEach((function(r,i){var a=t.get(i);a?e.forEach(a.declarations,function(t,r){return function(n){return Pn.add(e.createDiagnosticForNode(n,r,t))}}(e.unescapeLeadingUnderscores(i),n)):t.set(i,r)}))})(se,Jn,e.Diagnostics.Declaration_name_conflicts_with_built_in_global_identifier_0),_i(ce).type=We,_i(_e).type=Gl("IArguments",0,!0),_i(we).type=je,_i(ue).type=Ma(16,ue),Qt=Gl("Array",1,!0),qt=Gl("Object",0,!0),Wt=Gl("Function",0,!0),Ht=X&&Gl("CallableFunction",0,!0)||Wt,Gt=X&&Gl("NewableFunction",0,!0)||Wt,Yt=Gl("String",0,!0),Zt=Gl("Number",0,!0),$t=Gl("Boolean",0,!0),er=Gl("RegExp",0,!0),rr=u_(Le),(nr=u_(Re))===Ct&&(nr=za(void 0,z,e.emptyArray,e.emptyArray,e.emptyArray));if(Xt=a_("ReadonlyArray",1)||Qt,ir=Xt?s_(Xt,[Le]):rr,tr=a_("ThisType",1),a)for(var y=0,v=a;y<v.length;y++)for(var h=0,b=v[y];h<b.length;h++){m=b[h];e.isGlobalScopeAugmentation(m.parent)||li(m)}zt.forEach((function(t){var r=t.firstFile,n=t.secondFile,i=t.conflictingSymbols;if(i.size<8)i.forEach((function(t,r){for(var n=t.isBlockScoped,i=t.firstFileLocations,a=t.secondFileLocations,o=n?e.Diagnostics.Cannot_redeclare_block_scoped_variable_0:e.Diagnostics.Duplicate_identifier_0,s=0,c=i;s<c.length;s++){ci(c[s],o,r,a)}for(var u=0,l=a;u<l.length;u++){ci(l[u],o,r,i)}}));else{var a=e.arrayFrom(i.keys()).join(", ");Pn.add(e.addRelatedInfo(e.createDiagnosticForNode(r,e.Diagnostics.Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0,a),e.createDiagnosticForNode(n,e.Diagnostics.Conflicts_are_in_this_file))),Pn.add(e.addRelatedInfo(e.createDiagnosticForNode(n,e.Diagnostics.Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0,a),e.createDiagnosticForNode(r,e.Diagnostics.Conflicts_are_in_this_file)))}})),zt=void 0}(),pe;function Un(e){return e?Ne.get(e):void 0}function Kn(e,t){return e&&Ne.set(e,t),t}function Vn(t){if(t){var r=e.getSourceFileOfNode(t);if(r)if(e.isJsxOpeningFragment(t)){if(r.localJsxFragmentNamespace)return r.localJsxFragmentNamespace;var n=r.pragmas.get("jsxfrag");if(n){var i=e.isArray(n)?n[0]:n;if(r.localJsxFragmentFactory=e.parseIsolatedEntityName(i.arguments.factory,V),e.visitNode(r.localJsxFragmentFactory,Wn),r.localJsxFragmentFactory)return r.localJsxFragmentNamespace=e.getFirstIdentifier(r.localJsxFragmentFactory).escapedText}var a=gE(t);if(a)return r.localJsxFragmentFactory=a,r.localJsxFragmentNamespace=e.getFirstIdentifier(a).escapedText}else{var o=qn(r);if(o)return r.localJsxNamespace=o}}return Rr||(Rr="React",K.jsxFactory?(Br=e.parseIsolatedEntityName(K.jsxFactory,V),e.visitNode(Br,Wn),Br&&(Rr=e.getFirstIdentifier(Br).escapedText)):K.reactNamespace&&(Rr=e.escapeLeadingUnderscores(K.reactNamespace))),Br||(Br=e.factory.createQualifiedName(e.factory.createIdentifier(e.unescapeLeadingUnderscores(Rr)),"createElement")),Rr}function qn(t){if(t.localJsxNamespace)return t.localJsxNamespace;var r=t.pragmas.get("jsx");if(r){var n=e.isArray(r)?r[0]:r;if(t.localJsxFactory=e.parseIsolatedEntityName(n.arguments.factory,V),e.visitNode(t.localJsxFactory,Wn),t.localJsxFactory)return t.localJsxNamespace=e.getFirstIdentifier(t.localJsxFactory).escapedText}}function Wn(t){return e.setTextRangePosEnd(t,-1,-1),e.visitEachChild(t,Wn,e.nullTransformationContext)}function Hn(e,t,r,n,i,a,o){var s=Qn(t,r,n,i,a,o);return s.skippedOn=e,s}function Gn(t,r,n,i,a,o){return t?e.createDiagnosticForNode(t,r,n,i,a,o):e.createCompilerDiagnostic(r,n,i,a,o)}function Qn(e,t,r,n,i,a){var o=Gn(e,t,r,n,i,a);return Pn.add(o),o}function Xn(t,r){t?Pn.add(r):wn.add(o(o({},r),{category:e.DiagnosticCategory.Suggestion}))}function Yn(t,r,n,i,a,o,s){if(r.pos<0||r.end<0){if(!t)return;var c=e.getSourceFileOfNode(r);Xn(t,"message"in n?e.createFileDiagnostic(c,0,0,n,i,a,o,s):e.createDiagnosticForFileFromMessageChain(c,n))}else Xn(t,"message"in n?e.createDiagnosticForNode(r,n,i,a,o,s):e.createDiagnosticForNodeFromMessageChain(r,n))}function Zn(t,r,n,i,a,o,s){var c=Qn(t,n,i,a,o,s);if(r){var u=e.createDiagnosticForNode(t,e.Diagnostics.Did_you_forget_to_use_await);e.addRelatedInfo(c,u)}return c}function $n(t,r){var n=Array.isArray(t)?e.forEach(t,e.getJSDocDeprecatedTag):e.getJSDocDeprecatedTag(t);return n&&e.addRelatedInfo(r,e.createDiagnosticForNode(n,e.Diagnostics.The_declaration_was_marked_as_deprecated_here)),wn.add(r),r}function ei(e){return!!(268435456&fh(e))}function ti(t,r,n){return $n(r,e.createDiagnosticForNode(t,e.Diagnostics._0_is_deprecated,n))}function ri(e,t,r){D++;var n=new y(33554432|e,t);return n.checkFlags=r||0,n}function ni(e){var t=0;return 2&e&&(t|=111551),1&e&&(t|=111550),4&e&&(t|=0),8&e&&(t|=900095),16&e&&(t|=110991),32&e&&(t|=899503),64&e&&(t|=788872),256&e&&(t|=899327),128&e&&(t|=899967),512&e&&(t|=110735),8192&e&&(t|=103359),32768&e&&(t|=46015),65536&e&&(t|=78783),262144&e&&(t|=526824),524288&e&&(t|=788968),2097152&e&&(t|=2097152),t}function ii(e,t){t.mergeId||(t.mergeId=_,_++),fn[t.mergeId]=e}function ai(t){var r=ri(t.flags,t.escapedName);return r.declarations=t.declarations?t.declarations.slice():[],r.parent=t.parent,t.valueDeclaration&&(r.valueDeclaration=t.valueDeclaration),t.constEnumOnlyModule&&(r.constEnumOnlyModule=!0),t.members&&(r.members=new e.Map(t.members)),t.exports&&(r.exports=new e.Map(t.exports)),ii(r,t),r}function oi(t,r,n){if(void 0===n&&(n=!1),!(t.flags&ni(r.flags))||67108864&(r.flags|t.flags)){if(r===t)return t;if(!(33554432&t.flags)){var i=Qi(t);if(i===we)return r;t=ai(i)}512&r.flags&&512&t.flags&&t.constEnumOnlyModule&&!r.constEnumOnlyModule&&(t.constEnumOnlyModule=!1),t.flags|=r.flags,r.valueDeclaration&&e.setValueDeclaration(t,r.valueDeclaration),e.addRange(t.declarations,r.declarations),r.members&&(t.members||(t.members=e.createSymbolTable()),ui(t.members,r.members,n)),r.exports&&(t.exports||(t.exports=e.createSymbolTable()),ui(t.exports,r.exports,n)),n||ii(t,r)}else if(1024&t.flags)t!==ue&&Qn(r.declarations&&e.getNameOfDeclaration(r.declarations[0]),e.Diagnostics.Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity,no(t));else{var a=!!(384&t.flags||384&r.flags),o=!!(2&t.flags||2&r.flags),s=a?e.Diagnostics.Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations:o?e.Diagnostics.Cannot_redeclare_block_scoped_variable_0:e.Diagnostics.Duplicate_identifier_0,c=r.declarations&&e.getSourceFileOfNode(r.declarations[0]),u=t.declarations&&e.getSourceFileOfNode(t.declarations[0]),l=e.isPlainJsFile(c,K.checkJs),_=e.isPlainJsFile(u,K.checkJs),d=no(r);if(c&&u&&zt&&!a&&c!==u){var p=-1===e.comparePaths(c.path,u.path)?c:u,f=p===c?u:c,g=e.getOrUpdate(zt,"".concat(p.path,"|").concat(f.path),(function(){return{firstFile:p,secondFile:f,conflictingSymbols:new e.Map}})),m=e.getOrUpdate(g.conflictingSymbols,d,(function(){return{isBlockScoped:o,firstFileLocations:[],secondFileLocations:[]}}));l||y(m.firstFileLocations,r),_||y(m.secondFileLocations,t)}else l||si(r,s,d,t),_||si(t,s,d,r)}return t;function y(t,r){if(r.declarations)for(var n=0,i=r.declarations;n<i.length;n++){var a=i[n];e.pushIfUnique(t,a)}}}function si(t,r,n,i){e.forEach(t.declarations,(function(e){ci(e,r,n,i.declarations)}))}function ci(t,r,n,i){for(var a=(e.getExpandoInitializer(t,!1)?e.getNameOfExpando(t):e.getNameOfDeclaration(t))||t,o=function(t,r,n,i,a,o){var s=t?e.createDiagnosticForNode(t,r,n,i,a,o):e.createCompilerDiagnostic(r,n,i,a,o);return Pn.lookup(s)||(Pn.add(s),s)}(a,r,n),s=function(t){var r=(e.getExpandoInitializer(t,!1)?e.getNameOfExpando(t):e.getNameOfDeclaration(t))||t;if(r===a)return"continue";o.relatedInformation=o.relatedInformation||[];var i=e.createDiagnosticForNode(r,e.Diagnostics._0_was_also_declared_here,n),s=e.createDiagnosticForNode(r,e.Diagnostics.and_here);if(e.length(o.relatedInformation)>=5||e.some(o.relatedInformation,(function(t){return 0===e.compareDiagnostics(t,s)||0===e.compareDiagnostics(t,i)})))return"continue";e.addRelatedInfo(o,e.length(o.relatedInformation)?s:i)},c=0,u=i||e.emptyArray;c<u.length;c++){s(u[c])}}function ui(e,t,r){void 0===r&&(r=!1),t.forEach((function(t,n){var i=e.get(n);e.set(n,i?oi(i,t,r):Da(t))}))}function li(t){var r,n,i,a=t.parent;if((null===(r=a.symbol.declarations)||void 0===r?void 0:r[0])===a)if(e.isGlobalScopeAugmentation(a))ui(se,a.symbol.exports);else{var o=ca(t,t,16777216&t.parent.parent.flags?void 0:e.Diagnostics.Invalid_module_name_in_augmentation_module_0_cannot_be_found,!0);if(!o)return;if(1920&(o=_a(o)).flags)if(e.some(Kt,(function(e){return o===e.symbol}))){var s=oi(a.symbol,o,!0);Vt||(Vt=new e.Map),Vt.set(t.text,s)}else{if((null===(n=o.exports)||void 0===n?void 0:n.get("__export"))&&(null===(i=a.symbol.exports)||void 0===i?void 0:i.size))for(var c=cc(o,"resolvedExports"),u=0,l=e.arrayFrom(a.symbol.exports.entries());u<l.length;u++){var _=l[u],d=_[0],p=_[1];c.has(d)&&!o.exports.has(d)&&oi(c.get(d),p)}oi(o,a.symbol)}else Qn(t,e.Diagnostics.Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity,t.text)}else e.Debug.assert(a.symbol.declarations.length>1)}function _i(e){if(33554432&e.flags)return e;var t=P(e);return gn[t]||(gn[t]=new N)}function di(e){var t=F(e);return mn[t]||(mn[t]=new A)}function pi(t){return 308===t.kind&&!e.isExternalOrCommonJsModule(t)}function fi(t,r,n){if(n){var i=Da(t.get(r));if(i){if(e.Debug.assert(0==(1&e.getCheckFlags(i)),"Should never get an instantiated symbol here."),i.flags&n)return i;if(2097152&i.flags)if(Yi(i)&n)return i}}}function gi(r,n){var i=e.getSourceFileOfNode(r),a=e.getSourceFileOfNode(n),o=e.getEnclosingBlockScopeContainer(r);if(i!==a){if(q&&(i.externalModuleIndicator||a.externalModuleIndicator)||!e.outFile(K)||km(n)||16777216&r.flags)return!0;if(u(n,r))return!0;var s=t.getSourceFiles();return s.indexOf(i)<=s.indexOf(a)}if(r.pos<=n.pos&&(!e.isPropertyDeclaration(r)||!e.isThisProperty(n.parent)||r.initializer||r.exclamationToken)){if(205===r.kind){var c=e.getAncestor(n,205);return c?e.findAncestor(c,e.isBindingElement)!==e.findAncestor(r,e.isBindingElement)||r.pos<c.pos:gi(e.getAncestor(r,257),n)}return 257===r.kind?!function(t,r){switch(t.parent.parent.kind){case 240:case 245:case 247:if(Ni(r,t,o))return!0}var n=t.parent.parent;return e.isForInOrOfStatement(n)&&Ni(r,n.expression,o)}(r,n):e.isClassDeclaration(r)?!e.findAncestor(n,(function(t){return e.isComputedPropertyName(t)&&t.parent.parent===r})):e.isPropertyDeclaration(r)?!l(r,n,!1):!e.isParameterPropertyDeclaration(r,r.parent)||!(99===e.getEmitScriptTarget(K)&&W&&e.getContainingClass(r)===e.getContainingClass(n)&&u(n,r))}return!!(278===n.parent.kind||274===n.parent.kind&&n.parent.isExportEquals)||(!(274!==n.kind||!n.isExportEquals)||(!!(8388608&n.flags||km(n)||e.findAncestor(n,(function(t){return e.isInterfaceDeclaration(t)||e.isTypeAliasDeclaration(t)})))||!!u(n,r)&&(99!==e.getEmitScriptTarget(K)||!W||!e.getContainingClass(r)||!e.isPropertyDeclaration(r)&&!e.isParameterPropertyDeclaration(r,r.parent)||!l(r,n,!0))));function u(t,r){return!!e.findAncestor(t,(function(n){if(n===o)return"quit";if(e.isFunctionLike(n))return!0;if(e.isClassStaticBlockDeclaration(n))return r.pos<t.pos;var i=e.tryCast(n.parent,e.isPropertyDeclaration);if(i&&i.initializer===n)if(e.isStatic(n.parent)){if(171===r.kind)return!0;if(e.isPropertyDeclaration(r)&&e.getContainingClass(t)===e.getContainingClass(r)){var a=r.name;if(e.isIdentifier(a)||e.isPrivateIdentifier(a))if(function(t,r,n,i,a){for(var o=0,s=n;o<s.length;o++){var c=s[o];if(c.pos>=i&&c.pos<=a){var u=e.factory.createPropertyAccessExpression(e.factory.createThis(),t);if(e.setParent(u.expression,u),e.setParent(u,c),u.flowNode=c.returnFlowNode,!_f(By(u,r,bg(r))))return!0}}return!1}(a,ys(Sa(r)),e.filter(r.parent.members,e.isClassStaticBlockDeclaration),r.parent.pos,n.pos))return!0}}else{if(!(169===r.kind&&!e.isStatic(r))||e.getContainingClass(t)!==e.getContainingClass(r))return!0}return!1}))}function l(t,r,n){return!(r.end>t.end)&&void 0===e.findAncestor(r,(function(r){if(r===t)return"quit";switch(r.kind){case 216:return!0;case 169:return!n||!(e.isPropertyDeclaration(t)&&r.parent===t.parent||e.isParameterPropertyDeclaration(t,t.parent)&&r.parent===t.parent.parent)||"quit";case 238:switch(r.parent.kind){case 174:case 171:case 175:return!0;default:return!1}default:return!1}}))}}function mi(t,r,n){var i=e.getEmitScriptTarget(K),a=r;if(e.isParameter(n)&&a.body&&t.valueDeclaration&&t.valueDeclaration.pos>=a.body.pos&&t.valueDeclaration.end<=a.body.end&&i>=2){var o=di(a);return void 0===o.declarationRequiresScopeChange&&(o.declarationRequiresScopeChange=e.forEach(a.parameters,(function(e){return s(e.name)||!!e.initializer&&s(e.initializer)}))||!1),!o.declarationRequiresScopeChange}return!1;function s(t){switch(t.kind){case 216:case 215:case 259:case 173:return!1;case 171:case 174:case 175:case 299:return s(t.name);case 169:return e.hasStaticModifier(t)?i<99||!W:s(t.name);default:return e.isNullishCoalesce(t)||e.isOptionalChain(t)?i<7:e.isBindingElement(t)&&t.dotDotDotToken&&e.isObjectBindingPattern(t.parent)?i<4:!e.isTypeNode(t)&&(e.forEachChild(t,s)||!1)}}}function yi(t){return e.isAssertionExpression(t)&&e.isConstTypeReference(t.type)||e.isJSDocTypeTag(t)&&e.isConstTypeReference(t.typeExpression)}function vi(e,t,r,n,i,a,o,s){return void 0===o&&(o=!1),void 0===s&&(s=!0),hi(e,t,r,n,i,a,o,s,fi)}function hi(t,r,n,i,a,o,s,c,u){var l,_,d,p,f,g,y,v,h,b=t,x=!1,D=t,S=!1;e:for(;t;){if("const"===r&&yi(t))return;if(t.locals&&!pi(t)&&(p=u(t.locals,r,n))){var T=!0;if(e.isFunctionLike(t)&&f&&f!==t.body?(n&p.flags&788968&&323!==f.kind&&(T=!!(262144&p.flags)&&(f===t.type||166===f.kind||343===f.kind||344===f.kind||165===f.kind)),n&p.flags&3&&(mi(p,t,f)?T=!1:1&p.flags&&(T=166===f.kind||f===t.type&&!!e.findAncestor(p.valueDeclaration,e.isParameter)))):191===t.kind&&(T=f===t.trueType),T)break e;p=void 0}switch(x=x||xi(t,f),t.kind){case 308:if(!e.isExternalOrCommonJsModule(t))break;S=!0;case 264:var C=(null===(l=Sa(t))||void 0===l?void 0:l.exports)||z;if(308===t.kind||e.isModuleDeclaration(t)&&16777216&t.flags&&!e.isGlobalScopeAugmentation(t)){if(p=C.get("default")){var E=e.getLocalSymbolForExportDefault(p);if(E&&p.flags&n&&E.escapedName===r)break e;p=void 0}var k=C.get(r);if(k&&2097152===k.flags&&(e.getDeclarationOfKind(k,278)||e.getDeclarationOfKind(k,277)))break}if("default"!==r&&(p=u(C,r,2623475&n))){if(!e.isSourceFile(t)||!t.commonJsModuleIndicator||(null===(_=p.declarations)||void 0===_?void 0:_.some(e.isJSDocTypeAlias)))break e;p=void 0}break;case 263:if(p=u((null===(d=Sa(t))||void 0===d?void 0:d.exports)||z,r,8&n))break e;break;case 169:if(!e.isStatic(t)){var N=Pa(t.parent);N&&N.locals&&u(N.locals,r,111551&n)&&(e.Debug.assertNode(t,e.isPropertyDeclaration),y=t)}break;case 260:case 228:case 261:if(p=u(Sa(t).members||z,r,788968&n)){if(!Ti(p,t)){p=void 0;break}if(f&&e.isStatic(f))return void(i&&Qn(D,e.Diagnostics.Static_members_cannot_reference_class_type_parameters));break e}if(228===t.kind&&32&n){var A=t.name;if(A&&r===A.escapedText){p=t.symbol;break e}}break;case 230:if(f===t.expression&&94===t.parent.token){var F=t.parent.parent;if(e.isClassLike(F)&&(p=u(Sa(F).members,r,788968&n)))return void(i&&Qn(D,e.Diagnostics.Base_class_expressions_cannot_reference_class_type_parameters))}break;case 164:if(h=t.parent.parent,(e.isClassLike(h)||261===h.kind)&&(p=u(Sa(h).members,r,788968&n)))return void(i&&Qn(D,e.Diagnostics.A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type));break;case 216:if(e.getEmitScriptTarget(K)>=2)break;case 171:case 173:case 174:case 175:case 259:if(3&n&&"arguments"===r){p=_e;break e}break;case 215:if(3&n&&"arguments"===r){p=_e;break e}if(16&n){var P=t.name;if(P&&r===P.escapedText){p=t.symbol;break e}}break;case 167:t.parent&&166===t.parent.kind&&(t=t.parent),t.parent&&(e.isClassElement(t.parent)||260===t.parent.kind)&&(t=t.parent);break;case 348:case 341:case 342:var w=e.getJSDocRoot(t);w&&(t=w.parent);break;case 166:f&&(f===t.initializer||f===t.name&&e.isBindingPattern(f))&&(v||(v=t));break;case 205:f&&(f===t.initializer||f===t.name&&e.isBindingPattern(f))&&e.isParameterDeclaration(t)&&!v&&(v=t);break;case 192:if(262144&n){var I=t.typeParameter.name;if(I&&r===I.escapedText){p=t.typeParameter.symbol;break e}}}Di(t)&&(g=t),f=t,t=e.isJSDocTemplateTag(t)?e.getEffectiveContainerForJSDocTemplateTag(t)||t.parent:(e.isJSDocParameterTag(t)||e.isJSDocReturnTag(t))&&e.getHostSignatureFromJSDoc(t)||t.parent}if(!o||!p||g&&p===g.symbol||(p.isReferenced|=n),!p){if(f&&(e.Debug.assert(308===f.kind),f.commonJsModuleIndicator&&"exports"===r&&n&f.symbol.flags))return f.symbol;s||(p=u(se,r,n))}if(!p&&b&&e.isInJSFile(b)&&b.parent&&e.isRequireCall(b.parent,!1))return de;function O(){return!(!y||W&&e.getEmitScriptTarget(K)>=9)&&(Qn(D,D&&y.type&&e.textRangeContainsPositionInclusive(y.type,D.pos)?e.Diagnostics.Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor:e.Diagnostics.Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor,e.declarationNameToString(y.name),Si(a)),!0)}if(p){if(!i||!O())return i&&m((function(){if(D&&(2&n||(32&n||384&n)&&111551==(111551&n))){var t=Aa(p);(2&t.flags||32&t.flags||384&t.flags)&&function(t,r){var n;if(e.Debug.assert(!!(2&t.flags||32&t.flags||384&t.flags)),67108881&t.flags&&32&t.flags)return;var i=null===(n=t.declarations)||void 0===n?void 0:n.find((function(t){return e.isBlockOrCatchScoped(t)||e.isClassLike(t)||263===t.kind}));if(void 0===i)return e.Debug.fail("checkResolvedBlockScopedVariable could not find block-scoped declaration");if(!(16777216&i.flags||gi(i,r))){var a=void 0,o=e.declarationNameToString(e.getNameOfDeclaration(i));2&t.flags?a=Qn(r,e.Diagnostics.Block_scoped_variable_0_used_before_its_declaration,o):32&t.flags?a=Qn(r,e.Diagnostics.Class_0_used_before_its_declaration,o):256&t.flags?a=Qn(r,e.Diagnostics.Enum_0_used_before_its_declaration,o):(e.Debug.assert(!!(128&t.flags)),e.shouldPreserveConstEnums(K)&&(a=Qn(r,e.Diagnostics.Enum_0_used_before_its_declaration,o))),a&&e.addRelatedInfo(a,e.createDiagnosticForNode(i,e.Diagnostics._0_is_declared_here,o))}}(t,D)}if(p&&S&&111551==(111551&n)&&!(8388608&b.flags)){var i=Da(p);e.length(i.declarations)&&e.every(i.declarations,(function(t){return e.isNamespaceExportDeclaration(t)||e.isSourceFile(t)&&!!t.symbol.globalExports}))&&Yn(!K.allowUmdGlobalAccess,D,e.Diagnostics._0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead,e.unescapeLeadingUnderscores(r))}if(p&&v&&!x&&111551==(111551&n)){var a=Da(lc(p)),o=e.getRootDeclaration(v);a===Sa(v)?Qn(D,e.Diagnostics.Parameter_0_cannot_reference_itself,e.declarationNameToString(v.name)):a.valueDeclaration&&a.valueDeclaration.pos>v.pos&&o.parent.locals&&u(o.parent.locals,a.escapedName,n)===a&&Qn(D,e.Diagnostics.Parameter_0_cannot_reference_identifier_1_declared_after_it,e.declarationNameToString(v.name),e.declarationNameToString(D))}if(p&&D&&111551&n&&2097152&p.flags&&!(111551&p.flags)&&!e.isValidTypeOnlyAliasUseSite(D)){var s=ea(p,111551);if(s){var c=278===s.kind?e.Diagnostics._0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type:e.Diagnostics._0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type,l=e.unescapeLeadingUnderscores(r);bi(Qn(D,c,l),s,l)}}})),p}else i&&m((function(){if(!(D&&(function(t,r,n){if(!e.isIdentifier(t)||t.escapedText!==r||SC(t)||km(t))return!1;var i=e.getThisContainer(t,!1),a=i;for(;a;){if(e.isClassLike(a.parent)){var o=Sa(a.parent);if(!o)break;if(xu(ys(o),r))return Qn(t,e.Diagnostics.Cannot_find_name_0_Did_you_mean_the_static_member_1_0,Si(n),no(o)),!0;if(a===i&&!e.isStatic(a))if(xu(qs(o).thisType,r))return Qn(t,e.Diagnostics.Cannot_find_name_0_Did_you_mean_the_instance_member_this_0,Si(n)),!0}a=a.parent}return!1}(D,r,a)||O()||Ci(D)||function(t,r,n){var i=1920|(e.isInJSFile(t)?111551:0);if(n===i){var a=Qi(vi(t,r,788968&~i,void 0,void 0,!1)),o=t.parent;if(a){if(e.isQualifiedName(o)){e.Debug.assert(o.left===t,"Should only be resolving left side of qualified name as a namespace");var s=o.right.escapedText;if(xu(qs(a),s))return Qn(o,e.Diagnostics.Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_property_1_in_0_with_0_1,e.unescapeLeadingUnderscores(r),e.unescapeLeadingUnderscores(s)),!0}return Qn(t,e.Diagnostics._0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here,e.unescapeLeadingUnderscores(r)),!0}}return!1}(D,r,n)||function(t,r){if(ki(r)&&278===t.parent.kind)return Qn(t,e.Diagnostics.Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module,r),!0;return!1}(D,r)||function(t,r,n){if(111127&n){if(Qi(vi(t,r,1024,void 0,void 0,!1)))return Qn(t,e.Diagnostics.Cannot_use_namespace_0_as_a_value,e.unescapeLeadingUnderscores(r)),!0}else if(788544&n){if(Qi(vi(t,r,1536,void 0,void 0,!1)))return Qn(t,e.Diagnostics.Cannot_use_namespace_0_as_a_type,e.unescapeLeadingUnderscores(r)),!0}return!1}(D,r,n)||function(t,r,n){if(111551&n){if(ki(r))return!function(t){var r=t.parent.parent,n=r.parent;if(r&&n){var i=e.isHeritageClause(r)&&94===r.token,a=e.isInterfaceDeclaration(n);return i&&a}return!1}(t)?Qn(t,e.Diagnostics._0_only_refers_to_a_type_but_is_being_used_as_a_value_here,e.unescapeLeadingUnderscores(r)):Qn(t,e.Diagnostics.An_interface_cannot_extend_a_primitive_type_like_0_an_interface_can_only_extend_named_types_and_classes,e.unescapeLeadingUnderscores(r)),!0;var i=Qi(vi(t,r,788544,void 0,void 0,!1)),a=i&&Yi(i);if(i&&void 0!==a&&!(111551&a)){var o=e.unescapeLeadingUnderscores(r);return!function(e){switch(e){case"Promise":case"Symbol":case"Map":case"WeakMap":case"Set":case"WeakSet":return!0}return!1}(r)?!function(t,r){var n=e.findAncestor(t.parent,(function(t){return!e.isComputedPropertyName(t)&&!e.isPropertySignature(t)&&(e.isTypeLiteralNode(t)||"quit")}));if(n&&1===n.members.length){var i=qs(r);return!!(1048576&i.flags)&&$x(i,384,!0)}return!1}(t,i)?Qn(t,e.Diagnostics._0_only_refers_to_a_type_but_is_being_used_as_a_value_here,o):Qn(t,e.Diagnostics._0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0,o,"K"===o?"P":"K"):Qn(t,e.Diagnostics._0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_es2015_or_later,o),!0}}return!1}(D,r,n)||function(t,r,n){if(788584&n){var i=Qi(vi(t,r,111127,void 0,void 0,!1));if(i&&!(1920&i.flags))return Qn(t,e.Diagnostics._0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0,e.unescapeLeadingUnderscores(r)),!0}return!1}(D,r,n)))){var t=void 0,o=void 0;if(a&&(o=function(t){for(var r=Si(t),n=e.getScriptTargetFeatures(),i=e.getOwnKeys(n),a=0,o=i;a<o.length;a++){var s=o[a],c=e.getOwnKeys(n[s]);if(void 0!==c&&e.contains(c,r))return s}}(a),o&&Qn(D,i,Si(a),o)),!o&&c&&pn<10)if((null==(t=Wh(b,r,n))?void 0:t.valueDeclaration)&&e.isAmbientModule(t.valueDeclaration)&&e.isGlobalScopeAugmentation(t.valueDeclaration)&&(t=void 0),t){var s=no(t),u=Lh(b,t,!1),l=1920===n||a&&"string"!=typeof a&&e.nodeIsSynthesized(a)?e.Diagnostics.Cannot_find_namespace_0_Did_you_mean_1:u?e.Diagnostics.Could_not_find_name_0_Did_you_mean_1:e.Diagnostics.Cannot_find_name_0_Did_you_mean_1,_=Gn(D,l,Si(a),s);Xn(!u,_),t.valueDeclaration&&e.addRelatedInfo(_,e.createDiagnosticForNode(t.valueDeclaration,e.Diagnostics._0_is_declared_here,s))}t||o||!a||Qn(D,i,Si(a)),pn++}}))}function bi(t,r,n){return r?e.addRelatedInfo(t,e.createDiagnosticForNode(r,278===r.kind?e.Diagnostics._0_was_exported_here:e.Diagnostics._0_was_imported_here,n)):t}function xi(t,r){return 216!==t.kind&&215!==t.kind?e.isTypeQueryNode(t)||(e.isFunctionLikeDeclaration(t)||169===t.kind&&!e.isStatic(t))&&(!r||r!==t.name):(!r||r!==t.name)&&(!(!t.asteriskToken&&!e.hasSyntacticModifier(t,512))||!e.getImmediatelyInvokedFunctionExpression(t))}function Di(e){switch(e.kind){case 259:case 260:case 261:case 263:case 262:case 264:return!0;default:return!1}}function Si(t){return e.isString(t)?e.unescapeLeadingUnderscores(t):e.declarationNameToString(t)}function Ti(t,r){if(t.declarations)for(var n=0,i=t.declarations;n<i.length;n++){var a=i[n];if(165===a.kind)if((e.isJSDocTemplateTag(a.parent)?e.getJSDocHost(a.parent):a.parent)===r)return!(e.isJSDocTemplateTag(a.parent)&&e.find(a.parent.parent.tags,e.isJSDocTypeAlias))}return!1}function Ci(t){var r=Ei(t);return!(!r||!aa(r,64,!0))&&(Qn(t,e.Diagnostics.Cannot_extend_an_interface_0_Did_you_mean_implements,e.getTextOfNode(r)),!0)}function Ei(t){switch(t.kind){case 79:case 208:return t.parent?Ei(t.parent):void 0;case 230:if(e.isEntityNameExpression(t.expression))return t.expression;default:return}}function ki(e){return"any"===e||"string"===e||"number"===e||"boolean"===e||"never"===e||"unknown"===e}function Ni(t,r,n){return!!r&&!!e.findAncestor(t,(function(t){return t===r||!(t!==n&&(!e.isFunctionLike(t)||e.getImmediatelyInvokedFunctionExpression(t)))&&"quit"}))}function Ai(e){switch(e.kind){case 268:return e;case 270:return e.parent;case 271:return e.parent.parent;case 273:return e.parent.parent.parent;default:return}}function Fi(t){return t.declarations&&e.findLast(t.declarations,Pi)}function Pi(t){return 268===t.kind||267===t.kind||270===t.kind&&!!t.name||271===t.kind||277===t.kind||273===t.kind||278===t.kind||274===t.kind&&e.exportAssignmentIsAlias(t)||e.isBinaryExpression(t)&&2===e.getAssignmentDeclarationKind(t)&&e.exportAssignmentIsAlias(t)||e.isAccessExpression(t)&&e.isBinaryExpression(t.parent)&&t.parent.left===t&&63===t.parent.operatorToken.kind&&wi(t.parent.right)||300===t.kind||299===t.kind&&wi(t.initializer)||257===t.kind&&e.isVariableDeclarationInitializedToBareOrAccessedRequire(t)||205===t.kind&&e.isVariableDeclarationInitializedToBareOrAccessedRequire(t.parent.parent)}function wi(t){return e.isAliasableExpression(t)||e.isFunctionExpression(t)&&Hb(t)}function Ii(t,r){var n=Vi(t);if(n){var i=e.getLeftmostAccessExpression(n.expression).arguments[0];return e.isIdentifier(n.name)?Qi(xu(Hu(i),n.name.escapedText)):void 0}if(e.isVariableDeclaration(t)||280===t.moduleReference.kind){var a=sa(t,e.getExternalModuleRequireArgument(t)||e.getExternalModuleImportEqualsDeclarationExpression(t)),o=_a(a);return Zi(t,a,o,!1),o}var s=na(t.moduleReference,r);return function(t,r){if(Zi(t,void 0,r,!1)&&!t.isTypeOnly){var n=ea(Sa(t)),i=278===n.kind,a=i?e.Diagnostics.An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type:e.Diagnostics.An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type,o=i?e.Diagnostics._0_was_exported_here:e.Diagnostics._0_was_imported_here,s=e.unescapeLeadingUnderscores(n.name.escapedText);e.addRelatedInfo(Qn(t.moduleReference,a),e.createDiagnosticForNode(n,o,s))}}(t,s),s}function Oi(e,t,r,n){var i=e.exports.get("export="),a=i?xu(ys(i),t):e.exports.get(t),o=Qi(a,n);return Zi(r,a,o,!1),o}function Mi(t){return e.isExportAssignment(t)&&!t.isExportEquals||e.hasSyntacticModifier(t,1024)||e.isExportSpecifier(t)}function Li(t){return e.isStringLiteralLike(t)?e.getModeForUsageLocation(e.getSourceFileOfNode(t),t):void 0}function Ri(t,r){return t===e.ModuleKind.ESNext&&r===e.ModuleKind.CommonJS}function Bi(t){return Li(t)===e.ModuleKind.ESNext&&e.endsWith(t.text,".json")}function ji(t,r,n,i){var a=t&&Li(i);if(t&&void 0!==a){var o=Ri(a,t.impliedNodeFormat);if(a===e.ModuleKind.ESNext||o)return o}if(!H)return!1;if(!t||t.isDeclarationFile){var s=Oi(r,"default",void 0,!0);return(!s||!e.some(s.declarations,Mi))&&!Oi(r,e.escapeLeadingUnderscores("__esModule"),void 0,n)}return e.isSourceFileJS(t)?"object"!=typeof t.externalModuleIndicator&&!Oi(r,e.escapeLeadingUnderscores("__esModule"),void 0,n):fa(r)}function Ji(t,r,n){var i,a;a=e.isShorthandAmbientModuleSymbol(t)?t:Oi(t,"default",r,n);var o=null===(i=t.declarations)||void 0===i?void 0:i.find(e.isSourceFile),s=zi(r);if(!s)return a;var c=Bi(s),u=ji(o,t,n,s);if(a||u||c){if(u||c){var l=_a(t,n)||Qi(t,n);return Zi(r,t,l,!1),l}}else if(fa(t)){var _=q>=e.ModuleKind.ES2015?"allowSyntheticDefaultImports":"esModuleInterop",d=t.exports.get("export=").valueDeclaration,p=Qn(r.name,e.Diagnostics.Module_0_can_only_be_default_imported_using_the_1_flag,no(t),_);d&&e.addRelatedInfo(p,e.createDiagnosticForNode(d,e.Diagnostics.This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag,_))}else e.isImportClause(r)?function(t,r){var n,i,a;if(null===(n=t.exports)||void 0===n?void 0:n.has(r.symbol.escapedName))Qn(r.name,e.Diagnostics.Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead,no(t),no(r.symbol));else{var o=Qn(r.name,e.Diagnostics.Module_0_has_no_default_export,no(t)),s=null===(i=t.exports)||void 0===i?void 0:i.get("__export");if(s){var c=null===(a=s.declarations)||void 0===a?void 0:a.find((function(t){var r,n;return!!(e.isExportDeclaration(t)&&t.moduleSpecifier&&(null===(n=null===(r=sa(t,t.moduleSpecifier))||void 0===r?void 0:r.exports)||void 0===n?void 0:n.has("default")))}));c&&e.addRelatedInfo(o,e.createDiagnosticForNode(c,e.Diagnostics.export_Asterisk_does_not_re_export_a_default))}}}(t,r):Ki(t,t,r,e.isImportOrExportSpecifier(r)&&r.propertyName||r.name);return Zi(r,a,void 0,!1),a}function zi(t){switch(t.kind){case 270:return t.parent.moduleSpecifier;case 268:return e.isExternalModuleReference(t.moduleReference)?t.moduleReference.expression:void 0;case 271:case 278:return t.parent.parent.moduleSpecifier;case 273:return t.parent.parent.parent.moduleSpecifier;default:return e.Debug.assertNever(t)}}function Ui(t,r,n){var i;void 0===n&&(n=!1);var a=e.getExternalModuleRequireArgument(t)||t.moduleSpecifier,o=sa(t,a),s=!e.isPropertyAccessExpression(r)&&r.propertyName||r.name;if(e.isIdentifier(s)){var c=da(o,a,!1,"default"===s.escapedText&&!(!K.allowSyntheticDefaultImports&&!e.getESModuleInterop(K)));if(c&&s.escapedText){if(e.isShorthandAmbientModuleSymbol(o))return o;var u=void 0;u=o&&o.exports&&o.exports.get("export=")?xu(ys(c),s.escapedText,!0):function(e,t){if(3&e.flags){var r=e.valueDeclaration.type;if(r)return Qi(xu(ip(r),t))}}(c,s.escapedText),u=Qi(u,n);var l=function(e,t,r,n){if(1536&e.flags){var i=va(e).get(t.escapedText),a=Qi(i,n);return Zi(r,i,a,!1),a}}(c,s,r,n);if(void 0===l&&"default"===s.escapedText){var _=null===(i=o.declarations)||void 0===i?void 0:i.find(e.isSourceFile);(Bi(a)||ji(_,o,n,a))&&(l=_a(o,n)||Qi(o,n))}var d=l&&u&&l!==u?function(t,r){if(t===we&&r===we)return we;if(790504&t.flags)return t;var n=ri(t.flags|r.flags,t.escapedName);return n.declarations=e.deduplicate(e.concatenate(t.declarations,r.declarations),e.equateValues),n.parent=t.parent||r.parent,t.valueDeclaration&&(n.valueDeclaration=t.valueDeclaration),r.members&&(n.members=new e.Map(r.members)),t.exports&&(n.exports=new e.Map(t.exports)),n}(u,l):l||u;return d||Ki(o,c,t,s),d}}}function Ki(t,r,n,i){var o,s=ia(t,n),c=e.declarationNameToString(i),u=Hh(i,r);if(void 0!==u){var l=no(u),_=Qn(i,e.Diagnostics._0_has_no_exported_member_named_1_Did_you_mean_2,s,c,l);u.valueDeclaration&&e.addRelatedInfo(_,e.createDiagnosticForNode(u.valueDeclaration,e.Diagnostics._0_is_declared_here,l))}else(null===(o=t.exports)||void 0===o?void 0:o.has("default"))?Qn(i,e.Diagnostics.Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead,s,c):function(t,r,n,i,o){var s,c,u=null===(c=null===(s=i.valueDeclaration)||void 0===s?void 0:s.locals)||void 0===c?void 0:c.get(r.escapedText),l=i.exports;if(u){var _=null==l?void 0:l.get("export=");if(_)Na(_,u)?function(t,r,n,i){if(q>=e.ModuleKind.ES2015){Qn(r,e.getESModuleInterop(K)?e.Diagnostics._0_can_only_be_imported_by_using_a_default_import:e.Diagnostics._0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import,n)}else{if(e.isInJSFile(t))Qn(r,e.getESModuleInterop(K)?e.Diagnostics._0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import:e.Diagnostics._0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import,n);else Qn(r,e.getESModuleInterop(K)?e.Diagnostics._0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import:e.Diagnostics._0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import,n,n,i)}}(t,r,n,o):Qn(r,e.Diagnostics.Module_0_has_no_exported_member_1,o,n);else{var d=l?e.find(Mu(l),(function(e){return!!Na(e,u)})):void 0,p=d?Qn(r,e.Diagnostics.Module_0_declares_1_locally_but_it_is_exported_as_2,o,n,no(d)):Qn(r,e.Diagnostics.Module_0_declares_1_locally_but_it_is_not_exported,o,n);u.declarations&&e.addRelatedInfo.apply(void 0,a([p],e.map(u.declarations,(function(t,r){return e.createDiagnosticForNode(t,0===r?e.Diagnostics._0_is_declared_here:e.Diagnostics.and_here,n)})),!1))}}else Qn(r,e.Diagnostics.Module_0_has_no_exported_member_1,o,n)}(n,i,c,t,s)}function Vi(t){if(e.isVariableDeclaration(t)&&t.initializer&&e.isPropertyAccessExpression(t.initializer))return t.initializer}function qi(t,r,n){if("default"===e.idText(t.propertyName||t.name)){var i=zi(t),a=i&&sa(t,i);if(a)return Ji(a,t,!!n)}var o=t.parent.parent.moduleSpecifier?Ui(t.parent.parent,t,n):aa(t.propertyName||t.name,r,!1,n);return Zi(t,void 0,o,!1),o}function Wi(t,r){if(e.isClassExpression(t))return pD(t).symbol;if(e.isEntityName(t)||e.isEntityNameExpression(t)){var n=aa(t,901119,!0,r);return n||(pD(t),di(t).resolvedSymbol)}}function Hi(t,r){switch(void 0===r&&(r=!1),t.kind){case 268:case 257:return Ii(t,r);case 270:return function(e,t){var r=sa(e,e.parent.moduleSpecifier);if(r)return Ji(r,e,t)}(t,r);case 271:return function(e,t){var r=e.parent.parent.moduleSpecifier,n=sa(e,r),i=da(n,r,t,!1);return Zi(e,n,i,!1),i}(t,r);case 277:return function(e,t){var r=e.parent.moduleSpecifier,n=r&&sa(e,r),i=r&&da(n,r,t,!1);return Zi(e,n,i,!1),i}(t,r);case 273:case 205:return function(t,r){if(e.isImportSpecifier(t)&&"default"===e.idText(t.propertyName||t.name)){var n=zi(t),i=n&&sa(t,n);if(i)return Ji(i,t,r)}var a=e.isBindingElement(t)?e.getRootDeclaration(t):t.parent.parent.parent,o=Vi(a),s=Ui(a,o||t,r),c=t.propertyName||t.name;return o&&s&&e.isIdentifier(c)?Qi(xu(ys(s),c.escapedText),r):(Zi(t,void 0,s,!1),s)}(t,r);case 278:return qi(t,901119,r);case 274:case 223:return function(t,r){var n=Wi(e.isExportAssignment(t)?t.expression:t.right,r);return Zi(t,void 0,n,!1),n}(t,r);case 267:return function(e,t){var r=_a(e.parent.symbol,t);return Zi(e,void 0,r,!1),r}(t,r);case 300:return aa(t.name,901119,!0,r);case 299:return Wi(t.initializer,r);case 209:case 208:return function(t,r){if(e.isBinaryExpression(t.parent)&&t.parent.left===t&&63===t.parent.operatorToken.kind)return Wi(t.parent.right,r)}(t,r);default:return e.Debug.fail()}}function Gi(e,t){return void 0===t&&(t=901119),!!e&&(2097152==(e.flags&(2097152|t))||!!(2097152&e.flags&&67108864&e.flags))}function Qi(e,t){return!t&&Gi(e)?Xi(e):e}function Xi(t){e.Debug.assert(0!=(2097152&t.flags),"Should only get Alias here.");var r=_i(t);if(r.aliasTarget)r.aliasTarget===Ie&&(r.aliasTarget=we);else{r.aliasTarget=Ie;var n=Fi(t);if(!n)return e.Debug.fail();var i=Hi(n);r.aliasTarget===Ie?r.aliasTarget=i||we:Qn(n,e.Diagnostics.Circular_definition_of_import_alias_0,no(t))}return r.aliasTarget}function Yi(t){for(var r,n=t.flags;2097152&t.flags;){var i=Xi(t);if(i===we)return 67108863;if(i===t||(null==r?void 0:r.has(i)))break;2097152&i.flags&&(r?r.add(i):r=new e.Set([t,i])),n|=i.flags,t=i}return n}function Zi(t,r,n,i){if(!t||e.isPropertyAccessExpression(t))return!1;var a=Sa(t);if(e.isTypeOnlyImportOrExportDeclaration(t))return _i(a).typeOnlyDeclaration=t,!0;var o=_i(a);return $i(o,r,i)||$i(o,n,i)}function $i(t,r,n){var i,a,o;if(r&&(void 0===t.typeOnlyDeclaration||n&&!1===t.typeOnlyDeclaration)){var s=null!==(a=null===(i=r.exports)||void 0===i?void 0:i.get("export="))&&void 0!==a?a:r,c=s.declarations&&e.find(s.declarations,e.isTypeOnlyImportOrExportDeclaration);t.typeOnlyDeclaration=null!==(o=null!=c?c:_i(s).typeOnlyDeclaration)&&void 0!==o&&o}return!!t.typeOnlyDeclaration}function ea(e,t){if(2097152&e.flags){var r=_i(e);return void 0===t?r.typeOnlyDeclaration||void 0:r.typeOnlyDeclaration&&Yi(Xi(r.typeOnlyDeclaration.symbol))&t?r.typeOnlyDeclaration:void 0}}function ta(e){var t=Sa(e),r=Xi(t);r&&((r===we||111551&Yi(r)&&!HC(r)&&!ea(t,111551))&&ra(t))}function ra(t){var r=_i(t);if(!r.referenced){r.referenced=!0;var n=Fi(t);if(!n)return e.Debug.fail();e.isInternalModuleImportEqualsDeclaration(n)&&111551&Yi(Qi(t))&&pD(n.moduleReference)}}function na(t,r){return 79===t.kind&&e.isRightSideOfQualifiedNameOrPropertyAccess(t)&&(t=t.parent),79===t.kind||163===t.parent.kind?aa(t,1920,!1,r):(e.Debug.assert(268===t.parent.kind),aa(t,901119,!1,r))}function ia(e,t){return e.parent?ia(e.parent,t)+"."+no(e):no(e,t,void 0,36)}function aa(t,r,n,i,a){if(!e.nodeIsMissing(t)){var o,s=1920|(e.isInJSFile(t)?111551&r:0);if(79===t.kind){var c=r===s||e.nodeIsSynthesized(t)?e.Diagnostics.Cannot_find_namespace_0:Cm(e.getFirstIdentifier(t)),u=e.isInJSFile(t)&&!e.nodeIsSynthesized(t)?function(t,r){if(Rl(t.parent)){var n=function(t){if(e.findAncestor(t,(function(t){return e.isJSDocNode(t)||8388608&t.flags?e.isJSDocTypeAlias(t):"quit"})))return;var r=e.getJSDocHost(t);if(r&&e.isExpressionStatement(r)&&e.isPrototypePropertyAssignment(r.expression)){if(i=Sa(r.expression.left))return oa(i)}if(r&&e.isFunctionExpression(r)&&e.isPrototypePropertyAssignment(r.parent)&&e.isExpressionStatement(r.parent.parent)){if(i=Sa(r.parent.left))return oa(i)}if(r&&(e.isObjectLiteralMethod(r)||e.isPropertyAssignment(r))&&e.isBinaryExpression(r.parent.parent)&&6===e.getAssignmentDeclarationKind(r.parent.parent)){if(i=Sa(r.parent.parent.left))return oa(i)}var n=e.getEffectiveJSDocHost(t);if(n&&e.isFunctionLike(n)){var i;return(i=Sa(n))&&i.valueDeclaration}}(t.parent);if(n)return vi(n,t.escapedText,r,void 0,t,!0)}}(t,r):void 0;if(!(o=Da(vi(a||t,t.escapedText,r,n||u?void 0:c,t,!0,!1))))return Da(u)}else{if(163!==t.kind&&208!==t.kind)throw e.Debug.assertNever(t,"Unknown entity name kind.");var l=163===t.kind?t.left:t.expression,_=163===t.kind?t.right:t.name,d=aa(l,s,n,!1,a);if(!d||e.nodeIsMissing(_))return;if(d===we)return d;if(d.valueDeclaration&&e.isInJSFile(d.valueDeclaration)&&e.isVariableDeclaration(d.valueDeclaration)&&d.valueDeclaration.initializer&&nx(d.valueDeclaration.initializer)){var p=d.valueDeclaration.initializer.arguments[0],f=sa(p,p);if(f){var g=_a(f);g&&(d=g)}}if(!(o=Da(fi(va(d),_.escapedText,r)))){if(!n){var m=ia(d),y=e.declarationNameToString(_),v=Hh(_,d);if(v)return void Qn(_,e.Diagnostics._0_has_no_exported_member_named_1_Did_you_mean_2,m,y,no(v));var h=e.isQualifiedName(t)&&function(t){for(;e.isQualifiedName(t.parent);)t=t.parent;return t}(t),b=qt&&788968&r&&h&&!e.isTypeOfExpression(h.parent)&&function(t){var r=e.getFirstIdentifier(t),n=vi(r,r.escapedText,111551,void 0,r,!0);if(n){for(;e.isQualifiedName(r.parent);){if(!(n=xu(ys(n),r.parent.right.escapedText)))return;r=r.parent}return n}}(h);if(b)return void Qn(h,e.Diagnostics._0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0,e.entityNameToString(h));if(1920&r&&e.isQualifiedName(t.parent)){var x=Da(fi(va(d),_.escapedText,788968));if(x)return void Qn(t.parent.right,e.Diagnostics.Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_property_1_in_0_with_0_1,no(x),e.unescapeLeadingUnderscores(t.parent.right.escapedText))}Qn(_,e.Diagnostics.Namespace_0_has_no_exported_member_1,m,y)}return}}return e.Debug.assert(0==(1&e.getCheckFlags(o)),"Should never get an instantiated symbol here."),!e.nodeIsSynthesized(t)&&e.isEntityName(t)&&(2097152&o.flags||274===t.parent.kind)&&Zi(e.getAliasDeclarationFromName(t),o,void 0,!0),o.flags&r||i?o:Xi(o)}}function oa(t){var r=t.parent.valueDeclaration;if(r)return(e.isAssignmentDeclaration(r)?e.getAssignedExpandoInitializer(r):e.hasOnlyExpressionInitializer(r)?e.getDeclaredExpandoInitializer(r):void 0)||r}function sa(t,r,n){var i=e.getEmitModuleResolutionKind(K)===e.ModuleResolutionKind.Classic?e.Diagnostics.Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_node_or_to_add_aliases_to_the_paths_option:e.Diagnostics.Cannot_find_module_0_or_its_corresponding_type_declarations;return ca(t,r,n?void 0:i)}function ca(t,r,n,i){return void 0===i&&(i=!1),e.isStringLiteralLike(r)?ua(t,r.text,n,r,i):void 0}function ua(r,n,i,a,o){var s,c,u,l,_,d,p,f;(void 0===o&&(o=!1),e.startsWith(n,"@types/"))&&Qn(a,L=e.Diagnostics.Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1,e.removePrefix(n,"@types/"),n);var g=Ru(n,!0);if(g)return g;var m=e.getSourceFileOfNode(r),y=e.isStringLiteralLike(r)?r:(null===(s=e.findAncestor(r,e.isImportCall))||void 0===s?void 0:s.arguments[0])||(null===(c=e.findAncestor(r,e.isImportDeclaration))||void 0===c?void 0:c.moduleSpecifier)||(null===(u=e.findAncestor(r,e.isExternalModuleImportEqualsDeclaration))||void 0===u?void 0:u.moduleReference.expression)||(null===(l=e.findAncestor(r,e.isExportDeclaration))||void 0===l?void 0:l.moduleSpecifier)||(null===(_=e.isModuleDeclaration(r)?r:r.parent&&e.isModuleDeclaration(r.parent)&&r.parent.name===r?r.parent:void 0)||void 0===_?void 0:_.name)||(null===(d=e.isLiteralImportTypeNode(r)?r:void 0)||void 0===d?void 0:d.argument.literal),v=y&&e.isStringLiteralLike(y)?e.getModeForUsageLocation(m,y):m.impliedNodeFormat,h=e.getResolvedModule(m,n,v),b=h&&e.getResolutionDiagnostic(K,h),x=h&&(!b||b===e.Diagnostics.Module_0_was_resolved_to_1_but_jsx_is_not_set)&&t.getSourceFile(h.resolvedFileName);if(x){if(b&&Qn(a,b,n,h.resolvedFileName),x.symbol){if(h.isExternalLibraryImport&&!e.resolutionExtensionIsTSOrJson(h.extension)&&la(!1,a,h,n),e.getEmitModuleResolutionKind(K)===e.ModuleResolutionKind.Node16||e.getEmitModuleResolutionKind(K)===e.ModuleResolutionKind.NodeNext){var D=m.impliedNodeFormat===e.ModuleKind.CommonJS&&!e.findAncestor(r,e.isImportCall)||!!e.findAncestor(r,e.isImportEqualsDeclaration),S=e.findAncestor(r,(function(t){return e.isImportTypeNode(t)||e.isExportDeclaration(t)||e.isImportDeclaration(t)})),T=S&&e.isImportTypeNode(S)?null===(p=S.assertions)||void 0===p?void 0:p.assertClause:null==S?void 0:S.assertClause;if(D&&x.impliedNodeFormat===e.ModuleKind.ESNext&&!e.getResolutionModeOverrideForClause(T))if(e.findAncestor(r,e.isImportEqualsDeclaration))Qn(a,e.Diagnostics.Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_cannot_be_imported_with_require_Use_an_ECMAScript_import_instead,n);else{var C=void 0,E=e.tryGetExtensionFromPath(m.fileName);if(".ts"===E||".js"===E||".tsx"===E||".jsx"===E){var k=m.packageJsonScope,N=".ts"===E?".mts":".js"===E?".mjs":void 0;C=k&&!k.contents.packageJsonContent.type?N?e.chainDiagnosticMessages(void 0,e.Diagnostics.To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Colon_module_to_1,N,e.combinePaths(k.packageDirectory,"package.json")):e.chainDiagnosticMessages(void 0,e.Diagnostics.To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0,e.combinePaths(k.packageDirectory,"package.json")):N?e.chainDiagnosticMessages(void 0,e.Diagnostics.To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_package_json_file_with_type_Colon_module,N):e.chainDiagnosticMessages(void 0,e.Diagnostics.To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module)}Pn.add(e.createDiagnosticForNodeFromMessageChain(a,e.chainDiagnosticMessages(C,e.Diagnostics.The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_referenced_file_is_an_ECMAScript_module_and_cannot_be_imported_with_require_Consider_writing_a_dynamic_import_0_call_instead,n)))}}return Da(x.symbol)}i&&Qn(a,e.Diagnostics.File_0_is_not_a_module,x.fileName)}else{if(Kt){var A=e.findBestPatternMatch(Kt,(function(e){return e.pattern}),n);if(A){var F=Vt&&Vt.get(n);return Da(F?F:A.symbol)}}if(h&&!e.resolutionExtensionIsTSOrJson(h.extension)&&void 0===b||b===e.Diagnostics.Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type)o?Qn(a,L=e.Diagnostics.Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augmented,n,h.resolvedFileName):la(Z&&!!i,a,h,n);else if(i){if(h){var P=t.getProjectReferenceRedirect(h.resolvedFileName);if(P)return void Qn(a,e.Diagnostics.Output_file_0_has_not_been_built_from_source_file_1,P,h.resolvedFileName)}if(b)Qn(a,b,n,h.resolvedFileName);else{var w=e.tryExtractTSExtension(n),I=e.pathIsRelative(n)&&!e.hasExtension(n),O=e.getEmitModuleResolutionKind(K),M=O===e.ModuleResolutionKind.Node16||O===e.ModuleResolutionKind.NodeNext;if(w){var L=e.Diagnostics.An_import_path_cannot_end_with_a_0_extension_Consider_importing_1_instead,R=e.removeExtension(n,w);q>=e.ModuleKind.ES2015&&(R+=".mts"===w?".mjs":".cts"===w?".cjs":".js"),Qn(a,L,w,R)}else if(!K.resolveJsonModule&&e.fileExtensionIs(n,".json")&&e.getEmitModuleResolutionKind(K)!==e.ModuleResolutionKind.Classic&&e.hasJsonModuleEmitEnabled(K))Qn(a,e.Diagnostics.Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension,n);else if(v===e.ModuleKind.ESNext&&M&&I){var B=e.getNormalizedAbsolutePath(n,e.getDirectoryPath(m.path)),j=null===(f=zn.find((function(e){var r=e[0];e[1];return t.fileExists(B+r)})))||void 0===f?void 0:f[1];j?Qn(a,e.Diagnostics.Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_node16_or_nodenext_Did_you_mean_0,n+j):Qn(a,e.Diagnostics.Relative_import_paths_need_explicit_file_extensions_in_EcmaScript_imports_when_moduleResolution_is_node16_or_nodenext_Consider_adding_an_extension_to_the_import_path)}else Qn(a,i,n)}}}}function la(t,r,n,i){var a,o=n.packageId,s=n.resolvedFileName,c=!e.isExternalModuleNameRelative(i)&&o?(a=o.name,f().has(e.getTypesPackageName(a))?e.chainDiagnosticMessages(void 0,e.Diagnostics.If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_Slash_Slashgithub_com_SlashDefinitelyTyped_SlashDefinitelyTyped_Slashtree_Slashmaster_Slashtypes_Slash_1,o.name,e.mangleScopedPackageName(o.name)):function(e){return!!f().get(e)}(o.name)?e.chainDiagnosticMessages(void 0,e.Diagnostics.If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_declare_module_1,o.name,i):e.chainDiagnosticMessages(void 0,e.Diagnostics.Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare_module_0,i,e.mangleScopedPackageName(o.name))):void 0;Yn(t,r,e.chainDiagnosticMessages(c,e.Diagnostics.Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type,i,s))}function _a(t,r){if(null==t?void 0:t.exports){var n=function(t,r){if(!t||t===we||t===r||1===r.exports.size||2097152&t.flags)return t;var n=_i(t);if(n.cjsExportMerged)return n.cjsExportMerged;var i=33554432&t.flags?t:ai(t);i.flags=512|i.flags,void 0===i.exports&&(i.exports=e.createSymbolTable());return r.exports.forEach((function(e,t){"export="!==t&&i.exports.set(t,i.exports.has(t)?oi(i.exports.get(t),e):e)})),_i(i).cjsExportMerged=i,n.cjsExportMerged=i}(Da(Qi(t.exports.get("export="),r)),Da(t));return Da(n)||t}}function da(t,r,n,i){var a,o=_a(t,n);if(!n&&o){if(!(i||1539&o.flags||e.getDeclarationOfKind(o,308))){var s=q>=e.ModuleKind.ES2015?"allowSyntheticDefaultImports":"esModuleInterop";return Qn(r,e.Diagnostics.This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_referencing_its_default_export,s),o}var c=r.parent;if(e.isImportDeclaration(c)&&e.getNamespaceDeclarationNode(c)||e.isImportCall(c)){var u=e.isImportCall(c)?c.arguments[0]:c.moduleSpecifier,l=ys(o),_=tx(l,o,t,u);if(_)return pa(o,_,c);var d=null===(a=null==t?void 0:t.declarations)||void 0===a?void 0:a.find(e.isSourceFile),p=d&&Ri(Li(u),d.impliedNodeFormat);if(e.getESModuleInterop(K)||p){var f=Du(l,0);if(f&&f.length||(f=Du(l,1)),f&&f.length||xu(l,"default",!0)||p)return pa(o,rx(l,o,t,u),c)}}}return o}function pa(t,r,n){var i=ri(t.flags,t.escapedName);i.declarations=t.declarations?t.declarations.slice():[],i.parent=t.parent,i.target=t,i.originatingImport=n,t.valueDeclaration&&(i.valueDeclaration=t.valueDeclaration),t.constEnumOnlyModule&&(i.constEnumOnlyModule=!0),t.members&&(i.members=new e.Map(t.members)),t.exports&&(i.exports=new e.Map(t.exports));var a=qc(r);return i.type=za(i,a.members,e.emptyArray,e.emptyArray,a.indexInfos),i}function fa(e){return void 0!==e.exports.get("export=")}function ga(e){return Mu(ha(e))}function ma(e,t){var r=ha(t);if(r)return r.get(e)}function ya(t){return!(131068&t.flags||1&e.getObjectFlags(t)||qf(t)||_g(t))}function va(e){return 6256&e.flags?cc(e,"resolvedExports"):1536&e.flags?ha(e):e.exports||z}function ha(e){var t=_i(e);return t.resolvedExports||(t.resolvedExports=xa(e))}function ba(t,r,n,i){r&&r.forEach((function(r,a){if("default"!==a){var o=t.get(a);if(o){if(n&&i&&o&&Qi(o)!==Qi(r)){var s=n.get(a);s.exportsWithDuplicate?s.exportsWithDuplicate.push(i):s.exportsWithDuplicate=[i]}}else t.set(a,r),n&&i&&n.set(a,{specifierText:e.getTextOfNode(i.moduleSpecifier)})}}))}function xa(t){var r=[];return function t(n){if(!(n&&n.exports&&e.pushIfUnique(r,n)))return;var i=new e.Map(n.exports),a=n.exports.get("__export");if(a){var o=e.createSymbolTable(),s=new e.Map;if(a.declarations)for(var c=0,u=a.declarations;c<u.length;c++){var l=u[c],_=sa(l,l.moduleSpecifier);ba(o,t(_),s,l)}s.forEach((function(t,r){var n=t.exportsWithDuplicate;if("export="!==r&&n&&n.length&&!i.has(r))for(var a=0,o=n;a<o.length;a++){var c=o[a];Pn.add(e.createDiagnosticForNode(c,e.Diagnostics.Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambiguity,s.get(r).specifierText,e.unescapeLeadingUnderscores(r)))}})),ba(i,o)}return i}(t=_a(t))||z}function Da(e){var t;return e&&e.mergeId&&(t=fn[e.mergeId])?t:e}function Sa(e){return Da(e.symbol&&lc(e.symbol))}function Ta(e){return Da(e.parent&&lc(e.parent))}function Ca(r,n,i){var o=Ta(r);if(o&&!(262144&r.flags)){var s=e.mapDefined(o.declarations,(function(e){return o&&Ea(e,o)})),c=n&&function(r,n){var i,a=e.getSourceFileOfNode(n),o=F(a),s=_i(r);if(s.extendedContainersByFile&&(i=s.extendedContainersByFile.get(o)))return i;if(a&&a.imports){for(var c=0,u=a.imports;c<u.length;c++){var l=u[c];if(!e.nodeIsSynthesized(l)){var _=sa(n,l,!0);_&&ka(_,r)&&(i=e.append(i,_))}}if(e.length(i))return(s.extendedContainersByFile||(s.extendedContainersByFile=new e.Map)).set(o,i),i}if(s.extendedContainers)return s.extendedContainers;for(var d=0,p=t.getSourceFiles();d<p.length;d++){var f=p[d];if(e.isExternalModule(f)){var g=Sa(f);ka(g,r)&&(i=e.append(i,g))}}return s.extendedContainers=i||e.emptyArray}(r,n),u=function(t,r){var n=!!e.length(t.declarations)&&e.first(t.declarations);if(111551&r&&n&&n.parent&&e.isVariableDeclaration(n.parent)&&(e.isObjectLiteralExpression(n)&&n===n.parent.initializer||e.isTypeLiteralNode(n)&&n===n.parent.type))return Sa(n.parent)}(o,i);if(n&&o.flags&Ka(i)&&Va(o,n,1920,!1))return e.append(e.concatenate(e.concatenate([o],s),c),u);var l=!(o.flags&Ka(i))&&788968&o.flags&&524288&qs(o).flags&&111551===i?Ua(n,(function(t){return e.forEachEntry(t,(function(e){if(e.flags&Ka(i)&&ys(e)===qs(o))return e}))})):void 0,_=a(a(l?[l]:[],s,!0),[o],!1);return _=e.append(_,u),_=e.addRange(_,c)}var d=e.mapDefined(r.declarations,(function(t){if(!e.isAmbientModule(t)&&t.parent){if(eo(t.parent))return Sa(t.parent);if(e.isModuleBlock(t.parent)&&t.parent.parent&&_a(Sa(t.parent.parent))===r)return Sa(t.parent.parent)}if(e.isClassExpression(t)&&e.isBinaryExpression(t.parent)&&63===t.parent.operatorToken.kind&&e.isAccessExpression(t.parent.left)&&e.isEntityNameExpression(t.parent.left.expression))return e.isModuleExportsAccessExpression(t.parent.left)||e.isExportsIdentifier(t.parent.left.expression)?Sa(e.getSourceFileOfNode(t)):(pD(t.parent.left.expression),di(t.parent.left.expression).resolvedSymbol)}));if(e.length(d))return e.mapDefined(d,(function(e){return ka(e,r)?e:void 0}))}function Ea(e,t){var r=Za(e),n=r&&r.exports&&r.exports.get("export=");return n&&Na(n,t)?r:void 0}function ka(t,r){if(t===Ta(r))return r;var n=t.exports&&t.exports.get("export=");if(n&&Na(n,r))return t;var i=va(t),a=i.get(r.escapedName);return a&&Na(a,r)?a:e.forEachEntry(i,(function(e){if(Na(e,r))return e}))}function Na(e,t){if(Da(Qi(Da(e)))===Da(Qi(Da(t))))return e}function Aa(e){return Da(e&&0!=(1048576&e.flags)&&e.exportSymbol||e)}function Fa(e,t){return!!(111551&e.flags||2097152&e.flags&&111551&Yi(e)&&(t||!ea(e)))}function Pa(t){for(var r=0,n=t.members;r<n.length;r++){var i=n[r];if(173===i.kind&&e.nodeIsPresent(i.body))return i}}function wa(t){var r=new v(pe,t);return x++,r.id=x,null===e.tracing||void 0===e.tracing||e.tracing.recordType(r),r}function Ia(e){return new v(pe,e)}function Oa(e,t,r){void 0===r&&(r=0);var n=wa(e);return n.intrinsicName=t,n.objectFlags=r,n}function Ma(e,t){var r=wa(524288);return r.objectFlags=e,r.symbol=t,r.members=void 0,r.properties=void 0,r.callSignatures=void 0,r.constructSignatures=void 0,r.indexInfos=void 0,r}function La(e){var t=wa(262144);return e&&(t.symbol=e),t}function Ra(e){return 95===e.charCodeAt(0)&&95===e.charCodeAt(1)&&95!==e.charCodeAt(2)&&64!==e.charCodeAt(2)&&35!==e.charCodeAt(2)}function Ba(t){var r;return t.forEach((function(e,t){ja(e,t)&&(r||(r=[])).push(e)})),r||e.emptyArray}function ja(e,t){return!Ra(t)&&Fa(e)}function Ja(t,r,n,i,a){var o=t;return o.members=r,o.properties=e.emptyArray,o.callSignatures=n,o.constructSignatures=i,o.indexInfos=a,r!==z&&(o.properties=Ba(r)),o}function za(e,t,r,n,i){return Ja(Ma(16,e),t,r,n,i)}function Ua(t,r){for(var n,i=function(t){if(t.locals&&!pi(t)&&(n=r(t.locals,void 0,!0,t)))return{value:n};switch(t.kind){case 308:if(!e.isExternalOrCommonJsModule(t))break;case 264:var i=Sa(t);if(n=r((null==i?void 0:i.exports)||z,void 0,!0,t))return{value:n};break;case 260:case 228:case 261:var a;if((Sa(t).members||z).forEach((function(t,r){788968&t.flags&&(a||(a=e.createSymbolTable())).set(r,t)})),a&&(n=r(a,void 0,!1,t)))return{value:n}}},a=t;a;a=a.parent){var o=i(a);if("object"==typeof o)return o.value}return r(se,void 0,!0)}function Ka(e){return 111551===e?111551:1920}function Va(t,r,n,i,a){if(void 0===a&&(a=new e.Map),t&&!function(e){if(e.declarations&&e.declarations.length){for(var t=0,r=e.declarations;t<r.length;t++){switch(r[t].kind){case 169:case 171:case 174:case 175:continue;default:return!1}}return!0}return!1}(t)){var o=_i(t),s=o.accessibleChainCache||(o.accessibleChainCache=new e.Map),c=Ua(r,(function(e,t,r,n){return n})),u="".concat(i?0:1,"|").concat(c&&F(c),"|").concat(n);if(s.has(u))return s.get(u);var l=P(t),_=a.get(l);_||a.set(l,_=[]);var d=Ua(r,p);return s.set(u,d),d}function p(n,a,o){if(e.pushIfUnique(_,n)){var s=function(n,a,o){if(g(n.get(t.escapedName),void 0,a))return[t];var s=e.forEachEntry(n,(function(n){if(2097152&n.flags&&"export="!==n.escapedName&&"default"!==n.escapedName&&!(e.isUMDExportSymbol(n)&&r&&e.isExternalModule(e.getSourceFileOfNode(r)))&&(!i||e.some(n.declarations,e.isExternalModuleImportEqualsDeclaration))&&(!o||!e.some(n.declarations,e.isNamespaceReexportDeclaration))&&(a||!e.getDeclarationOfKind(n,278))){var s=m(n,Xi(n),a);if(s)return s}if(n.escapedName===t.escapedName&&n.exportSymbol&&g(Da(n.exportSymbol),void 0,a))return[t]}));return s||(n===se?m(ue,ue,a):void 0)}(n,a,o);return _.pop(),s}}function f(e,t){return!qa(e,r,t)||!!Va(e.parent,r,Ka(t),i,a)}function g(r,i,a){return(t===(i||r)||Da(t)===Da(i||r))&&!e.some(r.declarations,eo)&&(a||f(Da(r),n))}function m(e,t,r){if(g(e,t,r))return[e];var i=va(t),a=i&&p(i,!0);return a&&f(e,Ka(n))?[e].concat(a):void 0}}function qa(t,r,n){var i=!1;return Ua(r,(function(r){var a=Da(r.get(t.escapedName));if(!a)return!1;if(a===t)return!0;var o=2097152&a.flags&&!e.getDeclarationOfKind(a,278);return a=o?Xi(a):a,!!((o?Yi(a):a.flags)&n)&&(i=!0,!0)})),i}function Wa(e,t){return 0===Ya(e,t,788968,!1,!0).accessibility}function Ha(e,t){return 0===Ya(e,t,111551,!1,!0).accessibility}function Ga(e,t,r){return 0===Ya(e,t,r,!1,!1).accessibility}function Qa(t,r,n,i,a,o){if(e.length(t)){for(var s,c=!1,u=0,l=t;u<l.length;u++){var _=l[u],d=Va(_,r,i,!1);if(d){s=_;var p=to(d[0],a);if(p)return p}if(o&&e.some(_.declarations,eo)){if(a){c=!0;continue}return{accessibility:0}}var f=Qa(Ca(_,r,i),r,n,n===_?Ka(i):i,a,o);if(f)return f}return c?{accessibility:0}:s?{accessibility:1,errorSymbolName:no(n,r,i),errorModuleName:s!==n?no(s,r,1920):void 0}:void 0}}function Xa(e,t,r,n){return Ya(e,t,r,n,!0)}function Ya(t,r,n,i,a){if(t&&r){var o=Qa([t],r,t,n,i,a);if(o)return o;var s=e.forEach(t.declarations,Za);if(s)if(s!==Za(r))return{accessibility:2,errorSymbolName:no(t,r,n),errorModuleName:no(s),errorNode:e.isInJSFile(r)?r:void 0};return{accessibility:1,errorSymbolName:no(t,r,n)}}return{accessibility:0}}function Za(t){var r=e.findAncestor(t,$a);return r&&Sa(r)}function $a(t){return e.isAmbientModule(t)||308===t.kind&&e.isExternalOrCommonJsModule(t)}function eo(t){return e.isModuleWithStringLiteralName(t)||308===t.kind&&e.isExternalOrCommonJsModule(t)}function to(t,r){var n;if(e.every(e.filter(t.declarations,(function(e){return 79!==e.kind})),(function(r){var n,a;if(!vo(r)){var o=Ai(r);if(o&&!e.hasSyntacticModifier(o,1)&&vo(o.parent))return i(r,o);if(e.isVariableDeclaration(r)&&e.isVariableStatement(r.parent.parent)&&!e.hasSyntacticModifier(r.parent.parent,1)&&vo(r.parent.parent.parent))return i(r,r.parent.parent);if(e.isLateVisibilityPaintedStatement(r)&&!e.hasSyntacticModifier(r,1)&&vo(r.parent))return i(r,r);if(e.isBindingElement(r)){if(2097152&t.flags&&e.isInJSFile(r)&&(null===(n=r.parent)||void 0===n?void 0:n.parent)&&e.isVariableDeclaration(r.parent.parent)&&(null===(a=r.parent.parent.parent)||void 0===a?void 0:a.parent)&&e.isVariableStatement(r.parent.parent.parent.parent)&&!e.hasSyntacticModifier(r.parent.parent.parent.parent,1)&&r.parent.parent.parent.parent.parent&&vo(r.parent.parent.parent.parent.parent))return i(r,r.parent.parent.parent.parent);if(2&t.flags){var s=e.findAncestor(r,e.isVariableStatement);return!!e.hasSyntacticModifier(s,1)||!!vo(s.parent)&&i(r,s)}}return!1}return!0})))return{accessibility:0,aliasesToMakeVisible:n};function i(t,i){return r&&(di(t).isVisible=!0,n=e.appendIfUnique(n,i)),!0}}function ro(t,r){var n;n=183===t.parent.kind||230===t.parent.kind&&!e.isPartOfTypeNode(t.parent)||164===t.parent.kind?1160127:163===t.kind||208===t.kind||268===t.parent.kind?1920:788968;var i=e.getFirstIdentifier(t),a=vi(r,i.escapedText,n,void 0,void 0,!1);return a&&262144&a.flags&&788968&n||!a&&e.isThisIdentifier(i)&&0===Xa(Sa(e.getThisContainer(i,!1)),i,n,!1).accessibility?{accessibility:0}:a&&to(a,!0)||{accessibility:1,errorSymbolName:e.getTextOfNode(i),errorNode:i}}function no(t,r,n,i,a){void 0===i&&(i=4);var o=70221824;2&i&&(o|=128),1&i&&(o|=512),8&i&&(o|=16384),32&i&&(o|=134217728),16&i&&(o|=1073741824);var s=4&i?oe.symbolToNode:oe.symbolToEntityName;return a?c(a).getText():e.usingSingleLineStringWriter(c);function c(i){var a=s(t,n,r,o),c=308===(null==r?void 0:r.kind)?e.createPrinter({removeComments:!0,neverAsciiEscape:!0}):e.createPrinter({removeComments:!0}),u=r&&e.getSourceFileOfNode(r);return c.writeNode(4,a,u,i),i}}function io(t,r,n,i,a){return void 0===n&&(n=0),a?o(a).getText():e.usingSingleLineStringWriter(o);function o(a){var o;o=262144&n?1===i?182:181:1===i?177:176;var s=oe.signatureToSignatureDeclaration(t,o,r,70222336|uo(n)),c=e.createPrinter({removeComments:!0,omitTrailingSemicolon:!0}),u=r&&e.getSourceFileOfNode(r);return c.writeNode(4,s,u,e.getTrailingSemicolonDeferringWriter(a)),a}}function ao(t,r,n,i){void 0===n&&(n=1064960),void 0===i&&(i=e.createTextWriter(""));var a=K.noErrorTruncation||1&n,o=oe.typeToTypeNode(t,r,70221824|uo(n)|(a?1:0),i);if(void 0===o)return e.Debug.fail("should always get typenode");var s={removeComments:t!==Je},c=e.createPrinter(s),u=r&&e.getSourceFileOfNode(r);c.writeNode(4,o,u,i);var l=i.getText(),_=a?2*e.noTruncationMaximumTruncationLength:2*e.defaultMaximumTruncationLength;return _&&l&&l.length>=_?l.substr(0,_-"...".length)+"...":l}function oo(e,t){var r=co(e.symbol)?ao(e,e.symbol.valueDeclaration):ao(e),n=co(t.symbol)?ao(t,t.symbol.valueDeclaration):ao(t);return r===n&&(r=so(e),n=so(t)),[r,n]}function so(e){return ao(e,void 0,64)}function co(t){return t&&!!t.valueDeclaration&&e.isExpression(t.valueDeclaration)&&!Mp(t.valueDeclaration)}function uo(e){return void 0===e&&(e=0),848330091&e}function lo(t){return!!(t.symbol&&32&t.symbol.flags&&(t===Ls(t.symbol)||524288&t.flags&&16777216&e.getObjectFlags(t)))}function _o(t,r,n,i){return void 0===n&&(n=16384),i?a(i).getText():e.usingSingleLineStringWriter(a);function a(i){var a=e.factory.createTypePredicateNode(2===t.kind||3===t.kind?e.factory.createToken(129):void 0,1===t.kind||3===t.kind?e.factory.createIdentifier(t.parameterName):e.factory.createThisTypeNode(),t.type&&oe.typeToTypeNode(t.type,r,70222336|uo(n))),o=e.createPrinter({removeComments:!0}),s=r&&e.getSourceFileOfNode(r);return o.writeNode(4,a,s,i),i}}function po(e){return 8===e?"private":16===e?"protected":"public"}function fo(t){return t&&t.parent&&265===t.parent.kind&&e.isExternalModuleAugmentation(t.parent.parent)}function go(t){return 308===t.kind||e.isAmbientModule(t)}function mo(t,r){var n=_i(t).nameType;if(n){if(384&n.flags){var i=""+n.value;return e.isIdentifierText(i,e.getEmitScriptTarget(K))||e.isNumericLiteralName(i)?e.isNumericLiteralName(i)&&e.startsWith(i,"-")?"[".concat(i,"]"):i:'"'.concat(e.escapeString(i,34),'"')}if(8192&n.flags)return"[".concat(yo(n.symbol,r),"]")}}function yo(t,r){if(r&&"default"===t.escapedName&&!(16384&r.flags)&&(!(16777216&r.flags)||!t.declarations||r.enclosingDeclaration&&e.findAncestor(t.declarations[0],go)!==e.findAncestor(r.enclosingDeclaration,go)))return"default";if(t.declarations&&t.declarations.length){var n=e.firstDefined(t.declarations,(function(t){return e.getNameOfDeclaration(t)?t:void 0})),i=n&&e.getNameOfDeclaration(n);if(n&&i){if(e.isCallExpression(n)&&e.isBindableObjectDefinePropertyCall(n))return e.symbolName(t);if(e.isComputedPropertyName(i)&&!(4096&e.getCheckFlags(t))){var a=_i(t).nameType;if(a&&384&a.flags){var o=mo(t,r);if(void 0!==o)return o}}return e.declarationNameToString(i)}if(n||(n=t.declarations[0]),n.parent&&257===n.parent.kind)return e.declarationNameToString(n.parent.name);switch(n.kind){case 228:case 215:case 216:return!r||r.encounteredError||131072&r.flags||(r.encounteredError=!0),228===n.kind?"(Anonymous class)":"(Anonymous function)"}}var s=mo(t,r);return void 0!==s?s:e.symbolName(t)}function vo(t){if(t){var r=di(t);return void 0===r.isVisible&&(r.isVisible=!!function(){switch(t.kind){case 341:case 348:case 342:return!!(t.parent&&t.parent.parent&&t.parent.parent.parent&&e.isSourceFile(t.parent.parent.parent));case 205:return vo(t.parent.parent);case 257:if(e.isBindingPattern(t.name)&&!t.name.elements.length)return!1;case 264:case 260:case 261:case 262:case 259:case 263:case 268:if(e.isExternalModuleAugmentation(t))return!0;var r=To(t);return 1&e.getCombinedModifierFlags(t)||268!==t.kind&&308!==r.kind&&16777216&r.flags?vo(r):pi(r);case 169:case 168:case 174:case 175:case 171:case 170:if(e.hasEffectiveModifier(t,24))return!1;case 173:case 177:case 176:case 178:case 166:case 265:case 181:case 182:case 184:case 180:case 185:case 186:case 189:case 190:case 193:case 199:return vo(t.parent);case 270:case 271:case 273:return!1;case 165:case 308:case 267:return!0;default:return!1}}()),r.isVisible}return!1}function ho(t,r){var n,i,a;return t.parent&&274===t.parent.kind?n=vi(t,t.escapedText,2998271,void 0,t,!1):278===t.parent.kind&&(n=qi(t.parent,2998271)),n&&((a=new e.Set).add(P(n)),function t(n){e.forEach(n,(function(n){var o=Ai(n)||n;if(r?di(n).isVisible=!0:(i=i||[],e.pushIfUnique(i,o)),e.isInternalModuleImportEqualsDeclaration(n)){var s=n.moduleReference,c=vi(n,e.getFirstIdentifier(s).escapedText,901119,void 0,void 0,!1);c&&a&&e.tryAddToSet(a,P(c))&&t(c.declarations)}}))}(n.declarations)),i}function bo(e,t){var r=xo(e,t);if(r>=0){for(var n=ln.length,i=r;i<n;i++)_n[i]=!1;return!1}return ln.push(e),_n.push(!0),dn.push(t),!0}function xo(e,t){for(var r=ln.length-1;r>=0;r--){if(Do(ln[r],dn[r]))return-1;if(ln[r]===e&&dn[r]===t)return r}return-1}function Do(t,r){switch(r){case 0:return!!_i(t).type;case 5:return!!di(t).resolvedEnumType;case 2:return!!_i(t).declaredType;case 1:return!!t.resolvedBaseConstructorType;case 3:return!!t.resolvedReturnType;case 4:return!!t.immediateBaseConstraint;case 6:return!!t.resolvedTypeArguments;case 7:return!!t.baseTypesResolved;case 8:return!!_i(t).writeType}return e.Debug.assertNever(r)}function So(){return ln.pop(),dn.pop(),_n.pop()}function To(t){return e.findAncestor(e.getRootDeclaration(t),(function(e){switch(e.kind){case 257:case 258:case 273:case 272:case 271:case 270:return!1;default:return!0}})).parent}function Co(e,t){var r=xu(e,t);return r?ys(r):void 0}function Eo(e){return e&&0!=(1&e.flags)}function ko(e){return e===je||!!(1&e.flags&&e.aliasSymbol)}function No(e,t){if(0!==t)return Jo(e,!1,t);var r=Sa(e);return r&&_i(r).type||Jo(e,!1,t)}function Ao(t,r,n){if(131072&(t=py(t,(function(e){return!(98304&e.flags)}))).flags)return Ct;if(1048576&t.flags)return my(t,(function(e){return Ao(e,r,n)}));for(var i=P_(e.map(r,W_)),o=[],s=[],c=0,u=Qc(t);c<u.length;c++){var l=H_(g=u[c],8576);Vp(l,i)||24&e.getDeclarationModifierFlagsFromSymbol(g)||!Vd(g)?s.push(l):o.push(g)}if(pd(t)||fd(i)){if(s.length&&(i=P_(a([i],s,!0))),131072&i.flags)return t;var _=(Ar||(Ar=Wl("Omit",2,!0)||we),Ar===we?void 0:Ar);return _?kl(_,[t,i]):je}for(var d=e.createSymbolTable(),p=0,f=o;p<f.length;p++){var g=f[p];d.set(g.escapedName,qd(g,!1))}var m=za(n,d,e.emptyArray,e.emptyArray,Nu(t));return m.objectFlags|=4194304,m}function Fo(e){return!!(465829888&e.flags)&&Yx(ru(e)||Ke,32768)}function Po(e){return qm(_y(e,Fo)?my(e,(function(e){return 465829888&e.flags?nu(e):e})):e,524288)}function wo(e,t){var r=Io(e);return r?By(r,t):t}function Io(t){var r=function(e){var t=e.parent.parent;switch(t.kind){case 205:case 299:return Io(t);case 206:return Io(e.parent);case 257:return t.initializer;case 223:return t.right}}(t);if(r&&r.flowNode){var n=Oo(t);if(n){var i=e.setTextRange(e.parseNodeFactory.createStringLiteral(n),t),a=e.isLeftHandSideExpression(r)?r:e.parseNodeFactory.createParenthesizedExpression(r),o=e.setTextRange(e.parseNodeFactory.createElementAccessExpression(a,i),t);return e.setParent(i,o),e.setParent(o,t),a!==r&&e.setParent(a,o),o.flowNode=r.flowNode,o}}}function Oo(e){var t=e.parent;return 205===e.kind&&203===t.kind?Mo(e.propertyName||e.name):299===e.kind||300===e.kind?Mo(e.name):""+t.elements.indexOf(e)}function Mo(e){var t=W_(e);return 384&t.flags?""+t.value:void 0}function Lo(t,r){if(Eo(r))return r;var n,i=t.parent;if(G&&16777216&t.flags&&e.isParameterDeclaration(t)?r=xg(r):!G||!i.parent.initializer||65536&Vm(ry(i.parent.initializer))||(r=qm(r,524288)),203===i.kind)if(t.dotDotDotToken){if(2&(r=mu(r)).flags||!qv(r))return Qn(t,e.Diagnostics.Rest_types_may_only_be_created_from_object_types),je;for(var a=[],o=0,s=i.elements;o<s.length;o++){var c=s[o];c.dotDotDotToken||a.push(c.propertyName||c.name)}n=Ao(r,a,t.symbol)}else{var u=t.propertyName||t.name;n=wo(t,bd(r,W_(u),32,u))}else{var l=eT(65|(t.dotDotDotToken?0:128),r,qe,i),_=i.elements.indexOf(t);if(t.dotDotDotToken)n=dy(r,_g)?my(r,(function(e){return b_(e,_)})):u_(l);else if(Xf(r)){n=wo(t,Dd(r,Yd(_),32|(Lv(t)?16:0),t.name)||je)}else n=l}return t.initializer?e.getEffectiveTypeAnnotationNode(e.walkUpBindingElementsAndPatterns(t))?!G||16777216&Vm(gD(t,0))?n:Po(n):mD(t,P_([Po(n),gD(t,0)],2)):n}function Ro(t){var r=e.getJSDocType(t);if(r)return ip(r)}function Bo(t){var r=e.skipParentheses(t,!0);return 206===r.kind&&0===r.elements.length}function jo(e,t,r){return void 0===t&&(t=!1),void 0===r&&(r=!0),G&&r?bg(e,t):e}function Jo(t,r,n){if(e.isVariableDeclaration(t)&&246===t.parent.parent.kind){var i=Z_(xh(wD(t.parent.parent.expression,n)));return 4456448&i.flags?$_(i):Ye}if(e.isVariableDeclaration(t)&&247===t.parent.parent.kind)return $S(t.parent.parent)||Le;if(e.isBindingPattern(t.parent))return function(e){var t=e.dotDotDotToken?64:0,r=No(e.parent.parent,t);return r&&Lo(e,r)}(t);var a,o,s=e.isPropertyDeclaration(t)&&!e.hasAccessorModifier(t)||e.isPropertySignature(t),c=r&&(s&&!!t.questionToken||e.isParameter(t)&&(!!t.questionToken||Lu(t))||ju(t)),u=is(t);if(u)return jo(u,s,c);if((Z||e.isInJSFile(t))&&e.isVariableDeclaration(t)&&!e.isBindingPattern(t.name)&&!(1&e.getCombinedModifierFlags(t))&&!(16777216&t.flags)){if(!(2&e.getCombinedNodeFlags(t)||t.initializer&&(a=t.initializer,o=e.skipParentheses(a,!0),104!==o.kind&&(79!==o.kind||Em(o)!==ce))))return Re;if(t.initializer&&Bo(t.initializer))return nr}if(e.isParameter(t)){var l=t.parent;if(175===l.kind&&ac(l)){var _=e.getDeclarationOfKind(Sa(t.parent),174);if(_){var d=Ku(_),p=OE(l);return p&&t===p?(e.Debug.assert(!p.type),ys(d.thisParameter)):Yu(d)}}var f=function(e,t){var r=Vu(e);if(!r)return;var n=e.parameters.indexOf(t);return t.dotDotDotToken?bx(r,n):vx(r,n)}(l,t);if(f)return f;if(y="this"===t.symbol.escapedName?ov(l):sv(t))return jo(y,!1,c)}if(e.hasOnlyExpressionInitializer(t)&&t.initializer){if(e.isInJSFile(t)&&!e.isParameter(t)){var g=Ho(t,Sa(t),e.getDeclaredExpandoInitializer(t));if(g)return g}return jo(y=mD(t,gD(t,n)),s,c)}if(e.isPropertyDeclaration(t)&&(Z||e.isInJSFile(t))){if(e.hasStaticModifier(t)){var m=e.filter(t.parent.members,e.isClassStaticBlockDeclaration);y=m.length?function(t,r){for(var n=e.startsWith(t.escapedName,"__#")?e.factory.createPrivateIdentifier(t.escapedName.split("@")[1]):e.unescapeLeadingUnderscores(t.escapedName),i=0,a=r;i<a.length;i++){var o=a[i],s=e.factory.createPropertyAccessExpression(e.factory.createThis(),n);e.setParent(s.expression,s),e.setParent(s,o),s.flowNode=o.returnFlowNode;var c=qo(s,t);if(!Z||c!==Re&&c!==nr||Qn(t.valueDeclaration,e.Diagnostics.Member_0_implicitly_has_an_1_type,no(t),ao(c)),!dy(c,bh))return zS(c)}}(t.symbol,m):2&e.getEffectiveModifierFlags(t)?Rf(t.symbol):void 0;return y&&jo(y,!0,c)}var y,v=Pa(t.parent);return(y=v?Vo(t.symbol,v):2&e.getEffectiveModifierFlags(t)?Rf(t.symbol):void 0)&&jo(y,!0,c)}return e.isJsxAttribute(t)?rt:e.isBindingPattern(t.name)?$o(t.name,!1,!0):void 0}function zo(t){if(t.valueDeclaration&&e.isBinaryExpression(t.valueDeclaration)){var r=_i(t);return void 0===r.isConstructorDeclaredProperty&&(r.isConstructorDeclaredProperty=!1,r.isConstructorDeclaredProperty=!!Ko(t)&&e.every(t.declarations,(function(r){return e.isBinaryExpression(r)&&gv(r)&&(209!==r.left.kind||e.isStringOrNumericLiteralLike(r.left.argumentExpression))&&!Go(void 0,r,t,r)}))),r.isConstructorDeclaredProperty}return!1}function Uo(t){var r=t.valueDeclaration;return r&&e.isPropertyDeclaration(r)&&!e.getEffectiveTypeAnnotationNode(r)&&!r.initializer&&(Z||e.isInJSFile(r))}function Ko(t){if(t.declarations)for(var r=0,n=t.declarations;r<n.length;r++){var i=n[r],a=e.getThisContainer(i,!1);if(a&&(173===a.kind||Hb(a)))return a}}function Vo(t,r){var n=e.startsWith(t.escapedName,"__#")?e.factory.createPrivateIdentifier(t.escapedName.split("@")[1]):e.unescapeLeadingUnderscores(t.escapedName),i=e.factory.createPropertyAccessExpression(e.factory.createThis(),n);e.setParent(i.expression,i),e.setParent(i,r),i.flowNode=r.returnFlowNode;var a=qo(i,t);return!Z||a!==Re&&a!==nr||Qn(t.valueDeclaration,e.Diagnostics.Member_0_implicitly_has_an_1_type,no(t),ao(a)),dy(a,bh)?void 0:zS(a)}function qo(t,r){var n=(null==r?void 0:r.valueDeclaration)&&(!Uo(r)||2&e.getEffectiveModifierFlags(r.valueDeclaration))&&Rf(r)||qe;return By(t,Re,n)}function Wo(t,r){var n,i=e.getAssignedExpandoInitializer(t.valueDeclaration);if(i){var a=e.getJSDocTypeTag(i);return a&&a.typeExpression?ip(a.typeExpression):t.valueDeclaration&&Ho(t.valueDeclaration,t,i)||sg(pD(i))}var o=!1,s=!1;if(zo(t)&&(n=Vo(t,Ko(t))),!n){var c=void 0;if(t.declarations){for(var u=void 0,l=0,_=t.declarations;l<_.length;l++){var d=_[l],p=e.isBinaryExpression(d)||e.isCallExpression(d)?d:e.isAccessExpression(d)?e.isBinaryExpression(d.parent)?d.parent:d:void 0;if(p){var f=e.isAccessExpression(p)?e.getAssignmentDeclarationPropertyAccessKind(p):e.getAssignmentDeclarationKind(p);(4===f||e.isBinaryExpression(p)&&gv(p,f))&&(Xo(p)?o=!0:s=!0),e.isCallExpression(p)||(u=Go(u,p,t,d)),u||(c||(c=[])).push(e.isBinaryExpression(p)||e.isCallExpression(p)?Qo(t,r,p,f):ct)}}n=u}if(!n){if(!e.length(c))return je;var g=o&&t.declarations?function(t,r){return e.Debug.assert(t.length===r.length),t.filter((function(t,n){var i=r[n],a=e.isBinaryExpression(i)?i:e.isBinaryExpression(i.parent)?i.parent:void 0;return a&&Xo(a)}))}(c,t.declarations):void 0;if(s){var m=Rf(t);m&&((g||(g=[])).push(m),o=!0)}n=P_(e.some(g,(function(e){return!!(-98305&e.flags)}))?g:c)}}var y=Rg(jo(n,!1,s&&!o));return t.valueDeclaration&&py(y,(function(e){return!!(-98305&e.flags)}))===ct?(Jg(t.valueDeclaration,Le),Le):y}function Ho(t,r,n){var i,a;if(e.isInJSFile(t)&&n&&e.isObjectLiteralExpression(n)&&!n.properties.length){for(var o=e.createSymbolTable();e.isBinaryExpression(t)||e.isPropertyAccessExpression(t);){var s=Sa(t);(null===(i=null==s?void 0:s.exports)||void 0===i?void 0:i.size)&&ui(o,s.exports),t=e.isBinaryExpression(t)?t.parent:t.parent.parent}var c=Sa(t);(null===(a=null==c?void 0:c.exports)||void 0===a?void 0:a.size)&&ui(o,c.exports);var u=za(r,o,e.emptyArray,e.emptyArray,e.emptyArray);return u.objectFlags|=4096,u}}function Go(t,r,n,i){var a,o=e.getEffectiveTypeAnnotationNode(r.parent);if(o){var s=Rg(ip(o));if(!t)return s;ko(t)||ko(s)||jp(t,s)||KS(void 0,t,i,s)}if(null===(a=n.parent)||void 0===a?void 0:a.valueDeclaration){var c=e.getEffectiveTypeAnnotationNode(n.parent.valueDeclaration);if(c){var u=xu(ip(c),n.escapedName);if(u)return vs(u)}}return t}function Qo(t,r,n,i){if(e.isCallExpression(n)){if(r)return ys(r);var a=pD(n.arguments[2]),o=Co(a,"value");if(o)return o;var s=Co(a,"get");if(s){var c=db(s);if(c)return Yu(c)}var u=Co(a,"set");if(u){var l=db(u);if(l)return Ex(l)}return Le}if(function(t,r){return e.isPropertyAccessExpression(t)&&108===t.expression.kind&&e.forEachChildRecursively(r,(function(e){return Am(t,e)}))}(n.left,n.right))return Le;var _=1===i&&(e.isPropertyAccessExpression(n.left)||e.isElementAccessExpression(n.left))&&(e.isModuleExportsAccessExpression(n.left.expression)||e.isIdentifier(n.left.expression)&&e.isExportsIdentifier(n.left.expression)),d=r?ys(r):_?Gd(pD(n.right)):sg(pD(n.right));if(524288&d.flags&&2===i&&"export="===t.escapedName){var p=qc(d),f=e.createSymbolTable();e.copyEntries(p.members,f);var g=f.size;r&&!r.exports&&(r.exports=e.createSymbolTable()),(r||t).exports.forEach((function(t,r){var n,i=f.get(r);if(!i||i===t||2097152&t.flags)f.set(r,t);else if(111551&t.flags&&111551&i.flags){if(t.valueDeclaration&&i.valueDeclaration&&e.getSourceFileOfNode(t.valueDeclaration)!==e.getSourceFileOfNode(i.valueDeclaration)){var a=e.unescapeLeadingUnderscores(t.escapedName),o=(null===(n=e.tryCast(i.valueDeclaration,e.isNamedDeclaration))||void 0===n?void 0:n.name)||i.valueDeclaration;e.addRelatedInfo(Qn(t.valueDeclaration,e.Diagnostics.Duplicate_identifier_0,a),e.createDiagnosticForNode(o,e.Diagnostics._0_was_also_declared_here,a)),e.addRelatedInfo(Qn(o,e.Diagnostics.Duplicate_identifier_0,a),e.createDiagnosticForNode(t.valueDeclaration,e.Diagnostics._0_was_also_declared_here,a))}var s=ri(t.flags|i.flags,r);s.type=P_([ys(t),ys(i)]),s.valueDeclaration=i.valueDeclaration,s.declarations=e.concatenate(i.declarations,t.declarations),f.set(r,s)}else f.set(r,oi(t,i))}));var m=za(g!==f.size?void 0:p.symbol,f,p.callSignatures,p.constructSignatures,p.indexInfos);if(g===f.size&&(d.aliasSymbol&&(m.aliasSymbol=d.aliasSymbol,m.aliasTypeArguments=d.aliasTypeArguments),4&e.getObjectFlags(d))){m.aliasSymbol=d.symbol;var y=Tl(d);m.aliasTypeArguments=e.length(y)?y:void 0}return m.objectFlags|=4096&e.getObjectFlags(d),m.symbol&&32&m.symbol.flags&&d===Ls(m.symbol)&&(m.objectFlags|=16777216),m}return $f(d)?(Jg(n,rr),rr):d}function Xo(t){var r=e.getThisContainer(t,!1);return 173===r.kind||259===r.kind||215===r.kind&&!e.isPrototypePropertyAssignment(r.parent)}function Yo(t,r,n){return t.initializer?jo(mD(t,gD(t,0,e.isBindingPattern(t.name)?$o(t.name,!0,!1):Ke))):e.isBindingPattern(t.name)?$o(t.name,r,n):(n&&!ns(t)&&Jg(t,Le),r?ze:Le)}function Zo(t,r,n){var i,a=t.elements,o=e.lastOrUndefined(a),s=o&&205===o.kind&&o.dotDotDotToken?o:void 0;if(0===a.length||1===a.length&&s)return V>=2?(i=Le,s_(i_(!0),[i])):rr;var c=e.map(a,(function(t){return e.isOmittedExpression(t)?Le:Yo(t,r,n)})),u=e.findLastIndex(a,(function(t){return!(t===s||e.isOmittedExpression(t)||Lv(t))}),a.length-1)+1,l=m_(c,e.map(a,(function(e,t){return e===s?4:t>=u?2:1})));return r&&((l=Dl(l)).pattern=t,l.objectFlags|=131072),l}function $o(t,r,n){return void 0===r&&(r=!1),void 0===n&&(n=!1),203===t.kind?function(t,r,n){var i,a=e.createSymbolTable(),o=131200;e.forEach(t.elements,(function(e){var t=e.propertyName||e.name;if(e.dotDotDotToken)i=ll(Ye,Le,!1);else{var s=W_(t);if(tc(s)){var c=oc(s),u=ri(4|(e.initializer?16777216:0),c);u.type=Yo(e,r,n),u.bindingElement=e,a.set(u.escapedName,u)}else o|=512}}));var s=za(void 0,a,e.emptyArray,e.emptyArray,i?[i]:e.emptyArray);return s.objectFlags|=o,r&&(s.pattern=t,s.objectFlags|=131072),s}(t,r,n):Zo(t,r,n)}function es(e,t){return rs(Jo(e,!0,0),e,t)}function ts(e){var t,r=Sa(e),n=(t=!1,sr||(sr=ql("SymbolConstructor",t)));return n&&r&&r===n}function rs(t,r,n){return t?(4096&t.flags&&ts(r.parent)&&(t=ep(r)),n&&zg(r,t),8192&t.flags&&(e.isBindingElement(r)||!r.type)&&t.symbol!==Sa(r)&&(t=ot),Rg(t)):(t=e.isParameter(r)&&r.dotDotDotToken?rr:Le,n&&(ns(r)||Jg(r,t)),t)}function ns(t){var r=e.getRootDeclaration(t);return YD(166===r.kind?r.parent:r)}function is(t){var r=e.getEffectiveTypeAnnotationNode(t);if(r)return ip(r)}function as(t){var r=_i(t);if(!r.type){var n=function(t){if(4194304&t.flags)return(r=qs(Ta(t))).typeParameters?xl(r,e.map(r.typeParameters,(function(e){return Le}))):r;var r;if(t===de)return Le;if(134217728&t.flags&&t.valueDeclaration){var n=Sa(e.getSourceFileOfNode(t.valueDeclaration)),i=ri(n.flags,"exports");i.declarations=n.declarations?n.declarations.slice():[],i.parent=t,i.target=n,n.valueDeclaration&&(i.valueDeclaration=n.valueDeclaration),n.members&&(i.members=new e.Map(n.members)),n.exports&&(i.exports=new e.Map(n.exports));var a=e.createSymbolTable();return a.set("exports",i),za(t,a,e.emptyArray,e.emptyArray,e.emptyArray)}e.Debug.assertIsDefined(t.valueDeclaration);var o,s=t.valueDeclaration;if(e.isCatchClauseVariableDeclarationOrBindingElement(s)){var c=e.getEffectiveTypeAnnotationNode(s);if(void 0===c)return ee?Ke:Le;var u=FC(c);return Eo(u)||u===Ke?u:je}if(e.isSourceFile(s)&&e.isJsonSourceFile(s))return s.statements.length?Rg(sg(wD(s.statements[0].expression))):Ct;if(e.isAccessor(s))return cs(t);if(!bo(t,0))return 512&t.flags&&!(67108864&t.flags)?_s(t):fs(t);if(274===s.kind)o=rs(is(s)||pD(s.expression),s);else if(e.isBinaryExpression(s)||e.isInJSFile(s)&&(e.isCallExpression(s)||(e.isPropertyAccessExpression(s)||e.isBindableStaticElementAccessExpression(s))&&e.isBinaryExpression(s.parent)))o=Wo(t);else if(e.isPropertyAccessExpression(s)||e.isElementAccessExpression(s)||e.isIdentifier(s)||e.isStringLiteralLike(s)||e.isNumericLiteral(s)||e.isClassDeclaration(s)||e.isFunctionDeclaration(s)||e.isMethodDeclaration(s)&&!e.isObjectLiteralMethod(s)||e.isMethodSignature(s)||e.isSourceFile(s)){if(9136&t.flags)return _s(t);o=e.isBinaryExpression(s.parent)?Wo(t):is(s)||Le}else if(e.isPropertyAssignment(s))o=is(s)||bD(s);else if(e.isJsxAttribute(s))o=is(s)||Gv(s);else if(e.isShorthandPropertyAssignment(s))o=is(s)||hD(s.name,0);else if(e.isObjectLiteralMethod(s))o=is(s)||xD(s,0);else if(e.isParameter(s)||e.isPropertyDeclaration(s)||e.isPropertySignature(s)||e.isVariableDeclaration(s)||e.isBindingElement(s)||e.isJSDocPropertyLikeTag(s))o=es(s,!0);else if(e.isEnumDeclaration(s))o=_s(t);else{if(!e.isEnumMember(s))return e.Debug.fail("Unhandled declaration kind! "+e.Debug.formatSyntaxKind(s.kind)+" for "+e.Debug.formatSymbol(t));o=ds(t)}if(!So())return 512&t.flags&&!(67108864&t.flags)?_s(t):fs(t);return o}(t);r.type||(r.type=n)}return r.type}function os(t){if(t)switch(t.kind){case 174:return e.getEffectiveReturnTypeNode(t);case 175:return e.getEffectiveSetAccessorTypeAnnotationNode(t);case 169:return e.Debug.assert(e.hasAccessorModifier(t)),e.getEffectiveTypeAnnotationNode(t)}}function ss(e){var t=os(e);return t&&ip(t)}function cs(t){var r=_i(t);if(!r.type){if(!bo(t,0))return je;var n=e.getDeclarationOfKind(t,174),i=e.getDeclarationOfKind(t,175),a=e.tryCast(e.getDeclarationOfKind(t,169),e.isAutoAccessorPropertyDeclaration),o=n&&e.isInJSFile(n)&&Ro(n)||ss(n)||ss(i)||ss(a)||n&&n.body&&Ix(n)||a&&a.initializer&&es(a,!0);o||(i&&!YD(i)?Yn(Z,i,e.Diagnostics.Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation,no(t)):n&&!YD(n)?Yn(Z,n,e.Diagnostics.Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation,no(t)):a&&!YD(a)&&Yn(Z,a,e.Diagnostics.Member_0_implicitly_has_an_1_type,no(t),"any"),o=Le),So()||(os(n)?Qn(n,e.Diagnostics._0_is_referenced_directly_or_indirectly_in_its_own_type_annotation,no(t)):os(i)||os(a)?Qn(i,e.Diagnostics._0_is_referenced_directly_or_indirectly_in_its_own_type_annotation,no(t)):n&&Z&&Qn(n,e.Diagnostics._0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions,no(t)),o=Le),r.type=o}return r.type}function us(t){var r,n=_i(t);if(!n.writeType){if(!bo(t,8))return je;var i=null!==(r=e.getDeclarationOfKind(t,175))&&void 0!==r?r:e.tryCast(e.getDeclarationOfKind(t,169),e.isAutoAccessorPropertyDeclaration),a=ss(i);So()||(os(i)&&Qn(i,e.Diagnostics._0_is_referenced_directly_or_indirectly_in_its_own_type_annotation,no(t)),a=Le),n.writeType=a||cs(t)}return n.writeType}function ls(t){var r=Ps(Ls(t));return 8650752&r.flags?r:2097152&r.flags?e.find(r.types,(function(e){return!!(8650752&e.flags)})):void 0}function _s(t){var r=_i(t),n=r;if(!r.type){var i=t.valueDeclaration&&Qb(t.valueDeclaration,!1);if(i){var a=Gb(t,i);a&&(t=r=a)}n.type=r.type=function(t){var r=t.valueDeclaration;if(1536&t.flags&&e.isShorthandAmbientModuleSymbol(t))return Le;if(r&&(223===r.kind||e.isAccessExpression(r)&&223===r.parent.kind))return Wo(t);if(512&t.flags&&r&&e.isSourceFile(r)&&r.commonJsModuleIndicator){var n=_a(t);if(n!==t){if(!bo(t,0))return je;var i=Da(t.exports.get("export=")),a=Wo(i,i===n?void 0:n);return So()?a:fs(t)}}var o=Ma(16,t);if(32&t.flags){var s=ls(t);return s?j_([o,s]):o}return G&&16777216&t.flags?bg(o):o}(t)}return r.type}function ds(e){var t=_i(e);return t.type||(t.type=Ks(e))}function ps(t){var r=_i(t);if(!r.type){var n=Xi(t),i=t.declarations&&Hi(Fi(t),!0),a=e.firstDefined(null==i?void 0:i.declarations,(function(t){return e.isExportAssignment(t)?is(t):void 0}));r.type=(null==i?void 0:i.declarations)&&_C(i.declarations)&&t.declarations.length?function(t){var r=e.getSourceFileOfNode(t.declarations[0]),n=e.unescapeLeadingUnderscores(t.escapedName),i=t.declarations.every((function(t){return e.isInJSFile(t)&&e.isAccessExpression(t)&&e.isModuleExportsAccessExpression(t.expression)})),a=i?e.factory.createPropertyAccessExpression(e.factory.createPropertyAccessExpression(e.factory.createIdentifier("module"),e.factory.createIdentifier("exports")),n):e.factory.createPropertyAccessExpression(e.factory.createIdentifier("exports"),n);return i&&e.setParent(a.expression.expression,a.expression),e.setParent(a.expression,a),e.setParent(a,r),a.flowNode=r.endFlowNode,By(a,Re,qe)}(i):_C(t.declarations)?Re:a||(111551&Yi(n)?ys(n):je)}return r.type}function fs(t){var r=t.valueDeclaration;return e.getEffectiveTypeAnnotationNode(r)?(Qn(t.valueDeclaration,e.Diagnostics._0_is_referenced_directly_or_indirectly_in_its_own_type_annotation,no(t)),je):(Z&&(166!==r.kind||r.initializer)&&Qn(t.valueDeclaration,e.Diagnostics._0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or_indirectly_in_its_own_initializer,no(t)),Le)}function gs(t){var r=_i(t);return r.type||(e.Debug.assertIsDefined(r.deferralParent),e.Debug.assertIsDefined(r.deferralConstituents),r.type=1048576&r.deferralParent.flags?P_(r.deferralConstituents):j_(r.deferralConstituents)),r.type}function ms(t){var r=e.getCheckFlags(t);return 4&t.flags?2&r?65536&r?function(t){var r=_i(t);return!r.writeType&&r.deferralWriteConstituents&&(e.Debug.assertIsDefined(r.deferralParent),e.Debug.assertIsDefined(r.deferralConstituents),r.writeType=1048576&r.deferralParent.flags?P_(r.deferralWriteConstituents):j_(r.deferralWriteConstituents)),r.writeType}(t)||gs(t):t.writeType||t.type:ys(t):98304&t.flags?1&r?function(e){var t=_i(e);return t.writeType||(t.writeType=Fp(ms(t.target),t.mapper))}(t):us(t):ys(t)}function ys(t){var r=e.getCheckFlags(t);return 65536&r?gs(t):1&r?function(e){var t=_i(e);return t.type||(t.type=Fp(ys(t.target),t.mapper))}(t):262144&r?function(t){if(!t.type){var r=t.mappedType;if(!bo(t,0))return r.containsError=!0,je;var n=Fp(Rc(r.target||r),hp(r.mapper,Oc(r),t.keyType)),i=G&&16777216&t.flags&&!Yx(n,49152)?bg(n,!0):524288&t.checkFlags?Ng(n):n;So()||(Qn(l,e.Diagnostics.Type_of_property_0_circularly_references_itself_in_mapped_type_1,no(t),ao(r)),i=je),t.type=i}return t.type}(t):8192&r?function(e){var t=_i(e);t.type||(t.type=rm(e.propertyType,e.mappedType,e.constraintType));return t.type}(t):7&t.flags?as(t):9136&t.flags?_s(t):8&t.flags?ds(t):98304&t.flags?cs(t):2097152&t.flags?ps(t):je}function vs(e){return Eg(ys(e),!!(16777216&e.flags))}function hs(t,r){return void 0!==t&&void 0!==r&&0!=(4&e.getObjectFlags(t))&&t.target===r}function bs(t){return 4&e.getObjectFlags(t)?t.target:t}function xs(t,r){return function t(n){if(7&e.getObjectFlags(n)){var i=bs(n);return i===r||e.some(Is(i),t)}if(2097152&n.flags)return e.some(n.types,t);return!1}(t)}function Ds(t,r){for(var n=0,i=r;n<i.length;n++){var a=i[n];t=e.appendIfUnique(t,Vs(Sa(a)))}return t}function Ss(t,r){for(;;){if((t=t.parent)&&e.isBinaryExpression(t)){var n=e.getAssignmentDeclarationKind(t);if(6===n||3===n){var i=Sa(t.left);i&&i.parent&&!e.findAncestor(i.parent.valueDeclaration,(function(e){return t===e}))&&(t=i.parent.valueDeclaration)}}if(!t)return;switch(t.kind){case 260:case 228:case 261:case 176:case 177:case 170:case 181:case 182:case 320:case 259:case 171:case 215:case 216:case 262:case 347:case 348:case 342:case 341:case 197:case 191:var a=Ss(t,r);if(197===t.kind)return e.append(a,Vs(Sa(t.typeParameter)));if(191===t.kind)return e.concatenate(a,Id(t));var o=Ds(a,e.getEffectiveTypeParameterDeclarations(t)),s=r&&(260===t.kind||228===t.kind||261===t.kind||Hb(t))&&Ls(Sa(t)).thisType;return s?e.append(o,s):o;case 343:var c=e.getParameterSymbolFromJSDoc(t);c&&(t=c.valueDeclaration);break;case 323:a=Ss(t,r);return t.tags?Ds(a,e.flatMap(t.tags,(function(t){return e.isJSDocTemplateTag(t)?t.typeParameters:void 0}))):a}}}function Ts(t){var r=32&t.flags?t.valueDeclaration:e.getDeclarationOfKind(t,261);return e.Debug.assert(!!r,"Class was missing valueDeclaration -OR- non-class had no interface declarations"),Ss(r)}function Cs(t){if(t.declarations){for(var r,n=0,i=t.declarations;n<i.length;n++){var a=i[n];if(261===a.kind||260===a.kind||228===a.kind||Hb(a)||e.isTypeAlias(a)){var o=a;r=Ds(r,e.getEffectiveTypeParameterDeclarations(o))}}return r}}function Es(e){var t=Su(e,1);if(1===t.length){var r=t[0];if(!r.typeParameters&&1===r.parameters.length&&L(r)){var n=dx(r.parameters[0]);return Eo(n)||Qf(n)===Le}}return!1}function ks(e){if(Su(e,1).length>0)return!0;if(8650752&e.flags){var t=ru(e);return!!t&&Es(t)}return!1}function Ns(t){var r=e.getClassLikeDeclarationOfSymbol(t.symbol);return r&&e.getEffectiveBaseTypeNode(r)}function As(t,r,n){var i=e.length(r),a=e.isInJSFile(n);return e.filter(Su(t,1),(function(t){return(a||i>=zu(t.typeParameters))&&i<=e.length(t.typeParameters)}))}function Fs(t,r,n){var i=As(t,r,n),a=e.map(r,ip);return e.sameMap(i,(function(t){return e.some(t.typeParameters)?tl(t,a,e.isInJSFile(n)):t}))}function Ps(t){if(!t.resolvedBaseConstructorType){var r=e.getClassLikeDeclarationOfSymbol(t.symbol),n=r&&e.getEffectiveBaseTypeNode(r),i=Ns(t);if(!i)return t.resolvedBaseConstructorType=qe;if(!bo(t,1))return je;var a=wD(i.expression);if(n&&i!==n&&(e.Debug.assert(!n.typeArguments),wD(n.expression)),2621440&a.flags&&qc(a),!So())return Qn(t.symbol.valueDeclaration,e.Diagnostics._0_is_referenced_directly_or_indirectly_in_its_own_base_expression,no(t.symbol)),t.resolvedBaseConstructorType=je;if(!(1&a.flags||a===Xe||ks(a))){var o=Qn(i.expression,e.Diagnostics.Type_0_is_not_a_constructor_function_type,ao(a));if(262144&a.flags){var s=ml(a),c=Ke;if(s){var u=Su(s,1);u[0]&&(c=Yu(u[0]))}a.symbol.declarations&&e.addRelatedInfo(o,e.createDiagnosticForNode(a.symbol.declarations[0],e.Diagnostics.Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1,no(a.symbol),ao(c)))}return t.resolvedBaseConstructorType=je}t.resolvedBaseConstructorType=a}return t.resolvedBaseConstructorType}function ws(t,r){Qn(t,e.Diagnostics.Type_0_recursively_references_itself_as_a_base_type,ao(r,void 0,2))}function Is(t){if(!t.baseTypesResolved){if(bo(t,7)&&(8&t.objectFlags?t.resolvedBaseTypes=[Os(t)]:96&t.symbol.flags?(32&t.symbol.flags&&function(t){t.resolvedBaseTypes=e.resolvingEmptyArray;var r=_u(Ps(t));if(!(2621441&r.flags))return t.resolvedBaseTypes=e.emptyArray;var n,i=Ns(t),a=r.symbol?qs(r.symbol):void 0;if(r.symbol&&32&r.symbol.flags&&function(e){var t=e.outerTypeParameters;if(t){var r=t.length-1,n=Tl(e);return t[r].symbol!==n[r].symbol}return!0}(a))n=El(i,r.symbol);else if(1&r.flags)n=r;else{var o=Fs(r,i.typeArguments,i);if(!o.length)return Qn(i.expression,e.Diagnostics.No_base_constructor_has_the_specified_number_of_type_arguments),t.resolvedBaseTypes=e.emptyArray;n=Yu(o[0])}if(ko(n))return t.resolvedBaseTypes=e.emptyArray;var s=mu(n);if(!Ms(s)){var c=bu(void 0,n),u=e.chainDiagnosticMessages(c,e.Diagnostics.Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_known_members,ao(s));return Pn.add(e.createDiagnosticForNodeFromMessageChain(i.expression,u)),t.resolvedBaseTypes=e.emptyArray}if(t===s||xs(s,t))return Qn(t.symbol.valueDeclaration,e.Diagnostics.Type_0_recursively_references_itself_as_a_base_type,ao(t,void 0,2)),t.resolvedBaseTypes=e.emptyArray;t.resolvedBaseTypes===e.resolvingEmptyArray&&(t.members=void 0);t.resolvedBaseTypes=[s]}(t),64&t.symbol.flags&&function(t){if(t.resolvedBaseTypes=t.resolvedBaseTypes||e.emptyArray,t.symbol.declarations)for(var r=0,n=t.symbol.declarations;r<n.length;r++){var i=n[r];if(261===i.kind&&e.getInterfaceBaseTypeNodes(i))for(var a=0,o=e.getInterfaceBaseTypeNodes(i);a<o.length;a++){var s=o[a],c=mu(ip(s));ko(c)||(Ms(c)?t===c||xs(c,t)?ws(i,t):t.resolvedBaseTypes===e.emptyArray?t.resolvedBaseTypes=[c]:t.resolvedBaseTypes.push(c):Qn(s,e.Diagnostics.An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_members))}}}(t)):e.Debug.fail("type must be class or interface"),!So()&&t.symbol.declarations))for(var r=0,n=t.symbol.declarations;r<n.length;r++){var i=n[r];260!==i.kind&&261!==i.kind||ws(i,t)}t.baseTypesResolved=!0}return t.resolvedBaseTypes}function Os(t){return u_(P_(e.sameMap(t.typeParameters,(function(e,r){return 8&t.elementFlags[r]?bd(e,Ze):e}))||e.emptyArray),t.readonly)}function Ms(t){if(262144&t.flags){var r=ru(t);if(r)return Ms(r)}return!!(67633153&t.flags&&!Vc(t)||2097152&t.flags&&e.every(t.types,Ms))}function Ls(t){var r,n,i,a,o,s=_i(t),c=s;if(!s.declaredType){var u=32&t.flags?1:2,l=Gb(t,t.valueDeclaration&&(r=t.valueDeclaration,i=r&&Qb(r,!0),a=null===(n=null==i?void 0:i.exports)||void 0===n?void 0:n.get("prototype"),(o=(null==a?void 0:a.valueDeclaration)&&function(t){if(!t.parent)return!1;for(var r=t.parent;r&&208===r.kind;)r=r.parent;if(r&&e.isBinaryExpression(r)&&e.isPrototypeAccess(r.left)&&63===r.operatorToken.kind){var n=e.getInitializerOfBinaryExpression(r);return e.isObjectLiteralExpression(n)&&n}}(a.valueDeclaration))?Sa(o):void 0));l&&(t=s=l);var _=c.declaredType=s.declaredType=Ma(u,t),d=Ts(t),p=Cs(t);(d||p||1===u||!function(t){if(!t.declarations)return!0;for(var r=0,n=t.declarations;r<n.length;r++){var i=n[r];if(261===i.kind){if(128&i.flags)return!1;var a=e.getInterfaceBaseTypeNodes(i);if(a)for(var o=0,s=a;o<s.length;o++){var c=s[o];if(e.isEntityNameExpression(c.expression)){var u=aa(c.expression,788968,!0);if(!u||!(64&u.flags)||Ls(u).thisType)return!1}}}}return!0}(t))&&(_.objectFlags|=4,_.typeParameters=e.concatenate(d,p),_.outerTypeParameters=d,_.localTypeParameters=p,_.instantiations=new e.Map,_.instantiations.set(vl(_.typeParameters),_),_.target=_,_.resolvedTypeArguments=_.typeParameters,_.thisType=La(t),_.thisType.isThisType=!0,_.thisType.constraint=_)}return s.declaredType}function Rs(t){var r,n=_i(t);if(!n.declaredType){if(!bo(t,2))return je;var i=e.Debug.checkDefined(null===(r=t.declarations)||void 0===r?void 0:r.find(e.isTypeAlias),"Type alias symbol with no valid declaration found"),a=e.isJSDocTypeAlias(i)?i.typeExpression:i.type,o=a?ip(a):je;if(So()){var s=Cs(t);s&&(n.typeParameters=s,n.instantiations=new e.Map,n.instantiations.set(vl(s),o))}else o=je,342===i.kind?Qn(i.typeExpression.type,e.Diagnostics.Type_alias_0_circularly_references_itself,no(t)):Qn(e.isNamedDeclaration(i)&&i.name||i,e.Diagnostics.Type_alias_0_circularly_references_itself,no(t));n.declaredType=o}return n.declaredType}function Bs(t){return!!e.isStringLiteralLike(t)||223===t.kind&&(Bs(t.left)&&Bs(t.right))}function js(t){var r=t.initializer;if(!r)return!(16777216&t.flags);switch(r.kind){case 10:case 8:case 14:return!0;case 221:return 40===r.operator&&8===r.operand.kind;case 79:return e.nodeIsMissing(r)||!!Sa(t.parent).exports.get(r.escapedText);case 223:return Bs(r);default:return!1}}function Js(t){var r=_i(t);if(void 0!==r.enumKind)return r.enumKind;var n=!1;if(t.declarations)for(var i=0,a=t.declarations;i<a.length;i++){var o=a[i];if(263===o.kind)for(var s=0,c=o.members;s<c.length;s++){var u=c[s];if(u.initializer&&e.isStringLiteralLike(u.initializer))return r.enumKind=1;js(u)||(n=!0)}}return r.enumKind=n?0:1}function zs(e){return 1024&e.flags&&!(1048576&e.flags)?qs(Ta(e.symbol)):e}function Us(e){var t=_i(e);if(t.declaredType)return t.declaredType;if(1===Js(e)){S++;var r=[];if(e.declarations)for(var n=0,i=e.declarations;n<i.length;n++){var a=i[n];if(263===a.kind)for(var o=0,s=a.members;o<s.length;o++){var c=s[o],u=tE(c),l=Hd($d(void 0!==u?u:0,S,Sa(c)));_i(Sa(c)).declaredType=l,r.push(Gd(l))}}if(r.length){var _=P_(r,1,e,void 0);return 1048576&_.flags&&(_.flags|=1024,_.symbol=e),t.declaredType=_}}var d=wa(32);return d.symbol=e,t.declaredType=d}function Ks(e){var t=_i(e);if(!t.declaredType){var r=Us(Ta(e));t.declaredType||(t.declaredType=r)}return t.declaredType}function Vs(e){var t=_i(e);return t.declaredType||(t.declaredType=La(e))}function qs(e){return Ws(e)||je}function Ws(e){return 96&e.flags?Ls(e):524288&e.flags?Rs(e):262144&e.flags?Vs(e):384&e.flags?Us(e):8&e.flags?Ks(e):2097152&e.flags?function(e){var t=_i(e);return t.declaredType||(t.declaredType=qs(Xi(e)))}(e):void 0}function Hs(e){switch(e.kind){case 131:case 157:case 152:case 148:case 160:case 134:case 153:case 149:case 114:case 155:case 144:case 198:return!0;case 185:return Hs(e.elementType);case 180:return!e.typeArguments||e.typeArguments.every(Hs)}return!1}function Gs(t){var r=e.getEffectiveConstraintOfTypeParameter(t);return!r||Hs(r)}function Qs(t){var r=e.getEffectiveTypeAnnotationNode(t);return r?Hs(r):!e.hasInitializer(t)}function Xs(t){if(t.declarations&&1===t.declarations.length){var r=t.declarations[0];if(r)switch(r.kind){case 169:case 168:return Qs(r);case 171:case 170:case 173:case 174:case 175:return n=r,i=e.getEffectiveReturnTypeNode(n),a=e.getEffectiveTypeParameterDeclarations(n),(173===n.kind||!!i&&Hs(i))&&n.parameters.every(Qs)&&a.every(Gs)}}var n,i,a;return!1}function Ys(t,r,n){for(var i=e.createSymbolTable(),a=0,o=t;a<o.length;a++){var s=o[a];i.set(s.escapedName,n&&Xs(s)?s:Dp(s,r))}return i}function Zs(e,t){for(var r=0,n=t;r<n.length;r++){var i=n[r];e.has(i.escapedName)||$s(i)||e.set(i.escapedName,i)}}function $s(t){return!!t.valueDeclaration&&e.isPrivateIdentifierClassElementDeclaration(t.valueDeclaration)&&e.isStatic(t.valueDeclaration)}function ec(t){if(!t.declaredProperties){var r=t.symbol,n=uc(r);t.declaredProperties=Ba(n),t.declaredCallSignatures=e.emptyArray,t.declaredConstructSignatures=e.emptyArray,t.declaredIndexInfos=e.emptyArray,t.declaredCallSignatures=Wu(n.get("__call")),t.declaredConstructSignatures=Wu(n.get("__new")),t.declaredIndexInfos=_l(r)}return t}function tc(e){return!!(8576&e.flags)}function rc(t){if(!e.isComputedPropertyName(t)&&!e.isElementAccessExpression(t))return!1;var r=e.isComputedPropertyName(t)?t.expression:t.argumentExpression;return e.isEntityNameExpression(r)&&tc(e.isComputedPropertyName(t)?Jv(t):pD(r))}function nc(e){return 95===e.charCodeAt(0)&&95===e.charCodeAt(1)&&64===e.charCodeAt(2)}function ic(t){var r=e.getNameOfDeclaration(t);return!!r&&rc(r)}function ac(t){return!e.hasDynamicName(t)||ic(t)}function oc(t){return 8192&t.flags?t.escapedName:384&t.flags?e.escapeLeadingUnderscores(""+t.value):e.Debug.fail()}function sc(t,r,n,i){e.Debug.assert(!!i.symbol,"The member is expected to have a symbol.");var a=di(i);if(!a.resolvedSymbol){a.resolvedSymbol=i.symbol;var o=e.isBinaryExpression(i)?i.left:i.name,s=e.isElementAccessExpression(o)?pD(o.argumentExpression):Jv(o);if(tc(s)){var c=oc(s),u=i.symbol.flags,l=n.get(c);l||n.set(c,l=ri(0,c,4096));var _=r&&r.get(c);if(l.flags&ni(u)||_){var d=_?e.concatenate(_.declarations,l.declarations):l.declarations,p=!(8192&s.flags)&&e.unescapeLeadingUnderscores(c)||e.declarationNameToString(o);e.forEach(d,(function(t){return Qn(e.getNameOfDeclaration(t)||t,e.Diagnostics.Property_0_was_also_declared_here,p)})),Qn(o||i,e.Diagnostics.Duplicate_property_0,p),l=ri(0,c,4096)}return l.nameType=s,function(t,r,n){e.Debug.assert(!!(4096&e.getCheckFlags(t)),"Expected a late-bound symbol."),t.flags|=n,_i(r.symbol).lateSymbol=t,t.declarations?r.symbol.isReplaceableByMethod||t.declarations.push(r):t.declarations=[r],111551&n&&(t.valueDeclaration&&t.valueDeclaration.kind===r.kind||(t.valueDeclaration=r))}(l,i,u),l.parent?e.Debug.assert(l.parent===t,"Existing symbol parent should match new one"):l.parent=t,a.resolvedSymbol=l}}return a.resolvedSymbol}function cc(t,r){var n=_i(t);if(!n[r]){var i="resolvedExports"===r,a=i?1536&t.flags?xa(t):t.exports:t.members;n[r]=a||z;for(var o=e.createSymbolTable(),s=0,c=t.declarations||e.emptyArray;s<c.length;s++){var u=c[s],l=e.getMembersOfDeclaration(u);if(l)for(var _=0,d=l;_<d.length;_++){var p=d[_];i===e.hasStaticModifier(p)&&ic(p)&&sc(t,a,o,p)}}var f=t.assignmentDeclarationMembers;if(f)for(var g=0,m=e.arrayFrom(f.values());g<m.length;g++){p=m[g];var y=e.getAssignmentDeclarationKind(p);i===!(3===y||e.isBinaryExpression(p)&&gv(p,y)||9===y||6===y)&&ic(p)&&sc(t,a,o,p)}n[r]=function(t,r){if(!(null==t?void 0:t.size))return r;if(!(null==r?void 0:r.size))return t;var n=e.createSymbolTable();return ui(n,t),ui(n,r),n}(a,o)||z}return n[r]}function uc(e){return 6256&e.flags?cc(e,"resolvedMembers"):e.members||z}function lc(t){if(106500&t.flags&&"__computed"===t.escapedName){var r=_i(t);if(!r.lateSymbol&&e.some(t.declarations,ic)){var n=Da(t.parent);e.some(t.declarations,e.hasStaticModifier)?va(n):uc(n)}return r.lateSymbol||(r.lateSymbol=t)}return t}function _c(t,r,n){if(4&e.getObjectFlags(t)){var i=t.target,a=Tl(t);if(e.length(i.typeParameters)===e.length(a)){var o=xl(i,e.concatenate(a,[r||i.thisType]));return n?_u(o):o}}else if(2097152&t.flags){var s=e.sameMap(t.types,(function(e){return _c(e,r,n)}));return s!==t.types?j_(s):t}return n?_u(t):t}function dc(t,r,n,i){var a,o,s,c,u;e.rangeEquals(n,i,0,n.length)?(o=r.symbol?uc(r.symbol):e.createSymbolTable(r.declaredProperties),s=r.declaredCallSignatures,c=r.declaredConstructSignatures,u=r.declaredIndexInfos):(a=lp(n,i),o=Ys(r.declaredProperties,a,1===n.length),s=cp(r.declaredCallSignatures,a),c=cp(r.declaredConstructSignatures,a),u=up(r.declaredIndexInfos,a));var l=Is(r);if(l.length){r.symbol&&o===uc(r.symbol)&&(o=e.createSymbolTable(r.declaredProperties)),Ja(t,o,s,c,u);for(var _=e.lastOrUndefined(i),d=0,p=l;d<p.length;d++){var f=p[d],g=_?_c(Fp(f,a),_):f;Zs(o,Qc(g)),s=e.concatenate(s,Su(g,0)),c=e.concatenate(c,Su(g,1));var m=g!==Le?Nu(g):[ll(Ye,Le,!1)];u=e.concatenate(u,e.filter(m,(function(e){return!Tu(u,e.keyType)})))}}Ja(t,o,s,c,u)}function pc(e,t,r,n,i,a,o,s){var c=new h(pe,s);return c.declaration=e,c.typeParameters=t,c.parameters=n,c.thisParameter=r,c.resolvedReturnType=i,c.resolvedTypePredicate=a,c.minArgumentCount=o,c.resolvedMinArgumentCount=void 0,c.target=void 0,c.mapper=void 0,c.compositeSignatures=void 0,c.compositeKind=void 0,c}function fc(e){var t=pc(e.declaration,e.typeParameters,e.thisParameter,e.parameters,void 0,void 0,e.minArgumentCount,39&e.flags);return t.target=e.target,t.mapper=e.mapper,t.compositeSignatures=e.compositeSignatures,t.compositeKind=e.compositeKind,t}function gc(e,t){var r=fc(e);return r.compositeSignatures=t,r.compositeKind=1048576,r.target=void 0,r.mapper=void 0,r}function mc(t,r){if((24&t.flags)===r)return t;t.optionalCallSignatureCache||(t.optionalCallSignatureCache={});var n=8===r?"inner":"outer";return t.optionalCallSignatureCache[n]||(t.optionalCallSignatureCache[n]=function(t,r){e.Debug.assert(8===r||16===r,"An optional call signature can either be for an inner call chain or an outer call chain, but not both.");var n=fc(t);return n.flags|=r,n}(t,r))}function yc(t,r){if(L(t)){var n=t.parameters.length-1,i=ys(t.parameters[n]);if(_g(i))return[a(i,n)];if(!r&&1048576&i.flags&&e.every(i.types,_g))return e.map(i.types,(function(e){return a(e,n)}))}return[t.parameters];function a(r,n){var i=Tl(r),a=r.target.labeledElementDeclarations,o=e.map(i,(function(e,i){var o=!!a&&px(a[i])||fx(t,n+i,r),s=r.target.elementFlags[i],c=ri(1,o,12&s?32768:2&s?16384:0);return c.type=4&s?u_(e):e,c}));return e.concatenate(t.parameters.slice(0,n),o)}}function vc(e,t,r,n,i){for(var a=0,o=e;a<o.length;a++){var s=o[a];if(Uf(s,t,r,n,i,r?Up:Jp))return s}}function hc(t,r,n){if(r.typeParameters){if(n>0)return;for(var i=1;i<t.length;i++)if(!vc(t[i],r,!1,!1,!1))return;return[r]}var a;for(i=0;i<t.length;i++){var o=i===n?r:vc(t[i],r,!0,!1,!0);if(!o)return;a=e.appendIfUnique(a,o)}return a}function bc(t){for(var r,n,i=0;i<t.length;i++){if(0===t[i].length)return e.emptyArray;t[i].length>1&&(n=void 0===n?i:-1);for(var a=0,o=t[i];a<o.length;a++){var s=o[a];if(!r||!vc(r,s,!1,!1,!0)){var c=hc(t,s,i);if(c){var u=s;if(c.length>1){var l=s.thisParameter,_=e.forEach(c,(function(e){return e.thisParameter}));if(_)l=Fg(_,j_(e.mapDefined(c,(function(e){return e.thisParameter&&ys(e.thisParameter)}))));(u=gc(s,c)).thisParameter=l}(r||(r=[])).push(u)}}}}if(!e.length(r)&&-1!==n){for(var d=t[void 0!==n?n:0],p=d.slice(),f=function(t){if(t!==d){var r=t[0];if(e.Debug.assert(!!r,"getUnionSignatures bails early on empty signature lists and should not have empty lists on second pass"),p=r.typeParameters&&e.some(p,(function(e){return!!e.typeParameters&&!xc(r.typeParameters,e.typeParameters)}))?void 0:e.map(p,(function(t){return function(t,r){var n,i=t.typeParameters||r.typeParameters;t.typeParameters&&r.typeParameters&&(n=lp(r.typeParameters,t.typeParameters));var a=t.declaration,o=function(e,t,r){for(var n=xx(e),i=xx(t),a=n>=i?e:t,o=a===e?t:e,s=a===e?n:i,c=Sx(e)||Sx(t),u=c&&!Sx(a),l=new Array(s+(u?1:0)),_=0;_<s;_++){var d=hx(a,_);a===t&&(d=Fp(d,r));var p=hx(o,_)||Ke;o===t&&(p=Fp(p,r));var f=j_([d,p]),g=c&&!u&&_===s-1,m=_>=Dx(a)&&_>=Dx(o),y=_>=n?void 0:fx(e,_),v=_>=i?void 0:fx(t,_),h=ri(1|(m&&!g?16777216:0),(y===v?y:y?v?void 0:y:v)||"arg".concat(_));h.type=g?u_(f):f,l[_]=h}if(u){var b=ri(1,"args");b.type=u_(vx(o,s)),o===t&&(b.type=Fp(b.type,r)),l[s]=b}return l}(t,r,n),s=function(e,t,r){if(!e||!t)return e||t;var n=j_([ys(e),Fp(ys(t),r)]);return Fg(e,n)}(t.thisParameter,r.thisParameter,n),c=Math.max(t.minArgumentCount,r.minArgumentCount),u=pc(a,i,s,o,void 0,void 0,c,39&(t.flags|r.flags));u.compositeKind=1048576,u.compositeSignatures=e.concatenate(2097152!==t.compositeKind&&t.compositeSignatures||[t],[r]),n&&(u.mapper=2097152!==t.compositeKind&&t.mapper&&t.compositeSignatures?yp(t.mapper,n):n);return u}(t,r)})),!p)return"break"}},g=0,m=t;g<m.length;g++){if("break"===f(m[g]))break}r=p}return r||e.emptyArray}function xc(t,r){if(e.length(t)!==e.length(r))return!1;if(!t||!r)return!0;for(var n=lp(r,t),i=0;i<t.length;i++){var a=t[i],o=r[i];if(a!==o&&!jp(ml(a)||Ke,Fp(ml(o)||Ke,n)))return!1}return!0}function Dc(t){var r=Nu(t[0]);if(r){for(var n=[],i=function(r){var i=r.keyType;e.every(t,(function(e){return!!Au(e,i)}))&&n.push(ll(i,P_(e.map(t,(function(e){return Fu(e,i)}))),e.some(t,(function(e){return Au(e,i).isReadonly}))))},a=0,o=r;a<o.length;a++){i(o[a])}return n}return e.emptyArray}function Sc(e,t){return e?t?j_([e,t]):e:t}function Tc(t){var r=e.countWhere(t,(function(e){return Su(e,1).length>0})),n=e.map(t,Es);if(r>0&&r===e.countWhere(n,(function(e){return e}))){var i=n.indexOf(!0);n[i]=!1}return n}function Cc(t){for(var r,n,i,a=t.types,o=Tc(a),s=e.countWhere(o,(function(e){return e})),c=function(c){var u=t.types[c];if(!o[c]){var l=Su(u,1);l.length&&s>0&&(l=e.map(l,(function(e){var t=fc(e);return t.resolvedReturnType=function(e,t,r,n){for(var i=[],a=0;a<t.length;a++)a===n?i.push(e):r[a]&&i.push(Yu(Su(t[a],1)[0]));return j_(i)}(Yu(e),a,o,c),t}))),n=Ec(n,l)}r=Ec(r,Su(u,0)),i=e.reduceLeft(Nu(u),(function(e,t){return kc(e,t,!1)}),i)},u=0;u<a.length;u++)c(u);Ja(t,z,r||e.emptyArray,n||e.emptyArray,i||e.emptyArray)}function Ec(t,r){for(var n=function(r){t&&!e.every(t,(function(e){return!Uf(e,r,!1,!1,!1,Jp)}))||(t=e.append(t,r))},i=0,a=r;i<a.length;i++){n(a[i])}return t}function kc(t,r,n){if(t)for(var i=0;i<t.length;i++){var a=t[i];if(a.keyType===r.keyType)return t[i]=ll(a.keyType,n?P_([a.type,r.type]):j_([a.type,r.type]),n?a.isReadonly||r.isReadonly:a.isReadonly&&r.isReadonly),t}return e.append(t,r)}function Nc(t){if(t.target)return Ja(t,z,e.emptyArray,e.emptyArray,e.emptyArray),void Ja(t,Ys(Wc(t.target),t.mapper,!1),i=cp(Su(t.target,0),t.mapper),a=cp(Su(t.target,1),t.mapper),up(Nu(t.target),t.mapper));var r=Da(t.symbol);if(2048&r.flags){Ja(t,z,e.emptyArray,e.emptyArray,e.emptyArray);var n=uc(r),i=Wu(n.get("__call")),a=Wu(n.get("__new"));Ja(t,n,i,a,_l(r))}else{var o,s,c=z;if(r.exports&&(c=va(r),r===ue)){var u=new e.Map;c.forEach((function(t){var r;418&t.flags||512&t.flags&&(null===(r=t.declarations)||void 0===r?void 0:r.length)&&e.every(t.declarations,e.isAmbientModule)||u.set(t.escapedName,t)})),c=u}if(Ja(t,c,e.emptyArray,e.emptyArray,e.emptyArray),32&r.flags){var l=Ps(Ls(r));11272192&l.flags?Zs(c=e.createSymbolTable(function(t){var r=Ba(t),n=ul(t);return n?e.concatenate(r,[n]):r}(c)),Qc(l)):l===Le&&(s=ll(Ye,Le,!1))}var _=ul(c);if(_?o=dl(_):(s&&(o=e.append(o,s)),384&r.flags&&(32&qs(r).flags||e.some(t.properties,(function(e){return!!(296&ys(e).flags)})))&&(o=e.append(o,Vr))),Ja(t,c,e.emptyArray,e.emptyArray,o||e.emptyArray),8208&r.flags&&(t.callSignatures=Wu(r)),32&r.flags){var d=Ls(r);a=r.members?Wu(r.members.get("__constructor")):e.emptyArray;16&r.flags&&(a=e.addRange(a.slice(),e.mapDefined(t.callSignatures,(function(e){return Hb(e.declaration)?pc(e.declaration,e.typeParameters,e.thisParameter,e.parameters,d,void 0,e.minArgumentCount,39&e.flags):void 0})))),a.length||(a=function(t){var r=Su(Ps(t),1),n=e.getClassLikeDeclarationOfSymbol(t.symbol),i=!!n&&e.hasSyntacticModifier(n,256);if(0===r.length)return[pc(void 0,t.localTypeParameters,void 0,e.emptyArray,t,void 0,0,i?4:0)];for(var a=Ns(t),o=e.isInJSFile(a),s=zl(a),c=e.length(s),u=[],l=0,_=r;l<_.length;l++){var d=_[l],p=zu(d.typeParameters),f=e.length(d.typeParameters);if(o||c>=p&&c<=f){var g=f?nl(d,Uu(s,d.typeParameters,p,o)):fc(d);g.typeParameters=t.localTypeParameters,g.resolvedReturnType=t,g.flags=i?4|g.flags:-5&g.flags,u.push(g)}}return u}(d)),t.constructSignatures=a}}}function Ac(e,t,r){return Fp(e,lp([t.indexType,t.objectType],[Yd(0),m_([r])]))}function Fc(t){if(4194304&t.flags){var r=_u(t.type);return dg(r)?x_(r):Z_(r)}if(16777216&t.flags){if(t.root.isDistributive){var n=t.checkType,i=Fc(n);if(i!==n)return Ap(t,vp(t.root.checkType,i,t.mapper))}return t}if(1048576&t.flags)return my(t,Fc);if(2097152&t.flags){var a=t.types;return 2===a.length&&76&a[0].flags&&a[1]===Nt?t:j_(e.sameMap(t.types,Fc))}return t}function Pc(t){return 4096&e.getCheckFlags(t)}function wc(e,t,r,n){for(var i=0,a=Qc(e);i<a.length;i++){n(H_(a[i],t))}if(1&e.flags)n(Ye);else for(var o=0,s=Nu(e);o<s.length;o++){var c=s[o];(!r||134217732&c.keyType.flags)&&n(c.keyType)}}function Ic(t){var r,n=e.createSymbolTable();Ja(t,z,e.emptyArray,e.emptyArray,e.emptyArray);var i=Oc(t),a=Mc(t),o=Lc(t.target||t),s=Rc(t.target||t),c=_u(Jc(t)),u=zc(t),l=te?128:8576;function _(e){ly(o?Fp(o,hp(t.mapper,i,e)):e,(function(a){return function(e,a){if(tc(a)){var l=oc(a),_=n.get(l);if(_)_.nameType=P_([_.nameType,a]),_.keyType=P_([_.keyType,e]);else{var d=tc(e)?xu(c,oc(e)):void 0,p=!!(4&u||!(8&u)&&d&&16777216&d.flags),f=!!(1&u||!(2&u)&&d&&Vx(d)),g=G&&!p&&d&&16777216&d.flags,m=ri(4|(p?16777216:0),l,262144|(d?Pc(d):0)|(f?8:0)|(g?524288:0));m.mappedType=t,m.nameType=a,m.keyType=e,d&&(m.syntheticOrigin=d,m.declarations=o?void 0:d.declarations),n.set(l,m)}}else if(pl(a)||33&a.flags){var y=ll(5&a.flags?Ye:40&a.flags?Ze:a,Fp(s,hp(t.mapper,i,e)),!!(1&u));r=kc(r,y,!0)}}(e,a)}))}jc(t)?wc(c,l,te,_):ly(Fc(a),_),Ja(t,n,e.emptyArray,e.emptyArray,r||e.emptyArray)}function Oc(e){return e.typeParameter||(e.typeParameter=Vs(Sa(e.declaration.typeParameter)))}function Mc(e){return e.constraintType||(e.constraintType=Yc(Oc(e))||je)}function Lc(e){return e.declaration.nameType?e.nameType||(e.nameType=Fp(ip(e.declaration.nameType),e.mapper)):void 0}function Rc(e){return e.templateType||(e.templateType=e.declaration.type?Fp(jo(ip(e.declaration.type),!0,!!(4&zc(e))),e.mapper):je)}function Bc(t){return e.getEffectiveConstraintOfTypeParameter(t.declaration.typeParameter)}function jc(e){var t=Bc(e);return 195===t.kind&&141===t.operator}function Jc(e){if(!e.modifiersType)if(jc(e))e.modifiersType=Fp(ip(Bc(e).type),e.mapper);else{var t=Mc(Td(e.declaration)),r=t&&262144&t.flags?Yc(t):t;e.modifiersType=r&&4194304&r.flags?Fp(r.type,e.mapper):Ke}return e.modifiersType}function zc(e){var t=e.declaration;return(t.readonlyToken?40===t.readonlyToken.kind?2:1:0)|(t.questionToken?40===t.questionToken.kind?8:4:0)}function Uc(e){var t=zc(e);return 8&t?-1:4&t?1:0}function Kc(e){var t=Uc(e),r=Jc(e);return t||(Vc(r)?Uc(r):0)}function Vc(t){if(32&e.getObjectFlags(t)){var r=Mc(t);if(fd(r))return!0;var n=Lc(t);if(n&&fd(Fp(n,dp(Oc(t),r))))return!0}return!1}function qc(t){return t.members||(524288&t.flags?4&t.objectFlags?function(t){var r=ec(t.target),n=e.concatenate(r.typeParameters,[r.thisType]),i=Tl(t);dc(t,r,n,i.length===n.length?i:e.concatenate(i,[t]))}(t):3&t.objectFlags?function(t){dc(t,ec(t),e.emptyArray,e.emptyArray)}(t):1024&t.objectFlags?function(t){for(var r=Au(t.source,Ye),n=zc(t.mappedType),i=!(1&n),a=4&n?0:16777216,o=r?[ll(Ye,rm(r.type,t.mappedType,t.constraintType),i&&r.isReadonly)]:e.emptyArray,s=e.createSymbolTable(),c=0,u=Qc(t.source);c<u.length;c++){var l=u[c],_=8192|(i&&Vx(l)?8:0),d=ri(4|l.flags&a,l.escapedName,_);if(d.declarations=l.declarations,d.nameType=_i(l).nameType,d.propertyType=ys(l),8388608&t.constraintType.type.flags&&262144&t.constraintType.type.objectType.flags&&262144&t.constraintType.type.indexType.flags){var p=t.constraintType.type.objectType,f=Ac(t.mappedType,t.constraintType.type,p);d.mappedType=f,d.constraintType=Z_(p)}else d.mappedType=t.mappedType,d.constraintType=t.constraintType;s.set(l.escapedName,d)}Ja(t,s,e.emptyArray,e.emptyArray,o)}(t):16&t.objectFlags?Nc(t):32&t.objectFlags?Ic(t):e.Debug.fail("Unhandled object type "+e.Debug.formatObjectFlags(t.objectFlags)):1048576&t.flags?function(t){var r=bc(e.map(t.types,(function(e){return e===Wt?[zr]:Su(e,0)}))),n=bc(e.map(t.types,(function(e){return Su(e,1)}))),i=Dc(t.types);Ja(t,z,r,n,i)}(t):2097152&t.flags?Cc(t):e.Debug.fail("Unhandled type "+e.Debug.formatTypeFlags(t.flags))),t}function Wc(t){return 524288&t.flags?qc(t).properties:e.emptyArray}function Hc(e,t){if(524288&e.flags){var r=qc(e).members.get(t);if(r&&Fa(r))return r}}function Gc(t){if(!t.resolvedProperties){for(var r=e.createSymbolTable(),n=0,i=t.types;n<i.length;n++){for(var a=i[n],o=0,s=Qc(a);o<s.length;o++){var c=s[o];if(!r.has(c.escapedName)){var u=gu(t,c.escapedName);u&&r.set(c.escapedName,u)}}if(1048576&t.flags&&0===Nu(a).length)break}t.resolvedProperties=Ba(r)}return t.resolvedProperties}function Qc(e){return 3145728&(e=du(e)).flags?Gc(e):Wc(e)}function Xc(e){return 262144&e.flags?Yc(e):8388608&e.flags?function(e){return iu(e)?function(e){if(lu(e))return hd(e.objectType,e.indexType);var t=Zc(e.indexType);if(t&&t!==e.indexType){var r=Dd(e.objectType,t,e.accessFlags);if(r)return r}var n=Zc(e.objectType);if(n&&n!==e.objectType)return Dd(n,e.indexType,e.accessFlags);return}(e):void 0}(e):16777216&e.flags?function(e){return iu(e)?tu(e):void 0}(e):ru(e)}function Yc(e){return iu(e)?ml(e):void 0}function Zc(e){var t=md(e,!1);return t!==e?t:Xc(e)}function $c(e){if(!e.resolvedDefaultConstraint){var t=function(e){return e.resolvedInferredTrueType||(e.resolvedInferredTrueType=e.combinedMapper?Fp(ip(e.root.node.trueType),e.combinedMapper):Pd(e))}(e),r=wd(e);e.resolvedDefaultConstraint=Eo(t)?r:Eo(r)?t:P_([t,r])}return e.resolvedDefaultConstraint}function eu(e){if(e.root.isDistributive&&e.restrictiveInstantiation!==e){var t=md(e.checkType,!1),r=t===e.checkType?Xc(t):t;if(r&&r!==e.checkType){var n=Ap(e,vp(e.root.checkType,r,e.mapper));if(!(131072&n.flags))return n}}}function tu(e){return eu(e)||$c(e)}function ru(e){if(464781312&e.flags){var t=au(e);return t!==It&&t!==Ot?t:void 0}return 4194304&e.flags?gt:void 0}function nu(e){return ru(e)||e}function iu(e){return au(e)!==Ot}function au(t){if(t.resolvedBaseConstraint)return t.resolvedBaseConstraint;var r=[];return t.resolvedBaseConstraint=_c(n(t),t);function n(t){if(!t.immediateBaseConstraint){if(!bo(t,4))return Ot;var n=void 0,a=Jf(t);if((r.length<10||r.length<50&&!e.contains(r,a))&&(r.push(a),n=function(t){if(262144&t.flags){var r=ml(t);return t.isThisType||!r?r:i(r)}if(3145728&t.flags){for(var n=[],a=!1,o=0,s=l=t.types;o<s.length;o++){var c=s[o],u=i(c);u?(u!==c&&(a=!0),n.push(u)):a=!0}return a?1048576&t.flags&&n.length===l.length?P_(n):2097152&t.flags&&n.length?j_(n):void 0:t}if(4194304&t.flags)return gt;if(134217728&t.flags){var l=t.types,_=e.mapDefined(l,i);return _.length===l.length?ed(t.texts,_):Ye}if(268435456&t.flags){return(r=i(t.type))&&r!==t.type?rd(t.symbol,r):Ye}if(8388608&t.flags){if(lu(t))return i(hd(t.objectType,t.indexType));var d=i(t.objectType),p=i(t.indexType),f=d&&p&&Dd(d,p,t.accessFlags);return f&&i(f)}if(16777216&t.flags){return(r=tu(t))&&i(r)}if(33554432&t.flags)return i(Ol(t));return t}(md(t,!1)),r.pop()),!So()){if(262144&t.flags){var o=fl(t);if(o){var s=Qn(o,e.Diagnostics.Type_parameter_0_has_a_circular_constraint,ao(t));!l||e.isNodeDescendantOf(o,l)||e.isNodeDescendantOf(l,o)||e.addRelatedInfo(s,e.createDiagnosticForNode(l,e.Diagnostics.Circularity_originates_in_type_at_this_location))}}n=Ot}t.immediateBaseConstraint=n||It}return t.immediateBaseConstraint}function i(e){var t=n(e);return t!==It&&t!==Ot?t:void 0}}function ou(t){if(t.default)t.default===Mt&&(t.default=Ot);else if(t.target){var r=ou(t.target);t.default=r?Fp(r,t.mapper):It}else{t.default=Mt;var n=t.symbol&&e.forEach(t.symbol.declarations,(function(t){return e.isTypeParameterDeclaration(t)&&t.default})),i=n?ip(n):It;t.default===Mt&&(t.default=i)}return t.default}function su(e){var t=ou(e);return t!==It&&t!==Ot?t:void 0}function cu(t){return!(!t.symbol||!e.forEach(t.symbol.declarations,(function(t){return e.isTypeParameterDeclaration(t)&&t.default})))}function uu(e){return e.resolvedApparentType||(e.resolvedApparentType=function(e){var t=Tp(e);if(t&&!e.declaration.nameType){var r=Yc(t);if(r&&Hf(r))return Fp(e,vp(t,r,e.mapper))}return e}(e))}function lu(t){var r;return!(!(8388608&t.flags&&32&e.getObjectFlags(r=t.objectType)&&!Vc(r)&&fd(t.indexType))||8&zc(r)||r.declaration.nameType)}function _u(t){var r=465829888&t.flags?ru(t)||Ke:t;return 32&e.getObjectFlags(r)?uu(r):2097152&r.flags?function(e){return e.resolvedApparentType||(e.resolvedApparentType=_c(e,e,!0))}(r):402653316&r.flags?Yt:296&r.flags?Zt:2112&r.flags?Pr||(Pr=Gl("BigInt",0,!1))||Ct:528&r.flags?$t:12288&r.flags?$l():67108864&r.flags?Ct:4194304&r.flags?gt:2&r.flags&&!G?Ct:r}function du(e){return mu(_u(mu(e)))}function pu(t,r,n){for(var i,a,o,s,c,u,l=1048576&t.flags,_=4,d=l?0:8,p=!1,f=0,g=t.types;f<g.length;f++){if(!(ko(F=_u(g[f]))||131072&F.flags)){var m=(A=xu(F,r,n))?e.getDeclarationModifierFlagsFromSymbol(A):0;if(A){if(106500&A.flags&&(null!=u||(u=l?0:16777216),l?u|=16777216&A.flags:u&=A.flags),o){if(A!==o){if((JT(A)||A)===(JT(o)||o)&&-1===zf(o,A,(function(e,t){return e===t?-1:0})))p=!!o.parent&&!!e.length(Cs(o.parent));else{s||(s=new e.Map).set(P(o),o);var y=P(A);s.has(y)||s.set(y,A)}}}else o=A;l&&Vx(A)?d|=8:l||Vx(A)||(d&=-9),d|=(24&m?0:256)|(16&m?512:0)|(8&m?1024:0)|(32&m?2048:0),gh(A)||(_=2)}else if(l){var v=!nc(r)&&Iu(F,r);v?(d|=32|(v.isReadonly?8:0),c=e.append(c,_g(F)?fg(F)||qe:v.type)):!vm(F)||2097152&e.getObjectFlags(F)?d|=16:(d|=32,c=e.append(c,qe))}}}if(o&&(!(l&&(s||48&d)&&1536&d)||s&&function(t){for(var r,n=function(t){return t.declarations?r?(r.forEach((function(n){e.contains(t.declarations,n)||r.delete(n)})),0===r.size?{value:void 0}:void 0):(r=new e.Set(t.declarations),"continue"):{value:void 0}},i=0,a=t;i<a.length;i++){var o=n(a[i]);if("object"==typeof o)return o.value}return r}(e.arrayFrom(s.values())))){if(!(s||16&d||c)){if(p){var h=Fg(o,o.type);return h.parent=null===(a=null===(i=o.valueDeclaration)||void 0===i?void 0:i.symbol)||void 0===a?void 0:a.parent,h.containingType=t,h.mapper=o.mapper,h}return o}for(var b,x,D,S,T,C=[],E=!1,k=0,N=s?e.arrayFrom(s.values()):[o];k<N.length;k++){var A=N[k];T?A.valueDeclaration&&A.valueDeclaration!==T&&(E=!0):T=A.valueDeclaration,b=e.addRange(b,A.declarations);var F=ys(A);x||(x=F,D=_i(A).nameType);var w=ms(A);S||w!==F?S=e.append(S||C.slice(),w):F!==x&&(d|=64),(ag(F)||_d(F)||F===xt)&&(d|=128),131072&F.flags&&F!==xt&&(d|=131072),C.push(F)}e.addRange(C,c);var I=ri(4|(null!=u?u:0),r,_|d);return I.containingType=t,!E&&T&&(I.valueDeclaration=T,T.symbol.parent&&(I.parent=T.symbol.parent)),I.declarations=b,I.nameType=D,C.length>2?(I.checkFlags|=65536,I.deferralParent=t,I.deferralConstituents=C,I.deferralWriteConstituents=S):(I.type=l?P_(C):j_(C),S&&(I.writeType=l?P_(S):j_(S))),I}}function fu(t,r,n){var i,a,o=(null===(i=t.propertyCacheWithoutObjectFunctionPropertyAugment)||void 0===i?void 0:i.get(r))||!n?null===(a=t.propertyCache)||void 0===a?void 0:a.get(r):void 0;o||(o=pu(t,r,n))&&(n?t.propertyCacheWithoutObjectFunctionPropertyAugment||(t.propertyCacheWithoutObjectFunctionPropertyAugment=e.createSymbolTable()):t.propertyCache||(t.propertyCache=e.createSymbolTable())).set(r,o);return o}function gu(t,r,n){var i=fu(t,r,n);return!i||16&e.getCheckFlags(i)?void 0:i}function mu(t){return 1048576&t.flags&&16777216&t.objectFlags?t.resolvedReducedType||(t.resolvedReducedType=function(t){var r=e.sameMap(t.types,mu);if(r===t.types)return t;var n=P_(r);1048576&n.flags&&(n.resolvedReducedType=n);return n}(t)):2097152&t.flags?(16777216&t.objectFlags||(t.objectFlags|=16777216|(e.some(Gc(t),yu)?33554432:0)),33554432&t.objectFlags?ct:t):t}function yu(e){return vu(e)||hu(e)}function vu(t){return!(16777216&t.flags||192!=(131264&e.getCheckFlags(t))||!(131072&ys(t).flags))}function hu(t){return!t.valueDeclaration&&!!(1024&e.getCheckFlags(t))}function bu(t,r){if(2097152&r.flags&&33554432&e.getObjectFlags(r)){var n=e.find(Gc(r),vu);if(n)return e.chainDiagnosticMessages(t,e.Diagnostics.The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituents,ao(r,void 0,536870912),no(n));var i=e.find(Gc(r),hu);if(i)return e.chainDiagnosticMessages(t,e.Diagnostics.The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_private_in_some,ao(r,void 0,536870912),no(i))}return t}function xu(e,t,r,n){if(524288&(e=du(e)).flags){var i=qc(e),a=i.members.get(t);if(a&&Fa(a,n))return a;if(r)return;var o=i===wt?Wt:i.callSignatures.length?Ht:i.constructSignatures.length?Gt:void 0;if(o){var s=Hc(o,t);if(s)return s}return Hc(qt,t)}if(3145728&e.flags)return gu(e,t,r)}function Du(t,r){if(3670016&t.flags){var n=qc(t);return 0===r?n.callSignatures:n.constructSignatures}return e.emptyArray}function Su(e,t){return Du(du(e),t)}function Tu(t,r){return e.find(t,(function(e){return e.keyType===r}))}function Cu(t,r){for(var n,i,a,o=0,s=t;o<s.length;o++){var c=s[o];c.keyType===Ye?n=c:Eu(r,c.keyType)&&(i?(a||(a=[i])).push(c):i=c)}return a?ll(Ke,j_(e.map(a,(function(e){return e.type}))),e.reduceLeft(a,(function(e,t){return e&&t.isReadonly}),!0)):i||(n&&Eu(r,Ye)?n:void 0)}function Eu(t,r){return Vp(t,r)||r===Ye&&Vp(t,Ze)||r===Ze&&(t===vt||!!(128&t.flags)&&e.isNumericLiteralName(t.value))}function ku(t){return 3670016&t.flags?qc(t).indexInfos:e.emptyArray}function Nu(e){return ku(du(e))}function Au(e,t){return Tu(Nu(e),t)}function Fu(e,t){var r;return null===(r=Au(e,t))||void 0===r?void 0:r.type}function Pu(e,t){return Nu(e).filter((function(e){return Eu(t,e.keyType)}))}function wu(e,t){return Cu(Nu(e),t)}function Iu(t,r){return wu(t,nc(r)?ot:Xd(e.unescapeLeadingUnderscores(r)))}function Ou(t){for(var r,n,i=0,a=e.getEffectiveTypeParameterDeclarations(t);i<a.length;i++){var o=a[i];n=e.appendIfUnique(n,Vs(o.symbol))}return(null==n?void 0:n.length)?n:e.isFunctionDeclaration(t)?null===(r=Vu(t))||void 0===r?void 0:r.typeParameters:void 0}function Mu(e){var t=[];return e.forEach((function(e,r){Ra(r)||t.push(e)})),t}function Lu(t){return e.isInJSFile(t)&&(t.type&&319===t.type.kind||e.getJSDocParameterTags(t).some((function(e){var t=e.isBracketed,r=e.typeExpression;return t||!!r&&319===r.type.kind})))}function Ru(t,r){if(!e.isExternalModuleNameRelative(t)){var n=fi(se,'"'+t+'"',512);return n&&r?Da(n):n}}function Bu(t){if(e.hasQuestionToken(t)||ju(t)||Lu(t))return!0;if(t.initializer){var r=Ku(t.parent),n=t.parent.parameters.indexOf(t);return e.Debug.assert(n>=0),n>=Dx(r,3)}var i=e.getImmediatelyInvokedFunctionExpression(t.parent);return!!i&&(!t.type&&!t.dotDotDotToken&&t.parent.parameters.indexOf(t)>=i.arguments.length)}function ju(t){if(!e.isJSDocPropertyLikeTag(t))return!1;var r=t.isBracketed,n=t.typeExpression;return r||!!n&&319===n.type.kind}function Ju(e,t,r,n){return{kind:e,parameterName:t,parameterIndex:r,type:n}}function zu(e){var t=0;if(e)for(var r=0;r<e.length;r++)cu(e[r])||(t=r+1);return t}function Uu(t,r,n,i){var a=e.length(r);if(!a)return[];var o=e.length(t);if(i||o>=n&&o<=a){for(var s=t?t.slice():[],c=o;c<a;c++)s[c]=je;var u=Sm(i);for(c=o;c<a;c++){var l=su(r[c]);i&&l&&(jp(l,Ke)||jp(l,Ct))&&(l=Le),s[c]=l?Fp(l,lp(r,s)):u}return s.length=r.length,s}return t&&t.slice()}function Ku(t){var r,n=di(t);if(!n.resolvedSignature){var i=[],a=0,o=0,s=void 0,c=!1,u=e.getImmediatelyInvokedFunctionExpression(t),l=e.isJSDocConstructSignature(t);!u&&e.isInJSFile(t)&&e.isValueSignatureDeclaration(t)&&!e.hasJSDocParameterTags(t)&&!e.getJSDocType(t)&&(a|=32);for(var _=l?1:0;_<t.parameters.length;_++){var d=t.parameters[_],p=d.symbol,f=e.isJSDocParameterTag(d)?d.typeExpression&&d.typeExpression.type:d.type;if(p&&4&p.flags&&!e.isBindingPattern(d.name))p=vi(d,p.escapedName,111551,void 0,void 0,!1);0===_&&"this"===p.escapedName?(c=!0,s=d.symbol):i.push(p),f&&198===f.kind&&(a|=2),ju(d)||d.initializer||d.questionToken||e.isRestParameter(d)||u&&i.length>u.arguments.length&&!f||Lu(d)||(o=i.length)}if((174===t.kind||175===t.kind)&&ac(t)&&(!c||!s)){var g=174===t.kind?175:174,m=e.getDeclarationOfKind(Sa(t),g);m&&(s=(r=OE(m))&&r.symbol)}var y=173===t.kind?Ls(Da(t.parent.symbol)):void 0,v=y?y.localTypeParameters:Ou(t);(e.hasRestParameter(t)||e.isInJSFile(t)&&function(t,r){if(e.isJSDocSignature(t)||!qu(t))return!1;var n=e.lastOrUndefined(t.parameters),i=n?e.getJSDocParameterTags(n):e.getJSDocTags(t).filter(e.isJSDocParameterTag),a=e.firstDefined(i,(function(t){return t.typeExpression&&e.isJSDocVariadicType(t.typeExpression.type)?t.typeExpression.type:void 0})),o=ri(3,"args",32768);a?o.type=u_(ip(a.type)):(o.checkFlags|=65536,o.deferralParent=ct,o.deferralConstituents=[rr],o.deferralWriteConstituents=[rr]);a&&r.pop();return r.push(o),!0}(t,i))&&(a|=1),(e.isConstructorTypeNode(t)&&e.hasSyntacticModifier(t,256)||e.isConstructorDeclaration(t)&&e.hasSyntacticModifier(t.parent,256))&&(a|=4),n.resolvedSignature=pc(t,v,s,i,void 0,void 0,o,a)}return n.resolvedSignature}function Vu(t){if(e.isInJSFile(t)&&e.isFunctionLikeDeclaration(t)){var r=e.getJSDocTypeTag(t);return(null==r?void 0:r.typeExpression)&&db(ip(r.typeExpression))}}function qu(t){var r=di(t);return void 0===r.containsArgumentsReference&&(8192&r.flags?r.containsArgumentsReference=!0:r.containsArgumentsReference=function t(r){if(!r)return!1;switch(r.kind){case 79:return r.escapedText===_e.escapedName&&lE(r)===_e;case 169:case 171:case 174:case 175:return 164===r.name.kind&&t(r.name);case 208:case 209:return t(r.expression);case 299:return t(r.initializer);default:return!e.nodeStartsNewLexicalEnvironment(r)&&!e.isPartOfTypeNode(r)&&!!e.forEachChild(r,t)}}(t.body)),r.containsArgumentsReference}function Wu(t){if(!t||!t.declarations)return e.emptyArray;for(var r=[],n=0;n<t.declarations.length;n++){var i=t.declarations[n];if(e.isFunctionLike(i)){if(n>0&&i.body){var a=t.declarations[n-1];if(i.parent===a.parent&&i.kind===a.kind&&i.pos===a.end)continue}r.push(!e.isFunctionExpressionOrArrowFunction(i)&&!e.isObjectLiteralMethod(i)&&Vu(i)||Ku(i))}}return r}function Hu(e){var t=sa(e,e);if(t){var r=_a(t);if(r)return ys(r)}return Le}function Gu(e){if(e.thisParameter)return ys(e.thisParameter)}function Qu(t){if(!t.resolvedTypePredicate){if(t.target){var r=Qu(t.target);t.resolvedTypePredicate=r?(o=r,s=t.mapper,Ju(o.kind,o.parameterName,o.parameterIndex,Fp(o.type,s))):jr}else if(t.compositeSignatures)t.resolvedTypePredicate=function(e,t){for(var r,n=[],i=0,a=e;i<a.length;i++){var o=Qu(a[i]);if(!o||2===o.kind||3===o.kind){if(2097152!==t)continue;return}if(r){if(!w_(r,o))return}else r=o;n.push(o.type)}if(!r)return;var s=Xu(n,t);return Ju(r.kind,r.parameterName,r.parameterIndex,s)}(t.compositeSignatures,t.compositeKind)||jr;else{var n=t.declaration&&e.getEffectiveReturnTypeNode(t.declaration),i=void 0;if(!n){var a=Vu(t.declaration);a&&t!==a&&(i=Qu(a))}t.resolvedTypePredicate=n&&e.isTypePredicateNode(n)?function(t,r){var n=t.parameterName,i=t.type&&ip(t.type);return 194===n.kind?Ju(t.assertsModifier?2:0,void 0,void 0,i):Ju(t.assertsModifier?3:1,n.escapedText,e.findIndex(r.parameters,(function(e){return e.escapedName===n.escapedText})),i)}(n,t):i||jr}e.Debug.assert(!!t.resolvedTypePredicate)}var o,s;return t.resolvedTypePredicate===jr?void 0:t.resolvedTypePredicate}function Xu(e,t,r){return 2097152!==t?P_(e,r):j_(e)}function Yu(t){if(!t.resolvedReturnType){if(!bo(t,3))return je;var r=t.target?Fp(Yu(t.target),t.mapper):t.compositeSignatures?Fp(Xu(e.map(t.compositeSignatures,Yu),t.compositeKind,2),t.mapper):Zu(t.declaration)||(e.nodeIsMissing(t.declaration.body)?Le:Ix(t.declaration));if(8&t.flags?r=Dg(r):16&t.flags&&(r=bg(r)),!So()){if(t.declaration){var n=e.getEffectiveReturnTypeNode(t.declaration);if(n)Qn(n,e.Diagnostics.Return_type_annotation_circularly_references_itself);else if(Z){var i=t.declaration,a=e.getNameOfDeclaration(i);a?Qn(a,e.Diagnostics._0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions,e.declarationNameToString(a)):Qn(i,e.Diagnostics.Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions)}}r=Le}t.resolvedReturnType=r}return t.resolvedReturnType}function Zu(t){if(173===t.kind)return Ls(Da(t.parent.symbol));if(e.isJSDocConstructSignature(t))return ip(t.parameters[0].type);var r,n=e.getEffectiveReturnTypeNode(t);if(n)return ip(n);if(174===t.kind&&ac(t)){var i=e.isInJSFile(t)&&Ro(t);if(i)return i;var a=ss(e.getDeclarationOfKind(Sa(t),175));if(a)return a}return(r=Vu(t))&&Yu(r)}function $u(e){return!e.resolvedReturnType&&xo(e,3)>=0}function el(e){if(L(e)){var t=ys(e.parameters[e.parameters.length-1]),r=_g(t)?fg(t):t;return r&&Fu(r,Ze)}}function tl(e,t,r,n){var i=rl(e,Uu(t,e.typeParameters,zu(e.typeParameters),r));if(n){var a=pb(Yu(i));if(a){var o=fc(a);o.typeParameters=n;var s=fc(i);return s.resolvedReturnType=sl(o),s}}return i}function rl(t,r){var n=t.instantiations||(t.instantiations=new e.Map),i=vl(r),a=n.get(i);return a||n.set(i,a=nl(t,r)),a}function nl(e,t){return xp(e,function(e,t){return lp(e.typeParameters,t)}(e,t),!0)}function il(e){return e.typeParameters?e.erasedSignatureCache||(e.erasedSignatureCache=function(e){return xp(e,mp(e.typeParameters),!0)}(e)):e}function al(t){return t.typeParameters?t.canonicalSignatureCache||(t.canonicalSignatureCache=function(t){return tl(t,e.map(t.typeParameters,(function(e){return e.target&&!Yc(e.target)?e.target:e})),e.isInJSFile(t.declaration))}(t)):t}function ol(t){var r=t.typeParameters;if(r){if(t.baseSignatureCache)return t.baseSignatureCache;for(var n=mp(r),i=lp(r,e.map(r,(function(e){return Yc(e)||Ke}))),a=e.map(r,(function(e){return Fp(e,i)||Ke})),o=0;o<r.length-1;o++)a=sp(a,i);return a=sp(a,n),t.baseSignatureCache=xp(t,lp(r,a),!0)}return t}function sl(t){var r;if(!t.isolatedSignatureType){var n=null===(r=t.declaration)||void 0===r?void 0:r.kind,i=void 0===n||173===n||177===n||182===n,a=Ma(16);a.members=z,a.properties=e.emptyArray,a.callSignatures=i?e.emptyArray:[t],a.constructSignatures=i?[t]:e.emptyArray,a.indexInfos=e.emptyArray,t.isolatedSignatureType=a}return t.isolatedSignatureType}function cl(e){return e.members?ul(e.members):void 0}function ul(e){return e.get("__index")}function ll(e,t,r,n){return{keyType:e,type:t,isReadonly:r,declaration:n}}function _l(t){var r=cl(t);return r?dl(r):e.emptyArray}function dl(t){if(t.declarations){for(var r=[],n=function(t){if(1===t.parameters.length){var n=t.parameters[0];n.type&&ly(ip(n.type),(function(n){pl(n)&&!Tu(r,n)&&r.push(ll(n,t.type?ip(t.type):Le,e.hasEffectiveModifier(t,64),t))}))}},i=0,a=t.declarations;i<a.length;i++){n(a[i])}return r}return e.emptyArray}function pl(t){return!!(4108&t.flags)||_d(t)||!!(2097152&t.flags)&&!dd(t)&&e.some(t.types,pl)}function fl(t){return e.mapDefined(e.filter(t.symbol&&t.symbol.declarations,e.isTypeParameterDeclaration),e.getEffectiveConstraintOfTypeParameter)[0]}function gl(t,r){var n,i;if(null===(n=t.symbol)||void 0===n?void 0:n.declarations)for(var a=function(n){if(192===n.parent.kind){var a=e.walkUpParenthesizedTypesAndGetParentAndChild(n.parent.parent),o=a[0],s=void 0===o?n.parent:o,c=a[1];if(180!==c.kind||r){if(166===c.kind&&c.dotDotDotToken||188===c.kind||199===c.kind&&c.dotDotDotToken)i=e.append(i,u_(Ke));else if(201===c.kind)i=e.append(i,Ye);else if(165===c.kind&&197===c.parent.kind)i=e.append(i,gt);else if(197===c.kind&&c.type&&e.skipParentheses(c.type)===n.parent&&191===c.parent.kind&&c.parent.extendsType===c&&197===c.parent.checkType.kind&&c.parent.checkType.type){var u=c.parent.checkType,l=ip(u.type);i=e.append(i,Fp(l,dp(Vs(Sa(u.typeParameter)),u.typeParameter.constraint?ip(u.typeParameter.constraint):gt)))}}else{var _=c,d=WD(_);if(d){var p=_.typeArguments.indexOf(s);if(p<d.length){var f=Yc(d[p]);if(f){var g=fp(d,d.map((function(e,t){return function(){return function(e,t,r){if(e.typeArguments&&r<e.typeArguments.length)return ip(e.typeArguments[r]);return VD(e,t)[r]}(_,d,t)}}))),m=Fp(f,g);m!==t&&(i=e.append(i,m))}}}}}},o=0,s=t.symbol.declarations;o<s.length;o++){a(s[o])}return i&&j_(i)}function ml(e){if(!e.constraint)if(e.target){var t=Yc(e.target);e.constraint=t?Fp(t,e.mapper):It}else{var r=fl(e);if(r){var n=ip(r);1&n.flags&&!ko(n)&&(n=197===r.parent.parent.kind?gt:Ke),e.constraint=n}else e.constraint=gl(e)||It}return e.constraint===It?void 0:e.constraint}function yl(t){var r=e.getDeclarationOfKind(t.symbol,165),n=e.isJSDocTemplateTag(r.parent)?e.getEffectiveContainerForJSDocTemplateTag(r.parent):r.parent;return n&&Sa(n)}function vl(e){var t="";if(e)for(var r=e.length,n=0;n<r;){for(var i=e[n].id,a=1;n+a<r&&e[n+a].id===i+a;)a++;t.length&&(t+=","),t+=i,a>1&&(t+=":"+a),n+=a}return t}function hl(e,t){return e?"@".concat(P(e))+(t?":".concat(vl(t)):""):""}function bl(t,r){for(var n=0,i=0,a=t;i<a.length;i++){var o=a[i];void 0!==r&&o.flags&r||(n|=e.getObjectFlags(o))}return 458752&n}function xl(e,t){var r=vl(t),n=e.instantiations.get(r);return n||(n=Ma(4,e.symbol),e.instantiations.set(r,n),n.objectFlags|=t?bl(t):0,n.target=e,n.resolvedTypeArguments=t),n}function Dl(e){var t=wa(e.flags);return t.symbol=e.symbol,t.objectFlags=e.objectFlags,t.target=e.target,t.resolvedTypeArguments=e.resolvedTypeArguments,t}function Sl(e,t,r,n,i){if(!n){var a=jd(n=Bd(t));i=r?sp(a,r):a}var o=Ma(4,e.symbol);return o.target=e,o.node=t,o.mapper=r,o.aliasSymbol=n,o.aliasTypeArguments=i,o}function Tl(t){var r,n;if(!t.resolvedTypeArguments){if(!bo(t,6))return(null===(r=t.target.localTypeParameters)||void 0===r?void 0:r.map((function(){return je})))||e.emptyArray;var i=t.node,a=i?180===i.kind?e.concatenate(t.target.outerTypeParameters,VD(i,t.target.localTypeParameters)):185===i.kind?[ip(i.elementType)]:e.map(i.elements,ip):e.emptyArray;So()?t.resolvedTypeArguments=t.mapper?sp(a,t.mapper):a:(t.resolvedTypeArguments=(null===(n=t.target.localTypeParameters)||void 0===n?void 0:n.map((function(){return je})))||e.emptyArray,Qn(t.node||l,t.target.symbol?e.Diagnostics.Type_arguments_for_0_circularly_reference_themselves:e.Diagnostics.Tuple_type_arguments_circularly_reference_themselves,t.target.symbol&&no(t.target.symbol)))}return t.resolvedTypeArguments}function Cl(t){return e.length(t.target.typeParameters)}function El(t,r){var n=qs(Da(r)),i=n.localTypeParameters;if(i){var a=e.length(t.typeArguments),o=zu(i),s=e.isInJSFile(t);if(!(!Z&&s)&&(a<o||a>i.length)){var c=s&&e.isExpressionWithTypeArguments(t)&&!e.isJSDocAugmentsTag(t.parent);if(Qn(t,o===i.length?c?e.Diagnostics.Expected_0_type_arguments_provide_these_with_an_extends_tag:e.Diagnostics.Generic_type_0_requires_1_type_argument_s:c?e.Diagnostics.Expected_0_1_type_arguments_provide_these_with_an_extends_tag:e.Diagnostics.Generic_type_0_requires_between_1_and_2_type_arguments,ao(n,void 0,2),o,i.length),!s)return je}return 180===t.kind&&p_(t,e.length(t.typeArguments)!==i.length)?Sl(n,t,void 0):xl(n,e.concatenate(n.outerTypeParameters,Uu(zl(t),i,o,s)))}return Bl(t,r)?n:je}function kl(t,r,n,i){var a=qs(t);if(a===Ue&&k.has(t.escapedName)&&r&&1===r.length)return rd(t,r[0]);var o=_i(t),s=o.typeParameters,c=vl(r)+hl(n,i),u=o.instantiations.get(c);return u||o.instantiations.set(c,u=Pp(a,lp(s,Uu(r,s,zu(s),e.isInJSFile(t.valueDeclaration))),n,i)),u}function Nl(t){var r,n=null===(r=t.declarations)||void 0===r?void 0:r.find(e.isTypeAlias);return!(!n||!e.getContainingFunction(n))}function Al(e){return e.parent?"".concat(Al(e.parent),".").concat(e.escapedName):e.escapedName}function Fl(e){var t=(163===e.kind?e.right:208===e.kind?e.name:e).escapedText;if(t){var r=163===e.kind?Fl(e.left):208===e.kind?Fl(e.expression):void 0,n=r?"".concat(Al(r),".").concat(t):t,i=Oe.get(n);return i||(Oe.set(n,i=ri(524288,t,1048576)),i.parent=r,i.declaredType=Je),i}return we}function Pl(t,r,n){var i=function(t){switch(t.kind){case 180:return t.typeName;case 230:var r=t.expression;if(e.isEntityNameExpression(r))return r}}(t);if(!i)return we;var a=aa(i,r,n);return a&&a!==we?a:n?we:Fl(i)}function wl(t,r){if(r===we)return je;if(96&(r=function(t){var r=t.valueDeclaration;if(r&&e.isInJSFile(r)&&!(524288&t.flags)&&!e.getExpandoInitializer(r,!1)){var n=e.isVariableDeclaration(r)?e.getDeclaredExpandoInitializer(r):e.getAssignedExpandoInitializer(r);if(n){var i=Sa(n);if(i)return Gb(i,t)}}}(r)||r).flags)return El(t,r);if(524288&r.flags)return function(t,r){if(1048576&e.getCheckFlags(r)){var n=zl(t),i=hl(r,n),a=Me.get(i);return a||((a=Oa(1,"error")).aliasSymbol=r,a.aliasTypeArguments=n,Me.set(i,a)),a}var o=qs(r),s=_i(r).typeParameters;if(s){var c=e.length(t.typeArguments),u=zu(s);if(c<u||c>s.length)return Qn(t,u===s.length?e.Diagnostics.Generic_type_0_requires_1_type_argument_s:e.Diagnostics.Generic_type_0_requires_between_1_and_2_type_arguments,no(r),u,s.length),je;var l=Bd(t),_=!l||!Nl(r)&&Nl(l)?void 0:l;return kl(r,zl(t),_,jd(_))}return Bl(t,r)?o:je}(t,r);var n=Ws(r);if(n)return Bl(t,r)?Gd(n):je;if(111551&r.flags&&Rl(t)){var i=function(e,t){var r=di(e);if(!r.resolvedJSDocType){var n=ys(t),i=n;if(t.valueDeclaration){var a=202===e.kind&&e.qualifier;n.symbol&&n.symbol!==t&&a&&(i=wl(e,n.symbol))}r.resolvedJSDocType=i}return r.resolvedJSDocType}(t,r);return i||(Pl(t,788968),ys(r))}return je}function Il(e,t){if(3&t.flags||t===e||!dd(e)&&!dd(t))return e;var r="".concat(T_(e),">").concat(T_(t)),n=Ee.get(r);if(n)return n;var i=wa(33554432);return i.baseType=e,i.constraint=t,Ee.set(r,i),i}function Ol(e){return j_([e.constraint,e.baseType])}function Ml(e){return 186===e.kind&&1===e.elements.length}function Ll(e,t,r){return Ml(t)&&Ml(r)?Ll(e,t.elements[0],r.elements[0]):Cd(ip(t))===Cd(e)?ip(r):void 0}function Rl(e){return!!(8388608&e.flags)&&(180===e.kind||202===e.kind)}function Bl(t,r){return!t.typeArguments||(Qn(t,e.Diagnostics.Type_0_is_not_generic,r?no(r):t.typeName?e.declarationNameToString(t.typeName):s),!1)}function jl(t){if(e.isIdentifier(t.typeName)){var r=t.typeArguments;switch(t.typeName.escapedText){case"String":return Bl(t),Ye;case"Number":return Bl(t),Ze;case"Boolean":return Bl(t),at;case"Void":return Bl(t),st;case"Undefined":return Bl(t),qe;case"Null":return Bl(t),Qe;case"Function":case"function":return Bl(t),Wt;case"array":return r&&r.length||Z?void 0:rr;case"promise":return r&&r.length||Z?void 0:Fx(Le);case"Object":if(r&&2===r.length){if(e.isJSDocIndexSignature(t)){var n=ip(r[0]),i=ip(r[1]),a=n===Ye||n===Ze?[ll(n,i,!1)]:e.emptyArray;return za(void 0,z,e.emptyArray,e.emptyArray,a)}return Le}return Bl(t),Z?void 0:Le}}}function Jl(t){var r=di(t);if(!r.resolvedType){if(e.isConstTypeReference(t)&&e.isAssertionExpression(t.parent))return r.resolvedSymbol=we,r.resolvedType=pD(t.parent.expression);var n=void 0,i=void 0,a=788968;Rl(t)&&((i=jl(t))||((n=Pl(t,a,!0))===we?n=Pl(t,900095):Pl(t,a),i=wl(t,n))),i||(i=wl(t,n=Pl(t,a))),r.resolvedSymbol=n,r.resolvedType=i}return r.resolvedType}function zl(t){return e.map(t.typeArguments,ip)}function Ul(e){var t=di(e);if(!t.resolvedType){var r=cx(e);t.resolvedType=Gd(Rg(r))}return t.resolvedType}function Kl(t,r){function n(e){var t=e.declarations;if(t)for(var r=0,n=t;r<n.length;r++){var i=n[r];switch(i.kind){case 260:case 261:case 263:return i}}}if(!t)return r?Pt:Ct;var i=qs(t);return 524288&i.flags?e.length(i.typeParameters)!==r?(Qn(n(t),e.Diagnostics.Global_type_0_must_have_1_type_parameter_s,e.symbolName(t),r),r?Pt:Ct):i:(Qn(n(t),e.Diagnostics.Global_type_0_must_be_a_class_or_interface_type,e.symbolName(t)),r?Pt:Ct)}function Vl(t,r){return Hl(t,111551,r?e.Diagnostics.Cannot_find_global_value_0:void 0)}function ql(t,r){return Hl(t,788968,r?e.Diagnostics.Cannot_find_global_type_0:void 0)}function Wl(t,r,n){var i=Hl(t,788968,n?e.Diagnostics.Cannot_find_global_type_0:void 0);if(i&&(qs(i),e.length(_i(i).typeParameters)!==r))return void Qn(i.declarations&&e.find(i.declarations,e.isTypeAliasDeclaration),e.Diagnostics.Global_type_0_must_have_1_type_parameter_s,e.symbolName(i),r);return i}function Hl(e,t,r){return vi(void 0,e,t,r,e,!1,!1,!1)}function Gl(e,t,r){var n=ql(e,r);return n||r?Kl(n,t):void 0}function Ql(){return Cr||(Cr=Gl("ImportMeta",0,!0)||Ct)}function Xl(){if(!Er){var t=ri(0,"ImportMetaExpression"),r=Ql(),n=ri(4,"meta",8);n.parent=t,n.type=r;var i=e.createSymbolTable([n]);t.members=i,Er=za(t,i,e.emptyArray,e.emptyArray,e.emptyArray)}return Er}function Yl(e){return kr||(kr=Gl("ImportCallOptions",0,e))||Ct}function Zl(e){return or||(or=Vl("Symbol",e))}function $l(){return cr||(cr=Gl("Symbol",0,!1))||Ct}function e_(e){return lr||(lr=Gl("Promise",1,e))||Pt}function t_(e){return _r||(_r=Gl("PromiseLike",1,e))||Pt}function r_(e){return dr||(dr=Vl("Promise",e))}function n_(e){return br||(br=Gl("AsyncIterable",1,e))||Pt}function i_(e){return fr||(fr=Gl("Iterable",1,e))||Pt}function a_(e,t){void 0===t&&(t=0);var r=Hl(e,788968,void 0);return r&&Kl(r,t)}function o_(e){return Fr||(Fr=Wl("Awaited",1,e)||(e?we:void 0)),Fr===we?void 0:Fr}function s_(e,t){return e!==Pt?xl(e,t):Ct}function c_(e){return s_(ur||(ur=Gl("TypedPropertyDescriptor",1,!0)||Pt),[e])}function u_(e,t){return s_(t?Xt:Qt,[e])}function l_(e){switch(e.kind){case 187:return 2;case 188:return __(e);case 199:return e.questionToken?2:e.dotDotDotToken?__(e):1;default:return 1}}function __(e){return np(e.type)?4:8}function d_(t){var r=function(t){return e.isTypeOperatorNode(t)&&146===t.operator}(t.parent);return np(t)?r?Xt:Qt:y_(e.map(t.elements,l_),r,e.some(t.elements,(function(e){return 199!==e.kind}))?void 0:t.elements)}function p_(t,r){return!!Bd(t)||f_(t)&&(185===t.kind?g_(t.elementType):186===t.kind?e.some(t.elements,g_):r||e.some(t.typeArguments,g_))}function f_(e){var t=e.parent;switch(t.kind){case 193:case 199:case 180:case 189:case 190:case 196:case 191:case 195:case 185:case 186:return f_(t);case 262:return!0}return!1}function g_(t){switch(t.kind){case 180:return Rl(t)||!!(524288&Pl(t,788968).flags);case 183:return!0;case 195:return 156!==t.operator&&g_(t.type);case 193:case 187:case 199:case 319:case 317:case 318:case 312:return g_(t.type);case 188:return 185!==t.type.kind||g_(t.type.elementType);case 189:case 190:return e.some(t.types,g_);case 196:return g_(t.objectType)||g_(t.indexType);case 191:return g_(t.checkType)||g_(t.extendsType)||g_(t.trueType)||g_(t.falseType)}return!1}function m_(t,r,n,i){void 0===n&&(n=!1);var a=y_(r||e.map(t,(function(e){return 1})),n,i);return a===Pt?Ct:t.length?v_(a,t):a}function y_(t,r,n){if(1===t.length&&4&t[0])return r?Xt:Qt;var i=e.map(t,(function(e){return 1&e?"#":2&e?"?":4&e?".":"*"})).join()+(r?"R":"")+(n&&n.length?","+e.map(n,F).join(","):""),a=me.get(i);return a||me.set(i,a=function(t,r,n){var i,a=t.length,o=e.countWhere(t,(function(e){return!!(9&e)})),s=[],c=0;if(a){i=new Array(a);for(var u=0;u<a;u++){var l=i[u]=La(),_=t[u];if(!(12&(c|=_))){var d=ri(4|(2&_?16777216:0),""+u,r?8:0);d.tupleLabelDeclaration=null==n?void 0:n[u],d.type=l,s.push(d)}}}var p=s.length,f=ri(4,"length",r?8:0);if(12&c)f.type=Ze;else{var g=[];for(u=o;u<=a;u++)g.push(Yd(u));f.type=P_(g)}s.push(f);var m=Ma(12);return m.typeParameters=i,m.outerTypeParameters=void 0,m.localTypeParameters=i,m.instantiations=new e.Map,m.instantiations.set(vl(m.typeParameters),m),m.target=m,m.resolvedTypeArguments=m.typeParameters,m.thisType=La(),m.thisType.isThisType=!0,m.thisType.constraint=m,m.declaredProperties=s,m.declaredCallSignatures=e.emptyArray,m.declaredConstructSignatures=e.emptyArray,m.declaredIndexInfos=e.emptyArray,m.elementFlags=t,m.minLength=o,m.fixedLength=p,m.hasRestElement=!!(12&c),m.combinedFlags=c,m.readonly=r,m.labeledElementDeclarations=n,m}(t,r,n)),a}function v_(e,t){return 8&e.objectFlags?h_(e,t):xl(e,t)}function h_(t,r){var n,i,a;if(!(14&t.combinedFlags))return xl(t,r);if(8&t.combinedFlags){var o=e.findIndex(r,(function(e,r){return!!(8&t.elementFlags[r]&&1179648&e.flags)}));if(o>=0)return z_(e.map(r,(function(e,r){return 8&t.elementFlags[r]?e:Ke})))?my(r[o],(function(n){return h_(t,e.replaceElement(r,o,n))})):je}for(var s=[],c=[],u=[],_=-1,d=-1,p=-1,f=function(o){var c=r[o],u=t.elementFlags[o];if(8&u)if(58982400&c.flags||Vc(c))v(c,8,null===(n=t.labeledElementDeclarations)||void 0===n?void 0:n[o]);else if(_g(c)){var _=Tl(c);if(_.length+s.length>=1e4)return Qn(l,e.isPartOfTypeNode(l)?e.Diagnostics.Type_produces_a_tuple_type_that_is_too_large_to_represent:e.Diagnostics.Expression_produces_a_tuple_type_that_is_too_large_to_represent),{value:je};e.forEach(_,(function(e,t){var r;return v(e,c.target.elementFlags[t],null===(r=c.target.labeledElementDeclarations)||void 0===r?void 0:r[t])}))}else v(Xf(c)&&Fu(c,Ze)||je,4,null===(i=t.labeledElementDeclarations)||void 0===i?void 0:i[o]);else v(c,u,null===(a=t.labeledElementDeclarations)||void 0===a?void 0:a[o])},g=0;g<r.length;g++){var m=f(g);if("object"==typeof m)return m.value}for(g=0;g<_;g++)2&c[g]&&(c[g]=1);d>=0&&d<p&&(s[d]=P_(e.sameMap(s.slice(d,p+1),(function(e,t){return 8&c[d+t]?bd(e,Ze):e}))),s.splice(d+1,p-d),c.splice(d+1,p-d),null==u||u.splice(d+1,p-d));var y=y_(c,t.readonly,u);return y===Pt?Ct:c.length?xl(y,s):y;function v(e,t,r){1&t&&(_=c.length),4&t&&d<0&&(d=c.length),6&t&&(p=c.length),s.push(2&t?jo(e,!0):e),c.push(t),u&&r?u.push(r):u=void 0}}function b_(t,r,n){void 0===n&&(n=0);var i=t.target,a=Cl(t)-n;return r>i.fixedLength?function(e){var t=fg(e);return t&&u_(t)}(t)||m_(e.emptyArray):m_(Tl(t).slice(r,a),i.elementFlags.slice(r,a),!1,i.labeledElementDeclarations&&i.labeledElementDeclarations.slice(r,a))}function x_(t){return P_(e.append(e.arrayOf(t.target.fixedLength,(function(e){return Xd(""+e)})),Z_(t.target.readonly?Xt:Qt)))}function D_(t,r){var n=e.findIndex(t.elementFlags,(function(e){return!(e&r)}));return n>=0?n:t.elementFlags.length}function S_(t,r){return t.elementFlags.length-e.findLastIndex(t.elementFlags,(function(e){return!(e&r)}))-1}function T_(e){return e.id}function C_(t,r){return e.binarySearch(t,r,T_,e.compareValues)>=0}function E_(t,r){var n=e.binarySearch(t,r,T_,e.compareValues);return n<0&&(t.splice(~n,0,r),!0)}function k_(t,r,n){var i=n.flags;if(1048576&i)return N_(t,r|(function(e){return!!(1048576&e.flags&&(e.aliasSymbol||e.origin))}(n)?1048576:0),n.types);if(!(131072&i))if(r|=205258751&i,465829888&i&&(r|=33554432),n===Be&&(r|=8388608),!G&&98304&i)65536&e.getObjectFlags(n)||(r|=4194304);else{var a=t.length,o=a&&n.id>t[a-1].id?~a:e.binarySearch(t,n,T_,e.compareValues);o<0&&t.splice(~o,0,n)}return r}function N_(e,t,r){for(var n=0,i=r;n<i.length;n++){t=k_(e,t,i[n])}return t}function A_(t,r){for(var n=0,i=r;n<i.length;n++){var a=i[n];if(1048576&a.flags){var o=a.origin;a.aliasSymbol||o&&!(1048576&o.flags)?e.pushIfUnique(t,a):o&&1048576&o.flags&&A_(t,o.types)}}}function F_(e,t){var r=Ia(e);return r.types=t,r}function P_(t,r,n,i,a){if(void 0===r&&(r=1),0===t.length)return ct;if(1===t.length)return t[0];var o=[],s=N_(o,0,t);if(0!==r){if(3&s)return 1&s?8388608&s?Be:Le:65536&s||C_(o,Ke)?Ke:Ve;if(ne&&32768&s){var c=e.binarySearch(o,Ge,T_,e.compareValues);c>=0&&C_(o,qe)&&e.orderedRemoveItemAt(o,c)}if((402664320&s||16384&s&&32768&s)&&function(t,r,n){for(var i=t.length;i>0;){var a=t[--i],o=a.flags;(402653312&o&&4&r||256&o&&8&r||2048&o&&64&r||8192&o&&4096&r||n&&32768&o&&16384&r||Qd(a)&&C_(t,a.regularType))&&e.orderedRemoveItemAt(t,i)}}(o,s,!!(2&r)),128&s&&134217728&s&&function(t){var r=e.filter(t,_d);if(r.length)for(var n=t.length,i=function(){n--;var i=t[n];128&i.flags&&e.some(r,(function(e){return dm(i,e)}))&&e.orderedRemoveItemAt(t,n)};n>0;)i()}(o),2===r&&(o=function(t,r){if(t.length<2)return t;var n=vl(t),i=ke.get(n);if(i)return i;for(var a=r&&e.some(t,(function(e){return!!(524288&e.flags)&&!Vc(e)&&cf(qc(e))})),o=t.length,s=o,c=0;s>0;){var u=t[--s];if(a||469499904&u.flags)for(var _=61603840&u.flags?e.find(Qc(u),(function(e){return ng(ys(e))})):void 0,d=_&&Gd(ys(_)),p=0,f=t;p<f.length;p++){var g=f[p];if(u!==g){if(1e5===c&&c/(o-s)*o>1e6)return null===e.tracing||void 0===e.tracing||e.tracing.instant("checkTypes","removeSubtypes_DepthLimit",{typeIds:t.map((function(e){return e.id}))}),void Qn(l,e.Diagnostics.Expression_produces_a_union_type_that_is_too_complex_to_represent);if(c++,_&&61603840&g.flags){var m=Co(g,_.escapedName);if(m&&ng(m)&&Gd(m)!==d)continue}if(gf(u,g,Mn)&&(!(1&e.getObjectFlags(bs(u)))||!(1&e.getObjectFlags(bs(g)))||qp(u,g))){e.orderedRemoveItemAt(t,s);break}}}}return ke.set(n,t),t}(o,!!(524288&s)),!o))return je;if(0===o.length)return 65536&s?4194304&s?Qe:Xe:32768&s?4194304&s?qe:We:ct}if(!a&&1048576&s){var u=[];A_(u,t);for(var _=[],d=function(t){e.some(u,(function(e){return C_(e.types,t)}))||_.push(t)},p=0,f=o;p<f.length;p++){d(f[p])}if(!n&&1===u.length&&0===_.length)return u[0];if(e.reduceLeft(u,(function(e,t){return e+t.types.length}),0)+_.length===o.length){for(var g=0,m=u;g<m.length;g++){E_(_,m[g])}a=F_(1048576,_)}}return I_(o,(36323363&s?0:32768)|(2097152&s?16777216:0),n,i,a)}function w_(e,t){return e.kind===t.kind&&e.parameterIndex===t.parameterIndex}function I_(e,t,r,n,i){if(0===e.length)return ct;if(1===e.length)return e[0];var a=(i?1048576&i.flags?"|".concat(vl(i.types)):2097152&i.flags?"&".concat(vl(i.types)):"#".concat(i.type.id,"|").concat(vl(e)):vl(e))+hl(r,n),o=ye.get(a);return o||((o=wa(1048576)).objectFlags=t|bl(e,98304),o.types=e,o.origin=i,o.aliasSymbol=r,o.aliasTypeArguments=n,2===e.length&&512&e[0].flags&&512&e[1].flags&&(o.flags|=16,o.intrinsicName="boolean"),ye.set(a,o)),o}function O_(e,t,r){var n=r.flags;return 2097152&n?M_(e,t,r.types):(lf(r)?16777216&t||(t|=16777216,e.set(r.id.toString(),r)):(3&n?r===Be&&(t|=8388608):!G&&98304&n||(ne&&r===Ge&&(t|=262144,r=qe),e.has(r.id.toString())||(109440&r.flags&&109440&t&&(t|=67108864),e.set(r.id.toString(),r))),t|=205258751&n),t)}function M_(e,t,r){for(var n=0,i=r;n<i.length;n++){t=O_(e,t,Gd(i[n]))}return t}function L_(e,t){for(var r=0,n=e;r<n.length;r++){var i=n[r];if(!C_(i.types,t)){var a=128&t.flags?Ye:256&t.flags?Ze:2048&t.flags?$e:8192&t.flags?ot:void 0;if(!a||!C_(i.types,a))return!1}}return!0}function R_(t,r){return e.every(t,(function(t){return!!(1048576&t.flags)&&e.some(t.types,(function(e){return!!(e.flags&r)}))}))}function B_(e,t){for(var r=0;r<e.length;r++)e[r]=py(e[r],(function(e){return!(e.flags&t)}))}function j_(t,r,n,i){var a=new e.Map,o=M_(a,0,t),s=e.arrayFrom(a.values());if(131072&o)return e.contains(s,ut)?ut:ct;if(G&&98304&o&&84410368&o||67108864&o&&402783228&o||402653316&o&&67238776&o||296&o&&469891796&o||2112&o&&469889980&o||12288&o&&469879804&o||49152&o&&469842940&o)return ct;if(134217728&o&&128&o&&function(t){for(var r=t.length,n=e.filter(t,(function(e){return!!(128&e.flags)}));r>0;){var i=t[--r];if(134217728&i.flags)for(var a=0,o=n;a<o.length;a++){if(Kp(o[a],i)){e.orderedRemoveItemAt(t,r);break}if(_d(i))return!0}}return!1}(s))return ct;if(1&o)return 8388608&o?Be:Le;if(!G&&98304&o)return 16777216&o?ct:32768&o?qe:Qe;if((4&o&&402653312&o||8&o&&256&o||64&o&&2048&o||4096&o&&8192&o||16384&o&&32768&o||16777216&o&&470302716&o)&&(i||function(t,r){for(var n=t.length;n>0;){var i=t[--n];(4&i.flags&&402653312&r||8&i.flags&&256&r||64&i.flags&&2048&r||4096&i.flags&&8192&r||16384&i.flags&&32768&r||lf(i)&&470302716&r)&&e.orderedRemoveItemAt(t,n)}}(s,o)),262144&o&&(s[s.indexOf(qe)]=Ge),0===s.length)return Ke;if(1===s.length)return s[0];var c=vl(s)+hl(r,n),u=ve.get(c);if(!u){if(1048576&o)if(function(t){var r,n=e.findIndex(t,(function(t){return!!(32768&e.getObjectFlags(t))}));if(n<0)return!1;for(var i=n+1;i<t.length;){var a=t[i];32768&e.getObjectFlags(a)?((r||(r=[t[n]])).push(a),e.orderedRemoveItemAt(t,i)):i++}if(!r)return!1;for(var o=[],s=[],c=0,u=r;c<u.length;c++)for(var l=0,_=u[c].types;l<_.length;l++)E_(o,a=_[l])&&L_(r,a)&&E_(s,a);return t[n]=I_(s,32768),!0}(s))u=j_(s,r,n);else if(R_(s,32768)){var l=ne&&e.some(s,(function(e){return C_(e.types,Ge)}))?Ge:qe;B_(s,32768),u=P_([j_(s),l],1,r,n)}else if(R_(s,65536))B_(s,65536),u=P_([j_(s),Qe],1,r,n);else{if(!z_(s))return je;var _=function(e){for(var t=J_(e),r=[],n=0;n<t;n++){for(var i=e.slice(),a=n,o=e.length-1;o>=0;o--)if(1048576&e[o].flags){var s=e[o].types,c=s.length;i[o]=s[a%c],a=Math.floor(a/c)}var u=j_(i);131072&u.flags||r.push(u)}return r}(s);u=P_(_,1,r,n,e.some(_,(function(e){return!!(2097152&e.flags)}))&&K_(_)>K_(s)?F_(2097152,s):void 0)}else u=function(e,t,r){var n=wa(2097152);return n.objectFlags=bl(e,98304),n.types=e,n.aliasSymbol=t,n.aliasTypeArguments=r,n}(s,r,n);ve.set(c,u)}return u}function J_(t){return e.reduceLeft(t,(function(e,t){return 1048576&t.flags?e*t.types.length:131072&t.flags?0:e}),1)}function z_(t){var r=J_(t);return!(r>=1e5)||(null===e.tracing||void 0===e.tracing||e.tracing.instant("checkTypes","checkCrossProductUnion_DepthLimit",{typeIds:t.map((function(e){return e.id})),size:r}),Qn(l,e.Diagnostics.Expression_produces_a_union_type_that_is_too_complex_to_represent),!1)}function U_(e){return 3145728&e.flags&&!e.aliasSymbol?1048576&e.flags&&e.origin?U_(e.origin):K_(e.types):1}function K_(t){return e.reduceLeft(t,(function(e,t){return e+U_(t)}),0)}function V_(e,t){var r=wa(4194304);return r.type=e,r.stringsOnly=t,r}function q_(e,t){return t?e.resolvedStringIndexType||(e.resolvedStringIndexType=V_(e,!0)):e.resolvedIndexType||(e.resolvedIndexType=V_(e,!1))}function W_(t){return e.isPrivateIdentifier(t)?ct:e.isIdentifier(t)?Xd(e.unescapeLeadingUnderscores(t.escapedText)):Gd(e.isComputedPropertyName(t)?Jv(t):wD(t))}function H_(t,r,n){if(n||!(24&e.getDeclarationModifierFlagsFromSymbol(t))){var i=_i(lc(t)).nameType;if(!i){var a=e.getNameOfDeclaration(t.valueDeclaration);i="default"===t.escapedName?Xd("default"):a&&W_(a)||(e.isKnownSymbol(t)?void 0:Xd(e.symbolName(t)))}if(i&&i.flags&r)return i}return ct}function G_(t,r){return!!(t.flags&r||2097152&t.flags&&e.some(t.types,(function(e){return G_(e,r)})))}function Q_(t,r,n){var i=n&&(7&e.getObjectFlags(t)||t.aliasSymbol)?function(e){var t=Ia(4194304);return t.type=e,t}(t):void 0,a=e.map(Qc(t),(function(e){return H_(e,r)})),o=e.map(Nu(t),(function(e){return e!==Vr&&G_(e.keyType,r)?e.keyType===Ye&&8&r?pt:e.keyType:ct}));return P_(e.concatenate(a,o),1,void 0,void 0,i)}function X_(e){var t=function(e){return 262143&e.flags?e:e.uniqueLiteralFilledInstantiation||(e.uniqueLiteralFilledInstantiation=Fp(e,Dt))}(e);return mu(t)!==t}function Y_(t){return!!(58982400&t.flags||dg(t)||Vc(t)&&(r=t,n=Oc(r),!function t(r){return!!(68157439&r.flags)||(16777216&r.flags?r.root.isDistributive&&r.checkType===n:137363456&r.flags?e.every(r.types,t):8388608&r.flags?t(r.objectType)&&t(r.indexType):33554432&r.flags?t(r.baseType)&&t(r.constraint):!!(268435456&r.flags)&&t(r.type))}(Lc(r)||n))||1048576&t.flags&&e.some(t.types,X_)||2097152&t.flags&&Yx(t,465829888)&&e.some(t.types,lf));var r,n}function Z_(t,r,n){return void 0===r&&(r=te),Y_(t=mu(t))?q_(t,r):1048576&t.flags?j_(e.map(t.types,(function(e){return Z_(e,r,n)}))):2097152&t.flags?P_(e.map(t.types,(function(e){return Z_(e,r,n)}))):32&e.getObjectFlags(t)?function(e,t,r){var n=Oc(e),i=Mc(e),a=Lc(e.target||e);if(!a&&!r)return i;var o=[];if(jc(e)){if(fd(i))return q_(e,t);wc(_u(Jc(e)),8576,t,c)}else ly(Fc(i),c);fd(i)&&ly(i,c);var s=r?py(P_(o),(function(e){return!(5&e.flags)})):P_(o);return 1048576&s.flags&&1048576&i.flags&&vl(s.types)===vl(i.types)?i:s;function c(t){var r=a?Fp(a,hp(e.mapper,n,t)):t;o.push(r===Ye?pt:r)}}(t,r,n):t===Be?Be:2&t.flags?ct:131073&t.flags?gt:Q_(t,(n?128:402653316)|(r?0:12584),r===te&&!n)}function $_(e){if(te)return e;var t=(Nr||(Nr=Wl("Extract",2,!0)||we),Nr===we?void 0:Nr);return t?kl(t,[e,Ye]):Ye}function ed(t,r){var n=e.findIndex(r,(function(e){return!!(1179648&e.flags)}));if(n>=0)return z_(r)?my(r[n],(function(i){return ed(t,e.replaceElement(r,n,i))})):je;if(e.contains(r,Be))return Be;var i=[],a=[],o=t[0];if(!function t(r,n){for(var s=e.isArray(r),c=0;c<n.length;c++){var u=n[c],l=s?r[c+1]:r;if(101248&u.flags){if(o+=td(u)||"",o+=l,!s)return!0}else if(134217728&u.flags){if(o+=u.texts[0],!t(u.texts,u.types))return!1;if(o+=l,!s)return!0}else if(fd(u)||ld(u))i.push(u),a.push(o),o=l;else if(2097152&u.flags){if(!t(r[c+1],u.types))return!1}else if(s)return!1}return!0}(t,r))return Ye;if(0===i.length)return Xd(o);if(a.push(o),e.every(a,(function(e){return""===e}))){if(e.every(i,(function(e){return!!(4&e.flags)})))return Ye;if(1===i.length&&_d(i[0]))return i[0]}var s="".concat(vl(i),"|").concat(e.map(a,(function(e){return e.length})).join(","),"|").concat(a.join("")),c=Te.get(s);return c||Te.set(s,c=function(e,t){var r=wa(134217728);return r.texts=e,r.types=t,r}(a,i)),c}function td(t){return 128&t.flags?t.value:256&t.flags?""+t.value:2048&t.flags?e.pseudoBigIntToString(t.value):98816&t.flags?t.intrinsicName:void 0}function rd(e,t){return 1179648&t.flags?my(t,(function(t){return rd(e,t)})):128&t.flags?Xd(nd(e,t.value)):134217728&t.flags?ed.apply(void 0,function(e,t,r){switch(k.get(e.escapedName)){case 0:return[t.map((function(e){return e.toUpperCase()})),r.map((function(t){return rd(e,t)}))];case 1:return[t.map((function(e){return e.toLowerCase()})),r.map((function(t){return rd(e,t)}))];case 2:return[""===t[0]?t:a([t[0].charAt(0).toUpperCase()+t[0].slice(1)],t.slice(1),!0),""===t[0]?a([rd(e,r[0])],r.slice(1),!0):r];case 3:return[""===t[0]?t:a([t[0].charAt(0).toLowerCase()+t[0].slice(1)],t.slice(1),!0),""===t[0]?a([rd(e,r[0])],r.slice(1),!0):r]}return[t,r]}(e,t.texts,t.types)):268435456&t.flags&&e===t.symbol?t:268435461&t.flags||fd(t)?id(e,t):ld(t)?id(e,ed(["",""],[t])):t}function nd(e,t){switch(k.get(e.escapedName)){case 0:return t.toUpperCase();case 1:return t.toLowerCase();case 2:return t.charAt(0).toUpperCase()+t.slice(1);case 3:return t.charAt(0).toLowerCase()+t.slice(1)}return t}function id(e,t){var r="".concat(P(e),",").concat(T_(t)),n=Ce.get(r);return n||Ce.set(r,n=function(e,t){var r=wa(268435456);return r.symbol=e,r.type=t,r}(e,t)),n}function ad(t){if(Z)return!1;if(4096&e.getObjectFlags(t))return!0;if(1048576&t.flags)return e.every(t.types,ad);if(2097152&t.flags)return e.some(t.types,ad);if(465829888&t.flags){var r=au(t);return r!==t&&ad(r)}return!1}function od(t,r){return tc(t)?oc(t):r&&e.isPropertyName(r)?e.getPropertyNameForPropertyNameNode(r):void 0}function sd(t,r){if(8208&r.flags){var n=e.findAncestor(t.parent,(function(t){return!e.isAccessExpression(t)}))||t.parent;return e.isCallLikeExpression(n)?e.isCallOrNewExpression(n)&&e.isIdentifier(t)&&Jm(n,t):e.every(r.declarations,(function(t){return!e.isFunctionLike(t)||!!(268435456&e.getCombinedNodeFlags(t))}))}return!0}function cd(t,r,n,i,a,o){var s,c=a&&209===a.kind?a:void 0,u=a&&e.isPrivateIdentifier(a)?void 0:od(n,a);if(void 0!==u){if(256&o)return yv(r,u)||Le;var l=xu(r,u);if(l){if(64&o&&a&&l.declarations&&ei(l)&&sd(a,l))ti(null!==(s=null==c?void 0:c.argumentExpression)&&void 0!==s?s:e.isIndexedAccessTypeNode(a)?a.indexType:a,l.declarations,u);if(c){if(Qh(l,c,Xh(c.expression,r.symbol)),qx(c,l,e.getAssignmentTargetKind(c)))return void Qn(c.argumentExpression,e.Diagnostics.Cannot_assign_to_0_because_it_is_a_read_only_property,no(l));if(8&o&&(di(a).resolvedSymbol=l),Oh(c,l))return Re}var _=ys(l);return c&&1!==e.getAssignmentTargetKind(c)?By(c,_):_}if(dy(r,_g)&&e.isNumericLiteralName(u)){var d=+u;if(a&&dy(r,(function(e){return!e.target.hasRestElement}))&&!(16&o)){var p=ud(a);if(_g(r)){if(d<0)return Qn(p,e.Diagnostics.A_tuple_type_cannot_be_indexed_with_a_negative_value),qe;Qn(p,e.Diagnostics.Tuple_type_0_of_length_1_has_no_element_at_index_2,ao(r),Cl(r),e.unescapeLeadingUnderscores(u))}else Qn(p,e.Diagnostics.Property_0_does_not_exist_on_type_1,e.unescapeLeadingUnderscores(u),ao(r))}if(d>=0)return x(Au(r,Ze)),my(r,(function(e){var t=fg(e)||qe;return 1&o?P_([t,qe]):t}))}}if(!(98304&n.flags)&&Zx(n,402665900)){if(131073&r.flags)return r;var f=wu(r,n)||Au(r,Ye);if(f)return 2&o&&f.keyType!==Ze?void(c&&Qn(c,e.Diagnostics.Type_0_cannot_be_used_to_index_type_1,ao(n),ao(t))):a&&f.keyType===Ye&&!Zx(n,12)?(Qn(p=ud(a),e.Diagnostics.Type_0_cannot_be_used_as_an_index_type,ao(n)),1&o?P_([f.type,qe]):f.type):(x(f),1&o&&!(r.symbol&&384&r.symbol.flags&&n.symbol&&1024&n.flags&&Ta(n.symbol)===r.symbol)?P_([f.type,qe]):f.type);if(131072&n.flags)return ct;if(ad(r))return Le;if(c&&!eD(r)){if(vm(r)){if(Z&&384&n.flags)return Pn.add(e.createDiagnosticForNode(c,e.Diagnostics.Property_0_does_not_exist_on_type_1,n.value,ao(r))),qe;if(12&n.flags){var g=e.map(r.properties,(function(e){return ys(e)}));return P_(e.append(g,qe))}}if(r.symbol===ue&&void 0!==u&&ue.exports.has(u)&&418&ue.exports.get(u).flags)Qn(c,e.Diagnostics.Property_0_does_not_exist_on_type_1,e.unescapeLeadingUnderscores(u),ao(r));else if(Z&&!K.suppressImplicitAnyIndexErrors&&!(128&o))if(void 0!==u&&zh(u,r)){var m=ao(r);Qn(c,e.Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead,u,m,m+"["+e.getTextOfNode(c.argumentExpression)+"]")}else if(Fu(r,Ze))Qn(c.argumentExpression,e.Diagnostics.Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number);else{var y=void 0;if(void 0!==u&&(y=qh(u,r)))void 0!==y&&Qn(c.argumentExpression,e.Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_2,u,ao(r),y);else{var v=function(t,r,n){function i(e){var r=Hc(t,e);if(r){var i=db(ys(r));return!!i&&Dx(i)>=1&&Vp(n,vx(i,0))}return!1}var a=e.isAssignmentTarget(r)?"set":"get";if(!i(a))return;var o=e.tryGetPropertyAccessOrIdentifierToString(r.expression);void 0===o?o=a:o+="."+a;return o}(r,c,n);if(void 0!==v)Qn(c,e.Diagnostics.Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1,ao(r),v);else{var h=void 0;if(1024&n.flags)h=e.chainDiagnosticMessages(void 0,e.Diagnostics.Property_0_does_not_exist_on_type_1,"["+ao(n)+"]",ao(r));else if(8192&n.flags){var b=ia(n.symbol,c);h=e.chainDiagnosticMessages(void 0,e.Diagnostics.Property_0_does_not_exist_on_type_1,"["+b+"]",ao(r))}else 128&n.flags||256&n.flags?h=e.chainDiagnosticMessages(void 0,e.Diagnostics.Property_0_does_not_exist_on_type_1,n.value,ao(r)):12&n.flags&&(h=e.chainDiagnosticMessages(void 0,e.Diagnostics.No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1,ao(n),ao(r)));h=e.chainDiagnosticMessages(h,e.Diagnostics.Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1,ao(i),ao(r)),Pn.add(e.createDiagnosticForNodeFromMessageChain(c,h))}}}return}}if(ad(r))return Le;if(a){p=ud(a);384&n.flags?Qn(p,e.Diagnostics.Property_0_does_not_exist_on_type_1,""+n.value,ao(r)):12&n.flags?Qn(p,e.Diagnostics.Type_0_has_no_matching_index_signature_for_type_1,ao(r),ao(n)):Qn(p,e.Diagnostics.Type_0_cannot_be_used_as_an_index_type,ao(n))}return Eo(n)?n:void 0;function x(t){t&&t.isReadonly&&c&&(e.isAssignmentTarget(c)||e.isDeleteTarget(c))&&Qn(c,e.Diagnostics.Index_signature_in_type_0_only_permits_reading,ao(r))}}function ud(e){return 209===e.kind?e.argumentExpression:196===e.kind?e.indexType:164===e.kind?e.expression:e}function ld(e){return!!(77&e.flags)||_d(e)}function _d(t){return!!(134217728&t.flags)&&e.every(t.types,ld)||!!(268435456&t.flags)&&ld(t.type)}function dd(e){return!!gd(e)}function pd(e){return!!(4194304&gd(e))}function fd(e){return!!(8388608&gd(e))}function gd(t){return 3145728&t.flags?(2097152&t.objectFlags||(t.objectFlags|=2097152|e.reduceLeft(t.types,(function(e,t){return e|gd(t)}),0)),12582912&t.objectFlags):33554432&t.flags?(2097152&t.objectFlags||(t.objectFlags|=2097152|gd(t.baseType)|gd(t.constraint)),12582912&t.objectFlags):(58982400&t.flags||Vc(t)||dg(t)?4194304:0)|(465829888&t.flags&&!_d(t)?8388608:0)}function md(t,r){return 8388608&t.flags?function(t,r){var n=r?"simplifiedForWriting":"simplifiedForReading";if(t[n])return t[n]===Ot?t:t[n];t[n]=Ot;var i=md(t.objectType,r),a=md(t.indexType,r),o=function(t,r,n){if(1048576&r.flags){var i=e.map(r.types,(function(e){return md(bd(t,e),n)}));return n?j_(i):P_(i)}}(i,a,r);if(o)return t[n]=o;if(!(465829888&a.flags)){var s=yd(i,a,r);if(s)return t[n]=s}if(dg(i)&&296&a.flags){var c=gg(i,8&a.flags?0:i.target.fixedLength,0,r);if(c)return t[n]=c}if(Vc(i)){var u=Lc(i);if(!u||Vp(u,Oc(i)))return t[n]=my(hd(i,t.indexType),(function(e){return md(e,r)}))}return t[n]=t}(t,r):16777216&t.flags?function(e,t){var r=e.checkType,n=e.extendsType,i=Pd(e),a=wd(e);if(131072&a.flags&&Cd(i)===Cd(r)){if(1&r.flags||Vp(Ip(r),Ip(n)))return md(i,t);if(vd(r,n))return ct}else if(131072&i.flags&&Cd(a)===Cd(r)){if(!(1&r.flags)&&Vp(Ip(r),Ip(n)))return ct;if(1&r.flags||vd(r,n))return md(a,t)}return e}(t,r):t}function yd(t,r,n){if(1048576&t.flags||2097152&t.flags&&!Y_(t)){var i=e.map(t.types,(function(e){return md(bd(e,r),n)}));return 2097152&t.flags||n?j_(i):P_(i)}}function vd(e,t){return!!(131072&P_([Sc(e,t),ct]).flags)}function hd(e,t){var r=lp([Oc(e)],[t]),n=yp(e.mapper,r);return Fp(Rc(e.target||e),n)}function bd(e,t,r,n,i,a){return void 0===r&&(r=0),Dd(e,t,r,n,i,a)||(n?je:Ke)}function xd(t,r){return dy(t,(function(t){if(384&t.flags){var n=oc(t);if(e.isNumericLiteralName(n)){var i=+n;return i>=0&&i<r}}return!1}))}function Dd(e,t,r,n,i,a){if(void 0===r&&(r=0),e===Be||t===Be)return Be;if(!df(e)||98304&t.flags||!Zx(t,12)||(t=Ye),K.noUncheckedIndexedAccess&&32&r&&(r|=1),fd(t)||(n&&196!==n.kind?dg(e)&&!xd(t,e.target.fixedLength):pd(e)&&(!_g(e)||!xd(t,e.target.fixedLength)))){if(3&e.flags)return e;var o=1&r,s=e.id+","+t.id+","+o+hl(i,a),c=Se.get(s);return c||Se.set(s,c=function(e,t,r,n,i){var a=wa(8388608);return a.objectType=e,a.indexType=t,a.accessFlags=r,a.aliasSymbol=n,a.aliasTypeArguments=i,a}(e,t,o,i,a)),c}var u=du(e);if(1048576&t.flags&&!(16&t.flags)){for(var l=[],_=!1,d=0,p=t.types;d<p.length;d++){var f=cd(e,u,p[d],t,n,r|(_?128:0));if(f)l.push(f);else{if(!n)return;_=!0}}if(_)return;return 4&r?j_(l,i,a):P_(l,1,i,a)}return cd(e,u,t,t,n,72|r)}function Sd(e){var t=di(e);if(!t.resolvedType){var r=ip(e.objectType),n=ip(e.indexType),i=Bd(e);t.resolvedType=bd(r,n,0,e,i,jd(i))}return t.resolvedType}function Td(e){var t=di(e);if(!t.resolvedType){var r=Ma(32,e.symbol);r.declaration=e,r.aliasSymbol=Bd(e),r.aliasTypeArguments=jd(r.aliasSymbol),t.resolvedType=r,Mc(r)}return t.resolvedType}function Cd(e){return 33554432&e.flags?e.baseType:8388608&e.flags&&(33554432&e.objectType.flags||33554432&e.indexType.flags)?bd(Cd(e.objectType),Cd(e.indexType)):e}function Ed(e){var t=Yc(e);return t&&(pd(t)||fd(t))?bp(e):e}function kd(e){return!e.isDistributive&&Nd(e.node.checkType)&&Nd(e.node.extendsType)}function Nd(t){return e.isTupleTypeNode(t)&&1===e.length(t.elements)&&!e.isOptionalTypeNode(t.elements[0])&&!e.isRestTypeNode(t.elements[0])&&!(e.isNamedTupleMember(t.elements[0])&&(t.elements[0].questionToken||t.elements[0].dotDotDotToken))}function Ad(e,t){return kd(e)&&_g(t)?Tl(t)[0]:t}function Fd(t,r,n,i){for(var a,o,s=0;;){if(1e3===s){Qn(l,e.Diagnostics.Type_instantiation_is_excessively_deep_and_possibly_infinite),a=je;break}var c=kd(t),u=Fp(Ad(t,Cd(t.checkType)),r),_=dd(u),d=Fp(Ad(t,t.extendsType),r);if(u===Be||d===Be)return Be;var p=void 0;if(t.inferTypeParameters){var f=e.sameMap(t.inferTypeParameters,Ed),g=f!==t.inferTypeParameters?lp(t.inferTypeParameters,f):void 0,m=Vg(f,void 0,0);if(g)for(var y=yp(r,g),v=0,h=f;v<h.length;v++){var b=h[v];-1===t.inferTypeParameters.indexOf(b)&&(b.mapper=y)}_||gm(m.inferences,u,Fp(d,g),1536);var x=yp(g,m.mapper);p=r?yp(x,r):x}var D=p?Fp(Ad(t,t.extendsType),p):d;if(!_&&!dd(D)){if(!(3&D.flags)&&(1&u.flags&&!c||!Vp(wp(u),wp(D)))){1&u.flags&&!c&&(o||(o=[])).push(Fp(ip(t.node.trueType),p||r));var S=ip(t.node.falseType);if(16777216&S.flags){var T=S.root;if(T.node.parent===t.node&&(!T.isDistributive||T.checkType===t.checkType)){t=T;continue}if(k(S,r))continue}a=Fp(S,r);break}if(3&D.flags||Vp(Ip(u),Ip(D))){var C=ip(t.node.trueType),E=p||r;if(k(C,E))continue;a=Fp(C,E);break}}(a=wa(16777216)).root=t,a.checkType=Fp(t.checkType,r),a.extendsType=Fp(t.extendsType,r),a.mapper=r,a.combinedMapper=p,a.aliasSymbol=n||t.aliasSymbol,a.aliasTypeArguments=n?i:sp(t.aliasTypeArguments,r);break}return o?P_(e.append(o,a)):a;function k(a,o){if(16777216&a.flags&&o){var c=a.root;if(c.outerTypeParameters){var u=yp(a.mapper,o),l=e.map(c.outerTypeParameters,(function(e){return _p(e,u)})),_=lp(c.outerTypeParameters,l),d=c.isDistributive?_p(c.checkType,_):void 0;if(!(d&&d!==c.checkType&&1179648&d.flags))return t=c,r=_,n=void 0,i=void 0,c.aliasSymbol&&s++,!0}}return!1}}function Pd(e){return e.resolvedTrueType||(e.resolvedTrueType=Fp(ip(e.root.node.trueType),e.mapper))}function wd(e){return e.resolvedFalseType||(e.resolvedFalseType=Fp(ip(e.root.node.falseType),e.mapper))}function Id(t){var r;return t.locals&&t.locals.forEach((function(t){262144&t.flags&&(r=e.append(r,qs(t)))})),r}function Od(t){return e.isIdentifier(t)?[t]:e.append(Od(t.left),t.right)}function Md(t){var r,n=di(t);if(!n.resolvedType){if(t.isTypeOf&&t.typeArguments)return Qn(t,e.Diagnostics.Type_arguments_cannot_be_used_here),n.resolvedSymbol=we,n.resolvedType=je;if(!e.isLiteralImportTypeNode(t))return Qn(t.argument,e.Diagnostics.String_literal_expected),n.resolvedSymbol=we,n.resolvedType=je;var i=t.isTypeOf?111551:8388608&t.flags?900095:788968,a=sa(t,t.argument.literal);if(!a)return n.resolvedSymbol=we,n.resolvedType=je;var o=!!(null===(r=a.exports)||void 0===r?void 0:r.get("export=")),s=_a(a,!1);if(e.nodeIsMissing(t.qualifier)){if(s.flags&i)n.resolvedType=Ld(t,n,s,i);else Qn(t,111551===i?e.Diagnostics.Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here:e.Diagnostics.Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0,t.argument.literal.text),n.resolvedSymbol=we,n.resolvedType=je}else{for(var c=Od(t.qualifier),u=s,l=void 0;l=c.shift();){var _=c.length?1920:i,d=Da(Qi(u)),p=t.isTypeOf||e.isInJSFile(t)&&o?xu(ys(d),l.escapedText,!1,!0):void 0,f=t.isTypeOf?void 0:fi(va(d),l.escapedText,_),g=null!=f?f:p;if(!g)return Qn(l,e.Diagnostics.Namespace_0_has_no_exported_member_1,ia(u),e.declarationNameToString(l)),n.resolvedType=je;di(l).resolvedSymbol=g,di(l.parent).resolvedSymbol=g,u=g}n.resolvedType=Ld(t,n,u,i)}}return n.resolvedType}function Ld(e,t,r,n){var i=Qi(r);return t.resolvedSymbol=i,111551===n?ys(r):wl(e,i)}function Rd(t){var r=di(t);if(!r.resolvedType){var n=Bd(t);if(0!==uc(t.symbol).size||n){var i=Ma(16,t.symbol);i.aliasSymbol=n,i.aliasTypeArguments=jd(n),e.isJSDocTypeLiteral(t)&&t.isArrayType&&(i=u_(i)),r.resolvedType=i}else r.resolvedType=Nt}return r.resolvedType}function Bd(t){for(var r=t.parent;e.isParenthesizedTypeNode(r)||e.isJSDocTypeExpression(r)||e.isTypeOperatorNode(r)&&146===r.operator;)r=r.parent;return e.isTypeAlias(r)?Sa(r):void 0}function jd(e){return e?Cs(e):void 0}function Jd(e){return!!(524288&e.flags)&&!Vc(e)}function zd(e){return uf(e)||!!(474058748&e.flags)}function Ud(t,r){if(!(1048576&t.flags))return t;if(e.every(t.types,zd))return e.find(t.types,uf)||Ct;var n=e.find(t.types,(function(e){return!zd(e)}));return n?e.find(t.types,(function(e){return e!==n&&!zd(e)}))?t:function(t){for(var n=e.createSymbolTable(),i=0,a=Qc(t);i<a.length;i++){var o=a[i];if(24&e.getDeclarationModifierFlagsFromSymbol(o));else if(Vd(o)){var s=65536&o.flags&&!(32768&o.flags),c=ri(16777220,o.escapedName,Pc(o)|(r?8:0));c.type=s?qe:jo(ys(o),!0),c.declarations=o.declarations,c.nameType=_i(o).nameType,c.syntheticOrigin=o,n.set(o.escapedName,c)}}var u=za(t.symbol,n,e.emptyArray,e.emptyArray,Nu(t));return u.objectFlags|=131200,u}(n):t}function Kd(t,r,n,i,a){if(1&t.flags||1&r.flags)return Le;if(2&t.flags||2&r.flags)return Ke;if(131072&t.flags)return r;if(131072&r.flags)return t;if(1048576&(t=Ud(t,a)).flags)return z_([t,r])?my(t,(function(e){return Kd(e,r,n,i,a)})):je;if(1048576&(r=Ud(r,a)).flags)return z_([t,r])?my(r,(function(e){return Kd(t,e,n,i,a)})):je;if(473960444&r.flags)return t;if(pd(t)||pd(r)){if(uf(t))return r;if(2097152&t.flags){var o=t.types,s=o[o.length-1];if(Jd(s)&&Jd(r))return j_(e.concatenate(o.slice(0,o.length-1),[Kd(s,r,n,i,a)]))}return j_([t,r])}for(var c=e.createSymbolTable(),u=new e.Set,l=t===Ct?Nu(r):Dc([t,r]),_=0,d=Qc(r);_<d.length;_++){var p=d[_];24&e.getDeclarationModifierFlagsFromSymbol(p)?u.add(p.escapedName):Vd(p)&&c.set(p.escapedName,qd(p,a))}for(var f=0,g=Qc(t);f<g.length;f++){var m=g[f];if(!u.has(m.escapedName)&&Vd(m))if(c.has(m.escapedName)){var y=ys(p=c.get(m.escapedName));if(16777216&p.flags){var v=e.concatenate(m.declarations,p.declarations),h=ri(4|16777216&m.flags,m.escapedName);h.type=P_([ys(m),Ng(y)],2),h.leftSpread=m,h.rightSpread=p,h.declarations=v,h.nameType=_i(m).nameType,c.set(m.escapedName,h)}}else c.set(m.escapedName,qd(m,a))}var b=za(n,c,e.emptyArray,e.emptyArray,e.sameMap(l,(function(e){return function(e,t){return e.isReadonly!==t?ll(e.keyType,e.type,t,e.declaration):e}(e,a)})));return b.objectFlags|=2228352|i,b}function Vd(t){var r;return!(e.some(t.declarations,e.isPrivateIdentifierClassElementDeclaration)||106496&t.flags&&(null===(r=t.declarations)||void 0===r?void 0:r.some((function(t){return e.isClassLike(t.parent)}))))}function qd(e,t){var r=65536&e.flags&&!(32768&e.flags);if(!r&&t===Vx(e))return e;var n=ri(4|16777216&e.flags,e.escapedName,Pc(e)|(t?8:0));return n.type=r?qe:ys(e),n.declarations=e.declarations,n.nameType=_i(e).nameType,n.syntheticOrigin=e,n}function Wd(e,t,r,n){var i=wa(e);return i.symbol=r,i.value=t,i.regularType=n||i,i}function Hd(e){if(2944&e.flags){if(!e.freshType){var t=Wd(e.flags,e.value,e.symbol,e);t.freshType=t,e.freshType=t}return e.freshType}return e}function Gd(e){return 2944&e.flags?e.regularType:1048576&e.flags?e.regularType||(e.regularType=my(e,Gd)):e}function Qd(e){return!!(2944&e.flags)&&e.freshType===e}function Xd(e){var t;return he.get(e)||(he.set(e,t=Wd(128,e)),t)}function Yd(e){var t;return be.get(e)||(be.set(e,t=Wd(256,e)),t)}function Zd(t){var r,n=e.pseudoBigIntToString(t);return xe.get(n)||(xe.set(n,r=Wd(2048,t)),r)}function $d(e,t,r){var n,i=t+("string"==typeof e?"@":"#")+e,a=1024|("string"==typeof e?128:256);return De.get(i)||(De.set(i,n=Wd(a,e,r)),n)}function ep(t){if(e.isValidESSymbolDeclaration(t)){var r=e.isCommonJsExportPropertyAssignment(t)?Sa(t.left):Sa(t);if(r){var n=_i(r);return n.uniqueESSymbolType||(n.uniqueESSymbolType=function(e){var t=wa(8192);return t.symbol=e,t.escapedName="__@".concat(t.symbol.escapedName,"@").concat(P(t.symbol)),t}(r))}}return ot}function tp(t){var r=di(t);return r.resolvedType||(r.resolvedType=function(t){var r=e.getThisContainer(t,!1),n=r&&r.parent;if(n&&(e.isClassLike(n)||261===n.kind)&&!e.isStatic(r)&&(!e.isConstructorDeclaration(r)||e.isNodeDescendantOf(t,r.body)))return Ls(Sa(n)).thisType;if(n&&e.isObjectLiteralExpression(n)&&e.isBinaryExpression(n.parent)&&6===e.getAssignmentDeclarationKind(n.parent))return Ls(Sa(n.parent.left).parent).thisType;var i=8388608&t.flags?e.getHostSignatureFromJSDoc(t):void 0;return i&&e.isFunctionExpression(i)&&e.isBinaryExpression(i.parent)&&3===e.getAssignmentDeclarationKind(i.parent)?Ls(Sa(i.parent.left).parent).thisType:Hb(r)&&e.isNodeDescendantOf(t,r.body)?Ls(Sa(r)).thisType:(Qn(t,e.Diagnostics.A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface),je)}(t)),r.resolvedType}function rp(e){return ip(np(e.type)||e.type)}function np(e){switch(e.kind){case 193:return np(e.type);case 186:if(1===e.elements.length&&(188===(e=e.elements[0]).kind||199===e.kind&&e.dotDotDotToken))return np(e.type);break;case 185:return e.elementType}}function ip(t){return function(t,r){for(var n,i=!0;r&&!e.isStatement(r)&&323!==r.kind;){var a=r.parent;if(166===a.kind&&(i=!i),(i||8650752&t.flags)&&191===a.kind&&r===a.trueType)(s=Ll(t,a.checkType,a.extendsType))&&(n=e.append(n,s));else if(262144&t.flags&&197===a.kind&&r===a.type){var o=ip(a);if(Oc(o)===Cd(t)){var s,c=Tp(o);c&&(s=Yc(c))&&dy(s,Hf)&&(n=e.append(n,P_([Ze,vt])))}}r=a}return n?Il(t,j_(n)):t}(ap(t),t)}function ap(t){switch(t.kind){case 131:case 315:case 316:return Le;case 157:return Ke;case 152:return Ye;case 148:return Ze;case 160:return $e;case 134:return at;case 153:return ot;case 114:return st;case 155:return qe;case 104:return Qe;case 144:return ct;case 149:return 262144&t.flags&&!Z?Le:dt;case 139:return Ue;case 194:case 108:return tp(t);case 198:return function(e){if(104===e.literal.kind)return Qe;var t=di(e);return t.resolvedType||(t.resolvedType=Gd(wD(e.literal))),t.resolvedType}(t);case 180:case 230:return Jl(t);case 179:return t.assertsModifier?st:at;case 183:return Ul(t);case 185:case 186:return function(t){var r=di(t);if(!r.resolvedType){var n=d_(t);if(n===Pt)r.resolvedType=Ct;else if(186===t.kind&&e.some(t.elements,(function(e){return!!(8&l_(e))}))||!p_(t)){var i=185===t.kind?[ip(t.elementType)]:e.map(t.elements,ip);r.resolvedType=v_(n,i)}else r.resolvedType=186===t.kind&&0===t.elements.length?n:Sl(n,t,void 0)}return r.resolvedType}(t);case 187:return function(e){return jo(ip(e.type),!0)}(t);case 189:return function(t){var r=di(t);if(!r.resolvedType){var n=Bd(t);r.resolvedType=P_(e.map(t.types,ip),1,n,jd(n))}return r.resolvedType}(t);case 190:return function(t){var r=di(t);if(!r.resolvedType){var n=Bd(t),i=e.map(t.types,ip),a=2===i.length&&!!(76&i[0].flags)&&i[1]===Nt;r.resolvedType=j_(i,n,jd(n),a)}return r.resolvedType}(t);case 317:return function(e){var t=ip(e.type);return G?hg(t,65536):t}(t);case 319:return jo(ip(t.type));case 199:return function(e){var t=di(e);return t.resolvedType||(t.resolvedType=e.dotDotDotToken?rp(e):jo(ip(e.type),!0,!!e.questionToken))}(t);case 193:case 318:case 312:return ip(t.type);case 188:return rp(t);case 321:return function(t){var r=ip(t.type),n=t.parent,i=t.parent.parent;if(e.isJSDocTypeExpression(t.parent)&&e.isJSDocParameterTag(i)){var a=e.getHostSignatureFromJSDoc(i),o=e.isJSDocCallbackTag(i.parent.parent);if(a||o){var s=o?e.lastOrUndefined(i.parent.parent.typeExpression.parameters):e.lastOrUndefined(a.parameters),c=e.getParameterSymbolFromJSDoc(i);if(!s||c&&s.symbol===c&&e.isRestParameter(s))return u_(r)}}if(e.isParameter(n)&&e.isJSDocFunctionType(n.parent))return u_(r);return jo(r)}(t);case 181:case 182:case 184:case 325:case 320:case 326:return Rd(t);case 195:return function(t){var r=di(t);if(!r.resolvedType)switch(t.operator){case 141:r.resolvedType=Z_(ip(t.type));break;case 156:r.resolvedType=153===t.type.kind?ep(e.walkUpParenthesizedTypes(t.parent)):je;break;case 146:r.resolvedType=ip(t.type);break;default:throw e.Debug.assertNever(t.operator)}return r.resolvedType}(t);case 196:return Sd(t);case 197:return Td(t);case 191:return function(t){var r=di(t);if(!r.resolvedType){var n=ip(t.checkType),i=Bd(t),a=jd(i),o=Ss(t,!0),s=a?o:e.filter(o,(function(e){return Sp(e,t)})),c={node:t,checkType:n,extendsType:ip(t.extendsType),isDistributive:!!(262144&n.flags),inferTypeParameters:Id(t),outerTypeParameters:s,instantiations:void 0,aliasSymbol:i,aliasTypeArguments:a};r.resolvedType=Fd(c,void 0),s&&(c.instantiations=new e.Map,c.instantiations.set(vl(s),r.resolvedType))}return r.resolvedType}(t);case 192:return function(e){var t=di(e);return t.resolvedType||(t.resolvedType=Vs(Sa(e.typeParameter))),t.resolvedType}(t);case 200:return function(t){var r=di(t);return r.resolvedType||(r.resolvedType=ed(a([t.head.text],e.map(t.templateSpans,(function(e){return e.literal.text})),!0),e.map(t.templateSpans,(function(e){return ip(e.type)})))),r.resolvedType}(t);case 202:return Md(t);case 79:case 163:case 208:var r=AC(t);return r?qs(r):je;default:return je}}function op(e,t,r){if(e&&e.length)for(var n=0;n<e.length;n++){var i=e[n],a=r(i,t);if(i!==a){var o=0===n?[]:e.slice(0,n);for(o.push(a),n++;n<e.length;n++)o.push(r(e[n],t));return o}}return e}function sp(e,t){return op(e,t,Fp)}function cp(e,t){return op(e,t,xp)}function up(e,t){return op(e,t,Op)}function lp(t,r){return 1===t.length?dp(t[0],r?r[0]:Le):function(t,r){return e.Debug.attachDebugPrototypeIfDebug({kind:1,sources:t,targets:r})}(t,r)}function _p(e,t){switch(t.kind){case 0:return e===t.source?t.target:e;case 1:for(var r=t.sources,n=t.targets,i=0;i<r.length;i++)if(e===r[i])return n?n[i]:Le;return e;case 2:for(r=t.sources,n=t.targets,i=0;i<r.length;i++)if(e===r[i])return n[i]();return e;case 3:return t.func(e);case 4:case 5:var a=_p(e,t.mapper1);return a!==e&&4===t.kind?Fp(a,t.mapper2):_p(a,t.mapper2)}}function dp(t,r){return e.Debug.attachDebugPrototypeIfDebug({kind:0,source:t,target:r})}function pp(t,r){return e.Debug.attachDebugPrototypeIfDebug({kind:3,func:t,debugInfo:e.Debug.isDebugging?r:void 0})}function fp(t,r){return e.Debug.attachDebugPrototypeIfDebug({kind:2,sources:t,targets:r})}function gp(t,r,n){return e.Debug.attachDebugPrototypeIfDebug({kind:t,mapper1:r,mapper2:n})}function mp(e){return lp(e,void 0)}function yp(e,t){return e?gp(4,e,t):t}function vp(e,t,r){return r?gp(5,dp(e,t),r):dp(e,t)}function hp(e,t,r){return e?gp(5,e,dp(t,r)):dp(t,r)}function bp(e){var t=La(e.symbol);return t.target=e,t}function xp(t,r,n){var i;if(t.typeParameters&&!n){i=e.map(t.typeParameters,bp),r=yp(lp(t.typeParameters,i),r);for(var a=0,o=i;a<o.length;a++){o[a].mapper=r}}var s=pc(t.declaration,i,t.thisParameter&&Dp(t.thisParameter,r),op(t.parameters,r,Dp),void 0,void 0,t.minArgumentCount,39&t.flags);return s.target=t,s.mapper=r,s}function Dp(t,r){var n=_i(t);if(n.type&&!Yg(n.type))return t;1&e.getCheckFlags(t)&&(t=n.target,r=yp(n.mapper,r));var i=ri(t.flags,t.escapedName,1|53256&e.getCheckFlags(t));return i.declarations=t.declarations,i.parent=t.parent,i.target=t,i.mapper=r,t.valueDeclaration&&(i.valueDeclaration=t.valueDeclaration),n.nameType&&(i.nameType=n.nameType),i}function Sp(t,r){if(t.symbol&&t.symbol.declarations&&1===t.symbol.declarations.length){for(var n=t.symbol.declarations[0].parent,i=r;i!==n;i=i.parent)if(!i||238===i.kind||191===i.kind&&e.forEachChild(i.extendsType,a))return!0;return a(r)}return!0;function a(r){switch(r.kind){case 194:return!!t.isThisType;case 79:return!t.isThisType&&e.isPartOfTypeNode(r)&&function(e){return!(180===e.parent.kind&&e.parent.typeArguments&&e===e.parent.typeName||202===e.parent.kind&&e.parent.typeArguments&&e===e.parent.qualifier)}(r)&&ap(r)===t;case 183:var n,i=r.exprName,o=Em(e.getFirstIdentifier(i)),s=t.symbol.declarations[0];if(165===s.kind)n=s.parent;else{if(!t.isThisType)return!0;n=s}return!o.declarations||(e.some(o.declarations,(function(t){return e.isNodeDescendantOf(t,n)}))||e.some(r.typeArguments,a));case 171:case 170:return!r.type&&!!r.body||e.some(r.typeParameters,a)||e.some(r.parameters,a)||!!r.type&&a(r.type)}return!!e.forEachChild(r,a)}}function Tp(e){var t=Mc(e);if(4194304&t.flags){var r=Cd(t.type);if(262144&r.flags)return r}}function Cp(t,r,n,i){var a=Tp(t);if(a){var o=Fp(a,r);if(a!==o)return yy(mu(o),(function(n){if(61603843&n.flags&&n!==Be&&!ko(n)){if(!t.declaration.nameType){var i=void 0;if(qf(n)||1&n.flags&&xo(a,4)<0&&(i=Yc(a))&&dy(i,Hf))return function(e,t,r){var n=kp(t,Ze,!0,r);return ko(n)?je:u_(n,Ep(Wf(e),zc(t)))}(n,t,vp(a,n,r));if(dg(n))return function(t,r,n,i){var a=t.target.elementFlags,o=e.map(Tl(t),(function(e,t){var o=8&a[t]?e:4&a[t]?u_(e):m_([e],[a[t]]);return Cp(r,vp(n,o,i))})),s=Ep(t.target.readonly,zc(r));return m_(o,e.map(o,(function(e){return 8})),s)}(n,t,a,r);if(_g(n))return function(t,r,n){var i=t.target.elementFlags,a=e.map(Tl(t),(function(e,t){return kp(r,Xd(""+t),!!(2&i[t]),n)})),o=zc(r),s=4&o?e.map(i,(function(e){return 1&e?2:e})):8&o?e.map(i,(function(e){return 2&e?1:e})):i,c=Ep(t.target.readonly,o);return e.contains(a,je)?je:m_(a,s,c,t.target.labeledElementDeclarations)}(n,t,vp(a,n,r))}return Np(t,vp(a,n,r))}return n}),n,i)}return Fp(Mc(t),r)===Be?Be:Np(t,r,n,i)}function Ep(e,t){return!!(1&t)||!(2&t)&&e}function kp(e,t,r,n){var i=hp(n,Oc(e),t),a=Fp(Rc(e.target||e),i),o=zc(e);return G&&4&o&&!Yx(a,49152)?bg(a,!0):G&&8&o&&r?qm(a,524288):a}function Np(e,t,r,n){var i=Ma(64|e.objectFlags,e.symbol);if(32&e.objectFlags){i.declaration=e.declaration;var a=Oc(e),o=bp(a);i.typeParameter=o,t=yp(dp(a,o),t),o.mapper=t}return 8388608&e.objectFlags&&(i.node=e.node),i.target=e,i.mapper=t,i.aliasSymbol=r||e.aliasSymbol,i.aliasTypeArguments=r?n:sp(e.aliasTypeArguments,t),i.objectFlags|=i.aliasTypeArguments?bl(i.aliasTypeArguments):0,i}function Ap(t,r,n,i){var a=t.root;if(a.outerTypeParameters){var o=e.map(a.outerTypeParameters,(function(e){return _p(e,r)})),s=vl(o)+hl(n,i),c=a.instantiations.get(s);if(!c){var u=lp(a.outerTypeParameters,o),l=a.checkType,_=a.isDistributive?_p(l,u):void 0;c=_&&l!==_&&1179648&_.flags?yy(mu(_),(function(e){return Fd(a,vp(l,e,u))}),n,i):Fd(a,u,n,i),a.instantiations.set(s,c)}return c}return t}function Fp(e,t){return e&&t?Pp(e,t,void 0,void 0):e}function Pp(t,r,n,i){if(!Yg(t))return t;if(100===j||B>=5e6)return null===e.tracing||void 0===e.tracing||e.tracing.instant("checkTypes","instantiateType_DepthLimit",{typeId:t.id,instantiationDepth:j,instantiationCount:B}),Qn(l,e.Diagnostics.Type_instantiation_is_excessively_deep_and_possibly_infinite),je;T++,B++,j++;var a=function(t,r,n,i){var a=t.flags;if(262144&a)return _p(t,r);if(524288&a){var o=t.objectFlags;if(52&o){if(4&o&&!t.node){var s=t.resolvedTypeArguments,c=sp(s,r);return c!==s?v_(t.target,c):t}return 1024&o?function(t,r){var n=Fp(t.mappedType,r);if(!(32&e.getObjectFlags(n)))return t;var i=Fp(t.constraintType,r);if(!(4194304&i.flags))return t;var a=em(Fp(t.source,r),n,i);if(a)return a;return t}(t,r):function(t,r,n,i){var a=4&t.objectFlags||8388608&t.objectFlags?t.node:t.symbol.declarations[0],o=di(a),s=4&t.objectFlags?o.resolvedType:64&t.objectFlags?t.target:t,c=o.outerTypeParameters;if(!c){var u=Ss(a,!0);if(Hb(a)){var l=Ou(a);u=e.addRange(u,l)}c=u||e.emptyArray;var _=8388612&t.objectFlags?[a]:t.symbol.declarations;c=(8388612&s.objectFlags||8192&s.symbol.flags||2048&s.symbol.flags)&&!s.aliasTypeArguments?e.filter(c,(function(t){return e.some(_,(function(e){return Sp(t,e)}))})):c,o.outerTypeParameters=c}if(c.length){var d=yp(t.mapper,r),p=e.map(c,(function(e){return _p(e,d)})),f=n||t.aliasSymbol,g=n?i:sp(t.aliasTypeArguments,r),m=vl(p)+hl(f,g);s.instantiations||(s.instantiations=new e.Map,s.instantiations.set(vl(c)+hl(s.aliasSymbol,s.aliasTypeArguments),s));var y=s.instantiations.get(m);if(!y){var v=lp(c,p);y=4&s.objectFlags?Sl(t.target,t.node,v,f,g):32&s.objectFlags?Cp(s,v,f,g):Np(s,v,f,g),s.instantiations.set(m,y)}return y}return t}(t,r,n,i)}return t}if(3145728&a){var u=1048576&t.flags?t.origin:void 0,l=u&&3145728&u.flags?u.types:t.types,_=sp(l,r);if(_===l&&n===t.aliasSymbol)return t;var d=n||t.aliasSymbol,p=n?i:sp(t.aliasTypeArguments,r);return 2097152&a||u&&2097152&u.flags?j_(_,d,p):P_(_,1,d,p)}if(4194304&a)return Z_(Fp(t.type,r));if(134217728&a)return ed(t.texts,sp(t.types,r));if(268435456&a)return rd(t.symbol,Fp(t.type,r));if(8388608&a){d=n||t.aliasSymbol,p=n?i:sp(t.aliasTypeArguments,r);return bd(Fp(t.objectType,r),Fp(t.indexType,r),t.accessFlags,void 0,d,p)}if(16777216&a)return Ap(t,yp(t.mapper,r),n,i);if(33554432&a){var f=Fp(t.baseType,r),g=Fp(t.constraint,r);return 8650752&f.flags&&dd(g)?Il(f,g):3&g.flags||Vp(Ip(f),Ip(g))?f:8650752&f.flags?Il(f,g):j_([g,f])}return t}(t,r,n,i);return j--,a}function wp(e){return 262143&e.flags?e:e.permissiveInstantiation||(e.permissiveInstantiation=Fp(e,bt))}function Ip(e){return 262143&e.flags?e:(e.restrictiveInstantiation||(e.restrictiveInstantiation=Fp(e,ht),e.restrictiveInstantiation.restrictiveInstantiation=e.restrictiveInstantiation),e.restrictiveInstantiation)}function Op(e,t){return ll(e.keyType,Fp(e.type,t),e.isReadonly,e.declaration)}function Mp(t){switch(e.Debug.assert(171!==t.kind||e.isObjectLiteralMethod(t)),t.kind){case 215:case 216:case 171:case 259:return Lp(t);case 207:return e.some(t.properties,Mp);case 206:return e.some(t.elements,Mp);case 224:return Mp(t.whenTrue)||Mp(t.whenFalse);case 223:return(56===t.operatorToken.kind||60===t.operatorToken.kind)&&(Mp(t.left)||Mp(t.right));case 299:return Mp(t.initializer);case 214:return Mp(t.expression);case 289:return e.some(t.properties,Mp)||e.isJsxOpeningElement(t.parent)&&e.some(t.parent.parent.children,Mp);case 288:var r=t.initializer;return!!r&&Mp(r);case 291:var n=t.expression;return!!n&&Mp(n)}return!1}function Lp(t){return e.hasContextSensitiveParameters(t)||function(t){return!t.typeParameters&&!e.getEffectiveReturnTypeNode(t)&&!!t.body&&238!==t.body.kind&&Mp(t.body)}(t)}function Rp(t){return(e.isFunctionExpressionOrArrowFunction(t)||e.isObjectLiteralMethod(t))&&Lp(t)}function Bp(t){if(524288&t.flags){var r=qc(t);if(r.constructSignatures.length||r.callSignatures.length){var n=Ma(16,t.symbol);return n.members=r.members,n.properties=r.properties,n.callSignatures=e.emptyArray,n.constructSignatures=e.emptyArray,n.indexInfos=e.emptyArray,n}}else if(2097152&t.flags)return j_(e.map(t.types,Bp));return t}function jp(e,t){return gf(e,t,Bn)}function Jp(e,t){return gf(e,t,Bn)?-1:0}function zp(e,t){return gf(e,t,Ln)?-1:0}function Up(e,t){return gf(e,t,On)?-1:0}function Kp(e,t){return gf(e,t,On)}function Vp(e,t){return gf(e,t,Ln)}function qp(t,r){return 1048576&t.flags?e.every(t.types,(function(e){return qp(e,r)})):1048576&r.flags?e.some(r.types,(function(e){return qp(t,e)})):58982400&t.flags?qp(ru(t)||Ke,r):r===qt?!!(67633152&t.flags):r===Wt?!!(524288&t.flags)&&Km(t):xs(t,bs(r))||qf(r)&&!Wf(r)&&qp(t,Xt)}function Wp(e,t){return gf(e,t,Rn)}function Hp(e,t){return Wp(e,t)||Wp(t,e)}function Gp(e,t,r,n,i,a){return hf(e,t,Ln,r,n,i,a)}function Qp(e,t,r,n,i,a){return Xp(e,t,Ln,r,n,i,a,void 0)}function Xp(e,t,r,n,i,a,o,s){return!!gf(e,t,r)||(!n||!Zp(i,e,t,r,a,o,s))&&hf(e,t,r,n,a,o,s)}function Yp(t){return!!(16777216&t.flags||2097152&t.flags&&e.some(t.types,Yp))}function Zp(t,r,n,i,a,s,u){if(!t||Yp(n))return!1;if(!hf(r,n,i,void 0)&&function(t,r,n,i,a,o,s){for(var c=Su(r,0),u=Su(r,1),l=0,_=[u,c];l<_.length;l++){var d=_[l];if(e.some(d,(function(e){var t=Yu(e);return!(131073&t.flags)&&hf(t,n,i,void 0)}))){var p=s||{};Gp(r,n,t,a,o,p);var f=p.errors[p.errors.length-1];return e.addRelatedInfo(f,e.createDiagnosticForNode(t,d===u?e.Diagnostics.Did_you_mean_to_use_new_with_this_expression:e.Diagnostics.Did_you_mean_to_call_this_expression)),!0}}return!1}(t,r,n,i,a,s,u))return!0;switch(t.kind){case 291:case 214:return Zp(t.expression,r,n,i,a,s,u);case 223:switch(t.operatorToken.kind){case 63:case 27:return Zp(t.right,r,n,i,a,s,u)}break;case 207:return function(t,r,n,i,a,o){return!(262140&n.flags)&&tf(function(t){var r,n,i,a;return c(this,(function(o){switch(o.label){case 0:if(!e.length(t.properties))return[2];r=0,n=t.properties,o.label=1;case 1:if(!(r<n.length))return[3,8];if(i=n[r],e.isSpreadAssignment(i))return[3,7];if(!(a=H_(Sa(i),8576))||131072&a.flags)return[3,7];switch(i.kind){case 175:case 174:case 171:case 300:return[3,2];case 299:return[3,4]}return[3,6];case 2:return[4,{errorNode:i.name,innerExpression:void 0,nameType:a}];case 3:return o.sent(),[3,7];case 4:return[4,{errorNode:i.name,innerExpression:i.initializer,nameType:a,errorMessage:e.isComputedNonLiteralName(i.name)?e.Diagnostics.Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1:void 0}];case 5:return o.sent(),[3,7];case 6:e.Debug.assertNever(i),o.label=7;case 7:return r++,[3,1];case 8:return[2]}}))}(t),r,n,i,a,o)}(t,r,n,i,s,u);case 206:return function(e,t,r,n,i,a){if(262140&r.flags)return!1;if(eg(t))return tf(nf(e,r),t,r,n,i,a);var o=e.contextualType;e.contextualType=r;try{var s=Rv(e,1,!0);return e.contextualType=o,!!eg(s)&&tf(nf(e,r),s,r,n,i,a)}finally{e.contextualType=o}}(t,r,n,i,s,u);case 289:return function(t,r,n,i,a,s){var u,l=tf(function(t){var r,n,i;return c(this,(function(a){switch(a.label){case 0:if(!e.length(t.properties))return[2];r=0,n=t.properties,a.label=1;case 1:return r<n.length?(i=n[r],e.isJsxSpreadAttribute(i)||Wv(e.idText(i.name))?[3,3]:[4,{errorNode:i.name,innerExpression:i.initializer,nameType:Xd(e.idText(i.name))}]):[3,4];case 2:a.sent(),a.label=3;case 3:return r++,[3,1];case 4:return[2]}}))}(t),r,n,i,a,s);if(e.isJsxOpeningElement(t.parent)&&e.isJsxElement(t.parent.parent)){var _=t.parent.parent,d=nh(th(t)),p=void 0===d?"children":e.unescapeLeadingUnderscores(d),f=Xd(p),g=bd(n,f),m=e.getSemanticJsxChildren(_.children);if(!e.length(m))return l;var y=e.length(m)>1,v=py(g,tg),h=py(g,(function(e){return!tg(e)}));if(y){if(v!==ct){var b=m_(Qv(_,0)),x=function(t,r){var n,i,a,o,s;return c(this,(function(c){switch(c.label){case 0:if(!e.length(t.children))return[2];n=0,i=0,c.label=1;case 1:return i<t.children.length?(a=t.children[i],o=Yd(i-n),(s=rf(a,o,r))?[4,s]:[3,3]):[3,5];case 2:return c.sent(),[3,4];case 3:n++,c.label=4;case 4:return i++,[3,1];case 5:return[2]}}))}(_,T);l=tf(x,b,v,i,a,s)||l}else if(!gf(bd(r,f),g,i)){l=!0;var D=Qn(_.openingElement.tagName,e.Diagnostics.This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided,p,ao(g));s&&s.skipLogging&&(s.errors||(s.errors=[])).push(D)}}else if(h!==ct){var S=rf(m[0],f,T);S&&(l=tf(function(){return c(this,(function(e){switch(e.label){case 0:return[4,S];case 1:return e.sent(),[2]}}))}(),r,n,i,a,s)||l)}else if(!gf(bd(r,f),g,i)){l=!0;D=Qn(_.openingElement.tagName,e.Diagnostics.This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_provided,p,ao(g));s&&s.skipLogging&&(s.errors||(s.errors=[])).push(D)}}return l;function T(){if(!u){var r=e.getTextOfNode(t.parent.tagName),i=nh(th(t)),a=void 0===i?"children":e.unescapeLeadingUnderscores(i),s=bd(n,Xd(a)),c=e.Diagnostics._0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_type_of_1_is_2;u=o(o({},c),{key:"!!ALREADY FORMATTED!!",message:e.formatMessage(void 0,c,r,a,ao(s))})}return u}}(t,r,n,i,s,u);case 216:return function(t,r,n,i,a,o){if(e.isBlock(t.body))return!1;if(e.some(t.parameters,e.hasType))return!1;var s=db(r);if(!s)return!1;var c=Su(n,0);if(!e.length(c))return!1;var u=t.body,l=Yu(s),_=P_(e.map(c,Yu));if(!hf(l,_,i,void 0)){var d=u&&Zp(u,l,_,i,void 0,a,o);if(d)return d;var p=o||{};if(hf(l,_,i,u,void 0,a,p),p.errors)return n.symbol&&e.length(n.symbol.declarations)&&e.addRelatedInfo(p.errors[p.errors.length-1],e.createDiagnosticForNode(n.symbol.declarations[0],e.Diagnostics.The_expected_type_comes_from_the_return_type_of_this_signature)),0==(2&e.getFunctionFlags(t))&&!Co(l,"then")&&hf(Fx(l),_,i,void 0)&&e.addRelatedInfo(p.errors[p.errors.length-1],e.createDiagnosticForNode(t,e.Diagnostics.Did_you_mean_to_mark_this_function_as_async)),!0}return!1}(t,r,n,i,s,u)}return!1}function $p(e,t,r){var n=Dd(t,r);if(n)return n;if(1048576&t.flags){var i=Sf(e,t);if(i)return Dd(i,r)}}function ef(e,t){e.contextualType=t;try{return hD(e,1,t)}finally{e.contextualType=void 0}}function tf(t,r,n,i,a,o){for(var s=!1,c=t.next();!c.done;c=t.next()){var u=c.value,l=u.errorNode,_=u.innerExpression,d=u.nameType,p=u.errorMessage,f=$p(r,n,d);if(f&&!(8388608&f.flags)){var g=Dd(r,d);if(g){var m=od(d,void 0);if(!hf(g,f,i,void 0))if(s=!0,!(_&&Zp(_,g,f,i,void 0,a,o))){var y=o||{},v=_?ef(_,g):g;if(ne&&Df(v,f)){var h=e.createDiagnosticForNode(l,e.Diagnostics.Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_type_of_the_target,ao(v),ao(f));Pn.add(h),y.errors=[h]}else{var b=!!(m&&16777216&(xu(n,m)||we).flags),x=!!(m&&16777216&(xu(r,m)||we).flags);f=Eg(f,b),g=Eg(g,b&&x),hf(v,f,i,l,p,a,y)&&v!==g&&hf(g,f,i,l,p,a,y)}if(y.errors){var D=y.errors[y.errors.length-1],S=tc(d)?oc(d):void 0,T=void 0!==S?xu(n,S):void 0,C=!1;if(!T){var E=wu(n,d);E&&E.declaration&&!e.getSourceFileOfNode(E.declaration).hasNoDefaultLib&&(C=!0,e.addRelatedInfo(D,e.createDiagnosticForNode(E.declaration,e.Diagnostics.The_expected_type_comes_from_this_index_signature)))}if(!C&&(T&&e.length(T.declarations)||n.symbol&&e.length(n.symbol.declarations))){var k=T&&e.length(T.declarations)?T.declarations[0]:n.symbol.declarations[0];e.getSourceFileOfNode(k).hasNoDefaultLib||e.addRelatedInfo(D,e.createDiagnosticForNode(k,e.Diagnostics.The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1,!S||8192&d.flags?ao(d):e.unescapeLeadingUnderscores(S),ao(n)))}}}}}}return s}function rf(t,r,n){switch(t.kind){case 291:return{errorNode:t,innerExpression:t.expression,nameType:r};case 11:if(t.containsOnlyTriviaWhiteSpaces)break;return{errorNode:t,innerExpression:void 0,nameType:r,errorMessage:n()};case 281:case 282:case 285:return{errorNode:t,innerExpression:t,nameType:r};default:return e.Debug.assertNever(t,"Found invalid jsx child")}}function nf(t,r){var n,i,a,o;return c(this,(function(s){switch(s.label){case 0:if(!(n=e.length(t.elements)))return[2];i=0,s.label=1;case 1:return i<n?eg(r)&&!xu(r,""+i)?[3,3]:(a=t.elements[i],e.isOmittedExpression(a)?[3,3]:(o=Yd(i),[4,{errorNode:a,innerExpression:a,nameType:o}])):[3,4];case 2:s.sent(),s.label=3;case 3:return i++,[3,1];case 4:return[2]}}))}function af(e,t,r,n,i){return hf(e,t,Rn,r,n,i)}function of(t,r,n,i,a,o,s,c){if(t===r)return-1;if(!(u=r).typeParameters&&(!u.thisParameter||Eo(dx(u.thisParameter)))&&1===u.parameters.length&&L(u)&&(dx(u.parameters[0])===rr||Eo(dx(u.parameters[0])))&&Eo(Yu(u)))return-1;var u,l=xx(r);if(!Sx(r)&&(8&n?Sx(t)||xx(t)>l:Dx(t)>l))return 0;t.typeParameters&&t.typeParameters!==r.typeParameters&&(t=gb(t,r=al(r),void 0,s));var _=xx(t),d=Cx(t),p=Cx(r);(d||p)&&Fp(d||p,c);var f=r.declaration?r.declaration.kind:0,g=!(3&n)&&Q&&171!==f&&170!==f&&173!==f,m=-1,y=Gu(t);if(y&&y!==st){var v=Gu(r);if(v){if(!(T=!g&&s(y,v,!1)||s(v,y,i)))return i&&a(e.Diagnostics.The_this_types_of_each_signature_are_incompatible),0;m&=T}}for(var h=d||p?Math.min(_,l):Math.max(_,l),b=d||p?h-1:-1,x=0;x<h;x++){var D=x===b?bx(t,x):hx(t,x),S=x===b?bx(r,x):hx(r,x);if(D&&S){var T,C=3&n?void 0:db(xg(D)),E=3&n?void 0:db(xg(S));if((T=C&&E&&!Qu(C)&&!Qu(E)&&(50331648&Vm(D))==(50331648&Vm(S))?of(E,C,8&n|(g?2:1),i,a,o,s,c):!(3&n)&&!g&&s(D,S,!1)||s(S,D,i))&&8&n&&x>=Dx(t)&&x<Dx(r)&&s(D,S,!1)&&(T=0),!T)return i&&a(e.Diagnostics.Types_of_parameters_0_and_1_are_incompatible,e.unescapeLeadingUnderscores(fx(t,x)),e.unescapeLeadingUnderscores(fx(r,x))),0;m&=T}}if(!(4&n)){var k=$u(r)?Le:r.declaration&&Hb(r.declaration)?Ls(Da(r.declaration.symbol)):Yu(r);if(k===st||k===Le)return m;var N=$u(t)?Le:t.declaration&&Hb(t.declaration)?Ls(Da(t.declaration.symbol)):Yu(t),A=Qu(r);if(A){var F=Qu(t);if(F)m&=function(t,r,n,i,a){if(t.kind!==r.kind)return n&&(i(e.Diagnostics.A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard),i(e.Diagnostics.Type_predicate_0_is_not_assignable_to_1,_o(t),_o(r))),0;if((1===t.kind||3===t.kind)&&t.parameterIndex!==r.parameterIndex)return n&&(i(e.Diagnostics.Parameter_0_is_not_in_the_same_position_as_parameter_1,t.parameterName,r.parameterName),i(e.Diagnostics.Type_predicate_0_is_not_assignable_to_1,_o(t),_o(r))),0;var o=t.type===r.type?-1:t.type&&r.type?a(t.type,r.type,n):0;0===o&&n&&i(e.Diagnostics.Type_predicate_0_is_not_assignable_to_1,_o(t),_o(r));return o}(F,A,i,a,s);else if(e.isIdentifierTypePredicate(A))return i&&a(e.Diagnostics.Signature_0_must_be_a_type_predicate,io(t)),0}else!(m&=1&n&&s(k,N,!1)||s(N,k,i))&&i&&o&&o(N,k)}return m}function sf(e,t){var r=il(e),n=il(t),i=Yu(r),a=Yu(n);return!(a!==st&&!gf(a,i,Ln)&&!gf(i,a,Ln))&&0!==of(r,n,!0?4:0,!1,void 0,void 0,zp,void 0)}function cf(e){return e!==wt&&0===e.properties.length&&0===e.callSignatures.length&&0===e.constructSignatures.length&&0===e.indexInfos.length}function uf(t){return 524288&t.flags?!Vc(t)&&cf(qc(t)):!!(67108864&t.flags)||(1048576&t.flags?e.some(t.types,uf):!!(2097152&t.flags)&&e.every(t.types,uf))}function lf(t){return!!(16&e.getObjectFlags(t)&&(t.members&&cf(t)||t.symbol&&2048&t.symbol.flags&&0===uc(t.symbol).size))}function _f(e){return!!(32768&(1048576&e.flags?e.types[0]:e).flags)}function df(t){return 524288&t.flags&&!Vc(t)&&0===Qc(t).length&&1===Nu(t).length&&!!Au(t,Ye)||3145728&t.flags&&e.every(t.types,df)||!1}function pf(t,r,n){if(t===r)return!0;var i=P(t)+","+P(r),a=jn.get(i);if(void 0!==a&&(4&a||!(2&a)||!n))return!!(1&a);if(!(t.escapedName===r.escapedName&&256&t.flags&&256&r.flags))return jn.set(i,6),!1;for(var o=ys(r),s=0,c=Qc(ys(t));s<c.length;s++){var u=c[s];if(8&u.flags){var l=xu(o,u.escapedName);if(!(l&&8&l.flags))return n?(n(e.Diagnostics.Property_0_is_missing_in_type_1,e.symbolName(u),ao(qs(r),void 0,64)),jn.set(i,6)):jn.set(i,2),!1}}return jn.set(i,1),!0}function ff(t,r,n,i){var a=t.flags,o=r.flags;if(3&o||131072&a||t===Be)return!0;if(131072&o)return!1;if(402653316&a&&4&o)return!0;if(128&a&&1024&a&&128&o&&!(1024&o)&&t.value===r.value)return!0;if(296&a&&8&o)return!0;if(256&a&&1024&a&&256&o&&!(1024&o)&&t.value===r.value)return!0;if(2112&a&&64&o)return!0;if(528&a&&16&o)return!0;if(12288&a&&4096&o)return!0;if(32&a&&32&o&&pf(t.symbol,r.symbol,i))return!0;if(1024&a&&1024&o){if(1048576&a&&1048576&o&&pf(t.symbol,r.symbol,i))return!0;if(2944&a&&2944&o&&t.value===r.value&&pf(Ta(t.symbol),Ta(r.symbol),i))return!0}if(32768&a&&(!G&&!(3145728&o)||49152&o))return!0;if(65536&a&&(!G&&!(3145728&o)||65536&o))return!0;if(524288&a&&67108864&o&&(n!==Mn||!lf(t)||8192&e.getObjectFlags(t)))return!0;if(n===Ln||n===Rn){if(1&a)return!0;if(264&a&&!(1024&a)&&(32&o||n===Ln&&256&o&&1024&o))return!0;if(function(t){if(G&&1048576&t.flags){if(!(33554432&t.objectFlags)){var r=t.types;t.objectFlags|=33554432|(r.length>=3&&32768&r[0].flags&&65536&r[1].flags&&e.some(r,lf)?67108864:0)}return!!(67108864&t.objectFlags)}return!1}(r))return!0}return!1}function gf(e,t,r){if(Qd(e)&&(e=e.regularType),Qd(t)&&(t=t.regularType),e===t)return!0;if(r!==Bn){if(r===Rn&&!(131072&t.flags)&&ff(t,e,r)||ff(e,t,r))return!0}else if(!(61865984&(e.flags|t.flags))){if(e.flags!==t.flags)return!1;if(67358815&e.flags)return!0}if(524288&e.flags&&524288&t.flags){var n=r.get(Of(e,t,0,r,!1));if(void 0!==n)return!!(1&n)}return!!(469499904&e.flags||469499904&t.flags)&&hf(e,t,r,void 0)}function mf(t,r){return 2048&e.getObjectFlags(t)&&Wv(r.escapedName)}function yf(t,r){for(;;){var n=Qd(t)?t.regularType:4&e.getObjectFlags(t)?t.node?xl(t.target,Tl(t)):Yf(t)||t:3145728&t.flags?vf(t,r):33554432&t.flags?r?t.baseType:Ol(t):25165824&t.flags?md(t,r):t;if(n===t)return n;t=n}}function vf(t,r){var n=mu(t);if(n!==t)return n;if(2097152&t.flags&&e.some(t.types,lf)){var i=e.sameMap(t.types,(function(e){return yf(e,r)}));if(i!==t.types)return j_(i)}return t}function hf(t,r,n,i,o,c,u){var _,d,p,f,g,m,y,v=0,h=0,b=0,x=0,D=!1,S=0,T=!1;e.Debug.assert(n!==Bn||!i,"no error reporting in identity checking");var C=z(t,r,3,!!i,o);if(y&&M(),D){null===e.tracing||void 0===e.tracing||e.tracing.instant("checkTypes","checkTypeRelatedTo_DepthLimit",{sourceId:t.id,targetId:r.id,depth:h,targetDepth:b});var k=Qn(i||l,e.Diagnostics.Excessive_stack_depth_comparing_types_0_and_1,ao(t),ao(r));u&&(u.errors||(u.errors=[])).push(k)}else if(_){if(c){var N=c();N&&(e.concatenateDiagnosticMessageChains(N,_),_=N)}var A=void 0;if(o&&i&&!C&&t.symbol){var F=_i(t.symbol);if(F.originatingImport&&!e.isImportCall(F.originatingImport))if(hf(ys(F.target),r,n,void 0)){var P=e.createDiagnosticForNode(F.originatingImport,e.Diagnostics.Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cause_a_failure_at_runtime_Consider_using_a_default_import_or_import_require_here_instead);A=e.append(A,P)}}k=e.createDiagnosticForNodeFromMessageChain(i,_,A);d&&e.addRelatedInfo.apply(void 0,a([k],d,!1)),u&&(u.errors||(u.errors=[])).push(k),u&&u.skipLogging||Pn.add(k)}return i&&u&&u.skipLogging&&0===C&&e.Debug.assert(!!u.errors,"missed opportunity to interact with error."),0!==C;function w(e){_=e.errorInfo,m=e.lastSkippedInfo,y=e.incompatibleStack,S=e.overrideNextErrorInfo,d=e.relatedInfo}function I(){return{errorInfo:_,lastSkippedInfo:m,incompatibleStack:null==y?void 0:y.slice(),overrideNextErrorInfo:S,relatedInfo:null==d?void 0:d.slice()}}function O(e,t,r,n,i){S++,m=void 0,(y||(y=[])).push([e,t,r,n,i])}function M(){var t=y||[];y=void 0;var r=m;if(m=void 0,1===t.length)return L.apply(void 0,t[0]),void(r&&B.apply(void 0,a([void 0],r,!1)));for(var n="",i=[];t.length;){var o=t.pop(),s=o[0],c=o.slice(1);switch(s.code){case e.Diagnostics.Types_of_property_0_are_incompatible.code:0===n.indexOf("new ")&&(n="(".concat(n,")"));var u=""+c[0];n=0===n.length?"".concat(u):e.isIdentifierText(u,e.getEmitScriptTarget(K))?"".concat(n,".").concat(u):"["===u[0]&&"]"===u[u.length-1]?"".concat(n).concat(u):"".concat(n,"[").concat(u,"]");break;case e.Diagnostics.Call_signature_return_types_0_and_1_are_incompatible.code:case e.Diagnostics.Construct_signature_return_types_0_and_1_are_incompatible.code:case e.Diagnostics.Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1.code:case e.Diagnostics.Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1.code:if(0===n.length){var l=s;s.code===e.Diagnostics.Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1.code?l=e.Diagnostics.Call_signature_return_types_0_and_1_are_incompatible:s.code===e.Diagnostics.Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1.code&&(l=e.Diagnostics.Construct_signature_return_types_0_and_1_are_incompatible),i.unshift([l,c[0],c[1]])}else{var _=s.code===e.Diagnostics.Construct_signature_return_types_0_and_1_are_incompatible.code||s.code===e.Diagnostics.Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1.code?"new ":"",d=s.code===e.Diagnostics.Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1.code||s.code===e.Diagnostics.Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1.code?"":"...";n="".concat(_).concat(n,"(").concat(d,")")}break;case e.Diagnostics.Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target.code:i.unshift([e.Diagnostics.Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target,c[0],c[1]]);break;case e.Diagnostics.Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target.code:i.unshift([e.Diagnostics.Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target,c[0],c[1],c[2]]);break;default:return e.Debug.fail("Unhandled Diagnostic: ".concat(s.code))}}n?L(")"===n[n.length-1]?e.Diagnostics.The_types_returned_by_0_are_incompatible_between_these_types:e.Diagnostics.The_types_of_0_are_incompatible_between_these_types,n):i.shift();for(var p=0,f=i;p<f.length;p++){var g=f[p],v=(s=g[0],c=g.slice(1),s.elidedInCompatabilityPyramid);s.elidedInCompatabilityPyramid=!1,L.apply(void 0,a([s],c,!1)),s.elidedInCompatabilityPyramid=v}r&&B.apply(void 0,a([void 0],r,!1))}function L(t,r,n,a,o){e.Debug.assert(!!i),y&&M(),t.elidedInCompatabilityPyramid||(_=e.chainDiagnosticMessages(_,t,r,n,a,o))}function R(t){e.Debug.assert(!!_),d?d.push(t):d=[t]}function B(t,r,i){y&&M();var a=oo(r,i),o=a[0],s=a[1],c=r,u=o;if(ag(r)&&!bf(i)&&(c=og(r),e.Debug.assert(!Vp(c,i),"generalized source shouldn't be assignable"),u=so(c)),262144&i.flags&&i!==jt&&i!==Jt){var l=ru(i),d=void 0;l&&(Vp(c,l)||(d=Vp(r,l)))?L(e.Diagnostics._0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_constraint_2,d?o:u,s,ao(l)):(_=void 0,L(e.Diagnostics._0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1,s,u))}if(t)t===e.Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1&&ne&&xf(r,i).length&&(t=e.Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_types_of_the_target_s_properties);else if(n===Rn)t=e.Diagnostics.Type_0_is_not_comparable_to_type_1;else if(o===s)t=e.Diagnostics.Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated;else if(ne&&xf(r,i).length)t=e.Diagnostics.Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_types_of_the_target_s_properties;else{if(128&r.flags&&1048576&i.flags){var p=function(t,r){var n=r.types.filter((function(e){return!!(128&e.flags)}));return e.getSpellingSuggestion(t.value,n,(function(e){return e.value}))}(r,i);if(p)return void L(e.Diagnostics.Type_0_is_not_assignable_to_type_1_Did_you_mean_2,u,s,ao(p))}t=e.Diagnostics.Type_0_is_not_assignable_to_type_1}L(t,u,s)}function j(t,r,n){return _g(t)?t.target.readonly&&Gf(r)?(n&&L(e.Diagnostics.The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1,ao(t),ao(r)),!1):Hf(r):Wf(t)&&Gf(r)?(n&&L(e.Diagnostics.The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1,ao(t),ao(r)),!1):!_g(r)||qf(t)}function J(e,t,r){return z(e,t,3,r)}function z(t,r,a,o,s,c){if(void 0===a&&(a=3),void 0===o&&(o=!1),void 0===c&&(c=0),524288&t.flags&&131068&r.flags)return ff(t,r,n,o?L:void 0)?-1:(o&&U(t,r,t,r,s),0);var u=yf(t,!1),l=yf(r,!0);if(u===l)return-1;if(n===Bn)return u.flags!==l.flags?0:67358815&u.flags?-1:(V(u,l),X(u,l,!1,0,a));if(262144&u.flags&&Xc(u)===l)return-1;if(470302716&u.flags&&1048576&l.flags){var _=l.types,d=2===_.length&&98304&_[0].flags?_[1]:3===_.length&&98304&_[0].flags&&98304&_[1].flags?_[2]:void 0;if(d&&!(98304&d.flags)&&u===(l=yf(d,!0)))return-1}if(n===Rn&&!(131072&l.flags)&&ff(l,u,n)||ff(u,l,n,o?L:void 0))return-1;if(469499904&u.flags||469499904&l.flags){if(!(2&c)&&vm(u)&&8192&e.getObjectFlags(u)&&function(t,r,a){var o;if(!dh(r)||!Z&&4096&e.getObjectFlags(r))return!1;var s=!!(2048&e.getObjectFlags(t));if((n===Ln||n===Rn)&&(uy(qt,r)||!s&&uf(r)))return!1;var c,u=r;1048576&r.flags&&(u=YE(t,r,z)||function(e){if(Yx(e,67108864)){var t=py(e,(function(e){return!(131068&e.flags)}));if(!(131072&t.flags))return t}return e}(r),c=1048576&u.flags?u.types:[u]);for(var l=function(r){if(function(e,t){return e.valueDeclaration&&t.valueDeclaration&&e.valueDeclaration.parent===t.valueDeclaration}(r,t.symbol)&&!mf(t,r)){if(!_h(u,r.escapedName,s)){if(a){var n=py(u,dh);if(!i)return{value:e.Debug.fail()};if(e.isJsxAttributes(i)||e.isJsxOpeningLikeElement(i)||e.isJsxOpeningLikeElement(i.parent)){r.valueDeclaration&&e.isJsxAttribute(r.valueDeclaration)&&e.getSourceFileOfNode(i)===e.getSourceFileOfNode(r.valueDeclaration.name)&&(i=r.valueDeclaration.name);var l=no(r),_=Vh(l,n);(p=_?no(_):void 0)?L(e.Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_2,l,ao(n),p):L(e.Diagnostics.Property_0_does_not_exist_on_type_1,l,ao(n))}else{var d=(null===(o=t.symbol)||void 0===o?void 0:o.declarations)&&e.firstOrUndefined(t.symbol.declarations),p=void 0;if(r.valueDeclaration&&e.findAncestor(r.valueDeclaration,(function(e){return e===d}))&&e.getSourceFileOfNode(d)===e.getSourceFileOfNode(i)){var f=r.valueDeclaration;e.Debug.assertNode(f,e.isObjectLiteralElementLike),i=f;var g=f.name;e.isIdentifier(g)&&(p=qh(g,n))}void 0!==p?L(e.Diagnostics.Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_write_2,no(r),ao(n),p):L(e.Diagnostics.Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1,no(r),ao(n))}}return{value:!0}}if(c&&!z(ys(r),function(t,r){var n=function(t,n){var i,a=3145728&(n=_u(n)).flags?gu(n,r):Hc(n,r),o=a&&ys(a)||(null===(i=Iu(n,r))||void 0===i?void 0:i.type)||qe;return e.append(t,o)};return P_(e.reduceLeft(t,n,void 0)||e.emptyArray)}(c,r.escapedName),3,a))return a&&O(e.Diagnostics.Types_of_property_0_are_incompatible,no(r)),{value:!0}}},_=0,d=Qc(t);_<d.length;_++){var p=l(d[_]);if("object"==typeof p)return p.value}return!1}(u,l,o))return o&&B(s,u,r.aliasSymbol?r:l),0;var p=(n!==Rn||ng(u))&&!(2&c)&&2752508&u.flags&&u!==qt&&2621440&l.flags&&Cf(l)&&(Qc(u).length>0||LC(u)),f=!!(2048&e.getObjectFlags(u));if(p&&!function(e,t,r){for(var n=0,i=Qc(e);n<i.length;n++){if(_h(t,i[n].escapedName,r))return!0}return!1}(u,l,f)){if(o){var g=ao(t.aliasSymbol?t:u),m=ao(r.aliasSymbol?r:l),y=Su(u,0),v=Su(u,1);y.length>0&&z(Yu(y[0]),l,1,!1)||v.length>0&&z(Yu(v[0]),l,1,!1)?L(e.Diagnostics.Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it,g,m):L(e.Diagnostics.Type_0_has_no_properties_in_common_with_type_1,g,m)}return 0}V(u,l);var h=1048576&u.flags&&u.types.length<4&&!(1048576&l.flags)||1048576&l.flags&&l.types.length<4&&!(469499904&u.flags)?q(u,l,o,c):X(u,l,o,c,a);if(h)return h}return o&&U(t,r,u,l,s),0}function U(t,r,n,a,o){var s,c,u=!!Yf(t),l=!!Yf(r);n=t.aliasSymbol||u?t:n,a=r.aliasSymbol||l?r:a;var d=S>0;if(d&&S--,524288&n.flags&&524288&a.flags){var p=_;j(n,a,!0),_!==p&&(d=!!_)}if(524288&n.flags&&131068&a.flags)!function(t,r){var n=co(t.symbol)?ao(t,t.symbol.valueDeclaration):ao(t),i=co(r.symbol)?ao(r,r.symbol.valueDeclaration):ao(r);(Yt===t&&Ye===r||Zt===t&&Ze===r||$t===t&&at===r||$l()===t&&ot===r)&&L(e.Diagnostics._0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible,i,n)}(n,a);else if(n.symbol&&524288&n.flags&&qt===n)L(e.Diagnostics.The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead);else if(2048&e.getObjectFlags(n)&&2097152&a.flags){var f=a.types,g=Zv(E.IntrinsicAttributes,i),y=Zv(E.IntrinsicClassAttributes,i);if(!ko(g)&&!ko(y)&&(e.contains(f,g)||e.contains(f,y)))return}else _=bu(_,r);if(o||!d){if(B(o,n,a),262144&n.flags&&(null===(c=null===(s=n.symbol)||void 0===s?void 0:s.declarations)||void 0===c?void 0:c[0])&&!Xc(n)){var v=bp(n);if(v.constraint=Fp(a,dp(n,v)),iu(v)){var h=ao(a,n.symbol.declarations[0]);R(e.createDiagnosticForNode(n.symbol.declarations[0],e.Diagnostics.This_type_parameter_might_need_an_extends_0_constraint,h))}}}else m=[n,a]}function V(t,r){if(e.tracing&&3145728&t.flags&&3145728&r.flags){var n=t,a=r;if(n.objectFlags&a.objectFlags&32768)return;var o=n.types.length,s=a.types.length;o*s>1e6&&e.tracing.instant("checkTypes","traceUnionsOrIntersectionsTooLarge_DepthLimit",{sourceId:t.id,sourceSize:o,targetId:r.id,targetSize:s,pos:null==i?void 0:i.pos,end:null==i?void 0:i.end})}}function q(t,r,i,a){if(1048576&t.flags)return n===Rn?Q(t,r,i&&!(131068&t.flags),a):function(e,t,r,n){for(var i=-1,a=e.types,o=function(e,t){if(1048576&e.flags&&1048576&t.flags&&!(32768&e.types[0].flags)&&32768&t.types[0].flags)return vy(t,-32769);return t}(e,t),s=0;s<a.length;s++){var c=a[s];if(1048576&o.flags&&a.length>=o.types.length&&a.length%o.types.length==0){var u=z(c,o.types[s%o.types.length],3,!1,void 0,n);if(u){i&=u;continue}}var l=z(c,t,1,r,void 0,n);if(!l)return 0;i&=l}return i}(t,r,i&&!(131068&t.flags),a);if(1048576&r.flags)return H(Pg(t),r,i&&!(131068&t.flags)&&!(131068&r.flags));if(2097152&r.flags)return function(e,t,r,n){for(var i=-1,a=t.types,o=0,s=a;o<s.length;o++){var c=z(e,s[o],2,r,void 0,n);if(!c)return 0;i&=c}return i}(t,r,i,2);if(n===Rn&&131068&r.flags){var o=e.sameMap(t.types,(function(e){return 465829888&e.flags?ru(e)||Ke:e}));if(o!==t.types){if(131072&(t=j_(o)).flags)return 0;if(!(2097152&t.flags))return z(t,r,1,!1)||z(r,t,1,!1)}}return Q(t,r,!1,1)}function W(e,t){for(var r=-1,n=0,i=e.types;n<i.length;n++){var a=H(i[n],t,!1);if(!a)return 0;r&=a}return r}function H(e,t,r){var n=t.types;if(1048576&t.flags){if(C_(n,e))return-1;var i=Bm(t,e);if(i)if(s=z(e,i,2,!1))return s}for(var a=0,o=n;a<o.length;a++){var s;if(s=z(e,o[a],2,!1))return s}if(r){var c=Sf(e,t,z);c&&z(e,c,2,!0)}return 0}function Q(e,t,r,n){var i=e.types;if(1048576&e.flags&&C_(i,t))return-1;for(var a=i.length,o=0;o<a;o++){var s=z(i[o],t,1,r&&o===a-1,void 0,n);if(s)return s}return 0}function X(t,r,i,o,s){if(D)return 0;var c=Of(t,r,o,n,!1),u=n.get(c);if(void 0!==u&&(!(i&&2&u)||4&u)){if(it){var l=24&u;8&l&&Fp(t,Tt),16&l&&Fp(t,St)}return 1&u?-1:0}if(p){for(var d=c.startsWith("*")?Of(t,r,o,n,!0):void 0,m=0;m<v;m++)if(c===p[m]||d&&d===p[m])return 3;if(100===h||100===b)return D=!0,0}else p=[],f=[],g=[];var y=v;p[v]=c,v++;var S,C=x;1&s&&(f[h]=t,h++,1&x||!jf(t,f,h)||(x|=1)),2&s&&(g[b]=r,b++,2&x||!jf(r,g,b)||(x|=2));var E,k=0;if(it&&(S=it,it=function(e){return k|=e?16:8,S(e)}),3===x?(null===e.tracing||void 0===e.tracing||e.tracing.instant("checkTypes","recursiveTypeRelatedTo_DepthLimit",{sourceId:t.id,sourceIdStack:f.map((function(e){return e.id})),targetId:r.id,targetIdStack:g.map((function(e){return e.id})),depth:h,targetDepth:b}),E=3):(null===e.tracing||void 0===e.tracing||e.tracing.push("checkTypes","structuredTypeRelatedTo",{sourceId:t.id,targetId:r.id}),E=function(t,r,i,o){var s=I(),c=function(t,r,i,o,s){var c,u,l=!1,d=t.flags,p=r.flags;if(n===Bn){if(3145728&d){var m=W(t,r);return m&&(m&=W(r,t)),m}if(4194304&d)return z(t.type,r.type,3,!1);if(8388608&d&&(c=z(t.objectType,r.objectType,3,!1))&&(c&=z(t.indexType,r.indexType,3,!1)))return c;if(16777216&d&&t.root.isDistributive===r.root.isDistributive&&(c=z(t.checkType,r.checkType,3,!1))&&(c&=z(t.extendsType,r.extendsType,3,!1))&&(c&=z(Pd(t),Pd(r),3,!1))&&(c&=z(wd(t),wd(r),3,!1)))return c;if(33554432&d&&(c=z(t.baseType,r.baseType,3,!1))&&(c&=z(t.constraint,r.constraint,3,!1)))return c;if(!(524288&d))return 0}else if(3145728&d||3145728&p){if(c=q(t,r,i,o))return c;if(!(465829888&d||524288&d&&1048576&p||2097152&d&&467402752&p))return 0}if(17301504&d&&t.aliasSymbol&&t.aliasTypeArguments&&t.aliasSymbol===r.aliasSymbol&&!Ff(t)&&!Ff(r)){if((ce=kf(t.aliasSymbol))===e.emptyArray)return 1;if(void 0!==(ue=ge(t.aliasTypeArguments,r.aliasTypeArguments,ce,o)))return ue}if(pg(t)&&!t.target.readonly&&(c=z(Tl(t)[0],r,1))||pg(r)&&(r.target.readonly||Gf(ru(t)||t))&&(c=z(t,Tl(r)[0],2)))return c;if(262144&p){if(32&e.getObjectFlags(t)&&!t.declaration.nameType&&z(Z_(r),Mc(t),3)&&!(4&zc(t))){var y=Rc(t),v=bd(r,Oc(t));if(c=z(y,v,3,i))return c}if(n===Rn&&262144&d){if((Q=Yc(t))&&iu(t))for(;Q&&_y(Q,(function(e){return!!(262144&e.flags)}));){if(c=z(Q,r,1,!1))return c;Q=Yc(Q)}return 0}}else if(4194304&p){var x=r.type;if(4194304&d&&(c=z(x,t.type,3,!1)))return c;if(_g(x)){if(c=z(t,x_(x),2,i))return c}else if(Q=Zc(x)){if(-1===z(t,Z_(Q,r.stringsOnly),2,i))return-1}else if(Vc(x)){var D=Lc(x),S=Mc(x),T=void 0;if(D&&jc(x)){var C=_u(Jc(x)),E=[];wc(C,8576,!1,(function(e){E.push(Fp(D,hp(x.mapper,Oc(x),e)))})),T=P_(a(a([],E,!0),[D],!1))}else T=D||S;if(-1===z(t,T,2,i))return-1}}else if(8388608&p){if(8388608&d){if((c=z(t.objectType,r.objectType,3,i))&&(c&=z(t.indexType,r.indexType,3,i)),c)return c;i&&(u=_)}if(n===Ln||n===Rn){var k=r.objectType,N=r.indexType,A=ru(k)||k,F=ru(N)||N;if(!pd(A)&&!fd(F))if(Q=Dd(A,F,4|(A!==k?2:0))){if(i&&u&&w(s),c=z(t,Q,2,i,void 0,o))return c;i&&u&&_&&(_=fe([u])<=fe([_])?u:_)}}i&&(u=void 0)}else if(Vc(r)&&n!==Bn){var P=!!r.declaration.nameType,I=(y=Rc(r),zc(r));if(!(8&I)){if(!P&&8388608&y.flags&&y.objectType===t&&y.indexType===Oc(r))return-1;if(!Vc(t)){T=P?Lc(r):Mc(r);var O=Z_(t,void 0,!0),M=4&I,L=M?Sc(T,O):void 0;if(M?!(131072&L.flags):z(T,O,3)){var R=Rc(r),B=Oc(r),j=vy(R,-98305);if(!P&&8388608&j.flags&&j.indexType===B){if(c=z(t,j.objectType,2,i))return c}else{v=bd(t,P?L||T:L?j_([L,B]):B);if(c=z(v,R,3,i))return c}}u=_,w(s)}}}else if(16777216&p){if(jf(r,g,b,10))return 3;var U=r;if(!U.root.inferTypeParameters&&(!(H=U.root).isDistributive||!Sp(H.checkType,H.node.trueType)&&!Sp(H.checkType,H.node.falseType))){var K=!Vp(wp(U.checkType),wp(U.extendsType)),V=!K&&Vp(Ip(U.checkType),Ip(U.extendsType));if((c=K?-1:z(t,Pd(U),2,!1,void 0,o))&&(c&=V?-1:z(t,wd(U),2,!1,void 0,o)))return c}}else if(134217728&p){if(134217728&d){if(n===Rn)return function(e,t){var r=e.texts[0],n=t.texts[0],i=e.texts[e.texts.length-1],a=t.texts[t.texts.length-1],o=Math.min(r.length,n.length),s=Math.min(i.length,a.length);return r.slice(0,o)!==n.slice(0,o)||i.slice(i.length-s)!==a.slice(a.length-s)}(t,r)?0:-1;Fp(t,St)}if(dm(t,r))return-1}else if(268435456&r.flags&&!(268435456&t.flags)&&lm(t,r))return-1;var H;if(8650752&d){if(!(8388608&d&&8388608&p)){var Q=Xc(t)||Ke;if(c=z(Q,r,1,!1,void 0,o))return c;if(c=z(_c(Q,t),r,1,i&&Q!==Ke&&!(p&d&262144),void 0,o))return c;if(lu(t)){var X=Xc(t.indexType);if(X&&(c=z(bd(t.objectType,X),r,1,i)))return c}}}else if(4194304&d){if(c=z(gt,r,1,i))return c}else if(134217728&d&&!(524288&p)){if(!(134217728&p))if((Q=ru(t))&&Q!==t&&(c=z(Q,r,1,i)))return c}else if(268435456&d)if(268435456&p){if(t.symbol!==r.symbol)return 0;if(c=z(t.type,r.type,3,i))return c}else{if((Q=ru(t))&&(c=z(Q,r,1,i)))return c}else if(16777216&d){if(jf(t,f,h,10))return 3;if(16777216&p){var Y=t.root.inferTypeParameters,Z=t.extendsType,re=void 0;if(Y){var ne=Vg(Y,void 0,0,J);gm(ne.inferences,r.extendsType,Z,1536),Z=Fp(Z,ne.mapper),re=ne.mapper}if(jp(Z,r.extendsType)&&(z(t.checkType,r.checkType,3)||z(r.checkType,t.checkType,3))&&((c=z(Fp(Pd(t),re),Pd(r),3,i))&&(c&=z(wd(t),wd(r),3,i)),c))return c}else{var ie=iu(t)?eu(t):void 0;if(ie&&(c=z(ie,r,1,i)))return c}var ae=$c(t);if(ae&&(c=z(ae,r,1,i)))return c}else{if(n!==On&&n!==Mn&&(pe=r,32&e.getObjectFlags(pe)&&4&zc(pe))&&uf(t))return-1;if(Vc(r))return Vc(t)&&(c=function(e,t,r){var i=n===Rn||(n===Bn?zc(e)===zc(t):Kc(e)<=Kc(t));if(i){var a;if(a=z(Mc(t),Fp(Mc(e),Kc(e)<0?Tt:St),3,r)){var o=lp([Oc(e)],[Oc(t)]);if(Fp(Lc(e),o)===Fp(Lc(t),o))return a&z(Fp(Rc(e),o),Rc(t),3,r)}}return 0}(t,r,i))?c:0;var oe=!!(131068&d);if(n!==Bn)d=(t=_u(t)).flags;else if(Vc(t))return 0;if(4&e.getObjectFlags(t)&&4&e.getObjectFlags(r)&&t.target===r.target&&!_g(t)&&!Ff(t)&&!Ff(r)){if($f(t))return-1;var ce,ue;if((ce=Ef(t.target))===e.emptyArray)return 1;if(void 0!==(ue=ge(Tl(t),Tl(r),ce,o)))return ue}else{if(Wf(r)?Hf(t):qf(r)&&_g(t)&&!t.target.readonly)return n!==Bn?z(Fu(t,Ze)||Le,Fu(r,Ze)||Le,3,i):0;if((n===On||n===Mn)&&uf(r)&&8192&e.getObjectFlags(r)&&!uf(t))return 0}if(2621440&d&&524288&p){var le=i&&_===s.errorInfo&&!oe;if((c=ee(t,r,le,void 0,o))&&(c&=te(t,r,0,le))&&(c&=te(t,r,1,le))&&(c&=se(t,r,oe,le,o)),l&&c)_=u||_||s.errorInfo;else if(c)return c}if(2621440&d&&1048576&p){var _e=vy(r,36175872);if(1048576&_e.flags){var de=function(t,r){var i=Qc(t),a=Mm(i,r);if(!a)return 0;for(var o=1,s=0,c=a;s<c.length;s++){if((o*=gy(vs(d=c[s])))>25)return null===e.tracing||void 0===e.tracing||e.tracing.instant("checkTypes","typeRelatedToDiscriminatedType_DepthLimit",{sourceId:t.id,targetId:r.id,numCombinations:o}),0}for(var u=new Array(a.length),l=new e.Set,_=0;_<a.length;_++){var d,p=vs(d=a[_]);u[_]=1048576&p.flags?p.types:[p],l.add(d.escapedName)}for(var f=e.cartesianProduct(u),g=[],m=function(i){var o=!1;e:for(var s=0,c=r.types;s<c.length;s++){for(var u=c[s],l=function(e){var o=a[e],s=xu(u,o.escapedName);return s?o===s?"continue":$(t,r,o,s,(function(t){return i[e]}),!1,0,G||n===Rn)?void 0:"continue-outer":"continue-outer"},_=0;_<a.length;_++){if("continue-outer"===l(_))continue e}e.pushIfUnique(g,u,e.equateValues),o=!0}if(!o)return{value:0}},y=0,v=f;y<v.length;y++){var h=m(v[y]);if("object"==typeof h)return h.value}for(var b=-1,x=0,D=g;x<D.length;x++){var S=D[x];if((b&=ee(t,S,!1,l,0))&&(b&=te(t,S,0,!1))&&(!(b&=te(t,S,1,!1))||_g(t)&&_g(S)||(b&=se(t,S,!1,!1,0))),!b)return b}return b}(t,_e);if(de)return de}}}var pe;return 0;function fe(t){return t?e.reduceLeft(t,(function(e,t){return e+1+fe(t.next)}),0):0}function ge(t,r,a,o){if(c=function(t,r,i,a,o){if(void 0===t&&(t=e.emptyArray),void 0===r&&(r=e.emptyArray),void 0===i&&(i=e.emptyArray),t.length!==r.length&&n===Bn)return 0;for(var s=t.length<=r.length?t.length:r.length,c=-1,u=0;u<s;u++){var l=u<i.length?i[u]:1,_=7&l;if(4!==_){var d=t[u],p=r[u],f=-1;if(8&l?f=n===Bn?z(d,p,3,!1):Jp(d,p):1===_?f=z(d,p,3,a,void 0,o):2===_?f=z(p,d,3,a,void 0,o):3===_?(f=z(p,d,3,!1))||(f=z(d,p,3,a,void 0,o)):(f=z(d,p,3,a,void 0,o))&&(f&=z(p,d,3,a,void 0,o)),!f)return 0;c&=f}}return c}(t,r,a,i,o))return c;if(e.some(a,(function(e){return!!(24&e)})))return u=void 0,void w(s);var d=r&&function(e,t){for(var r=0;r<t.length;r++)if(1==(7&t[r])&&16384&e[r].flags)return!0;return!1}(r,a);if(l=!d,a!==e.emptyArray&&!d){if(l&&(!i||!e.some(a,(function(e){return 0==(7&e)}))))return 0;u=_,w(s)}}}(t,r,i,o,s);if(n!==Bn){if(!c&&(2097152&t.flags||262144&t.flags&&1048576&r.flags)){var u=function(t,r){for(var n,i=!1,a=0,o=t;a<o.length;a++)if(465829888&(l=o[a]).flags){for(var s=Xc(l);s&&21233664&s.flags;)s=Xc(s);s&&(n=e.append(n,s),r&&(n=e.append(n,l)))}else(469892092&l.flags||lf(l))&&(i=!0);if(n&&(r||i)){if(i)for(var c=0,u=t;c<u.length;c++){var l;(469892092&(l=u[c]).flags||lf(l))&&(n=e.append(n,l))}return yf(j_(n),!1)}}(2097152&t.flags?t.types:[t],!!(1048576&r.flags));u&&dy(u,(function(e){return e!==t}))&&(c=z(u,r,1,!1,void 0,o))}c&&!T&&(2097152&r.flags&&!pd(r)&&2621440&t.flags||Jd(r)&&!Hf(r)&&2097152&t.flags&&3670016&_u(t).flags&&!e.some(t.types,(function(t){return!!(262144&e.getObjectFlags(t))})))&&(T=!0,c&=ee(t,r,i,void 0,0),T=!1)}c&&w(s);return c}(t,r,i,o),null===e.tracing||void 0===e.tracing||e.tracing.pop()),it&&(it=S),1&s&&h--,2&s&&b--,x=C,E){if(-1===E||0===h&&0===b){if(-1===E||3===E)for(m=y;m<v;m++)n.set(p[m],1|k);v=y}}else n.set(c,2|(i?4:0)|k),v=y;return E}function Y(e,t){if(!t||0===e.length)return e;for(var r,n=0;n<e.length;n++)t.has(e[n].escapedName)?r||(r=e.slice(0,n)):r&&r.push(e[n]);return r||e}function $(t,r,i,a,o,s,c,u){var l=e.getDeclarationModifierFlagsFromSymbol(i),_=e.getDeclarationModifierFlagsFromSymbol(a);if(8&l||8&_){if(i.valueDeclaration!==a.valueDeclaration)return s&&(8&l&&8&_?L(e.Diagnostics.Types_have_separate_declarations_of_a_private_property_0,no(a)):L(e.Diagnostics.Property_0_is_private_in_type_1_but_not_in_type_2,no(a),ao(8&l?t:r),ao(8&l?r:t))),0}else if(16&_){if(!function(t,r){return!Mf(r,(function(r){return!!(16&e.getDeclarationModifierFlagsFromSymbol(r))&&(n=t,i=Lf(r),!Mf(n,(function(e){var t=Lf(e);return!!t&&xs(t,i)})));var n,i}))}(i,a))return s&&L(e.Diagnostics.Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2,no(a),ao(Lf(i)||t),ao(Lf(a)||r)),0}else if(16&l)return s&&L(e.Diagnostics.Property_0_is_protected_in_type_1_but_public_in_type_2,no(a),ao(t),ao(r)),0;if(n===Mn&&Vx(i)&&!Vx(a))return 0;var d=function(t,r,n,i,a){var o=G&&!!(48&e.getCheckFlags(r)),s=jo(vs(r),!1,o);return z(n(t),s,3,i,void 0,a)}(i,a,o,s,c);return d?!u&&16777216&i.flags&&106500&a.flags&&!(16777216&a.flags)?(s&&L(e.Diagnostics.Property_0_is_optional_in_type_1_but_required_in_type_2,no(a),ao(t),ao(r)),0):d:(s&&O(e.Diagnostics.Types_of_property_0_are_incompatible,no(a)),0)}function ee(t,r,i,c,u){if(n===Bn)return function(e,t,r){if(!(524288&e.flags&&524288&t.flags))return 0;var n=Y(Wc(e),r),i=Y(Wc(t),r);if(n.length!==i.length)return 0;for(var a=-1,o=0,s=n;o<s.length;o++){var c=s[o],u=Hc(t,c.escapedName);if(!u)return 0;var l=zf(c,u,z);if(!l)return 0;a&=l}return a}(t,r,c);var l=-1;if(_g(r)){if(Hf(t)){if(!r.target.readonly&&(Wf(t)||_g(t)&&t.target.readonly))return 0;var d=Cl(t),p=Cl(r),f=_g(t)?4&t.target.combinedFlags:4,g=4&r.target.combinedFlags,m=_g(t)?t.target.minLength:0,y=r.target.minLength;if(!f&&d<y)return i&&L(e.Diagnostics.Source_has_0_element_s_but_target_requires_1,d,y),0;if(!g&&p<m)return i&&L(e.Diagnostics.Source_has_0_element_s_but_target_allows_only_1,m,p),0;if(!g&&(f||p<d))return i&&(m<y?L(e.Diagnostics.Target_requires_0_element_s_but_source_may_have_fewer,y):L(e.Diagnostics.Target_allows_only_0_element_s_but_source_may_have_more,p)),0;for(var v=Tl(t),h=Tl(r),b=Math.min(_g(t)?D_(t.target,11):0,D_(r.target,11)),x=Math.min(_g(t)?S_(t.target,11):0,g?S_(r.target,11):0),D=!!c,T=0;T<p;T++){var C=T<p-x?T:T+d-p,E=_g(t)&&(T<b||T>=p-x)?t.target.elementFlags[C]:4,k=r.target.elementFlags[T];if(8&k&&!(8&E))return i&&L(e.Diagnostics.Source_provides_no_match_for_variadic_element_at_position_0_in_target,T),0;if(8&E&&!(12&k))return i&&L(e.Diagnostics.Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target,C,T),0;if(1&k&&!(1&E))return i&&L(e.Diagnostics.Source_provides_no_match_for_required_element_at_position_0_in_target,T),0;if(!(D&&((12&E||12&k)&&(D=!1),D&&(null==c?void 0:c.has(""+T))))){var N=_g(t)?T<b||T>=p-x?Eg(v[C],!!(E&k&2)):gg(t,b,x)||ct:v[0],A=h[T];if(!(W=z(N,8&E&&4&k?u_(A):Eg(A,!!(2&k)),3,i,void 0,u)))return i&&(p>1||d>1)&&(T<b||T>=p-x||d-b-x==1?O(e.Diagnostics.Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target,C,T):O(e.Diagnostics.Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target,b,d-x-1,T)),0;l&=W}}return l}if(12&r.target.combinedFlags)return 0}var F=!(n!==On&&n!==Mn||vm(t)||$f(t)||_g(t)),P=im(t,r,F,!1);if(P)return i&&function(e,t){var r=Du(e,0),n=Du(e,1),i=Wc(e);if((r.length||n.length)&&!i.length)return!!(Su(t,0).length&&r.length||Su(t,1).length&&n.length);return!0}(t,r)&&function(t,r,n,i){var c=!1;if(n.valueDeclaration&&e.isNamedDeclaration(n.valueDeclaration)&&e.isPrivateIdentifier(n.valueDeclaration.name)&&t.symbol&&32&t.symbol.flags){var u=n.valueDeclaration.name.escapedText,l=e.getSymbolNameForPrivateIdentifier(t.symbol,u);if(l&&xu(t,l)){var d=e.factory.getDeclarationName(t.symbol.valueDeclaration),p=e.factory.getDeclarationName(r.symbol.valueDeclaration);return void L(e.Diagnostics.Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2,Si(u),Si(""===d.escapedText?s:d),Si(""===p.escapedText?s:p))}}var f=e.arrayFrom(nm(t,r,i,!1));if((!o||o.code!==e.Diagnostics.Class_0_incorrectly_implements_interface_1.code&&o.code!==e.Diagnostics.Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclass.code)&&(c=!0),1===f.length){var g=no(n,void 0,0,20);L.apply(void 0,a([e.Diagnostics.Property_0_is_missing_in_type_1_but_required_in_type_2,g],oo(t,r),!1)),e.length(n.declarations)&&R(e.createDiagnosticForNode(n.declarations[0],e.Diagnostics._0_is_declared_here,g)),c&&_&&S++}else j(t,r,!1)&&(f.length>5?L(e.Diagnostics.Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more,ao(t),ao(r),e.map(f.slice(0,4),(function(e){return no(e)})).join(", "),f.length-4):L(e.Diagnostics.Type_0_is_missing_the_following_properties_from_type_1_Colon_2,ao(t),ao(r),e.map(f,(function(e){return no(e)})).join(", ")),c&&_&&S++)}(t,r,P,F),0;if(vm(r))for(var w=0,I=Y(Qc(t),c);w<I.length;w++){if(!Hc(r,(K=I[w]).escapedName))if(!(32768&(N=ys(K)).flags))return i&&L(e.Diagnostics.Property_0_does_not_exist_on_type_1,no(K),ao(r)),0}for(var M=Qc(r),B=_g(t)&&_g(r),J=0,U=Y(M,c);J<U.length;J++){var K,V=U[J],q=V.escapedName;if(!(4194304&V.flags)&&(!B||e.isNumericLiteralName(q)||"length"===q))if((K=xu(t,q))&&K!==V){var W;if(!(W=$(t,r,K,V,vs,i,u,n===Rn)))return 0;l&=W}}return l}function te(t,r,i,a){var o,s;if(n===Bn)return function(e,t,r){var n=Su(e,r),i=Su(t,r);if(n.length!==i.length)return 0;for(var a=-1,o=0;o<n.length;o++){var s=Uf(n[o],i[o],!1,!1,!1,z);if(!s)return 0;a&=s}return a}(t,r,i);if(r===wt||t===wt)return-1;var c=t.symbol&&Hb(t.symbol.valueDeclaration),u=r.symbol&&Hb(r.symbol.valueDeclaration),l=Su(t,c&&1===i?0:i),_=Su(r,u&&1===i?0:i);if(1===i&&l.length&&_.length){var d=!!(4&l[0].flags),p=!!(4&_[0].flags);if(d&&!p)return a&&L(e.Diagnostics.Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type),0;if(!function(t,r,n){if(!t.declaration||!r.declaration)return!0;var i=e.getSelectedEffectiveModifierFlags(t.declaration,24),a=e.getSelectedEffectiveModifierFlags(r.declaration,24);if(8===a)return!0;if(16===a&&8!==i)return!0;if(16!==a&&!i)return!0;n&&L(e.Diagnostics.Cannot_assign_a_0_constructor_type_to_a_1_constructor_type,po(i),po(a));return!1}(l[0],_[0],a))return 0}var f=-1,g=1===i?ie:re,m=e.getObjectFlags(t),y=e.getObjectFlags(r);if(64&m&&64&y&&t.symbol===r.symbol||4&m&&4&y&&t.target===r.target)for(var v=0;v<_.length;v++){if(!(F=ae(l[v],_[v],!0,a,g(l[v],_[v]))))return 0;f&=F}else if(1===l.length&&1===_.length){var h=n===Rn||!!K.noStrictGenericChecks,b=e.first(l),x=e.first(_);if(!(f=ae(b,x,h,a,g(b,x)))&&a&&1===i&&m&y&&(173===(null===(o=x.declaration)||void 0===o?void 0:o.kind)||173===(null===(s=b.declaration)||void 0===s?void 0:s.kind))){var D=function(e){return io(e,void 0,262144,i)};return L(e.Diagnostics.Type_0_is_not_assignable_to_type_1,D(b),D(x)),L(e.Diagnostics.Types_of_construct_signatures_are_incompatible),f}}else e:for(var S=0,T=_;S<T.length;S++){for(var C=T[S],E=I(),k=a,N=0,A=l;N<A.length;N++){var F,P=A[N];if(F=ae(P,C,!0,k,g(P,C))){f&=F,w(E);continue e}k=!1}return k&&L(e.Diagnostics.Type_0_provides_no_match_for_the_signature_1,ao(t),io(C,void 0,void 0,i)),0}return f}function re(t,r){return 0===t.parameters.length&&0===r.parameters.length?function(t,r){return O(e.Diagnostics.Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1,ao(t),ao(r))}:function(t,r){return O(e.Diagnostics.Call_signature_return_types_0_and_1_are_incompatible,ao(t),ao(r))}}function ie(t,r){return 0===t.parameters.length&&0===r.parameters.length?function(t,r){return O(e.Diagnostics.Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1,ao(t),ao(r))}:function(t,r){return O(e.Diagnostics.Construct_signature_return_types_0_and_1_are_incompatible,ao(t),ao(r))}}function ae(e,t,r,i,a){return of(r?il(e):e,r?il(t):t,n===Mn?8:0,i,L,a,J,St)}function oe(t,r,n){var i=z(t.type,r.type,3,n);return!i&&n&&(t.keyType===r.keyType?L(e.Diagnostics._0_index_signatures_are_incompatible,ao(t.keyType)):L(e.Diagnostics._0_and_1_index_signatures_are_incompatible,ao(t.keyType),ao(r.keyType))),i}function se(t,r,i,a,o){if(n===Bn)return function(e,t){var r=Nu(e),n=Nu(t);if(r.length!==n.length)return 0;for(var i=0,a=n;i<a.length;i++){var o=a[i],s=Au(e,o.keyType);if(!s||!z(s.type,o.type,3)||s.isReadonly!==o.isReadonly)return 0}return-1}(t,r);for(var s=Nu(r),c=e.some(s,(function(e){return e.keyType===Ye})),u=-1,l=0,_=s;l<_.length;l++){var d=_[l],p=!i&&c&&1&d.type.flags?-1:Vc(t)&&c?z(Rc(t),d.type,3,a):ce(t,d,a,o);if(!p)return 0;u&=p}return u}function ce(t,r,n,i){var a=wu(t,r.keyType);return a?oe(a,r,n):1&i||!Ag(t)?(n&&L(e.Diagnostics.Index_signature_for_type_0_is_missing_in_type_1,ao(r.keyType),ao(t)),0):function(t,r,n){for(var i=-1,a=r.keyType,o=0,s=2097152&t.flags?Gc(t):Wc(t);o<s.length;o++){var c=s[o];if(!mf(t,c)&&Eu(H_(c,8576),a)){var u=vs(c);if(!(p=z(ne||32768&u.flags||a===Ze||!(16777216&c.flags)?u:qm(u,524288),r.type,3,n)))return n&&L(e.Diagnostics.Property_0_is_incompatible_with_index_signature,no(c)),0;i&=p}}for(var l=0,_=Nu(t);l<_.length;l++){var d=_[l];if(Eu(d.keyType,a)){var p;if(!(p=oe(d,r,n)))return 0;i&=p}}return i}(t,r,n)}}function bf(t){if(16&t.flags)return!1;if(3145728&t.flags)return!!e.forEach(t.types,bf);if(465829888&t.flags){var r=Xc(t);if(r&&r!==t)return bf(r)}return ng(t)||!!(134217728&t.flags)||!!(268435456&t.flags)}function xf(t,r){return _g(t)&&_g(r)?e.emptyArray:Qc(r).filter((function(e){return Df(Co(t,e.escapedName),ys(e))}))}function Df(e,t){return!!e&&!!t&&Yx(e,32768)&&!!kg(t)}function Sf(t,r,n){return void 0===n&&(n=zp),YE(t,r,n,!0)||function(t,r){var n=e.getObjectFlags(t);if(20&n&&1048576&r.flags)return e.find(r.types,(function(r){if(524288&r.flags){var i=n&e.getObjectFlags(r);if(4&i)return t.target===r.target;if(16&i)return!!t.aliasSymbol&&t.aliasSymbol===r.aliasSymbol}return!1}))}(t,r)||function(t,r){if(128&e.getObjectFlags(t)&&_y(r,Xf))return e.find(r.types,(function(e){return!Xf(e)}))}(t,r)||function(t,r){var n=0,i=Su(t,n).length>0||Su(t,n=1).length>0;if(i)return e.find(r.types,(function(e){return Su(e,n).length>0}))}(t,r)||function(t,r){var n;if(!(406978556&t.flags))for(var i=0,a=0,o=r.types;a<o.length;a++){var s=o[a];if(!(406978556&s.flags)){var c=j_([Z_(t),Z_(s)]);if(4194304&c.flags)return s;if(ng(c)||1048576&c.flags){var u=1048576&c.flags?e.countWhere(c.types,ng):1;u>=i&&(n=s,i=u)}}}return n}(t,r)}function Tf(t,r,n,i,a){for(var o=t.types.map((function(e){})),s=0,c=r;s<c.length;s++){var u=c[s],l=u[0],_=u[1],d=fu(t,_);if(!(a&&d&&16&e.getCheckFlags(d)))for(var p=0,f=0,g=t.types;f<g.length;f++){var m=Co(g[f],_);m&&n(l(),m)?o[p]=void 0===o[p]||o[p]:o[p]=!1,p++}}var y=o.indexOf(!0);if(-1===y)return i;for(var v=o.indexOf(!0,y+1);-1!==v;){if(!jp(t.types[y],t.types[v]))return i;v=o.indexOf(!0,v+1)}return t.types[y]}function Cf(t){if(524288&t.flags){var r=qc(t);return 0===r.callSignatures.length&&0===r.constructSignatures.length&&0===r.indexInfos.length&&r.properties.length>0&&e.every(r.properties,(function(e){return!!(16777216&e.flags)}))}return!!(2097152&t.flags)&&e.every(t.types,Cf)}function Ef(e){return e===Qt||e===Xt||8&e.objectFlags?U:Nf(e.symbol,e.typeParameters)}function kf(e){return Nf(e,_i(e).typeParameters)}function Nf(t,r){void 0===r&&(r=e.emptyArray);var n=_i(t);if(!n.variances){null===e.tracing||void 0===e.tracing||e.tracing.push("checkTypes","getVariancesWorker",{arity:r.length,id:T_(qs(t))}),n.variances=e.emptyArray;for(var i=[],a=function(e){var r=Pf(e),n=65536&r?32768&r?0:1:32768&r?2:void 0;if(void 0===n){var a=!1,o=!1,s=it;it=function(e){return e?o=!0:a=!0};var c=Af(t,e,Lt),u=Af(t,e,Rt);3===(n=(Vp(u,c)?1:0)|(Vp(c,u)?2:0))&&Vp(Af(t,e,Bt),c)&&(n=4),it=s,(a||o)&&(a&&(n|=8),o&&(n|=16))}i.push(n)},o=0,s=r;o<s.length;o++){a(s[o])}n.variances=i,null===e.tracing||void 0===e.tracing||e.tracing.pop({variances:i.map(e.Debug.formatVariance)})}return n.variances}function Af(e,t,r){var n=dp(t,r),i=qs(e);if(ko(i))return i;var a=524288&e.flags?kl(e,sp(_i(e).typeParameters,n)):xl(i,sp(i.typeParameters,n));return Pe.add(T_(a)),a}function Ff(e){return Pe.has(T_(e))}function Pf(t){var r,n;return(e.some(null===(r=t.symbol)||void 0===r?void 0:r.declarations,(function(t){return e.hasSyntacticModifier(t,32768)}))?32768:0)|(e.some(null===(n=t.symbol)||void 0===n?void 0:n.declarations,(function(t){return e.hasSyntacticModifier(t,65536)}))?65536:0)}function wf(e){return 262144&e.flags&&!Yc(e)}function If(t){return function(t){return!!(4&e.getObjectFlags(t))&&!t.node}(t)&&e.some(Tl(t),(function(e){return!!(262144&e.flags)||If(e)}))}function Of(e,t,r,n,i){if(n===Bn&&e.id>t.id){var a=e;e=t,t=a}var o=r?":"+r:"";return If(e)&&If(t)?function(e,t,r,n){var i=[],a="",o=c(e,0),s=c(t,0);return"".concat(a).concat(o,",").concat(s).concat(r);function c(e,t){void 0===t&&(t=0);for(var r=""+e.target.id,o=0,s=Tl(e);o<s.length;o++){var u=s[o];if(262144&u.flags){if(n||wf(u)){var l=i.indexOf(u);l<0&&(l=i.length,i.push(u)),r+="="+l;continue}a="*"}else if(t<4&&If(u)){r+="<"+c(u,t+1)+">";continue}r+="-"+u.id}return r}}(e,t,o,i):"".concat(e.id,",").concat(t.id).concat(o)}function Mf(t,r){if(!(6&e.getCheckFlags(t)))return r(t);for(var n=0,i=t.containingType.types;n<i.length;n++){var a=xu(i[n],t.escapedName),o=a&&Mf(a,r);if(o)return o}}function Lf(e){return e.parent&&32&e.parent.flags?qs(Ta(e)):void 0}function Rf(e){var t=Lf(e),r=t&&Is(t)[0];return r&&Co(r,e.escapedName)}function Bf(t,r,n){return Mf(r,(function(r){return!!(16&e.getDeclarationModifierFlagsFromSymbol(r,n))&&!xs(t,Lf(r))}))?void 0:t}function jf(e,t,r,n){if(void 0===n&&(n=3),r>=n)for(var i=Jf(e),a=0,o=0,s=0;s<r;s++){var c=t[s];if(Jf(c)===i){if(c.id>=o&&++a>=n)return!0;o=c.id}}return!1}function Jf(t){if(524288&t.flags&&!hm(t)){if(e.getObjectFlags(t)&&t.node)return t.node;if(t.symbol&&!(16&e.getObjectFlags(t)&&32&t.symbol.flags))return t.symbol;if(_g(t))return t.target}if(262144&t.flags)return t.symbol;if(8388608&t.flags){do{t=t.objectType}while(8388608&t.flags);return t}return 16777216&t.flags?t.root:t}function zf(t,r,n){if(t===r)return-1;var i=24&e.getDeclarationModifierFlagsFromSymbol(t);if(i!==(24&e.getDeclarationModifierFlagsFromSymbol(r)))return 0;if(i){if(JT(t)!==JT(r))return 0}else if((16777216&t.flags)!=(16777216&r.flags))return 0;return Vx(t)!==Vx(r)?0:n(ys(t),ys(r))}function Uf(t,r,n,i,a,o){if(t===r)return-1;if(!function(e,t,r){var n=xx(e),i=xx(t),a=Dx(e),o=Dx(t),s=Sx(e),c=Sx(t);return n===i&&a===o&&s===c||!!(r&&a<=o)}(t,r,n))return 0;if(e.length(t.typeParameters)!==e.length(r.typeParameters))return 0;if(r.typeParameters){for(var s=lp(t.typeParameters,r.typeParameters),c=0;c<r.typeParameters.length;c++){if(!((g=t.typeParameters[c])===(p=r.typeParameters[c])||o(Fp(ml(g),s)||Ke,ml(p)||Ke)&&o(Fp(su(g),s)||Ke,su(p)||Ke)))return 0}t=xp(t,s,!0)}var u=-1;if(!i){var l=Gu(t);if(l){var _=Gu(r);if(_){if(!(f=o(l,_)))return 0;u&=f}}}var d=xx(r);for(c=0;c<d;c++){var p,f,g=vx(t,c);if(!(f=o(p=vx(r,c),g)))return 0;u&=f}if(!a){var m=Qu(t),y=Qu(r);u&=m||y?function(e,t,r){return e&&t&&w_(e,t)?e.type===t.type?-1:e.type&&t.type?r(e.type,t.type):0:0}(m,y,o):o(Yu(t),Yu(r))}return u}function Kf(t){return e.reduceLeft(t,(function(e,t){return e|(1048576&t.flags?Kf(t.types):t.flags)}),0)}function Vf(t){if(1===t.length)return t[0];var r=G?e.sameMap(t,(function(e){return py(e,(function(e){return!(98304&e.flags)}))})):t,n=function(e){for(var t,r=0,n=e;r<n.length;r++){var i=n[r];if(!(131072&i.flags)){var a=og(i);if(null!=t||(t=a),a===i||a!==t)return!1}}return!0}(r)?P_(r):e.reduceLeft(r,(function(e,t){return Kp(e,t)?t:e}));return r===t?n:hg(n,98304&Kf(t))}function qf(t){return!!(4&e.getObjectFlags(t))&&(t.target===Qt||t.target===Xt)}function Wf(t){return!!(4&e.getObjectFlags(t))&&t.target===Xt}function Hf(e){return qf(e)||_g(e)}function Gf(e){return qf(e)&&!Wf(e)||_g(e)&&!e.target.readonly}function Qf(e){return qf(e)?Tl(e)[0]:void 0}function Xf(e){return qf(e)||!(98304&e.flags)&&Vp(e,ir)}function Yf(t){if(4&e.getObjectFlags(t)&&3&e.getObjectFlags(t.target)){if(33554432&e.getObjectFlags(t))return 67108864&e.getObjectFlags(t)?t.cachedEquivalentBaseType:void 0;t.objectFlags|=33554432;var r=t.target;if(1&e.getObjectFlags(r)){var n=Ns(r);if(n&&79!==n.expression.kind&&208!==n.expression.kind)return}var i=Is(r);if(1===i.length&&!uc(t.symbol).size){var a=e.length(r.typeParameters)?Fp(i[0],lp(r.typeParameters,Tl(t).slice(0,r.typeParameters.length))):i[0];return e.length(Tl(t))>e.length(r.typeParameters)&&(a=_c(a,e.last(Tl(t)))),t.objectFlags|=67108864,t.cachedEquivalentBaseType=a}}}function Zf(e){return G?e===lt:e===We}function $f(e){var t=Qf(e);return!!t&&Zf(t)}function eg(e){return _g(e)||!!xu(e,"0")}function tg(e){return Xf(e)||eg(e)}function rg(e){return!(240512&e.flags)}function ng(e){return!!(109440&e.flags)}function ig(t){var r=nu(t);return 2097152&r.flags?e.some(r.types,ng):ng(r)}function ag(t){return!!(16&t.flags)||(1048576&t.flags?!!(1024&t.flags)||e.every(t.types,ng):ng(t))}function og(e){return 1024&e.flags?zs(e):402653312&e.flags?Ye:256&e.flags?Ze:2048&e.flags?$e:512&e.flags?at:1048576&e.flags?function(e){var t,r="B".concat(T_(e));return null!==(t=Un(r))&&void 0!==t?t:Kn(r,my(e,og))}(e):e}function sg(e){return 1024&e.flags&&Qd(e)?zs(e):128&e.flags&&Qd(e)?Ye:256&e.flags&&Qd(e)?Ze:2048&e.flags&&Qd(e)?$e:512&e.flags&&Qd(e)?at:1048576&e.flags?my(e,sg):e}function cg(e){return 8192&e.flags?ot:1048576&e.flags?my(e,cg):e}function ug(e,t){return yD(e,t)||(e=cg(sg(e))),Gd(e)}function lg(e,t,r,n){e&&ng(e)&&(e=ug(e,t?ST(r,t,n):void 0));return e}function _g(t){return!!(4&e.getObjectFlags(t)&&8&t.target.objectFlags)}function dg(e){return _g(e)&&!!(8&e.target.combinedFlags)}function pg(e){return dg(e)&&1===e.target.elementFlags.length}function fg(e){return gg(e,e.target.fixedLength)}function gg(e,t,r,n){void 0===r&&(r=0),void 0===n&&(n=!1);var i=Cl(e)-r;if(t<i){for(var a=Tl(e),o=[],s=t;s<i;s++){var c=a[s];o.push(8&e.target.elementFlags[s]?bd(c,Ze):c)}return n?j_(o):P_(o)}}function mg(e){return"0"===e.value.base10Value}function yg(e){return py(e,(function(e){return!!(4194304&Vm(e))}))}function vg(e){return 4&e.flags?sn:8&e.flags?cn:64&e.flags?un:e===tt||e===et||114691&e.flags||128&e.flags&&""===e.value||256&e.flags&&0===e.value||2048&e.flags&&mg(e)?e:ct}function hg(e,t){var r=t&~e.flags&98304;return 0===r?e:P_(32768===r?[e,qe]:65536===r?[e,Qe]:[e,qe,Qe])}function bg(t,r){void 0===r&&(r=!1),e.Debug.assert(G);var n=r?Ge:qe;return 32768&t.flags||1048576&t.flags&&t.types[0]===n?t:P_([t,n])}function xg(e){return G?Wm(e,2097152):e}function Dg(e){return G?P_([e,He]):e}function Sg(e){return G?fy(e,He):e}function Tg(t,r,n){return n?e.isOutermostOptionalChain(r)?bg(t):Dg(t):t}function Cg(t,r){return e.isExpressionOfOptionalChainRoot(r)?xg(t):e.isOptionalChain(r)?Sg(t):t}function Eg(e,t){return ne&&t?fy(e,Ge):e}function kg(e){return ne&&(e===Ge||1048576&e.flags&&C_(e.types,Ge))}function Ng(e){return ne?fy(e,Ge):qm(e,524288)}function Ag(t){var r=e.getObjectFlags(t);return 2097152&t.flags?e.every(t.types,Ag):!(!t.symbol||0==(7040&t.symbol.flags)||32&t.symbol.flags||LC(t))||!!(4194304&r)||!!(1024&r&&Ag(t.source))}function Fg(t,r){var n=ri(t.flags,t.escapedName,8&e.getCheckFlags(t));n.declarations=t.declarations,n.parent=t.parent,n.type=r,n.target=t,t.valueDeclaration&&(n.valueDeclaration=t.valueDeclaration);var i=_i(t).nameType;return i&&(n.nameType=i),n}function Pg(t){if(!(vm(t)&&8192&e.getObjectFlags(t)))return t;var r=t.regularType;if(r)return r;var n=t,i=function(t,r){for(var n=e.createSymbolTable(),i=0,a=Wc(t);i<a.length;i++){var o=a[i],s=ys(o),c=r(s);n.set(o.escapedName,c===s?o:Fg(o,c))}return n}(t,Pg),a=za(n.symbol,i,n.callSignatures,n.constructSignatures,n.indexInfos);return a.flags=n.flags,a.objectFlags|=-8193&n.objectFlags,t.regularType=a,a}function wg(e,t,r){return{parent:e,propertyName:t,siblings:r,resolvedProperties:void 0}}function Ig(e){if(!e.siblings){for(var t=[],r=0,n=Ig(e.parent);r<n.length;r++){var i=n[r];if(vm(i)){var a=Hc(i,e.propertyName);a&&ly(ys(a),(function(e){t.push(e)}))}}e.siblings=t}return e.siblings}function Og(t){if(!t.resolvedProperties){for(var r=new e.Map,n=0,i=Ig(t);n<i.length;n++){var a=i[n];if(vm(a)&&!(2097152&e.getObjectFlags(a)))for(var o=0,s=Qc(a);o<s.length;o++){var c=s[o];r.set(c.escapedName,c)}}t.resolvedProperties=e.arrayFrom(r.values())}return t.resolvedProperties}function Mg(e,t){if(!(4&e.flags))return e;var r=ys(e),n=Bg(r,t&&wg(t,e.escapedName,void 0));return n===r?e:Fg(e,n)}function Lg(e){var t=Fe.get(e.escapedName);if(t)return t;var r=Fg(e,Ge);return r.flags|=16777216,Fe.set(e.escapedName,r),r}function Rg(e){return Bg(e,void 0)}function Bg(t,r){if(196608&e.getObjectFlags(t)){if(void 0===r&&t.widened)return t.widened;var n=void 0;if(98305&t.flags)n=Le;else if(vm(t))n=function(t,r){for(var n=e.createSymbolTable(),i=0,a=Wc(t);i<a.length;i++){var o=a[i];n.set(o.escapedName,Mg(o,r))}if(r)for(var s=0,c=Og(r);s<c.length;s++)o=c[s],n.has(o.escapedName)||n.set(o.escapedName,Lg(o));var u=za(t.symbol,n,e.emptyArray,e.emptyArray,e.sameMap(Nu(t),(function(e){return ll(e.keyType,Rg(e.type),e.isReadonly)})));return u.objectFlags|=266240&e.getObjectFlags(t),u}(t,r);else if(1048576&t.flags){var i=r||wg(void 0,void 0,t.types),a=e.sameMap(t.types,(function(e){return 98304&e.flags?e:Bg(e,i)}));n=P_(a,e.some(a,uf)?2:1)}else 2097152&t.flags?n=j_(e.sameMap(t.types,Rg)):Hf(t)&&(n=xl(t.target,e.sameMap(Tl(t),Rg)));return n&&void 0===r&&(t.widened=n),n||t}return t}function jg(t){var r=!1;if(65536&e.getObjectFlags(t)){if(1048576&t.flags)if(e.some(t.types,uf))r=!0;else for(var n=0,i=t.types;n<i.length;n++){jg(l=i[n])&&(r=!0)}if(Hf(t))for(var a=0,o=Tl(t);a<o.length;a++){jg(l=o[a])&&(r=!0)}if(vm(t))for(var s=0,c=Wc(t);s<c.length;s++){var u=c[s],l=ys(u);65536&e.getObjectFlags(l)&&(jg(l)||Qn(u.valueDeclaration,e.Diagnostics.Object_literal_s_property_0_implicitly_has_an_1_type,no(u),ao(Rg(l))),r=!0)}}return r}function Jg(t,r,n){var i=ao(Rg(r));if(!e.isInJSFile(t)||e.isCheckJsEnabledForFile(e.getSourceFileOfNode(t),K)){var a;switch(t.kind){case 223:case 169:case 168:a=Z?e.Diagnostics.Member_0_implicitly_has_an_1_type:e.Diagnostics.Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage;break;case 166:var o=t;if(e.isIdentifier(o.name)&&(e.isCallSignatureDeclaration(o.parent)||e.isMethodSignature(o.parent)||e.isFunctionTypeNode(o.parent))&&o.parent.parameters.indexOf(o)>-1&&(vi(o,o.name.escapedText,788968,void 0,o.name.escapedText,!0)||o.name.originalKeywordKind&&e.isTypeNodeKind(o.name.originalKeywordKind))){var s="arg"+o.parent.parameters.indexOf(o),c=e.declarationNameToString(o.name)+(o.dotDotDotToken?"[]":"");return void Yn(Z,t,e.Diagnostics.Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1,s,c)}a=t.dotDotDotToken?Z?e.Diagnostics.Rest_parameter_0_implicitly_has_an_any_type:e.Diagnostics.Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage:Z?e.Diagnostics.Parameter_0_implicitly_has_an_1_type:e.Diagnostics.Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage;break;case 205:if(a=e.Diagnostics.Binding_element_0_implicitly_has_an_1_type,!Z)return;break;case 320:return void Qn(t,e.Diagnostics.Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type,i);case 259:case 171:case 170:case 174:case 175:case 215:case 216:if(Z&&!t.name)return void Qn(t,3===n?e.Diagnostics.Generator_implicitly_has_yield_type_0_because_it_does_not_yield_any_values_Consider_supplying_a_return_type_annotation:e.Diagnostics.Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type,i);a=Z?3===n?e.Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type:e.Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type:e.Diagnostics._0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage;break;case 197:return void(Z&&Qn(t,e.Diagnostics.Mapped_object_type_implicitly_has_an_any_template_type));default:a=Z?e.Diagnostics.Variable_0_implicitly_has_an_1_type:e.Diagnostics.Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage}Yn(Z,t,a,e.declarationNameToString(e.getNameOfDeclaration(t)),i)}}function zg(t,r,n){m((function(){!(Z&&65536&e.getObjectFlags(r))||n&&Ov(t)||jg(r)||Jg(t,r,n)}))}function Ug(e,t,r){var n=xx(e),i=xx(t),a=Tx(e),o=Tx(t),s=o?i-1:i,c=a?s:Math.min(n,s),u=Gu(e);if(u){var l=Gu(t);l&&r(u,l)}for(var _=0;_<c;_++)r(vx(e,_),vx(t,_));o&&r(bx(e,c),o)}function Kg(e,t,r){var n=Qu(e),i=Qu(t);n&&i&&w_(n,i)&&n.type&&i.type?r(n.type,i.type):r(Yu(e),Yu(t))}function Vg(e,t,r,n){return qg(e.map(Gg),t,r,n||zp)}function qg(t,r,n,i){var a={inferences:t,signature:r,flags:n,compareTypes:i,mapper:Tt,nonFixingMapper:Tt};return a.mapper=function(t){return fp(e.map(t.inferences,(function(e){return e.typeParameter})),e.map(t.inferences,(function(e,r){return function(){return e.isFixed||(!function(e){if(e.intraExpressionInferenceSites){for(var t=0,r=e.intraExpressionInferenceSites;t<r.length;t++){var n=r[t],i=n.node,a=n.type,o=171===i.kind?vv(i,2):Nv(i,2);o&&gm(e.inferences,a,o)}e.intraExpressionInferenceSites=void 0}}(t),Wg(t.inferences),e.isFixed=!0),Dm(t,r)}})))}(a),a.nonFixingMapper=function(t){return fp(e.map(t.inferences,(function(e){return e.typeParameter})),e.map(t.inferences,(function(e,r){return function(){return Dm(t,r)}})))}(a),a}function Wg(e){for(var t=0,r=e;t<r.length;t++){var n=r[t];n.isFixed||(n.inferredType=void 0)}}function Hg(e,t,r){var n;(null!==(n=e.intraExpressionInferenceSites)&&void 0!==n?n:e.intraExpressionInferenceSites=[]).push({node:t,type:r})}function Gg(e){return{typeParameter:e,candidates:void 0,contraCandidates:void 0,inferredType:void 0,priority:void 0,topLevel:!0,isFixed:!1,impliedArity:void 0}}function Qg(e){return{typeParameter:e.typeParameter,candidates:e.candidates&&e.candidates.slice(),contraCandidates:e.contraCandidates&&e.contraCandidates.slice(),inferredType:e.inferredType,priority:e.priority,topLevel:e.topLevel,isFixed:e.isFixed,impliedArity:e.impliedArity}}function Xg(e){return e&&e.mapper}function Yg(t){var r=e.getObjectFlags(t);if(524288&r)return!!(1048576&r);var n=!!(465829888&t.flags||524288&t.flags&&!Zg(t)&&(4&r&&(t.node||e.forEach(Tl(t),Yg))||16&r&&t.symbol&&14384&t.symbol.flags&&t.symbol.declarations||12583968&r)||3145728&t.flags&&!(1024&t.flags)&&!Zg(t)&&e.some(t.types,Yg));return 3899393&t.flags&&(t.objectFlags|=524288|(n?1048576:0)),n}function Zg(t){if(t.aliasSymbol&&!t.aliasTypeArguments){var r=e.getDeclarationOfKind(t.aliasSymbol,262);return!(!r||!e.findAncestor(r.parent,(function(e){return 308===e.kind||264!==e.kind&&"quit"})))}return!1}function $g(t,r){return!!(t===r||3145728&t.flags&&e.some(t.types,(function(e){return $g(e,r)}))||16777216&t.flags&&(Pd(t)===r||wd(t)===r))}function em(t,r,n){if(!$r){var i=t.id+","+r.id+","+n.id;if(Zr.has(i))return Zr.get(i);$r=!0;var a=function(t,r,n){if(!(Au(t,Ye)||0!==Qc(t).length&&tm(t)))return;if(qf(t))return u_(rm(Tl(t)[0],r,n),Wf(t));if(_g(t)){return m_(e.map(Tl(t),(function(e){return rm(e,r,n)})),4&zc(r)?e.sameMap(t.target.elementFlags,(function(e){return 2&e?1:e})):t.target.elementFlags,t.target.readonly,t.target.labeledElementDeclarations)}var i=Ma(1040,void 0);return i.source=t,i.mappedType=r,i.constraintType=n,i}(t,r,n);return $r=!1,Zr.set(i,a),a}}function tm(t){return!(262144&e.getObjectFlags(t))||vm(t)&&e.some(Qc(t),(function(e){return tm(ys(e))}))||_g(t)&&e.some(Tl(t),tm)}function rm(e,t,r){var n=bd(r.type,Oc(t)),i=Rc(t),a=Gg(n);return gm([a],e,i),am(a)||Ke}function nm(t,r,n,i){var a,o,s,u,l,_,d;return c(this,(function(c){switch(c.label){case 0:a=Qc(r),o=0,s=a,c.label=1;case 1:return o<s.length?$s(u=s[o])||!n&&(16777216&u.flags||48&e.getCheckFlags(u))?[3,5]:(l=xu(t,u.escapedName))?[3,3]:[4,u]:[3,6];case 2:return c.sent(),[3,5];case 3:return i&&109440&(_=ys(u)).flags?1&(d=ys(l)).flags||Gd(d)===Gd(_)?[3,5]:[4,u]:[3,5];case 4:c.sent(),c.label=5;case 5:return o++,[3,1];case 6:return[2]}}))}function im(e,t,r,n){var i=nm(e,t,r,n).next();if(!i.done)return i.value}function am(e){return e.candidates?P_(e.candidates,2):e.contraCandidates?j_(e.contraCandidates):void 0}function om(e){return!!di(e).skipDirectInference}function sm(t){return!(!t.symbol||!e.some(t.symbol.declarations,om))}function cm(e,t){if(""===e)return!1;var r=+e;return isFinite(r)&&(!t||""+r===e)}function um(t,r){if(""===t)return!1;var n=e.createScanner(99,!1),i=!0;n.setOnError((function(){return i=!1})),n.setText(t+"n");var a=n.scan(),o=40===a;o&&(a=n.scan());var s=n.getTokenFlags();return i&&9===a&&n.getTextPos()===t.length+1&&!(512&s)&&(!r||t===e.pseudoBigIntToString({negative:o,base10Value:e.parsePseudoBigInt(n.getTokenValue())}))}function lm(t,r){if(5&r.flags)return!0;if(134217728&r.flags)return Vp(t,r);if(268435456&r.flags){for(var n=[];268435456&r.flags;)n.unshift(r.symbol),r=r.type;return e.reduceLeft(n,(function(e,t){return rd(t,e)}),t)===t&&lm(t,r)}return!1}function _m(t,r){return 128&t.flags?fm([t.value],e.emptyArray,r):134217728&t.flags?e.arraysEqual(t.texts,r.texts)?e.map(t.types,pm):fm(t.texts,t.types,r):void 0}function dm(t,r){var n=_m(t,r);return!!n&&e.every(n,(function(e,t){return function(e,t){if(e===t||5&t.flags)return!0;if(128&e.flags){var r=e.value;return!!(8&t.flags&&cm(r,!1)||64&t.flags&&um(r,!1)||98816&t.flags&&r===t.intrinsicName||268435456&t.flags&&lm(Xd(r),t))}if(134217728&e.flags){var n=e.texts;return 2===n.length&&""===n[0]&&""===n[1]&&Vp(e.types[0],t)}return Vp(e,t)}(e,r.types[t])}))}function pm(e){return 402653317&e.flags?e:ed(["",""],[e])}function fm(e,t,r){var n=e.length-1,i=e[0],o=e[n],s=r.texts,c=s.length-1,u=s[0],l=s[c];if(!(0===n&&i.length<u.length+l.length)&&i.startsWith(u)&&o.endsWith(l)){for(var _=o.slice(0,o.length-l.length),d=[],p=0,f=u.length,g=1;g<c;g++){var m=s[g];if(m.length>0){for(var y=p,v=f;!((v=h(y).indexOf(m,v))>=0);){if(++y===e.length)return;v=0}b(y,v),f+=m.length}else if(f<h(p).length)b(p,f+1);else{if(!(p<n))return;b(p+1,0)}}return b(n,h(n).length),d}function h(t){return t<n?e[t]:_}function b(r,n){var i=r===p?Xd(h(r).slice(f,n)):ed(a(a([e[p].slice(f)],e.slice(p+1,r),!0),[h(r).slice(0,n)],!1),t.slice(p,r));d.push(i),p=r,f=n}}function gm(t,r,n,i,a){void 0===i&&(i=0),void 0===a&&(a=!1);var o,s,c,u,l=!1,_=2048,d=!0,p=0;function f(r,s){if(Yg(s)){if(r===Be){var c=o;return o=r,f(s,s),void(o=c)}if(r.aliasSymbol&&r.aliasSymbol===s.aliasSymbol)r.aliasTypeArguments&&v(r.aliasTypeArguments,s.aliasTypeArguments,kf(r.aliasSymbol));else if(r===s&&3145728&r.flags)for(var u=0,p=r.types;u<p.length;u++){var b=p[u];f(b,b)}else{if(1048576&s.flags){var S=y(1048576&r.flags?r.types:[r],s.types,mm),E=y(S[0],S[1],ym),k=E[0];if(0===(A=E[1]).length)return;if(s=P_(A),0===k.length)return void g(r,s,1);r=P_(k)}else if(2097152&s.flags&&e.some(s.types,(function(e){return!!x(e)||Vc(e)&&!!x(Tp(e)||ct)}))){if(!(1048576&r.flags)){var N=y(2097152&r.flags?r.types:[r],s.types,jp),A=(k=N[0],N[1]);if(0===k.length||0===A.length)return;r=j_(k),s=j_(A)}}else 41943040&s.flags&&(s=Cd(s));if(8650752&s.flags){if(sm(r))return;var F=x(s);if(F){if(262144&e.getObjectFlags(r)||r===ze)return;if(!F.isFixed){if((void 0===F.priority||i<F.priority)&&(F.candidates=void 0,F.contraCandidates=void 0,F.topLevel=!0,F.priority=i),i===F.priority){var P=o||r;a&&!l?e.contains(F.contraCandidates,P)||(F.contraCandidates=e.append(F.contraCandidates,P),Wg(t)):e.contains(F.candidates,P)||(F.candidates=e.append(F.candidates,P),Wg(t))}!(128&i)&&262144&s.flags&&F.topLevel&&!$g(n,s)&&(F.topLevel=!1,Wg(t))}return void(_=Math.min(_,i))}var w=md(s,!1);if(w!==s)f(r,w);else if(8388608&s.flags){var I=md(s.indexType,!1);if(465829888&I.flags){var O=yd(md(s.objectType,!1),I,!1);O&&O!==s&&f(r,O)}}}if(!(4&e.getObjectFlags(r)&&4&e.getObjectFlags(s)&&(r.target===s.target||qf(r)&&qf(s)))||r.node&&s.node)if(4194304&r.flags&&4194304&s.flags)h(r.type,s.type);else if((ag(r)||4&r.flags)&&4194304&s.flags){var M=function(t){var r=e.createSymbolTable();ly(t,(function(t){if(128&t.flags){var n=e.escapeLeadingUnderscores(t.value),i=ri(4,n);i.type=Le,t.symbol&&(i.declarations=t.symbol.declarations,i.valueDeclaration=t.symbol.valueDeclaration),r.set(n,i)}}));var n=4&t.flags?[ll(Ye,Ct,!1)]:e.emptyArray;return za(void 0,r,e.emptyArray,e.emptyArray,n)}(r);!function(e,t,r){var n=i;i|=r,h(e,t),i=n}(M,s.type,256)}else if(8388608&r.flags&&8388608&s.flags)f(r.objectType,s.objectType),f(r.indexType,s.indexType);else if(268435456&r.flags&&268435456&s.flags)r.symbol===s.symbol&&f(r.type,s.type);else if(33554432&r.flags)f(r.baseType,s),g(Ol(r),s,4);else if(16777216&s.flags)m(r,s,T);else if(3145728&s.flags)D(r,s.types,s.flags);else if(1048576&r.flags)for(var L=0,R=r.types;L<R.length;L++){f(R[L],s)}else if(134217728&s.flags)!function(t,r){var n=_m(t,r),i=r.types;if(n||e.every(r.texts,(function(e){return 0===e.length})))for(var a=function(t){var r=n?n[t]:ct,a=i[t];if(128&r.flags&&8650752&a.flags){var o=x(a),s=o?ru(o.typeParameter):void 0;if(s&&!Eo(s)){var c=1048576&s.flags?s.types:[s],u=e.reduceLeft(c,(function(e,t){return e|t.flags}),0);if(!(4&u)){var l=r.value;296&u&&!cm(l,!0)&&(u&=-297),2112&u&&!um(l,!0)&&(u&=-2113);var _=e.reduceLeft(c,(function(t,n){return n.flags&u?4&t.flags?t:4&n.flags?r:134217728&t.flags?t:134217728&n.flags&&dm(r,n)?r:268435456&t.flags?t:268435456&n.flags&&l===nd(n.symbol,l)?r:128&t.flags?t:128&n.flags&&n.value===l?n:8&t.flags?t:8&n.flags?Yd(+l):32&t.flags?t:32&n.flags?Yd(+l):256&t.flags?t:256&n.flags&&n.value===+l?n:64&t.flags?t:64&n.flags?Zd({negative:a=(i=l).startsWith("-"),base10Value:e.parsePseudoBigInt("".concat(a?i.slice(1):i,"n"))}):2048&t.flags?t:2048&n.flags&&e.pseudoBigIntToString(n.value)===l?n:16&t.flags?t:16&n.flags?"true"===l?rt:"false"===l?et:at:512&t.flags?t:512&n.flags&&n.intrinsicName===l?n:32768&t.flags?t:32768&n.flags&&n.intrinsicName===l?n:65536&t.flags?t:65536&n.flags&&n.intrinsicName===l?n:t:t;var i,a}),ct);if(!(131072&_.flags))return f(_,a),"continue"}}}f(r,a)},o=0;o<i.length;o++)a(o)}(r,s);else{if(r=mu(r),!(512&i&&467927040&r.flags)){var B=_u(r);if(B!==r&&d&&!(2621440&B.flags))return d=!1,f(B,s);r=B}2621440&r.flags&&m(r,s,C)}else v(Tl(r),Tl(s),Ef(r.target))}}}function g(e,t,r){var n=i;i|=r,f(e,t),i=n}function m(t,r,n){var i=t.id+","+r.id,a=s&&s.get(i);if(void 0===a){(s||(s=new e.Map)).set(i,-1);var o=_;_=2048;var l=p,d=Jf(t),f=Jf(r);e.contains(c,d)&&(p|=1),e.contains(u,f)&&(p|=2),3!==p?((c||(c=[])).push(d),(u||(u=[])).push(f),n(t,r),u.pop(),c.pop()):_=-1,p=l,s.set(i,_),_=Math.min(_,o)}else _=Math.min(_,a)}function y(t,r,n){for(var i,a,o=0,s=r;o<s.length;o++)for(var c=s[o],u=0,l=t;u<l.length;u++){var _=l[u];n(_,c)&&(f(_,c),i=e.appendIfUnique(i,_),a=e.appendIfUnique(a,c))}return[i?e.filter(t,(function(t){return!e.contains(i,t)})):t,a?e.filter(r,(function(t){return!e.contains(a,t)})):r]}function v(e,t,r){for(var n=e.length<t.length?e.length:t.length,i=0;i<n;i++)i<r.length&&2==(7&r[i])?h(e[i],t[i]):f(e[i],t[i])}function h(e,t){a=!a,f(e,t),a=!a}function b(e,t){Q||1024&i?h(e,t):f(e,t)}function x(e){if(8650752&e.flags)for(var r=0,n=t;r<n.length;r++){var i=n[r];if(e===i.typeParameter)return i}}function D(t,r,n){var a=0;if(1048576&n){for(var o=void 0,s=1048576&t.flags?t.types:[t],c=new Array(s.length),u=!1,l=0,d=r;l<d.length;l++){if(x(T=d[l]))o=T,a++;else for(var p=0;p<s.length;p++){var m=_;_=2048,f(s[p],T),_===i&&(c[p]=!0),u=u||-1===_,_=Math.min(_,m)}}if(0===a){var y=function(t){for(var r,n=0,i=t;n<i.length;n++){var a=i[n],o=2097152&a.flags&&e.find(a.types,(function(e){return!!x(e)}));if(!o||r&&o!==r)return;r=o}return r}(r);return void(y&&g(t,y,1))}if(1===a&&!u){var v=e.flatMap(s,(function(e,t){return c[t]?void 0:e}));if(v.length)return void f(P_(v),o)}}else for(var h=0,b=r;h<b.length;h++){x(T=b[h])?a++:f(t,T)}if(2097152&n?1===a:a>0)for(var D=0,S=r;D<S.length;D++){var T;x(T=S[D])&&g(t,T,1)}}function S(t,r,n){if(1048576&n.flags){for(var i=!1,a=0,o=n.types;a<o.length;a++){i=S(t,r,o[a])||i}return i}if(4194304&n.flags){var s=x(n.type);if(s&&!s.isFixed&&!sm(t)){var c=em(t,r,n);c&&g(c,s.typeParameter,262144&e.getObjectFlags(t)?16:8)}return!0}if(262144&n.flags){g(Z_(t),n,32);var u=Xc(n);if(u&&S(t,r,u))return!0;var l=e.map(Qc(t),ys),_=e.map(Nu(t),(function(e){return e!==Vr?e.type:ct}));return f(P_(e.concatenate(l,_)),Rc(r)),!0}return!1}function T(e,t){16777216&e.flags?(f(e.checkType,t.checkType),f(e.extendsType,t.extendsType),f(Pd(e),Pd(t)),f(wd(e),wd(t))):function(e,t,r,n){var a=i;i|=n,D(e,t,r),i=a}(e,[Pd(t),wd(t)],t.flags,a?64:0)}function C(t,r){if(4&e.getObjectFlags(t)&&4&e.getObjectFlags(r)&&(t.target===r.target||qf(t)&&qf(r)))v(Tl(t),Tl(r),Ef(t.target));else{if(Vc(t)&&Vc(r)){f(Mc(t),Mc(r)),f(Rc(t),Rc(r));var n=Lc(t),i=Lc(r);n&&i&&f(n,i)}var a,o;if(32&e.getObjectFlags(r)&&!r.declaration.nameType)if(S(t,r,Mc(r)))return;if(!function(e,t){return _g(e)&&_g(t)?function(e,t){return!(8&t.target.combinedFlags)&&t.target.minLength>e.target.minLength||!t.target.hasRestElement&&(e.target.hasRestElement||t.target.fixedLength<e.target.fixedLength)}(e,t):!!im(e,t,!1,!0)&&!!im(t,e,!1,!1)}(t,r)){if(Hf(t)){if(_g(r)){var s=Cl(t),c=Cl(r),u=Tl(r),l=r.target.elementFlags;if(_g(t)&&(o=r,Cl(a=t)===Cl(o)&&e.every(a.target.elementFlags,(function(e,t){return(12&e)==(12&o.target.elementFlags[t])})))){for(var _=0;_<c;_++)f(Tl(t)[_],u[_]);return}var d=_g(t)?Math.min(t.target.fixedLength,r.target.fixedLength):0,p=Math.min(_g(t)?S_(t.target,3):0,r.target.hasRestElement?S_(r.target,3):0);for(_=0;_<d;_++)f(Tl(t)[_],u[_]);if(!_g(t)||s-d-p==1&&4&t.target.elementFlags[d]){var m=Tl(t)[d];for(_=d;_<c-p;_++)f(8&l[_]?u_(m):m,u[_])}else{var y=c-d-p;if(2===y&&l[d]&l[d+1]&8&&_g(t)){var h=x(u[d]);h&&void 0!==h.impliedArity&&(f(b_(t,d,p+s-h.impliedArity),u[d]),f(b_(t,d+h.impliedArity,p),u[d+1]))}else if(1===y&&8&l[d]){var b=2&r.target.elementFlags[c-1];g(_g(t)?b_(t,d,p):u_(Tl(t)[0]),u[d],b?2:0)}else if(1===y&&4&l[d]){(m=_g(t)?gg(t,d,p):Tl(t)[0])&&f(m,u[d])}}for(_=0;_<p;_++)f(Tl(t)[s-_-1],u[c-_-1]);return}if(qf(r))return void N(t,r)}!function(t,r){for(var n=Wc(r),i=0,a=n;i<a.length;i++){var o=a[i],s=xu(t,o.escapedName);s&&!e.some(s.declarations,om)&&f(ys(s),ys(o))}}(t,r),E(t,r,0),E(t,r,1),N(t,r)}}}function E(e,t,r){for(var n=Su(e,r),i=Su(t,r),a=n.length,o=i.length,s=a<o?a:o,c=0;c<s;c++)k(ol(n[a-s+c]),il(i[o-s+c]))}function k(e,t){var r=l,n=t.declaration?t.declaration.kind:0;l=l||171===n||170===n||173===n,Ug(e,t,b),l=r,Kg(e,t,f)}function N(t,r){var n=e.getObjectFlags(t)&e.getObjectFlags(r)&32?8:0,i=Nu(r);if(Ag(t))for(var a=0,o=i;a<o.length;a++){for(var s=o[a],c=[],u=0,l=Qc(t);u<l.length;u++){var _=l[u];if(Eu(H_(_,8576),s.keyType)){var d=ys(_);c.push(16777216&_.flags?Ng(d):d)}}for(var p=0,f=Nu(t);p<f.length;p++){var m=f[p];Eu(m.keyType,s.keyType)&&c.push(m.type)}c.length&&g(P_(c),s.type,n)}for(var y=0,v=i;y<v.length;y++){var h=wu(t,(s=v[y]).keyType);h&&g(h.type,s.type,n)}}f(r,n)}function mm(e,t){return ne&&t===Ge?e===t:jp(e,t)||!!(4&t.flags&&128&e.flags||8&t.flags&&256&e.flags)}function ym(e,t){return!!(524288&e.flags&&524288&t.flags&&e.symbol&&e.symbol===t.symbol||e.aliasSymbol&&e.aliasTypeArguments&&e.aliasSymbol===t.aliasSymbol)}function vm(t){return!!(128&e.getObjectFlags(t))}function hm(t){return!!(16512&e.getObjectFlags(t))}function bm(t){return 416&t.priority?j_(t.contraCandidates):(r=t.contraCandidates,e.reduceLeft(r,(function(e,t){return Kp(t,e)?t:e})));var r}function xm(t,r){var n,i,a=function(t){if(t.length>1){var r=e.filter(t,hm);if(r.length){var n=P_(r,2);return e.concatenate(e.filter(t,(function(e){return!hm(e)})),[n])}}return t}(t.candidates),o=(n=t.typeParameter,!!(i=Yc(n))&&Yx(16777216&i.flags?$c(i):i,406978556)),s=!o&&t.topLevel&&(t.isFixed||!$g(Yu(r),t.typeParameter)),c=o?e.sameMap(a,Gd):s?e.sameMap(a,sg):a;return Rg(416&t.priority?P_(c,2):Vf(c))}function Dm(t,r){var n,i,a=t.inferences[r];if(!a.inferredType){var o=void 0,s=t.signature;if(s){var c=a.candidates?xm(a,s):void 0;if(a.contraCandidates)o=!c||131072&c.flags||!e.some(a.contraCandidates,(function(e){return Kp(c,e)}))?bm(a):c;else if(c)o=c;else if(1&t.flags)o=ut;else{var u=su(a.typeParameter);u&&(o=Fp(u,(n=function(t,r){var n=t.inferences.slice(r);return lp(e.map(n,(function(e){return e.typeParameter})),e.map(n,(function(){return Ke})))}(t,r),i=t.nonFixingMapper,n?gp(5,n,i):i)))}}else o=am(a);a.inferredType=o||Sm(!!(2&t.flags));var l=Yc(a.typeParameter);if(l){var _=Fp(l,t.nonFixingMapper);o&&t.compareTypes(o,_c(_,o))||(a.inferredType=o=_)}}return a.inferredType}function Sm(e){return e?Le:Ke}function Tm(e){for(var t=[],r=0;r<e.inferences.length;r++)t.push(Dm(e,r));return t}function Cm(t){switch(t.escapedText){case"document":case"console":return e.Diagnostics.Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_include_dom;case"$":return K.types?e.Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slashjquery_and_then_add_jquery_to_the_types_field_in_your_tsconfig:e.Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slashjquery;case"describe":case"suite":case"it":case"test":return K.types?e.Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_types_Slashjest_or_npm_i_save_dev_types_Slashmocha_and_then_add_jest_or_mocha_to_the_types_field_in_your_tsconfig:e.Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_types_Slashjest_or_npm_i_save_dev_types_Slashmocha;case"process":case"require":case"Buffer":case"module":return K.types?e.Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashnode_and_then_add_node_to_the_types_field_in_your_tsconfig:e.Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashnode;case"Map":case"Set":case"Promise":case"Symbol":case"WeakMap":case"WeakSet":case"Iterator":case"AsyncIterator":case"SharedArrayBuffer":case"Atomics":case"AsyncIterable":case"AsyncIterableIterator":case"AsyncGenerator":case"AsyncGeneratorFunction":case"BigInt":case"Reflect":case"BigInt64Array":case"BigUint64Array":return e.Diagnostics.Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_1_or_later;case"await":if(e.isCallExpression(t.parent))return e.Diagnostics.Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function;default:return 300===t.parent.kind?e.Diagnostics.No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer:e.Diagnostics.Cannot_find_name_0}}function Em(t){var r=di(t);return r.resolvedSymbol||(r.resolvedSymbol=!e.nodeIsMissing(t)&&vi(t,t.escapedText,1160127,Cm(t),t,!e.isWriteOnlyAccess(t),!1)||we),r.resolvedSymbol}function km(t){return!!e.findAncestor(t,(function(e){return 183===e.kind||79!==e.kind&&163!==e.kind&&"quit"}))}function Nm(t,r,n,i){switch(t.kind){case 79:if(!e.isThisInTypeQuery(t)){var a=Em(t);return a!==we?"".concat(i?F(i):"-1","|").concat(T_(r),"|").concat(T_(n),"|").concat(P(a)):void 0}case 108:return"0|".concat(i?F(i):"-1","|").concat(T_(r),"|").concat(T_(n));case 232:case 214:return Nm(t.expression,r,n,i);case 163:var o=Nm(t.left,r,n,i);return o&&o+"."+t.right.escapedText;case 208:case 209:var s=Fm(t);if(void 0!==s){var c=Nm(t.expression,r,n,i);return c&&c+"."+s}break;case 203:case 204:case 259:case 215:case 216:case 171:return"".concat(F(t),"#").concat(T_(r))}}function Am(t,r){switch(r.kind){case 214:case 232:return Am(t,r.expression);case 223:return e.isAssignmentExpression(r)&&Am(t,r.left)||e.isBinaryExpression(r)&&27===r.operatorToken.kind&&Am(t,r.right)}switch(t.kind){case 233:return 233===r.kind&&t.keywordToken===r.keywordToken&&t.name.escapedText===r.name.escapedText;case 79:case 80:return e.isThisInTypeQuery(t)?108===r.kind:79===r.kind&&Em(t)===Em(r)||(257===r.kind||205===r.kind)&&Aa(Em(t))===Sa(r);case 108:return 108===r.kind;case 106:return 106===r.kind;case 232:case 214:return Am(t.expression,r);case 208:case 209:var n=Fm(t),i=e.isAccessExpression(r)?Fm(r):void 0;return void 0!==n&&void 0!==i&&i===n&&Am(t.expression,r.expression);case 163:return e.isAccessExpression(r)&&t.right.escapedText===Fm(r)&&Am(t.left,r.expression);case 223:return e.isBinaryExpression(t)&&27===t.operatorToken.kind&&Am(t.right,r)}return!1}function Fm(t){if(e.isPropertyAccessExpression(t))return t.name.escapedText;if(e.isElementAccessExpression(t))return function(t){if(e.isStringOrNumericLiteralLike(t.argumentExpression))return e.escapeLeadingUnderscores(t.argumentExpression.text);if(e.isEntityNameExpression(t.argumentExpression)){var r=aa(t.argumentExpression,111551,!0);if(!r||!(Uy(r)||8&r.flags))return;var n=r.valueDeclaration;if(void 0===n)return;var i=is(n);if(i){var a=Pm(i);if(void 0!==a)return a}if(e.hasOnlyExpressionInitializer(n)&&gi(n,t.argumentExpression)){var o=e.getEffectiveInitializer(n);if(o)return Pm(AD(o));if(e.isEnumMember(n))return e.getTextOfPropertyName(n.name)}}return}(t);if(e.isBindingElement(t)){var r=Oo(t);return r?e.escapeLeadingUnderscores(r):void 0}return e.isParameter(t)?""+t.parent.parameters.indexOf(t):void 0}function Pm(t){return 8192&t.flags?t.escapedName:384&t.flags?e.escapeLeadingUnderscores(""+t.value):void 0}function wm(t,r){for(;e.isAccessExpression(t);)if(Am(t=t.expression,r))return!0;return!1}function Im(t,r){for(;e.isOptionalChain(t);)if(Am(t=t.expression,r))return!0;return!1}function Om(t,r){if(t&&1048576&t.flags){var n=fu(t,r);if(n&&2&e.getCheckFlags(n))return void 0===n.isDiscriminantProperty&&(n.isDiscriminantProperty=192==(192&n.checkFlags)&&!dd(ys(n))),!!n.isDiscriminantProperty}return!1}function Mm(e,t){for(var r,n=0,i=e;n<i.length;n++){var a=i[n];if(Om(t,a.escapedName)){if(r){r.push(a);continue}r=[a]}}return r}function Lm(t){var r=t.types;if(!(r.length<10||32768&e.getObjectFlags(t)||e.countWhere(r,(function(e){return!!(59506688&e.flags)}))<10)){if(void 0===t.keyPropertyName){var n=e.forEach(r,(function(t){return 59506688&t.flags?e.forEach(Qc(t),(function(e){return ng(ys(e))?e.escapedName:void 0})):void 0})),i=n&&function(t,r){for(var n=new e.Map,i=0,a=function(e){if(61603840&e.flags){var t=Co(e,r);if(t){if(!ag(t))return{value:void 0};var a=!1;ly(t,(function(t){var r=T_(Gd(t)),i=n.get(r);i?i!==Ke&&(n.set(r,Ke),a=!0):n.set(r,e)})),a||i++}}},o=0,s=t;o<s.length;o++){var c=a(s[o]);if("object"==typeof c)return c.value}return i>=10&&2*i>=t.length?n:void 0}(r,n);t.keyPropertyName=i?n:"",t.constituentMap=i}return t.keyPropertyName.length?t.keyPropertyName:void 0}}function Rm(e,t){var r,n=null===(r=e.constituentMap)||void 0===r?void 0:r.get(T_(Gd(t)));return n!==Ke?n:void 0}function Bm(e,t){var r=Lm(e),n=r&&Co(t,r);return n&&Rm(e,n)}function jm(e,t){return Am(e,t)||wm(e,t)}function Jm(e,t){if(e.arguments)for(var r=0,n=e.arguments;r<n.length;r++){if(jm(t,n[r]))return!0}return!(208!==e.expression.kind||!jm(t,e.expression.expression))}function zm(e){return(!e.id||e.id<0)&&(e.id=d,d++),e.id}function Um(e,t){var r;if(e===t)return e;if(131072&t.flags)return t;var n="A".concat(T_(e),",").concat(T_(t));return null!==(r=Un(n))&&void 0!==r?r:Kn(n,function(e,t){var r=py(e,(function(e){return function(e,t){if(!(1048576&e.flags))return Vp(e,t);for(var r=0,n=e.types;r<n.length;r++)if(Vp(n[r],t))return!0;return!1}(t,e)})),n=512&t.flags&&Qd(t)?my(r,Hd):r;return Vp(t,n)?n:e}(e,t))}function Km(e){var t=qc(e);return!!(t.callSignatures.length||t.constructSignatures.length||t.members.get("bind")&&Kp(e,Wt))}function Vm(t){467927040&t.flags&&(t=ru(t)||Ke);var r=t.flags;if(268435460&r)return G?16317953:16776705;if(134217856&r){var n=128&r&&""===t.value;return G?n?12123649:7929345:n?12582401:16776705}if(40&r)return G?16317698:16776450;if(256&r){var i=0===t.value;return G?i?12123394:7929090:i?12582146:16776450}if(64&r)return G?16317188:16775940;if(2048&r){i=mg(t);return G?i?12122884:7928580:i?12581636:16775940}return 16&r?G?16316168:16774920:528&r?G?t===et||t===tt?12121864:7927560:t===et||t===tt?12580616:16774920:524288&r?16&e.getObjectFlags(t)&&uf(t)?G?83427327:83886079:Km(t)?G?7880640:16728e3:G?7888800:16736160:16384&r?9830144:32768&r?26607360:65536&r?42917664:12288&r?G?7925520:16772880:67108864&r?G?7888800:16736160:131072&r?0:1048576&r?e.reduceLeft(t.types,(function(e,t){return e|Vm(t)}),0):2097152&r?function(e){for(var t=Yx(e,131068),r=0,n=134217727,i=0,a=e.types;i<a.length;i++){var o=a[i];if(!(t&&524288&o.flags)){var s=Vm(o);r|=s,n&=s}}return 8256&r|134209471&n}(t):83886079}function qm(e,t){return py(e,(function(e){return 0!=(Vm(e)&t)}))}function Wm(e,t){var r=Hm(qm(G&&2&e.flags?Ft:e,t));if(G)switch(t){case 524288:return my(r,(function(e){return 65536&Vm(e)?j_([e,131072&Vm(e)&&!Yx(r,65536)?P_([Ct,Qe]):Ct]):e}));case 1048576:return my(r,(function(e){return 131072&Vm(e)?j_([e,65536&Vm(e)&&!Yx(r,32768)?P_([Ct,qe]):Ct]):e}));case 2097152:case 4194304:return my(r,(function(e){return 262144&Vm(e)?function(e){return ar||(ar=Hl("NonNullable",524288,void 0)||we),ar!==we?kl(ar,[e]):j_([e,Ct])}(e):e}))}return r}function Hm(e){return e===Ft?Ke:e}function Gm(e,t){return t?P_([Po(e),AD(t)]):e}function Qm(e,t){var r,n=W_(t);if(!tc(n))return je;var i=oc(n);return Co(e,i)||Ym(null===(r=Iu(e,i))||void 0===r?void 0:r.type)||je}function Xm(e,t){return dy(e,eg)&&function(e,t){var r=Co(e,""+t);return r||(dy(e,_g)?my(e,(function(e){return fg(e)||qe})):void 0)}(e,t)||Ym(eT(65,e,qe,void 0))||je}function Ym(e){return e&&K.noUncheckedIndexedAccess?P_([e,qe]):e}function Zm(e){return u_(eT(65,e,qe,void 0)||je)}function $m(e){return 223===e.parent.kind&&e.parent.left===e||247===e.parent.kind&&e.parent.initializer===e}function ey(e){return Qm(ty(e.parent),e.name)}function ty(e){var t=e.parent;switch(t.kind){case 246:return Ye;case 247:return $S(t)||je;case 223:return function(e){return 206===e.parent.kind&&$m(e.parent)||299===e.parent.kind&&$m(e.parent.parent)?Gm(ty(e),e.right):AD(e.right)}(t);case 217:return qe;case 206:return function(e,t){return Xm(ty(e),e.elements.indexOf(t))}(t,e);case 227:return function(e){return Zm(ty(e.parent))}(t);case 299:return ey(t);case 300:return function(e){return Gm(ey(e),e.objectAssignmentInitializer)}(t)}return je}function ry(e){return di(e).resolvedType||AD(e)}function ny(e){return 257===e.kind?function(e){return e.initializer?ry(e.initializer):246===e.parent.parent.kind?Ye:247===e.parent.parent.kind&&$S(e.parent.parent)||je}(e):function(e){var t=e.parent,r=ny(t.parent);return Gm(203===t.kind?Qm(r,e.propertyName||e.name):e.dotDotDotToken?Zm(r):Xm(r,t.elements.indexOf(e)),e.initializer)}(e)}function iy(e){switch(e.kind){case 214:return iy(e.expression);case 223:switch(e.operatorToken.kind){case 63:case 75:case 76:case 77:return iy(e.left);case 27:return iy(e.right)}}return e}function ay(e){var t=e.parent;return 214===t.kind||223===t.kind&&63===t.operatorToken.kind&&t.left===e||223===t.kind&&27===t.operatorToken.kind&&t.right===e?ay(t):e}function oy(e){return 292===e.kind?Gd(AD(e.expression)):ct}function sy(e){var t=di(e);if(!t.switchTypes){t.switchTypes=[];for(var r=0,n=e.caseBlock.clauses;r<n.length;r++){var i=n[r];t.switchTypes.push(oy(i))}}return t.switchTypes}function cy(t){if(!e.some(t.caseBlock.clauses,(function(t){return 292===t.kind&&!e.isStringLiteralLike(t.expression)}))){for(var r=[],n=0,i=t.caseBlock.clauses;n<i.length;n++){var a=i[n],o=292===a.kind?a.expression.text:void 0;r.push(o&&!e.contains(r,o)?o:void 0)}return r}}function uy(e,t){return e===t||1048576&t.flags&&function(e,t){if(1048576&e.flags){for(var r=0,n=e.types;r<n.length;r++){var i=n[r];if(!C_(t.types,i))return!1}return!0}if(1024&e.flags&&zs(e)===t)return!0;return C_(t.types,e)}(e,t)}function ly(t,r){return 1048576&t.flags?e.forEach(t.types,r):r(t)}function _y(t,r){return 1048576&t.flags?e.some(t.types,r):r(t)}function dy(t,r){return 1048576&t.flags?e.every(t.types,r):r(t)}function py(t,r){if(1048576&t.flags){var n=t.types,i=e.filter(n,r);if(i===n)return t;var a=t.origin,o=void 0;if(a&&1048576&a.flags){var s=a.types,c=e.filter(s,(function(e){return!!(1048576&e.flags)||r(e)}));if(s.length-c.length==n.length-i.length){if(1===c.length)return c[0];o=F_(1048576,c)}}return I_(i,t.objectFlags,void 0,void 0,o)}return 131072&t.flags||r(t)?t:ct}function fy(e,t){return py(e,(function(e){return e!==t}))}function gy(e){return 1048576&e.flags?e.types.length:1}function my(e,t,r){if(131072&e.flags)return e;if(!(1048576&e.flags))return t(e);for(var n,i=e.origin,a=!1,o=0,s=i&&1048576&i.flags?i.types:e.types;o<s.length;o++){var c=s[o],u=1048576&c.flags?my(c,t,r):t(c);a||(a=c!==u),u&&(n?n.push(u):n=[u])}return a?n&&P_(n,r?0:1):e}function yy(t,r,n,i){return 1048576&t.flags&&n?P_(e.map(t.types,r),1,n,i):my(t,r)}function vy(e,t){return py(e,(function(e){return 0!=(e.flags&t)}))}function hy(e,t){return Yx(e,134217804)&&Yx(t,402655616)?my(e,(function(e){return 4&e.flags?vy(t,402653316):_d(e)&&!Yx(t,402653188)?vy(t,128):8&e.flags?vy(t,264):64&e.flags?vy(t,2112):e})):e}function by(e){return 0===e.flags}function xy(e){return 0===e.flags?e.type:e}function Dy(e,t){return t?{flags:0,type:131072&e.flags?ut:e}:e}function Sy(e){return Ae[e.id]||(Ae[e.id]=function(e){var t=Ma(256);return t.elementType=e,t}(e))}function Ty(e,t){var r=Pg(og(PD(t)));return uy(r,e.elementType)?e:Sy(P_([e.elementType,r]))}function Cy(e){return e.finalArrayType||(e.finalArrayType=131072&(t=e.elementType).flags?nr:u_(1048576&t.flags?P_(t.types,2):t));var t}function Ey(t){return 256&e.getObjectFlags(t)?Cy(t):t}function ky(t){return 256&e.getObjectFlags(t)?t.elementType:ct}function Ny(t){var r=ay(t),n=r.parent,i=e.isPropertyAccessExpression(n)&&("length"===n.name.escapedText||210===n.parent.kind&&e.isIdentifier(n.name)&&e.isPushOrUnshiftIdentifier(n.name)),a=209===n.kind&&n.expression===r&&223===n.parent.kind&&63===n.parent.operatorToken.kind&&n.parent.left===n&&!e.isAssignmentTarget(n.parent)&&Zx(AD(n.argumentExpression),296);return i||a}function Ay(t,r){if(8752&(t=Qi(t)).flags)return ys(t);if(7&t.flags){if(262144&e.getCheckFlags(t)){var n=t.syntheticOrigin;if(n&&Ay(n))return ys(t)}var i=t.valueDeclaration;if(i){if(s=i,(e.isVariableDeclaration(s)||e.isPropertyDeclaration(s)||e.isPropertySignature(s)||e.isParameter(s))&&(e.getEffectiveTypeAnnotationNode(s)||e.isInJSFile(s)&&e.hasInitializer(s)&&s.initializer&&e.isFunctionExpressionOrArrowFunction(s.initializer)&&e.getEffectiveReturnTypeNode(s.initializer)))return ys(t);if(e.isVariableDeclaration(i)&&247===i.parent.parent.kind){var a=i.parent.parent,o=Fy(a.expression,void 0);if(o)return eT(a.awaitModifier?15:13,o,qe,void 0)}r&&e.addRelatedInfo(r,e.createDiagnosticForNode(i,e.Diagnostics._0_needs_an_explicit_type_annotation,no(t)))}}var s}function Fy(t,r){if(!(33554432&t.flags))switch(t.kind){case 79:return Ay(Aa(Em(t)),r);case 108:return function(t){var r=e.getThisContainer(t,!1);if(e.isFunctionLike(r)){var n=Ku(r);if(n.thisParameter)return Ay(n.thisParameter)}if(e.isClassLike(r.parent)){var i=Sa(r.parent);return e.isStatic(r)?ys(i):qs(i).thisType}}(t);case 106:return nv(t);case 208:var n=Fy(t.expression,r);if(n){var i=t.name,a=void 0;if(e.isPrivateIdentifier(i)){if(!n.symbol)return;a=xu(n,e.getSymbolNameForPrivateIdentifier(n.symbol,i.escapedText))}else a=xu(n,i.escapedText);return a&&Ay(a,r)}return;case 214:return Fy(t.expression,r)}}function Py(t){var r=di(t),n=r.effectsSignature;if(void 0===n){var i=void 0;241===t.parent.kind?i=Fy(t.expression,void 0):106!==t.expression.kind&&(i=e.isOptionalChain(t)?Ch(Cg(wD(t.expression),t.expression),t.expression):hh(t.expression));var a=Su(i&&_u(i)||Ke,0),o=1!==a.length||a[0].typeParameters?e.some(a,wy)?Wb(t):void 0:a[0];n=r.effectsSignature=o&&wy(o)?o:zr}return n===zr?void 0:n}function wy(e){return!!(Qu(e)||e.declaration&&131072&(Zu(e.declaration)||Ke).flags)}function Iy(e){var t=My(e,!1);return Or=e,Mr=t,t}function Oy(t){var r=e.skipParentheses(t,!0);return 95===r.kind||223===r.kind&&(55===r.operatorToken.kind&&(Oy(r.left)||Oy(r.right))||56===r.operatorToken.kind&&Oy(r.left)&&Oy(r.right))}function My(t,r){for(;;){if(t===Or)return Mr;var n=t.flags;if(4096&n){if(!r){var i=zm(t),a=Sn[i];return void 0!==a?a:Sn[i]=My(t,!0)}r=!1}if(368&n)t=t.antecedent;else if(512&n){var o=Py(t.node);if(o){var s=Qu(o);if(s&&3===s.kind&&!s.type){var c=t.node.arguments[s.parameterIndex];if(c&&Oy(c))return!1}if(131072&Yu(o).flags)return!1}t=t.antecedent}else{if(4&n)return e.some(t.antecedents,(function(e){return My(e,!1)}));if(8&n){var u=t.antecedents;if(void 0===u||0===u.length)return!1;t=u[0]}else{if(!(128&n)){if(1024&n){Or=void 0;var l=t.target,_=l.antecedents;l.antecedents=t.antecedents;var d=My(t.antecedent,!1);return l.antecedents=_,d}return!(1&n)}if(t.clauseStart===t.clauseEnd&&Rx(t.switchStatement))return!1;t=t.antecedent}}}}function Ly(t,r){for(;;){var n=t.flags;if(4096&n){if(!r){var i=zm(t),a=Tn[i];return void 0!==a?a:Tn[i]=Ly(t,!0)}r=!1}if(496&n)t=t.antecedent;else if(512&n){if(106===t.node.expression.kind)return!0;t=t.antecedent}else{if(4&n)return e.every(t.antecedents,(function(e){return Ly(e,!1)}));if(!(8&n)){if(1024&n){var o=t.target,s=o.antecedents;o.antecedents=t.antecedents;var c=Ly(t.antecedent,!1);return o.antecedents=s,c}return!!(1&n)}t=t.antecedents[0]}}}function Ry(t){switch(t.kind){case 79:var r=Em(t);return Uy(r)||e.isParameterOrCatchClauseVariable(r)&&!Jy(r);case 208:case 209:return Ry(t.expression)&&Vx(di(t).resolvedSymbol||we)}return!1}function By(t,r,n,i,a){var o;void 0===n&&(n=r),void 0===a&&(a=t.flowNode);var s=!1,c=0;if(an)return je;if(!a)return r;on++;var u=nn,l=xy(p(a));nn=u;var _=256&e.getObjectFlags(l)&&Ny(t)?nr:Ey(l);return _===_t||t.parent&&232===t.parent.kind&&!(131072&_.flags)&&131072&qm(_,2097152).flags?r:_===Ve?Ke:_;function d(){return s?o:(s=!0,o=Nm(t,r,n,i))}function p(a){if(2e3===c)return null===e.tracing||void 0===e.tracing||e.tracing.instant("checkTypes","getTypeAtFlowNode_DepthLimit",{flowId:a.id}),an=!0,o=t,s=e.findAncestor(o,e.isFunctionOrModuleBlock),l=e.getSourceFileOfNode(o),_=e.getSpanOfTokenAtPosition(l,s.statements.pos),Pn.add(e.createFileDiagnostic(l,_.start,_.length,e.Diagnostics.The_containing_function_or_module_body_is_too_large_for_control_flow_analysis)),je;var o,s,l,_,d;for(c++;;){var f=a.flags;if(4096&f){for(var m=u;m<nn;m++)if(xn[m]===a)return c--,Dn[m];d=a}var b=void 0;if(16&f){if(!(b=g(a))){a=a.antecedent;continue}}else if(512&f){if(!(b=y(a))){a=a.antecedent;continue}}else if(96&f)b=h(a);else if(128&f)b=x(a);else if(12&f){if(1===a.antecedents.length){a=a.antecedents[0];continue}b=4&f?D(a):S(a)}else if(256&f){if(!(b=v(a))){a=a.antecedent;continue}}else if(1024&f){var T=a.target,C=T.antecedents;T.antecedents=a.antecedents,b=p(a.antecedent),T.antecedents=C}else if(2&f){var E=a.node;if(E&&E!==i&&208!==t.kind&&209!==t.kind&&108!==t.kind){a=E.flowNode;continue}b=n}else b=zS(r);return d&&(xn[nn]=d,Dn[nn]=b,nn++),c--,b}}function f(e){var r=e.node;return qy(257===r.kind||205===r.kind?ny(r):ty(r),t)}function g(n){var i=n.node;if(Am(t,i)){if(!Iy(n))return _t;if(2===e.getAssignmentTargetKind(i)){var a=p(n.antecedent);return Dy(og(xy(a)),by(a))}if(r===Re||r===nr){if(function(e){return 257===e.kind&&e.initializer&&Bo(e.initializer)||205!==e.kind&&223===e.parent.kind&&Bo(e.parent.right)}(i))return Sy(ct);var o=sg(f(n));return Vp(o,r)?o:rr}return 1048576&r.flags?Um(r,f(n)):r}if(wm(t,i)){if(!Iy(n))return _t;if(e.isVariableDeclaration(i)&&(e.isInJSFile(i)||e.isVarConst(i))){var s=e.getDeclaredExpandoInitializer(i);if(s&&(215===s.kind||216===s.kind))return p(n.antecedent)}return r}if(e.isVariableDeclaration(i)&&246===i.parent.parent.kind&&Am(t,i.parent.parent.expression))return xh(Ey(xy(p(n.antecedent))))}function m(t,r){var n=e.skipParentheses(r,!0);if(95===n.kind)return _t;if(223===n.kind){if(55===n.operatorToken.kind)return m(m(t,n.left),n.right);if(56===n.operatorToken.kind)return P_([m(t,n.left),m(t,n.right)])}return q(t,n,!0)}function y(e){var t=Py(e.node);if(t){var r=Qu(t);if(r&&(2===r.kind||3===r.kind)){var n=p(e.antecedent),i=Ey(xy(n)),a=r.type?V(i,r,e.node,!0):3===r.kind&&r.parameterIndex>=0&&r.parameterIndex<e.node.arguments.length?m(i,e.node.arguments[r.parameterIndex]):i;return a===i?n:Dy(a,by(n))}if(131072&Yu(t).flags)return _t}}function v(n){if(r===Re||r===nr){var i=n.node,a=210===i.kind?i.expression.expression:i.left.expression;if(Am(t,iy(a))){var o=p(n.antecedent),s=xy(o);if(256&e.getObjectFlags(s)){var c=s;if(210===i.kind)for(var u=0,l=i.arguments;u<l.length;u++){c=Ty(c,l[u])}else Zx(PD(i.left.argumentExpression),296)&&(c=Ty(c,i.right));return c===s?o:Dy(c,by(o))}return o}}}function h(e){var t=p(e.antecedent),r=xy(t);if(131072&r.flags)return t;var n=0!=(32&e.flags),i=Ey(r),a=q(i,e.node,n);return a===i?t:Dy(a,by(t))}function x(r){var n=r.switchStatement.expression,i=p(r.antecedent),a=xy(i);if(Am(t,n))a=R(a,r.switchStatement,r.clauseStart,r.clauseEnd);else if(218===n.kind&&Am(t,n.expression))a=function(t,r,n,i){var a=cy(r);if(!a)return t;var o=e.findIndex(r.caseBlock.clauses,(function(e){return 293===e.kind}));if(n===i||o>=n&&o<i){var s=Lx(n,i,a);return py(t,(function(e){return(Vm(e)&s)===s}))}var c=a.slice(n,i);return P_(e.map(c,(function(e){return e?B(t,e):ct})))}(a,r.switchStatement,r.clauseStart,r.clauseEnd);else{G&&(Im(n,t)?a=L(a,r.switchStatement,r.clauseStart,r.clauseEnd,(function(e){return!(163840&e.flags)})):218===n.kind&&Im(n.expression,t)&&(a=L(a,r.switchStatement,r.clauseStart,r.clauseEnd,(function(e){return!(131072&e.flags||128&e.flags&&"undefined"===e.value)}))));var o=C(n,a);o&&(a=function(t,r,n,i,a){if(i<a&&1048576&t.flags&&Lm(t)===Fm(r)){var o=sy(n).slice(i,a),s=P_(e.map(o,(function(e){return Rm(t,e)||Ke})));if(s!==Ke)return s}return E(t,r,(function(e){return R(e,n,i,a)}))}(a,o,r.switchStatement,r.clauseStart,r.clauseEnd))}return Dy(a,by(i))}function D(t){for(var i,a=[],o=!1,s=!1,c=0,u=t.antecedents;c<u.length;c++){var l=u[c];if(!i&&128&l.flags&&l.clauseStart===l.clauseEnd)i=l;else{if((d=xy(_=p(l)))===r&&r===n)return d;e.pushIfUnique(a,d),uy(d,r)||(o=!0),by(_)&&(s=!0)}}if(i){var _,d=xy(_=p(i));if(!e.contains(a,d)&&!Rx(i.switchStatement)){if(d===r&&r===n)return d;a.push(d),uy(d,r)||(o=!0),by(_)&&(s=!0)}}return Dy(T(a,o?2:1),s)}function S(t){var n=zm(t),i=yn[n]||(yn[n]=new e.Map),a=d();if(!a)return r;var o=i.get(a);if(o)return o;for(var s=tn;s<rn;s++)if(vn[s]===t&&hn[s]===a&&bn[s].length)return Dy(T(bn[s],1),!0);for(var c,u=[],l=!1,_=0,f=t.antecedents;_<f.length;_++){var g=f[_],m=void 0;if(c){vn[rn]=t,hn[rn]=a,bn[rn]=u,rn++;var y=Lr;Lr=void 0,m=p(g),Lr=y,rn--;var v=i.get(a);if(v)return v}else m=c=p(g);var h=xy(m);if(e.pushIfUnique(u,h),uy(h,r)||(l=!0),h===r)break}var b=T(u,l?2:1);return by(c)?Dy(b,!0):(i.set(a,b),b)}function T(t,n){if(function(t){for(var r=!1,n=0,i=t;n<i.length;n++){var a=i[n];if(!(131072&a.flags)){if(!(256&e.getObjectFlags(a)))return!1;r=!0}}return r}(t))return Sy(P_(e.map(t,ky)));var i=Hm(P_(e.sameMap(t,Ey),n));return i!==r&&i.flags&r.flags&1048576&&e.arraysEqual(i.types,r.types)?r:i}function C(n,i){var a=1048576&r.flags?r:i;if(1048576&a.flags){var o=function(r){if(e.isBindingPattern(t)||e.isFunctionExpressionOrArrowFunction(t)||e.isObjectLiteralMethod(t)){if(e.isIdentifier(r)&&(i=(n=Em(r)).valueDeclaration)&&(e.isBindingElement(i)||e.isParameter(i))&&t===i.parent&&!i.initializer&&!i.dotDotDotToken)return i}else if(e.isAccessExpression(r)){if(Am(t,r.expression))return r}else if(e.isIdentifier(r)){var n;if(Uy(n=Em(r))){var i=n.valueDeclaration;if(e.isVariableDeclaration(i)&&!i.type&&i.initializer&&e.isAccessExpression(i.initializer)&&Am(t,i.initializer.expression))return i.initializer;if(e.isBindingElement(i)&&!i.initializer){var a=i.parent.parent;if(e.isVariableDeclaration(a)&&!a.type&&a.initializer&&(e.isIdentifier(a.initializer)||e.isAccessExpression(a.initializer))&&Am(t,a.initializer))return i}}}}(n);if(o){var s=Fm(o);if(s&&Om(a,s))return o}}}function E(t,r,n){var i=Fm(r);if(void 0===i)return t;var a=G&&e.isOptionalChain(r)&&Yx(t,98304),o=Co(a?qm(t,2097152):t,i);if(!o)return t;var s=n(o=a?bg(o):o);return py(t,(function(e){var t=function(e,t){var r;return Co(e,t)||(null===(r=Iu(e,t))||void 0===r?void 0:r.type)||Ke}(e,i);return!(131072&t.flags)&&!(131072&s.flags)&&Hp(s,t)}))}function k(e,t,r,n,i){if((36===r||37===r)&&1048576&e.flags){var a=Lm(e);if(a&&a===Fm(t)){var o=Rm(e,AD(n));if(o)return r===(i?36:37)?o:ng(Co(o,a)||Ke)?fy(e,o):e}}return E(e,t,(function(e){return I(e,r,n,i)}))}function N(e,r,n){if(Am(t,r))return Wm(e,n?4194304:8388608);G&&n&&Im(r,t)&&(e=Wm(e,2097152));var i=C(r,e);return i?E(e,i,(function(e){return qm(e,n?4194304:8388608)})):e}function A(e,t,r){var n=xu(e,t);return n?!!(16777216&n.flags)||r:!!Iu(e,t)||!r}function F(e,t,r){var n=oc(t);if(_y(e,(function(e){return A(e,n,!0)})))return py(e,(function(e){return A(e,n,r)}));if(r){var i=(Ir||(Ir=Wl("Record",2,!0)||we),Ir===we?void 0:Ir);if(i)return j_([e,kl(i,[t,Ke])])}return e}function P(r,n,i){switch(n.operatorToken.kind){case 63:case 75:case 76:case 77:return N(q(r,n.right,i),n.left,i);case 34:case 35:case 36:case 37:var a=n.operatorToken.kind,o=iy(n.left),s=iy(n.right);if(218===o.kind&&e.isStringLiteralLike(s))return O(r,o,a,s,i);if(218===s.kind&&e.isStringLiteralLike(o))return O(r,s,a,o,i);if(Am(t,o))return I(r,a,s,i);if(Am(t,s))return I(r,a,o,i);G&&(Im(o,t)?r=w(r,a,s,i):Im(s,t)&&(r=w(r,a,o,i)));var c=C(o,r);if(c)return k(r,c,a,s,i);var u=C(s,r);if(u)return k(r,u,a,o,i);if(z(o))return U(r,a,s,i);if(z(s))return U(r,a,o,i);break;case 102:return function(r,n,i){var a=iy(n.left);if(!Am(t,a))return i&&G&&Im(a,t)?Wm(r,2097152):r;var o,s=AD(n.right);if(!qp(s,Wt))return r;var c=xu(s,"prototype");if(c){var u=ys(c);Eo(u)||(o=u)}if(Eo(r)&&(o===qt||o===Wt))return r;if(!o){var l=Su(s,1);o=l.length?P_(e.map(l,(function(e){return Yu(il(e))}))):Ct}if(!i&&1048576&s.flags){if(!e.find(s.types,(function(e){return!ks(e)})))return r}return K(r,o,i,!0)}(r,n,i);case 101:if(e.isPrivateIdentifier(n.left))return function(r,n,i){var a=iy(n.right);if(!Am(t,a))return r;e.Debug.assertNode(n.left,e.isPrivateIdentifier);var o=wh(n.left);if(void 0===o)return r;var s=o.parent,c=e.hasStaticModifier(e.Debug.checkDefined(o.valueDeclaration,"should always have a declaration"))?ys(s):qs(s);return K(r,c,i,!0)}(r,n,i);var l=iy(n.right),_=AD(n.left);if(8576&_.flags){if(kg(r)&&e.isAccessExpression(t)&&Am(t.expression,l)&&Fm(t)===oc(_))return qm(r,i?524288:65536);if(Am(t,l))return F(r,_,i)}break;case 27:return q(r,n.right,i);case 55:return i?q(q(r,n.left,!0),n.right,!0):P_([q(r,n.left,!1),q(r,n.right,!1)]);case 56:return i?P_([q(r,n.left,!0),q(r,n.right,!0)]):q(q(r,n.left,!1),n.right,!1)}return r}function w(e,t,r,n){var i=34===t||36===t,a=34===t||35===t?98304:32768,o=AD(r);return i!==n&&dy(o,(function(e){return!!(e.flags&a)}))||i===n&&dy(o,(function(e){return!(e.flags&(3|a))}))?Wm(e,2097152):e}function I(e,t,r,n){if(1&e.flags)return e;35!==t&&37!==t||(n=!n);var i=AD(r),a=34===t||35===t;if(98304&i.flags)return G?Wm(e,a?n?262144:2097152:65536&i.flags?n?131072:1048576:n?65536:524288):e;if(n){if(!a&&(2&e.flags||_y(e,lf))){if(67239932&i.flags||lf(i))return i;if(524288&i.flags)return dt}return hy(py(e,(function(e){return Hp(e,i)||a&&(t=i,0!=(524&e.flags)&&0!=(28&t.flags));var t})),i)}return ng(i)?py(e,(function(e){return!(ig(e)&&Hp(e,i))})):e}function O(e,r,n,i,a){35!==n&&37!==n||(a=!a);var o=iy(r.expression);if(!Am(t,o)){var s=C(r.expression,e);return s?E(e,s,(function(e){return M(e,i,a)})):G&&Im(o,t)&&a===("undefined"!==i.text)?Wm(e,2097152):e}return M(e,i,a)}function M(e,t,r){return r?B(e,t.text):qm(e,b.get(t.text)||32768)}function L(t,r,n,i,a){return n!==i&&e.every(sy(r).slice(n,i),a)?qm(t,2097152):t}function R(t,r,n,i){var a=sy(r);if(!a.length)return t;var o=a.slice(n,i),s=n===i||e.contains(o,ct);if(2&t.flags&&!s){for(var c=void 0,u=0;u<o.length;u+=1){var l=o[u];if(67239932&l.flags)void 0!==c&&c.push(l);else{if(!(524288&l.flags))return t;void 0===c&&(c=o.slice(0,u)),c.push(dt)}}return P_(void 0===c?o:c)}var _=P_(o),d=131072&_.flags?ct:hy(py(t,(function(e){return Hp(_,e)})),_);if(!s)return d;var p=py(t,(function(t){return!(ig(t)&&e.contains(a,Gd(function(t){return 2097152&t.flags&&e.find(t.types,ng)||t}(t))))}));return 131072&d.flags?p:P_([d,p])}function B(e,t){switch(t){case"string":return j(e,Ye,1);case"number":return j(e,Ze,2);case"bigint":return j(e,$e,4);case"boolean":return j(e,at,8);case"symbol":return j(e,ot,16);case"object":return 1&e.flags?e:P_([j(e,dt,32),j(e,Qe,131072)]);case"function":return 1&e.flags?e:j(e,Wt,64);case"undefined":return j(e,qe,65536)}return j(e,dt,128)}function j(e,t,r){return my(e,(function(e){return gf(e,t,Mn)?Vm(e)&r?e:ct:Kp(t,e)?t:Vm(e)&r?j_([e,t]):ct}))}function z(r){return(e.isPropertyAccessExpression(r)&&"constructor"===e.idText(r.name)||e.isElementAccessExpression(r)&&e.isStringLiteralLike(r.argumentExpression)&&"constructor"===r.argumentExpression.text)&&Am(t,r.expression)}function U(t,r,n,i){if(i?34!==r&&36!==r:35!==r&&37!==r)return t;var a=AD(n);if(!iE(a)&&!ks(a))return t;var o=xu(a,"prototype");if(!o)return t;var s=ys(o),c=Eo(s)?void 0:s;return c&&c!==qt&&c!==Wt?Eo(t)?c:py(t,(function(t){return function(t,r){if(524288&t.flags&&1&e.getObjectFlags(t)||524288&r.flags&&1&e.getObjectFlags(r))return t.symbol===r.symbol;return Kp(t,r)}(t,c)})):t}function K(e,t,r,n){var i,a=1048576&e.flags?"N".concat(T_(e),",").concat(T_(t),",").concat((r?1:0)|(n?2:0)):void 0;return null!==(i=Un(a))&&void 0!==i?i:Kn(a,function(e,t,r,n){var i=n?qp:Kp;if(!r)return py(e,(function(e){return!i(e,t)}));if(3&e.flags)return t;var a=1048576&e.flags?Lm(e):void 0,o=my(t,(function(t){var r=a&&Co(t,a),o=my(r&&Rm(e,r)||e,n?function(e){return qp(e,t)?e:qp(t,e)?t:ct}:function(e){return Kp(t,e)?t:Kp(e,t)?e:ct});return 131072&o.flags?my(e,(function(e){return Yx(e,465829888)&&i(t,ru(e)||Ke)?j_([e,t]):ct})):o}));return 131072&o.flags?Kp(t,e)?t:Vp(e,t)?e:Vp(t,e)?t:j_([e,t]):o}(e,t,r,n))}function V(r,n,i,a){if(n.type&&(!Eo(r)||n.type!==qt&&n.type!==Wt)){var o=function(t,r){if(1===t.kind||3===t.kind)return r.arguments[t.parameterIndex];var n=e.skipParentheses(r.expression);return e.isAccessExpression(n)?e.skipParentheses(n.expression):void 0}(n,i);if(o){if(Am(t,o))return K(r,n.type,a,!1);G&&a&&Im(o,t)&&!(65536&Vm(n.type))&&(r=Wm(r,2097152));var s=C(o,r);if(s)return E(r,s,(function(e){return K(e,n.type,a,!1)}))}}return r}function q(r,n,i){if(e.isExpressionOfOptionalChainRoot(n)||e.isBinaryExpression(n.parent)&&60===n.parent.operatorToken.kind&&n.parent.left===n)return function(e,r,n){if(Am(t,r))return Wm(e,n?2097152:262144);var i=C(r,e);if(i)return E(e,i,(function(e){return qm(e,n?2097152:262144)}));return e}(r,n,i);switch(n.kind){case 79:if(!Am(t,n)&&J<5){var a=Em(n);if(Uy(a)){var o=a.valueDeclaration;if(o&&e.isVariableDeclaration(o)&&!o.type&&o.initializer&&Ry(t)){J++;var s=q(r,o.initializer,i);return J--,s}}}case 108:case 106:case 208:case 209:return N(r,n,i);case 210:return function(r,n,i){if(Jm(n,t)){var a=i||!e.isCallChain(n)?Py(n):void 0,o=a&&Qu(a);if(o&&(0===o.kind||1===o.kind))return V(r,o,n,i)}if(kg(r)&&e.isAccessExpression(t)&&e.isPropertyAccessExpression(n.expression)){var s=n.expression;if(Am(t.expression,iy(s.expression))&&e.isIdentifier(s.name)&&"hasOwnProperty"===s.name.escapedText&&1===n.arguments.length){var c=n.arguments[0];if(e.isStringLiteralLike(c)&&Fm(t)===e.escapeLeadingUnderscores(c.text))return qm(r,i?524288:65536)}}return r}(r,n,i);case 214:case 232:return q(r,n.expression,i);case 223:return P(r,n,i);case 221:if(53===n.operator)return q(r,n.operand,!i)}return r}}function jy(t){return e.findAncestor(t.parent,(function(t){return e.isFunctionLike(t)&&!e.getImmediatelyInvokedFunctionExpression(t)||265===t.kind||308===t.kind||169===t.kind}))}function Jy(t){if(!t.valueDeclaration)return!1;var r,n=e.getRootDeclaration(t.valueDeclaration).parent,i=di(n);return 8388608&i.flags||(i.flags|=8388608,r=n,e.findAncestor(r.parent,(function(t){return(e.isFunctionLike(t)||e.isCatchClause(t))&&!!(8388608&di(t).flags)}))||zy(n)),t.isAssigned||!1}function zy(t){if(79===t.kind){if(e.isAssignmentTarget(t)){var r=Em(t);e.isParameterOrCatchClauseVariable(r)&&(r.isAssigned=!0)}}else e.forEachChild(t,zy)}function Uy(e){return 3&e.flags&&0!=(2&fh(e))}function Ky(t){return 2097152&t.flags?e.some(t.types,Ky):!!(465829888&t.flags&&1146880&nu(t).flags)}function Vy(t){return 2097152&t.flags?e.some(t.types,Vy):!(!(465829888&t.flags)||Yx(nu(t),98304))}function qy(t,r,n){var i=!(n&&2&n)&&_y(t,Ky)&&(function(e,t){var r=t.parent;return 208===r.kind||163===r.kind||210===r.kind&&r.expression===t||209===r.kind&&r.expression===t&&!(_y(e,Vy)&&fd(AD(r.argumentExpression)))}(t,r)||function(t,r){var n=(e.isIdentifier(t)||e.isPropertyAccessExpression(t)||e.isElementAccessExpression(t))&&!((e.isJsxOpeningElement(t.parent)||e.isJsxSelfClosingElement(t.parent))&&t.parent.tagName===t)&&Nv(t,r&&64&r?8:void 0);return n&&!dd(n)}(r,n));return i?my(t,nu):t}function Wy(t){return!!e.findAncestor(t,(function(t){var r=t.parent;return void 0===r?"quit":e.isExportAssignment(r)?r.expression===t&&e.isEntityNameExpression(t):!!e.isExportSpecifier(r)&&(r.name===t||r.propertyName===t)}))}function Hy(t,r){if(Gi(t,111551)&&!km(r)&&!ea(t,111551)){var n=Xi(t);1160127&Yi(n)&&(K.isolatedModules||e.shouldPreserveConstEnums(K)&&Wy(r)||!HC(Aa(n))?ra(t):function(e){var t=_i(e);t.constEnumReferenced||(t.constEnumReferenced=!0)}(t))}}function Gy(t,r){if(e.isThisInTypeQuery(t))return ev(t);var n=Em(t);if(n===we)return je;if(n===_e){if(Bh(t))return Qn(t,e.Diagnostics.arguments_cannot_be_referenced_in_property_initializers),je;var i=e.getContainingFunction(t);return V<2&&(216===i.kind?Qn(t,e.Diagnostics.The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES3_and_ES5_Consider_using_a_standard_function_expression):e.hasSyntacticModifier(i,512)&&Qn(t,e.Diagnostics.The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES3_and_ES5_Consider_using_a_standard_function_or_method)),di(i).flags|=8192,ys(n)}(function(t){var r,n=t.parent;if(n){if(e.isPropertyAccessExpression(n)&&n.expression===t)return!1;if(e.isExportSpecifier(n)&&n.isTypeOnly)return!1;var i=null===(r=n.parent)||void 0===r?void 0:r.parent;if(i&&e.isExportDeclaration(i)&&i.isTypeOnly)return!1}return!0})(t)&&Hy(n,t);var a=Aa(n),o=tC(a,t);ei(o)&&sd(t,o)&&o.declarations&&ti(t,o.declarations,t.escapedText);var s=a.valueDeclaration;if(s&&32&a.flags)if(260===s.kind&&e.nodeIsDecorated(s))for(i=e.getContainingClass(t);void 0!==i;){if(i===s&&i.name!==t){di(s).flags|=16777216,di(t).flags|=33554432;break}i=e.getContainingClass(i)}else if(228===s.kind)for(i=e.getThisContainer(t,!1);308!==i.kind;){if(i.parent===s){(e.isPropertyDeclaration(i)&&e.isStatic(i)||e.isClassStaticBlockDeclaration(i))&&(di(s).flags|=16777216,di(t).flags|=33554432);break}i=e.getThisContainer(i,!1)}!function(t,r){if(V>=2||0==(34&r.flags)||!r.valueDeclaration||e.isSourceFile(r.valueDeclaration)||295===r.valueDeclaration.parent.kind)return;var n=e.getEnclosingBlockScopeContainer(r.valueDeclaration),i=function(t,r){return!!e.findAncestor(t,(function(t){return t===r?"quit":e.isFunctionLike(t)||t.parent&&e.isPropertyDeclaration(t.parent)&&!e.hasStaticModifier(t.parent)&&t.parent.initializer===t}))}(t,n),a=Qy(n);if(a){if(i){var o=!0;if(e.isForStatement(n))if((l=e.getAncestor(r.valueDeclaration,258))&&l.parent===n){var s=function(t,r){return e.findAncestor(t,(function(e){return e===r?"quit":e===r.initializer||e===r.condition||e===r.incrementor||e===r.statement}))}(t.parent,n);if(s){var c=di(s);c.flags|=131072;var u=c.capturedBlockScopeBindings||(c.capturedBlockScopeBindings=[]);e.pushIfUnique(u,r),s===n.initializer&&(o=!1)}}o&&(di(a).flags|=65536)}var l;if(e.isForStatement(n))(l=e.getAncestor(r.valueDeclaration,258))&&l.parent===n&&function(t,r){var n=t;for(;214===n.parent.kind;)n=n.parent;var i=!1;if(e.isAssignmentTarget(n))i=!0;else if(221===n.parent.kind||222===n.parent.kind){var a=n.parent;i=45===a.operator||46===a.operator}if(!i)return!1;return!!e.findAncestor(n,(function(e){return e===r?"quit":e===r.statement}))}(t,n)&&(di(r.valueDeclaration).flags|=4194304);di(r.valueDeclaration).flags|=524288}i&&(di(r.valueDeclaration).flags|=262144)}(t,n);var c=function(t,r){var n=t.valueDeclaration;if(n){if(e.isBindingElement(n)&&!n.initializer&&!n.dotDotDotToken&&n.parent.elements.length>=2){var i=n.parent.parent;if(257===i.kind&&2&e.getCombinedNodeFlags(n)||166===i.kind){var a=di(i);if(!(268435456&a.flags)){a.flags|=268435456;var o=No(i,0),s=o&&my(o,nu);if(a.flags&=-268435457,s&&1048576&s.flags&&(166!==i.kind||!Jy(t)))return 131072&(l=By(n.parent,s,s,void 0,r.flowNode)).flags?ct:Lo(n,l)}}}if(e.isParameter(n)&&!n.type&&!n.initializer&&!n.dotDotDotToken){var c=n.parent;if(c.parameters.length>=2&&Rp(c)){var u=Mv(c);if(u&&1===u.parameters.length&&L(u)){var l,_=du(ys(u.parameters[0]));if(1048576&_.flags&&dy(_,_g)&&!Jy(t))return bd(l=By(c,_,_,void 0,r.flowNode),Yd(c.parameters.indexOf(n)-(e.getThisParameter(c)?1:0)))}}}}return ys(t)}(a,t),u=e.getAssignmentTargetKind(t);if(u){if(!(3&a.flags||e.isInJSFile(t)&&512&a.flags))return Qn(t,384&a.flags?e.Diagnostics.Cannot_assign_to_0_because_it_is_an_enum:32&a.flags?e.Diagnostics.Cannot_assign_to_0_because_it_is_a_class:1536&a.flags?e.Diagnostics.Cannot_assign_to_0_because_it_is_a_namespace:16&a.flags?e.Diagnostics.Cannot_assign_to_0_because_it_is_a_function:2097152&a.flags?e.Diagnostics.Cannot_assign_to_0_because_it_is_an_import:e.Diagnostics.Cannot_assign_to_0_because_it_is_not_a_variable,no(n)),je;if(Vx(a))return 3&a.flags?Qn(t,e.Diagnostics.Cannot_assign_to_0_because_it_is_a_constant,no(n)):Qn(t,e.Diagnostics.Cannot_assign_to_0_because_it_is_a_read_only_property,no(n)),je}var l=2097152&a.flags;if(3&a.flags){if(1===u)return c}else{if(!l)return c;s=Fi(n)}if(!s)return c;c=qy(c,t,r);for(var _=166===e.getRootDeclaration(s).kind,d=jy(s),p=jy(t),f=p!==d,g=t.parent&&t.parent.parent&&e.isSpreadAssignment(t.parent)&&$m(t.parent.parent),m=134217728&n.flags;p!==d&&(215===p.kind||216===p.kind||e.isObjectLiteralOrClassExpressionMethodOrAccessor(p))&&(Uy(a)&&c!==nr||_&&!Jy(a));)p=jy(p);var y=_||l||f||g||m||function(t,r){if(e.isBindingElement(r)){var n=e.findAncestor(t,e.isBindingElement);return n&&e.getRootDeclaration(n)===e.getRootDeclaration(r)}}(t,s)||c!==Re&&c!==nr&&(!G||0!=(16387&c.flags)||km(t)||278===t.parent.kind)||232===t.parent.kind||257===s.kind&&s.exclamationToken||16777216&s.flags,v=y?_?function(e,t){if(bo(t.symbol,2)){var r=G&&166===t.kind&&t.initializer&&16777216&Vm(e)&&!(16777216&Vm(wD(t.initializer)));return So(),r?qm(e,524288):e}return fs(t.symbol),e}(c,s):c:c===Re||c===nr?qe:bg(c),h=By(t,c,v,p);if(Ny(t)||c!==Re&&c!==nr){if(!y&&!_f(c)&&_f(h))return Qn(t,e.Diagnostics.Variable_0_is_used_before_being_assigned,no(n)),c}else if(h===Re||h===nr)return Z&&(Qn(e.getNameOfDeclaration(s),e.Diagnostics.Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined,no(n),ao(h)),Qn(t,e.Diagnostics.Variable_0_implicitly_has_an_1_type,no(n),ao(h))),zS(h);return u?og(h):h}function Qy(t){return e.findAncestor(t,(function(t){return!t||e.nodeStartsNewLexicalEnvironment(t)?"quit":e.isIterationStatement(t,!1)}))}function Xy(e,t){(di(e).flags|=2,169===t.kind||173===t.kind)?di(t.parent).flags|=4:di(t).flags|=4}function Yy(t){return e.isSuperCall(t)?t:e.isFunctionLike(t)?void 0:e.forEachChild(t,Yy)}function Zy(e){return Ps(qs(Sa(e)))===Xe}function $y(t,r,n){var i=r.parent;e.getClassExtendsHeritageElement(i)&&!Zy(i)&&t.flowNode&&!Ly(t.flowNode,!1)&&Qn(t,n)}function ev(t){var r=km(t),n=e.getThisContainer(t,!0),i=!1;switch(173===n.kind&&$y(t,n,e.Diagnostics.super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class),216===n.kind&&(n=e.getThisContainer(n,!1),i=!0),function(t,r){e.isPropertyDeclaration(r)&&e.hasStaticModifier(r)&&r.initializer&&e.textRangeContainsPositionInclusive(r.initializer,t.pos)&&e.hasDecorators(r.parent)&&Qn(t,e.Diagnostics.Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class)}(t,n),n.kind){case 264:Qn(t,e.Diagnostics.this_cannot_be_referenced_in_a_module_or_namespace_body);break;case 263:Qn(t,e.Diagnostics.this_cannot_be_referenced_in_current_location);break;case 173:rv(t,n)&&Qn(t,e.Diagnostics.this_cannot_be_referenced_in_constructor_arguments);break;case 164:Qn(t,e.Diagnostics.this_cannot_be_referenced_in_a_computed_property_name)}!r&&i&&V<2&&Xy(t,n);var a=tv(t,!0,n);if($){var o=ys(ue);if(a===o&&i)Qn(t,e.Diagnostics.The_containing_arrow_function_captures_the_global_value_of_this);else if(!a){var s=Qn(t,e.Diagnostics.this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation);if(!e.isSourceFile(n)){var c=tv(n);c&&c!==o&&e.addRelatedInfo(s,e.createDiagnosticForNode(n,e.Diagnostics.An_outer_value_of_this_is_shadowed_by_this_container))}}}return a||Le}function tv(t,r,n){void 0===r&&(r=!0),void 0===n&&(n=e.getThisContainer(t,!1));var i=e.isInJSFile(t);if(e.isFunctionLike(n)&&(!uv(t)||e.getThisParameter(n))){var a=Gu(Ku(n))||i&&function(t){var r=e.getJSDocType(t);if(r&&320===r.kind){var n=r;if(n.parameters.length>0&&n.parameters[0].name&&"this"===n.parameters[0].name.escapedText)return ip(n.parameters[0].type)}var i=e.getJSDocThisTag(t);if(i&&i.typeExpression)return ip(i.typeExpression)}(n);if(!a){var o=function(t){if(215===t.kind&&e.isBinaryExpression(t.parent)&&3===e.getAssignmentDeclarationKind(t.parent))return t.parent.left.expression.expression;if(171===t.kind&&207===t.parent.kind&&e.isBinaryExpression(t.parent.parent)&&6===e.getAssignmentDeclarationKind(t.parent.parent))return t.parent.parent.left.expression;if(215===t.kind&&299===t.parent.kind&&207===t.parent.parent.kind&&e.isBinaryExpression(t.parent.parent.parent)&&6===e.getAssignmentDeclarationKind(t.parent.parent.parent))return t.parent.parent.parent.left.expression;if(215===t.kind&&e.isPropertyAssignment(t.parent)&&e.isIdentifier(t.parent.name)&&("value"===t.parent.name.escapedText||"get"===t.parent.name.escapedText||"set"===t.parent.name.escapedText)&&e.isObjectLiteralExpression(t.parent.parent)&&e.isCallExpression(t.parent.parent.parent)&&t.parent.parent.parent.arguments[2]===t.parent.parent&&9===e.getAssignmentDeclarationKind(t.parent.parent.parent))return t.parent.parent.parent.arguments[0].expression;if(e.isMethodDeclaration(t)&&e.isIdentifier(t.name)&&("value"===t.name.escapedText||"get"===t.name.escapedText||"set"===t.name.escapedText)&&e.isObjectLiteralExpression(t.parent)&&e.isCallExpression(t.parent.parent)&&t.parent.parent.arguments[2]===t.parent&&9===e.getAssignmentDeclarationKind(t.parent.parent))return t.parent.parent.arguments[0].expression}(n);if(i&&o){var s=wD(o).symbol;s&&s.members&&16&s.flags&&(a=qs(s).thisType)}else Hb(n)&&(a=qs(Da(n.symbol)).thisType);a||(a=ov(n))}if(a)return By(t,a)}if(e.isClassLike(n.parent)){var c=Sa(n.parent);return By(t,e.isStatic(n)?ys(c):qs(c).thisType)}if(e.isSourceFile(n)){if(n.commonJsModuleIndicator){var u=Sa(n);return u&&ys(u)}if(n.externalModuleIndicator)return qe;if(r)return ys(ue)}}function rv(t,r){return!!e.findAncestor(t,(function(t){return e.isFunctionLikeDeclaration(t)?"quit":166===t.kind&&t.parent===r}))}function nv(t){var r=210===t.parent.kind&&t.parent.expression===t,n=e.getSuperContainer(t,!0),i=n,a=!1,o=!1;if(!r){for(;i&&216===i.kind;)e.hasSyntacticModifier(i,512)&&(o=!0),i=e.getSuperContainer(i,!0),a=V<2;i&&e.hasSyntacticModifier(i,512)&&(o=!0)}var s=function(t){if(!t)return!1;if(r)return 173===t.kind;if(e.isClassLike(t.parent)||207===t.parent.kind)return e.isStatic(t)?171===t.kind||170===t.kind||174===t.kind||175===t.kind||169===t.kind||172===t.kind:171===t.kind||170===t.kind||174===t.kind||175===t.kind||169===t.kind||168===t.kind||173===t.kind;return!1}(i),c=0;if(!s){var u=e.findAncestor(t,(function(e){return e===i?"quit":164===e.kind}));return u&&164===u.kind?Qn(t,e.Diagnostics.super_cannot_be_referenced_in_a_computed_property_name):r?Qn(t,e.Diagnostics.Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors):i&&i.parent&&(e.isClassLike(i.parent)||207===i.parent.kind)?Qn(t,e.Diagnostics.super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class):Qn(t,e.Diagnostics.super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions),je}if(r||173!==n.kind||$y(t,i,e.Diagnostics.super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class),e.isStatic(i)||r?(c=512,!r&&V>=2&&V<=8&&(e.isPropertyDeclaration(i)||e.isClassStaticBlockDeclaration(i))&&e.forEachEnclosingBlockScopeContainer(t.parent,(function(t){e.isSourceFile(t)&&!e.isExternalOrCommonJsModule(t)||(di(t).flags|=134217728)}))):c=256,di(t).flags|=c,171===i.kind&&o&&(e.isSuperProperty(t.parent)&&e.isAssignmentTarget(t.parent)?di(i).flags|=4096:di(i).flags|=2048),a&&Xy(t.parent,i),207===i.parent.kind)return V<2?(Qn(t,e.Diagnostics.super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_higher),je):Le;var l=i.parent;if(!e.getClassExtendsHeritageElement(l))return Qn(t,e.Diagnostics.super_can_only_be_referenced_in_a_derived_class),je;var _=qs(Sa(l)),d=_&&Is(_)[0];return d?173===i.kind&&rv(t,i)?(Qn(t,e.Diagnostics.super_cannot_be_referenced_in_constructor_arguments),je):512===c?Ps(_):_c(d,_.thisType):je}function iv(t){return 4&e.getObjectFlags(t)&&t.target===tr?Tl(t)[0]:void 0}function av(t){return my(t,(function(t){return 2097152&t.flags?e.forEach(t.types,iv):iv(t)}))}function ov(t){if(216!==t.kind){if(Rp(t)){var r=Mv(t);if(r){var n=r.thisParameter;if(n)return ys(n)}}var i=e.isInJSFile(t);if($||i){var a=function(e){return 171!==e.kind&&174!==e.kind&&175!==e.kind||207!==e.parent.kind?215===e.kind&&299===e.parent.kind?e.parent.parent:void 0:e.parent}(t);if(a){for(var o=Cv(a,void 0),s=a,c=o;c;){var u=av(c);if(u)return Fp(u,Xg(Av(a)));if(299!==s.parent.kind)break;c=Cv(s=s.parent.parent,void 0)}return Rg(o?xg(o):pD(a))}var l=e.walkUpParenthesizedExpressions(t.parent);if(223===l.kind&&63===l.operatorToken.kind){var _=l.left;if(e.isAccessExpression(_)){var d=_.expression;if(i&&e.isIdentifier(d)){var p=e.getSourceFileOfNode(l);if(p.commonJsModuleIndicator&&Em(d)===p.symbol)return}return Rg(pD(d))}}}}}function sv(t){var r=t.parent;if(Rp(r)){var n=e.getImmediatelyInvokedFunctionExpression(r);if(n&&n.arguments){var i=Cb(n),a=r.parameters.indexOf(t);if(t.dotDotDotToken)return hb(i,a,i.length,Le,void 0,0);var o=di(n),s=o.resolvedSignature;o.resolvedSignature=Jr;var c=a<i.length?sg(wD(i[a])):t.initializer?void 0:We;return o.resolvedSignature=s,c}var u=Mv(r);if(u){var l=r.parameters.indexOf(t)-(e.getThisParameter(r)?1:0);return t.dotDotDotToken&&e.lastOrUndefined(r.parameters)===t?bx(u,l):hx(u,l)}}}function cv(t,r){var n=e.getEffectiveTypeAnnotationNode(t);if(n)return ip(n);switch(t.kind){case 166:return sv(t);case 205:return function(t,r){var n=t.parent.parent,i=t.propertyName||t.name,a=cv(n,r)||205!==n.kind&&n.initializer&&gD(n,t.dotDotDotToken?64:0);if(!a||e.isBindingPattern(i)||e.isComputedNonLiteralName(i))return;if(204===n.name.kind){var o=e.indexOfNode(t.parent.elements,t);if(o<0)return;return bv(a,o)}var s=W_(i);if(tc(s)){return Co(a,oc(s))}}(t,r);case 169:if(e.isStatic(t))return function(t,r){var n=e.isExpression(t.parent)&&Nv(t.parent,r);return n?yv(n,Sa(t).escapedName):void 0}(t,r)}}function uv(t){for(var r=!1;t.parent&&!e.isFunctionLike(t.parent);){if(e.isParameter(t.parent)&&(r||t.parent.initializer===t))return!0;e.isBindingElement(t.parent)&&t.parent.initializer===t&&(r=!0),t=t.parent}return!1}function lv(t,r){var n=!!(2&e.getFunctionFlags(r)),i=_v(r,void 0);if(i)return ST(t,i,n)||void 0}function _v(t,r){var n=Zu(t);if(n)return n;var i=Ov(t);if(i&&!$u(i))return Yu(i);var a=e.getImmediatelyInvokedFunctionExpression(t);return a?Nv(a,r):void 0}function dv(e,t){var r=Cb(e).indexOf(t);return-1===r?void 0:pv(e,r)}function pv(t,r){if(e.isImportCall(t))return 0===r?Ye:1===r?Yl(!1):Le;var n=di(t).resolvedSignature===Ur?Ur:Wb(t);if(e.isJsxOpeningLikeElement(t)&&0===r)return Fv(n,t);var i=n.parameters.length-1;return L(n)&&r>=i?bd(ys(n.parameters[i]),Yd(r-i),256):vx(n,r)}function fv(t,r){var n=t.parent,i=n.left,a=n.operatorToken,o=n.right;switch(a.kind){case 63:case 76:case 75:case 77:return t===o?function(t){var r,n,i=e.getAssignmentDeclarationKind(t);switch(i){case 0:case 4:var a=function(t){if(t.symbol)return t.symbol;if(e.isIdentifier(t))return Em(t);if(e.isPropertyAccessExpression(t)){var r=AD(t.expression);return e.isPrivateIdentifier(t.name)?i(r,t.name):xu(r,t.name.escapedText)}if(e.isElementAccessExpression(t)){var n=pD(t.argumentExpression);if(!tc(n))return;return xu(r=AD(t.expression),oc(n))}return;function i(e,t){var r=Fh(t.escapedText,t);return r&&Ih(e,r)}}(t.left),o=a&&a.valueDeclaration;return o&&(e.isPropertyDeclaration(o)||e.isPropertySignature(o))?(c=e.getEffectiveTypeAnnotationNode(o))&&Fp(ip(c),_i(a).mapper)||(e.isPropertyDeclaration(o)?o.initializer&&AD(t.left):void 0):0===i?AD(t.left):mv(t);case 5:if(gv(t,i))return mv(t);if(t.left.symbol){var s=t.left.symbol.valueDeclaration;if(!s)return;var c,u=e.cast(t.left,e.isAccessExpression);if(c=e.getEffectiveTypeAnnotationNode(s))return ip(c);if(e.isIdentifier(u.expression)){var l=u.expression,_=vi(l,l.escapedText,111551,void 0,l.escapedText,!0);if(_){var d=_.valueDeclaration&&e.getEffectiveTypeAnnotationNode(_.valueDeclaration);if(d){var p=e.getElementOrPropertyAccessName(u);if(void 0!==p)return yv(ip(d),p)}return}}return e.isInJSFile(s)?void 0:AD(t.left)}return AD(t.left);case 1:case 6:case 3:case 2:var f=void 0;2!==i&&(f=null===(r=t.left.symbol)||void 0===r?void 0:r.valueDeclaration),f||(f=null===(n=t.symbol)||void 0===n?void 0:n.valueDeclaration);var g=f&&e.getEffectiveTypeAnnotationNode(f);return g?ip(g):void 0;case 7:case 8:case 9:return e.Debug.fail("Does not apply");default:return e.Debug.assertNever(i)}}(n):void 0;case 56:case 60:var s=Nv(n,r);return t===o&&(s&&s.pattern||!s&&!e.isDefaultedExpandoInitializer(n))?AD(i):s;case 55:case 27:return t===o?Nv(n,r):void 0;default:return}}function gv(t,r){if(void 0===r&&(r=e.getAssignmentDeclarationKind(t)),4===r)return!0;if(!e.isInJSFile(t)||5!==r||!e.isIdentifier(t.left.expression))return!1;var n=t.left.expression.escapedText,i=vi(t.left,n,111551,void 0,void 0,!0,!0);return e.isThisInitializedDeclaration(null==i?void 0:i.valueDeclaration)}function mv(t){if(!t.symbol)return AD(t.left);if(t.symbol.valueDeclaration){var r=e.getEffectiveTypeAnnotationNode(t.symbol.valueDeclaration);if(r){var n=ip(r);if(n)return n}}var i=e.cast(t.left,e.isAccessExpression);if(e.isObjectLiteralMethod(e.getThisContainer(i.expression,!1))){var a=ev(i.expression),o=e.getElementOrPropertyAccessName(i);return void 0!==o&&yv(a,o)||void 0}}function yv(t,r,n){return my(t,(function(t){var i,a;if(Vc(t)&&!t.declaration.nameType){var o=Mc(t),s=ru(o)||o,c=n||Xd(e.unescapeLeadingUnderscores(r));if(Vp(c,s))return hd(t,c)}else if(3670016&t.flags){var u=xu(t,r);if(u)return a=u,262144&e.getCheckFlags(a)&&!a.type&&xo(a,0)>=0?void 0:ys(u);if(_g(t)){var l=fg(t);if(l&&e.isNumericLiteralName(r)&&+r>=0)return l}return null===(i=Cu(ku(t),n||Xd(e.unescapeLeadingUnderscores(r))))||void 0===i?void 0:i.type}}),!0)}function vv(t,r){if(e.Debug.assert(e.isObjectLiteralMethod(t)),!(33554432&t.flags))return hv(t,r)}function hv(t,r){var n=t.parent,i=e.isPropertyAssignment(t)&&cv(t,r);if(i)return i;var a=Cv(n,r);if(a){if(ac(t)){var o=Sa(t);return yv(a,o.escapedName,_i(o).nameType)}if(t.name){var s=W_(t.name);return my(a,(function(e){var t;return null===(t=Cu(ku(e),s))||void 0===t?void 0:t.type}),!0)}}}function bv(e,t){return e&&(yv(e,""+t)||my(e,(function(e){return tT(1,e,qe,void 0,!1)}),!0))}function xv(t,r){var n=t.parent;return e.isJsxAttributeLike(n)?Nv(t,r):e.isJsxElement(n)?function(t,r,n){var i=Cv(t.openingElement.tagName,n),a=nh(th(t));if(i&&!Eo(i)&&a&&""!==a){var o=e.getSemanticJsxChildren(t.children),s=o.indexOf(r),c=yv(i,a);return c&&(1===o.length?c:my(c,(function(e){return Xf(e)?bd(e,Yd(s)):e}),!0))}}(n,t,r):void 0}function Dv(t,r){if(e.isJsxAttribute(t)){var n=Cv(t.parent,r);if(!n||Eo(n))return;return yv(n,t.name.escapedText)}return Nv(t.parent,r)}function Sv(e){switch(e.kind){case 10:case 8:case 9:case 14:case 110:case 95:case 104:case 79:case 155:return!0;case 208:case 214:return Sv(e.expression);case 291:return!e.expression||Sv(e.expression)}return!1}function Tv(t,r){return function(t,r){var n=Lm(t),i=n&&e.find(r.properties,(function(e){return e.symbol&&299===e.kind&&e.symbol.escapedName===n&&Sv(e.initializer)})),a=i&&PD(i.initializer);return a&&Rm(t,a)}(r,t)||Tf(r,e.concatenate(e.map(e.filter(t.properties,(function(e){return!!e.symbol&&299===e.kind&&Sv(e.initializer)&&Om(r,e.symbol.escapedName)})),(function(e){return[function(){return PD(e.initializer)},e.symbol.escapedName]})),e.map(e.filter(Qc(r),(function(e){var n;return!!(16777216&e.flags)&&!!(null===(n=null==t?void 0:t.symbol)||void 0===n?void 0:n.members)&&!t.symbol.members.has(e.escapedName)&&Om(r,e.escapedName)})),(function(e){return[function(){return qe},e.escapedName]}))),Vp,r)}function Cv(t,r){var n=Ev(e.isObjectLiteralMethod(t)?vv(t,r):Nv(t,r),t,r);if(n&&!(r&&2&r&&8650752&n.flags)){var i=my(n,_u,!0);return 1048576&i.flags&&e.isObjectLiteralExpression(t)?Tv(t,i):1048576&i.flags&&e.isJsxAttributes(t)?function(t,r){return Tf(r,e.concatenate(e.map(e.filter(t.properties,(function(e){return!!e.symbol&&288===e.kind&&Om(r,e.symbol.escapedName)&&(!e.initializer||Sv(e.initializer))})),(function(e){return[e.initializer?function(){return PD(e.initializer)}:function(){return rt},e.symbol.escapedName]})),e.map(e.filter(Qc(r),(function(e){var n;return!!(16777216&e.flags)&&!!(null===(n=null==t?void 0:t.symbol)||void 0===n?void 0:n.members)&&!t.symbol.members.has(e.escapedName)&&Om(r,e.escapedName)})),(function(e){return[function(){return qe},e.escapedName]}))),Vp,r)}(t,i):i}}function Ev(t,r,n){if(t&&Yx(t,465829888)){var i=Av(r);if(i&&1&n&&e.some(i.inferences,CD))return kv(t,i.nonFixingMapper);if(null==i?void 0:i.returnMapper){var a=kv(t,i.returnMapper);return 1048576&a.flags&&C_(a.types,tt)&&C_(a.types,nt)?py(a,(function(e){return e!==tt&&e!==nt})):a}}return t}function kv(t,r){return 465829888&t.flags?Fp(t,r):1048576&t.flags?P_(e.map(t.types,(function(e){return kv(e,r)})),0):2097152&t.flags?j_(e.map(t.types,(function(e){return kv(e,r)}))):t}function Nv(t,r){if(33554432&t.flags);else{if(t.contextualType)return t.contextualType;var n=t.parent;switch(n.kind){case 257:case 166:case 169:case 168:case 205:return function(t,r){var n=t.parent;if(e.hasInitializer(n)&&t===n.initializer){var i=cv(n,r);if(i)return i;if(!(8&r)&&e.isBindingPattern(n.name)&&n.name.elements.length>0)return $o(n.name,!0,!1)}}(t,r);case 216:case 250:return function(t,r){var n=e.getContainingFunction(t);if(n){var i=_v(n,r);if(i){var a=e.getFunctionFlags(n);if(1&a){var o=0!=(2&a);1048576&i.flags&&(i=py(i,(function(e){return!!ST(1,e,o)})));var s=ST(1,i,0!=(2&a));if(!s)return;i=s}if(2&a){var c=my(i,lS);return c&&P_([c,Px(c)])}return i}}}(t,r);case 226:return function(t,r){var n=e.getContainingFunction(t);if(n){var i=e.getFunctionFlags(n),a=_v(n,r);if(a){var o=0!=(2&i);return!t.asteriskToken&&1048576&a.flags&&(a=py(a,(function(e){return!!ST(1,e,o)}))),t.asteriskToken?a:ST(0,a,o)}}}(n,r);case 220:return function(e,t){var r=Nv(e,t);if(r){var n=lS(r);return n&&P_([n,Px(n)])}}(n,r);case 210:case 211:return dv(n,t);case 213:case 231:return e.isConstTypeReference(n.type)?o(n):ip(n.type);case 223:return fv(t,r);case 299:case 300:return hv(n,r);case 301:return Nv(n.parent,r);case 206:var i=n;return bv(Cv(i,r),e.indexOfNode(i.elements,t));case 224:return function(e,t){var r=e.parent;return e===r.whenTrue||e===r.whenFalse?Nv(r,t):void 0}(t,r);case 236:return e.Debug.assert(225===n.parent.kind),function(e,t){if(212===e.parent.kind)return dv(e.parent,t)}(n.parent,t);case 214:var a=e.isInJSFile(n)?e.getJSDocTypeTag(n):void 0;return a?e.isJSDocTypeTag(a)&&e.isConstTypeReference(a.typeExpression.type)?o(n):ip(a.typeExpression.type):Nv(n,r);case 232:return Nv(n,r);case 235:return ip(n.type);case 274:return is(n);case 291:return xv(n,r);case 288:case 290:return Dv(n,r);case 283:case 282:return function(t,r){if(e.isJsxOpeningElement(t)&&t.parent.contextualType&&4!==r)return t.parent.contextualType;return pv(t,0)}(n,r)}}function o(e){return Nv(e,r)}}function Av(t){var r=e.findAncestor(t,(function(e){return!!e.inferenceContext}));return r&&r.inferenceContext}function Fv(t,r){return 0!==xb(r)?function(e,t){var r=kx(e,Ke);r=Pv(t,th(t),r);var n=Zv(E.IntrinsicAttributes,t);ko(n)||(r=Sc(n,r));return r}(t,r):function(t,r){var n=th(r),i=(o=n,rh(E.ElementAttributesPropertyNameContainer,o)),a=void 0===i?kx(t,Ke):""===i?Yu(t):function(e,t){if(e.compositeSignatures){for(var r=[],n=0,i=e.compositeSignatures;n<i.length;n++){var a=Yu(i[n]);if(Eo(a))return a;var o=Co(a,t);if(!o)return;r.push(o)}return j_(r)}var s=Yu(e);return Eo(s)?s:Co(s,t)}(t,i);var o;if(!a)return i&&e.length(r.attributes.properties)&&Qn(r,e.Diagnostics.JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property,e.unescapeLeadingUnderscores(i)),Ke;if(Eo(a=Pv(r,n,a)))return a;var s=a,c=Zv(E.IntrinsicClassAttributes,r);if(!ko(c)){var u=Cs(c.symbol),l=Yu(t),_=void 0;if(u)_=Fp(c,lp(u,Uu([l],u,zu(u),e.isInJSFile(r))));else _=c;s=Sc(_,s)}var d=Zv(E.IntrinsicAttributes,r);return ko(d)||(s=Sc(d,s)),s}(t,r)}function Pv(t,r,n){var i,a=(i=r)&&fi(i.exports,E.LibraryManagedAttributes,788968);if(a){var o=qs(a),s=function(e){if(Hv(e.tagName))return sl(Kb(e,t=oh(e)));var t,r=pD(e.tagName);return 128&r.flags?(t=ah(r,e))?sl(Kb(e,t)):je:r}(t);if(524288&a.flags){var c=_i(a).typeParameters;if(e.length(c)>=2)return kl(a,Uu([s,n],c,2,e.isInJSFile(t)))}if(e.length(o.typeParameters)>=2)return xl(o,Uu([s,n],o.typeParameters,2,e.isInJSFile(t)))}return n}function wv(t){return e.getStrictOptionValue(K,"noImplicitAny")?e.reduceLeft(t,(function(t,r){return t!==r&&t?xc(t.typeParameters,r.typeParameters)?function(t,r){var n,i=t.typeParameters||r.typeParameters;t.typeParameters&&r.typeParameters&&(n=lp(r.typeParameters,t.typeParameters));var a=t.declaration,o=function(e,t,r){for(var n=xx(e),i=xx(t),a=n>=i?e:t,o=a===e?t:e,s=a===e?n:i,c=Sx(e)||Sx(t),u=c&&!Sx(a),l=new Array(s+(u?1:0)),_=0;_<s;_++){var d=hx(a,_);a===t&&(d=Fp(d,r));var p=hx(o,_)||Ke;o===t&&(p=Fp(p,r));var f=P_([d,p]),g=c&&!u&&_===s-1,m=_>=Dx(a)&&_>=Dx(o),y=_>=n?void 0:fx(e,_),v=_>=i?void 0:fx(t,_),h=ri(1|(m&&!g?16777216:0),(y===v?y:y?v?void 0:y:v)||"arg".concat(_));h.type=g?u_(f):f,l[_]=h}if(u){var b=ri(1,"args");b.type=u_(vx(o,s)),o===t&&(b.type=Fp(b.type,r)),l[s]=b}return l}(t,r,n),s=function(e,t,r){if(!e||!t)return e||t;var n=P_([ys(e),Fp(ys(t),r)]);return Fg(e,n)}(t.thisParameter,r.thisParameter,n),c=Math.max(t.minArgumentCount,r.minArgumentCount),u=pc(a,i,s,o,void 0,void 0,c,39&(t.flags|r.flags));u.compositeKind=2097152,u.compositeSignatures=e.concatenate(2097152===t.compositeKind&&t.compositeSignatures||[t],[r]),n&&(u.mapper=2097152===t.compositeKind&&t.mapper&&t.compositeSignatures?yp(t.mapper,n):n);return u}(t,r):void 0:t})):void 0}function Iv(t,r){var n=Su(t,0),i=e.filter(n,(function(t){return!function(t,r){for(var n=0;n<r.parameters.length;n++){var i=r.parameters[n];if(i.initializer||i.questionToken||i.dotDotDotToken||Lu(i))break}r.parameters.length&&e.parameterIsThisKeyword(r.parameters[0])&&n--;return!Sx(t)&&xx(t)<n}(t,r)}));return 1===i.length?i[0]:wv(i)}function Ov(t){return e.isFunctionExpressionOrArrowFunction(t)||e.isObjectLiteralMethod(t)?Mv(t):void 0}function Mv(t){e.Debug.assert(171!==t.kind||e.isObjectLiteralMethod(t));var r=Vu(t);if(r)return r;var n=Cv(t,1);if(n){if(!(1048576&n.flags))return Iv(n,t);for(var i,a=0,o=n.types;a<o.length;a++){var s=Iv(o[a],t);if(s)if(i){if(!Uf(i[0],s,!1,!0,!0,Jp))return;i.push(s)}else i=[s]}return i?1===i.length?i[0]:gc(i[0],i):void 0}}function Lv(e){return 205===e.kind&&!!e.initializer||223===e.kind&&63===e.operatorToken.kind}function Rv(t,r,n){for(var i=t.elements,a=i.length,o=[],s=[],c=Cv(t,void 0),u=e.isAssignmentTarget(t),l=vD(t),_=!1,d=0;d<a;d++){var p=i[d];if(227===p.kind){V<2&&yE(p,K.downlevelIteration?1536:1024);var f=wD(p.expression,r,n);if(Xf(f))o.push(f),s.push(8);else if(u){var g=Fu(f,Ze)||tT(65,f,qe,void 0,!1)||Ke;o.push(g),s.push(4)}else o.push(eT(33,f,qe,p.expression)),s.push(4)}else if(ne&&229===p.kind)_=!0,o.push(Ge),s.push(2);else{var m=hD(p,r,bv(c,o.length),n);if(o.push(jo(m,!0,_)),s.push(_?2:1),c&&_y(c,eg)&&r&&2&r&&!(4&r)&&Mp(p)){var y=Av(t);e.Debug.assert(y),Hg(y,p,m)}}}return u?m_(o,s):n||l||c&&_y(c,eg)?Bv(m_(o,s,l)):Bv(u_(o.length?P_(e.sameMap(o,(function(e,t){return 8&s[t]?Dd(e,Ze)||Le:e})),2):G?lt:We,l))}function Bv(t){if(!(4&e.getObjectFlags(t)))return t;var r=t.literalType;return r||((r=t.literalType=Dl(t)).objectFlags|=147456),r}function jv(t){switch(t.kind){case 164:return function(e){return Zx(Jv(e),296)}(t);case 79:return e.isNumericLiteralName(t.escapedText);case 8:case 10:return e.isNumericLiteralName(t.text);default:return!1}}function Jv(t){var r=di(t.expression);if(!r.resolvedType){if((e.isTypeLiteralNode(t.parent.parent)||e.isClassLike(t.parent.parent)||e.isInterfaceDeclaration(t.parent.parent))&&e.isBinaryExpression(t.expression)&&101===t.expression.operatorToken.kind&&174!==t.parent.kind&&175!==t.parent.kind)return r.resolvedType=je;if(r.resolvedType=wD(t.expression),e.isPropertyDeclaration(t.parent)&&!e.hasStaticModifier(t.parent)&&e.isClassExpression(t.parent.parent)){var n=Qy(e.getEnclosingBlockScopeContainer(t.parent.parent));n&&(di(n).flags|=65536,di(t).flags|=524288,di(t.parent.parent).flags|=524288)}(98304&r.resolvedType.flags||!Zx(r.resolvedType,402665900)&&!Vp(r.resolvedType,ft))&&Qn(t,e.Diagnostics.A_computed_property_name_must_be_of_type_string_number_symbol_or_any)}return r.resolvedType}function zv(t){var r,n=null===(r=t.declarations)||void 0===r?void 0:r[0];return e.isKnownSymbol(t)||n&&e.isNamedDeclaration(n)&&e.isComputedPropertyName(n.name)&&Zx(Jv(n.name),4096)}function Uv(t,r,n,i){for(var a,o,s,c=[],u=r;u<n.length;u++){var l=n[u];(i===Ye&&!zv(l)||i===Ze&&(o=void 0,s=void 0,s=null===(o=(a=l).declarations)||void 0===o?void 0:o[0],e.isNumericLiteralName(a.escapedName)||s&&e.isNamedDeclaration(s)&&jv(s.name))||i===ot&&zv(l))&&c.push(ys(n[u]))}return ll(i,c.length?P_(c,2):qe,vD(t))}function Kv(t){e.Debug.assert(0!=(2097152&t.flags),"Should only get Alias here.");var r=_i(t);if(!r.immediateTarget){var n=Fi(t);if(!n)return e.Debug.fail();r.immediateTarget=Hi(n,!0)}return r.immediateTarget}function Vv(t,r){var n=e.isAssignmentTarget(t);!function(t,r){for(var n=new e.Map,i=0,a=t.properties;i<a.length;i++){var o=a[i];if(301!==o.kind){var s=o.name;if(164===s.kind&&AE(s),300===o.kind&&!r&&o.objectAssignmentInitializer&&WE(o.equalsToken,e.Diagnostics.Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_part_of_a_destructuring_pattern),80===s.kind&&WE(s,e.Diagnostics.Private_identifiers_are_not_allowed_outside_class_bodies),e.canHaveModifiers(o)&&o.modifiers)for(var c=0,u=o.modifiers;c<u.length;c++){var l=u[c];!e.isModifier(l)||132===l.kind&&171===o.kind||WE(l,e.Diagnostics._0_modifier_cannot_be_used_here,e.getTextOfNode(l))}else if(e.canHaveIllegalModifiers(o)&&o.modifiers)for(var _=0,d=o.modifiers;_<d.length;_++){WE(l=d[_],e.Diagnostics._0_modifier_cannot_be_used_here,e.getTextOfNode(l))}var p=void 0;switch(o.kind){case 300:case 299:wE(o.exclamationToken,e.Diagnostics.A_definite_assignment_assertion_is_not_permitted_in_this_context),PE(o.questionToken,e.Diagnostics.An_object_member_cannot_be_declared_optional),8===s.kind&&QE(s),p=4;break;case 171:p=8;break;case 174:p=1;break;case 175:p=2;break;default:throw e.Debug.assertNever(o,"Unexpected syntax kind:"+o.kind)}if(!r){var f=e.getPropertyNameForPropertyNameNode(s);if(void 0===f)continue;var g=n.get(f);if(g)if(8&p&&8&g)WE(s,e.Diagnostics.Duplicate_identifier_0,e.getTextOfNode(s));else if(4&p&&4&g)WE(s,e.Diagnostics.An_object_literal_cannot_have_multiple_properties_with_the_same_name,e.getTextOfNode(s));else{if(!(3&p&&3&g))return WE(s,e.Diagnostics.An_object_literal_cannot_have_property_and_accessor_with_the_same_name);if(3===g||p===g)return WE(s,e.Diagnostics.An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name);n.set(f,p|g)}else n.set(f,p)}}else if(r){var m=e.skipParentheses(o.expression);if(e.isArrayLiteralExpression(m)||e.isObjectLiteralExpression(m))return WE(o.expression,e.Diagnostics.A_rest_element_cannot_contain_a_binding_pattern)}}}(t,n);for(var i=G?e.createSymbolTable():void 0,a=e.createSymbolTable(),o=[],s=Ct,c=Cv(t,void 0),u=c&&c.pattern&&(203===c.pattern.kind||207===c.pattern.kind),l=vD(t),_=l?8:0,d=e.isInJSFile(t)&&!e.isInJsonFile(t),p=e.getJSDocEnumTag(t),f=!c&&d&&!p,g=re,m=!1,y=!1,v=!1,h=!1,b=0,x=t.properties;b<x.length;b++){var D=x[b];D.name&&e.isComputedPropertyName(D.name)&&Jv(D.name)}for(var S=0,T=0,C=t.properties;T<C.length;T++){var E=C[T],k=Sa(E),N=E.name&&164===E.name.kind?Jv(E.name):void 0;if(299===E.kind||300===E.kind||e.isObjectLiteralMethod(E)){var A=299===E.kind?bD(E,r):300===E.kind?hD(!n&&E.objectAssignmentInitializer?E.objectAssignmentInitializer:E.name,r):xD(E,r);if(d){var F=Ro(E);F?(Gp(A,F,E),A=F):p&&p.typeExpression&&Gp(A,ip(p.typeExpression),E)}g|=458752&e.getObjectFlags(A);var P=N&&tc(N)?N:void 0,w=P?ri(4|k.flags,oc(P),4096|_):ri(4|k.flags,k.escapedName,_);if(P&&(w.nameType=P),n)(299===E.kind&&Lv(E.initializer)||300===E.kind&&E.objectAssignmentInitializer)&&(w.flags|=16777216);else if(u&&!(512&e.getObjectFlags(c))){var I=xu(c,k.escapedName);I?w.flags|=16777216&I.flags:K.suppressExcessPropertyErrors||Au(c,Ye)||Qn(E.name,e.Diagnostics.Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1,no(k),ao(c))}if(w.declarations=k.declarations,w.parent=k.parent,k.valueDeclaration&&(w.valueDeclaration=k.valueDeclaration),w.type=A,w.target=k,k=w,null==i||i.set(w.escapedName,w),c&&r&&2&r&&!(4&r)&&(299===E.kind||171===E.kind)&&Mp(E)){var O=Av(t);e.Debug.assert(O),Hg(O,299===E.kind?E.initializer:E,A)}}else{if(301===E.kind){if(V<2&&yE(E,2),o.length>0&&(s=Kd(s,j(),t.symbol,g,l),o=[],a=e.createSymbolTable(),y=!1,v=!1,h=!1),qv(A=mu(wD(E.expression)))){var M=Ud(A,l);if(i&&Xv(M,i,E),S=o.length,ko(s))continue;s=Kd(s,M,t.symbol,g,l)}else Qn(E,e.Diagnostics.Spread_types_may_only_be_created_from_object_types),s=je;continue}e.Debug.assert(174===E.kind||175===E.kind),gC(E)}!N||8576&N.flags?a.set(k.escapedName,k):Vp(N,ft)&&(Vp(N,Ze)?v=!0:Vp(N,ot)?h=!0:y=!0,n&&(m=!0)),o.push(k)}if(u){var L=e.findAncestor(c.pattern.parent,(function(e){return 257===e.kind||223===e.kind||166===e.kind}));if(301!==e.findAncestor(t,(function(e){return e===L||301===e.kind})).kind)for(var R=0,B=Qc(c);R<B.length;R++){w=B[R];a.get(w.escapedName)||xu(s,w.escapedName)||(16777216&w.flags||Qn(w.valueDeclaration||w.bindingElement,e.Diagnostics.Initializer_provides_no_value_for_this_binding_element_and_the_binding_element_has_no_default_value),a.set(w.escapedName,w),o.push(w))}}return ko(s)?je:s!==Ct?(o.length>0&&(s=Kd(s,j(),t.symbol,g,l),o=[],a=e.createSymbolTable(),y=!1,v=!1),my(s,(function(e){return e===Ct?j():e}))):j();function j(){var r=[];y&&r.push(Uv(t,S,o,Ye)),v&&r.push(Uv(t,S,o,Ze)),h&&r.push(Uv(t,S,o,ot));var i=za(t.symbol,a,e.emptyArray,e.emptyArray,r);return i.objectFlags|=131200|g,f&&(i.objectFlags|=4096),m&&(i.objectFlags|=512),n&&(i.pattern=t),i}}function qv(t){var r=yg(my(t,nu));return!!(126615553&r.flags||3145728&r.flags&&e.every(r.types,qv))}function Wv(t){return e.stringContains(t,"-")}function Hv(t){return 79===t.kind&&e.isIntrinsicJsxName(t.escapedText)}function Gv(e,t){return e.initializer?hD(e.initializer,t):rt}function Qv(e,t){for(var r=[],n=0,i=e.children;n<i.length;n++){var a=i[n];if(11===a.kind)a.containsOnlyTriviaWhiteSpaces||r.push(Ye);else{if(291===a.kind&&!a.expression)continue;r.push(hD(a,t))}}return r}function Xv(t,r,n){for(var i=0,a=Qc(t);i<a.length;i++){var o=a[i];if(!(16777216&o.flags)){var s=r.get(o.escapedName);if(s){var c=Qn(s.valueDeclaration,e.Diagnostics._0_is_specified_more_than_once_so_this_usage_will_be_overwritten,e.unescapeLeadingUnderscores(s.escapedName));e.addRelatedInfo(c,e.createDiagnosticForNode(n,e.Diagnostics.This_spread_always_overwrites_this_property))}}}}function Yv(t,r){return function(t,r){for(var n,i=t.attributes,a=Nv(i,0),o=G?e.createSymbolTable():void 0,s=e.createSymbolTable(),c=Et,u=!1,l=!1,_=2048,d=nh(th(t)),p=0,f=i.properties;p<f.length;p++){var g=f[p],m=g.symbol;if(e.isJsxAttribute(g)){var y=Gv(g,r);_|=458752&e.getObjectFlags(y);var v=ri(4|m.flags,m.escapedName);if(v.declarations=m.declarations,v.parent=m.parent,m.valueDeclaration&&(v.valueDeclaration=m.valueDeclaration),v.type=y,v.target=m,s.set(v.escapedName,v),null==o||o.set(v.escapedName,v),g.name.escapedText===d&&(l=!0),a){var h=xu(a,m.escapedName);h&&h.declarations&&ei(h)&&ti(g.name,h.declarations,g.name.escapedText)}}else e.Debug.assert(290===g.kind),s.size>0&&(c=Kd(c,E(),i.symbol,_,!1),s=e.createSymbolTable()),Eo(y=mu(pD(g.expression,r)))&&(u=!0),qv(y)?(c=Kd(c,y,i.symbol,_,!1),o&&Xv(y,o,g)):(Qn(g.expression,e.Diagnostics.Spread_types_may_only_be_created_from_object_types),n=n?j_([n,y]):y)}u||s.size>0&&(c=Kd(c,E(),i.symbol,_,!1));var b=281===t.parent.kind?t.parent:void 0;if(b&&b.openingElement===t&&b.children.length>0){var x=Qv(b,r);if(!u&&d&&""!==d){l&&Qn(i,e.Diagnostics._0_are_specified_twice_The_attribute_named_0_will_be_overwritten,e.unescapeLeadingUnderscores(d));var D=Cv(t.attributes,void 0),S=D&&yv(D,d),T=ri(4,d);T.type=1===x.length?x[0]:S&&_y(S,eg)?m_(x):u_(P_(x)),T.valueDeclaration=e.factory.createPropertySignature(void 0,e.unescapeLeadingUnderscores(d),void 0,void 0),e.setParent(T.valueDeclaration,i),T.valueDeclaration.symbol=T;var C=e.createSymbolTable();C.set(d,T),c=Kd(c,za(i.symbol,C,e.emptyArray,e.emptyArray,e.emptyArray),i.symbol,_,!1)}}return u?Le:n&&c!==Et?j_([n,c]):n||(c===Et?E():c);function E(){_|=re;var t=za(i.symbol,s,e.emptyArray,e.emptyArray,e.emptyArray);return t.objectFlags|=131200|_,t}}(t.parent,r)}function Zv(e,t){var r=th(t),n=r&&va(r),i=n&&fi(n,e,788968);return i?qs(i):je}function $v(t){var r=di(t);if(!r.resolvedSymbol){var n=Zv(E.IntrinsicElements,t);if(ko(n))return Z&&Qn(t,e.Diagnostics.JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists,e.unescapeLeadingUnderscores(E.IntrinsicElements)),r.resolvedSymbol=we;if(!e.isIdentifier(t.tagName))return e.Debug.fail();var i=xu(n,t.tagName.escapedText);return i?(r.jsxFlags|=1,r.resolvedSymbol=i):Fu(n,Ye)?(r.jsxFlags|=2,r.resolvedSymbol=n.symbol):(Qn(t,e.Diagnostics.Property_0_does_not_exist_on_type_1,e.idText(t.tagName),"JSX."+E.IntrinsicElements),r.resolvedSymbol=we)}return r.resolvedSymbol}function eh(t){var r=t&&e.getSourceFileOfNode(t),n=r&&di(r);if(!n||!1!==n.jsxImplicitImportContainer){if(n&&n.jsxImplicitImportContainer)return n.jsxImplicitImportContainer;var i=e.getJSXRuntimeImport(e.getJSXImplicitImportBase(K,r),K);if(i){var a=ua(t,i,e.getEmitModuleResolutionKind(K)===e.ModuleResolutionKind.Classic?e.Diagnostics.Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_node_or_to_add_aliases_to_the_paths_option:e.Diagnostics.Cannot_find_module_0_or_its_corresponding_type_declarations,t),o=a&&a!==we?Da(Qi(a)):void 0;return n&&(n.jsxImplicitImportContainer=o||!1),o}}}function th(e){var t=e&&di(e);if(t&&t.jsxNamespace)return t.jsxNamespace;if(!t||!1!==t.jsxNamespace){var r=eh(e);if(!r||r===we){var n=Vn(e);r=vi(e,n,1920,void 0,n,!1)}if(r){var i=Qi(fi(va(Qi(r)),E.JSX,1920));if(i&&i!==we)return t&&(t.jsxNamespace=i),i}t&&(t.jsxNamespace=!1)}var a=Qi(Hl(E.JSX,1920,void 0));return a!==we?a:void 0}function rh(t,r){var n=r&&fi(r.exports,t,788968),i=n&&qs(n),a=i&&Qc(i);if(a){if(0===a.length)return"";if(1===a.length)return a[0].escapedName;a.length>1&&n.declarations&&Qn(n.declarations[0],e.Diagnostics.The_global_type_JSX_0_may_not_have_more_than_one_property,e.unescapeLeadingUnderscores(t))}}function nh(e){return rh(E.ElementChildrenAttributeNameContainer,e)}function ih(t,r){if(4&t.flags)return[Jr];if(128&t.flags){var n=ah(t,r);return n?[Kb(r,n)]:(Qn(r,e.Diagnostics.Property_0_does_not_exist_on_type_1,t.value,"JSX."+E.IntrinsicElements),e.emptyArray)}var i=_u(t),a=Su(i,1);return 0===a.length&&(a=Su(i,0)),0===a.length&&1048576&i.flags&&(a=bc(e.map(i.types,(function(e){return ih(e,r)})))),a}function ah(t,r){var n=Zv(E.IntrinsicElements,r);if(!ko(n)){var i=t.value,a=xu(n,e.escapeLeadingUnderscores(i));if(a)return ys(a);var o=Fu(n,Ye);return o||void 0}return Le}function oh(t){e.Debug.assert(Hv(t.tagName));var r=di(t);if(!r.resolvedJsxElementAttributesType){var n=$v(t);return 1&r.jsxFlags?r.resolvedJsxElementAttributesType=ys(n)||je:2&r.jsxFlags?r.resolvedJsxElementAttributesType=Fu(Zv(E.IntrinsicElements,t),Ye)||je:r.resolvedJsxElementAttributesType=je}return r.resolvedJsxElementAttributesType}function sh(e){var t=Zv(E.ElementClass,e);if(!ko(t))return t}function ch(e){return Zv(E.Element,e)}function uh(e){var t=ch(e);if(t)return P_([t,Qe])}function lh(t){var r,n=e.isJsxOpeningLikeElement(t);if(n&&function(t){(function(t){if(e.isPropertyAccessExpression(t)){var r=t;do{var n=a(r.name);if(n)return n;r=r.expression}while(e.isPropertyAccessExpression(r));var i=a(r);if(i)return i}function a(t){if(e.isIdentifier(t)&&-1!==e.idText(t).indexOf(":"))return WE(t,e.Diagnostics.JSX_property_access_expressions_cannot_include_JSX_namespace_names)}})(t.tagName),EE(t,t.typeArguments);for(var r=new e.Map,n=0,i=t.attributes.properties;n<i.length;n++){var a=i[n];if(290!==a.kind){var o=a.name,s=a.initializer;if(r.get(o.escapedText))return WE(o,e.Diagnostics.JSX_elements_cannot_have_multiple_attributes_with_the_same_name);if(r.set(o.escapedText,!0),s&&291===s.kind&&!s.expression)return WE(s,e.Diagnostics.JSX_attributes_must_only_be_assigned_a_non_empty_expression)}}}(t),r=t,0===(K.jsx||0)&&Qn(r,e.Diagnostics.Cannot_use_JSX_unless_the_jsx_flag_is_provided),void 0===ch(r)&&Z&&Qn(r,e.Diagnostics.JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist),!eh(t)){var i=Pn&&2===K.jsx?e.Diagnostics.Cannot_find_name_0:void 0,a=Vn(t),o=n?t.tagName:t,s=void 0;if(e.isJsxOpeningFragment(t)&&"null"===a||(s=vi(o,a,111551,i,a,!0)),s&&(s.isReferenced=67108863,2097152&s.flags&&!ea(s)&&ra(s)),e.isJsxOpeningFragment(t)){var c=qn(e.getSourceFileOfNode(t));c&&vi(o,c,111551,i,c,!0)}}if(n){var u=t,l=Wb(u);Xb(l,t),function(t,r,n){if(1===t)(i=uh(n))&&hf(r,i,Ln,n.tagName,e.Diagnostics.Its_return_type_0_is_not_a_valid_JSX_element,o);else if(0===t)(a=sh(n))&&hf(r,a,Ln,n.tagName,e.Diagnostics.Its_instance_type_0_is_not_a_valid_JSX_element,o);else{var i=uh(n),a=sh(n);if(!i||!a)return;hf(r,P_([i,a]),Ln,n.tagName,e.Diagnostics.Its_element_type_0_is_not_a_valid_JSX_element,o)}function o(){var t=e.getTextOfNode(n.tagName);return e.chainDiagnosticMessages(void 0,e.Diagnostics._0_cannot_be_used_as_a_JSX_component,t)}}(xb(u),Yu(l),u)}}function _h(e,t,r){if(524288&e.flags){if(Hc(e,t)||Iu(e,t)||nc(t)&&Au(e,Ye)||r&&Wv(t))return!0}else if(3145728&e.flags&&dh(e))for(var n=0,i=e.types;n<i.length;n++){if(_h(i[n],t,r))return!0}return!1}function dh(t){return!!(524288&t.flags&&!(512&e.getObjectFlags(t))||67108864&t.flags||1048576&t.flags&&e.some(t.types,dh)||2097152&t.flags&&e.every(t.types,dh))}function ph(t,r){if(function(t){if(t.expression&&e.isCommaSequence(t.expression))WE(t.expression,e.Diagnostics.JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array)}(t),t.expression){var n=wD(t.expression,r);return t.dotDotDotToken&&n!==Le&&!qf(n)&&Qn(t,e.Diagnostics.JSX_spread_child_must_be_an_array_type),n}return je}function fh(t){return t.valueDeclaration?e.getCombinedNodeFlags(t.valueDeclaration):0}function gh(t){if(8192&t.flags||4&e.getCheckFlags(t))return!0;if(e.isInJSFile(t.valueDeclaration)){var r=t.valueDeclaration.parent;return r&&e.isBinaryExpression(r)&&3===e.getAssignmentDeclarationKind(r)}}function mh(e,t,r,n,i,a){return void 0===a&&(a=!0),yh(e,t,r,n,i,a?163===e.kind?e.right:202===e.kind?e:205===e.kind&&e.propertyName?e.propertyName:e.name:void 0)}function yh(t,r,n,i,a,o){var s,c,u=e.getDeclarationModifierFlagsFromSymbol(a,n);if(r){if(V<2&&vh(a))return o&&Qn(o,e.Diagnostics.Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword),!1;if(256&u)return o&&Qn(o,e.Diagnostics.Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression,no(a),ao(Lf(a))),!1}if(256&u&&vh(a)&&(e.isThisProperty(t)||e.isThisInitializedObjectBindingExpression(t)||e.isObjectBindingPattern(t.parent)&&e.isThisInitializedDeclaration(t.parent.parent))&&((c=e.getClassLikeDeclarationOfSymbol(Ta(a)))&&(s=t,e.findAncestor(s,(function(t){return!!(e.isConstructorDeclaration(t)&&e.nodeIsPresent(t.body)||e.isPropertyDeclaration(t))||!(!e.isClassLike(t)&&!e.isFunctionLikeDeclaration(t))&&"quit"})))))return o&&Qn(o,e.Diagnostics.Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor,no(a),e.getTextOfIdentifierOrLiteral(c.name)),!1;if(!(24&u))return!0;if(8&u)return!!CC(t,c=e.getClassLikeDeclarationOfSymbol(Ta(a)))||(o&&Qn(o,e.Diagnostics.Property_0_is_private_and_only_accessible_within_class_1,no(a),ao(Lf(a))),!1);if(r)return!0;var l=TC(t,(function(e){return Bf(qs(Sa(e)),a,n)}));return!l&&(l=function(t){var r=function(t){var r=e.getThisContainer(t,!1);return r&&e.isFunctionLike(r)?e.getThisParameter(r):void 0}(t),n=(null==r?void 0:r.type)&&ip(r.type);n&&262144&n.flags&&(n=Yc(n));if(n&&7&e.getObjectFlags(n))return bs(n);return}(t),l=l&&Bf(l,a,n),32&u||!l)?(o&&Qn(o,e.Diagnostics.Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses,no(a),ao(Lf(a)||i)),!1):!!(32&u)||(262144&i.flags&&(i=i.isThisType?Yc(i):ru(i)),!(!i||!xs(i,l))||(o&&Qn(o,e.Diagnostics.Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_class_2,no(a),ao(l),ao(i)),!1))}function vh(e){return!!Mf(e,(function(e){return!(8192&e.flags)}))}function hh(e){return Ch(wD(e),e)}function bh(e){return!!(50331648&Vm(e))}function xh(e){return bh(e)?xg(e):e}function Dh(t,r){var n=e.isEntityNameExpression(t)?e.entityNameToString(t):void 0;if(104!==t.kind)if(void 0!==n&&n.length<100){if(e.isIdentifier(t)&&"undefined"===n)return void Qn(t,e.Diagnostics.The_value_0_cannot_be_used_here,"undefined");Qn(t,16777216&r?33554432&r?e.Diagnostics._0_is_possibly_null_or_undefined:e.Diagnostics._0_is_possibly_undefined:e.Diagnostics._0_is_possibly_null,n)}else Qn(t,16777216&r?33554432&r?e.Diagnostics.Object_is_possibly_null_or_undefined:e.Diagnostics.Object_is_possibly_undefined:e.Diagnostics.Object_is_possibly_null);else Qn(t,e.Diagnostics.The_value_0_cannot_be_used_here,"null")}function Sh(t,r){Qn(t,16777216&r?33554432&r?e.Diagnostics.Cannot_invoke_an_object_which_is_possibly_null_or_undefined:e.Diagnostics.Cannot_invoke_an_object_which_is_possibly_undefined:e.Diagnostics.Cannot_invoke_an_object_which_is_possibly_null)}function Th(t,r,n){if(G&&2&t.flags){if(e.isEntityNameExpression(r)){var i=e.entityNameToString(r);if(i.length<100)return Qn(r,e.Diagnostics._0_is_of_type_unknown,i),je}return Qn(r,e.Diagnostics.Object_is_of_type_unknown),je}var a=Vm(t);if(50331648&a){n(r,a);var o=xg(t);return 229376&o.flags?je:o}return t}function Ch(e,t){return Th(e,t,Dh)}function Eh(t,r){var n=Ch(t,r);if(16384&n.flags){if(e.isEntityNameExpression(r)){var i=e.entityNameToString(r);if(e.isIdentifier(r)&&"undefined"===i)return Qn(r,e.Diagnostics.The_value_0_cannot_be_used_here,i),n;if(i.length<100)return Qn(r,e.Diagnostics._0_is_possibly_undefined,i),n}Qn(r,e.Diagnostics.Object_is_possibly_undefined)}return n}function kh(e,t){return 32&e.flags?function(e,t){var r=wD(e.expression),n=Cg(r,e.expression);return Tg(Mh(e,e.expression,Ch(n,e.expression),e.name,t),e,n!==r)}(e,t):Mh(e,e.expression,hh(e.expression),e.name,t)}function Nh(t,r){var n=e.isPartOfTypeQuery(t)&&e.isThisIdentifier(t.left)?Ch(ev(t.left),t.left):hh(t.left);return Mh(t,t.left,n,t.right,r)}function Ah(t){for(;214===t.parent.kind;)t=t.parent;return e.isCallOrNewExpression(t.parent)&&t.parent.expression===t}function Fh(t,r){for(var n=e.getContainingClass(r);n;n=e.getContainingClass(n)){var i=n.symbol,a=e.getSymbolNameForPrivateIdentifier(i,t),o=i.members&&i.members.get(a)||i.exports&&i.exports.get(a);if(o)return o}}function Ph(t){!function(t){if(!e.getContainingClass(t))return WE(t,e.Diagnostics.Private_identifiers_are_not_allowed_outside_class_bodies);if(!e.isForInStatement(t.parent)){if(!e.isExpressionNode(t))return WE(t,e.Diagnostics.Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member_declaration_property_access_or_on_the_left_hand_side_of_an_in_expression);var r=e.isBinaryExpression(t.parent)&&101===t.parent.operatorToken.kind;if(!wh(t)&&!r)return WE(t,e.Diagnostics.Cannot_find_name_0,e.idText(t))}}(t);var r=wh(t);return r&&Qh(r,void 0,!1),Le}function wh(t){if(e.isExpressionNode(t)){var r=di(t);return void 0===r.resolvedSymbol&&(r.resolvedSymbol=Fh(t.escapedText,t)),r.resolvedSymbol}}function Ih(e,t){return xu(e,t.escapedName)}function Oh(t,r){return(zo(r)||e.isThisProperty(t)&&Uo(r))&&e.getThisContainer(t,!0)===Ko(r)}function Mh(t,r,n,i,a){var o,c,u=di(r).resolvedSymbol,l=e.getAssignmentTargetKind(t),_=_u(0!==l||Ah(t)?Rg(n):n),d=Eo(_)||_===ut;if(e.isPrivateIdentifier(i)){V<99&&(0!==l&&yE(t,1048576),1!==l&&yE(t,524288));var p=Fh(i.escapedText,i);if(l&&p&&p.valueDeclaration&&e.isMethodDeclaration(p.valueDeclaration)&&WE(i,e.Diagnostics.Cannot_assign_to_private_method_0_Private_methods_are_not_writable,e.idText(i)),d){if(p)return ko(_)?je:_;if(!e.getContainingClass(i))return WE(i,e.Diagnostics.Private_identifiers_are_not_allowed_outside_class_bodies),Le}if(!(o=p?Ih(n,p):void 0)&&function(t,r,n){var i,a=Qc(t);a&&e.forEach(a,(function(t){var n=t.valueDeclaration;if(n&&e.isNamedDeclaration(n)&&e.isPrivateIdentifier(n.name)&&n.name.escapedText===r.escapedText)return i=t,!0}));var o=Si(r);if(i){var c=e.Debug.checkDefined(i.valueDeclaration),u=e.Debug.checkDefined(e.getContainingClass(c));if(null==n?void 0:n.valueDeclaration){var l=n.valueDeclaration,_=e.getContainingClass(l);if(e.Debug.assert(!!_),e.findAncestor(_,(function(e){return u===e}))){var d=Qn(r,e.Diagnostics.The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_private_identifier_with_the_same_spelling,o,ao(t));return e.addRelatedInfo(d,e.createDiagnosticForNode(l,e.Diagnostics.The_shadowing_declaration_of_0_is_defined_here,o),e.createDiagnosticForNode(c,e.Diagnostics.The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here,o)),!0}}return Qn(r,e.Diagnostics.Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier,o,Si(u.name||s)),!0}return!1}(n,i,p))return je;o&&65536&o.flags&&!(32768&o.flags)&&1!==l&&Qn(t,e.Diagnostics.Private_accessor_was_defined_without_a_getter)}else{if(d)return e.isIdentifier(r)&&u&&Hy(u,t),ko(_)?je:_;o=xu(_,i.escapedText,!1,163===t.kind)}if(e.isIdentifier(r)&&u&&(K.isolatedModules||!o||!(HC(o)||8&o.flags&&302===t.parent.kind)||e.shouldPreserveConstEnums(K)&&Wy(t))&&Hy(u,t),o){ei(o)&&sd(t,o)&&o.declarations&&ti(i,o.declarations,i.escapedText),function(t,r,n){var i,a=t.valueDeclaration;if(!a||e.getSourceFileOfNode(r).isDeclarationFile)return;var o=e.idText(n);!Bh(r)||function(t){return e.isPropertyDeclaration(t)&&!e.hasAccessorModifier(t)&&t.questionToken}(a)||e.isAccessExpression(r)&&e.isAccessExpression(r.expression)||gi(a,n)||e.isMethodDeclaration(a)&&32&e.getCombinedModifierFlags(a)||!K.useDefineForClassFields&&function(e){if(!(32&e.parent.flags))return!1;var t=ys(e.parent);for(;;){if(!(t=t.symbol&&jh(t)))return!1;var r=xu(t,e.escapedName);if(r&&r.valueDeclaration)return!0}}(t)?260!==a.kind||180===r.parent.kind||16777216&a.flags||gi(a,n)||(i=Qn(n,e.Diagnostics.Class_0_used_before_its_declaration,o)):i=Qn(n,e.Diagnostics.Property_0_is_used_before_its_initialization,o);i&&e.addRelatedInfo(i,e.createDiagnosticForNode(a,e.Diagnostics._0_is_declared_here,o))}(o,t,i),Qh(o,t,Xh(r,u)),di(t).resolvedSymbol=o;var f=e.isWriteAccess(t);if(mh(t,106===r.kind,f,_,o),qx(t,o,l))return Qn(i,e.Diagnostics.Cannot_assign_to_0_because_it_is_a_read_only_property,e.idText(i)),je;c=Oh(t,o)?Re:f?ms(o):ys(o)}else{var g=e.isPrivateIdentifier(i)||0!==l&&pd(n)&&!e.isThisTypeParameter(n)?void 0:Iu(_,i.escapedText);if(!g||!g.type){var m=Lh(t,n.symbol,!0);return!m&&ad(n)?Le:n.symbol===ue?(ue.exports.has(i.escapedText)&&418&ue.exports.get(i.escapedText).flags?Qn(i,e.Diagnostics.Property_0_does_not_exist_on_type_1,e.unescapeLeadingUnderscores(i.escapedText),ao(n)):Z&&Qn(i,e.Diagnostics.Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature,ao(n)),Le):(i.escapedText&&!Ci(t)&&Jh(i,e.isThisTypeParameter(n)?_:n,m),je)}g.isReadonly&&(e.isAssignmentTarget(t)||e.isDeleteTarget(t))&&Qn(t,e.Diagnostics.Index_signature_in_type_0_only_permits_reading,ao(_)),c=K.noUncheckedIndexedAccess&&!e.isAssignmentTarget(t)?P_([g.type,qe]):g.type,K.noPropertyAccessFromIndexSignature&&e.isPropertyAccessExpression(t)&&Qn(i,e.Diagnostics.Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0,e.unescapeLeadingUnderscores(i.escapedText)),g.declaration&&268435456&e.getCombinedNodeFlags(g.declaration)&&ti(i,[g.declaration],i.escapedText)}return Rh(t,o,c,i,a)}function Lh(t,r,n){var i=e.getSourceFileOfNode(t);if(i&&void 0===K.checkJs&&void 0===i.checkJsDirective&&(1===i.scriptKind||2===i.scriptKind)){var a=e.forEach(null==r?void 0:r.declarations,e.getSourceFileOfNode);return!(i!==a&&a&&pi(a)||n&&r&&32&r.flags||t&&n&&e.isPropertyAccessExpression(t)&&108===t.expression.kind)}return!1}function Rh(t,r,n,i,a){var o=e.getAssignmentTargetKind(t);if(1===o)return Eg(n,!!(r&&16777216&r.flags));if(r&&!(98311&r.flags)&&!(8192&r.flags&&1048576&n.flags)&&!_C(r.declarations))return n;if(n===Re)return qo(t,r);n=qy(n,t,a);var s=!1;if(G&&Y&&e.isAccessExpression(t)&&108===t.expression.kind){var c=r&&r.valueDeclaration;if(c&&UT(c)&&!e.isStatic(c)){var u=jy(t);173!==u.kind||u.parent!==c.parent||16777216&c.flags||(s=!0)}}else G&&r&&r.valueDeclaration&&e.isPropertyAccessExpression(r.valueDeclaration)&&e.getAssignmentDeclarationPropertyAccessKind(r.valueDeclaration)&&jy(t)===jy(r.valueDeclaration)&&(s=!0);var l=By(t,n,s?bg(n):n);return s&&!_f(n)&&_f(l)?(Qn(i,e.Diagnostics.Property_0_is_used_before_being_assigned,no(r)),n):o?og(l):l}function Bh(t){return!!e.findAncestor(t,(function(t){switch(t.kind){case 169:return!0;case 299:case 171:case 174:case 175:case 301:case 164:case 236:case 291:case 288:case 289:case 290:case 283:case 230:case 294:return!1;case 216:case 241:return!(!e.isBlock(t.parent)||!e.isClassStaticBlockDeclaration(t.parent.parent))||"quit";default:return!e.isExpressionNode(t)&&"quit"}}))}function jh(e){var t=Is(e);if(0!==t.length)return j_(t)}function Jh(t,r,n){var i,a;if(!e.isPrivateIdentifier(t)&&1048576&r.flags&&!(131068&r.flags))for(var o=0,s=r.types;o<s.length;o++){var c=s[o];if(!xu(c,t.escapedText)&&!Iu(c,t.escapedText)){i=e.chainDiagnosticMessages(i,e.Diagnostics.Property_0_does_not_exist_on_type_1,e.declarationNameToString(t),ao(c));break}}if(zh(t.escapedText,r)){var u=e.declarationNameToString(t),l=ao(r);i=e.chainDiagnosticMessages(i,e.Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead,u,l,l+"."+u)}else{var _=rS(r);if(_&&xu(_,t.escapedText))i=e.chainDiagnosticMessages(i,e.Diagnostics.Property_0_does_not_exist_on_type_1,e.declarationNameToString(t),ao(r)),a=e.createDiagnosticForNode(t,e.Diagnostics.Did_you_forget_to_use_await);else{var d=e.declarationNameToString(t),p=ao(r),f=function(t,r){var n=_u(r).symbol;if(!n)return;for(var i=e.getScriptTargetFeatures(),a=e.getOwnKeys(i),o=0,s=a;o<s.length;o++){var c=s[o],u=i[c][e.symbolName(n)];if(void 0!==u&&e.contains(u,t))return c}}(d,r);if(void 0!==f)i=e.chainDiagnosticMessages(i,e.Diagnostics.Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2_or_later,d,p,f);else{var g=Kh(t,r);if(void 0!==g){var m=e.symbolName(g),y=n?e.Diagnostics.Property_0_may_not_exist_on_type_1_Did_you_mean_2:e.Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_2;i=e.chainDiagnosticMessages(i,y,d,p,m),a=g.valueDeclaration&&e.createDiagnosticForNode(g.valueDeclaration,e.Diagnostics._0_is_declared_here,m)}else{var v=function(t){return K.lib&&!K.lib.includes("dom")&&(r=t,n=function(t){return t.symbol&&/^(EventTarget|Node|((HTML[a-zA-Z]*)?Element))$/.test(e.unescapeLeadingUnderscores(t.symbol.escapedName))},3145728&r.flags?e.every(r.types,n):n(r))&&uf(t);var r,n}(r)?e.Diagnostics.Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom:e.Diagnostics.Property_0_does_not_exist_on_type_1;i=e.chainDiagnosticMessages(bu(i,r),v,d,p)}}}}var h=e.createDiagnosticForNodeFromMessageChain(t,i);a&&e.addRelatedInfo(h,a),Xn(!n||i.code!==e.Diagnostics.Property_0_may_not_exist_on_type_1_Did_you_mean_2.code,h)}function zh(t,r){var n=r.symbol&&xu(ys(r.symbol),t);return void 0!==n&&!!n.valueDeclaration&&e.isStatic(n.valueDeclaration)}function Uh(e,t){return Gh(e,Qc(t),106500)}function Kh(t,r){var n=Qc(r);if("string"!=typeof t){var i=t.parent;e.isPropertyAccessExpression(i)&&(n=e.filter(n,(function(e){return Yh(i,r,e)}))),t=e.idText(t)}return Gh(t,n,111551)}function Vh(t,r){var n=e.isString(t)?t:e.idText(t),i=Qc(r),a="for"===n?e.find(i,(function(t){return"htmlFor"===e.symbolName(t)})):"class"===n?e.find(i,(function(t){return"className"===e.symbolName(t)})):void 0;return null!=a?a:Gh(n,i,111551)}function qh(t,r){var n=Kh(t,r);return n&&e.symbolName(n)}function Wh(t,r,n){e.Debug.assert(void 0!==r,"outername should always be defined");var i=hi(t,r,n,void 0,r,!1,!1,!0,(function(t,n,i){e.Debug.assertEqual(r,n,"name should equal outerName");var a,o=fi(t,n,i);if(o)return o;t===se?a=e.mapDefined(["string","number","boolean","object","bigint","symbol"],(function(e){return t.has(e.charAt(0).toUpperCase()+e.slice(1))?ri(524288,e):void 0})).concat(e.arrayFrom(t.values())):a=e.arrayFrom(t.values());return Gh(e.unescapeLeadingUnderscores(n),a,i)}));return i}function Hh(t,r){return r.exports&&Gh(e.idText(t),ga(r),2623475)}function Gh(t,r,n){return e.getSpellingSuggestion(t,r,(function(t){var r=e.symbolName(t);if(e.startsWith(r,'"'))return;if(t.flags&n)return r;if(2097152&t.flags){var i=function(e){if(_i(e).aliasTarget!==Ie)return Xi(e)}(t);if(i&&i.flags&n)return r}return}))}function Qh(t,r,n){var i=t&&106500&t.flags&&t.valueDeclaration;if(i){var a=e.hasEffectiveModifier(i,8),o=t.valueDeclaration&&e.isNamedDeclaration(t.valueDeclaration)&&e.isPrivateIdentifier(t.valueDeclaration.name);if((a||o)&&(!r||!e.isWriteOnlyAccess(r)||65536&t.flags)){if(n){var s=e.findAncestor(r,e.isFunctionLikeDeclaration);if(s&&s.symbol===t)return}(1&e.getCheckFlags(t)?_i(t).target:t).isReferenced=67108863}}}function Xh(t,r){return 108===t.kind||!!r&&e.isEntityNameExpression(t)&&r===Em(e.getFirstIdentifier(t))}function Yh(e,t,r){return $h(e,208===e.kind&&106===e.expression.kind,!1,t,r)}function Zh(e,t,r,n){if(Eo(n))return!0;var i=xu(n,r);return!!i&&$h(e,t,!1,n,i)}function $h(t,r,n,i,a){if(Eo(i))return!0;if(a.valueDeclaration&&e.isPrivateIdentifierClassElementDeclaration(a.valueDeclaration)){var o=e.getContainingClass(a.valueDeclaration);return!e.isOptionalChain(t)&&!!e.findAncestor(t,(function(e){return e===o}))}return yh(t,r,n,i,a)}function eb(t){var r=t.initializer;if(258===r.kind){var n=r.declarations[0];if(n&&!e.isBindingPattern(n.name))return Sa(n)}else if(79===r.kind)return Em(r)}function tb(e,t){return 32&e.flags?function(e,t){var r=wD(e.expression),n=Cg(r,e.expression);return Tg(rb(e,Ch(n,e.expression),t),e,n!==r)}(e,t):rb(e,hh(e.expression),t)}function rb(t,r,n){var i=0!==e.getAssignmentTargetKind(t)||Ah(t)?Rg(r):r,a=t.argumentExpression,o=wD(a);if(ko(i)||i===ut)return i;if(eD(i)&&!e.isStringLiteralLike(a))return Qn(a,e.Diagnostics.A_const_enum_member_can_only_be_accessed_using_a_string_literal),je;var s=function(t){var r,n=e.skipParentheses(t);if(79===n.kind){var i=Em(n);if(3&i.flags)for(var a=t,o=t.parent;o;){if(246===o.kind&&a===o.statement&&eb(o)===i&&1===Nu(r=AD(o.expression)).length&&Au(r,Ze))return!0;a=o,o=o.parent}}return!1}(a)?Ze:o,c=Dd(i,s,e.isAssignmentTarget(t)?4|(pd(i)&&!e.isThisTypeParameter(i)?2:0):32,t)||je;return GD(Rh(t,di(t).resolvedSymbol,c,a,n),t)}function nb(t){return e.isCallOrNewExpression(t)||e.isTaggedTemplateExpression(t)||e.isJsxOpeningLikeElement(t)}function ib(t){return nb(t)&&e.forEach(t.typeArguments,dC),212===t.kind?wD(t.template):e.isJsxOpeningLikeElement(t)?wD(t.attributes):167!==t.kind&&e.forEach(t.arguments,(function(e){wD(e)})),Jr}function ab(e){return ib(e),zr}function ob(e){return!!e&&(227===e.kind||234===e.kind&&e.isSpread)}function sb(t){return e.findIndex(t,ob)}function cb(e){return!!(16384&e.flags)}function ub(e){return!!(49155&e.flags)}function lb(t,r,n,i){var a;void 0===i&&(i=!1);var o=!1,s=xx(n),c=Dx(n);if(212===t.kind)if(a=r.length,225===t.template.kind){var u=e.last(t.template.templateSpans);o=e.nodeIsMissing(u.literal)||!!u.literal.isUnterminated}else{var l=t.template;e.Debug.assert(14===l.kind),o=!!l.isUnterminated}else if(167===t.kind)a=Eb(t,n);else if(e.isJsxOpeningLikeElement(t)){if(o=t.attributes.end===t.end)return!0;a=0===c?r.length:1,s=0===r.length?s:1,c=Math.min(c,1)}else{if(!t.arguments)return e.Debug.assert(211===t.kind),0===Dx(n);a=i?r.length+1:r.length,o=t.arguments.end===t.end;var _=sb(r);if(_>=0)return _>=Dx(n)&&(Sx(n)||_<xx(n))}if(!Sx(n)&&a>s)return!1;if(o||a>=c)return!0;for(var d=a;d<c;d++){if(131072&py(vx(n,d),e.isInJSFile(t)&&!G?ub:cb).flags)return!1}return!0}function _b(t,r){var n=e.length(t.typeParameters),i=zu(t.typeParameters);return!e.some(r)||r.length>=i&&r.length<=n}function db(e){return fb(e,0,!1)}function pb(e){return fb(e,0,!1)||fb(e,1,!1)}function fb(e,t,r){if(524288&e.flags){var n=qc(e);if(r||0===n.properties.length&&0===n.indexInfos.length){if(0===t&&1===n.callSignatures.length&&0===n.constructSignatures.length)return n.callSignatures[0];if(1===t&&1===n.constructSignatures.length&&0===n.callSignatures.length)return n.constructSignatures[0]}}}function gb(t,r,n,i){var a=Vg(t.typeParameters,t,0,i),o=Tx(r),s=n&&(o&&262144&o.flags?n.nonFixingMapper:n.mapper);return Ug(s?xp(r,s):r,t,(function(e,t){gm(a.inferences,e,t)})),n||Kg(r,t,(function(e,t){gm(a.inferences,e,t,128)})),tl(t,Tm(a),e.isInJSFile(r.declaration))}function mb(t){if(!t)return st;var r=wD(t);return e.isOptionalChainRoot(t.parent)?xg(r):e.isOptionalChain(t.parent)?Sg(r):r}function yb(t,r,n,i,a){if(e.isJsxOpeningLikeElement(t))return function(e,t,r,n){var i=Fv(t,e),a=dD(e.attributes,i,n,r);return gm(n.inferences,a,i),Tm(n)}(t,r,i,a);if(167!==t.kind){var o=e.every(r.typeParameters,(function(e){return!!su(e)})),s=Nv(t,o?8:0);if(s){var c=Yu(r);if(Yg(c)){var u=Av(t);if(!(!o&&Nv(t,8)!==s)){var l=Xg(function(t,r){return void 0===r&&(r=0),t&&qg(e.map(t.inferences,Qg),t.signature,t.flags|r,t.compareTypes)}(u,1)),_=Fp(s,l),d=db(_),p=d&&d.typeParameters?sl(rl(d,d.typeParameters)):_;gm(a.inferences,p,c,128)}var f=Vg(r.typeParameters,r,a.flags),g=Fp(s,u&&u.returnMapper);gm(f.inferences,g,c),a.returnMapper=e.some(f.inferences,TD)?Xg(function(t){var r=e.filter(t.inferences,TD);return r.length?qg(e.map(r,Qg),t.signature,t.flags,t.compareTypes):void 0}(f)):void 0}}}var m=Cx(r),y=m?Math.min(xx(r)-1,n.length):n.length;if(m&&262144&m.flags){var v=e.find(a.inferences,(function(e){return e.typeParameter===m}));v&&(v.impliedArity=e.findIndex(n,ob,y)<0?n.length-y:void 0)}var h=Gu(r);if(h&&Yg(h)){var b=Sb(t);gm(a.inferences,mb(b),h)}for(var x=0;x<y;x++){var D=n[x];if(229!==D.kind&&!(32&i&&om(D))){var S=vx(r,x);if(Yg(S)){var T=dD(D,S,a,i);gm(a.inferences,T,S)}}}if(m&&Yg(m)){var C=hb(n,y,n.length,m,a,i);gm(a.inferences,C,m)}return Tm(a)}function vb(e){return 1048576&e.flags?my(e,vb):1&e.flags||Gf(ru(e)||e)?e:_g(e)?m_(Tl(e),e.target.elementFlags,!1,e.target.labeledElementDeclarations):m_([e],[8])}function hb(t,r,n,i,a,o){if(r>=n-1&&ob(_=t[n-1]))return vb(234===_.kind?_.type:dD(_.expression,i,a,o));for(var s=[],c=[],u=[],l=r;l<n;l++){var _;if(ob(_=t[l])){var d=234===_.kind?_.type:wD(_.expression);Xf(d)?(s.push(d),c.push(8)):(s.push(eT(33,d,qe,227===_.kind?_.expression:_)),c.push(4))}else{var p=bd(i,Yd(l-r),256),f=dD(_,p,a,o),g=Yx(p,406978556);s.push(g?Gd(f):sg(f)),c.push(1)}234===_.kind&&_.tupleNameSource&&u.push(_.tupleNameSource)}return m_(s,c,!1,e.length(u)===e.length(s)?u:void 0)}function bb(t,r,n,i){for(var a,o=e.isInJSFile(t.declaration),s=t.typeParameters,c=Uu(e.map(r,ip),s,zu(s),o),u=0;u<r.length;u++){e.Debug.assert(void 0!==s[u],"Should not call checkTypeArguments with too many type arguments");var l=Yc(s[u]);if(l){var _=n&&i?function(){return e.chainDiagnosticMessages(void 0,e.Diagnostics.Type_0_does_not_satisfy_the_constraint_1)}:void 0,d=i||e.Diagnostics.Type_0_does_not_satisfy_the_constraint_1;a||(a=lp(s,c));var p=c[u];if(!Gp(p,_c(Fp(l,a),p),n?r[u]:void 0,d,_))return}}return c}function xb(t){if(Hv(t.tagName))return 2;var r=_u(wD(t.tagName));return e.length(Su(r,1))?0:e.length(Su(r,0))?1:2}function Db(t,r,n,i,a,o,s){var c={errors:void 0,skipLogging:!0};if(e.isJsxOpeningLikeElement(t))return function(t,r,n,i,a,o,s){var c=Fv(r,t),u=dD(t.attributes,c,void 0,i);return function(){var r;if(eh(t))return!0;var n=e.isJsxOpeningElement(t)||e.isJsxSelfClosingElement(t)&&!Hv(t.tagName)?wD(t.tagName):void 0;if(!n)return!0;var i=Su(n,0);if(!e.length(i))return!0;var o=fE(t);if(!o)return!0;var c=aa(o,111551,!0,!1,t);if(!c)return!0;var u=Su(ys(c),0);if(!e.length(u))return!0;for(var l=!1,_=0,d=0,p=u;d<p.length;d++){var f=Su(vx(p[d],0),0);if(e.length(f))for(var g=0,m=f;g<m.length;g++){var y=m[g];if(l=!0,Sx(y))return!0;var v=xx(y);v>_&&(_=v)}}if(!l)return!0;for(var h=1/0,b=0,x=i;b<x.length;b++){var D=Dx(x[b]);D<h&&(h=D)}if(h<=_)return!0;if(a){var S=e.createDiagnosticForNode(t.tagName,e.Diagnostics.Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3,e.entityNameToString(t.tagName),h,e.entityNameToString(o),_),T=null===(r=AC(t.tagName))||void 0===r?void 0:r.valueDeclaration;T&&e.addRelatedInfo(S,e.createDiagnosticForNode(T,e.Diagnostics._0_is_declared_here,e.entityNameToString(t.tagName))),s&&s.skipLogging&&(s.errors||(s.errors=[])).push(S),s.skipLogging||Pn.add(S)}return!1}()&&Xp(u,c,n,a?t.tagName:void 0,t.attributes,void 0,o,s)}(t,n,i,a,o,s,c)?void 0:(e.Debug.assert(!o||!!c.errors,"jsx should have errors when reporting errors"),c.errors||e.emptyArray);var u=Gu(n);if(u&&u!==st&&211!==t.kind){var l=Sb(t),_=mb(l),d=o?l||t:void 0,p=e.Diagnostics.The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1;if(!hf(_,u,i,d,p,s,c))return e.Debug.assert(!o||!!c.errors,"this parameter should have errors when reporting errors"),c.errors||e.emptyArray}for(var f=e.Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1,g=Cx(n),m=g?Math.min(xx(n)-1,r.length):r.length,y=0;y<m;y++){var v=r[y];if(229!==v.kind){var h=vx(n,y),b=dD(v,h,void 0,a),x=4&a?Pg(b):b;if(!Xp(x,h,i,o?v:void 0,v,f,s,c))return e.Debug.assert(!o||!!c.errors,"parameter should have errors when reporting errors"),T(v,x,h),c.errors||e.emptyArray}}if(g){var D=hb(r,m,r.length,g,void 0,a),S=r.length-m;d=o?0===S?t:1===S?r[m]:e.setTextRangePosEnd(Tb(t,D),r[m].pos,r[r.length-1].end):void 0;if(!hf(D,g,i,d,f,void 0,c))return e.Debug.assert(!o||!!c.errors,"rest parameter should have errors when reporting errors"),T(d,D,g),c.errors||e.emptyArray}return;function T(t,r,n){if(t&&o&&c.errors&&c.errors.length){if(tS(n))return;var a=tS(r);a&&gf(a,n,i)&&e.addRelatedInfo(c.errors[0],e.createDiagnosticForNode(t,e.Diagnostics.Did_you_forget_to_use_await))}}}function Sb(t){var r=210===t.kind?t.expression:212===t.kind?t.tag:void 0;if(r){var n=e.skipOuterExpressions(r);if(e.isAccessExpression(n))return n.expression}}function Tb(t,r,n,i){var a=e.parseNodeFactory.createSyntheticExpression(r,n,i);return e.setTextRange(a,t),e.setParent(a,t),a}function Cb(t){if(212===t.kind){var r=t.template,n=[Tb(r,Tr||(Tr=Gl("TemplateStringsArray",0,!0)||Ct))];return 225===r.kind&&e.forEach(r.templateSpans,(function(e){n.push(e.expression)})),n}if(167===t.kind)return function(t){var r=t.parent,n=t.expression;switch(r.kind){case 260:case 228:return[Tb(n,ys(Sa(r)))];case 166:var i=r.parent;return[Tb(n,173===r.parent.kind?ys(Sa(i)):je),Tb(n,Le),Tb(n,Ze)];case 169:case 171:case 174:case 175:var a=0!==V&&(!e.isPropertyDeclaration(r)||e.hasAccessorModifier(r));return[Tb(n,IC(r)),Tb(n,OC(r)),Tb(n,a?c_(FC(r)):Le)]}return e.Debug.fail()}(t);if(e.isJsxOpeningLikeElement(t))return t.attributes.properties.length>0||e.isJsxOpeningElement(t)&&t.parent.children.length>0?[t.attributes]:e.emptyArray;var i=t.arguments||e.emptyArray,a=sb(i);if(a>=0){for(var o=i.slice(0,a),s=function(t){var r=i[t],n=227===r.kind&&(rn?wD(r.expression):pD(r.expression));n&&_g(n)?e.forEach(Tl(n),(function(e,t){var i,a=n.target.elementFlags[t],s=Tb(r,4&a?u_(e):e,!!(12&a),null===(i=n.target.labeledElementDeclarations)||void 0===i?void 0:i[t]);o.push(s)})):o.push(r)},c=a;c<i.length;c++)s(c);return o}return i}function Eb(t,r){switch(t.parent.kind){case 260:case 228:return 1;case 169:return e.hasAccessorModifier(t.parent)?3:2;case 171:case 174:case 175:return 0===V||r.parameters.length<=2?2:3;case 166:return 3;default:return e.Debug.fail()}}function kb(t,r){var n,i,a=e.getSourceFileOfNode(t);if(e.isPropertyAccessExpression(t.expression)){var o=e.getErrorSpanForNode(a,t.expression.name);n=o.start,i=r?o.length:t.end-n}else{var s=e.getErrorSpanForNode(a,t.expression);n=s.start,i=r?s.length:t.end-n}return{start:n,length:i,sourceFile:a}}function Nb(t,r,n,i,a,o){if(e.isCallExpression(t)){var s=kb(t),c=s.sourceFile,u=s.start,l=s.length;return e.createFileDiagnostic(c,u,l,r,n,i,a,o)}return e.createDiagnosticForNode(t,r,n,i,a,o)}function Ab(t,r,n){var i,a=sb(n);if(a>-1)return e.createDiagnosticForNode(n[a],e.Diagnostics.A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter);for(var o,s=Number.POSITIVE_INFINITY,c=Number.NEGATIVE_INFINITY,u=Number.NEGATIVE_INFINITY,l=Number.POSITIVE_INFINITY,_=0,d=r;_<d.length;_++){var p=d[_],f=Dx(p),g=xx(p);f<s&&(s=f,o=p),c=Math.max(c,g),f<n.length&&f>u&&(u=f),n.length<g&&g<l&&(l=g)}var m=e.some(r,Sx),y=m?s:s<c?s+"-"+c:s,v=!m&&1===y&&0===n.length&&function(t){if(!e.isCallExpression(t)||!e.isIdentifier(t.expression))return!1;var r=vi(t.expression,t.expression.escapedText,111551,void 0,void 0,!1),n=null==r?void 0:r.valueDeclaration;if(!(n&&e.isParameter(n)&&e.isFunctionExpressionOrArrowFunction(n.parent)&&e.isNewExpression(n.parent.parent)&&e.isIdentifier(n.parent.parent.expression)))return!1;var i=r_(!1);return!!i&&AC(n.parent.parent.expression,!0)===i}(t);if(v&&e.isInJSFile(t))return Nb(t,e.Diagnostics.Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_without_arguments);var h=m?e.Diagnostics.Expected_at_least_0_arguments_but_got_1:v?e.Diagnostics.Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise:e.Diagnostics.Expected_0_arguments_but_got_1;if(s<n.length&&n.length<c)return Nb(t,e.Diagnostics.No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments,n.length,u,l);if(n.length<s){var b=Nb(t,h,y,n.length),x=null===(i=null==o?void 0:o.declaration)||void 0===i?void 0:i.parameters[o.thisParameter?n.length+1:n.length];if(x){var D=e.createDiagnosticForNode(x,e.isBindingPattern(x.name)?e.Diagnostics.An_argument_matching_this_binding_pattern_was_not_provided:e.isRestParameter(x)?e.Diagnostics.Arguments_for_the_rest_parameter_0_were_not_provided:e.Diagnostics.An_argument_for_0_was_not_provided,x.name?e.isBindingPattern(x.name)?void 0:e.idText(e.getFirstIdentifier(x.name)):n.length);return e.addRelatedInfo(b,D)}return b}var S=e.factory.createNodeArray(n.slice(c)),T=e.first(S).pos,C=e.last(S).end;return C===T&&C++,e.setTextRangePosEnd(S,T,C),e.createDiagnosticForNodeArray(e.getSourceFileOfNode(t),S,h,y,n.length)}function Fb(t,r,n,i,o,s){var c,u=212===t.kind,l=167===t.kind,_=e.isJsxOpeningLikeElement(t),d=!n;l||e.isSuperCall(t)||(c=t.typeArguments,(u||_||106!==t.expression.kind)&&e.forEach(c,dC));var p=n||[];if(function(t,r,n){var i,a,o,s,c=0,u=-1;e.Debug.assert(!r.length);for(var l=0,_=t;l<_.length;l++){var d=_[l],p=d.declaration&&Sa(d.declaration),f=d.declaration&&d.declaration.parent;a&&p!==a?(o=c=r.length,i=f):i&&f===i?o+=1:(i=f,o=c),a=p,R(d)?(s=++u,c++):s=o,r.splice(s,0,n?mc(d,n):d)}}(r,p,o),!p.length)return d&&Pn.add(Nb(t,e.Diagnostics.Call_target_does_not_contain_any_signatures)),ab(t);var f,g,m,y,v=Cb(t),h=1===p.length&&!p[0].typeParameters,b=l||h||!e.some(v,Mp)?0:4;b|=32&i;var x=!!(16&i)&&210===t.kind&&t.arguments.hasTrailingComma;if(p.length>1&&(y=q(p,On,h,x)),y||(y=q(p,Ln,h,x)),y)return y;if(y=function(t,r,n,i,a){return e.Debug.assert(r.length>0),gC(t),i||1===r.length||r.some((function(e){return!!e.typeParameters}))?function(t,r,n,i){var a=function(e,t){for(var r=-1,n=-1,i=0;i<e.length;i++){var a=e[i],o=xx(a);if(Sx(a)||o>=t)return i;o>n&&(n=o,r=i)}return r}(r,void 0===le?n.length:le),o=r[a],s=o.typeParameters;if(!s)return o;var c=nb(t)?t.typeArguments:void 0,u=c?nl(o,function(e,t,r){var n=e.map(FC);for(;n.length>t.length;)n.pop();for(;n.length<t.length;)n.push(su(t[n.length])||Yc(t[n.length])||Sm(r));return n}(c,s,e.isInJSFile(t))):function(t,r,n,i,a){var o=Vg(r,n,e.isInJSFile(t)?2:0),s=yb(t,n,i,12|a,o);return nl(n,s)}(t,s,o,n,i);return r[a]=u,u}(t,r,n,a):function(t){var r,n=e.mapDefined(t,(function(e){return e.thisParameter}));n.length&&(r=wb(n,n.map(dx)));for(var i=e.minAndMax(t,Pb),a=i.min,o=i.max,s=[],c=function(r){var n=e.mapDefined(t,(function(t){return L(t)?r<t.parameters.length-1?t.parameters[r]:e.last(t.parameters):r<t.parameters.length?t.parameters[r]:void 0}));e.Debug.assert(0!==n.length),s.push(wb(n,e.mapDefined(t,(function(e){return hx(e,r)}))))},u=0;u<o;u++)c(u);var l=e.mapDefined(t,(function(t){return L(t)?e.last(t.parameters):void 0})),_=0;if(0!==l.length){var d=u_(P_(e.mapDefined(t,el),2));s.push(Ib(l,d)),_|=1}t.some(R)&&(_|=2);return pc(t[0].declaration,void 0,r,s,j_(t.map(Yu)),void 0,a,_)}(r)}(t,p,v,!!n,i),di(t).resolvedSignature=y,d)if(f)if(1===f.length||f.length>3){var D,S=f[f.length-1];f.length>3&&(D=e.chainDiagnosticMessages(D,e.Diagnostics.The_last_overload_gave_the_following_error),D=e.chainDiagnosticMessages(D,e.Diagnostics.No_overload_matches_this_call));var T=Db(t,v,S,Ln,0,!0,(function(){return D}));if(T)for(var C=0,E=T;C<E.length;C++){var k=E[C];S.declaration&&f.length>3&&e.addRelatedInfo(k,e.createDiagnosticForNode(S.declaration,e.Diagnostics.The_last_overload_is_declared_here)),V(S,k),Pn.add(k)}else e.Debug.fail("No error for last overload signature")}else{for(var N=[],A=0,F=Number.MAX_VALUE,P=0,w=0,I=function(r){var n=Db(t,v,r,Ln,0,!0,(function(){return e.chainDiagnosticMessages(void 0,e.Diagnostics.Overload_0_of_1_2_gave_the_following_error,w+1,p.length,io(r))}));n?(n.length<=F&&(F=n.length,P=w),A=Math.max(A,n.length),N.push(n)):e.Debug.fail("No error for 3 or fewer overload signatures"),w++},O=0,M=f;O<M.length;O++){I(M[O])}var B=A>1?N[P]:e.flatten(N);e.Debug.assert(B.length>0,"No errors reported for 3 or fewer overload signatures");var j=e.chainDiagnosticMessages(e.map(B,e.createDiagnosticMessageChainFromDiagnostic),e.Diagnostics.No_overload_matches_this_call),J=a([],e.flatMap(B,(function(e){return e.relatedInformation})),!0),z=void 0;if(e.every(B,(function(e){return e.start===B[0].start&&e.length===B[0].length&&e.file===B[0].file}))){var U=B[0];z={file:U.file,start:U.start,length:U.length,code:j.code,category:j.category,messageText:j,relatedInformation:J}}else z=e.createDiagnosticForNodeFromMessageChain(t,j,J);V(f[0],z),Pn.add(z)}else if(g)Pn.add(Ab(t,[g],v));else if(m)bb(m,t.typeArguments,!0,s);else{var K=e.filter(r,(function(e){return _b(e,c)}));0===K.length?Pn.add(function(t,r,n){var i=n.length;if(1===r.length){var a=zu((_=r[0]).typeParameters),o=e.length(_.typeParameters);return e.createDiagnosticForNodeArray(e.getSourceFileOfNode(t),n,e.Diagnostics.Expected_0_type_arguments_but_got_1,a<o?a+"-"+o:a,i)}for(var s=-1/0,c=1/0,u=0,l=r;u<l.length;u++){var _,d=zu((_=l[u]).typeParameters);o=e.length(_.typeParameters),d>i?c=Math.min(c,d):o<i&&(s=Math.max(s,o))}return s!==-1/0&&c!==1/0?e.createDiagnosticForNodeArray(e.getSourceFileOfNode(t),n,e.Diagnostics.No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments,i,s,c):e.createDiagnosticForNodeArray(e.getSourceFileOfNode(t),n,e.Diagnostics.Expected_0_type_arguments_but_got_1,s===-1/0?c:s,i)}(t,r,c)):l?s&&Pn.add(Nb(t,s)):Pn.add(Ab(t,K,v))}return y;function V(t,r){var n,i,a=f,o=g,s=m,c=(null===(i=null===(n=t.declaration)||void 0===n?void 0:n.symbol)||void 0===i?void 0:i.declarations)||e.emptyArray,u=c.length>1?e.find(c,(function(t){return e.isFunctionLikeDeclaration(t)&&e.nodeIsPresent(t.body)})):void 0;if(u){var l=Ku(u),_=!l.typeParameters;q([l],Ln,_)&&e.addRelatedInfo(r,e.createDiagnosticForNode(u,e.Diagnostics.The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_are_not_externally_visible))}f=a,g=o,m=s}function q(r,n,a,o){if(void 0===o&&(o=!1),f=void 0,g=void 0,m=void 0,a){var s=r[0];if(e.some(c)||!lb(t,v,s,o))return;return Db(t,v,s,n,0,!1,void 0)?void(f=[s]):s}for(var u=0;u<r.length;u++){if(_b(s=r[u],c)&&lb(t,v,s,o)){var l=void 0,_=void 0;if(s.typeParameters){var d=void 0;if(e.some(c)){if(!(d=bb(s,c,!1))){m=s;continue}}else _=Vg(s.typeParameters,s,e.isInJSFile(t)?2:0),d=yb(t,s,v,8|b,_),b|=4&_.flags?8:0;if(l=tl(s,d,e.isInJSFile(s.declaration),_&&_.inferredTypeParameters),Cx(s)&&!lb(t,v,l,o)){g=l;continue}}else l=s;if(!Db(t,v,l,n,b,!1,void 0)){if(b){if(b=32&i,_)if(l=tl(s,d=yb(t,s,v,b,_),e.isInJSFile(s.declaration),_.inferredTypeParameters),Cx(s)&&!lb(t,v,l,o)){g=l;continue}if(Db(t,v,l,n,b,!1,void 0)){(f||(f=[])).push(l);continue}}return r[u]=l,l}(f||(f=[])).push(l)}}}}function Pb(e){var t=e.parameters.length;return L(e)?t-1:t}function wb(e,t){return Ib(e,P_(t,2))}function Ib(t,r){return Fg(e.first(t),r)}function Ob(e){return!(!e.typeParameters||!iE(Yu(e)))}function Mb(e,t,r,n){return Eo(e)||Eo(t)&&!!(262144&e.flags)||!r&&!n&&!(1048576&t.flags)&&!(131072&mu(t).flags)&&Vp(e,Wt)}function Lb(t,r,n){if(t.arguments&&V<1){var i=sb(t.arguments);i>=0&&Qn(t.arguments[i],e.Diagnostics.Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher)}var a=hh(t.expression);if(a===ut)return Kr;if(ko(a=_u(a)))return ab(t);if(Eo(a))return t.typeArguments&&Qn(t,e.Diagnostics.Untyped_function_calls_may_not_accept_type_arguments),ib(t);var o=Su(a,1);if(o.length){if(!function(t,r){if(!r||!r.declaration)return!0;var n=r.declaration,i=e.getSelectedEffectiveModifierFlags(n,24);if(!i||173!==n.kind)return!0;var a=e.getClassLikeDeclarationOfSymbol(n.parent.symbol),o=qs(n.parent.symbol);if(!CC(t,a)){var s=e.getContainingClass(t);if(s&&16&i){var c=FC(s);if(Bb(n.parent.symbol,c))return!0}return 8&i&&Qn(t,e.Diagnostics.Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration,ao(o)),16&i&&Qn(t,e.Diagnostics.Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration,ao(o)),!1}return!0}(t,o[0]))return ab(t);if(Rb(o,(function(e){return!!(4&e.flags)})))return Qn(t,e.Diagnostics.Cannot_create_an_instance_of_an_abstract_class),ab(t);var s=a.symbol&&e.getClassLikeDeclarationOfSymbol(a.symbol);return s&&e.hasSyntacticModifier(s,256)?(Qn(t,e.Diagnostics.Cannot_create_an_instance_of_an_abstract_class),ab(t)):Fb(t,o,r,n,0)}var c=Su(a,0);if(c.length){var u=Fb(t,c,r,n,0);return Z||(u.declaration&&!Hb(u.declaration)&&Yu(u)!==st&&Qn(t,e.Diagnostics.Only_a_void_function_can_be_called_with_the_new_keyword),Gu(u)===st&&Qn(t,e.Diagnostics.A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void)),u}return Jb(t.expression,a,1),ab(t)}function Rb(t,r){return e.isArray(t)?e.some(t,(function(e){return Rb(e,r)})):1048576===t.compositeKind?e.some(t.compositeSignatures,r):r(t)}function Bb(t,r){var n=Is(r);if(!e.length(n))return!1;var i=n[0];if(2097152&i.flags){for(var a=Tc(i.types),o=0,s=0,c=i.types;s<c.length;s++){var u=c[s];if(!a[o]&&3&e.getObjectFlags(u)){if(u.symbol===t)return!0;if(Bb(t,u))return!0}o++}return!1}return i.symbol===t||Bb(t,i)}function jb(t,r,n){var i,a=0===n,o=uS(r),s=o&&Su(o,n).length>0;if(1048576&r.flags){for(var c=!1,u=0,l=r.types;u<l.length;u++){var _=l[u];if(0!==Su(_,n).length){if(c=!0,i)break}else if(i||(i=e.chainDiagnosticMessages(i,a?e.Diagnostics.Type_0_has_no_call_signatures:e.Diagnostics.Type_0_has_no_construct_signatures,ao(_)),i=e.chainDiagnosticMessages(i,a?e.Diagnostics.Not_all_constituents_of_type_0_are_callable:e.Diagnostics.Not_all_constituents_of_type_0_are_constructable,ao(r))),c)break}c||(i=e.chainDiagnosticMessages(void 0,a?e.Diagnostics.No_constituent_of_type_0_is_callable:e.Diagnostics.No_constituent_of_type_0_is_constructable,ao(r))),i||(i=e.chainDiagnosticMessages(i,a?e.Diagnostics.Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_other:e.Diagnostics.Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_with_each_other,ao(r)))}else i=e.chainDiagnosticMessages(i,a?e.Diagnostics.Type_0_has_no_call_signatures:e.Diagnostics.Type_0_has_no_construct_signatures,ao(r));var d=a?e.Diagnostics.This_expression_is_not_callable:e.Diagnostics.This_expression_is_not_constructable;if(e.isCallExpression(t.parent)&&0===t.parent.arguments.length){var p=di(t).resolvedSymbol;p&&32768&p.flags&&(d=e.Diagnostics.This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without)}return{messageChain:e.chainDiagnosticMessages(i,d),relatedMessage:s?e.Diagnostics.Did_you_forget_to_use_await:void 0}}function Jb(t,r,n,i){var a=jb(t,r,n),o=a.messageChain,s=a.relatedMessage,c=e.createDiagnosticForNodeFromMessageChain(t,o);if(s&&e.addRelatedInfo(c,e.createDiagnosticForNode(t,s)),e.isCallExpression(t.parent)){var u=kb(t.parent,!0),l=u.start,_=u.length;c.start=l,c.length=_}Pn.add(c),zb(r,n,i?e.addRelatedInfo(c,i):c)}function zb(t,r,n){if(t.symbol){var i=_i(t.symbol).originatingImport;if(i&&!e.isImportCall(i)){var a=Su(ys(_i(t.symbol).target),r);if(!a||!a.length)return;e.addRelatedInfo(n,e.createDiagnosticForNode(i,e.Diagnostics.Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cause_a_failure_at_runtime_Consider_using_a_default_import_or_import_require_here_instead))}}}function Ub(t,r,n){var i=wD(t.expression),a=_u(i);if(ko(a))return ab(t);var o,s,c=Su(a,0),u=Su(a,1).length;if(Mb(i,a,c.length,u))return ib(t);if(o=t,(s=c).length&&e.every(s,(function(e){return 0===e.minArgumentCount&&!L(e)&&e.parameters.length<Eb(o,e)}))){var l=e.getTextOfNode(t.expression,!1);return Qn(t,e.Diagnostics._0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write_0,l),ab(t)}var _=function(t){switch(t.parent.kind){case 260:case 228:return e.Diagnostics.Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression;case 166:return e.Diagnostics.Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression;case 169:return e.Diagnostics.Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression;case 171:case 174:case 175:return e.Diagnostics.Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression;default:return e.Debug.fail()}}(t);if(!c.length){var d=jb(t.expression,a,0),p=e.chainDiagnosticMessages(d.messageChain,_),f=e.createDiagnosticForNodeFromMessageChain(t.expression,p);return d.relatedMessage&&e.addRelatedInfo(f,e.createDiagnosticForNode(t.expression,d.relatedMessage)),Pn.add(f),zb(a,0,f),ab(t)}return Fb(t,c,r,n,0,_)}function Kb(t,r){var n=th(t),i=n&&va(n),a=i&&fi(i,E.Element,788968),o=a&&oe.symbolToEntityName(a,788968,t),s=e.factory.createFunctionTypeNode(void 0,[e.factory.createParameterDeclaration(void 0,void 0,"props",void 0,oe.typeToTypeNode(r,t))],o?e.factory.createTypeReferenceNode(o,void 0):e.factory.createKeywordTypeNode(131)),c=ri(1,"props");return c.type=r,pc(s,void 0,void 0,[c],a?qs(a):je,void 0,1,0)}function Vb(t,r,n){if(Hv(t.tagName)){var i=oh(t),a=Kb(t,i);return Qp(dD(t.attributes,Fv(a,t),void 0,0),i,t.tagName,t.attributes),e.length(t.typeArguments)&&(e.forEach(t.typeArguments,dC),Pn.add(e.createDiagnosticForNodeArray(e.getSourceFileOfNode(t),t.typeArguments,e.Diagnostics.Expected_0_type_arguments_but_got_1,0,e.length(t.typeArguments)))),a}var o=wD(t.tagName),s=_u(o);if(ko(s))return ab(t);var c=ih(o,t);return Mb(o,s,c.length,0)?ib(t):0===c.length?(Qn(t.tagName,e.Diagnostics.JSX_element_type_0_does_not_have_any_construct_or_call_signatures,e.getTextOfNode(t.tagName)),ab(t)):Fb(t,c,r,n,0)}function qb(t,r,n){switch(t.kind){case 210:return function(t,r,n){if(106===t.expression.kind){var i=nv(t.expression);if(Eo(i)){for(var a=0,o=t.arguments;a<o.length;a++)wD(o[a]);return Jr}if(!ko(i)){var s=e.getEffectiveBaseTypeNode(e.getContainingClass(t));if(s)return Fb(t,Fs(i,s.typeArguments,s),r,n,0)}return ib(t)}var c,u=wD(t.expression);if(e.isCallChain(t)){var l=Cg(u,t.expression);c=l===u?0:e.isOutermostOptionalChain(t)?16:8,u=l}else c=0;if((u=Th(u,t.expression,Sh))===ut)return Kr;var _=_u(u);if(ko(_))return ab(t);var d=Su(_,0),p=Su(_,1).length;if(Mb(u,_,d.length,p))return!ko(u)&&t.typeArguments&&Qn(t,e.Diagnostics.Untyped_function_calls_may_not_accept_type_arguments),ib(t);if(!d.length){if(p)Qn(t,e.Diagnostics.Value_of_type_0_is_not_callable_Did_you_mean_to_include_new,ao(u));else{var f=void 0;if(1===t.arguments.length){var g=e.getSourceFileOfNode(t).text;e.isLineBreak(g.charCodeAt(e.skipTrivia(g,t.expression.end,!0)-1))&&(f=e.createDiagnosticForNode(t.expression,e.Diagnostics.Are_you_missing_a_semicolon))}Jb(t.expression,_,0,f)}return ab(t)}return 8&n&&!t.typeArguments&&d.some(Ob)?(SD(t,n),Ur):d.some((function(t){return e.isInJSFile(t.declaration)&&!!e.getJSDocClassTag(t.declaration)}))?(Qn(t,e.Diagnostics.Value_of_type_0_is_not_callable_Did_you_mean_to_include_new,ao(u)),ab(t)):Fb(t,d,r,n,c)}(t,r,n);case 211:return Lb(t,r,n);case 212:return function(t,r,n){var i=wD(t.tag),a=_u(i);if(ko(a))return ab(t);var o=Su(a,0),s=Su(a,1).length;if(Mb(i,a,o.length,s))return ib(t);if(!o.length){if(e.isArrayLiteralExpression(t.parent)){var c=e.createDiagnosticForNode(t.tag,e.Diagnostics.It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tagged_template_expression_which_cannot_be_invoked);return Pn.add(c),ab(t)}return Jb(t.tag,a,0),ab(t)}return Fb(t,o,r,n,0)}(t,r,n);case 167:return Ub(t,r,n);case 283:case 282:return Vb(t,r,n)}throw e.Debug.assertNever(t,"Branch in 'resolveSignature' should be unreachable.")}function Wb(e,t,r){var n=di(e),i=n.resolvedSignature;if(i&&i!==Ur&&!t)return i;n.resolvedSignature=Ur;var a=qb(e,t,r||0);return a!==Ur&&(n.resolvedSignature=tn===rn?a:i),a}function Hb(t){var r;if(!t||!e.isInJSFile(t))return!1;var n=e.isFunctionDeclaration(t)||e.isFunctionExpression(t)?t:(e.isVariableDeclaration(t)||e.isPropertyAssignment(t))&&t.initializer&&e.isFunctionExpression(t.initializer)?t.initializer:void 0;if(n){if(e.getJSDocClassTag(t))return!0;if(e.isPropertyAssignment(e.walkUpParenthesizedExpressions(n.parent)))return!1;var i=Sa(n);return!!(null===(r=null==i?void 0:i.members)||void 0===r?void 0:r.size)}return!1}function Gb(t,r){var n,i;if(r){var a=_i(r);if(!a.inferredClassSymbol||!a.inferredClassSymbol.has(P(t))){var o=e.isTransientSymbol(t)?t:ai(t);return o.exports=o.exports||e.createSymbolTable(),o.members=o.members||e.createSymbolTable(),o.flags|=32&r.flags,(null===(n=r.exports)||void 0===n?void 0:n.size)&&ui(o.exports,r.exports),(null===(i=r.members)||void 0===i?void 0:i.size)&&ui(o.members,r.members),(a.inferredClassSymbol||(a.inferredClassSymbol=new e.Map)).set(P(o),o),o}return a.inferredClassSymbol.get(P(t))}}function Qb(t,r){if(t.parent){var n,i;if(e.isVariableDeclaration(t.parent)&&t.parent.initializer===t){if(!(e.isInJSFile(t)||e.isVarConst(t.parent)&&e.isFunctionLikeDeclaration(t)))return;n=t.parent.name,i=t.parent}else if(e.isBinaryExpression(t.parent)){var a=t.parent,o=t.parent.operatorToken.kind;if(63!==o||!r&&a.right!==t){if(!(56!==o&&60!==o||(e.isVariableDeclaration(a.parent)&&a.parent.initializer===a?(n=a.parent.name,i=a.parent):e.isBinaryExpression(a.parent)&&63===a.parent.operatorToken.kind&&(r||a.parent.right===a)&&(i=n=a.parent.left),n&&e.isBindableStaticNameExpression(n)&&e.isSameEntityName(n,a.left))))return}else i=n=a.left}else r&&e.isFunctionDeclaration(t)&&(n=t.name,i=t);if(i&&n&&(r||e.getExpandoInitializer(t,e.isPrototypeAccess(n))))return Sa(i)}}function Xb(t,r){if(t.declaration&&268435456&t.declaration.flags){var n=Yb(r),i=e.tryGetPropertyAccessOrIdentifierToString(e.getInvokedExpression(r));a=n,o=t.declaration,s=i,c=io(t),$n(o,s?e.createDiagnosticForNode(a,e.Diagnostics.The_signature_0_of_1_is_deprecated,c,s):e.createDiagnosticForNode(a,e.Diagnostics._0_is_deprecated,c))}var a,o,s,c}function Yb(t){switch((t=e.skipParentheses(t)).kind){case 210:case 167:case 211:return Yb(t.expression);case 212:return Yb(t.tag);case 283:case 282:return Yb(t.tagName);case 209:return t.argumentExpression;case 208:return t.name;case 180:var r=t;return e.isQualifiedName(r.typeName)?r.typeName.right:r;default:return t}}function Zb(t){if(!e.isCallExpression(t))return!1;var r=t.expression;if(e.isPropertyAccessExpression(r)&&"for"===r.name.escapedText&&(r=r.expression),!e.isIdentifier(r)||"Symbol"!==r.escapedText)return!1;var n=Zl(!1);return!!n&&n===vi(r,"Symbol",111551,void 0,void 0,!1)}function $b(t){if(function(t){if(q===e.ModuleKind.ES2015)return WE(t,e.Diagnostics.Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd_system_umd_node16_or_nodenext);if(t.typeArguments)return WE(t,e.Diagnostics.This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot_have_type_arguments);var r=t.arguments;if(q!==e.ModuleKind.ESNext&&q!==e.ModuleKind.NodeNext&&q!==e.ModuleKind.Node16){if(DE(r),r.length>1)return WE(r[1],e.Diagnostics.Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_or_nodenext)}if(0===r.length||r.length>2)return WE(t,e.Diagnostics.Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_assertion_as_arguments);var n=e.find(r,e.isSpreadElement);if(n)return WE(n,e.Diagnostics.Argument_of_dynamic_import_cannot_be_spread_element)}(t),0===t.arguments.length)return wx(t,Le);for(var r=t.arguments[0],n=pD(r),i=t.arguments.length>1?pD(t.arguments[1]):void 0,a=2;a<t.arguments.length;++a)pD(t.arguments[a]);if((32768&n.flags||65536&n.flags||!Vp(n,Ye))&&Qn(r,e.Diagnostics.Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0,ao(n)),i){var o=Yl(!0);o!==Ct&&Gp(i,hg(o,32768),t.arguments[1])}var s=sa(t,r);if(s){var c=da(s,r,!0,!1);if(c)return wx(t,tx(ys(c),c,s,r)||rx(ys(c),c,s,r))}return wx(t,Le)}function ex(t,r,n){var i=e.createSymbolTable(),a=ri(2097152,"default");return a.parent=r,a.nameType=Xd("default"),a.aliasTarget=Qi(t),i.set("default",a),za(n,i,e.emptyArray,e.emptyArray,e.emptyArray)}function tx(e,t,r,n){if(Bi(n)&&e&&!ko(e)){var i=e;if(!i.defaultOnlyType){var a=ex(t,r);i.defaultOnlyType=a}return i.defaultOnlyType}}function rx(t,r,n,i){var a;if(H&&t&&!ko(t)){var o=t;if(!o.syntheticType)if(ji(null===(a=n.declarations)||void 0===a?void 0:a.find(e.isSourceFile),n,!1,i)){var s=ri(2048,"__type"),c=ex(r,n,s);s.type=c,o.syntheticType=qv(t)?Kd(t,c,s,0,!1):c}else o.syntheticType=t;return o.syntheticType}return t}function nx(t){if(!e.isRequireCall(t,!0))return!1;if(!e.isIdentifier(t.expression))return e.Debug.fail();var r=vi(t.expression,t.expression.escapedText,111551,void 0,void 0,!0);if(r===de)return!0;if(2097152&r.flags)return!1;var n=16&r.flags?259:3&r.flags?257:0;if(0!==n){var i=e.getDeclarationOfKind(r,n);return!!i&&!!(16777216&i.flags)}return!1}function ix(t){(function(t){if(t.questionDotToken||32&t.flags)return WE(t.template,e.Diagnostics.Tagged_template_expressions_are_not_permitted_in_an_optional_chain);return!1})(t)||EE(t,t.typeArguments),V<2&&yE(t,262144);var r=Wb(t);return Xb(r,t),Yu(r)}function ax(e){switch(e.kind){case 10:case 14:case 8:case 9:case 110:case 95:case 206:case 207:case 225:return!0;case 214:return ax(e.expression);case 221:var t=e.operator,r=e.operand;return 40===t&&(8===r.kind||9===r.kind)||39===t&&8===r.kind;case 208:case 209:var n=FC(e.expression).symbol;return n&&2097152&n.flags&&(n=Xi(n)),!!(n&&384&Yi(n)&&1===Js(n))}return!1}function ox(t,r,n,i){var a=wD(n,i);if(e.isConstTypeReference(r))return ax(n)||Qn(n,e.Diagnostics.A_const_assertions_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array_or_object_literals),Gd(a);dC(r),a=Pg(og(a));var o=ip(r);return ko(o)||m((function(){var r=Rg(a);Wp(o,r)||af(a,o,t,e.Diagnostics.Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the_other_If_this_was_intentional_convert_the_expression_to_unknown_first)})),o}function sx(e){return 32&e.flags?function(e){var t=wD(e.expression),r=Cg(t,e.expression);return Tg(xg(r),e,r!==t)}(e):xg(wD(e.expression))}function cx(t){NE(t);var r=230===t.kind?wD(t.expression):e.isThisIdentifier(t.exprName)?ev(t.exprName):wD(t.exprName),n=t.typeArguments;if(r===ut||ko(r)||!e.some(n))return r;var i,a=!1,o=function r(n){var o=!1,s=!1,u=l(n);a||(a=s),o&&!s&&(null!=i||(i=n));return u;function l(n){if(524288&n.flags){var i=qc(n),a=c(i.callSignatures),u=c(i.constructSignatures);if(o||(o=0!==i.callSignatures.length||0!==i.constructSignatures.length),s||(s=0!==a.length||0!==u.length),a!==i.callSignatures||u!==i.constructSignatures){var _=za(void 0,i.members,a,u,i.indexInfos);return _.objectFlags|=8388608,_.node=t,_}}else if(58982400&n.flags){var d=ru(n);if(d){var p=l(d);if(p!==d)return p}}else{if(1048576&n.flags)return my(n,r);if(2097152&n.flags)return j_(e.sameMap(n.types,l))}return n}}(r),s=a?i:r;return s&&Pn.add(e.createDiagnosticForNodeArray(e.getSourceFileOfNode(t),n,e.Diagnostics.Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable,ao(s))),o;function c(t){var r=e.filter(t,(function(e){return!!e.typeParameters&&_b(e,n)}));return e.sameMap(r,(function(t){var r=bb(t,n,!0);return r?tl(t,r,e.isInJSFile(t.declaration)):t}))}}function ux(t){return function(t){var r=t.name.escapedText;switch(t.keywordToken){case 103:if("target"!==r)return WE(t.name,e.Diagnostics._0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2,t.name.escapedText,e.tokenToString(t.keywordToken),"target");break;case 100:if("meta"!==r)WE(t.name,e.Diagnostics._0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2,t.name.escapedText,e.tokenToString(t.keywordToken),"meta")}}(t),103===t.keywordToken?_x(t):100===t.keywordToken?function(t){q===e.ModuleKind.Node16||q===e.ModuleKind.NodeNext?e.getSourceFileOfNode(t).impliedNodeFormat!==e.ModuleKind.ESNext&&Qn(t,e.Diagnostics.The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output):q<e.ModuleKind.ES2020&&q!==e.ModuleKind.System&&Qn(t,e.Diagnostics.The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system_node16_or_nodenext);var r=e.getSourceFileOfNode(t);return e.Debug.assert(!!(4194304&r.flags),"Containing file is missing import meta node flag."),"meta"===t.name.escapedText?Ql():je}(t):e.Debug.assertNever(t.keywordToken)}function lx(t){switch(t.keywordToken){case 100:return Xl();case 103:var r=_x(t);return ko(r)?je:function(t){var r=ri(0,"NewTargetExpression"),n=ri(4,"target",8);n.parent=r,n.type=t;var i=e.createSymbolTable([n]);return r.members=i,za(r,i,e.emptyArray,e.emptyArray,e.emptyArray)}(r);default:e.Debug.assertNever(t.keywordToken)}}function _x(t){var r=e.getNewTargetContainer(t);return r?173===r.kind?ys(Sa(r.parent)):ys(Sa(r)):(Qn(t,e.Diagnostics.Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constructor,"new.target"),je)}function dx(t){var r=ys(t);if(G){var n=t.valueDeclaration;if(n&&e.hasInitializer(n))return bg(r)}return r}function px(t){return e.Debug.assert(e.isIdentifier(t.name)),t.name.escapedText}function fx(e,t,r){var n=e.parameters.length-(L(e)?1:0);if(t<n)return e.parameters[t].escapedName;var i=e.parameters[n]||we,a=r||ys(i);if(_g(a)){var o=a.target.labeledElementDeclarations,s=t-n;return o&&px(o[s])||i.escapedName+"_"+s}return i.escapedName}function gx(t){return t.valueDeclaration&&e.isParameter(t.valueDeclaration)&&e.isIdentifier(t.valueDeclaration.name)}function mx(t){return 199===t.kind||e.isParameter(t)&&t.name&&e.isIdentifier(t.name)}function yx(e,t){var r=e.parameters.length-(L(e)?1:0);if(t<r){var n=e.parameters[t].valueDeclaration;return n&&mx(n)?n:void 0}var i=e.parameters[r]||we,a=ys(i);if(_g(a)){var o=a.target.labeledElementDeclarations;return o&&o[t-r]}return i.valueDeclaration&&mx(i.valueDeclaration)?i.valueDeclaration:void 0}function vx(e,t){return hx(e,t)||Le}function hx(e,t){var r=e.parameters.length-(L(e)?1:0);if(t<r)return dx(e.parameters[t]);if(L(e)){var n=ys(e.parameters[r]),i=t-r;if(!_g(n)||n.target.hasRestElement||i<n.target.fixedLength)return bd(n,Yd(i))}}function bx(t,r){var n=xx(t),i=Dx(t),a=Tx(t);if(a&&r>=n-1)return r===n-1?a:u_(bd(a,Ze));for(var o=[],s=[],c=[],u=r;u<n;u++){!a||u<n-1?(o.push(vx(t,u)),s.push(u<i?1:2)):(o.push(a),s.push(8));var l=yx(t,u);l&&c.push(l)}return m_(o,s,!1,e.length(c)===e.length(o)?c:void 0)}function xx(e){var t=e.parameters.length;if(L(e)){var r=ys(e.parameters[t-1]);if(_g(r))return t+r.target.fixedLength-(r.target.hasRestElement?0:1)}return t}function Dx(t,r){var n=1&r,i=2&r;if(i||void 0===t.resolvedMinArgumentCount){var a=void 0;if(L(t)){var o=ys(t.parameters[t.parameters.length-1]);if(_g(o)){var s=e.findIndex(o.target.elementFlags,(function(e){return!(1&e)})),c=s<0?o.target.fixedLength:s;c>0&&(a=t.parameters.length-1+c)}}if(void 0===a){if(!n&&32&t.flags)return 0;a=t.minArgumentCount}if(i)return a;for(var u=a-1;u>=0;u--){if(131072&py(vx(t,u),cb).flags)break;a=u}t.resolvedMinArgumentCount=a}return t.resolvedMinArgumentCount}function Sx(e){if(L(e)){var t=ys(e.parameters[e.parameters.length-1]);return!_g(t)||t.target.hasRestElement}return!1}function Tx(e){if(L(e)){var t=ys(e.parameters[e.parameters.length-1]);if(!_g(t))return t;if(t.target.hasRestElement)return b_(t,t.target.fixedLength)}}function Cx(e){var t=Tx(e);return!t||qf(t)||Eo(t)||0!=(131072&mu(t).flags)?void 0:t}function Ex(e){return kx(e,ct)}function kx(e,t){return e.parameters.length>0?vx(e,0):t}function Nx(t,r){var n=_i(t);if(n.type)r&&e.Debug.assertEqual(n.type,r,"Parameter symbol already has a cached type which differs from newly assigned type");else{var i=t.valueDeclaration;n.type=r||(i?es(i,!0):ys(t)),i&&79!==i.name.kind&&(n.type===Ke&&(n.type=$o(i.name)),Ax(i.name,n.type))}}function Ax(t,r){for(var n=0,i=t.elements;n<i.length;n++){var a=i[n];if(!e.isOmittedExpression(a)){var o=Lo(a,r);79===a.name.kind?_i(Sa(a)).type=o:Ax(a.name,o)}}}function Fx(e){var t=e_(!0);return t!==Pt?xl(t,[e=lS(oS(e))||Ke]):Ke}function Px(e){var t=t_(!0);return t!==Pt?xl(t,[e=lS(oS(e))||Ke]):Ke}function wx(t,r){var n=Fx(r);return n===Ke?(Qn(t,e.isImportCall(t)?e.Diagnostics.A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES2015_in_your_lib_option:e.Diagnostics.An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES2015_in_your_lib_option),je):(r_(!0)||Qn(t,e.isImportCall(t)?e.Diagnostics.A_dynamic_import_call_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_the_Promise_constructor_or_include_ES2015_in_your_lib_option:e.Diagnostics.An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_the_Promise_constructor_or_include_ES2015_in_your_lib_option),n)}function Ix(t,r){if(!t.body)return je;var n,i,a,o=e.getFunctionFlags(t),s=0!=(2&o),c=0!=(1&o),u=st;if(238!==t.body.kind)n=pD(t.body,r&&-9&r),s&&(n=oS(nS(n,!1,t,e.Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member)));else if(c){var l=jx(t,r);l?l.length>0&&(n=P_(l,2)):u=ct;var _=function(t,r){var n=[],i=[],a=0!=(2&e.getFunctionFlags(t));return e.forEachYieldExpression(t.body,(function(t){var o,s=t.expression?wD(t.expression,r):We;if(e.pushIfUnique(n,Mx(t,s,Le,a)),t.asteriskToken){var c=sT(s,a?19:17,t.expression);o=c&&c.nextType}else o=Nv(t,void 0);o&&e.pushIfUnique(i,o)})),{yieldTypes:n,nextTypes:i}}(t,r),d=_.yieldTypes,p=_.nextTypes;i=e.some(d)?P_(d,2):void 0,a=e.some(p)?j_(p):void 0}else{var f=jx(t,r);if(!f)return 2&o?wx(t,ct):ct;if(0===f.length)return 2&o?wx(t,st):st;n=P_(f,2)}if(n||i||a){if(i&&zg(t,i,3),n&&zg(t,n,1),a&&zg(t,a,2),n&&ng(n)||i&&ng(i)||a&&ng(a)){var g=Ov(t),m=g?g===Ku(t)?c?void 0:n:Ev(Yu(g),t,void 0):void 0;c?(i=lg(i,m,0,s),n=lg(n,m,1,s),a=lg(a,m,2,s)):n=function(e,t,r){return e&&ng(e)&&(e=ug(e,t?r?rS(t):t:void 0)),e}(n,m,s)}i&&(i=Rg(i)),n&&(n=Rg(n)),a&&(a=Rg(a))}return c?Ox(i||ct,n||u,a||lv(2,t)||Ke,s):s?Fx(n||u):n||u}function Ox(e,t,r,n){var i=n?Xr:Yr,a=i.getGlobalGeneratorType(!1);if(e=i.resolveIterationType(e,void 0)||Ke,t=i.resolveIterationType(t,void 0)||Ke,r=i.resolveIterationType(r,void 0)||Ke,a===Pt){var o=i.getGlobalIterableIteratorType(!1),s=o!==Pt?_T(o,i):void 0,c=s?s.returnType:Le,u=s?s.nextType:qe;return Vp(t,c)&&Vp(u,r)?o!==Pt?s_(o,[e]):(i.getGlobalIterableIteratorType(!0),Ct):(i.getGlobalGeneratorType(!0),Ct)}return s_(a,[e,t,r])}function Mx(t,r,n,i){var a=t.expression||t,o=t.asteriskToken?eT(i?19:17,r,n,a):r;return i?uS(o,a,t.asteriskToken?e.Diagnostics.Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member:e.Diagnostics.Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member):o}function Lx(e,t,r){for(var n=0,i=0;i<r.length;i++){var a=i<e||i>=t?r[i]:void 0;n|=void 0!==a?b.get(a)||32768:0}return n}function Rx(t){var r=di(t);if(void 0===r.isExhaustive){r.isExhaustive=0;var n=function(t){if(218===t.expression.kind){var r=cy(t);if(!r)return!1;var n=nu(pD(t.expression.expression)),i=Lx(0,0,r);return 3&n.flags?556800==(556800&i):!_y(n,(function(e){return(Vm(e)&i)===i}))}var a=pD(t.expression);if(!ag(a))return!1;var o=sy(t);if(!o.length||e.some(o,rg))return!1;return s=my(a,Gd),c=o,1048576&s.flags?!e.forEach(s.types,(function(t){return!e.contains(c,t)})):e.contains(c,s);var s,c}(t);0===r.isExhaustive&&(r.isExhaustive=n)}else 0===r.isExhaustive&&(r.isExhaustive=!1);return r.isExhaustive}function Bx(e){return e.endFlowNode&&Iy(e.endFlowNode)}function jx(t,r){var n=e.getFunctionFlags(t),i=[],a=Bx(t),o=!1;if(e.forEachReturnStatement(t.body,(function(s){var c=s.expression;if(c){var u=pD(c,r&&-9&r);2&n&&(u=oS(nS(u,!1,t,e.Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member))),131072&u.flags&&(o=!0),e.pushIfUnique(i,u)}else a=!0})),0!==i.length||a||!o&&!function(e){switch(e.kind){case 215:case 216:return!0;case 171:return 207===e.parent.kind;default:return!1}}(t))return!(G&&i.length&&a)||Hb(t)&&i.some((function(e){return e.symbol===t.symbol}))||e.pushIfUnique(i,qe),i}function Jx(t,r){return void m((function(){var n=e.getFunctionFlags(t),i=r&&ET(r,n);if(i&&Yx(i,16385))return;if(170===t.kind||e.nodeIsMissing(t.body)||238!==t.body.kind||!Bx(t))return;var a=512&t.flags,o=e.getEffectiveReturnTypeNode(t)||t;if(i&&131072&i.flags)Qn(o,e.Diagnostics.A_function_returning_never_cannot_have_a_reachable_end_point);else if(i&&!a)Qn(o,e.Diagnostics.A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value);else if(i&&G&&!Vp(qe,i))Qn(o,e.Diagnostics.Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined);else if(K.noImplicitReturns){if(!i){if(!a)return;var s=Yu(Ku(t));if(kT(t,s))return}Qn(o,e.Diagnostics.Not_all_code_paths_return_a_value)}}))}function zx(t,r){if(e.Debug.assert(171!==t.kind||e.isObjectLiteralMethod(t)),gC(t),e.isFunctionExpression(t)&&JS(t,t.name),r&&4&r&&Mp(t)){if(!e.getEffectiveReturnTypeNode(t)&&!e.hasContextSensitiveParameters(t)){var n=Mv(t);if(n&&Yg(Yu(n))){var i=di(t);if(i.contextFreeType)return i.contextFreeType;var a=Ix(t,r),o=pc(void 0,void 0,void 0,e.emptyArray,a,void 0,0,0),s=za(t.symbol,z,[o],e.emptyArray,e.emptyArray);return s.objectFlags|=262144,i.contextFreeType=s}}return wt}return CE(t)||215!==t.kind||FE(t),function(t,r){var n=di(t);if(!(1024&n.flags)){var i=Mv(t);if(!(1024&n.flags)){n.flags|=1024;var a=e.firstOrUndefined(Su(ys(Sa(t)),0));if(!a)return;if(Mp(t))if(i){var o=Av(t),s=void 0;if(r&&2&r){!function(t,r,n){for(var i=t.parameters.length-(L(t)?1:0),a=0;a<i;a++){var o=t.parameters[a].valueDeclaration;if(o.type){var s=e.getEffectiveTypeAnnotationNode(o);s&&gm(n.inferences,ip(s),vx(r,a))}}}(a,i,o);var c=Tx(i);c&&262144&c.flags&&(s=xp(i,o.nonFixingMapper))}s||(s=o?xp(i,o.mapper):i),function(t,r){if(r.typeParameters){if(t.typeParameters)return;t.typeParameters=r.typeParameters}r.thisParameter&&(!(a=t.thisParameter)||a.valueDeclaration&&!a.valueDeclaration.type)&&(a||(t.thisParameter=Fg(r.thisParameter,void 0)),Nx(t.thisParameter,ys(r.thisParameter)));for(var n=t.parameters.length-(L(t)?1:0),i=0;i<n;i++){var a=t.parameters[i];e.getEffectiveTypeAnnotationNode(a.valueDeclaration)||Nx(a,hx(r,i))}L(t)&&((a=e.last(t.parameters)).valueDeclaration?!e.getEffectiveTypeAnnotationNode(a.valueDeclaration):65536&e.getCheckFlags(a))&&Nx(a,bx(r,n))}(a,s)}else!function(e){e.thisParameter&&Nx(e.thisParameter);for(var t=0,r=e.parameters;t<r.length;t++)Nx(r[t])}(a);if(i&&!Zu(t)&&!a.resolvedReturnType){var u=Ix(t,r);a.resolvedReturnType||(a.resolvedReturnType=u)}LD(t)}}}(t,r),ys(Sa(t))}function Ux(e,t,r,n){if(void 0===n&&(n=!1),!Vp(t,mt)){var i=n&&tS(t);return Zn(e,!!i&&Vp(i,mt),r),!1}return!0}function Kx(t){if(!e.isCallExpression(t))return!1;if(!e.isBindableObjectDefinePropertyCall(t))return!1;var r=pD(t.arguments[2]);if(Co(r,"value")){var n=xu(r,"writable"),i=n&&ys(n);if(!i||i===et||i===tt)return!0;if(n&&n.valueDeclaration&&e.isPropertyAssignment(n.valueDeclaration)){var a=wD(n.valueDeclaration.initializer);if(a===et||a===tt)return!0}return!1}return!xu(r,"set")}function Vx(t){return!!(8&e.getCheckFlags(t)||4&t.flags&&64&e.getDeclarationModifierFlagsFromSymbol(t)||3&t.flags&&2&fh(t)||98304&t.flags&&!(65536&t.flags)||8&t.flags||e.some(t.declarations,Kx))}function qx(t,r,n){var i,a;if(0===n)return!1;if(Vx(r)){if(4&r.flags&&e.isAccessExpression(t)&&108===t.expression.kind){var o=e.getContainingFunction(t);if(!o||173!==o.kind&&!Hb(o))return!0;if(r.valueDeclaration){var s=e.isBinaryExpression(r.valueDeclaration),c=o.parent===r.valueDeclaration.parent,u=o===r.valueDeclaration.parent,l=s&&(null===(i=r.parent)||void 0===i?void 0:i.valueDeclaration)===o.parent,_=s&&(null===(a=r.parent)||void 0===a?void 0:a.valueDeclaration)===o;return!(c||u||l||_)}}return!0}if(e.isAccessExpression(t)){var d=e.skipParentheses(t.expression);if(79===d.kind){var p=di(d).resolvedSymbol;if(2097152&p.flags){var f=Fi(p);return!!f&&271===f.kind}}}return!1}function Wx(t,r,n){var i=e.skipOuterExpressions(t,7);return 79===i.kind||e.isAccessExpression(i)?!(32&i.flags)||(Qn(t,n),!1):(Qn(t,r),!1)}function Hx(t){wD(t.expression);var r=e.skipParentheses(t.expression);if(!e.isAccessExpression(r))return Qn(r,e.Diagnostics.The_operand_of_a_delete_operator_must_be_a_property_reference),at;e.isPropertyAccessExpression(r)&&e.isPrivateIdentifier(r.name)&&Qn(r,e.Diagnostics.The_operand_of_a_delete_operator_cannot_be_a_private_identifier);var n=Aa(di(r).resolvedSymbol);return n&&(Vx(n)&&Qn(r,e.Diagnostics.The_operand_of_a_delete_operator_cannot_be_a_read_only_property),function(t,r){var n=ys(r);!G||131075&n.flags||(ne?16777216&r.flags:16777216&Vm(n))||Qn(t,e.Diagnostics.The_operand_of_a_delete_operator_must_be_optional)}(r,n)),at}function Gx(t){m((function(){return function(t){var r=e.getContainingFunctionOrClassStaticBlock(t);if(r&&e.isClassStaticBlockDeclaration(r))Qn(t,e.Diagnostics.Await_expression_cannot_be_used_inside_a_class_static_block);else if(!(32768&t.flags)){var n;if(e.isInTopLevelContext(t)){if(!KE(n=e.getSourceFileOfNode(t))){var i=void 0;if(!e.isEffectiveExternalModule(n,K)){null!=i||(i=e.getSpanOfTokenAtPosition(n,t.pos));var a=e.createFileDiagnostic(n,i.start,i.length,e.Diagnostics.await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_has_no_imports_or_exports_Consider_adding_an_empty_export_to_make_this_file_a_module);Pn.add(a)}switch(q){case e.ModuleKind.Node16:case e.ModuleKind.NodeNext:if(n.impliedNodeFormat===e.ModuleKind.CommonJS){null!=i||(i=e.getSpanOfTokenAtPosition(n,t.pos)),Pn.add(e.createFileDiagnostic(n,i.start,i.length,e.Diagnostics.The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level));break}case e.ModuleKind.ES2022:case e.ModuleKind.ESNext:case e.ModuleKind.System:if(V>=4)break;default:null!=i||(i=e.getSpanOfTokenAtPosition(n,t.pos)),Pn.add(e.createFileDiagnostic(n,i.start,i.length,e.Diagnostics.Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_or_nodenext_and_the_target_option_is_set_to_es2017_or_higher))}}}else if(!KE(n=e.getSourceFileOfNode(t))){if(i=e.getSpanOfTokenAtPosition(n,t.pos),a=e.createFileDiagnostic(n,i.start,i.length,e.Diagnostics.await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules),r&&173!==r.kind&&0==(2&e.getFunctionFlags(r))){var o=e.createDiagnosticForNode(r,e.Diagnostics.Did_you_mean_to_mark_this_function_as_async);e.addRelatedInfo(a,o)}Pn.add(a)}}uv(t)&&Qn(t,e.Diagnostics.await_expressions_cannot_be_used_in_a_parameter_initializer)}(t)}));var r=wD(t.expression),n=nS(r,!0,t,e.Diagnostics.Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member);return n!==r||ko(n)||3&r.flags||Xn(!1,e.createDiagnosticForNode(t,e.Diagnostics.await_has_no_effect_on_the_type_of_this_expression)),n}function Qx(e){return Yx(e,2112)?Zx(e,3)||Yx(e,296)?mt:$e:Ze}function Xx(e,t){if(Yx(e,t))return!0;var r=nu(e);return!!r&&Yx(r,t)}function Yx(e,t){if(e.flags&t)return!0;if(3145728&e.flags)for(var r=0,n=e.types;r<n.length;r++){if(Yx(n[r],t))return!0}return!1}function Zx(e,t,r){return!!(e.flags&t)||!(r&&114691&e.flags)&&(!!(296&t)&&Vp(e,Ze)||!!(2112&t)&&Vp(e,$e)||!!(402653316&t)&&Vp(e,Ye)||!!(528&t)&&Vp(e,at)||!!(16384&t)&&Vp(e,st)||!!(131072&t)&&Vp(e,ct)||!!(65536&t)&&Vp(e,Qe)||!!(32768&t)&&Vp(e,qe)||!!(4096&t)&&Vp(e,ot)||!!(67108864&t)&&Vp(e,dt))}function $x(t,r,n){return 1048576&t.flags?e.every(t.types,(function(e){return $x(e,r,n)})):Zx(t,r,n)}function eD(t){return!!(16&e.getObjectFlags(t))&&!!t.symbol&&tD(t.symbol)}function tD(e){return 0!=(128&e.flags)}function rD(t,r,n,i){if(n===ut||i===ut)return ut;e.isPrivateIdentifier(t)?(V<99&&yE(t,2097152),!di(t).resolvedSymbol&&e.getContainingClass(t)&&Jh(t,i,Lh(t,i.symbol,!0))):Gp(Ch(n,t),ft,t);return Gp(Ch(i,r),dt,r)&&_y(i,(function(t){return t===At||!!(2097152&t.flags)&&e.some(t.types,lf)}))&&Qn(r,e.Diagnostics.Type_0_may_represent_a_primitive_value_which_is_not_permitted_as_the_right_operand_of_the_in_operator,ao(i)),at}function nD(t,r,n,i,a){void 0===a&&(a=!1);var o=t.properties,s=o[n];if(299===s.kind||300===s.kind){var c=s.name,u=W_(c);if(tc(u)){var l=xu(r,oc(u));l&&(Qh(l,s,a),mh(s,!1,!0,r,l))}var _=wo(s,bd(r,u,32,c));return aD(300===s.kind?s:s.initializer,_)}if(301===s.kind){if(!(n<o.length-1)){V<99&&yE(s,4);var d=[];if(i)for(var p=0,f=i;p<f.length;p++){var g=f[p];e.isSpreadAssignment(g)||d.push(g.name)}_=Ao(r,d,r.symbol);return DE(i,e.Diagnostics.A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma),aD(s.expression,_)}Qn(s,e.Diagnostics.A_rest_element_must_be_last_in_a_destructuring_pattern)}else Qn(s,e.Diagnostics.Property_assignment_expected)}function iD(t,r,n,i,a){var o=t.elements,s=o[n];if(229!==s.kind){if(227!==s.kind){var c=Yd(n);if(Xf(r)){var u=Dd(r,c,32|(Lv(s)?16:0),Tb(s,c))||je;return aD(s,wo(s,Lv(s)?qm(u,524288):u),a)}return aD(s,i,a)}if(n<o.length-1)Qn(s,e.Diagnostics.A_rest_element_must_be_last_in_a_destructuring_pattern);else{var l=s.expression;if(223!==l.kind||63!==l.operatorToken.kind)return DE(t.elements,e.Diagnostics.A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma),aD(l,dy(r,_g)?my(r,(function(e){return b_(e,n)})):u_(i),a);Qn(l.operatorToken,e.Diagnostics.A_rest_element_cannot_have_an_initializer)}}}function aD(t,r,n,i){var a;if(300===t.kind){var o=t;o.objectAssignmentInitializer&&(!G||16777216&Vm(wD(o.objectAssignmentInitializer))||(r=qm(r,524288)),function(e,t,r,n,i){var a,o=t.kind;if(63===o&&(207===e.kind||206===e.kind))return aD(e,wD(r,n),n,108===r.kind);a=55===o||56===o||60===o?XS(e,n):wD(e,n);var s=wD(r,n);cD(e,t,r,a,s,i)}(o.name,o.equalsToken,o.objectAssignmentInitializer,n)),a=t.name}else a=t;return 223===a.kind&&63===a.operatorToken.kind&&(ie(a,n),a=a.left,G&&(r=qm(r,524288))),207===a.kind?function(e,t,r){var n=e.properties;if(G&&0===n.length)return Ch(t,e);for(var i=0;i<n.length;i++)nD(e,t,i,n,r);return t}(a,r,i):206===a.kind?function(e,t,r){var n=e.elements;V<2&&K.downlevelIteration&&yE(e,512);for(var i=eT(193,t,qe,e)||je,a=K.noUncheckedIndexedAccess?void 0:i,o=0;o<n.length;o++){var s=i;227===e.elements[o].kind&&(s=a=null!=a?a:eT(65,t,qe,e)||je),iD(e,t,o,s,r)}return t}(a,r,n):function(t,r,n){var i=wD(t,n),a=301===t.parent.kind?e.Diagnostics.The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access:e.Diagnostics.The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access,o=301===t.parent.kind?e.Diagnostics.The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access:e.Diagnostics.The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access;Wx(t,a,o)&&Qp(r,i,t,t);e.isPrivateIdentifierPropertyAccessExpression(t)&&yE(t.parent,1048576);return r}(a,r,n)}function oD(t){switch((t=e.skipParentheses(t)).kind){case 79:case 10:case 13:case 212:case 225:case 14:case 8:case 9:case 110:case 95:case 104:case 155:case 215:case 228:case 216:case 206:case 207:case 218:case 232:case 282:case 281:return!0;case 224:return oD(t.whenTrue)&&oD(t.whenFalse);case 223:return!e.isAssignmentOperator(t.operatorToken.kind)&&(oD(t.left)&&oD(t.right));case 221:case 222:switch(t.operator){case 53:case 39:case 40:case 54:return!0}return!1;default:return!1}}function sD(e,t){return 0!=(98304&t.flags)||Wp(e,t)}function cD(t,r,n,i,a,o){var s,c,u=r.kind;switch(u){case 41:case 42:case 66:case 67:case 43:case 68:case 44:case 69:case 40:case 65:case 47:case 70:case 48:case 71:case 49:case 72:case 51:case 74:case 52:case 78:case 50:case 73:if(i===ut||a===ut)return ut;i=Ch(i,t),a=Ch(a,n);var l=void 0;if(528&i.flags&&528&a.flags&&void 0!==(l=function(e){switch(e){case 51:case 74:return 56;case 52:case 78:return 37;case 50:case 73:return 55;default:return}}(r.kind)))return Qn(o||r,e.Diagnostics.The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead,e.tokenToString(r.kind),e.tokenToString(l)),Ze;var _,d=Ux(t,i,e.Diagnostics.The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type,!0),p=Ux(n,a,e.Diagnostics.The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type,!0);if(Zx(i,3)&&Zx(a,3)||!Yx(i,2112)&&!Yx(a,2112))_=Ze;else if(C(i,a)){switch(u){case 49:case 72:A();break;case 42:case 67:V<3&&Qn(o,e.Diagnostics.Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_later)}_=$e}else A(C),_=je;return d&&p&&k(_),_;case 39:case 64:if(i===ut||a===ut)return ut;Zx(i,402653316)||Zx(a,402653316)||(i=Ch(i,t),a=Ch(a,n));var f=void 0;if(Zx(i,296,!0)&&Zx(a,296,!0)?f=Ze:Zx(i,2112,!0)&&Zx(a,2112,!0)?f=$e:Zx(i,402653316,!0)||Zx(a,402653316,!0)?f=Ye:(Eo(i)||Eo(a))&&(f=ko(i)||ko(a)?je:Le),f&&!E(u))return f;if(!f){var g=402655727;return A((function(e,t){return Zx(e,g)&&Zx(t,g)})),Le}return 64===u&&k(f),f;case 29:case 31:case 32:case 33:return E(u)&&(i=og(Ch(i,t)),a=og(Ch(a,n)),N((function(e,t){return Wp(e,t)||Wp(t,e)||Vp(e,mt)&&Vp(t,mt)}))),at;case 34:case 35:case 36:case 37:if(e.isLiteralExpressionOfObject(t)||e.isLiteralExpressionOfObject(n)){var y=34===u||36===u;Qn(o,e.Diagnostics.This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value,y?"false":"true")}return function(t,r,n,i){var a=F(e.skipParentheses(n)),o=F(e.skipParentheses(i));if(a||o){var s=Qn(t,e.Diagnostics.This_condition_will_always_return_0,e.tokenToString(36===r||34===r?95:110));if(a&&o)return;var c=37===r||35===r?e.tokenToString(53):"",u=a?i:n,l=e.skipParentheses(u);e.addRelatedInfo(s,e.createDiagnosticForNode(u,e.Diagnostics.Did_you_mean_0,"".concat(c,"Number.isNaN(").concat(e.isEntityNameExpression(l)?e.entityNameToString(l):"...",")")))}}(o,u,t,n),N((function(e,t){return sD(e,t)||sD(t,e)})),at;case 102:return function(t,r,n,i){return n===ut||i===ut?ut:(!Eo(n)&&$x(n,131068)&&Qn(t,e.Diagnostics.The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter),Eo(i)||LC(i)||Kp(i,Wt)||Qn(r,e.Diagnostics.The_right_hand_side_of_an_instanceof_expression_must_be_of_type_any_or_of_a_type_assignable_to_the_Function_interface_type),at)}(t,n,i,a);case 101:return rD(t,n,i,a);case 55:case 76:var v=4194304&Vm(i)?P_([(c=G?i:og(a),my(c,vg)),a]):i;return 76===u&&k(a),v;case 56:case 75:var h=8388608&Vm(i)?P_([xg(yg(i)),a],2):i;return 75===u&&k(a),h;case 60:case 77:var b=262144&Vm(i)?P_([xg(i),a],2):i;return 77===u&&k(a),b;case 63:var x=e.isBinaryExpression(t.parent)?e.getAssignmentDeclarationKind(t.parent):0;return function(t,r){if(2===t)for(var n=0,i=Wc(r);n<i.length;n++){var a=i[n],o=ys(a);if(o.symbol&&32&o.symbol.flags){var s=a.escapedName,c=vi(a.valueDeclaration,s,788968,void 0,s,!1);(null==c?void 0:c.declarations)&&c.declarations.some(e.isJSDocTypedefTag)&&(si(c,e.Diagnostics.Duplicate_identifier_0,e.unescapeLeadingUnderscores(s),a),si(a,e.Diagnostics.Duplicate_identifier_0,e.unescapeLeadingUnderscores(s),c))}}}(x,a),function(r){var i;switch(r){case 2:return!0;case 1:case 5:case 6:case 3:case 4:var a=Sa(t),o=e.getAssignedExpandoInitializer(n);return!!o&&e.isObjectLiteralExpression(o)&&!!(null===(i=null==a?void 0:a.exports)||void 0===i?void 0:i.size);default:return!1}}(x)?(524288&a.flags&&(2===x||6===x||uf(a)||Km(a)||1&e.getObjectFlags(a))||k(a),i):(k(a),Pg(a));case 27:if(!K.allowUnreachableCode&&oD(t)&&(79!==(s=n).kind||"eval"!==s.escapedText)){var D=e.getSourceFileOfNode(t),S=D.text,T=e.skipTrivia(S,t.pos);D.parseDiagnostics.some((function(t){return t.code===e.Diagnostics.JSX_expressions_must_have_one_parent_element.code&&e.textSpanContainsPosition(t,T)}))||Qn(t,e.Diagnostics.Left_side_of_comma_operator_is_unused_and_has_no_side_effects)}return a;default:return e.Debug.fail()}function C(e,t){return Zx(e,2112)&&Zx(t,2112)}function E(r){var o=Xx(i,12288)?t:Xx(a,12288)?n:void 0;return!o||(Qn(o,e.Diagnostics.The_0_operator_cannot_be_applied_to_type_symbol,e.tokenToString(r)),!1)}function k(r){e.isAssignmentOperator(u)&&m((function(){if(Wx(t,e.Diagnostics.The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access,e.Diagnostics.The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access)&&(!e.isIdentifier(t)||"exports"!==e.unescapeLeadingUnderscores(t.escapedText))){var a=void 0;if(ne&&e.isPropertyAccessExpression(t)&&Yx(r,32768)){var o=Co(AD(t.expression),t.name.escapedText);Df(r,o)&&(a=e.Diagnostics.Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_type_of_the_target)}Qp(r,i,t,n,a)}}))}function N(e){return!e(i,a)&&(A(e),!0)}function A(t){var n,s=!1,c=o||r;if(t){var u=lS(i),l=lS(a);s=!(u===i&&l===a)&&!(!u||!l)&&t(u,l)}var _=i,d=a;!s&&t&&(n=function(e,t,r){var n=e,i=t,a=og(e),o=og(t);r(a,o)||(n=a,i=o);return[n,i]}(i,a,t),_=n[0],d=n[1]);var p=oo(_,d),f=p[0],g=p[1];(function(t,n,i,a){switch(r.kind){case 36:case 34:case 37:case 35:return Zn(t,n,e.Diagnostics.This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap,i,a);default:return}})(c,s,f,g)||Zn(c,s,e.Diagnostics.Operator_0_cannot_be_applied_to_types_1_and_2,e.tokenToString(r.kind),f,g)}function F(t){if(e.isIdentifier(t)&&"NaN"===t.escapedText){var r=wr||(wr=Vl("NaN",!1));return!!r&&r===Em(t)}return!1}}function uD(t){var r=t.parent;return e.isParenthesizedExpression(r)&&uD(r)||e.isElementAccessExpression(r)&&r.argumentExpression===t}function lD(t){for(var r=[t.head.text],n=[],i=0,a=t.templateSpans;i<a.length;i++){var o=a[i],s=wD(o.expression);Xx(s,12288)&&Qn(o.expression,e.Diagnostics.Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_in_String),r.push(o.literal.text),n.push(Vp(s,yt)?s:Ye)}return vD(t)||uD(t)||_y(Nv(t,void 0)||Ke,_D)?ed(r,n):Ye}function _D(e){return!!(134217856&e.flags||58982400&e.flags&&Yx(ru(e)||Ke,402653316))}function dD(t,r,n,i){var a=function(t){return 289!==t.kind||e.isJsxSelfClosingElement(t.parent)?t:t.parent.parent}(t),o=a.contextualType,s=a.inferenceContext;try{a.contextualType=r,a.inferenceContext=n;var c=wD(t,1|i|(n?2:0));return n&&n.intraExpressionInferenceSites&&(n.intraExpressionInferenceSites=void 0),Yx(c,2944)&&yD(c,Ev(r,t,void 0))?Gd(c):c}finally{a.contextualType=o,a.inferenceContext=s}}function pD(e,t){if(t&&0!==t)return wD(e,t);var r=di(e);if(!r.resolvedType){var n=tn,i=Lr;tn=rn,Lr=void 0,r.resolvedType=wD(e,t),Lr=i,tn=n}return r.resolvedType}function fD(t){return 213===(t=e.skipParentheses(t,!0)).kind||231===t.kind||e.isJSDocTypeAssertion(t)}function gD(t,r,n){var i=e.getEffectiveInitializer(t),a=FD(i)||(n?dD(i,n,void 0,r||0):pD(i,r));return e.isParameter(t)&&204===t.name.kind&&_g(a)&&!a.target.hasRestElement&&Cl(a)<t.name.elements.length?function(t,r){for(var n=r.elements,i=Tl(t).slice(),a=t.target.elementFlags.slice(),o=Cl(t);o<n.length;o++){var s=n[o];(o<n.length-1||205!==s.kind||!s.dotDotDotToken)&&(i.push(!e.isOmittedExpression(s)&&Lv(s)?Yo(s,!1,!1):Le),a.push(2),e.isOmittedExpression(s)||Lv(s)||Jg(s,Le))}return m_(i,a,t.target.readonly)}(a,t.name):a}function mD(t,r){var n=2&e.getCombinedNodeFlags(t)||e.isDeclarationReadonly(t)?r:sg(r);if(e.isInJSFile(t)){if(Zf(n))return Jg(t,Le),Le;if($f(n))return Jg(t,rr),rr}return n}function yD(t,r){if(r){if(3145728&r.flags){var n=r.types;return e.some(n,(function(e){return yD(t,e)}))}if(58982400&r.flags){var i=ru(r)||Ke;return Yx(i,4)&&Yx(t,128)||Yx(i,8)&&Yx(t,256)||Yx(i,64)&&Yx(t,2048)||Yx(i,4096)&&Yx(t,8192)||yD(t,i)}return!!(406847616&r.flags&&Yx(t,128)||256&r.flags&&Yx(t,256)||2048&r.flags&&Yx(t,2048)||512&r.flags&&Yx(t,512)||8192&r.flags&&Yx(t,8192))}return!1}function vD(t){var r=t.parent;return e.isAssertionExpression(r)&&e.isConstTypeReference(r.type)||e.isJSDocTypeAssertion(r)&&e.isConstTypeReference(e.getJSDocTypeAssertionType(r))||(e.isParenthesizedExpression(r)||e.isArrayLiteralExpression(r)||e.isSpreadElement(r))&&vD(r)||(e.isPropertyAssignment(r)||e.isShorthandPropertyAssignment(r)||e.isTemplateSpan(r))&&vD(r.parent)}function hD(t,r,n,i){var a=wD(t,r,i);return vD(t)||e.isCommonJsExportedExpression(t)?Gd(a):fD(t)?a:ug(a,Ev(2===arguments.length?Nv(t,void 0):n,t,void 0))}function bD(e,t){return 164===e.name.kind&&Jv(e.name),hD(e.initializer,t)}function xD(e,t){return LE(e),164===e.name.kind&&Jv(e.name),DD(e,zx(e,t),t)}function DD(t,r,n){if(n&&10&n){var i=fb(r,0,!0),a=fb(r,1,!0),o=i||a;if(o&&o.typeParameters){var s=Cv(t,2);if(s){var c=fb(xg(s),i?0:1,!1);if(c&&!c.typeParameters){if(8&n)return SD(t,n),wt;var u=Av(t),l=u.signature&&Yu(u.signature),_=l&&pb(l);if(_&&!_.typeParameters&&!e.every(u.inferences,TD)){var d=function(t,r){for(var n,i,a=[],o=0,s=r;o<s.length;o++){var c=(p=s[o]).symbol.escapedName;if(ED(t.inferredTypeParameters,c)||ED(a,c)){var u=La(ri(262144,kD(e.concatenate(t.inferredTypeParameters,a),c)));u.target=p,n=e.append(n,p),i=e.append(i,u),a.push(u)}else a.push(p)}if(i)for(var l=lp(n,i),_=0,d=i;_<d.length;_++){var p;(p=d[_]).mapper=l}return a}(u,o.typeParameters),p=rl(o,d),f=e.map(u.inferences,(function(e){return Gg(e.typeParameter)}));if(Ug(p,c,(function(e,t){gm(f,e,t,0,!0)})),e.some(f,TD)&&(Kg(p,c,(function(e,t){gm(f,e,t)})),!function(e,t){for(var r=0;r<e.length;r++)if(TD(e[r])&&TD(t[r]))return!0;return!1}(u.inferences,f)))return function(e,t){for(var r=0;r<e.length;r++)!TD(e[r])&&TD(t[r])&&(e[r]=t[r])}(u.inferences,f),u.inferredTypeParameters=e.concatenate(u.inferredTypeParameters,d),sl(p)}return sl(gb(o,c,u))}}}}return r}function SD(e,t){2&t&&(Av(e).flags|=4)}function TD(e){return!(!e.candidates&&!e.contraCandidates)}function CD(e){return!!(e.candidates||e.contraCandidates||cu(e.typeParameter))}function ED(t,r){return e.some(t,(function(e){return e.symbol.escapedName===r}))}function kD(e,t){for(var r=t.length;r>1&&t.charCodeAt(r-1)>=48&&t.charCodeAt(r-1)<=57;)r--;for(var n=t.slice(0,r),i=1;;i++){var a=n+i;if(!ED(e,a))return a}}function ND(e){var t=db(e);if(t&&!t.typeParameters)return Yu(t)}function AD(t){var r=FD(t);if(r)return r;if(134217728&t.flags&&Lr){var n=Lr[F(t)];if(n)return n}var i=on,a=wD(t);on!==i&&((Lr||(Lr=[]))[F(t)]=a,e.setNodeFlags(t,134217728|t.flags));return a}function FD(t){var r=e.skipParentheses(t,!0);if(e.isJSDocTypeAssertion(r)){var n=e.getJSDocTypeAssertionType(r);if(!e.isConstTypeReference(n))return ip(n)}if(r=e.skipParentheses(t),!e.isCallExpression(r)||106===r.expression.kind||e.isRequireCall(r,!0)||Zb(r)){if(e.isAssertionExpression(r)&&!e.isConstTypeReference(r.type))return ip(r.type);if(8===t.kind||10===t.kind||110===t.kind||95===t.kind)return wD(t)}else{if(n=e.isCallChain(r)?function(e){var t=wD(e.expression),r=Cg(t,e.expression),n=ND(t);return n&&Tg(n,e,r!==t)}(r):ND(hh(r.expression)))return n}}function PD(e){var t=di(e);if(t.contextFreeType)return t.contextFreeType;var r=e.contextualType;e.contextualType=Le;try{return t.contextFreeType=wD(e,4)}finally{e.contextualType=r}}function wD(t,n,i){null===e.tracing||void 0===e.tracing||e.tracing.push("check","checkExpression",{kind:t.kind,pos:t.pos,end:t.end,path:t.tracingPath});var a=l;l=t,B=0;var o=function(t,n,i){var a=t.kind;if(r)switch(a){case 228:case 215:case 216:r.throwIfCancellationRequested()}switch(a){case 79:return Gy(t,n);case 80:return Ph(t);case 108:return ev(t);case 106:return nv(t);case 104:return Xe;case 14:case 10:return Hd(Xd(t.text));case 8:return QE(t),Hd(Yd(+t.text));case 9:return function(t){var r=e.isLiteralTypeNode(t.parent)||e.isPrefixUnaryExpression(t.parent)&&e.isLiteralTypeNode(t.parent.parent);if(!r&&V<7&&WE(t,e.Diagnostics.BigInt_literals_are_not_available_when_targeting_lower_than_ES2020))return!0}(t),Hd(Zd({negative:!1,base10Value:e.parsePseudoBigInt(t.text)}));case 110:return rt;case 95:return et;case 225:return lD(t);case 13:return er;case 206:return Rv(t,n,i);case 207:return Vv(t,n);case 208:return kh(t,n);case 163:return Nh(t,n);case 209:return tb(t,n);case 210:if(100===t.expression.kind)return $b(t);case 211:return function(t,r){var n;EE(t,t.typeArguments);var i=Wb(t,void 0,r);if(i===Ur)return ut;if(Xb(i,t),106===t.expression.kind)return st;if(211===t.kind){var a=i.declaration;if(a&&173!==a.kind&&177!==a.kind&&182!==a.kind&&!e.isJSDocConstructSignature(a)&&!Hb(a))return Z&&Qn(t,e.Diagnostics.new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type),Le}if(e.isInJSFile(t)&&nx(t))return Hu(t.arguments[0]);var o=Yu(i);if(12288&o.flags&&Zb(t))return ep(e.walkUpParenthesizedExpressions(t.parent));if(210===t.kind&&!t.questionDotToken&&241===t.parent.kind&&16384&o.flags&&Qu(i))if(e.isDottedName(t.expression)){if(!Py(t)){var s=Qn(t.expression,e.Diagnostics.Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation);Fy(t.expression,s)}}else Qn(t.expression,e.Diagnostics.Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name);if(e.isInJSFile(t)){var c=Qb(t,!1);if(null===(n=null==c?void 0:c.exports)||void 0===n?void 0:n.size){var u=za(c,c.exports,e.emptyArray,e.emptyArray,e.emptyArray);return u.objectFlags|=4096,j_([o,u])}}return o}(t,n);case 212:return ix(t);case 214:return function(t,r){if(e.hasJSDocNodes(t)&&e.isJSDocTypeAssertion(t)){var n=e.getJSDocTypeAssertionType(t);return ox(n,n,t.expression,r)}return wD(t.expression,r)}(t,n);case 228:return function(e){return LT(e),gC(e),ys(Sa(e))}(t);case 215:case 216:return zx(t,n);case 218:return function(e){return wD(e.expression),In}(t);case 213:case 231:return function(t){if(213===t.kind){var r=e.getSourceFileOfNode(t);r&&e.fileExtensionIsOneOf(r.fileName,[".cts",".mts"])&&WE(t,e.Diagnostics.This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead)}return ox(t,t.type,t.expression)}(t);case 232:return sx(t);case 230:return cx(t);case 235:return function(t){dC(t.type);var r=wD(t.expression),n=ip(t.type);return ko(n)?n:(Qp(r,n,t.type,t.expression,e.Diagnostics.Type_0_does_not_satisfy_the_expected_type_1),r)}(t);case 233:return ux(t);case 217:return Hx(t);case 219:return function(e){return wD(e.expression),We}(t);case 220:return Gx(t);case 221:return function(t){var r=wD(t.operand);if(r===ut)return ut;switch(t.operand.kind){case 8:switch(t.operator){case 40:return Hd(Yd(-t.operand.text));case 39:return Hd(Yd(+t.operand.text))}break;case 9:if(40===t.operator)return Hd(Zd({negative:!0,base10Value:e.parsePseudoBigInt(t.operand.text)}))}switch(t.operator){case 39:case 40:case 54:return Ch(r,t.operand),Xx(r,12288)&&Qn(t.operand,e.Diagnostics.The_0_operator_cannot_be_applied_to_type_symbol,e.tokenToString(t.operator)),39===t.operator?(Xx(r,2112)&&Qn(t.operand,e.Diagnostics.Operator_0_cannot_be_applied_to_type_1,e.tokenToString(t.operator),ao(og(r))),Ze):Qx(r);case 53:XS(t.operand);var n=12582912&Vm(r);return 4194304===n?et:8388608===n?rt:at;case 45:case 46:return Ux(t.operand,Ch(r,t.operand),e.Diagnostics.An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type)&&Wx(t.operand,e.Diagnostics.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,e.Diagnostics.The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access),Qx(r)}return je}(t);case 222:return function(t){var r=wD(t.operand);return r===ut?ut:(Ux(t.operand,Ch(r,t.operand),e.Diagnostics.An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type)&&Wx(t.operand,e.Diagnostics.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,e.Diagnostics.The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access),Qx(r))}(t);case 223:return ie(t,n);case 224:return function(e,t){var r=XS(e.condition);return GS(e.condition,r,e.whenTrue),P_([wD(e.whenTrue,t),wD(e.whenFalse,t)],2)}(t,n);case 227:return function(e,t){return V<2&&yE(e,K.downlevelIteration?1536:1024),eT(33,wD(e.expression,t),qe,e.expression)}(t,n);case 229:return We;case 226:return function(t){m((function(){8192&t.flags||VE(t,e.Diagnostics.A_yield_expression_is_only_allowed_in_a_generator_body),uv(t)&&Qn(t,e.Diagnostics.yield_expressions_cannot_be_used_in_a_parameter_initializer)}));var r=e.getContainingFunction(t);if(!r)return Le;var n=e.getFunctionFlags(r);if(!(1&n))return Le;var i=0!=(2&n);t.asteriskToken&&(i&&V<99&&yE(t,26624),!i&&V<2&&K.downlevelIteration&&yE(t,256));var a=Zu(r),o=a&&TT(a,i),s=o&&o.yieldType||Le,c=o&&o.nextType||Le,u=i?uS(c)||Le:c,l=t.expression?wD(t.expression):We,_=Mx(t,l,u,i);if(a&&_&&Qp(_,s,t.expression||t,t.expression),t.asteriskToken)return rT(i?19:17,1,l,t.expression)||Le;if(a)return ST(2,a,i)||Le;var d=lv(2,r);return d||(d=Le,m((function(){if(Z&&!e.expressionResultIsUnused(t)){var r=Nv(t,void 0);r&&!Eo(r)||Qn(t,e.Diagnostics.yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_type_annotation)}}))),d}(t);case 234:return function(e){return e.isSpread?bd(e.type,Ze):e.type}(t);case 291:return ph(t,n);case 281:case 282:return function(e,t){return gC(e),ch(e)||Le}(t);case 285:return function(t){lh(t.openingFragment);var r=e.getSourceFileOfNode(t);return!e.getJSXTransformEnabled(K)||!K.jsxFactory&&!r.pragmas.has("jsx")||K.jsxFragmentFactory||r.pragmas.has("jsxfrag")||Qn(t,K.jsxFactory?e.Diagnostics.The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_compiler_option:e.Diagnostics.An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments),Qv(t),ch(t)||Le}(t);case 289:return Yv(t,n);case 283:e.Debug.fail("Shouldn't ever directly check a JsxOpeningElement")}return je}(t,n,i),s=DD(t,o,n);return eD(s)&&function(t,r){var n=208===t.parent.kind&&t.parent.expression===t||209===t.parent.kind&&t.parent.expression===t||(79===t.kind||163===t.kind)&&EC(t)||183===t.parent.kind&&t.parent.exprName===t||278===t.parent.kind;n||Qn(t,e.Diagnostics.const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_import_declaration_or_export_assignment_or_type_query);if(K.isolatedModules){e.Debug.assert(!!(128&r.symbol.flags)),16777216&r.symbol.valueDeclaration.flags&&Qn(t,e.Diagnostics.Cannot_access_ambient_const_enums_when_the_isolatedModules_flag_is_provided)}}(t,s),l=a,null===e.tracing||void 0===e.tracing||e.tracing.pop(),s}function ID(t){bE(t),t.expression&&VE(t.expression,e.Diagnostics.Type_expected),dC(t.constraint),dC(t.default);var r=Vs(Sa(t));ru(r),function(e){return ou(e)!==Ot}(r)||Qn(t.default,e.Diagnostics.Type_parameter_0_has_a_circular_default,ao(r));var n=Yc(r),i=su(r);n&&i&&Gp(i,_c(Fp(n,dp(r,i)),i),t.default,e.Diagnostics.Type_0_does_not_satisfy_the_constraint_1),gC(t),m((function(){return wT(t.name,e.Diagnostics.Type_parameter_name_cannot_be_0)}))}function OD(t){hE(t),US(t);var r=e.getContainingFunction(t);e.hasSyntacticModifier(t,16476)&&(173===r.kind&&e.nodeIsPresent(r.body)||Qn(t,e.Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation),173===r.kind&&e.isIdentifier(t.name)&&"constructor"===t.name.escapedText&&Qn(t.name,e.Diagnostics.constructor_cannot_be_used_as_a_parameter_property_name)),(t.questionToken||Lu(t))&&e.isBindingPattern(t.name)&&r.body&&Qn(t,e.Diagnostics.A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature),t.name&&e.isIdentifier(t.name)&&("this"===t.name.escapedText||"new"===t.name.escapedText)&&(0!==r.parameters.indexOf(t)&&Qn(t,e.Diagnostics.A_0_parameter_must_be_the_first_parameter,t.name.escapedText),173!==r.kind&&177!==r.kind&&182!==r.kind||Qn(t,e.Diagnostics.A_constructor_cannot_have_a_this_parameter),216===r.kind&&Qn(t,e.Diagnostics.An_arrow_function_cannot_have_a_this_parameter),174!==r.kind&&175!==r.kind||Qn(t,e.Diagnostics.get_and_set_accessors_cannot_declare_this_parameters)),!t.dotDotDotToken||e.isBindingPattern(t.name)||Vp(mu(ys(t.symbol)),ir)||Qn(t,e.Diagnostics.A_rest_parameter_must_be_of_an_array_type)}function MD(t,r,n){for(var i=0,a=t.elements;i<a.length;i++){var o=a[i];if(!e.isOmittedExpression(o)){var s=o.name;if(79===s.kind&&s.escapedText===n)return Qn(r,e.Diagnostics.A_type_predicate_cannot_reference_element_0_in_a_binding_pattern,n),!0;if((204===s.kind||203===s.kind)&&MD(s,r,n))return!0}}}function LD(t){178===t.kind?function(t){hE(t)||function(t){var r=t.parameters[0];if(1!==t.parameters.length)return WE(r?r.name:t,e.Diagnostics.An_index_signature_must_have_exactly_one_parameter);if(DE(t.parameters,e.Diagnostics.An_index_signature_cannot_have_a_trailing_comma),r.dotDotDotToken)return WE(r.dotDotDotToken,e.Diagnostics.An_index_signature_cannot_have_a_rest_parameter);if(e.hasEffectiveModifiers(r))return WE(r.name,e.Diagnostics.An_index_signature_parameter_cannot_have_an_accessibility_modifier);if(r.questionToken)return WE(r.questionToken,e.Diagnostics.An_index_signature_parameter_cannot_have_a_question_mark);if(r.initializer)return WE(r.name,e.Diagnostics.An_index_signature_parameter_cannot_have_an_initializer);if(!r.type)return WE(r.name,e.Diagnostics.An_index_signature_parameter_must_have_a_type_annotation);var n=ip(r.type);if(_y(n,(function(e){return!!(8576&e.flags)}))||dd(n))return WE(r.name,e.Diagnostics.An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_object_type_instead);if(!dy(n,pl))return WE(r.name,e.Diagnostics.An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type);if(!t.type)return WE(t,e.Diagnostics.An_index_signature_must_have_a_type_annotation)}(t)}(t):181!==t.kind&&259!==t.kind&&182!==t.kind&&176!==t.kind&&173!==t.kind&&177!==t.kind||CE(t);var r=e.getFunctionFlags(t);4&r||(3==(3&r)&&V<99&&yE(t,6144),2==(3&r)&&V<4&&yE(t,64),0!=(3&r)&&V<2&&yE(t,128)),IT(e.getEffectiveTypeParameterDeclarations(t)),function(t){var r=e.filter(e.getJSDocTags(t),e.isJSDocParameterTag);if(!e.length(r))return;var n=e.isInJSFile(t),i=new e.Set,a=new e.Set;e.forEach(t.parameters,(function(t,r){var n=t.name;e.isIdentifier(n)&&i.add(n.escapedText),e.isBindingPattern(n)&&a.add(r)}));var o=qu(t);if(o){var s=e.lastOrUndefined(r);n&&s&&e.isIdentifier(s.name)&&s.typeExpression&&s.typeExpression.type&&!i.has(s.name.escapedText)&&!qf(ip(s.typeExpression.type))&&Qn(s.name,e.Diagnostics.JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_had_an_array_type,e.idText(s.name))}else e.forEach(r,(function(t,r){var o=t.name,s=t.isNameFirst;a.has(r)||e.isIdentifier(o)&&i.has(o.escapedText)||(e.isQualifiedName(o)?n&&Qn(o,e.Diagnostics.Qualified_name_0_is_not_allowed_without_a_leading_param_object_1,e.entityNameToString(o),e.entityNameToString(o.left)):s||Yn(n,o,e.Diagnostics.JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name,e.idText(o)))}))}(t),e.forEach(t.parameters,OD),t.type&&dC(t.type),m((function(){!function(t){if(V>=2||!e.hasRestParameter(t)||16777216&t.flags||e.nodeIsMissing(t.body))return;e.forEach(t.parameters,(function(t){t.name&&!e.isBindingPattern(t.name)&&t.name.escapedText===_e.escapedName&&Hn("noEmit",t,e.Diagnostics.Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters)}))}(t);var r=e.getEffectiveReturnTypeNode(t);if(Z&&!r)switch(t.kind){case 177:Qn(t,e.Diagnostics.Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type);break;case 176:Qn(t,e.Diagnostics.Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type)}if(r){var n=e.getFunctionFlags(t);if(1==(5&n)){var i=ip(r);if(i===st)Qn(r,e.Diagnostics.A_generator_cannot_have_a_void_type_annotation);else{var a=ST(0,i,0!=(2&n))||Le;Gp(Ox(a,ST(1,i,0!=(2&n))||a,ST(2,i,0!=(2&n))||Ke,!!(2&n)),i,r)}}else 2==(3&n)&&function(t,r){var n=ip(r);if(V>=2){if(ko(n))return;var i=e_(!0);if(i!==Pt&&!hs(n,i))return void Qn(r,e.Diagnostics.The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_write_Promise_0,ao(lS(n)||st))}else{if(function(t){dS(t&&e.getEntityNameFromTypeNode(t),!1)}(r),ko(n))return;var a=e.getEntityNameFromTypeNode(r);if(void 0===a)return void Qn(r,e.Diagnostics.Type_0_is_not_a_valid_async_function_return_type_in_ES5_SlashES3_because_it_does_not_refer_to_a_Promise_compatible_constructor_value,ao(n));var o=aa(a,111551,!0),s=o?ys(o):je;if(ko(s))return void(79===a.kind&&"Promise"===a.escapedText&&bs(n)===e_(!1)?Qn(r,e.Diagnostics.An_async_function_or_method_in_ES5_SlashES3_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_the_Promise_constructor_or_include_ES2015_in_your_lib_option):Qn(r,e.Diagnostics.Type_0_is_not_a_valid_async_function_return_type_in_ES5_SlashES3_because_it_does_not_refer_to_a_Promise_compatible_constructor_value,e.entityNameToString(a)));var c=(_=!0,pr||(pr=Gl("PromiseConstructorLike",0,_))||Ct);if(c===Ct)return void Qn(r,e.Diagnostics.Type_0_is_not_a_valid_async_function_return_type_in_ES5_SlashES3_because_it_does_not_refer_to_a_Promise_compatible_constructor_value,e.entityNameToString(a));if(!Gp(s,c,r,e.Diagnostics.Type_0_is_not_a_valid_async_function_return_type_in_ES5_SlashES3_because_it_does_not_refer_to_a_Promise_compatible_constructor_value))return;var u=a&&e.getFirstIdentifier(a),l=fi(t.locals,u.escapedText,111551);if(l)return void Qn(l.valueDeclaration,e.Diagnostics.Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions,e.idText(u),e.entityNameToString(a))}var _;nS(n,!1,t,e.Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member)}(t,r)}178!==t.kind&&320!==t.kind&&bS(t)}))}function RD(t){for(var r=new e.Map,n=0,i=t.members;n<i.length;n++){var a=i[n];if(168===a.kind){var o=void 0,s=a.name;switch(s.kind){case 10:case 8:o=s.text;break;case 79:o=e.idText(s);break;default:continue}r.get(o)?(Qn(e.getNameOfDeclaration(a.symbol.valueDeclaration),e.Diagnostics.Duplicate_identifier_0,o),Qn(a.name,e.Diagnostics.Duplicate_identifier_0,o)):r.set(o,!0)}}}function BD(t){if(261===t.kind){var r=Sa(t);if(r.declarations&&r.declarations.length>0&&r.declarations[0]!==t)return}var n=cl(Sa(t));if(null==n?void 0:n.declarations){for(var i=new e.Map,a=function(e){1===e.parameters.length&&e.parameters[0].type&&ly(ip(e.parameters[0].type),(function(t){var r=i.get(T_(t));r?r.declarations.push(e):i.set(T_(t),{type:t,declarations:[e]})}))},o=0,s=n.declarations;o<s.length;o++){a(s[o])}i.forEach((function(t){if(t.declarations.length>1)for(var r=0,n=t.declarations;r<n.length;r++){Qn(n[r],e.Diagnostics.Duplicate_index_signature_for_type_0,ao(t.type))}}))}}function jD(t){hE(t)||function(t){if(e.isComputedPropertyName(t.name)&&e.isBinaryExpression(t.name.expression)&&101===t.name.expression.operatorToken.kind)return WE(t.parent.members[0],e.Diagnostics.A_mapped_type_may_not_declare_properties_or_methods);if(e.isClassLike(t.parent)){if(e.isStringLiteral(t.name)&&"constructor"===t.name.text)return WE(t.name,e.Diagnostics.Classes_may_not_have_a_field_named_constructor);if(ME(t.name,e.Diagnostics.A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_symbol_type))return!0;if(V<2&&e.isPrivateIdentifier(t.name))return WE(t.name,e.Diagnostics.Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher);if(V<2&&e.isAutoAccessorPropertyDeclaration(t))return WE(t.name,e.Diagnostics.Properties_with_the_accessor_modifier_are_only_available_when_targeting_ECMAScript_2015_and_higher);if(e.isAutoAccessorPropertyDeclaration(t)&&PE(t.questionToken,e.Diagnostics.An_accessor_property_cannot_be_declared_optional))return!0}else if(261===t.parent.kind){if(ME(t.name,e.Diagnostics.A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type))return!0;if(e.Debug.assertNode(t,e.isPropertySignature),t.initializer)return WE(t.initializer,e.Diagnostics.An_interface_property_cannot_have_an_initializer)}else if(e.isTypeLiteralNode(t.parent)){if(ME(t.name,e.Diagnostics.A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type))return!0;if(e.Debug.assertNode(t,e.isPropertySignature),t.initializer)return WE(t.initializer,e.Diagnostics.A_type_literal_property_cannot_have_an_initializer)}16777216&t.flags&&BE(t);if(e.isPropertyDeclaration(t)&&t.exclamationToken&&(!e.isClassLike(t.parent)||!t.type||t.initializer||16777216&t.flags||e.isStatic(t)||e.hasAbstractModifier(t))){var r=t.initializer?e.Diagnostics.Declarations_with_initializers_cannot_also_have_definite_assignment_assertions:t.type?e.Diagnostics.A_definite_assignment_assertion_is_not_permitted_in_this_context:e.Diagnostics.Declarations_with_definite_assignment_assertions_must_also_have_type_annotations;return WE(t.exclamationToken,r)}}(t)||AE(t.name),US(t),JD(t),e.hasSyntacticModifier(t,256)&&169===t.kind&&t.initializer&&Qn(t,e.Diagnostics.Property_0_cannot_have_an_initializer_because_it_is_marked_abstract,e.declarationNameToString(t.name))}function JD(t){if(e.isPrivateIdentifier(t.name)&&V<99){for(var r=e.getEnclosingBlockScopeContainer(t);r;r=e.getEnclosingBlockScopeContainer(r))di(r).flags|=67108864;if(e.isClassExpression(t.parent)){var n=Qy(t.parent);n&&(di(t.name).flags|=524288,di(n).flags|=65536)}}}function zD(t){LD(t),function(t){var r=e.isInJSFile(t)?e.getJSDocTypeParameterDeclarations(t):void 0,n=t.typeParameters||r&&e.firstOrUndefined(r);if(n){var i=n.pos===n.end?n.pos:e.skipTrivia(e.getSourceFileOfNode(t).text,n.pos);return qE(t,i,n.end-i,e.Diagnostics.Type_parameters_cannot_appear_on_a_constructor_declaration)}}(t)||function(t){var r=t.type||e.getEffectiveReturnTypeNode(t);if(r)WE(r,e.Diagnostics.Type_annotation_cannot_appear_on_a_constructor_declaration)}(t),dC(t.body);var r=Sa(t),n=e.getDeclarationOfKind(r,t.kind);function i(t){return!!e.isPrivateIdentifierClassElementDeclaration(t)||169===t.kind&&!e.isStatic(t)&&!!t.initializer}t===n&&$D(r),e.nodeIsMissing(t.body)||m((function(){var r=t.parent;if(e.getClassExtendsHeritageElement(r)){Xy(t.parent,r);var n=Zy(r),a=Yy(t.body);if(a){if(n&&Qn(a,e.Diagnostics.A_constructor_cannot_contain_a_super_call_when_its_class_extends_null),(99!==e.getEmitScriptTarget(K)||!W)&&(e.some(t.parent.members,i)||e.some(t.parameters,(function(t){return e.hasSyntacticModifier(t,16476)}))))if(function(t,r){var n=e.walkUpParenthesizedExpressions(t.parent);return e.isExpressionStatement(n)&&n.parent===r}(a,t.body)){for(var o=void 0,s=0,c=t.body.statements;s<c.length;s++){var u=c[s];if(e.isExpressionStatement(u)&&e.isSuperCall(e.skipOuterExpressions(u.expression))){o=u;break}if(UD(u))break}void 0===o&&Qn(t,e.Diagnostics.A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_class_contains_initialized_properties_parameter_properties_or_private_identifiers)}else Qn(a,e.Diagnostics.A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_initialized_properties_parameter_properties_or_private_identifiers)}else n||Qn(t,e.Diagnostics.Constructors_for_derived_classes_must_contain_a_super_call)}}))}function UD(t){return 106===t.kind||108===t.kind||!e.isThisContainerOrFunctionBlock(t)&&!!e.forEachChild(t,UD)}function KD(t){e.isIdentifier(t.name)&&"constructor"===e.idText(t.name)&&Qn(t.name,e.Diagnostics.Class_constructor_may_not_be_an_accessor),m((function(){CE(t)||function(t){if(!(16777216&t.flags)&&184!==t.parent.kind&&261!==t.parent.kind){if(V<1)return WE(t.name,e.Diagnostics.Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher);if(V<2&&e.isPrivateIdentifier(t.name))return WE(t.name,e.Diagnostics.Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher);if(void 0===t.body&&!e.hasSyntacticModifier(t,256))return qE(t,t.end-1,";".length,e.Diagnostics._0_expected,"{")}if(t.body){if(e.hasSyntacticModifier(t,256))return WE(t,e.Diagnostics.An_abstract_accessor_cannot_have_an_implementation);if(184===t.parent.kind||261===t.parent.kind)return WE(t.body,e.Diagnostics.An_implementation_cannot_be_declared_in_ambient_contexts)}if(t.typeParameters)return WE(t.name,e.Diagnostics.An_accessor_cannot_have_type_parameters);if(!function(e){return OE(e)||e.parameters.length===(174===e.kind?0:1)}(t))return WE(t.name,174===t.kind?e.Diagnostics.A_get_accessor_cannot_have_parameters:e.Diagnostics.A_set_accessor_must_have_exactly_one_parameter);if(175===t.kind){if(t.type)return WE(t.name,e.Diagnostics.A_set_accessor_cannot_have_a_return_type_annotation);var r=e.Debug.checkDefined(e.getSetAccessorValueParameter(t),"Return value does not match parameter count assertion.");if(r.dotDotDotToken)return WE(r.dotDotDotToken,e.Diagnostics.A_set_accessor_cannot_have_rest_parameter);if(r.questionToken)return WE(r.questionToken,e.Diagnostics.A_set_accessor_cannot_have_an_optional_parameter);if(r.initializer)return WE(t.name,e.Diagnostics.A_set_accessor_parameter_cannot_have_an_initializer)}return!1}(t)||AE(t.name);yS(t),LD(t),174===t.kind&&!(16777216&t.flags)&&e.nodeIsPresent(t.body)&&256&t.flags&&(512&t.flags||Qn(t.name,e.Diagnostics.A_get_accessor_must_return_a_value));164===t.name.kind&&Jv(t.name);if(ac(t)){var r=Sa(t),n=e.getDeclarationOfKind(r,174),i=e.getDeclarationOfKind(r,175);if(n&&i&&!(1&eE(n))){di(n).flags|=1;var a=e.getEffectiveModifierFlags(n),o=e.getEffectiveModifierFlags(i);(256&a)!=(256&o)&&(Qn(n.name,e.Diagnostics.Accessors_must_both_be_abstract_or_non_abstract),Qn(i.name,e.Diagnostics.Accessors_must_both_be_abstract_or_non_abstract)),(16&a&&!(24&o)||8&a&&!(8&o))&&(Qn(n.name,e.Diagnostics.A_get_accessor_must_be_at_least_as_accessible_as_the_setter),Qn(i.name,e.Diagnostics.A_get_accessor_must_be_at_least_as_accessible_as_the_setter));var s=ss(n),c=ss(i);s&&c&&Gp(s,c,n,e.Diagnostics.The_return_type_of_a_get_accessor_must_be_assignable_to_its_set_accessor_type)}}var u=cs(Sa(t));174===t.kind&&Jx(t,u)})),dC(t.body),JD(t)}function VD(t,r){return Uu(e.map(t.typeArguments,ip),r,zu(r),e.isInJSFile(t))}function qD(t,r){for(var n,i,a=!0,o=0;o<r.length;o++){var s=Yc(r[o]);s&&(n||(i=lp(r,n=VD(t,r))),a=a&&Gp(n[o],Fp(s,i),t.typeArguments[o],e.Diagnostics.Type_0_does_not_satisfy_the_constraint_1))}return a}function WD(t){var r=Jl(t);if(!ko(r)){var n=di(t).resolvedSymbol;if(n)return 524288&n.flags&&_i(n).typeParameters||(4&e.getObjectFlags(r)?r.target.localTypeParameters:void 0)}}function HD(t){EE(t,t.typeArguments),180!==t.kind||void 0===t.typeName.jsdocDotPos||e.isInJSFile(t)||e.isInJSDoc(t)||qE(t,t.typeName.jsdocDotPos,1,e.Diagnostics.JSDoc_types_can_only_be_used_inside_documentation_comments),e.forEach(t.typeArguments,dC);var r=Jl(t);if(!ko(r)){t.typeArguments&&m((function(){var e=WD(t);e&&qD(t,e)}));var n=di(t).resolvedSymbol;n&&(e.some(n.declarations,(function(t){return e.isTypeDeclaration(t)&&!!(268435456&t.flags)}))&&ti(Yb(t),n.declarations,n.escapedName),32&r.flags&&8&n.flags&&Qn(t,e.Diagnostics.Enum_type_0_has_members_with_initializers_that_are_not_literals,ao(r)))}}function GD(t,r){if(!(8388608&t.flags))return t;var n=t.objectType,i=t.indexType;if(Vp(i,Z_(n,!1)))return 209===r.kind&&e.isAssignmentTarget(r)&&32&e.getObjectFlags(n)&&1&zc(n)&&Qn(r,e.Diagnostics.Index_signature_in_type_0_only_permits_reading,ao(n)),t;var a=_u(n);if(Au(a,Ze)&&Zx(i,296))return t;if(pd(n)){var o=od(i,r);if(o){var s=ly(a,(function(e){return xu(e,o)}));if(s&&24&e.getDeclarationModifierFlagsFromSymbol(s))return Qn(r,e.Diagnostics.Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter,e.unescapeLeadingUnderscores(o)),je}}return Qn(r,e.Diagnostics.Type_0_cannot_be_used_to_index_type_1,ao(i),ao(n)),je}function QD(t){!function(t){var r;if(null===(r=t.members)||void 0===r?void 0:r.length)WE(t.members[0],e.Diagnostics.A_mapped_type_may_not_declare_properties_or_methods)}(t),dC(t.typeParameter),dC(t.nameType),dC(t.type),t.type||Jg(t,Le);var r=Td(t),n=Lc(r);n?Gp(n,gt,t.nameType):Gp(Mc(r),gt,e.getEffectiveConstraintOfTypeParameter(t.typeParameter))}function XD(t){!function(t){if(156===t.operator){if(153!==t.type.kind)return WE(t.type,e.Diagnostics._0_expected,e.tokenToString(153));var r=e.walkUpParenthesizedTypes(t.parent);if(e.isInJSFile(r)&&e.isJSDocTypeExpression(r)){var n=e.getJSDocHost(r);n&&(r=e.getSingleVariableOfVariableStatement(n)||n)}switch(r.kind){case 257:var i=r;if(79!==i.name.kind)return WE(t,e.Diagnostics.unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name);if(!e.isVariableDeclarationInVariableStatement(i))return WE(t,e.Diagnostics.unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement);if(!(2&i.parent.flags))return WE(r.name,e.Diagnostics.A_variable_whose_type_is_a_unique_symbol_type_must_be_const);break;case 169:if(!e.isStatic(r)||!e.hasEffectiveReadonlyModifier(r))return WE(r.name,e.Diagnostics.A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly);break;case 168:if(!e.hasSyntacticModifier(r,64))return WE(r.name,e.Diagnostics.A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly);break;default:WE(t,e.Diagnostics.unique_symbol_types_are_not_allowed_here)}}else if(146===t.operator&&185!==t.type.kind&&186!==t.type.kind)VE(t,e.Diagnostics.readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types,e.tokenToString(153))}(t),dC(t.type)}function YD(t){return(e.hasEffectiveModifier(t,8)||e.isPrivateIdentifierClassElementDeclaration(t))&&!!(16777216&t.flags)}function ZD(t,r){var n=e.getCombinedModifierFlags(t);return 261!==t.parent.kind&&260!==t.parent.kind&&228!==t.parent.kind&&16777216&t.flags&&(2&n||e.isModuleBlock(t.parent)&&e.isModuleDeclaration(t.parent.parent)&&e.isGlobalScopeAugmentation(t.parent.parent)||(n|=1),n|=2),n&r}function $D(t){m((function(){return function(t){function r(e,t){return void 0!==t&&t.parent===e[0].parent?t:e[0]}function n(t,n,i,a,o){if(0!==(a^o)){var s=ZD(r(t,n),i);e.forEach(t,(function(t){var r=ZD(t,i)^s;1&r?Qn(e.getNameOfDeclaration(t),e.Diagnostics.Overload_signatures_must_all_be_exported_or_non_exported):2&r?Qn(e.getNameOfDeclaration(t),e.Diagnostics.Overload_signatures_must_all_be_ambient_or_non_ambient):24&r?Qn(e.getNameOfDeclaration(t)||t,e.Diagnostics.Overload_signatures_must_all_be_public_private_or_protected):256&r&&Qn(e.getNameOfDeclaration(t),e.Diagnostics.Overload_signatures_must_all_be_abstract_or_non_abstract)}))}}function i(t,n,i,a){if(i!==a){var o=e.hasQuestionToken(r(t,n));e.forEach(t,(function(t){e.hasQuestionToken(t)!==o&&Qn(e.getNameOfDeclaration(t),e.Diagnostics.Overload_signatures_must_all_be_optional_or_required)}))}}var o,s,c,u=283,l=0,_=u,d=!1,p=!0,f=!1,g=t.declarations,m=0!=(16384&t.flags);function y(t){if(!t.name||!e.nodeIsMissing(t.name)){var r=!1,n=e.forEachChild(t.parent,(function(e){if(r)return e;r=e===t}));if(n&&n.pos===t.end&&n.kind===t.kind){var i=n.name||n,a=n.name;if(t.name&&a&&(e.isPrivateIdentifier(t.name)&&e.isPrivateIdentifier(a)&&t.name.escapedText===a.escapedText||e.isComputedPropertyName(t.name)&&e.isComputedPropertyName(a)||e.isPropertyNameLiteral(t.name)&&e.isPropertyNameLiteral(a)&&e.getEscapedTextOfIdentifierOrLiteral(t.name)===e.getEscapedTextOfIdentifierOrLiteral(a))){if((171===t.kind||170===t.kind)&&e.isStatic(t)!==e.isStatic(n))Qn(i,e.isStatic(t)?e.Diagnostics.Function_overload_must_be_static:e.Diagnostics.Function_overload_must_not_be_static);return}if(e.nodeIsPresent(n.body))return void Qn(i,e.Diagnostics.Function_implementation_name_must_be_0,e.declarationNameToString(t.name))}var o=t.name||t;m?Qn(o,e.Diagnostics.Constructor_implementation_is_missing):e.hasSyntacticModifier(t,256)?Qn(o,e.Diagnostics.All_declarations_of_an_abstract_method_must_be_consecutive):Qn(o,e.Diagnostics.Function_implementation_is_missing_or_not_immediately_following_the_declaration)}}var v=!1,h=!1,b=!1,x=[];if(g)for(var D=0,S=g;D<S.length;D++){var T=S[D],C=16777216&T.flags,E=T.parent&&(261===T.parent.kind||184===T.parent.kind)||C;if(E&&(c=void 0),260!==T.kind&&228!==T.kind||C||(b=!0),259===T.kind||171===T.kind||170===T.kind||173===T.kind){x.push(T);var k=ZD(T,u);l|=k,_&=k,d=d||e.hasQuestionToken(T),p=p&&e.hasQuestionToken(T);var N=e.nodeIsPresent(T.body);N&&o?m?h=!0:v=!0:(null==c?void 0:c.parent)===T.parent&&c.end!==T.pos&&y(c),N?o||(o=T):f=!0,c=T,E||(s=T)}}h&&e.forEach(x,(function(t){Qn(t,e.Diagnostics.Multiple_constructor_implementations_are_not_allowed)}));v&&e.forEach(x,(function(t){Qn(e.getNameOfDeclaration(t)||t,e.Diagnostics.Duplicate_function_implementation)}));if(b&&!m&&16&t.flags&&g){var A=e.filter(g,(function(e){return 260===e.kind})).map((function(t){return e.createDiagnosticForNode(t,e.Diagnostics.Consider_adding_a_declare_modifier_to_this_class)}));e.forEach(g,(function(r){var n=260===r.kind?e.Diagnostics.Class_declaration_cannot_implement_overload_list_for_0:259===r.kind?e.Diagnostics.Function_with_bodies_can_only_merge_with_classes_that_are_ambient:void 0;n&&e.addRelatedInfo.apply(void 0,a([Qn(e.getNameOfDeclaration(r)||r,n,e.symbolName(t))],A,!1))}))}!s||s.body||e.hasSyntacticModifier(s,256)||s.questionToken||y(s);if(f&&(g&&(n(g,o,u,l,_),i(g,o,d,p)),o))for(var F=Wu(t),P=Ku(o),w=0,I=F;w<I.length;w++){var O=I[w];if(!sf(P,O)){e.addRelatedInfo(Qn(O.declaration,e.Diagnostics.This_overload_signature_is_not_compatible_with_its_implementation_signature),e.createDiagnosticForNode(o,e.Diagnostics.The_implementation_signature_is_declared_here));break}}}(t)}))}function eS(t){m((function(){return function(t){var r=t.localSymbol;if(!r&&!(r=Sa(t)).exportSymbol)return;if(e.getDeclarationOfKind(r,t.kind)!==t)return;for(var n=0,i=0,a=0,o=0,s=r.declarations;o<s.length;o++){var c=m(f=s[o]),u=ZD(f,1025);1&u?1024&u?a|=c:n|=c:i|=c}var l=n&i,_=a&(n|i);if(l||_)for(var d=0,p=r.declarations;d<p.length;d++){c=m(f=p[d]);var f,g=e.getNameOfDeclaration(f);c&_?Qn(g,e.Diagnostics.Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_default_0_declaration_instead,e.declarationNameToString(g)):c&l&&Qn(g,e.Diagnostics.Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local,e.declarationNameToString(g))}function m(t){var r=t;switch(r.kind){case 261:case 262:case 348:case 341:case 342:return 2;case 264:return e.isAmbientModule(r)||0!==e.getModuleInstanceState(r)?5:4;case 260:case 263:case 302:return 3;case 308:return 7;case 274:case 223:var n=r,i=e.isExportAssignment(n)?n.expression:n.right;if(!e.isEntityNameExpression(i))return 1;r=i;case 268:case 271:case 270:var a=0,o=Xi(Sa(r));return e.forEach(o.declarations,(function(e){a|=m(e)})),a;case 257:case 205:case 259:case 273:case 79:return 1;default:return e.Debug.failBadSyntaxKind(r)}}}(t)}))}function tS(e,t,r,n){var i=rS(e,t);return i&&uS(i,t,r,n)}function rS(t,r,n){if(!Eo(t)){var i=t;if(i.promisedTypeOfPromise)return i.promisedTypeOfPromise;if(hs(t,e_(!1)))return i.promisedTypeOfPromise=Tl(t)[0];if(!$x(nu(t),262140)){var a=Co(t,"then");if(!Eo(a)){var o=a?Su(a,0):e.emptyArray;if(0!==o.length){for(var s,c,u=0,l=o;u<l.length;u++){var _=l[u],d=Gu(_);d&&d!==st&&!gf(t,d,On)?s=d:c=e.append(c,_)}if(!c)return e.Debug.assertIsDefined(s),n&&(n.value=s),void(r&&Qn(r,e.Diagnostics.The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1,ao(t),ao(s)));var p=qm(P_(e.map(c,Ex)),2097152);if(!Eo(p)){var f=Su(p,0);if(0!==f.length)return i.promisedTypeOfPromise=P_(e.map(f,Ex),2);r&&Qn(r,e.Diagnostics.The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback)}}else r&&Qn(r,e.Diagnostics.A_promise_must_have_a_then_method)}}}}function nS(e,t,r,n,i){return(t?uS(e,r,n,i):lS(e,r,n,i))||je}function iS(e){if($x(nu(e),262140))return!1;var t=Co(e,"then");return!!t&&Su(qm(t,2097152),0).length>0}function aS(e){var t;if(16777216&e.flags){var r=o_(!1);return!!r&&e.aliasSymbol===r&&1===(null===(t=e.aliasTypeArguments)||void 0===t?void 0:t.length)}return!1}function oS(e){return 1048576&e.flags?my(e,oS):aS(e)?e.aliasTypeArguments[0]:e}function sS(e){if(Eo(e)||aS(e))return!1;if(pd(e)){var t=ru(e);if(t?3&t.flags||uf(t)||_y(t,iS):Yx(e,8650752))return!0}return!1}function cS(t){if(sS(t)){var r=function(e){var t=o_(!0);if(t)return kl(t,[oS(e)])}(t);if(r)return r}return e.Debug.assert(void 0===rS(t),"type provided should not be a non-generic 'promise'-like."),t}function uS(e,t,r,n){var i=lS(e,t,r,n);return i&&cS(i)}function lS(t,r,n,i){if(Eo(t))return t;if(aS(t))return t;var a=t;if(a.awaitedTypeOfType)return a.awaitedTypeOfType;if(1048576&t.flags){if(Fn.lastIndexOf(t.id)>=0)return void(r&&Qn(r,e.Diagnostics.Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method));var o=r?function(e){return lS(e,r,n,i)}:lS;Fn.push(t.id);var s=my(t,o);return Fn.pop(),a.awaitedTypeOfType=s}if(sS(t))return a.awaitedTypeOfType=t;var c={value:void 0},u=rS(t,void 0,c);if(u){if(t.id===u.id||Fn.lastIndexOf(u.id)>=0)return void(r&&Qn(r,e.Diagnostics.Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method));Fn.push(t.id);var l=lS(u,r,n,i);if(Fn.pop(),!l)return;return a.awaitedTypeOfType=l}if(!iS(t))return a.awaitedTypeOfType=t;if(r){e.Debug.assertIsDefined(n);var _=void 0;c.value&&(_=e.chainDiagnosticMessages(_,e.Diagnostics.The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1,ao(t),ao(c.value))),_=e.chainDiagnosticMessages(_,n,i),Pn.add(e.createDiagnosticForNodeFromMessageChain(r,_))}}function _S(t){var r=Wb(t);Xb(r,t);var n=Yu(r);if(!(1&n.flags)){var i,a;switch(t.parent.kind){case 260:i=e.Diagnostics.Decorator_function_return_type_0_is_not_assignable_to_type_1,a=P_([ys(Sa(t.parent)),st]);break;case 169:case 166:i=e.Diagnostics.Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any,a=st;break;case 171:case 174:case 175:i=e.Diagnostics.Decorator_function_return_type_0_is_not_assignable_to_type_1,a=P_([c_(FC(t.parent)),st]);break;default:return e.Debug.fail()}Gp(n,a,t,i)}}function dS(t,r){if(t){var n=e.getFirstIdentifier(t),i=2097152|(79===t.kind?788968:1920),a=vi(n,n.escapedText,i,void 0,void 0,!0);if(a&&2097152&a.flags)if(!Fa(a)||HC(Xi(a))||ea(a)){if(r&&K.isolatedModules&&e.getEmitModuleKind(K)>=e.ModuleKind.ES2015&&!Fa(a)&&!e.some(a.declarations,e.isTypeOnlyImportOrExportDeclaration)){var o=Qn(t,e.Diagnostics.A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_when_isolatedModules_and_emitDecoratorMetadata_are_enabled),s=e.find(a.declarations||e.emptyArray,Pi);s&&e.addRelatedInfo(o,e.createDiagnosticForNode(s,e.Diagnostics._0_was_imported_here,e.idText(n)))}}else ra(a)}}function pS(t){var r=fS(t);r&&e.isEntityName(r)&&dS(r,!0)}function fS(e){if(e)switch(e.kind){case 190:case 189:return gS(e.types);case 191:return gS([e.trueType,e.falseType]);case 193:case 199:return fS(e.type);case 180:return e.typeName}}function gS(t){for(var r,n=0,i=t;n<i.length;n++){for(var a=i[n];193===a.kind||199===a.kind;)a=a.type;if(144!==a.kind&&(G||(198!==a.kind||104!==a.literal.kind)&&155!==a.kind)){var o=fS(a);if(!o)return;if(r){if(!e.isIdentifier(r)||!e.isIdentifier(o)||r.escapedText!==o.escapedText)return}else r=o}}return r}function mS(t){var r=e.getEffectiveTypeAnnotationNode(t);return e.isRestParameter(t)?e.getRestParameterElementType(r):r}function yS(t){if(e.canHaveDecorators(t)&&e.hasDecorators(t)&&t.modifiers&&e.nodeCanBeDecorated(t,t.parent,t.parent.parent)){K.experimentalDecorators||Qn(t,e.Diagnostics.Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_the_experimentalDecorators_option_in_your_tsconfig_or_jsconfig_to_remove_this_warning);var r=e.find(t.modifiers,e.isDecorator);if(r){if(yE(r,8),166===t.kind&&yE(r,32),K.emitDecoratorMetadata)switch(yE(r,16),t.kind){case 260:var n=e.getFirstConstructorWithBody(t);if(n)for(var i=0,a=n.parameters;i<a.length;i++){pS(mS(a[i]))}break;case 174:case 175:var o=174===t.kind?175:174,s=e.getDeclarationOfKind(Sa(t),o);pS(os(t)||s&&os(s));break;case 171:for(var c=0,u=t.parameters;c<u.length;c++){pS(mS(u[c]))}pS(e.getEffectiveReturnTypeNode(t));break;case 169:pS(e.getEffectiveTypeAnnotationNode(t));break;case 166:pS(mS(t));for(var l=0,_=t.parent.parameters;l<_.length;l++){pS(mS(_[l]))}}for(var d=0,p=t.modifiers;d<p.length;d++){var f=p[d];e.isDecorator(f)&&_S(f)}}}}function vS(e){switch(e.kind){case 79:return e;case 208:return e.name;default:return}}function hS(t){var r;yS(t),LD(t);var n=e.getFunctionFlags(t);if(t.name&&164===t.name.kind&&Jv(t.name),ac(t)){var i=Sa(t),a=t.localSymbol||i,o=null===(r=a.declarations)||void 0===r?void 0:r.find((function(e){return e.kind===t.kind&&!(262144&e.flags)}));t===o&&$D(a),i.parent&&$D(i)}var s=170===t.kind?void 0:t.body;if(dC(s),Jx(t,Zu(t)),m((function(){e.getEffectiveReturnTypeNode(t)||(e.nodeIsMissing(s)&&!YD(t)&&Jg(t,Le),1&n&&e.nodeIsPresent(s)&&Yu(Ku(t)))})),e.isInJSFile(t)){var c=e.getJSDocTypeTag(t);c&&c.typeExpression&&!Iv(ip(c.typeExpression),t)&&Qn(c.typeExpression.type,e.Diagnostics.The_type_of_a_function_declaration_must_match_the_function_s_signature)}}function bS(t){m((function(){var r=e.getSourceFileOfNode(t),n=en.get(r.path);n||(n=[],en.set(r.path,n));n.push(t)}))}function xS(t,r){for(var n=0,i=t;n<i.length;n++){var a=i[n];switch(a.kind){case 260:case 228:TS(a,r),ES(a,r);break;case 308:case 264:case 238:case 266:case 245:case 246:case 247:PS(a,r);break;case 173:case 215:case 259:case 216:case 171:case 174:case 175:a.body&&PS(a,r),ES(a,r);break;case 170:case 176:case 177:case 181:case 182:case 262:case 261:ES(a,r);break;case 192:CS(a,r);break;default:e.Debug.assertNever(a,"Node should not have been registered for unused identifiers check")}}}function DS(t,r,n){var i=e.getNameOfDeclaration(t)||t,a=e.isTypeDeclaration(t)?e.Diagnostics._0_is_declared_but_never_used:e.Diagnostics._0_is_declared_but_its_value_is_never_read;n(t,0,e.createDiagnosticForNode(i,a,r))}function SS(t){return e.isIdentifier(t)&&95===e.idText(t).charCodeAt(0)}function TS(t,r){for(var n=0,i=t.members;n<i.length;n++){var a=i[n];switch(a.kind){case 171:case 169:case 174:case 175:if(175===a.kind&&32768&a.symbol.flags)break;var o=Sa(a);o.isReferenced||!(e.hasEffectiveModifier(a,8)||e.isNamedDeclaration(a)&&e.isPrivateIdentifier(a.name))||16777216&a.flags||r(a,0,e.createDiagnosticForNode(a.name,e.Diagnostics._0_is_declared_but_its_value_is_never_read,no(o)));break;case 173:for(var s=0,c=a.parameters;s<c.length;s++){var u=c[s];!u.symbol.isReferenced&&e.hasSyntacticModifier(u,8)&&r(u,0,e.createDiagnosticForNode(u.name,e.Diagnostics.Property_0_is_declared_but_its_value_is_never_read,e.symbolName(u.symbol)))}break;case 178:case 237:case 172:break;default:e.Debug.fail("Unexpected class member")}}}function CS(t,r){var n=t.typeParameter;kS(n)&&r(t,1,e.createDiagnosticForNode(t,e.Diagnostics._0_is_declared_but_its_value_is_never_read,e.idText(n.name)))}function ES(t,r){var n=Sa(t).declarations;if(n&&e.last(n)===t)for(var i=e.getEffectiveTypeParameterDeclarations(t),a=new e.Set,o=0,s=i;o<s.length;o++){var c=s[o];if(kS(c)){var u=e.idText(c.name),l=c.parent;if(192!==l.kind&&l.typeParameters.every(kS)){if(e.tryAddToSet(a,l)){var _=e.getSourceFileOfNode(l),d=e.isJSDocTemplateTag(l)?e.rangeOfNode(l):e.rangeOfTypeParameters(_,l.typeParameters),p=1===l.typeParameters.length,f=p?e.Diagnostics._0_is_declared_but_its_value_is_never_read:e.Diagnostics.All_type_parameters_are_unused,g=p?u:void 0;r(c,1,e.createFileDiagnostic(_,d.pos,d.end-d.pos,f,g))}}else r(c,1,e.createDiagnosticForNode(c,e.Diagnostics._0_is_declared_but_its_value_is_never_read,u))}}}function kS(e){return!(262144&Da(e.symbol).isReferenced||SS(e.name))}function NS(e,t,r,n){var i=String(n(t)),a=e.get(i);a?a[1].push(r):e.set(i,[t,[r]])}function AS(t){return e.tryCast(e.getRootDeclaration(t),e.isParameter)}function FS(t){return e.isBindingElement(t)?e.isObjectBindingPattern(t.parent)?!(!t.propertyName||!SS(t.name)):SS(t.name):e.isAmbientModule(t)||(e.isVariableDeclaration(t)&&e.isForInOrOfStatement(t.parent.parent)||IS(t))&&SS(t.name)}function PS(t,r){var n=new e.Map,i=new e.Map,a=new e.Map;t.locals.forEach((function(t){var o;if(!(262144&t.flags?!(3&t.flags)||3&t.isReferenced:t.isReferenced||t.exportSymbol)&&t.declarations)for(var s=0,c=t.declarations;s<c.length;s++){var u=c[s];if(!FS(u))if(IS(u))NS(n,270===(o=u).kind?o:271===o.kind?o.parent:o.parent.parent,u,F);else if(e.isBindingElement(u)&&e.isObjectBindingPattern(u.parent)){u!==e.last(u.parent.elements)&&e.last(u.parent.elements).dotDotDotToken||NS(i,u.parent,u,F)}else if(e.isVariableDeclaration(u))NS(a,u.parent,u,F);else{var l=t.valueDeclaration&&AS(t.valueDeclaration),_=t.valueDeclaration&&e.getNameOfDeclaration(t.valueDeclaration);l&&_?e.isParameterPropertyDeclaration(l,l.parent)||e.parameterIsThisKeyword(l)||SS(_)||(e.isBindingElement(u)&&e.isArrayBindingPattern(u.parent)?NS(i,u.parent,u,F):r(l,1,e.createDiagnosticForNode(_,e.Diagnostics._0_is_declared_but_its_value_is_never_read,e.symbolName(t)))):DS(u,e.symbolName(t),r)}}})),n.forEach((function(t){var n=t[0],i=t[1],a=n.parent;if((n.name?1:0)+(n.namedBindings?271===n.namedBindings.kind?1:n.namedBindings.elements.length:0)===i.length)r(a,0,1===i.length?e.createDiagnosticForNode(a,e.Diagnostics._0_is_declared_but_its_value_is_never_read,e.idText(e.first(i).name)):e.createDiagnosticForNode(a,e.Diagnostics.All_imports_in_import_declaration_are_unused));else for(var o=0,s=i;o<s.length;o++){var c=s[o];DS(c,e.idText(c.name),r)}})),i.forEach((function(t){var n=t[0],i=t[1],o=AS(n.parent)?1:0;if(n.elements.length===i.length)1===i.length&&257===n.parent.kind&&258===n.parent.parent.kind?NS(a,n.parent.parent,n.parent,F):r(n,o,1===i.length?e.createDiagnosticForNode(n,e.Diagnostics._0_is_declared_but_its_value_is_never_read,wS(e.first(i).name)):e.createDiagnosticForNode(n,e.Diagnostics.All_destructured_elements_are_unused));else for(var s=0,c=i;s<c.length;s++){var u=c[s];r(u,o,e.createDiagnosticForNode(u,e.Diagnostics._0_is_declared_but_its_value_is_never_read,wS(u.name)))}})),a.forEach((function(t){var n=t[0],i=t[1];if(n.declarations.length===i.length)r(n,0,1===i.length?e.createDiagnosticForNode(e.first(i).name,e.Diagnostics._0_is_declared_but_its_value_is_never_read,wS(e.first(i).name)):e.createDiagnosticForNode(240===n.parent.kind?n.parent:n,e.Diagnostics.All_variables_are_unused));else for(var a=0,o=i;a<o.length;a++){var s=o[a];r(s,0,e.createDiagnosticForNode(s,e.Diagnostics._0_is_declared_but_its_value_is_never_read,wS(s.name)))}}))}function wS(t){switch(t.kind){case 79:return e.idText(t);case 204:case 203:return wS(e.cast(e.first(t.elements),e.isBindingElement).name);default:return e.Debug.assertNever(t)}}function IS(e){return 270===e.kind||273===e.kind||271===e.kind}function OS(t){if(238===t.kind&&GE(t),e.isFunctionOrModuleBlock(t)){var r=an;e.forEach(t.statements,dC),an=r}else e.forEach(t.statements,dC);t.locals&&bS(t)}function MS(t,r,n){if((null==r?void 0:r.escapedText)!==n)return!1;if(169===t.kind||168===t.kind||171===t.kind||170===t.kind||174===t.kind||175===t.kind||299===t.kind)return!1;if(16777216&t.flags)return!1;if((e.isImportClause(t)||e.isImportEqualsDeclaration(t)||e.isImportSpecifier(t))&&e.isTypeOnlyImportOrExportDeclaration(t))return!1;var i=e.getRootDeclaration(t);return!e.isParameter(i)||!e.nodeIsMissing(i.parent.body)}function LS(t){e.findAncestor(t,(function(r){return!!(4&eE(r))&&(79!==t.kind?Qn(e.getNameOfDeclaration(t),e.Diagnostics.Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference):Qn(t,e.Diagnostics.Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference),!0)}))}function RS(t){e.findAncestor(t,(function(r){return!!(8&eE(r))&&(79!==t.kind?Qn(e.getNameOfDeclaration(t),e.Diagnostics.Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_meta_property_reference):Qn(t,e.Diagnostics.Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta_property_reference),!0)}))}function BS(t){67108864&eE(e.getEnclosingBlockScopeContainer(t))&&(e.Debug.assert(e.isNamedDeclaration(t)&&e.isIdentifier(t.name)&&"string"==typeof t.name.escapedText,"The target of a WeakMap/WeakSet collision check should be an identifier"),Hn("noEmit",t,e.Diagnostics.Compiler_reserves_name_0_when_emitting_private_identifier_downlevel,t.name.escapedText))}function jS(t){var r=!1;if(e.isClassExpression(t))for(var n=0,i=t.members;n<i.length;n++){if(134217728&eE(i[n])){r=!0;break}}else if(e.isFunctionExpression(t))134217728&eE(t)&&(r=!0);else{var a=e.getEnclosingBlockScopeContainer(t);a&&134217728&eE(a)&&(r=!0)}r&&(e.Debug.assert(e.isNamedDeclaration(t)&&e.isIdentifier(t.name),"The target of a Reflect collision check should be an identifier"),Hn("noEmit",t,e.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializers,e.declarationNameToString(t.name),"Reflect"))}function JS(t,r){r&&(function(t,r){if((!(q>=e.ModuleKind.ES2015)||q>=e.ModuleKind.Node16&&e.getSourceFileOfNode(t).impliedNodeFormat===e.ModuleKind.CommonJS)&&r&&(MS(t,r,"require")||MS(t,r,"exports"))&&(!e.isModuleDeclaration(t)||1===e.getModuleInstanceState(t))){var n=To(t);308===n.kind&&e.isExternalOrCommonJsModule(n)&&Hn("noEmit",r,e.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module,e.declarationNameToString(r),e.declarationNameToString(r))}}(t,r),function(t,r){if(r&&!(V>=4)&&MS(t,r,"Promise")&&(!e.isModuleDeclaration(t)||1===e.getModuleInstanceState(t))){var n=To(t);308===n.kind&&e.isExternalOrCommonJsModule(n)&&2048&n.flags&&Hn("noEmit",r,e.Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_functions,e.declarationNameToString(r),e.declarationNameToString(r))}}(t,r),function(e,t){V<=8&&(MS(e,t,"WeakMap")||MS(e,t,"WeakSet"))&&kn.push(e)}(t,r),function(e,t){t&&V>=2&&V<=8&&MS(e,t,"Reflect")&&Nn.push(e)}(t,r),e.isClassLike(t)?(wT(r,e.Diagnostics.Class_name_cannot_be_0),16777216&t.flags||function(t){V>=1&&"Object"===t.escapedText&&(q<e.ModuleKind.ES2015||e.getSourceFileOfNode(t).impliedNodeFormat===e.ModuleKind.CommonJS)&&Qn(t,e.Diagnostics.Class_name_cannot_be_Object_when_targeting_ES5_with_module_0,e.ModuleKind[q])}(r)):e.isEnumDeclaration(t)&&wT(r,e.Diagnostics.Enum_name_cannot_be_0))}function zS(e){return e===Re?Le:e===nr?rr:e}function US(t){var r;if(yS(t),e.isBindingElement(t)||dC(t.type),t.name){if(164===t.name.kind&&(Jv(t.name),e.hasOnlyExpressionInitializer(t)&&t.initializer&&pD(t.initializer)),e.isBindingElement(t)){if(t.propertyName&&e.isIdentifier(t.name)&&e.isParameterDeclaration(t)&&e.nodeIsMissing(e.getContainingFunction(t).body))return void An.push(t);e.isObjectBindingPattern(t.parent)&&t.dotDotDotToken&&V<5&&yE(t,4),t.propertyName&&164===t.propertyName.kind&&Jv(t.propertyName);var n=t.parent.parent,i=No(n,t.dotDotDotToken?64:0),a=t.propertyName||t.name;if(i&&!e.isBindingPattern(a)){var o=W_(a);if(tc(o)){var s=xu(i,oc(o));s&&(Qh(s,void 0,!1),mh(t,!!n.initializer&&106===n.initializer.kind,!1,i,s))}}}if(e.isBindingPattern(t.name)&&(204===t.name.kind&&V<2&&K.downlevelIteration&&yE(t,512),e.forEach(t.name.elements,dC)),e.isParameter(t)&&t.initializer&&e.nodeIsMissing(e.getContainingFunction(t).body))Qn(t,e.Diagnostics.A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation);else if(e.isBindingPattern(t.name)){var c=e.hasOnlyExpressionInitializer(t)&&t.initializer&&246!==t.parent.parent.kind,u=!e.some(t.name.elements,e.not(e.isOmittedExpression));if(c||u){var l=es(t);if(c){var _=pD(t.initializer);G&&u?Eh(_,t):Qp(_,es(t),t,t.initializer)}u&&(e.isArrayBindingPattern(t.name)?eT(65,l,qe,t):G&&Eh(l,t))}}else{var d=Sa(t);if(2097152&d.flags&&e.isVariableDeclarationInitializedToBareOrAccessedRequire(205===t.kind?t.parent.parent:t))$T(t);else{var p=zS(ys(d));if(t===d.valueDeclaration){var f=e.hasOnlyExpressionInitializer(t)&&e.getEffectiveInitializer(t);if(f)e.isInJSFile(t)&&e.isObjectLiteralExpression(f)&&(0===f.properties.length||e.isPrototypeAccess(t.name))&&!!(null===(r=d.exports)||void 0===r?void 0:r.size)||246===t.parent.parent.kind||Qp(pD(f),p,t,f,void 0);d.declarations&&d.declarations.length>1&&e.some(d.declarations,(function(r){return r!==t&&e.isVariableLike(r)&&!VS(r,t)}))&&Qn(t.name,e.Diagnostics.All_declarations_of_0_must_have_identical_modifiers,e.declarationNameToString(t.name))}else{var g=zS(es(t));ko(p)||ko(g)||jp(p,g)||67108864&d.flags||KS(d.valueDeclaration,p,t,g),e.hasOnlyExpressionInitializer(t)&&t.initializer&&Qp(pD(t.initializer),g,t,t.initializer,void 0),d.valueDeclaration&&!VS(t,d.valueDeclaration)&&Qn(t.name,e.Diagnostics.All_declarations_of_0_must_have_identical_modifiers,e.declarationNameToString(t.name))}169!==t.kind&&168!==t.kind&&(eS(t),257!==t.kind&&205!==t.kind||function(t){if(0==(3&e.getCombinedNodeFlags(t))&&!e.isParameterDeclaration(t)&&(257!==t.kind||t.initializer)){var r=Sa(t);if(1&r.flags){if(!e.isIdentifier(t.name))return e.Debug.fail();var n=vi(t,t.name.escapedText,3,void 0,void 0,!1);if(n&&n!==r&&2&n.flags&&3&fh(n)){var i=e.getAncestor(n.valueDeclaration,258),a=240===i.parent.kind&&i.parent.parent?i.parent.parent:void 0;if(!a||!(238===a.kind&&e.isFunctionLike(a.parent)||265===a.kind||264===a.kind||308===a.kind)){var o=no(n);Qn(t,e.Diagnostics.Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1,o,o)}}}}}(t),JS(t,t.name))}}}}function KS(t,r,n,i){var a=e.getNameOfDeclaration(n),o=169===n.kind||168===n.kind?e.Diagnostics.Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_type_2:e.Diagnostics.Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2,s=e.declarationNameToString(a),c=Qn(a,o,s,ao(r),ao(i));t&&e.addRelatedInfo(c,e.createDiagnosticForNode(t,e.Diagnostics._0_was_also_declared_here,s))}function VS(t,r){if(166===t.kind&&257===r.kind||257===t.kind&&166===r.kind)return!0;if(e.hasQuestionToken(t)!==e.hasQuestionToken(r))return!1;return e.getSelectedEffectiveModifierFlags(t,888)===e.getSelectedEffectiveModifierFlags(r,888)}function qS(t){null===e.tracing||void 0===e.tracing||e.tracing.push("check","checkVariableDeclaration",{kind:t.kind,pos:t.pos,end:t.end,path:t.tracingPath}),function(t){if(246!==t.parent.parent.kind&&247!==t.parent.parent.kind)if(16777216&t.flags)BE(t);else if(!t.initializer){if(e.isBindingPattern(t.name)&&!e.isBindingPattern(t.parent))return WE(t,e.Diagnostics.A_destructuring_declaration_must_have_an_initializer);if(e.isVarConst(t))return WE(t,e.Diagnostics.const_declarations_must_be_initialized)}if(t.exclamationToken&&(240!==t.parent.parent.kind||!t.type||t.initializer||16777216&t.flags)){var r=t.initializer?e.Diagnostics.Declarations_with_initializers_cannot_also_have_definite_assignment_assertions:t.type?e.Diagnostics.A_definite_assignment_assertion_is_not_permitted_in_this_context:e.Diagnostics.Declarations_with_definite_assignment_assertions_must_also_have_type_annotations;return WE(t.exclamationToken,r)}!(q<e.ModuleKind.ES2015||e.getSourceFileOfNode(t).impliedNodeFormat===e.ModuleKind.CommonJS)||q===e.ModuleKind.System||16777216&t.parent.parent.flags||!e.hasSyntacticModifier(t.parent.parent,1)||jE(t.name);var n=e.isLet(t)||e.isVarConst(t);n&&JE(t.name)}(t),US(t),null===e.tracing||void 0===e.tracing||e.tracing.pop()}function WS(t){return function(t){if(t.dotDotDotToken){var r=t.parent.elements;if(t!==e.last(r))return WE(t,e.Diagnostics.A_rest_element_must_be_last_in_a_destructuring_pattern);if(DE(r,e.Diagnostics.A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma),t.propertyName)return WE(t.name,e.Diagnostics.A_rest_element_cannot_have_a_property_name)}if(t.dotDotDotToken&&t.initializer)qE(t,t.initializer.pos-1,1,e.Diagnostics.A_rest_element_cannot_have_an_initializer)}(t),US(t)}function HS(t){hE(t)||zE(t.declarationList)||function(t){if(!UE(t.parent)){if(e.isLet(t.declarationList))return WE(t,e.Diagnostics.let_declarations_can_only_be_declared_inside_a_block);if(e.isVarConst(t.declarationList))WE(t,e.Diagnostics.const_declarations_can_only_be_declared_inside_a_block)}}(t),e.forEach(t.declarationList.declarations,dC)}function GS(t,r,n){if(G)for(i(t,n);e.isBinaryExpression(t)&&56===t.operatorToken.kind;)i(t=t.left,n);function i(t,n){var i=!e.isBinaryExpression(t)||56!==t.operatorToken.kind&&55!==t.operatorToken.kind?t:t.right;if(!e.isModuleExportsAccessExpression(i)){var a=i===t?r:XS(i),o=e.isPropertyAccessExpression(i)&&fD(i.expression);if(4194304&Vm(a)&&!o){var s=Su(a,0),c=!!tS(a);if(0!==s.length||c){var u=e.isIdentifier(i)?i:e.isPropertyAccessExpression(i)?i.name:e.isBinaryExpression(i)&&e.isIdentifier(i.right)?i.right:void 0,l=u&&AC(u);if(l||c){var _=l&&e.isBinaryExpression(t.parent)&&function(t,r){for(;e.isBinaryExpression(t)&&55===t.operatorToken.kind;){if(e.forEachChild(t.right,(function t(n){if(e.isIdentifier(n)){var i=AC(n);if(i&&i===r)return!0}return e.forEachChild(n,t)})))return!0;t=t.parent}return!1}(t.parent,l)||l&&n&&function(t,r,n,i){return!!e.forEachChild(r,(function r(a){if(e.isIdentifier(a)){var o=AC(a);if(o&&o===i){if(e.isIdentifier(t)||e.isIdentifier(n)&&e.isBinaryExpression(n.parent))return!0;for(var s=n.parent,c=a.parent;s&&c;){if(e.isIdentifier(s)&&e.isIdentifier(c)||108===s.kind&&108===c.kind)return AC(s)===AC(c);if(e.isPropertyAccessExpression(s)&&e.isPropertyAccessExpression(c)){if(AC(s.name)!==AC(c.name))return!1;c=c.expression,s=s.expression}else{if(!e.isCallExpression(s)||!e.isCallExpression(c))return!1;c=c.expression,s=s.expression}}}}return e.forEachChild(a,r)}))}(t,n,u,l);_||(c?Zn(i,!0,e.Diagnostics.This_condition_will_always_return_true_since_this_0_is_always_defined,so(a)):Qn(i,e.Diagnostics.This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_instead))}}}}}}function QS(t,r){return 16384&t.flags&&Qn(r,e.Diagnostics.An_expression_of_type_void_cannot_be_tested_for_truthiness),t}function XS(e,t){return QS(wD(e,t),e)}function YS(t){IE(t);var r,n=xh(wD(t.expression));if(258===t.initializer.kind){var i=t.initializer.declarations[0];i&&e.isBindingPattern(i.name)&&Qn(i.name,e.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern),ZS(t)}else{var a=t.initializer,o=wD(a);206===a.kind||207===a.kind?Qn(a,e.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern):Vp(131072&(r=$_(Z_(n))).flags?Ye:r,o)?Wx(a,e.Diagnostics.The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access,e.Diagnostics.The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access):Qn(a,e.Diagnostics.The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any)}n!==ct&&Zx(n,126091264)||Qn(t.expression,e.Diagnostics.The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_here_has_type_0,ao(n)),dC(t.statement),t.locals&&bS(t)}function ZS(e){var t=e.initializer;t.declarations.length>=1&&qS(t.declarations[0])}function $S(e){return eT(e.awaitModifier?15:13,hh(e.expression),qe,e.expression)}function eT(e,t,r,n){return Eo(t)?t:tT(e,t,r,n,!0)||Le}function tT(t,r,n,i,a){var o=0!=(2&t);if(r!==ct){var s=V>=2,c=!s&&K.downlevelIteration,u=K.noUncheckedIndexedAccess&&!!(128&t);if(s||c||o){var l=sT(r,t,s?i:void 0);if(a&&l){var _=8&t?e.Diagnostics.Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_send_0:32&t?e.Diagnostics.Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_always_send_0:64&t?e.Diagnostics.Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring_will_always_send_0:16&t?e.Diagnostics.Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_containing_generator_will_always_send_0:void 0;_&&Gp(n,l.nextType,i,_)}if(l||s)return u?Ym(l&&l.yieldType):l&&l.yieldType}var d=r,p=!1,f=!1;if(4&t){if(1048576&d.flags){var g=r.types,m=e.filter(g,(function(e){return!(402653316&e.flags)}));m!==g&&(d=P_(m,2))}else 402653316&d.flags&&(d=ct);if((f=d!==r)&&(V<1&&i&&(Qn(i,e.Diagnostics.Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher),p=!0),131072&d.flags))return u?Ym(Ye):Ye}if(!Xf(d)){if(i&&!p){var y=function(n,i){var a;if(i)return n?[e.Diagnostics.Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator,!0]:[e.Diagnostics.Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator,!0];if(rT(t,0,r,void 0))return[e.Diagnostics.Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es2015_or_higher,!1];if(function(e){switch(e){case"Float32Array":case"Float64Array":case"Int16Array":case"Int32Array":case"Int8Array":case"NodeList":case"Uint16Array":case"Uint32Array":case"Uint8Array":case"Uint8ClampedArray":return!0}return!1}(null===(a=r.symbol)||void 0===a?void 0:a.escapedName))return[e.Diagnostics.Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es2015_or_higher,!0];return n?[e.Diagnostics.Type_0_is_not_an_array_type_or_a_string_type,!0]:[e.Diagnostics.Type_0_is_not_an_array_type,!0]}(!!(4&t)&&!f,c),v=y[0];Zn(i,y[1]&&!!tS(d),v,ao(d))}return f?u?Ym(Ye):Ye:void 0}var h=Fu(d,Ze);return f&&h?402653316&h.flags&&!K.noUncheckedIndexedAccess?Ye:P_(u?[h,Ye,qe]:[h,Ye],2):128&t?Ym(h):h}fT(i,r,o)}function rT(e,t,r,n){if(!Eo(r)){var i=sT(r,e,n);return i&&i[M(t)]}}function nT(e,t,r){if(void 0===e&&(e=ct),void 0===t&&(t=ct),void 0===r&&(r=Ke),67359327&e.flags&&180227&t.flags&&180227&r.flags){var n=vl([e,t,r]),i=qr.get(n);return i||(i={yieldType:e,returnType:t,nextType:r},qr.set(n,i)),i}return{yieldType:e,returnType:t,nextType:r}}function iT(t){for(var r,n,i,a=0,o=t;a<o.length;a++){var s=o[a];if(void 0!==s&&s!==Wr){if(s===Hr)return Hr;r=e.append(r,s.yieldType),n=e.append(n,s.returnType),i=e.append(i,s.nextType)}}return r||n||i?nT(r&&P_(r),n&&P_(n),i&&j_(i)):Wr}function aT(e,t){return e[t]}function oT(e,t,r){return e[t]=r}function sT(t,r,n){var i,o;if(Eo(t))return Hr;if(!(1048576&t.flags)){var s=uT(t,r,n,y=n?{errors:void 0}:void 0);if(s===Wr){if(n){var c=fT(n,t,!!(2&r));(null==y?void 0:y.errors)&&e.addRelatedInfo.apply(void 0,a([c],y.errors,!1))}return}if(null===(i=null==y?void 0:y.errors)||void 0===i?void 0:i.length)for(var u=0,l=y.errors;u<l.length;u++){var _=l[u];Pn.add(_)}return s}var d,p=2&r?"iterationTypesOfAsyncIterable":"iterationTypesOfIterable",f=aT(t,p);if(f)return f===Wr?void 0:f;for(var g=0,m=t.types;g<m.length;g++){var y,v=uT(m[g],r,n,y=n?{errors:void 0}:void 0);if(v===Wr){if(n){c=fT(n,t,!!(2&r));(null==y?void 0:y.errors)&&e.addRelatedInfo.apply(void 0,a([c],y.errors,!1))}return void oT(t,p,Wr)}if(null===(o=null==y?void 0:y.errors)||void 0===o?void 0:o.length)for(var h=0,b=y.errors;h<b.length;h++){_=b[h];Pn.add(_)}d=e.append(d,v)}var x=d?iT(d):Wr;return oT(t,p,x),x===Wr?void 0:x}function cT(e,t){if(e===Wr)return Wr;if(e===Hr)return Hr;var r=e.yieldType,n=e.returnType,i=e.nextType;return t&&o_(!0),nT(uS(r,t)||Le,uS(n,t)||Le,i)}function uT(e,t,r,n){if(Eo(e))return Hr;var i,a=!1;if(2&t&&(i=lT(e,Xr)||dT(e,Xr))){if(i!==Wr||!r)return 8&t?cT(i,r):i;a=!0}if(1&t&&(i=lT(e,Yr)||dT(e,Yr)))if(i===Wr&&r)a=!0;else{if(!(2&t))return i;if(i!==Wr)return i=cT(i,r),a?i:oT(e,"iterationTypesOfAsyncIterable",i)}if(2&t&&(i=pT(e,Xr,r,n,a))!==Wr)return i;if(1&t&&(i=pT(e,Yr,r,n,a))!==Wr)return 2&t?(i=cT(i,r),a?i:oT(e,"iterationTypesOfAsyncIterable",i)):i;return Wr}function lT(e,t){return aT(e,t.iterableCacheKey)}function _T(e,t){var r=lT(e,t)||pT(e,t,void 0,void 0,!1);return r===Wr?Qr:r}function dT(e,t){var r;if(hs(e,r=t.getGlobalIterableType(!1))||hs(e,r=t.getGlobalIterableIteratorType(!1))){var n=Tl(e)[0],i=_T(r,t),a=i.returnType,o=i.nextType;return oT(e,t.iterableCacheKey,nT(t.resolveIterationType(n,void 0)||n,t.resolveIterationType(a,void 0)||a,o))}if(hs(e,t.getGlobalGeneratorType(!1))){var s=Tl(e);n=s[0],a=s[1],o=s[2];return oT(e,t.iterableCacheKey,nT(t.resolveIterationType(n,void 0)||n,t.resolveIterationType(a,void 0)||a,o))}}function pT(t,r,n,i,a){var o,s,c,u,l=xu(t,(s=r.iteratorSymbolName,c=Zl(!1),(u=c&&Co(ys(c),e.escapeLeadingUnderscores(s)))&&tc(u)?oc(u):"__@".concat(s))),_=!l||16777216&l.flags?void 0:ys(l);if(Eo(_))return a?Hr:oT(t,r.iterableCacheKey,Hr);var d=_?Su(_,0):void 0;if(!e.some(d))return a?Wr:oT(t,r.iterableCacheKey,Wr);var p=null!==(o=gT(j_(e.map(d,Yu)),r,n,i,a))&&void 0!==o?o:Wr;return a?p:oT(t,r.iterableCacheKey,p)}function fT(t,r,n){var i=n?e.Diagnostics.Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator:e.Diagnostics.Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator;return Zn(t,!!tS(r)||!n&&e.isForOfStatement(t.parent)&&t.parent.expression===t&&n_(!1)!==Pt&&Vp(r,n_(!1)),i,ao(r))}function gT(e,t,r,n,i){if(Eo(e))return Hr;var a=mT(e,t)||function(e,t){var r=t.getGlobalIterableIteratorType(!1);if(hs(e,r)){var n=Tl(e)[0],i=mT(r,t)||DT(r,t,void 0,void 0,!1),a=i===Wr?Qr:i,o=a.returnType,s=a.nextType;return oT(e,t.iteratorCacheKey,nT(n,o,s))}if(hs(e,t.getGlobalIteratorType(!1))||hs(e,t.getGlobalGeneratorType(!1))){var c=Tl(e);n=c[0],o=c[1],s=c[2];return oT(e,t.iteratorCacheKey,nT(n,o,s))}}(e,t);return a===Wr&&r&&(a=void 0,i=!0),null!=a||(a=DT(e,t,r,n,i)),a===Wr?void 0:a}function mT(e,t){return aT(e,t.iteratorCacheKey)}function yT(e,t){var r=Co(e,"done")||et;return Vp(0===t?et:rt,r)}function vT(e){return yT(e,0)}function hT(e){return yT(e,1)}function bT(e){if(Eo(e))return Hr;var t,r=aT(e,"iterationTypesOfIteratorResult");if(r)return r;if(hs(e,(t=!1,vr||(vr=Gl("IteratorYieldResult",1,t))||Pt)))return oT(e,"iterationTypesOfIteratorResult",nT(Tl(e)[0],void 0,void 0));if(hs(e,function(e){return hr||(hr=Gl("IteratorReturnResult",1,e))||Pt}(!1)))return oT(e,"iterationTypesOfIteratorResult",nT(void 0,Tl(e)[0],void 0));var n=py(e,vT),i=n!==ct?Co(n,"value"):void 0,a=py(e,hT),o=a!==ct?Co(a,"value"):void 0;return oT(e,"iterationTypesOfIteratorResult",i||o?nT(i,o||st,void 0):Wr)}function xT(t,r,n,i,a){var o,s,c,u,l,_,d=xu(t,n);if(d||"next"===n){var p=!d||"next"===n&&16777216&d.flags?void 0:"next"===n?ys(d):qm(ys(d),2097152);if(Eo(p))return"next"===n?Hr:Gr;var f,g,m,y,v,h=p?Su(p,0):e.emptyArray;if(0===h.length){if(i){var b="next"===n?r.mustHaveANextMethodDiagnostic:r.mustBeAMethodDiagnostic;a?(null!==(o=a.errors)&&void 0!==o||(a.errors=[]),a.errors.push(e.createDiagnosticForNode(i,b,n))):Qn(i,b,n)}return"next"===n?Wr:void 0}if((null==p?void 0:p.symbol)&&1===h.length){var x=r.getGlobalGeneratorType(!1),D=r.getGlobalIteratorType(!1),S=(null===(c=null===(s=x.symbol)||void 0===s?void 0:s.members)||void 0===c?void 0:c.get(n))===p.symbol,T=!S&&(null===(l=null===(u=D.symbol)||void 0===u?void 0:u.members)||void 0===l?void 0:l.get(n))===p.symbol;if(S||T){var C=S?x:D,E=p.mapper;return nT(_p(C.typeParameters[0],E),_p(C.typeParameters[1],E),"next"===n?_p(C.typeParameters[2],E):void 0)}}for(var k=0,N=h;k<N.length;k++){var A=N[k];"throw"!==n&&e.some(A.parameters)&&(f=e.append(f,vx(A,0))),g=e.append(g,Yu(A))}if("throw"!==n){var F=f?P_(f):Ke;if("next"===n)y=F;else if("return"===n){var P=r.resolveIterationType(F,i)||Le;m=e.append(m,P)}}var w=g?j_(g):ct,I=bT(r.resolveIterationType(w,i)||Le);return I===Wr?(i&&(a?(null!==(_=a.errors)&&void 0!==_||(a.errors=[]),a.errors.push(e.createDiagnosticForNode(i,r.mustHaveAValueDiagnostic,n))):Qn(i,r.mustHaveAValueDiagnostic,n)),v=Le,m=e.append(m,Le)):(v=I.yieldType,m=e.append(m,I.returnType)),nT(v,P_(m),y)}}function DT(e,t,r,n,i){var a=iT([xT(e,t,"next",r,n),xT(e,t,"return",r,n),xT(e,t,"throw",r,n)]);return i?a:oT(e,t.iteratorCacheKey,a)}function ST(e,t,r){if(!Eo(t)){var n=TT(t,r);return n&&n[M(e)]}}function TT(e,t){if(Eo(e))return Hr;var r=t?Xr:Yr;return sT(e,t?2:1,void 0)||function(e,t,r,n){return gT(e,t,r,n,!1)}(e,r,void 0,void 0)}function CT(t){GE(t)||function(t){var r=t;for(;r;){if(e.isFunctionLikeOrClassStaticBlockDeclaration(r))return WE(t,e.Diagnostics.Jump_target_cannot_cross_function_boundary);switch(r.kind){case 253:if(t.label&&r.label.escapedText===t.label.escapedText)return!!(248===t.kind&&!e.isIterationStatement(r.statement,!0))&&WE(t,e.Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement);break;case 252:if(249===t.kind&&!t.label)return!1;break;default:if(e.isIterationStatement(r,!1)&&!t.label)return!1}r=r.parent}t.label?WE(t,249===t.kind?e.Diagnostics.A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement:e.Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement):WE(t,249===t.kind?e.Diagnostics.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement:e.Diagnostics.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement)}(t)}function ET(e,t){var r=!!(2&t);if(!!(1&t)){var n=ST(1,e,r);return n?r?lS(oS(n)):n:je}return r?lS(e)||je:e}function kT(t,r){var n=ET(r,e.getFunctionFlags(t));return!!n&&Yx(n,16387)}function NT(t){GE(t)||e.isIdentifier(t.expression)&&!t.expression.escapedText&&function(t,r,n,i,a){var o=e.getSourceFileOfNode(t);if(!KE(o)){var s=e.getSpanOfTokenAtPosition(o,t.pos);return Pn.add(e.createFileDiagnostic(o,e.textSpanEnd(s),0,r,n,i,a)),!0}}(t,e.Diagnostics.Line_break_not_permitted_here),t.expression&&wD(t.expression)}function AT(t,r,n){var i=Nu(t);if(0!==i.length){for(var a=0,o=Wc(t);a<o.length;a++){var s=o[a];n&&4194304&s.flags||FT(t,s,H_(s,8576,!0),vs(s))}var c=r.valueDeclaration;if(c&&e.isClassLike(c))for(var u=0,l=c.members;u<l.length;u++){var _=l[u];if(!e.isStatic(_)&&!ac(_)){var d=Sa(_);FT(t,d,AD(_.name.expression),vs(d))}}if(i.length>1)for(var p=0,f=i;p<f.length;p++){PT(t,f[p])}}}function FT(t,r,n,i){var a=r.valueDeclaration,o=e.getNameOfDeclaration(a);if(!o||!e.isPrivateIdentifier(o))for(var s=Pu(t,n),c=2&e.getObjectFlags(t)?e.getDeclarationOfKind(t.symbol,261):void 0,u=a&&223===a.kind||o&&164===o.kind?a:void 0,l=Ta(r)===t.symbol?a:void 0,_=function(n){var a=n.declaration&&Ta(Sa(n.declaration))===t.symbol?n.declaration:void 0,o=l||a||(c&&!e.some(Is(t),(function(e){return!!Hc(e,r.escapedName)&&!!Fu(e,n.keyType)}))?c:void 0);if(o&&!Vp(i,n.type)){var s=Gn(o,e.Diagnostics.Property_0_of_type_1_is_not_assignable_to_2_index_type_3,no(r),ao(i),ao(n.keyType),ao(n.type));u&&o!==u&&e.addRelatedInfo(s,e.createDiagnosticForNode(u,e.Diagnostics._0_is_declared_here,no(r))),Pn.add(s)}},d=0,p=s;d<p.length;d++){_(p[d])}}function PT(t,r){for(var n=r.declaration,i=Pu(t,r.keyType),a=2&e.getObjectFlags(t)?e.getDeclarationOfKind(t.symbol,261):void 0,o=n&&Ta(Sa(n))===t.symbol?n:void 0,s=function(n){if(n===r)return"continue";var i=n.declaration&&Ta(Sa(n.declaration))===t.symbol?n.declaration:void 0,s=o||i||(a&&!e.some(Is(t),(function(e){return!!Au(e,r.keyType)&&!!Fu(e,n.keyType)}))?a:void 0);s&&!Vp(r.type,n.type)&&Qn(s,e.Diagnostics._0_index_type_1_is_not_assignable_to_2_index_type_3,ao(r.keyType),ao(r.type),ao(n.keyType),ao(n.type))},c=0,u=i;c<u.length;c++){s(u[c])}}function wT(e,t){switch(e.escapedText){case"any":case"unknown":case"never":case"number":case"bigint":case"boolean":case"string":case"symbol":case"void":case"object":Qn(e,t,e.escapedText)}}function IT(t){var r=!1;if(t)for(var n=0;n<t.length;n++){var i=t[n];ID(i),m(a(i,n))}function a(n,i){return function(){n.default?(r=!0,function(t,r,n){function i(t){if(180===t.kind){var a=Jl(t);if(262144&a.flags)for(var o=n;o<r.length;o++)a.symbol===Sa(r[o])&&Qn(t,e.Diagnostics.Type_parameter_defaults_can_only_reference_previously_declared_type_parameters)}e.forEachChild(t,i)}i(t)}(n.default,t,i)):r&&Qn(n,e.Diagnostics.Required_type_parameters_may_not_follow_optional_type_parameters);for(var a=0;a<i;a++)t[a].symbol===n.symbol&&Qn(n.name,e.Diagnostics.Duplicate_identifier_0,e.declarationNameToString(n.name))}}}function OT(t){if(!t.declarations||1!==t.declarations.length){var r=_i(t);if(!r.typeParametersChecked){r.typeParametersChecked=!0;var n=function(t){return e.filter(t.declarations,(function(e){return 260===e.kind||261===e.kind}))}(t);if(!n||n.length<=1)return;if(!MT(n,qs(t).localTypeParameters,e.getEffectiveTypeParameterDeclarations))for(var i=no(t),a=0,o=n;a<o.length;a++){Qn(o[a].name,e.Diagnostics.All_declarations_of_0_must_have_identical_type_parameters,i)}}}}function MT(t,r,n){for(var i=e.length(r),a=zu(r),o=0,s=t;o<s.length;o++){var c=n(s[o]),u=c.length;if(u<a||u>i)return!1;for(var l=0;l<u;l++){var _=c[l],d=r[l];if(_.name.escapedText!==d.symbol.escapedName)return!1;var p=e.getEffectiveConstraintOfTypeParameter(_),f=p&&ip(p),g=Yc(d);if(f&&g&&!jp(f,g))return!1;var m=_.default&&ip(_.default),y=su(d);if(m&&y&&!jp(m,y))return!1}}return!0}function LT(t){!function(t){var r=e.getSourceFileOfNode(t);(function(t){var r=!1,n=!1;if(!hE(t)&&t.heritageClauses)for(var i=0,a=t.heritageClauses;i<a.length;i++){var o=a[i];if(94===o.token){if(r)return VE(o,e.Diagnostics.extends_clause_already_seen);if(n)return VE(o,e.Diagnostics.extends_clause_must_precede_implements_clause);if(o.types.length>1)return VE(o.types[1],e.Diagnostics.Classes_can_only_extend_a_single_class);r=!0}else{if(e.Debug.assert(117===o.token),n)return VE(o,e.Diagnostics.implements_clause_already_seen);n=!0}kE(o)}})(t)||SE(t.typeParameters,r)}(t),yS(t),JS(t,t.name),IT(e.getEffectiveTypeParameterDeclarations(t)),eS(t);var r=Sa(t),n=qs(r),i=_c(n),a=ys(r);OT(r),$D(r),function(t){for(var r=new e.Map,n=new e.Map,i=new e.Map,a=0,o=t.members;a<o.length;a++){var s=o[a];if(173===s.kind)for(var c=0,u=s.parameters;c<u.length;c++){var l=u[c];e.isParameterPropertyDeclaration(l,s)&&!e.isBindingPattern(l.name)&&y(r,l.name,l.name.escapedText,3)}else{var _=e.isStatic(s),d=s.name;if(!d)continue;var p=e.isPrivateIdentifier(d),f=p&&_?16:0,g=p?i:_?n:r,m=d&&e.getPropertyNameForPropertyNameNode(d);if(m)switch(s.kind){case 174:y(g,d,m,1|f);break;case 175:y(g,d,m,2|f);break;case 169:y(g,d,m,3|f);break;case 171:y(g,d,m,8|f)}}}function y(t,r,n,i){var a=t.get(n);if(a)if((16&a)!=(16&i))Qn(r,e.Diagnostics.Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name,e.getTextOfNode(r));else{var o=!!(8&a),s=!!(8&i);o||s?o!==s&&Qn(r,e.Diagnostics.Duplicate_identifier_0,e.getTextOfNode(r)):a&i&-17?Qn(r,e.Diagnostics.Duplicate_identifier_0,e.getTextOfNode(r)):t.set(n,a|i)}else t.set(n,i)}}(t),!!(16777216&t.flags)||function(t){for(var r=0,n=t.members;r<n.length;r++){var i=n[r],a=i.name;if(e.isStatic(i)&&a){var o=e.getPropertyNameForPropertyNameNode(a);switch(o){case"name":case"length":case"caller":case"arguments":case"prototype":Qn(a,e.Diagnostics.Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1,o,yo(Sa(t)))}}}}(t);var o=e.getEffectiveBaseTypeNode(t);if(o){e.forEach(o.typeArguments,dC),V<2&&yE(o.parent,1);var s=e.getClassExtendsHeritageElement(t);s&&s!==o&&wD(s.expression);var c=Is(n);c.length&&m((function(){var r=c[0],s=Ps(n),u=_u(s);if(function(t,r){var n=Su(t,1);if(n.length){var i=n[0].declaration;if(i&&e.hasEffectiveModifier(i,8))CC(r,e.getClassLikeDeclarationOfSymbol(t.symbol))||Qn(r,e.Diagnostics.Cannot_extend_a_class_0_Class_constructor_is_marked_as_private,ia(t.symbol))}}(u,o),dC(o.expression),e.some(o.typeArguments)){e.forEach(o.typeArguments,dC);for(var l=0,_=As(u,o.typeArguments,o);l<_.length;l++){var d=_[l];if(!qD(o,d.typeParameters))break}}var p=_c(r,n.thisType);(Gp(i,p,void 0)?Gp(a,Bp(u),t.name||t,e.Diagnostics.Class_static_side_0_incorrectly_extends_base_class_static_side_1):jT(t,i,p,e.Diagnostics.Class_0_incorrectly_extends_base_class_1),8650752&s.flags)&&(Es(a)?Su(s,1).some((function(e){return 4&e.flags}))&&!e.hasSyntacticModifier(t,256)&&Qn(t.name||t,e.Diagnostics.A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_be_declared_abstract):Qn(t.name||t,e.Diagnostics.A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any));if(!(u.symbol&&32&u.symbol.flags||8650752&s.flags)){var f=Fs(u,o.typeArguments,o);e.forEach(f,(function(e){return!Hb(e.declaration)&&!jp(Yu(e),r)}))&&Qn(o.expression,e.Diagnostics.Base_constructors_must_all_have_the_same_return_type)}!function(t,r){var n,i,a,o,s=Qc(r),c=function(s){var c=JT(s);if(4194304&c.flags)return"continue";var u=Hc(t,c.escapedName);if(!u)return"continue";var l=JT(u),_=e.getDeclarationModifierFlagsFromSymbol(c);if(e.Debug.assert(!!l,"derived should point to something, even if it is the base class' declaration."),l===c){var d=e.getClassLikeDeclarationOfSymbol(t.symbol);if(256&_&&(!d||!e.hasSyntacticModifier(d,256))){for(var p=0,f=Is(t);p<f.length;p++){var g=f[p];if(g!==r){var m=Hc(g,c.escapedName),y=m&&JT(m);if(y&&y!==c)return"continue-basePropertyCheck"}}228===d.kind?Qn(d,e.Diagnostics.Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1,no(s),ao(r)):Qn(d,e.Diagnostics.Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2,ao(t),no(s),ao(r))}}else{var v=e.getDeclarationModifierFlagsFromSymbol(l);if(8&_||8&v)return"continue";var h=void 0,b=98308&c.flags,x=98308&l.flags;if(b&&x){if((6&e.getCheckFlags(c)?null===(n=c.declarations)||void 0===n?void 0:n.some((function(e){return zT(e,_)})):null===(i=c.declarations)||void 0===i?void 0:i.every((function(e){return zT(e,_)})))||262144&e.getCheckFlags(c)||l.valueDeclaration&&e.isBinaryExpression(l.valueDeclaration))return"continue";var D=4!==b&&4===x;if(D||4===b&&4!==x){var S=D?e.Diagnostics._0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property:e.Diagnostics._0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor;Qn(e.getNameOfDeclaration(l.valueDeclaration)||l.valueDeclaration,S,no(c),ao(r),ao(t))}else if(W){var T=null===(a=l.declarations)||void 0===a?void 0:a.find((function(e){return 169===e.kind&&!e.initializer}));if(T&&!(33554432&l.flags)&&!(256&_)&&!(256&v)&&!(null===(o=l.declarations)||void 0===o?void 0:o.some((function(e){return!!(16777216&e.flags)})))){var C=Pa(e.getClassLikeDeclarationOfSymbol(t.symbol)),E=T.name;if(T.exclamationToken||!C||!e.isIdentifier(E)||!G||!KT(E,t,C)){var k=e.Diagnostics.Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_add_a_declare_modifier_or_remove_the_redundant_declaration;Qn(e.getNameOfDeclaration(l.valueDeclaration)||l.valueDeclaration,k,no(c),ao(r))}}}return"continue"}if(gh(c)){if(gh(l)||4&l.flags)return"continue";e.Debug.assert(!!(98304&l.flags)),h=e.Diagnostics.Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor}else h=98304&c.flags?e.Diagnostics.Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function:e.Diagnostics.Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function;Qn(e.getNameOfDeclaration(l.valueDeclaration)||l.valueDeclaration,h,ao(r),no(c),ao(t))}};for(var u=0,l=s;u<l.length;u++)c(l[u])}(n,r)}))}!function(t,r,n,i){for(var a=e.getEffectiveBaseTypeNode(t)&&Is(r),o=(null==a?void 0:a.length)?_c(e.first(a),r.thisType):void 0,s=Ps(r),c=function(a){if(e.hasAmbientModifier(a))return"continue";e.isConstructorDeclaration(a)&&e.forEach(a.parameters,(function(c){e.isParameterPropertyDeclaration(c,a)&&RT(t,i,s,o,r,n,c,!0)})),RT(t,i,s,o,r,n,a,!1)},u=0,l=t.members;u<l.length;u++){c(l[u])}}(t,n,i,a);var u=e.getEffectiveImplementsTypeNodes(t);if(u)for(var l=0,_=u;l<_.length;l++){var d=_[l];e.isEntityNameExpression(d.expression)&&!e.isOptionalChain(d.expression)||Qn(d.expression,e.Diagnostics.A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments),HD(d),m(p(d))}function p(r){return function(){var a=mu(ip(r));if(!ko(a))if(Ms(a)){var o=a.symbol&&32&a.symbol.flags?e.Diagnostics.Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclass:e.Diagnostics.Class_0_incorrectly_implements_interface_1,s=_c(a,n.thisType);Gp(i,s,void 0)||jT(t,i,s,o)}else Qn(r,e.Diagnostics.A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_members)}}m((function(){AT(n,r),AT(a,r,!0),BD(t),function(t){if(!G||!Y||16777216&t.flags)return;for(var r=Pa(t),n=0,i=t.members;n<i.length;n++){var a=i[n];if(!(2&e.getEffectiveModifierFlags(a))&&(!e.isStatic(a)&&UT(a))){var o=a.name;if(e.isIdentifier(o)||e.isPrivateIdentifier(o)||e.isComputedPropertyName(o)){var s=ys(Sa(a));3&s.flags||_f(s)||r&&KT(o,s,r)||Qn(a.name,e.Diagnostics.Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor,e.declarationNameToString(o))}}}}(t)}))}function RT(t,r,n,i,a,o,s,c,u){void 0===u&&(u=!0);var l=s.name&&AC(s.name)||AC(s);return l?BT(t,r,n,i,a,o,e.hasOverrideModifier(s),e.hasAbstractModifier(s),e.isStatic(s),c,e.symbolName(l),u?s:void 0):0}function BT(t,r,n,i,a,o,s,c,u,l,_,d){var p=e.isInJSFile(t),f=!!(16777216&t.flags);if(i&&(s||K.noImplicitOverride)){var g=e.escapeLeadingUnderscores(_),m=u?n:i,y=xu(u?r:o,g),v=xu(m,g),h=ao(i);if(y&&!v&&s){if(d){var b=Uh(_,m);b?Qn(d,p?e.Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1:e.Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1,h,no(b)):Qn(d,p?e.Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0:e.Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0,h)}return 2}if(y&&(null==v?void 0:v.declarations)&&K.noImplicitOverride&&!f){var x=e.some(v.declarations,e.hasAbstractModifier);if(s)return 0;if(!x){if(d)Qn(d,l?p?e.Diagnostics.This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0:e.Diagnostics.This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0:p?e.Diagnostics.This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0:e.Diagnostics.This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0,h);return 1}if(c&&x)return d&&Qn(d,e.Diagnostics.This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared_in_the_base_class_0,h),1}}else if(s){if(d){var D=ao(a);Qn(d,p?e.Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_extend_another_class:e.Diagnostics.This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another_class,D)}return 2}return 0}function jT(t,r,n,i){for(var a=!1,o=function(t){if(e.isStatic(t))return"continue";var i=t.name&&AC(t.name)||AC(t);if(i){var o=xu(r,i.escapedName),s=xu(n,i.escapedName);if(o&&s){Gp(ys(o),ys(s),t.name||t,void 0,(function(){return e.chainDiagnosticMessages(void 0,e.Diagnostics.Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2,no(i),ao(r),ao(n))}))||(a=!0)}}},s=0,c=t.members;s<c.length;s++){o(c[s])}a||Gp(r,n,t.name||t,i)}function JT(t){return 1&e.getCheckFlags(t)?t.target:t}function zT(t,r){return 256&r&&(!e.isPropertyDeclaration(t)||!t.initializer)||e.isInterfaceDeclaration(t.parent)}function UT(t){return 169===t.kind&&!e.hasAbstractModifier(t)&&!t.exclamationToken&&!t.initializer}function KT(t,r,n){var i=e.isComputedPropertyName(t)?e.factory.createElementAccessExpression(e.factory.createThis(),t.expression):e.factory.createPropertyAccessExpression(e.factory.createThis(),t);return e.setParent(i.expression,i),e.setParent(i,n),i.flowNode=n.returnFlowNode,!_f(By(i,r,bg(r)))}function VT(t){hE(t)||function(t){var r=!1;if(t.heritageClauses)for(var n=0,i=t.heritageClauses;n<i.length;n++){var a=i[n];if(94!==a.token)return e.Debug.assert(117===a.token),VE(a,e.Diagnostics.Interface_declaration_cannot_have_implements_clause);if(r)return VE(a,e.Diagnostics.extends_clause_already_seen);r=!0,kE(a)}}(t),IT(t.typeParameters),m((function(){wT(t.name,e.Diagnostics.Interface_name_cannot_be_0),eS(t);var r=Sa(t);OT(r);var n=e.getDeclarationOfKind(r,261);if(t===n){var i=qs(r),a=_c(i);if(function(t,r){var n=Is(t);if(n.length<2)return!0;var i=new e.Map;e.forEach(ec(t).declaredProperties,(function(e){i.set(e.escapedName,{prop:e,containingType:t})}));for(var a=!0,o=0,s=n;o<s.length;o++)for(var c=s[o],u=0,l=Qc(_c(c,t.thisType));u<l.length;u++){var _=l[u],d=i.get(_.escapedName);if(d){if(d.containingType!==t&&0===zf(d.prop,_,Jp)){a=!1;var p=ao(d.containingType),f=ao(c),g=e.chainDiagnosticMessages(void 0,e.Diagnostics.Named_property_0_of_types_1_and_2_are_not_identical,no(_),p,f);g=e.chainDiagnosticMessages(g,e.Diagnostics.Interface_0_cannot_simultaneously_extend_types_1_and_2,ao(t),p,f),Pn.add(e.createDiagnosticForNodeFromMessageChain(r,g))}}else i.set(_.escapedName,{prop:_,containingType:c})}return a}(i,t.name)){for(var o=0,s=Is(i);o<s.length;o++){Gp(a,_c(s[o],i.thisType),t.name,e.Diagnostics.Interface_0_incorrectly_extends_interface_1)}AT(i,r)}}RD(t)})),e.forEach(e.getInterfaceBaseTypeNodes(t),(function(t){e.isEntityNameExpression(t.expression)&&!e.isOptionalChain(t.expression)||Qn(t.expression,e.Diagnostics.An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments),HD(t)})),e.forEach(t.members,dC),m((function(){BD(t),bS(t)}))}function qT(e){var t=di(e);if(!(16384&t.flags)){t.flags|=16384;for(var r=0,n=0,i=e.members;n<i.length;n++){var a=i[n],o=WT(a,r);di(a).enumMemberValue=o,r="number"==typeof o?o+1:void 0}}}function WT(t,r){if(e.isComputedNonLiteralName(t.name))Qn(t.name,e.Diagnostics.Computed_property_names_are_not_allowed_in_enums);else{var n=e.getTextOfPropertyName(t.name);e.isNumericLiteralName(n)&&!e.isInfinityOrNaNString(n)&&Qn(t.name,e.Diagnostics.An_enum_member_cannot_have_a_numeric_name)}return t.initializer?function(t){var r=Js(Sa(t.parent)),n=e.isEnumConst(t.parent),i=t.initializer,a=1!==r||js(t)?s(i):void 0;if(void 0!==a)n&&"number"==typeof a&&!isFinite(a)&&Qn(i,isNaN(a)?e.Diagnostics.const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN:e.Diagnostics.const_enum_member_initializer_was_evaluated_to_a_non_finite_value);else{if(1===r)return Qn(i,e.Diagnostics.Computed_values_are_not_permitted_in_an_enum_with_string_valued_members),0;if(n)Qn(i,e.Diagnostics.const_enum_member_initializers_can_only_contain_literal_values_and_other_computed_enum_values);else if(16777216&t.parent.flags)Qn(i,e.Diagnostics.In_ambient_enum_declarations_member_initializer_must_be_constant_expression);else{var o=wD(i);Zx(o,296)?Gp(o,qs(Sa(t.parent)),i,void 0):Qn(i,e.Diagnostics.Only_numeric_enums_can_have_computed_members_but_this_expression_has_type_0_If_you_do_not_need_exhaustiveness_checks_consider_using_an_object_literal_instead,ao(o))}}return a;function s(r){switch(r.kind){case 221:var n=s(r.operand);if("number"==typeof n)switch(r.operator){case 39:return n;case 40:return-n;case 54:return~n}break;case 223:var i=s(r.left),a=s(r.right);if("number"==typeof i&&"number"==typeof a)switch(r.operatorToken.kind){case 51:return i|a;case 50:return i&a;case 48:return i>>a;case 49:return i>>>a;case 47:return i<<a;case 52:return i^a;case 41:return i*a;case 43:return i/a;case 39:return i+a;case 40:return i-a;case 44:return i%a;case 42:return Math.pow(i,a)}else if("string"==typeof i&&"string"==typeof a&&39===r.operatorToken.kind)return i+a;break;case 10:case 14:return r.text;case 8:return QE(r),+r.text;case 214:return s(r.expression);case 79:var o=r;return e.isInfinityOrNaNString(o.escapedText)?+o.escapedText:e.nodeIsMissing(r)?0:c(r,Sa(t.parent),o.escapedText);case 209:case 208:if(HT(r)){var u=AD(r.expression);if(u.symbol&&384&u.symbol.flags){var l=void 0;return l=208===r.kind?r.name.escapedText:e.escapeLeadingUnderscores(e.cast(r.argumentExpression,e.isLiteralExpression).text),c(r,u.symbol,l)}}}}function c(r,n,i){var a=n.exports.get(i);if(a){var o=a.valueDeclaration;if(o!==t)return o&&gi(o,t)&&e.isEnumDeclaration(o.parent)?tE(o):(Qn(r,e.Diagnostics.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums),0);Qn(r,e.Diagnostics.Property_0_is_used_before_being_assigned,no(a))}}}(t):16777216&t.parent.flags&&!e.isEnumConst(t.parent)&&0===Js(Sa(t.parent))?void 0:void 0!==r?r:void Qn(t.name,e.Diagnostics.Enum_member_must_have_initializer)}function HT(t){return AD(t)!==je&&(79===t.kind||208===t.kind&&HT(t.expression)||209===t.kind&&HT(t.expression)&&e.isStringLiteralLike(t.argumentExpression))}function GT(t){m((function(){return function(t){hE(t),JS(t,t.name),eS(t),t.members.forEach(QT),qT(t);var r=Sa(t),n=e.getDeclarationOfKind(r,t.kind);if(t===n){if(r.declarations&&r.declarations.length>1){var i=e.isEnumConst(t);e.forEach(r.declarations,(function(t){e.isEnumDeclaration(t)&&e.isEnumConst(t)!==i&&Qn(e.getNameOfDeclaration(t),e.Diagnostics.Enum_declarations_must_all_be_const_or_non_const)}))}var a=!1;e.forEach(r.declarations,(function(t){if(263!==t.kind)return!1;var r=t;if(!r.members.length)return!1;var n=r.members[0];n.initializer||(a?Qn(n.name,e.Diagnostics.In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enum_element):a=!0)}))}}(t)}))}function QT(t){e.isPrivateIdentifier(t.name)&&Qn(t,e.Diagnostics.An_enum_member_cannot_be_named_with_a_private_identifier)}function XT(t){t.body&&(dC(t.body),e.isGlobalScopeAugmentation(t)||bS(t)),m((function(){var r=e.isGlobalScopeAugmentation(t),n=16777216&t.flags;r&&!n&&Qn(t.name,e.Diagnostics.Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambient_context);var i=e.isAmbientModule(t),a=i?e.Diagnostics.An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file:e.Diagnostics.A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module;if(oC(t,a))return;hE(t)||n||10!==t.name.kind||WE(t.name,e.Diagnostics.Only_ambient_modules_can_use_quoted_names);e.isIdentifier(t.name)&&JS(t,t.name);eS(t);var o=Sa(t);if(512&o.flags&&!n&&o.declarations&&o.declarations.length>1&&w(t,e.shouldPreserveConstEnums(K))){var s=function(t){var r=t.declarations;if(r)for(var n=0,i=r;n<i.length;n++){var a=i[n];if((260===a.kind||259===a.kind&&e.nodeIsPresent(a.body))&&!(16777216&a.flags))return a}}(o);s&&(e.getSourceFileOfNode(t)!==e.getSourceFileOfNode(s)?Qn(t.name,e.Diagnostics.A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged):t.pos<s.pos&&Qn(t.name,e.Diagnostics.A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged));var c=e.getDeclarationOfKind(o,260);c&&(u=t,l=c,_=e.getEnclosingBlockScopeContainer(u),d=e.getEnclosingBlockScopeContainer(l),pi(_)?pi(d):!pi(d)&&_===d)&&(di(t).flags|=32768)}var u,l,_,d;if(i){if(e.isExternalModuleAugmentation(t)){if((r||33554432&Sa(t).flags)&&t.body)for(var p=0,f=t.body.statements;p<f.length;p++){YT(f[p],r)}}else pi(t.parent)?r?Qn(t.name,e.Diagnostics.Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_declarations):e.isExternalModuleNameRelative(e.getTextOfIdentifierOrLiteral(t.name))&&Qn(t.name,e.Diagnostics.Ambient_module_declaration_cannot_specify_relative_module_name):Qn(t.name,r?e.Diagnostics.Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_declarations:e.Diagnostics.Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces)}}))}function YT(t,r){switch(t.kind){case 240:for(var n=0,i=t.declarationList.declarations;n<i.length;n++){YT(i[n],r)}break;case 274:case 275:VE(t,e.Diagnostics.Exports_and_export_assignments_are_not_permitted_in_module_augmentations);break;case 268:case 269:VE(t,e.Diagnostics.Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_module);break;case 205:case 257:var a=t.name;if(e.isBindingPattern(a)){for(var o=0,s=a.elements;o<s.length;o++){YT(s[o],r)}break}case 260:case 263:case 259:case 261:case 264:case 262:if(r)return}}function ZT(t){var r=e.getExternalModuleName(t);if(!r||e.nodeIsMissing(r))return!1;if(!e.isStringLiteral(r))return Qn(r,e.Diagnostics.String_literal_expected),!1;var n=265===t.parent.kind&&e.isAmbientModule(t.parent.parent);if(308!==t.parent.kind&&!n)return Qn(r,275===t.kind?e.Diagnostics.Export_declarations_are_not_permitted_in_a_namespace:e.Diagnostics.Import_declarations_in_a_namespace_cannot_reference_a_module),!1;if(n&&e.isExternalModuleNameRelative(r.text)&&!fo(t))return Qn(t,e.Diagnostics.Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relative_module_name),!1;if(!e.isImportEqualsDeclaration(t)&&t.assertClause){for(var i=!1,a=0,o=t.assertClause.elements;a<o.length;a++){var s=o[a];e.isStringLiteral(s.value)||(i=!0,Qn(s.value,e.Diagnostics.Import_assertion_values_must_be_string_literal_expressions))}return!i}return!0}function $T(t){var r,n,i,a,o,s=Sa(t),c=Xi(s);if(c!==we){if(s=Da(s.exportSymbol||s),e.isInJSFile(t)&&!(111551&c.flags)&&!e.isTypeOnlyImportOrExportDeclaration(t)){var u=e.isImportOrExportSpecifier(t)?t.propertyName||t.name:e.isNamedDeclaration(t)?t.name:t;if(e.Debug.assert(277!==t.kind),278===t.kind){var l=Qn(u,e.Diagnostics.Types_cannot_appear_in_export_declarations_in_JavaScript_files),_=null===(n=null===(r=e.getSourceFileOfNode(t).symbol)||void 0===r?void 0:r.exports)||void 0===n?void 0:n.get((t.propertyName||t.name).escapedText);if(_===c){var d=null===(i=_.declarations)||void 0===i?void 0:i.find(e.isJSDocNode);d&&e.addRelatedInfo(l,e.createDiagnosticForNode(d,e.Diagnostics._0_is_automatically_exported_here,e.unescapeLeadingUnderscores(_.escapedName)))}}else{e.Debug.assert(257!==t.kind);var p=e.findAncestor(t,e.or(e.isImportDeclaration,e.isImportEqualsDeclaration)),f=null!==(o=p&&(null===(a=e.tryGetModuleSpecifierFromDeclaration(p))||void 0===a?void 0:a.text))&&void 0!==o?o:"...",g=e.unescapeLeadingUnderscores(e.isIdentifier(u)?u.escapedText:s.escapedName);Qn(u,e.Diagnostics._0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation,g,'import("'.concat(f,'").').concat(g))}return}var m=Yi(c);if(m&((1160127&s.flags?111551:0)|(788968&s.flags?788968:0)|(1920&s.flags?1920:0)))Qn(t,278===t.kind?e.Diagnostics.Export_declaration_conflicts_with_exported_declaration_of_0:e.Diagnostics.Import_declaration_conflicts_with_local_declaration_of_0,no(s));if(K.isolatedModules&&!e.isTypeOnlyImportOrExportDeclaration(t)&&!(16777216&t.flags)){var y=ea(s),v=!(111551&m);if(v||y)switch(t.kind){case 270:case 273:case 268:if(K.preserveValueImports)e.Debug.assertIsDefined(t.name,"An ImportClause with a symbol should have a name"),bi(Qn(t,v?e.Diagnostics._0_is_a_type_and_must_be_imported_using_a_type_only_import_when_preserveValueImports_and_isolatedModules_are_both_enabled:e.Diagnostics._0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_preserveValueImports_and_isolatedModules_are_both_enabled,h=e.idText(273===t.kind&&t.propertyName||t.name)),v?void 0:y,h);v&&268===t.kind&&e.hasEffectiveModifier(t,1)&&Qn(t,e.Diagnostics.Cannot_use_export_import_on_a_type_or_type_only_namespace_when_the_isolatedModules_flag_is_provided);break;case 278:var h;if(e.getSourceFileOfNode(y)!==e.getSourceFileOfNode(t))return void bi(Qn(t,v?e.Diagnostics.Re_exporting_a_type_when_the_isolatedModules_flag_is_provided_requires_using_export_type:e.Diagnostics._0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_isolatedModules_is_enabled,h=e.idText(t.propertyName||t.name)),v?void 0:y,h)}}if(e.isImportSpecifier(t)){var b=tC(s,t);eC(b)&&b.declarations&&ti(t,b.declarations,b.escapedName)}}}function eC(t){return!!t.declarations&&e.every(t.declarations,(function(t){return!!(268435456&e.getCombinedNodeFlags(t))}))}function tC(t,r){if(!(2097152&t.flags))return t;var n=Xi(t);if(n===we)return n;for(;2097152&t.flags;){var i=Kv(t);if(!i)break;if(i===n)break;if(i.declarations&&e.length(i.declarations)){if(eC(i)){ti(r,i.declarations,i.escapedName);break}if(t===n)break;t=i}}return n}function rC(t){JS(t,t.name),$T(t),273===t.kind&&"default"===e.idText(t.propertyName||t.name)&&e.getESModuleInterop(K)&&q!==e.ModuleKind.System&&(q<e.ModuleKind.ES2015||e.getSourceFileOfNode(t).impliedNodeFormat===e.ModuleKind.CommonJS)&&yE(t,131072)}function nC(t){var r;if(t.assertClause){var n=e.isExclusivelyTypeOnlyImportOrExport(t),i=e.getResolutionModeOverrideForClause(t.assertClause,n?WE:void 0);if(n&&i)return e.isNightly()||WE(t.assertClause,e.Diagnostics.resolution_mode_assertions_are_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_with_npm_install_D_typescript_next),e.getEmitModuleResolutionKind(K)!==e.ModuleResolutionKind.Node16&&e.getEmitModuleResolutionKind(K)!==e.ModuleResolutionKind.NodeNext?WE(t.assertClause,e.Diagnostics.resolution_mode_assertions_are_only_supported_when_moduleResolution_is_node16_or_nodenext):void 0;if((q===e.ModuleKind.NodeNext&&t.moduleSpecifier&&Li(t.moduleSpecifier))!==e.ModuleKind.ESNext&&q!==e.ModuleKind.ESNext)return WE(t.assertClause,q===e.ModuleKind.NodeNext?e.Diagnostics.Import_assertions_are_not_allowed_on_statements_that_transpile_to_commonjs_require_calls:e.Diagnostics.Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_or_nodenext);if(e.isImportDeclaration(t)?null===(r=t.importClause)||void 0===r?void 0:r.isTypeOnly:t.isTypeOnly)return WE(t.assertClause,e.Diagnostics.Import_assertions_cannot_be_used_with_type_only_imports_or_exports);if(i)return WE(t.assertClause,e.Diagnostics.resolution_mode_can_only_be_set_for_type_only_imports)}}function iC(t){if(!oC(t,e.isInJSFile(t)?e.Diagnostics.An_import_declaration_can_only_be_used_at_the_top_level_of_a_module:e.Diagnostics.An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module)){if(!hE(t)&&e.hasEffectiveModifiers(t)&&VE(t,e.Diagnostics.An_import_declaration_cannot_have_modifiers),ZT(t)){var r=t.importClause;if(r&&!function(t){var r;if(t.isTypeOnly&&t.name&&t.namedBindings)return WE(t,e.Diagnostics.A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both);if(t.isTypeOnly&&272===(null===(r=t.namedBindings)||void 0===r?void 0:r.kind))return XE(t.namedBindings);return!1}(r))if(r.name&&rC(r),r.namedBindings)if(271===r.namedBindings.kind)rC(r.namedBindings),q!==e.ModuleKind.System&&(q<e.ModuleKind.ES2015||e.getSourceFileOfNode(t).impliedNodeFormat===e.ModuleKind.CommonJS)&&e.getESModuleInterop(K)&&yE(t,65536);else sa(t,t.moduleSpecifier)&&e.forEach(r.namedBindings.elements,rC)}nC(t)}}function aC(t){if(!oC(t,e.isInJSFile(t)?e.Diagnostics.An_export_declaration_can_only_be_used_at_the_top_level_of_a_module:e.Diagnostics.An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module)){if(!hE(t)&&e.hasSyntacticModifiers(t)&&VE(t,e.Diagnostics.An_export_declaration_cannot_have_modifiers),t.moduleSpecifier&&t.exportClause&&e.isNamedExports(t.exportClause)&&e.length(t.exportClause.elements)&&0===V&&yE(t,4194304),function(t){var r;if(t.isTypeOnly)return 276===(null===(r=t.exportClause)||void 0===r?void 0:r.kind)?XE(t.exportClause):WE(t,e.Diagnostics.Only_named_exports_may_use_export_type)}(t),!t.moduleSpecifier||ZT(t))if(t.exportClause&&!e.isNamespaceExport(t.exportClause)){e.forEach(t.exportClause.elements,uC);var r=265===t.parent.kind&&e.isAmbientModule(t.parent.parent),n=!r&&265===t.parent.kind&&!t.moduleSpecifier&&16777216&t.flags;308===t.parent.kind||r||n||Qn(t,e.Diagnostics.Export_declarations_are_not_permitted_in_a_namespace)}else{var i=sa(t,t.moduleSpecifier);i&&fa(i)?Qn(t.moduleSpecifier,e.Diagnostics.Module_0_uses_export_and_cannot_be_used_with_export_Asterisk,no(i)):t.exportClause&&$T(t.exportClause),q!==e.ModuleKind.System&&(q<e.ModuleKind.ES2015||e.getSourceFileOfNode(t).impliedNodeFormat===e.ModuleKind.CommonJS)&&(t.exportClause?e.getESModuleInterop(K)&&yE(t,65536):yE(t,32768))}nC(t)}}function oC(e,t){var r=308===e.parent.kind||265===e.parent.kind||264===e.parent.kind;return r||VE(e,t),!r}function sC(t){return e.isImportDeclaration(t)&&t.importClause&&!t.importClause.isTypeOnly&&(r=t.importClause,e.forEachImportClauseDeclaration(r,(function(e){return!!Sa(e).isReferenced})))&&!GC(t.importClause,!0)&&!function(t){return e.forEachImportClauseDeclaration(t,(function(e){return!!_i(Sa(e)).constEnumReferenced}))}(t.importClause);var r}function cC(t){return e.isImportEqualsDeclaration(t)&&e.isExternalModuleReference(t.moduleReference)&&!t.isTypeOnly&&Sa(t).isReferenced&&!GC(t,!1)&&!_i(Sa(t)).constEnumReferenced}function uC(t){if($T(t),e.getEmitDeclarations(K)&&ho(t.propertyName||t.name,!0),t.parent.parent.moduleSpecifier)e.getESModuleInterop(K)&&q!==e.ModuleKind.System&&(q<e.ModuleKind.ES2015||e.getSourceFileOfNode(t).impliedNodeFormat===e.ModuleKind.CommonJS)&&"default"===e.idText(t.propertyName||t.name)&&yE(t,131072);else{var r=t.propertyName||t.name,n=vi(r,r.escapedText,2998271,void 0,void 0,!0);if(n&&(n===ce||n===ue||n.declarations&&pi(To(n.declarations[0]))))Qn(r,e.Diagnostics.Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module,e.idText(r));else{t.isTypeOnly||t.parent.parent.isTypeOnly||ta(t);var i=n&&(2097152&n.flags?Xi(n):n);(!i||111551&Yi(i))&&pD(t.propertyName||t.name)}}}function lC(t){var r=Sa(t),n=_i(r);if(!n.exportsChecked){var i=r.exports.get("export=");if(i&&function(t){return e.forEachEntry(t.exports,(function(e,t){return"export="!==t}))}(r)){var a=Fi(i)||i.valueDeclaration;!a||fo(a)||e.isInJSFile(a)||Qn(a,e.Diagnostics.An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements)}var o=ha(r);o&&o.forEach((function(t,r){var n=t.declarations,i=t.flags;if("__export"!==r&&!(1920&i)){var a=e.countWhere(n,e.and(C,e.not(e.isInterfaceDeclaration)));if(!(524288&i&&a<=2)&&a>1&&!_C(n))for(var o=0,s=n;o<s.length;o++){var c=s[o];I(c)&&Pn.add(e.createDiagnosticForNode(c,e.Diagnostics.Cannot_redeclare_exported_variable_0,e.unescapeLeadingUnderscores(r)))}}})),n.exportsChecked=!0}}function _C(t){return t&&t.length>1&&t.every((function(t){return e.isInJSFile(t)&&e.isAccessExpression(t)&&(e.isExportsIdentifier(t.expression)||e.isModuleExportsAccessExpression(t.expression))}))}function dC(t){if(t){var n=l;l=t,B=0,function(t){e.forEach(t.jsDoc,(function(r){var n=r.comment,i=r.tags;pC(n),e.forEach(i,(function(r){pC(r.comment),e.isInJSFile(t)&&dC(r)}))}));var n=t.kind;if(r)switch(n){case 264:case 260:case 261:case 259:r.throwIfCancellationRequested()}n>=240&&n<=256&&t.flowNode&&!Iy(t.flowNode)&&Yn(!1===K.allowUnreachableCode,t,e.Diagnostics.Unreachable_code_detected);switch(n){case 165:return ID(t);case 166:return OD(t);case 169:return jD(t);case 168:return function(t){return e.isPrivateIdentifier(t.name)&&Qn(t,e.Diagnostics.Private_identifiers_are_not_allowed_outside_class_bodies),jD(t)}(t);case 182:case 181:case 176:case 177:case 178:return LD(t);case 171:case 170:return function(t){LE(t)||AE(t.name),e.isMethodDeclaration(t)&&t.asteriskToken&&e.isIdentifier(t.name)&&"constructor"===e.idText(t.name)&&Qn(t.name,e.Diagnostics.Class_constructor_may_not_be_a_generator),hS(t),e.hasSyntacticModifier(t,256)&&171===t.kind&&t.body&&Qn(t,e.Diagnostics.Method_0_cannot_have_an_implementation_because_it_is_marked_abstract,e.declarationNameToString(t.name)),e.isPrivateIdentifier(t.name)&&!e.getContainingClass(t)&&Qn(t,e.Diagnostics.Private_identifiers_are_not_allowed_outside_class_bodies),JD(t)}(t);case 172:return function(t){hE(t),e.forEachChild(t,dC)}(t);case 173:return zD(t);case 174:case 175:return KD(t);case 180:return HD(t);case 179:return function(t){var r=function(e){switch(e.parent.kind){case 216:case 176:case 259:case 215:case 181:case 171:case 170:var t=e.parent;if(e===t.type)return t}}(t);if(r){var n=Ku(r),i=Qu(n);if(i){dC(t.type);var a=t.parameterName;if(0===i.kind||2===i.kind)tp(a);else if(i.parameterIndex>=0)L(n)&&i.parameterIndex===n.parameters.length-1?Qn(a,e.Diagnostics.A_type_predicate_cannot_reference_a_rest_parameter):i.type&&Gp(i.type,ys(n.parameters[i.parameterIndex]),t.type,void 0,(function(){return e.chainDiagnosticMessages(void 0,e.Diagnostics.A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type)}));else if(a){for(var o=!1,s=0,c=r.parameters;s<c.length;s++){var u=c[s].name;if(e.isBindingPattern(u)&&MD(u,a,i.parameterName)){o=!0;break}}o||Qn(t.parameterName,e.Diagnostics.Cannot_find_parameter_0,i.parameterName)}}}else Qn(t,e.Diagnostics.A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods)}(t);case 183:return function(e){Ul(e)}(t);case 184:return function(t){e.forEach(t.members,dC),m((function(){var e=Rd(t);AT(e,e.symbol),BD(t),RD(t)}))}(t);case 185:return function(e){dC(e.elementType)}(t);case 186:return function(t){for(var r=t.elements,n=!1,i=!1,a=e.some(r,e.isNamedTupleMember),o=0,s=r;o<s.length;o++){var c=s[o];if(199!==c.kind&&a){WE(c,e.Diagnostics.Tuple_members_must_all_have_names_or_all_not_have_names);break}var u=l_(c);if(8&u){var l=ip(c.type);if(!Xf(l)){Qn(c,e.Diagnostics.A_rest_element_type_must_be_an_array_type);break}(qf(l)||_g(l)&&4&l.target.combinedFlags)&&(i=!0)}else if(4&u){if(i){WE(c,e.Diagnostics.A_rest_element_cannot_follow_another_rest_element);break}i=!0}else if(2&u){if(i){WE(c,e.Diagnostics.An_optional_element_cannot_follow_a_rest_element);break}n=!0}else if(n){WE(c,e.Diagnostics.A_required_element_cannot_follow_an_optional_element);break}}e.forEach(t.elements,dC),ip(t)}(t);case 189:case 190:return function(t){e.forEach(t.types,dC),ip(t)}(t);case 193:case 187:case 188:return dC(t.type);case 194:return function(e){tp(e)}(t);case 195:return XD(t);case 191:return function(t){e.forEachChild(t,dC)}(t);case 192:return function(t){e.findAncestor(t,(function(e){return e.parent&&191===e.parent.kind&&e.parent.extendsType===e}))||WE(t,e.Diagnostics.infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type),dC(t.typeParameter);var r=Sa(t.typeParameter);if(r.declarations&&r.declarations.length>1){var n=_i(r);if(!n.typeParametersChecked){n.typeParametersChecked=!0;var i=Vs(r),a=e.getDeclarationsOfKind(r,165);if(!MT(a,[i],(function(e){return[e]})))for(var o=no(r),s=0,c=a;s<c.length;s++)Qn(c[s].name,e.Diagnostics.All_declarations_of_0_must_have_identical_constraints,o)}}bS(t)}(t);case 200:return function(e){for(var t=0,r=e.templateSpans;t<r.length;t++){var n=r[t];dC(n.type),Gp(ip(n.type),yt,n.type)}ip(e)}(t);case 202:return function(t){dC(t.argument),t.assertions&&e.getResolutionModeOverrideForClause(t.assertions.assertClause,WE)&&(e.isNightly()||WE(t.assertions.assertClause,e.Diagnostics.resolution_mode_assertions_are_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_with_npm_install_D_typescript_next),e.getEmitModuleResolutionKind(K)!==e.ModuleResolutionKind.Node16&&e.getEmitModuleResolutionKind(K)!==e.ModuleResolutionKind.NodeNext&&WE(t.assertions.assertClause,e.Diagnostics.resolution_mode_assertions_are_only_supported_when_moduleResolution_is_node16_or_nodenext)),ip(t)}(t);case 199:return function(t){t.dotDotDotToken&&t.questionToken&&WE(t,e.Diagnostics.A_tuple_member_cannot_be_both_optional_and_rest),187===t.type.kind&&WE(t.type,e.Diagnostics.A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_colon_rather_than_after_the_type),188===t.type.kind&&WE(t.type,e.Diagnostics.A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type),dC(t.type),ip(t)}(t);case 331:return function(t){var r=e.getEffectiveJSDocHost(t);if(r&&(e.isClassDeclaration(r)||e.isClassExpression(r))){var n=e.getJSDocTags(r).filter(e.isJSDocAugmentsTag);e.Debug.assert(n.length>0),n.length>1&&Qn(n[1],e.Diagnostics.Class_declarations_cannot_have_more_than_one_augments_or_extends_tag);var i=vS(t.class.expression),a=e.getClassExtendsHeritageElement(r);if(a){var o=vS(a.expression);o&&i.escapedText!==o.escapedText&&Qn(i,e.Diagnostics.JSDoc_0_1_does_not_match_the_extends_2_clause,e.idText(t.tagName),e.idText(i),e.idText(o))}}else Qn(r,e.Diagnostics.JSDoc_0_is_not_attached_to_a_class,e.idText(t.tagName))}(t);case 332:return function(t){var r=e.getEffectiveJSDocHost(t);r&&(e.isClassDeclaration(r)||e.isClassExpression(r))||Qn(r,e.Diagnostics.JSDoc_0_is_not_attached_to_a_class,e.idText(t.tagName))}(t);case 348:case 341:case 342:return function(t){t.typeExpression||Qn(t.name,e.Diagnostics.JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags),t.name&&wT(t.name,e.Diagnostics.Type_alias_name_cannot_be_0),dC(t.typeExpression),IT(e.getEffectiveTypeParameterDeclarations(t))}(t);case 347:return function(e){dC(e.constraint);for(var t=0,r=e.typeParameters;t<r.length;t++)dC(r[t])}(t);case 346:return function(e){dC(e.typeExpression)}(t);case 327:case 328:case 329:return function(e){e.name&&NC(e.name,!0)}(t);case 343:case 350:return function(e){dC(e.typeExpression)}(t);case 320:!function(t){m((function(){t.type||e.isJSDocConstructSignature(t)||Jg(t,Le)})),LD(t)}(t);case 318:case 317:case 315:case 316:case 325:return fC(t),void e.forEachChild(t,dC);case 321:return void function(t){fC(t),dC(t.type);var r=t.parent;if(e.isParameter(r)&&e.isJSDocFunctionType(r.parent))return void(e.last(r.parent.parameters)!==r&&Qn(t,e.Diagnostics.A_rest_parameter_must_be_last_in_a_parameter_list));e.isJSDocTypeExpression(r)||Qn(t,e.Diagnostics.JSDoc_may_only_appear_in_the_last_parameter_of_a_signature);var n=t.parent.parent;if(!e.isJSDocParameterTag(n))return void Qn(t,e.Diagnostics.JSDoc_may_only_appear_in_the_last_parameter_of_a_signature);var i=e.getParameterSymbolFromJSDoc(n);if(!i)return;var a=e.getHostSignatureFromJSDoc(n);a&&e.last(a.parameters).symbol===i||Qn(t,e.Diagnostics.A_rest_parameter_must_be_last_in_a_parameter_list)}(t);case 312:return dC(t.type);case 336:case 338:case 337:return function(t){var r=e.getJSDocHost(t);r&&e.isPrivateIdentifierClassElementDeclaration(r)&&Qn(t,e.Diagnostics.An_accessibility_modifier_cannot_be_used_with_a_private_identifier)}(t);case 196:return function(e){dC(e.objectType),dC(e.indexType),GD(Sd(e),e)}(t);case 197:return QD(t);case 259:return function(e){m((function(){hS(e),FE(e),JS(e,e.name)}))}(t);case 238:case 265:return OS(t);case 240:return HS(t);case 241:return function(e){GE(e),wD(e.expression)}(t);case 242:return function(t){GE(t);var r=XS(t.expression);GS(t.expression,r,t.thenStatement),dC(t.thenStatement),239===t.thenStatement.kind&&Qn(t.thenStatement,e.Diagnostics.The_body_of_an_if_statement_cannot_be_the_empty_statement),dC(t.elseStatement)}(t);case 243:return function(e){GE(e),dC(e.statement),XS(e.expression)}(t);case 244:return function(e){GE(e),XS(e.expression),dC(e.statement)}(t);case 245:return function(t){GE(t)||t.initializer&&258===t.initializer.kind&&zE(t.initializer),t.initializer&&(258===t.initializer.kind?e.forEach(t.initializer.declarations,qS):wD(t.initializer)),t.condition&&XS(t.condition),t.incrementor&&wD(t.incrementor),dC(t.statement),t.locals&&bS(t)}(t);case 246:return YS(t);case 247:return function(t){IE(t);var r=e.getContainingFunctionOrClassStaticBlock(t);if(t.awaitModifier?r&&e.isClassStaticBlockDeclaration(r)?WE(t.awaitModifier,e.Diagnostics.For_await_loops_cannot_be_used_inside_a_class_static_block):2==(6&e.getFunctionFlags(r))&&V<99&&yE(t,16384):K.downlevelIteration&&V<2&&yE(t,256),258===t.initializer.kind)ZS(t);else{var n=t.initializer,i=$S(t);if(206===n.kind||207===n.kind)aD(n,i||je);else{var a=wD(n);Wx(n,e.Diagnostics.The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access,e.Diagnostics.The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access),i&&Qp(i,a,n,t.expression)}}dC(t.statement),t.locals&&bS(t)}(t);case 248:case 249:return CT(t);case 250:return function(t){var r;if(!GE(t)){var n=e.getContainingFunctionOrClassStaticBlock(t);if(n&&e.isClassStaticBlockDeclaration(n))VE(t,e.Diagnostics.A_return_statement_cannot_be_used_inside_a_class_static_block);else if(n){var i=Yu(Ku(n)),a=e.getFunctionFlags(n);if(G||t.expression||131072&i.flags){var o=t.expression?pD(t.expression):qe;if(175===n.kind)t.expression&&Qn(t,e.Diagnostics.Setters_cannot_return_a_value);else if(173===n.kind)t.expression&&!Qp(o,i,t,t.expression)&&Qn(t,e.Diagnostics.Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class);else if(Zu(n)){var s=null!==(r=ET(i,a))&&void 0!==r?r:i,c=2&a?nS(o,!1,t,e.Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member):o;s&&Qp(c,s,t,t.expression)}}else 173!==n.kind&&K.noImplicitReturns&&!kT(n,i)&&Qn(t,e.Diagnostics.Not_all_code_paths_return_a_value)}else VE(t,e.Diagnostics.A_return_statement_can_only_be_used_within_a_function_body)}}(t);case 251:return function(t){GE(t)||32768&t.flags&&VE(t,e.Diagnostics.with_statements_are_not_allowed_in_an_async_function_block),wD(t.expression);var r=e.getSourceFileOfNode(t);if(!KE(r)){var n=e.getSpanOfTokenAtPosition(r,t.pos).start;qE(r,n,t.statement.pos-n,e.Diagnostics.The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any)}}(t);case 252:return function(t){var r;GE(t);var n=!1,i=wD(t.expression),a=ag(i);e.forEach(t.caseBlock.clauses,(function(t){293!==t.kind||n||(void 0===r?r=t:(WE(t,e.Diagnostics.A_default_clause_cannot_appear_more_than_once_in_a_switch_statement),n=!0)),292===t.kind&&m(function(e){return function(){var t=wD(e.expression),r=ag(t),n=i;r&&a||(t=r?og(t):t,n=og(i)),sD(n,t)||af(t,n,e.expression,void 0)}}(t)),e.forEach(t.statements,dC),K.noFallthroughCasesInSwitch&&t.fallthroughFlowNode&&Iy(t.fallthroughFlowNode)&&Qn(t,e.Diagnostics.Fallthrough_case_in_switch)})),t.caseBlock.locals&&bS(t.caseBlock)}(t);case 253:return function(t){GE(t)||e.findAncestor(t.parent,(function(r){return e.isFunctionLike(r)?"quit":253===r.kind&&r.label.escapedText===t.label.escapedText&&(WE(t.label,e.Diagnostics.Duplicate_label_0,e.getTextOfNode(t.label)),!0)})),dC(t.statement)}(t);case 254:return NT(t);case 255:return function(t){GE(t),OS(t.tryBlock);var r=t.catchClause;if(r){if(r.variableDeclaration){var n=r.variableDeclaration,i=e.getEffectiveTypeAnnotationNode(e.getRootDeclaration(n));if(i){var a=Jo(n,!1,0);!a||3&a.flags||VE(i,e.Diagnostics.Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified)}else if(n.initializer)VE(n.initializer,e.Diagnostics.Catch_clause_variable_cannot_have_an_initializer);else{var o=r.block.locals;o&&e.forEachKey(r.locals,(function(t){var r=o.get(t);(null==r?void 0:r.valueDeclaration)&&0!=(2&r.flags)&&WE(r.valueDeclaration,e.Diagnostics.Cannot_redeclare_identifier_0_in_catch_clause,t)}))}}OS(r.block)}t.finallyBlock&&OS(t.finallyBlock)}(t);case 257:return qS(t);case 205:return WS(t);case 260:return function(t){var r=e.find(t.modifiers,e.isDecorator);r&&e.some(t.members,(function(t){return e.hasStaticModifier(t)&&e.isPrivateIdentifierClassElementDeclaration(t)}))&&WE(r,e.Diagnostics.Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_decorator),t.name||e.hasSyntacticModifier(t,1024)||VE(t,e.Diagnostics.A_class_declaration_without_the_default_modifier_must_have_a_name),LT(t),e.forEach(t.members,dC),bS(t)}(t);case 261:return VT(t);case 262:return function(t){hE(t),wT(t.name,e.Diagnostics.Type_alias_name_cannot_be_0),eS(t),IT(t.typeParameters),139===t.type.kind?k.has(t.name.escapedText)&&1===e.length(t.typeParameters)||Qn(t.type,e.Diagnostics.The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types):(dC(t.type),bS(t))}(t);case 263:return GT(t);case 264:return XT(t);case 269:return iC(t);case 268:return function(t){if(!oC(t,e.isInJSFile(t)?e.Diagnostics.An_import_declaration_can_only_be_used_at_the_top_level_of_a_module:e.Diagnostics.An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module)&&(hE(t),e.isInternalModuleImportEqualsDeclaration(t)||ZT(t)))if(rC(t),e.hasSyntacticModifier(t,1)&&ta(t),280!==t.moduleReference.kind){var r=Xi(Sa(t));if(r!==we){var n=Yi(r);if(111551&n){var i=e.getFirstIdentifier(t.moduleReference);1920&aa(i,112575).flags||Qn(i,e.Diagnostics.Module_0_is_hidden_by_a_local_declaration_with_the_same_name,e.declarationNameToString(i))}788968&n&&wT(t.name,e.Diagnostics.Import_name_cannot_be_0)}t.isTypeOnly&&WE(t,e.Diagnostics.An_import_alias_cannot_use_import_type)}else!(q>=e.ModuleKind.ES2015&&void 0===e.getSourceFileOfNode(t).impliedNodeFormat)||t.isTypeOnly||16777216&t.flags||WE(t,e.Diagnostics.Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_ns_from_mod_import_a_from_mod_import_d_from_mod_or_another_module_format_instead)}(t);case 275:return aC(t);case 274:return function(t){if(!oC(t,t.isExportEquals?e.Diagnostics.An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration:e.Diagnostics.A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration)){var r=308===t.parent.kind?t.parent:t.parent.parent;if(264!==r.kind||e.isAmbientModule(r)){!hE(t)&&e.hasEffectiveModifiers(t)&&VE(t,e.Diagnostics.An_export_assignment_cannot_have_modifiers);var n=e.getEffectiveTypeAnnotationNode(t);if(n&&Gp(pD(t.expression),ip(n),t.expression),79===t.expression.kind){var i=t.expression,a=aa(i,67108863,!0,!0,t);a?(Hy(a,i),111551&Yi(2097152&a.flags?Xi(a):a)&&pD(t.expression)):pD(t.expression),e.getEmitDeclarations(K)&&ho(t.expression,!0)}else pD(t.expression);lC(r),16777216&t.flags&&!e.isEntityNameExpression(t.expression)&&WE(t.expression,e.Diagnostics.The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context),!t.isExportEquals||16777216&t.flags||(q>=e.ModuleKind.ES2015&&e.getSourceFileOfNode(t).impliedNodeFormat!==e.ModuleKind.CommonJS?WE(t,e.Diagnostics.Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or_another_module_format_instead):q===e.ModuleKind.System&&WE(t,e.Diagnostics.Export_assignment_is_not_supported_when_module_flag_is_system))}else t.isExportEquals?Qn(t,e.Diagnostics.An_export_assignment_cannot_be_used_in_a_namespace):Qn(t,e.Diagnostics.A_default_export_can_only_be_used_in_an_ECMAScript_style_module)}}(t);case 239:case 256:return void GE(t);case 279:(function(e){yS(e)})(t)}}(t),l=n}}function pC(t){e.isArray(t)&&e.forEach(t,(function(t){e.isJSDocLinkLike(t)&&dC(t)}))}function fC(t){e.isInJSFile(t)||WE(t,e.Diagnostics.JSDoc_types_can_only_be_used_inside_documentation_comments)}function gC(t){var r=di(e.getSourceFileOfNode(t));1&r.flags||(r.deferredNodes||(r.deferredNodes=new e.Set),r.deferredNodes.add(t))}function mC(t){null===e.tracing||void 0===e.tracing||e.tracing.push("check","checkDeferredNode",{kind:t.kind,pos:t.pos,end:t.end,path:t.tracingPath});var r=l;switch(l=t,B=0,t.kind){case 210:case 211:case 212:case 167:case 283:ib(t);break;case 215:case 216:case 171:case 170:!function(t){e.Debug.assert(171!==t.kind||e.isObjectLiteralMethod(t));var r=e.getFunctionFlags(t),n=Zu(t);if(Jx(t,n),t.body)if(e.getEffectiveReturnTypeNode(t)||Yu(Ku(t)),238===t.body.kind)dC(t.body);else{var i=wD(t.body),a=n&&ET(n,r);a&&Qp(2==(3&r)?nS(i,!1,t.body,e.Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member):i,a,t.body,t.body)}}(t);break;case 174:case 175:KD(t);break;case 228:!function(t){e.forEach(t.members,dC),bS(t)}(t);break;case 165:!function(t){if(e.isInterfaceDeclaration(t.parent)||e.isClassLike(t.parent)||e.isTypeAliasDeclaration(t.parent)){var r=Vs(Sa(t)),n=Pf(r);if(n){var i=Sa(t.parent);if(!e.isTypeAliasDeclaration(t.parent)||48&e.getObjectFlags(qs(i))){if(32768===n||65536===n){null===e.tracing||void 0===e.tracing||e.tracing.push("checkTypes","checkTypeParameterDeferred",{parent:T_(qs(i)),id:T_(r)});var a=Af(i,r,65536===n?Jt:jt),o=Af(i,r,65536===n?jt:Jt),s=r;p=r,Gp(a,o,t,e.Diagnostics.Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation),p=s,null===e.tracing||void 0===e.tracing||e.tracing.pop()}}else Qn(t,e.Diagnostics.Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_types)}}}(t);break;case 282:!function(e){lh(e)}(t);break;case 281:!function(e){lh(e.openingElement),Hv(e.closingElement.tagName)?$v(e.closingElement):wD(e.closingElement.tagName),Qv(e)}(t)}l=r,null===e.tracing||void 0===e.tracing||e.tracing.pop()}function yC(r){null===e.tracing||void 0===e.tracing||e.tracing.push("check","checkSourceFile",{path:r.path},!0),e.performance.mark("beforeCheck"),function(r){var n=di(r);if(!(1&n.flags)){if(e.skipTypeChecking(r,K,t))return;!function(t){!!(16777216&t.flags)&&function(t){for(var r=0,n=t.statements;r<n.length;r++){var i=n[r];if((e.isDeclaration(i)||240===i.kind)&&HE(i))return!0}}(t)}(r),e.clear(Cn),e.clear(En),e.clear(kn),e.clear(Nn),e.clear(An),e.forEach(r.statements,dC),dC(r.endOfFileToken),function(e){var t=di(e);t.deferredNodes&&t.deferredNodes.forEach(mC)}(r),e.isExternalOrCommonJsModule(r)&&bS(r),m((function(){r.isDeclarationFile||!K.noUnusedLocals&&!K.noUnusedParameters||xS(hC(r),(function(t,r,n){!e.containsParseError(t)&&vC(r,!!(16777216&t.flags))&&Pn.add(n)})),r.isDeclarationFile||function(){for(var t,r=0,n=An;r<n.length;r++){var i=n[r];if(!(null===(t=Sa(i))||void 0===t?void 0:t.isReferenced)){var a=e.walkUpBindingElementsAndPatterns(i);e.Debug.assert(e.isParameterDeclaration(a),"Only parameter declaration should be checked here");var o=e.createDiagnosticForNode(i.name,e.Diagnostics._0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation,e.declarationNameToString(i.name),e.declarationNameToString(i.propertyName));a.type||e.addRelatedInfo(o,e.createFileDiagnostic(e.getSourceFileOfNode(a),a.end,1,e.Diagnostics.We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here,e.declarationNameToString(i.propertyName))),Pn.add(o)}}}()})),2===K.importsNotUsedAsValues&&!r.isDeclarationFile&&e.isExternalModule(r)&&function(t){for(var r=0,n=t.statements;r<n.length;r++){var i=n[r];(sC(i)||cC(i))&&Qn(i,e.Diagnostics.This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set_to_error)}}(r),e.isExternalOrCommonJsModule(r)&&lC(r),Cn.length&&(e.forEach(Cn,LS),e.clear(Cn)),En.length&&(e.forEach(En,RS),e.clear(En)),kn.length&&(e.forEach(kn,BS),e.clear(kn)),Nn.length&&(e.forEach(Nn,jS),e.clear(Nn)),n.flags|=1}}(r),e.performance.mark("afterCheck"),e.performance.measure("Check","beforeCheck","afterCheck"),null===e.tracing||void 0===e.tracing||e.tracing.pop()}function vC(t,r){if(r)return!1;switch(t){case 0:return!!K.noUnusedLocals;case 1:return!!K.noUnusedParameters;default:return e.Debug.assertNever(t)}}function hC(t){return en.get(t.path)||e.emptyArray}function bC(n,i){try{return r=i,function(r){if(r){xC();var n=Pn.getGlobalDiagnostics(),i=n.length;DC(r);var a=Pn.getDiagnostics(r.fileName),o=Pn.getGlobalDiagnostics();if(o!==n){var s=e.relativeComplement(n,o,e.compareDiagnostics);return e.concatenate(s,a)}return 0===i&&o.length>0?e.concatenate(o,a):a}return e.forEach(t.getSourceFiles(),DC),Pn.getDiagnostics()}(n)}finally{r=void 0}}function xC(){for(var e=0,t=g;e<t.length;e++){(0,t[e])()}g=[]}function DC(e){xC();var t=m;m=function(e){return e()},yC(e),m=t}function SC(e){for(;163===e.parent.kind;)e=e.parent;return 180===e.parent.kind}function TC(t,r){for(var n;(t=e.getContainingClass(t))&&!(n=r(t)););return n}function CC(e,t){return!!TC(e,(function(e){return e===t}))}function EC(e){return void 0!==function(e){for(;163===e.parent.kind;)e=e.parent;return 268===e.parent.kind?e.parent.moduleReference===e?e.parent:void 0:274===e.parent.kind&&e.parent.expression===e?e.parent:void 0}(e)}function kC(t){if(e.isDeclarationName(t))return Sa(t.parent);if(e.isInJSFile(t)&&208===t.parent.kind&&t.parent===t.parent.parent.left&&!e.isPrivateIdentifier(t)&&!e.isJSDocMemberName(t)){var r=function(t){switch(e.getAssignmentDeclarationKind(t.parent.parent)){case 1:case 3:return Sa(t.parent);case 4:case 2:case 5:return Sa(t.parent.parent)}}(t);if(r)return r}if(274===t.parent.kind&&e.isEntityNameExpression(t)){var n=aa(t,2998271,!0);if(n&&n!==we)return n}else if(e.isEntityName(t)&&EC(t)){var i=e.getAncestor(t,268);return e.Debug.assert(void 0!==i),na(t,!0)}if(e.isEntityName(t)){var a=function(t){for(var r=t.parent;e.isQualifiedName(r);)t=r,r=r.parent;if(r&&202===r.kind&&r.qualifier===t)return r}(t);if(a){ip(a);var o=di(t).resolvedSymbol;return o===we?void 0:o}}for(;e.isRightSideOfQualifiedNameOrPropertyAccessOrJSDocMemberName(t);)t=t.parent;if(function(e){for(;208===e.parent.kind;)e=e.parent;return 230===e.parent.kind}(t)){var s=0;230===t.parent.kind?(s=788968,e.isExpressionWithTypeArgumentsInClassExtendsClause(t.parent)&&(s|=111551)):s=1920,s|=2097152;var c=e.isEntityNameExpression(t)?aa(t,s):void 0;if(c)return c}if(343===t.parent.kind)return e.getParameterSymbolFromJSDoc(t.parent);if(165===t.parent.kind&&347===t.parent.parent.kind){e.Debug.assert(!e.isInJSFile(t));var u=e.getTypeParameterFromJsDoc(t.parent);return u&&u.symbol}if(e.isExpressionNode(t)){if(e.nodeIsMissing(t))return;var l=e.findAncestor(t,e.or(e.isJSDocLinkLike,e.isJSDocNameReference,e.isJSDocMemberName));s=l?901119:111551;if(79===t.kind){if(e.isJSXTagName(t)&&Hv(t))return(m=$v(t.parent))===we?void 0:m;var _,d=aa(t,s,!1,!0,e.getHostSignatureFromJSDoc(t));if(!d&&l)if(_=e.findAncestor(t,e.or(e.isClassLike,e.isInterfaceDeclaration)))return NC(t,!1,Sa(_));if(d&&l)if((_=e.getJSDocHost(t))&&e.isEnumMember(_)&&_===d.valueDeclaration)return aa(t,s,!0,!0,e.getSourceFileOfNode(_))||d;return d}if(e.isPrivateIdentifier(t))return wh(t);if(208===t.kind||163===t.kind){var p=di(t);if(p.resolvedSymbol)return p.resolvedSymbol;if(208===t.kind){if(kh(t,0),!p.resolvedSymbol){var f=pD(t.expression),g=Pu(f,W_(t.name));if(g.length&&f.members){var m=qc(f).members.get("__index");if(g===Nu(f))p.resolvedSymbol=m;else if(m){var y=_i(m),v=e.mapDefined(g,(function(e){return e.declaration})),h=e.map(v,F).join(",");if(y.filteredIndexSymbolCache||(y.filteredIndexSymbolCache=new e.Map),y.filteredIndexSymbolCache.has(h))p.resolvedSymbol=y.filteredIndexSymbolCache.get(h);else{var b=ri(131072,"__index");b.declarations=e.mapDefined(g,(function(e){return e.declaration})),b.parent=f.aliasSymbol?f.aliasSymbol:f.symbol?f.symbol:AC(b.declarations[0].parent),y.filteredIndexSymbolCache.set(h,b),p.resolvedSymbol=y.filteredIndexSymbolCache.get(h)}}}}}else Nh(t,0);return!p.resolvedSymbol&&l&&e.isQualifiedName(t)?NC(t):p.resolvedSymbol}if(e.isJSDocMemberName(t))return NC(t)}else if(SC(t)){return(m=aa(t,s=180===t.parent.kind?788968:1920,!1,!0))&&m!==we?m:Fl(t)}return 179===t.parent.kind?aa(t,1):void 0}function NC(t,r,n){if(e.isEntityName(t)){var i=901119,a=aa(t,i,r,!0,e.getHostSignatureFromJSDoc(t));if(!a&&e.isIdentifier(t)&&n&&(a=Da(fi(va(n),t.escapedText,i))),a)return a}var o=e.isIdentifier(t)?n:NC(t.left,r,n),s=e.isIdentifier(t)?t.escapedText:t.right.escapedText;if(o){var c=111551&o.flags&&xu(ys(o),"prototype");return xu(c?ys(c):qs(o),s)}}function AC(t,r){if(308===t.kind)return e.isExternalModule(t)?Da(t.symbol):void 0;var n=t.parent,i=n.parent;if(!(33554432&t.flags)){if(O(t)){var a=Sa(n);return e.isImportOrExportSpecifier(t.parent)&&t.parent.propertyName===t?Kv(a):a}if(e.isLiteralComputedPropertyDeclarationName(t))return Sa(n.parent);if(79===t.kind){if(EC(t))return kC(t);if(205===n.kind&&203===i.kind&&t===n.propertyName){var o=xu(FC(i),t.escapedText);if(o)return o}else if(e.isMetaProperty(n)&&n.name===t)return 103===n.keywordToken&&"target"===e.idText(t)?_x(n).symbol:100===n.keywordToken&&"meta"===e.idText(t)?Xl().members.get("meta"):void 0}switch(t.kind){case 79:case 80:case 208:case 163:if(!e.isThisInTypeQuery(t))return kC(t);case 108:var s=e.getThisContainer(t,!1);if(e.isFunctionLike(s)){var c=Ku(s);if(c.thisParameter)return c.thisParameter}if(e.isInExpressionContext(t))return wD(t).symbol;case 194:return tp(t).symbol;case 106:return wD(t).symbol;case 135:var u=t.parent;return u&&173===u.kind?u.parent.symbol:void 0;case 10:case 14:if(e.isExternalModuleImportEqualsDeclaration(t.parent.parent)&&e.getExternalModuleImportEqualsDeclarationExpression(t.parent.parent)===t||(269===t.parent.kind||275===t.parent.kind)&&t.parent.moduleSpecifier===t||e.isInJSFile(t)&&e.isRequireCall(t.parent,!1)||e.isImportCall(t.parent)||e.isLiteralTypeNode(t.parent)&&e.isLiteralImportTypeNode(t.parent.parent)&&t.parent.parent.argument===t.parent)return sa(t,t,r);if(e.isCallExpression(n)&&e.isBindableObjectDefinePropertyCall(n)&&n.arguments[1]===t)return Sa(n);case 8:var l=e.isElementAccessExpression(n)?n.argumentExpression===t?AD(n.expression):void 0:e.isLiteralTypeNode(n)&&e.isIndexedAccessTypeNode(i)?ip(i.objectType):void 0;return l&&xu(l,e.escapeLeadingUnderscores(t.text));case 88:case 98:case 38:case 84:return Sa(t.parent);case 202:return e.isLiteralImportTypeNode(t)?AC(t.argument.literal,r):void 0;case 93:return e.isExportAssignment(t.parent)?e.Debug.checkDefined(t.parent.symbol):void 0;case 100:case 103:return e.isMetaProperty(t.parent)?lx(t.parent).symbol:void 0;case 233:return wD(t).symbol;default:return}}}function FC(t){if(e.isSourceFile(t)&&!e.isExternalModule(t))return je;if(33554432&t.flags)return je;var r,n,i=e.tryGetClassImplementingOrExtendingExpressionWithTypeArguments(t),a=i&&Ls(Sa(i.class));if(e.isPartOfTypeNode(t)){var o=ip(t);return a?_c(o,a.thisType):o}if(e.isExpressionNode(t))return wC(t);if(a&&!i.isImplements){var s=e.firstOrUndefined(Is(a));return s?_c(s,a.thisType):je}if(e.isTypeDeclaration(t))return qs(n=Sa(t));if(79===(r=t).kind&&e.isTypeDeclaration(r.parent)&&e.getNameOfDeclaration(r.parent)===r)return(n=AC(t))?qs(n):je;if(e.isDeclaration(t))return(n=Sa(t))?ys(n):je;if(O(t))return(n=AC(t))?ys(n):je;if(e.isBindingPattern(t))return Jo(t.parent,!0,0)||je;if(EC(t)&&(n=AC(t))){var c=qs(n);return ko(c)?ys(n):c}return e.isMetaProperty(t.parent)&&t.parent.keywordToken===t.kind?lx(t.parent):je}function PC(t){if(e.Debug.assert(207===t.kind||206===t.kind),247===t.parent.kind)return aD(t,$S(t.parent)||je);if(223===t.parent.kind)return aD(t,AD(t.parent.right)||je);if(299===t.parent.kind){var r=e.cast(t.parent.parent,e.isObjectLiteralExpression);return nD(r,PC(r)||je,e.indexOfNode(r.properties,t.parent))}var n=e.cast(t.parent,e.isArrayLiteralExpression),i=PC(n)||je,a=eT(65,i,qe,t.parent)||je;return iD(n,i,n.elements.indexOf(t),a)}function wC(t){return e.isRightSideOfQualifiedNameOrPropertyAccess(t)&&(t=t.parent),Gd(AD(t))}function IC(t){var r=Sa(t.parent);return e.isStatic(t)?ys(r):qs(r)}function OC(t){var r=t.name;switch(r.kind){case 79:return Xd(e.idText(r));case 8:case 10:return Xd(r.text);case 164:var n=Jv(r);return Zx(n,12288)?n:Ye;default:return e.Debug.fail("Unsupported property name.")}}function MC(t){t=_u(t);var r=e.createSymbolTable(Qc(t)),n=Su(t,0).length?Ht:Su(t,1).length?Gt:void 0;return n&&e.forEach(Qc(n),(function(e){r.has(e.escapedName)||r.set(e.escapedName,e)})),Ba(r)}function LC(t){return e.typeHasCallOrConstructSignatures(t,pe)}function RC(t){if(e.isGeneratedIdentifier(t))return!1;var r=e.getParseTreeNode(t,e.isIdentifier);if(!r)return!1;var n=r.parent;return!!n&&(!((e.isPropertyAccessExpression(n)||e.isPropertyAssignment(n))&&n.name===r)&&lE(r)===_e)}function BC(t){var r=sa(t.parent,t);if(!r||e.isShorthandAmbientModuleSymbol(r))return!0;var n=fa(r),i=_i(r=_a(r));return void 0===i.exportsSomeValue&&(i.exportsSomeValue=n?!!(111551&r.flags):e.forEachEntry(ha(r),(function(e){return(e=Qi(e))&&!!(111551&Yi(e))}))),i.exportsSomeValue}function jC(t,r){var n,i=e.getParseTreeNode(t,e.isIdentifier);if(i){var a=lE(i,function(t){return e.isModuleOrEnumDeclaration(t.parent)&&t===t.parent.name}(i));if(a){if(1048576&a.flags){var o=Da(a.exportSymbol);if(!r&&944&o.flags&&!(3&o.flags))return;a=o}var s=Ta(a);if(s){if(512&s.flags&&308===(null===(n=s.valueDeclaration)||void 0===n?void 0:n.kind)){var c=s.valueDeclaration;return c!==e.getSourceFileOfNode(i)?void 0:c}return e.findAncestor(i.parent,(function(t){return e.isModuleOrEnumDeclaration(t)&&Sa(t)===s}))}}}}function JC(t){if(t.generatedImportReference)return t.generatedImportReference;var r=e.getParseTreeNode(t,e.isIdentifier);if(r){var n=function(e){var t=di(e).resolvedSymbol;if(t&&t!==we)return t;return vi(e,e.escapedText,3257279,void 0,void 0,!0,void 0,void 0)}(r);if(Gi(n,111551)&&!ea(n,111551))return Fi(n)}}function zC(t){if(418&t.flags&&t.valueDeclaration&&!e.isSourceFile(t.valueDeclaration)){var r=_i(t);if(void 0===r.isDeclarationWithCollidingName){var n=e.getEnclosingBlockScopeContainer(t.valueDeclaration);if(e.isStatementWithLocals(n)||function(t){return t.valueDeclaration&&e.isBindingElement(t.valueDeclaration)&&295===e.walkUpBindingElementsAndPatterns(t.valueDeclaration).parent.kind}(t)){var i=di(t.valueDeclaration);if(vi(n.parent,t.escapedName,111551,void 0,void 0,!1))r.isDeclarationWithCollidingName=!0;else if(262144&i.flags){var a=524288&i.flags,o=e.isIterationStatement(n,!1),s=238===n.kind&&e.isIterationStatement(n.parent,!1);r.isDeclarationWithCollidingName=!(e.isBlockScopedContainerTopLevel(n)||a&&(o||s))}else r.isDeclarationWithCollidingName=!1}}return r.isDeclarationWithCollidingName}return!1}function UC(t){if(!e.isGeneratedIdentifier(t)){var r=e.getParseTreeNode(t,e.isIdentifier);if(r){var n=lE(r);if(n&&zC(n))return n.valueDeclaration}}}function KC(t){var r=e.getParseTreeNode(t,e.isDeclaration);if(r){var n=Sa(r);if(n)return zC(n)}return!1}function VC(t){switch(t.kind){case 268:return WC(Sa(t));case 270:case 271:case 273:case 278:var r=Sa(t);return!!r&&WC(r)&&!ea(r,111551);case 275:var n=t.exportClause;return!!n&&(e.isNamespaceExport(n)||e.some(n.elements,VC));case 274:return!t.expression||79!==t.expression.kind||WC(Sa(t))}return!1}function qC(t){var r=e.getParseTreeNode(t,e.isImportEqualsDeclaration);return!(void 0===r||308!==r.parent.kind||!e.isInternalModuleImportEqualsDeclaration(r))&&(WC(Sa(r))&&r.moduleReference&&!e.nodeIsMissing(r.moduleReference))}function WC(t){var r;if(!t)return!1;var n=Aa(Xi(t));return n===we||!!(111551&(null!==(r=Yi(n))&&void 0!==r?r:-1))&&(e.shouldPreserveConstEnums(K)||!HC(n))}function HC(e){return tD(e)||!!e.constEnumOnlyModule}function GC(t,r){if(Pi(t)){var n=Sa(t),i=n&&_i(n);if(null==i?void 0:i.referenced)return!0;var a=_i(n).aliasTarget;if(a&&1&e.getEffectiveModifierFlags(t)&&111551&Yi(a)&&(e.shouldPreserveConstEnums(K)||!HC(a)))return!0}return!!r&&!!e.forEachChild(t,(function(e){return GC(e,r)}))}function QC(t){if(e.nodeIsPresent(t.body)){if(e.isGetAccessor(t)||e.isSetAccessor(t))return!1;var r=Wu(Sa(t));return r.length>1||1===r.length&&r[0].declaration!==t}return!1}function XC(t){return!(!G||Bu(t)||e.isJSDocParameterTag(t)||!t.initializer||e.hasSyntacticModifier(t,16476))}function YC(t){return G&&Bu(t)&&!t.initializer&&e.hasSyntacticModifier(t,16476)}function ZC(t){var r=e.getParseTreeNode(t,e.isFunctionDeclaration);if(!r)return!1;var n=Sa(r);return!!(n&&16&n.flags)&&!!e.forEachEntry(va(n),(function(t){return 111551&t.flags&&t.valueDeclaration&&e.isPropertyAccessExpression(t.valueDeclaration)}))}function $C(t){var r=e.getParseTreeNode(t,e.isFunctionDeclaration);if(!r)return e.emptyArray;var n=Sa(r);return n&&Qc(ys(n))||e.emptyArray}function eE(e){var t,r=e.id||0;return r<0||r>=mn.length?0:(null===(t=mn[r])||void 0===t?void 0:t.flags)||0}function tE(e){return qT(e.parent),di(e).enumMemberValue}function rE(e){switch(e.kind){case 302:case 208:case 209:return!0}return!1}function nE(t){if(302===t.kind)return tE(t);var r=di(t).resolvedSymbol;if(r&&8&r.flags){var n=r.valueDeclaration;if(e.isEnumConst(n.parent))return tE(n)}}function iE(e){return!!(524288&e.flags)&&Su(e,0).length>0}function aE(t,r){var n,i,a=e.getParseTreeNode(t,e.isEntityName);if(!a)return e.TypeReferenceSerializationKind.Unknown;if(r&&!(r=e.getParseTreeNode(r)))return e.TypeReferenceSerializationKind.Unknown;var o=!1;if(e.isQualifiedName(a)){var s=aa(e.getFirstIdentifier(a),111551,!0,!0,r);o=!!(null===(n=null==s?void 0:s.declarations)||void 0===n?void 0:n.every(e.isTypeOnlyImportOrExportDeclaration))}var c=aa(a,111551,!0,!0,r),u=c&&2097152&c.flags?Xi(c):c;o||(o=!!(null===(i=null==c?void 0:c.declarations)||void 0===i?void 0:i.every(e.isTypeOnlyImportOrExportDeclaration)));var l=aa(a,788968,!0,!1,r);if(u&&u===l){var _=r_(!1);if(_&&u===_)return e.TypeReferenceSerializationKind.Promise;var d=ys(u);if(d&&ks(d))return o?e.TypeReferenceSerializationKind.TypeWithCallSignature:e.TypeReferenceSerializationKind.TypeWithConstructSignatureAndValue}if(!l)return o?e.TypeReferenceSerializationKind.ObjectType:e.TypeReferenceSerializationKind.Unknown;var p=qs(l);return ko(p)?o?e.TypeReferenceSerializationKind.ObjectType:e.TypeReferenceSerializationKind.Unknown:3&p.flags?e.TypeReferenceSerializationKind.ObjectType:Zx(p,245760)?e.TypeReferenceSerializationKind.VoidNullableOrNeverType:Zx(p,528)?e.TypeReferenceSerializationKind.BooleanType:Zx(p,296)?e.TypeReferenceSerializationKind.NumberLikeType:Zx(p,2112)?e.TypeReferenceSerializationKind.BigIntLikeType:Zx(p,402653316)?e.TypeReferenceSerializationKind.StringLikeType:_g(p)?e.TypeReferenceSerializationKind.ArrayLikeType:Zx(p,12288)?e.TypeReferenceSerializationKind.ESSymbolType:iE(p)?e.TypeReferenceSerializationKind.TypeWithCallSignature:qf(p)?e.TypeReferenceSerializationKind.ArrayLikeType:e.TypeReferenceSerializationKind.ObjectType}function oE(t,r,n,i,a){var o=e.getParseTreeNode(t,e.isVariableLikeOrAccessor);if(!o)return e.factory.createToken(131);var s=Sa(o),c=!s||133120&s.flags?je:sg(ys(s));return 8192&c.flags&&c.symbol===s&&(n|=1048576),a&&(c=bg(c)),oe.typeToTypeNode(c,r,1024|n,i)}function sE(t,r,n,i){var a=e.getParseTreeNode(t,e.isFunctionLike);if(!a)return e.factory.createToken(131);var o=Ku(a);return oe.typeToTypeNode(Yu(o),r,1024|n,i)}function cE(t,r,n,i){var a=e.getParseTreeNode(t,e.isExpression);if(!a)return e.factory.createToken(131);var o=Rg(wC(a));return oe.typeToTypeNode(o,r,1024|n,i)}function uE(t){return se.has(e.escapeLeadingUnderscores(t))}function lE(t,r){var n=di(t).resolvedSymbol;if(n)return n;var i=t;if(r){var a=t.parent;e.isDeclaration(a)&&t===a.name&&(i=To(a))}return vi(i,t.escapedText,3257279,void 0,void 0,!0)}function _E(t){if(!e.isGeneratedIdentifier(t)){var r=e.getParseTreeNode(t,e.isIdentifier);if(r){var n=lE(r);if(n)return Aa(n).valueDeclaration}}}function dE(t){return!!(e.isDeclarationReadonly(t)||e.isVariableDeclaration(t)&&e.isVarConst(t))&&Qd(ys(Sa(t)))}function pE(t,r){return function(t,r,n){var i=1024&t.flags?oe.symbolToExpression(t.symbol,111551,r,void 0,n):t===rt?e.factory.createTrue():t===et&&e.factory.createFalse();if(i)return i;var a=t.value;return"object"==typeof a?e.factory.createBigIntLiteral(a):"number"==typeof a?e.factory.createNumericLiteral(a):e.factory.createStringLiteral(a)}(ys(Sa(t)),t,r)}function fE(t){return t?(Vn(t),e.getSourceFileOfNode(t).localJsxFactory||Br):Br}function gE(t){if(t){var r=e.getSourceFileOfNode(t);if(r){if(r.localJsxFragmentFactory)return r.localJsxFragmentFactory;var n=r.pragmas.get("jsxfrag"),i=e.isArray(n)?n[0]:n;if(i)return r.localJsxFragmentFactory=e.parseIsolatedEntityName(i.arguments.factory,V),r.localJsxFragmentFactory}}if(K.jsxFragmentFactory)return e.parseIsolatedEntityName(K.jsxFragmentFactory,V)}function mE(t){var r=264===t.kind?e.tryCast(t.name,e.isStringLiteral):e.getExternalModuleName(t),n=ca(r,r,void 0);if(n)return e.getDeclarationOfKind(n,308)}function yE(t,r){if((n&r)!==r&&K.importHelpers){var i=e.getSourceFileOfNode(t);if(e.isEffectiveExternalModule(i,K)&&!(16777216&t.flags)){var a=function(t,r){u||(u=ua(t,e.externalHelpersModuleNameText,e.Diagnostics.This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found,r)||we);return u}(i,t);if(a!==we)for(var o=r&~n,s=1;s<=4194304;s<<=1)if(o&s){var c=vE(s),l=fi(a.exports,e.escapeLeadingUnderscores(c),111551);l?524288&s?e.some(Wu(l),(function(e){return xx(e)>3}))||Qn(t,e.Diagnostics.This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_one_in_0_Consider_upgrading_your_version_of_0,e.externalHelpersModuleNameText,c,4):1048576&s?e.some(Wu(l),(function(e){return xx(e)>4}))||Qn(t,e.Diagnostics.This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_one_in_0_Consider_upgrading_your_version_of_0,e.externalHelpersModuleNameText,c,5):1024&s&&(e.some(Wu(l),(function(e){return xx(e)>2}))||Qn(t,e.Diagnostics.This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_one_in_0_Consider_upgrading_your_version_of_0,e.externalHelpersModuleNameText,c,3)):Qn(t,e.Diagnostics.This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_version_of_0,e.externalHelpersModuleNameText,c)}n|=r}}}function vE(t){switch(t){case 1:return"__extends";case 2:return"__assign";case 4:return"__rest";case 8:return"__decorate";case 16:return"__metadata";case 32:return"__param";case 64:return"__awaiter";case 128:return"__generator";case 256:return"__values";case 512:return"__read";case 1024:return"__spreadArray";case 2048:return"__await";case 4096:return"__asyncGenerator";case 8192:return"__asyncDelegator";case 16384:return"__asyncValues";case 32768:return"__exportStar";case 65536:return"__importStar";case 131072:return"__importDefault";case 262144:return"__makeTemplateObject";case 524288:return"__classPrivateFieldGet";case 1048576:return"__classPrivateFieldSet";case 2097152:return"__classPrivateFieldIn";case 4194304:return"__createBinding";default:return e.Debug.fail("Unrecognized helper")}}function hE(t){return function(t){if(e.canHaveIllegalDecorators(t)&&e.some(t.illegalDecorators))return VE(t,e.Diagnostics.Decorators_are_not_valid_here);if(!e.canHaveDecorators(t)||!e.hasDecorators(t))return!1;if(!e.nodeCanBeDecorated(t,t.parent,t.parent.parent))return 171!==t.kind||e.nodeIsPresent(t.body)?VE(t,e.Diagnostics.Decorators_are_not_valid_here):VE(t,e.Diagnostics.A_decorator_can_only_decorate_a_method_implementation_not_an_overload);if(174===t.kind||175===t.kind){var r=e.getAllAccessorDeclarations(t.parent.members,t);if(e.hasDecorators(r.firstAccessor)&&t===r.secondAccessor)return VE(t,e.Diagnostics.Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name)}return!1}(t)||bE(t)}function bE(t){var r,n,i,a,o=function(t){return!!t.modifiers&&(function(t){switch(t.kind){case 174:case 175:case 173:case 169:case 168:case 171:case 170:case 178:case 264:case 269:case 268:case 275:case 274:case 215:case 216:case 166:case 165:return!1;case 172:case 299:case 300:case 267:case 181:case 279:return!0;default:if(265===t.parent.kind||308===t.parent.kind)return!1;switch(t.kind){case 259:return xE(t,132);case 260:case 182:return xE(t,126);case 228:case 261:case 240:case 262:return!0;case 263:return xE(t,85);default:e.Debug.assertNever(t)}}}(t)?VE(t,e.Diagnostics.Modifiers_cannot_appear_here):void 0)}(t);if(void 0!==o)return o;for(var s=0,c=0,u=t.modifiers;c<u.length;c++){var l=u[c];if(!e.isDecorator(l)){if(146!==l.kind){if(168===t.kind||170===t.kind)return WE(l,e.Diagnostics._0_modifier_cannot_appear_on_a_type_member,e.tokenToString(l.kind));if(178===t.kind&&(124!==l.kind||!e.isClassLike(t.parent)))return WE(l,e.Diagnostics._0_modifier_cannot_appear_on_an_index_signature,e.tokenToString(l.kind))}if(101!==l.kind&&145!==l.kind&&165===t.kind)return WE(l,e.Diagnostics._0_modifier_cannot_appear_on_a_type_parameter,e.tokenToString(l.kind));switch(l.kind){case 85:if(263!==t.kind)return WE(t,e.Diagnostics.A_class_member_cannot_have_the_0_keyword,e.tokenToString(85));break;case 161:if(16384&s)return WE(l,e.Diagnostics._0_modifier_already_seen,"override");if(2&s)return WE(l,e.Diagnostics._0_modifier_cannot_be_used_with_1_modifier,"override","declare");if(64&s)return WE(l,e.Diagnostics._0_modifier_must_precede_1_modifier,"override","readonly");if(128&s)return WE(l,e.Diagnostics._0_modifier_must_precede_1_modifier,"override","accessor");if(512&s)return WE(l,e.Diagnostics._0_modifier_must_precede_1_modifier,"override","async");s|=16384,a=l;break;case 123:case 122:case 121:var _=po(e.modifierToFlag(l.kind));if(28&s)return WE(l,e.Diagnostics.Accessibility_modifier_already_seen);if(16384&s)return WE(l,e.Diagnostics._0_modifier_must_precede_1_modifier,_,"override");if(32&s)return WE(l,e.Diagnostics._0_modifier_must_precede_1_modifier,_,"static");if(128&s)return WE(l,e.Diagnostics._0_modifier_must_precede_1_modifier,_,"accessor");if(64&s)return WE(l,e.Diagnostics._0_modifier_must_precede_1_modifier,_,"readonly");if(512&s)return WE(l,e.Diagnostics._0_modifier_must_precede_1_modifier,_,"async");if(265===t.parent.kind||308===t.parent.kind)return WE(l,e.Diagnostics._0_modifier_cannot_appear_on_a_module_or_namespace_element,_);if(256&s)return 121===l.kind?WE(l,e.Diagnostics._0_modifier_cannot_be_used_with_1_modifier,_,"abstract"):WE(l,e.Diagnostics._0_modifier_must_precede_1_modifier,_,"abstract");if(e.isPrivateIdentifierClassElementDeclaration(t))return WE(l,e.Diagnostics.An_accessibility_modifier_cannot_be_used_with_a_private_identifier);s|=e.modifierToFlag(l.kind);break;case 124:if(32&s)return WE(l,e.Diagnostics._0_modifier_already_seen,"static");if(64&s)return WE(l,e.Diagnostics._0_modifier_must_precede_1_modifier,"static","readonly");if(512&s)return WE(l,e.Diagnostics._0_modifier_must_precede_1_modifier,"static","async");if(128&s)return WE(l,e.Diagnostics._0_modifier_must_precede_1_modifier,"static","accessor");if(265===t.parent.kind||308===t.parent.kind)return WE(l,e.Diagnostics._0_modifier_cannot_appear_on_a_module_or_namespace_element,"static");if(166===t.kind)return WE(l,e.Diagnostics._0_modifier_cannot_appear_on_a_parameter,"static");if(256&s)return WE(l,e.Diagnostics._0_modifier_cannot_be_used_with_1_modifier,"static","abstract");if(16384&s)return WE(l,e.Diagnostics._0_modifier_must_precede_1_modifier,"static","override");s|=32,r=l;break;case 127:if(128&s)return WE(l,e.Diagnostics._0_modifier_already_seen,"accessor");if(64&s)return WE(l,e.Diagnostics._0_modifier_cannot_be_used_with_1_modifier,"accessor","readonly");if(2&s)return WE(l,e.Diagnostics._0_modifier_cannot_be_used_with_1_modifier,"accessor","declare");if(169!==t.kind)return WE(l,e.Diagnostics.accessor_modifier_can_only_appear_on_a_property_declaration);s|=128;break;case 146:if(64&s)return WE(l,e.Diagnostics._0_modifier_already_seen,"readonly");if(169!==t.kind&&168!==t.kind&&178!==t.kind&&166!==t.kind)return WE(l,e.Diagnostics.readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature);s|=64;break;case 93:if(1&s)return WE(l,e.Diagnostics._0_modifier_already_seen,"export");if(2&s)return WE(l,e.Diagnostics._0_modifier_must_precede_1_modifier,"export","declare");if(256&s)return WE(l,e.Diagnostics._0_modifier_must_precede_1_modifier,"export","abstract");if(512&s)return WE(l,e.Diagnostics._0_modifier_must_precede_1_modifier,"export","async");if(e.isClassLike(t.parent))return WE(l,e.Diagnostics._0_modifier_cannot_appear_on_class_elements_of_this_kind,"export");if(166===t.kind)return WE(l,e.Diagnostics._0_modifier_cannot_appear_on_a_parameter,"export");s|=1;break;case 88:var d=308===t.parent.kind?t.parent:t.parent.parent;if(264===d.kind&&!e.isAmbientModule(d))return WE(l,e.Diagnostics.A_default_export_can_only_be_used_in_an_ECMAScript_style_module);if(!(1&s))return WE(l,e.Diagnostics._0_modifier_must_precede_1_modifier,"export","default");s|=1024;break;case 136:if(2&s)return WE(l,e.Diagnostics._0_modifier_already_seen,"declare");if(512&s)return WE(l,e.Diagnostics._0_modifier_cannot_be_used_in_an_ambient_context,"async");if(16384&s)return WE(l,e.Diagnostics._0_modifier_cannot_be_used_in_an_ambient_context,"override");if(e.isClassLike(t.parent)&&!e.isPropertyDeclaration(t))return WE(l,e.Diagnostics._0_modifier_cannot_appear_on_class_elements_of_this_kind,"declare");if(166===t.kind)return WE(l,e.Diagnostics._0_modifier_cannot_appear_on_a_parameter,"declare");if(16777216&t.parent.flags&&265===t.parent.kind)return WE(l,e.Diagnostics.A_declare_modifier_cannot_be_used_in_an_already_ambient_context);if(e.isPrivateIdentifierClassElementDeclaration(t))return WE(l,e.Diagnostics._0_modifier_cannot_be_used_with_a_private_identifier,"declare");s|=2,n=l;break;case 126:if(256&s)return WE(l,e.Diagnostics._0_modifier_already_seen,"abstract");if(260!==t.kind&&182!==t.kind){if(171!==t.kind&&169!==t.kind&&174!==t.kind&&175!==t.kind)return WE(l,e.Diagnostics.abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration);if(260!==t.parent.kind||!e.hasSyntacticModifier(t.parent,256))return WE(l,e.Diagnostics.Abstract_methods_can_only_appear_within_an_abstract_class);if(32&s)return WE(l,e.Diagnostics._0_modifier_cannot_be_used_with_1_modifier,"static","abstract");if(8&s)return WE(l,e.Diagnostics._0_modifier_cannot_be_used_with_1_modifier,"private","abstract");if(512&s&&i)return WE(i,e.Diagnostics._0_modifier_cannot_be_used_with_1_modifier,"async","abstract");if(16384&s)return WE(l,e.Diagnostics._0_modifier_must_precede_1_modifier,"abstract","override");if(128&s)return WE(l,e.Diagnostics._0_modifier_must_precede_1_modifier,"abstract","accessor")}if(e.isNamedDeclaration(t)&&80===t.name.kind)return WE(l,e.Diagnostics._0_modifier_cannot_be_used_with_a_private_identifier,"abstract");s|=256;break;case 132:if(512&s)return WE(l,e.Diagnostics._0_modifier_already_seen,"async");if(2&s||16777216&t.parent.flags)return WE(l,e.Diagnostics._0_modifier_cannot_be_used_in_an_ambient_context,"async");if(166===t.kind)return WE(l,e.Diagnostics._0_modifier_cannot_appear_on_a_parameter,"async");if(256&s)return WE(l,e.Diagnostics._0_modifier_cannot_be_used_with_1_modifier,"async","abstract");s|=512,i=l;break;case 101:case 145:var p=101===l.kind?32768:65536,f=101===l.kind?"in":"out";if(165!==t.kind||!(e.isInterfaceDeclaration(t.parent)||e.isClassLike(t.parent)||e.isTypeAliasDeclaration(t.parent)))return WE(l,e.Diagnostics._0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias,f);if(s&p)return WE(l,e.Diagnostics._0_modifier_already_seen,f);if(32768&p&&65536&s)return WE(l,e.Diagnostics._0_modifier_must_precede_1_modifier,"in","out");s|=p}}}return 173===t.kind?32&s?WE(r,e.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration,"static"):16384&s?WE(a,e.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration,"override"):!!(512&s)&&WE(i,e.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration,"async"):(269===t.kind||268===t.kind)&&2&s?WE(n,e.Diagnostics.A_0_modifier_cannot_be_used_with_an_import_declaration,"declare"):166===t.kind&&16476&s&&e.isBindingPattern(t.name)?WE(t,e.Diagnostics.A_parameter_property_may_not_be_declared_using_a_binding_pattern):166===t.kind&&16476&s&&t.dotDotDotToken?WE(t,e.Diagnostics.A_parameter_property_cannot_be_declared_using_a_rest_parameter):!!(512&s)&&function(t,r){switch(t.kind){case 171:case 259:case 215:case 216:return!1}return WE(r,e.Diagnostics._0_modifier_cannot_be_used_here,"async")}(t,i)}function xE(t,r){for(var n=0,i=t.modifiers;n<i.length;n++){var a=i[n];if(!e.isDecorator(a))return a.kind!==r}return!1}function DE(t,r){return void 0===r&&(r=e.Diagnostics.Trailing_comma_not_allowed),!(!t||!t.hasTrailingComma)&&qE(t[0],t.end-",".length,",".length,r)}function SE(t,r){if(t&&0===t.length){var n=t.pos-"<".length;return qE(r,n,e.skipTrivia(r.text,t.end)+">".length-n,e.Diagnostics.Type_parameter_list_cannot_be_empty)}return!1}function TE(t){if(V>=3){var r=t.body&&e.isBlock(t.body)&&e.findUseStrictPrologue(t.body.statements);if(r){var n=(o=t.parameters,e.filter(o,(function(t){return!!t.initializer||e.isBindingPattern(t.name)||e.isRestParameter(t)})));if(e.length(n)){e.forEach(n,(function(t){e.addRelatedInfo(Qn(t,e.Diagnostics.This_parameter_is_not_allowed_with_use_strict_directive),e.createDiagnosticForNode(r,e.Diagnostics.use_strict_directive_used_here))}));var i=n.map((function(t,r){return 0===r?e.createDiagnosticForNode(t,e.Diagnostics.Non_simple_parameter_declared_here):e.createDiagnosticForNode(t,e.Diagnostics.and_here)}));return e.addRelatedInfo.apply(void 0,a([Qn(r,e.Diagnostics.use_strict_directive_cannot_be_used_with_non_simple_parameter_list)],i,!1)),!0}}}var o;return!1}function CE(t){var r=e.getSourceFileOfNode(t);return hE(t)||SE(t.typeParameters,r)||function(t){for(var r=!1,n=t.length,i=0;i<n;i++){var a=t[i];if(a.dotDotDotToken){if(i!==n-1)return WE(a.dotDotDotToken,e.Diagnostics.A_rest_parameter_must_be_last_in_a_parameter_list);if(16777216&a.flags||DE(t,e.Diagnostics.A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma),a.questionToken)return WE(a.questionToken,e.Diagnostics.A_rest_parameter_cannot_be_optional);if(a.initializer)return WE(a.name,e.Diagnostics.A_rest_parameter_cannot_have_an_initializer)}else if(Bu(a)){if(r=!0,a.questionToken&&a.initializer)return WE(a.name,e.Diagnostics.Parameter_cannot_have_question_mark_and_initializer)}else if(r&&!a.initializer)return WE(a.name,e.Diagnostics.A_required_parameter_cannot_follow_an_optional_parameter)}}(t.parameters)||function(t,r){if(!e.isArrowFunction(t))return!1;t.typeParameters&&!(e.length(t.typeParameters)>1||t.typeParameters.hasTrailingComma||t.typeParameters[0].constraint)&&r&&e.fileExtensionIsOneOf(r.fileName,[".mts",".cts"])&&WE(t.typeParameters[0],e.Diagnostics.This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_constraint);var n=t.equalsGreaterThanToken,i=e.getLineAndCharacterOfPosition(r,n.pos).line,a=e.getLineAndCharacterOfPosition(r,n.end).line;return i!==a&&WE(n,e.Diagnostics.Line_terminator_not_permitted_before_arrow)}(t,r)||e.isFunctionLikeDeclaration(t)&&TE(t)}function EE(t,r){return DE(r)||function(t,r){if(r&&0===r.length){var n=e.getSourceFileOfNode(t),i=r.pos-"<".length;return qE(n,i,e.skipTrivia(n.text,r.end)+">".length-i,e.Diagnostics.Type_argument_list_cannot_be_empty)}return!1}(t,r)}function kE(t){var r=t.types;if(DE(r))return!0;if(r&&0===r.length){var n=e.tokenToString(t.token);return qE(t,r.pos,0,e.Diagnostics._0_list_cannot_be_empty,n)}return e.some(r,NE)}function NE(t){return e.isExpressionWithTypeArguments(t)&&e.isImportKeyword(t.expression)&&t.typeArguments?WE(t,e.Diagnostics.This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot_have_type_arguments):EE(t,t.typeArguments)}function AE(t){if(164!==t.kind)return!1;var r=t;return 223===r.expression.kind&&27===r.expression.operatorToken.kind&&WE(r.expression,e.Diagnostics.A_comma_expression_is_not_allowed_in_a_computed_property_name)}function FE(t){if(t.asteriskToken){if(e.Debug.assert(259===t.kind||215===t.kind||171===t.kind),16777216&t.flags)return WE(t.asteriskToken,e.Diagnostics.Generators_are_not_allowed_in_an_ambient_context);if(!t.body)return WE(t.asteriskToken,e.Diagnostics.An_overload_signature_cannot_be_declared_as_a_generator)}}function PE(e,t){return!!e&&WE(e,t)}function wE(e,t){return!!e&&WE(e,t)}function IE(t){if(GE(t))return!0;if(247===t.kind&&t.awaitModifier&&!(32768&t.flags)){var r=e.getSourceFileOfNode(t);if(e.isInTopLevelContext(t)){if(!KE(r))switch(e.isEffectiveExternalModule(r,K)||Pn.add(e.createDiagnosticForNode(t.awaitModifier,e.Diagnostics.for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_has_no_imports_or_exports_Consider_adding_an_empty_export_to_make_this_file_a_module)),q){case e.ModuleKind.Node16:case e.ModuleKind.NodeNext:if(r.impliedNodeFormat===e.ModuleKind.CommonJS){Pn.add(e.createDiagnosticForNode(t.awaitModifier,e.Diagnostics.The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level));break}case e.ModuleKind.ES2022:case e.ModuleKind.ESNext:case e.ModuleKind.System:if(V>=4)break;default:Pn.add(e.createDiagnosticForNode(t.awaitModifier,e.Diagnostics.Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_or_nodenext_and_the_target_option_is_set_to_es2017_or_higher))}}else if(!KE(r)){var n=e.createDiagnosticForNode(t.awaitModifier,e.Diagnostics.for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules),i=e.getContainingFunction(t);if(i&&173!==i.kind){e.Debug.assert(0==(2&e.getFunctionFlags(i)),"Enclosing function should never be an async function.");var a=e.createDiagnosticForNode(i,e.Diagnostics.Did_you_mean_to_mark_this_function_as_async);e.addRelatedInfo(n,a)}return Pn.add(n),!0}return!1}if(e.isForOfStatement(t)&&!(32768&t.flags)&&e.isIdentifier(t.initializer)&&"async"===t.initializer.escapedText)return WE(t.initializer,e.Diagnostics.The_left_hand_side_of_a_for_of_statement_may_not_be_async),!1;if(258===t.initializer.kind){var o=t.initializer;if(!zE(o)){var s=o.declarations;if(!s.length)return!1;if(s.length>1){n=246===t.kind?e.Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement:e.Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement;return VE(o.declarations[1],n)}var c=s[0];if(c.initializer){var n=246===t.kind?e.Diagnostics.The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer:e.Diagnostics.The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer;return WE(c.name,n)}if(c.type)return WE(c,n=246===t.kind?e.Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation:e.Diagnostics.The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation)}}return!1}function OE(t){if(t.parameters.length===(174===t.kind?1:2))return e.getThisParameter(t)}function ME(t,r){if(function(t){return e.isDynamicName(t)&&!rc(t)}(t))return WE(t,r)}function LE(t){if(CE(t))return!0;if(171===t.kind){if(207===t.parent.kind){if(t.modifiers&&(1!==t.modifiers.length||132!==e.first(t.modifiers).kind))return VE(t,e.Diagnostics.Modifiers_cannot_appear_here);if(PE(t.questionToken,e.Diagnostics.An_object_member_cannot_be_declared_optional))return!0;if(wE(t.exclamationToken,e.Diagnostics.A_definite_assignment_assertion_is_not_permitted_in_this_context))return!0;if(void 0===t.body)return qE(t,t.end-1,";".length,e.Diagnostics._0_expected,"{")}if(FE(t))return!0}if(e.isClassLike(t.parent)){if(V<2&&e.isPrivateIdentifier(t.name))return WE(t.name,e.Diagnostics.Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher);if(16777216&t.flags)return ME(t.name,e.Diagnostics.A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type);if(171===t.kind&&!t.body)return ME(t.name,e.Diagnostics.A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type)}else{if(261===t.parent.kind)return ME(t.name,e.Diagnostics.A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type);if(184===t.parent.kind)return ME(t.name,e.Diagnostics.A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type)}}function RE(t){return e.isStringOrNumericLiteralLike(t)||221===t.kind&&40===t.operator&&8===t.operand.kind}function BE(t){var r,n=t.initializer;if(n){var i=!(RE(n)||function(t){if((e.isPropertyAccessExpression(t)||e.isElementAccessExpression(t)&&RE(t.argumentExpression))&&e.isEntityNameExpression(t.expression))return!!(1024&pD(t).flags)}(n)||110===n.kind||95===n.kind||(r=n,9===r.kind||221===r.kind&&40===r.operator&&9===r.operand.kind));if(!(e.isDeclarationReadonly(t)||e.isVariableDeclaration(t)&&e.isVarConst(t))||t.type)return WE(n,e.Diagnostics.Initializers_are_not_allowed_in_ambient_contexts);if(i)return WE(n,e.Diagnostics.A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_reference)}}function jE(t){if(79===t.kind){if("__esModule"===e.idText(t))return function(t,r,n,i,a,o){if(!KE(e.getSourceFileOfNode(r)))return Hn(t,r,n,i,a,o),!0;return!1}("noEmit",t,e.Diagnostics.Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules)}else for(var r=0,n=t.elements;r<n.length;r++){var i=n[r];if(!e.isOmittedExpression(i))return jE(i.name)}return!1}function JE(t){if(79===t.kind){if(119===t.originalKeywordKind)return WE(t,e.Diagnostics.let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations)}else for(var r=0,n=t.elements;r<n.length;r++){var i=n[r];e.isOmittedExpression(i)||JE(i.name)}return!1}function zE(t){var r=t.declarations;return!!DE(t.declarations)||!t.declarations.length&&qE(t,r.pos,r.end-r.pos,e.Diagnostics.Variable_declaration_list_cannot_be_empty)}function UE(e){switch(e.kind){case 242:case 243:case 244:case 251:case 245:case 246:case 247:return!1;case 253:return UE(e.parent)}return!0}function KE(e){return e.parseDiagnostics.length>0}function VE(t,r,n,i,a){var o=e.getSourceFileOfNode(t);if(!KE(o)){var s=e.getSpanOfTokenAtPosition(o,t.pos);return Pn.add(e.createFileDiagnostic(o,s.start,s.length,r,n,i,a)),!0}return!1}function qE(t,r,n,i,a,o,s){var c=e.getSourceFileOfNode(t);return!KE(c)&&(Pn.add(e.createFileDiagnostic(c,r,n,i,a,o,s)),!0)}function WE(t,r,n,i,a){return!KE(e.getSourceFileOfNode(t))&&(Pn.add(e.createDiagnosticForNode(t,r,n,i,a)),!0)}function HE(t){return 261!==t.kind&&262!==t.kind&&269!==t.kind&&268!==t.kind&&275!==t.kind&&274!==t.kind&&267!==t.kind&&!e.hasSyntacticModifier(t,1027)&&VE(t,e.Diagnostics.Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier)}function GE(t){if(16777216&t.flags){if(!di(t).hasReportedStatementInAmbientContext&&(e.isFunctionLike(t.parent)||e.isAccessor(t.parent)))return di(t).hasReportedStatementInAmbientContext=VE(t,e.Diagnostics.An_implementation_cannot_be_declared_in_ambient_contexts);if(238===t.parent.kind||265===t.parent.kind||308===t.parent.kind){var r=di(t.parent);if(!r.hasReportedStatementInAmbientContext)return r.hasReportedStatementInAmbientContext=VE(t,e.Diagnostics.Statements_are_not_allowed_in_ambient_contexts)}}return!1}function QE(t){if(32&t.numericLiteralFlags){var r=void 0;if(V>=1?r=e.Diagnostics.Octal_literals_are_not_available_when_targeting_ECMAScript_5_and_higher_Use_the_syntax_0:e.isChildOfNodeWithKind(t,198)?r=e.Diagnostics.Octal_literal_types_must_use_ES2015_syntax_Use_the_syntax_0:e.isChildOfNodeWithKind(t,302)&&(r=e.Diagnostics.Octal_literals_are_not_allowed_in_enums_members_initializer_Use_the_syntax_0),r){var n=e.isPrefixUnaryExpression(t.parent)&&40===t.parent.operator,i=(n?"-":"")+"0o"+t.text;return WE(n?t.parent:t,r,i)}}return function(t){var r=-1!==e.getTextOfNode(t).indexOf("."),n=16&t.numericLiteralFlags;if(r||n)return;var i=+t.text;if(i<=Math.pow(2,53)-1)return;Xn(!1,e.createDiagnosticForNode(t,e.Diagnostics.Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accurately_as_integers))}(t),!1}function XE(t){return!!e.forEach(t.elements,(function(t){if(t.isTypeOnly)return VE(t,273===t.kind?e.Diagnostics.The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement:e.Diagnostics.The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement)}))}function YE(t,r,n,i){if(1048576&r.flags&&2621440&t.flags){var a=Bm(r,t);if(a)return a;var o=Qc(t);if(o){var s=Mm(o,r);if(s)return Tf(r,e.map(s,(function(e){return[function(){return ys(e)},e.escapedName]})),n,void 0,i)}}}},function(e){e.JSX="JSX",e.IntrinsicElements="IntrinsicElements",e.ElementClass="ElementClass",e.ElementAttributesPropertyNameContainer="ElementAttributesProperty",e.ElementChildrenAttributeNameContainer="ElementChildrenAttribute",e.Element="Element",e.IntrinsicAttributes="IntrinsicAttributes",e.IntrinsicClassAttributes="IntrinsicClassAttributes",e.LibraryManagedAttributes="LibraryManagedAttributes"}(E||(E={})),e.signatureHasRestParameter=L,e.signatureHasLiteralTypes=R}(_||(_={})),function(e){var t;function r(t,r,n,i){if(void 0===t||void 0===r)return t;var a,o=r(t);return o===t?t:void 0!==o?(a=e.isArray(o)?(i||_)(o):o,e.Debug.assertNode(a,n),a):void 0}function n(t,r,n,a,o){if(void 0===t||void 0===r)return t;var s,c=t.length;(void 0===a||a<0)&&(a=0),(void 0===o||o>c-a)&&(o=c-a);var u=-1,l=-1;a>0||o<c?s=t.hasTrailingComma&&a+o===c:(u=t.pos,l=t.end,s=t.hasTrailingComma);var _=i(t,r,n,a,o);if(_!==t){var d=e.factory.createNodeArray(_,s);return e.setTextRangePosEnd(d,u,l),d}return t}function i(t,r,n,i,a){var o,s=t.length;(i>0||a<s)&&(o=[]);for(var c=0;c<a;c++){var u=t[c+i],l=void 0!==u?r(u):void 0;if((void 0!==o||void 0===l||l!==u)&&(void 0===o&&(o=t.slice(0,c)),l))if(e.isArray(l))for(var _=0,d=l;_<d.length;_++){var p=d[_];e.Debug.assertNode(p,n),o.push(p)}else e.Debug.assertNode(l,n),o.push(l)}return null!=o?o:t}function a(t,r,i,a,o,s){return void 0===s&&(s=n),i.startLexicalEnvironment(),t=s(t,r,e.isStatement,a),o&&(t=i.factory.ensureUseStrict(t)),e.factory.mergeLexicalEnvironment(t,i.endLexicalEnvironment())}function o(t,r,i,a){var o;return void 0===a&&(a=n),i.startLexicalEnvironment(),t&&(i.setLexicalEnvironmentFlags(1,!0),o=a(t,r,e.isParameterDeclaration),2&i.getLexicalEnvironmentFlags()&&e.getEmitScriptTarget(i.getCompilerOptions())>=2&&(o=function(t,r){for(var n,i=0;i<t.length;i++){var a=t[i],o=s(a,r);(n||o!==a)&&(n||(n=t.slice(0,i)),n[i]=o)}if(n)return e.setTextRange(r.factory.createNodeArray(n,t.hasTrailingComma),t);return t}(o,i)),i.setLexicalEnvironmentFlags(1,!1)),i.suspendLexicalEnvironment(),o}function s(t,r){return t.dotDotDotToken?t:e.isBindingPattern(t.name)?function(e,t){var r=t.factory;return t.addInitializationStatement(r.createVariableStatement(void 0,r.createVariableDeclarationList([r.createVariableDeclaration(e.name,void 0,e.type,e.initializer?r.createConditionalExpression(r.createStrictEquality(r.getGeneratedNameForNode(e),r.createVoidZero()),void 0,e.initializer,void 0,r.getGeneratedNameForNode(e)):r.getGeneratedNameForNode(e))]))),r.updateParameterDeclaration(e,e.modifiers,e.dotDotDotToken,r.getGeneratedNameForNode(e),e.questionToken,e.type,void 0)}(t,r):t.initializer?function(t,r,n,i){var a=i.factory;return i.addInitializationStatement(a.createIfStatement(a.createTypeCheck(a.cloneNode(r),"undefined"),e.setEmitFlags(e.setTextRange(a.createBlock([a.createExpressionStatement(e.setEmitFlags(e.setTextRange(a.createAssignment(e.setEmitFlags(a.cloneNode(r),48),e.setEmitFlags(n,1584|e.getEmitFlags(n))),t),1536))]),t),1953))),a.updateParameterDeclaration(t,t.modifiers,t.dotDotDotToken,t.name,t.questionToken,t.type,void 0)}(t,t.name,t.initializer,r):t}function c(t,n,i,a){void 0===a&&(a=r),i.resumeLexicalEnvironment();var o=a(t,n,e.isConciseBody),s=i.endLexicalEnvironment();if(e.some(s)){if(!o)return i.factory.createBlock(s);var c=i.factory.converters.convertToFunctionBlock(o),u=e.factory.mergeLexicalEnvironment(c.statements,s);return i.factory.updateBlock(c,u)}return o}function u(t,n,i,a){void 0===a&&(a=r),i.startBlockScope();var o=a(t,n,e.isStatement,i.factory.liftToBlock),s=i.endBlockScope();return e.some(s)?e.isBlock(o)?(s.push.apply(s,o.statements),i.factory.updateBlock(o,s)):(s.push(o),i.factory.createBlock(s)):o}e.visitNode=r,e.visitNodes=n,e.visitArray=function(e,t,r,n,a){if(void 0===e)return e;var o=e.length;return(void 0===n||n<0)&&(n=0),(void 0===a||a>o-n)&&(a=o-n),i(e,t,r,n,a)},e.visitLexicalEnvironment=a,e.visitParameterList=o,e.visitFunctionBody=c,e.visitIterationBody=u,e.visitEachChild=function(e,t,i,a,o,s){if(void 0===a&&(a=n),void 0===s&&(s=r),void 0!==e){var c=l[e.kind];return void 0===c?e:c(e,t,i,a,s,o)}};var l=((t={})[79]=function(t,r,n,i,a,o){return n.factory.updateIdentifier(t,i(t.typeArguments,r,e.isTypeNodeOrTypeParameterDeclaration))},t[163]=function(t,r,n,i,a,o){return n.factory.updateQualifiedName(t,a(t.left,r,e.isEntityName),a(t.right,r,e.isIdentifier))},t[164]=function(t,r,n,i,a,o){return n.factory.updateComputedPropertyName(t,a(t.expression,r,e.isExpression))},t[165]=function(t,r,n,i,a,o){return n.factory.updateTypeParameterDeclaration(t,i(t.modifiers,r,e.isModifier),a(t.name,r,e.isIdentifier),a(t.constraint,r,e.isTypeNode),a(t.default,r,e.isTypeNode))},t[166]=function(t,r,n,i,a,o){return n.factory.updateParameterDeclaration(t,i(t.modifiers,r,e.isModifierLike),a(t.dotDotDotToken,o,e.isDotDotDotToken),a(t.name,r,e.isBindingName),a(t.questionToken,o,e.isQuestionToken),a(t.type,r,e.isTypeNode),a(t.initializer,r,e.isExpression))},t[167]=function(t,r,n,i,a,o){return n.factory.updateDecorator(t,a(t.expression,r,e.isExpression))},t[168]=function(t,r,n,i,a,o){return n.factory.updatePropertySignature(t,i(t.modifiers,r,e.isModifier),a(t.name,r,e.isPropertyName),a(t.questionToken,o,e.isToken),a(t.type,r,e.isTypeNode))},t[169]=function(t,r,n,i,a,o){var s;return n.factory.updatePropertyDeclaration(t,i(t.modifiers,r,e.isModifierLike),a(t.name,r,e.isPropertyName),a(null!==(s=t.questionToken)&&void 0!==s?s:t.exclamationToken,o,e.isQuestionOrExclamationToken),a(t.type,r,e.isTypeNode),a(t.initializer,r,e.isExpression))},t[170]=function(t,r,n,i,a,o){return n.factory.updateMethodSignature(t,i(t.modifiers,r,e.isModifier),a(t.name,r,e.isPropertyName),a(t.questionToken,o,e.isQuestionToken),i(t.typeParameters,r,e.isTypeParameterDeclaration),i(t.parameters,r,e.isParameterDeclaration),a(t.type,r,e.isTypeNode))},t[171]=function(t,r,n,i,a,s){return n.factory.updateMethodDeclaration(t,i(t.modifiers,r,e.isModifierLike),a(t.asteriskToken,s,e.isAsteriskToken),a(t.name,r,e.isPropertyName),a(t.questionToken,s,e.isQuestionToken),i(t.typeParameters,r,e.isTypeParameterDeclaration),o(t.parameters,r,n,i),a(t.type,r,e.isTypeNode),c(t.body,r,n,a))},t[173]=function(t,r,n,i,a,s){return n.factory.updateConstructorDeclaration(t,i(t.modifiers,r,e.isModifier),o(t.parameters,r,n,i),c(t.body,r,n,a))},t[174]=function(t,r,n,i,a,s){return n.factory.updateGetAccessorDeclaration(t,i(t.modifiers,r,e.isModifierLike),a(t.name,r,e.isPropertyName),o(t.parameters,r,n,i),a(t.type,r,e.isTypeNode),c(t.body,r,n,a))},t[175]=function(t,r,n,i,a,s){return n.factory.updateSetAccessorDeclaration(t,i(t.modifiers,r,e.isModifierLike),a(t.name,r,e.isPropertyName),o(t.parameters,r,n,i),c(t.body,r,n,a))},t[172]=function(e,t,r,n,i,a){return r.startLexicalEnvironment(),r.suspendLexicalEnvironment(),r.factory.updateClassStaticBlockDeclaration(e,c(e.body,t,r,i))},t[176]=function(t,r,n,i,a,o){return n.factory.updateCallSignature(t,i(t.typeParameters,r,e.isTypeParameterDeclaration),i(t.parameters,r,e.isParameterDeclaration),a(t.type,r,e.isTypeNode))},t[177]=function(t,r,n,i,a,o){return n.factory.updateConstructSignature(t,i(t.typeParameters,r,e.isTypeParameterDeclaration),i(t.parameters,r,e.isParameterDeclaration),a(t.type,r,e.isTypeNode))},t[178]=function(t,r,n,i,a,o){return n.factory.updateIndexSignature(t,i(t.modifiers,r,e.isModifier),i(t.parameters,r,e.isParameterDeclaration),a(t.type,r,e.isTypeNode))},t[179]=function(t,r,n,i,a,o){return n.factory.updateTypePredicateNode(t,a(t.assertsModifier,r,e.isAssertsKeyword),a(t.parameterName,r,e.isIdentifierOrThisTypeNode),a(t.type,r,e.isTypeNode))},t[180]=function(t,r,n,i,a,o){return n.factory.updateTypeReferenceNode(t,a(t.typeName,r,e.isEntityName),i(t.typeArguments,r,e.isTypeNode))},t[181]=function(t,r,n,i,a,o){return n.factory.updateFunctionTypeNode(t,i(t.typeParameters,r,e.isTypeParameterDeclaration),i(t.parameters,r,e.isParameterDeclaration),a(t.type,r,e.isTypeNode))},t[182]=function(t,r,n,i,a,o){return n.factory.updateConstructorTypeNode(t,i(t.modifiers,r,e.isModifier),i(t.typeParameters,r,e.isTypeParameterDeclaration),i(t.parameters,r,e.isParameterDeclaration),a(t.type,r,e.isTypeNode))},t[183]=function(t,r,n,i,a,o){return n.factory.updateTypeQueryNode(t,a(t.exprName,r,e.isEntityName),i(t.typeArguments,r,e.isTypeNode))},t[184]=function(t,r,n,i,a,o){return n.factory.updateTypeLiteralNode(t,i(t.members,r,e.isTypeElement))},t[185]=function(t,r,n,i,a,o){return n.factory.updateArrayTypeNode(t,a(t.elementType,r,e.isTypeNode))},t[186]=function(t,r,n,i,a,o){return n.factory.updateTupleTypeNode(t,i(t.elements,r,e.isTypeNode))},t[187]=function(t,r,n,i,a,o){return n.factory.updateOptionalTypeNode(t,a(t.type,r,e.isTypeNode))},t[188]=function(t,r,n,i,a,o){return n.factory.updateRestTypeNode(t,a(t.type,r,e.isTypeNode))},t[189]=function(t,r,n,i,a,o){return n.factory.updateUnionTypeNode(t,i(t.types,r,e.isTypeNode))},t[190]=function(t,r,n,i,a,o){return n.factory.updateIntersectionTypeNode(t,i(t.types,r,e.isTypeNode))},t[191]=function(t,r,n,i,a,o){return n.factory.updateConditionalTypeNode(t,a(t.checkType,r,e.isTypeNode),a(t.extendsType,r,e.isTypeNode),a(t.trueType,r,e.isTypeNode),a(t.falseType,r,e.isTypeNode))},t[192]=function(t,r,n,i,a,o){return n.factory.updateInferTypeNode(t,a(t.typeParameter,r,e.isTypeParameterDeclaration))},t[202]=function(t,r,n,i,a,o){return n.factory.updateImportTypeNode(t,a(t.argument,r,e.isTypeNode),a(t.assertions,r,e.isImportTypeAssertionContainer),a(t.qualifier,r,e.isEntityName),i(t.typeArguments,r,e.isTypeNode),t.isTypeOf)},t[298]=function(t,r,n,i,a,o){return n.factory.updateImportTypeAssertionContainer(t,a(t.assertClause,r,e.isAssertClause),t.multiLine)},t[199]=function(t,r,n,i,a,o){return n.factory.updateNamedTupleMember(t,a(t.dotDotDotToken,o,e.isDotDotDotToken),a(t.name,r,e.isIdentifier),a(t.questionToken,o,e.isQuestionToken),a(t.type,r,e.isTypeNode))},t[193]=function(t,r,n,i,a,o){return n.factory.updateParenthesizedType(t,a(t.type,r,e.isTypeNode))},t[195]=function(t,r,n,i,a,o){return n.factory.updateTypeOperatorNode(t,a(t.type,r,e.isTypeNode))},t[196]=function(t,r,n,i,a,o){return n.factory.updateIndexedAccessTypeNode(t,a(t.objectType,r,e.isTypeNode),a(t.indexType,r,e.isTypeNode))},t[197]=function(t,r,n,i,a,o){return n.factory.updateMappedTypeNode(t,a(t.readonlyToken,o,e.isReadonlyKeywordOrPlusOrMinusToken),a(t.typeParameter,r,e.isTypeParameterDeclaration),a(t.nameType,r,e.isTypeNode),a(t.questionToken,o,e.isQuestionOrPlusOrMinusToken),a(t.type,r,e.isTypeNode),i(t.members,r,e.isTypeElement))},t[198]=function(t,r,n,i,a,o){return n.factory.updateLiteralTypeNode(t,a(t.literal,r,e.isExpression))},t[200]=function(t,r,n,i,a,o){return n.factory.updateTemplateLiteralType(t,a(t.head,r,e.isTemplateHead),i(t.templateSpans,r,e.isTemplateLiteralTypeSpan))},t[201]=function(t,r,n,i,a,o){return n.factory.updateTemplateLiteralTypeSpan(t,a(t.type,r,e.isTypeNode),a(t.literal,r,e.isTemplateMiddleOrTemplateTail))},t[203]=function(t,r,n,i,a,o){return n.factory.updateObjectBindingPattern(t,i(t.elements,r,e.isBindingElement))},t[204]=function(t,r,n,i,a,o){return n.factory.updateArrayBindingPattern(t,i(t.elements,r,e.isArrayBindingElement))},t[205]=function(t,r,n,i,a,o){return n.factory.updateBindingElement(t,a(t.dotDotDotToken,o,e.isDotDotDotToken),a(t.propertyName,r,e.isPropertyName),a(t.name,r,e.isBindingName),a(t.initializer,r,e.isExpression))},t[206]=function(t,r,n,i,a,o){return n.factory.updateArrayLiteralExpression(t,i(t.elements,r,e.isExpression))},t[207]=function(t,r,n,i,a,o){return n.factory.updateObjectLiteralExpression(t,i(t.properties,r,e.isObjectLiteralElementLike))},t[208]=function(t,r,n,i,a,o){return e.isPropertyAccessChain(t)?n.factory.updatePropertyAccessChain(t,a(t.expression,r,e.isExpression),a(t.questionDotToken,o,e.isQuestionDotToken),a(t.name,r,e.isMemberName)):n.factory.updatePropertyAccessExpression(t,a(t.expression,r,e.isExpression),a(t.name,r,e.isMemberName))},t[209]=function(t,r,n,i,a,o){return e.isElementAccessChain(t)?n.factory.updateElementAccessChain(t,a(t.expression,r,e.isExpression),a(t.questionDotToken,o,e.isQuestionDotToken),a(t.argumentExpression,r,e.isExpression)):n.factory.updateElementAccessExpression(t,a(t.expression,r,e.isExpression),a(t.argumentExpression,r,e.isExpression))},t[210]=function(t,r,n,i,a,o){return e.isCallChain(t)?n.factory.updateCallChain(t,a(t.expression,r,e.isExpression),a(t.questionDotToken,o,e.isQuestionDotToken),i(t.typeArguments,r,e.isTypeNode),i(t.arguments,r,e.isExpression)):n.factory.updateCallExpression(t,a(t.expression,r,e.isExpression),i(t.typeArguments,r,e.isTypeNode),i(t.arguments,r,e.isExpression))},t[211]=function(t,r,n,i,a,o){return n.factory.updateNewExpression(t,a(t.expression,r,e.isExpression),i(t.typeArguments,r,e.isTypeNode),i(t.arguments,r,e.isExpression))},t[212]=function(t,r,n,i,a,o){return n.factory.updateTaggedTemplateExpression(t,a(t.tag,r,e.isExpression),i(t.typeArguments,r,e.isTypeNode),a(t.template,r,e.isTemplateLiteral))},t[213]=function(t,r,n,i,a,o){return n.factory.updateTypeAssertion(t,a(t.type,r,e.isTypeNode),a(t.expression,r,e.isExpression))},t[214]=function(t,r,n,i,a,o){return n.factory.updateParenthesizedExpression(t,a(t.expression,r,e.isExpression))},t[215]=function(t,r,n,i,a,s){return n.factory.updateFunctionExpression(t,i(t.modifiers,r,e.isModifier),a(t.asteriskToken,s,e.isAsteriskToken),a(t.name,r,e.isIdentifier),i(t.typeParameters,r,e.isTypeParameterDeclaration),o(t.parameters,r,n,i),a(t.type,r,e.isTypeNode),c(t.body,r,n,a))},t[216]=function(t,r,n,i,a,s){return n.factory.updateArrowFunction(t,i(t.modifiers,r,e.isModifier),i(t.typeParameters,r,e.isTypeParameterDeclaration),o(t.parameters,r,n,i),a(t.type,r,e.isTypeNode),a(t.equalsGreaterThanToken,s,e.isEqualsGreaterThanToken),c(t.body,r,n,a))},t[217]=function(t,r,n,i,a,o){return n.factory.updateDeleteExpression(t,a(t.expression,r,e.isExpression))},t[218]=function(t,r,n,i,a,o){return n.factory.updateTypeOfExpression(t,a(t.expression,r,e.isExpression))},t[219]=function(t,r,n,i,a,o){return n.factory.updateVoidExpression(t,a(t.expression,r,e.isExpression))},t[220]=function(t,r,n,i,a,o){return n.factory.updateAwaitExpression(t,a(t.expression,r,e.isExpression))},t[221]=function(t,r,n,i,a,o){return n.factory.updatePrefixUnaryExpression(t,a(t.operand,r,e.isExpression))},t[222]=function(t,r,n,i,a,o){return n.factory.updatePostfixUnaryExpression(t,a(t.operand,r,e.isExpression))},t[223]=function(t,r,n,i,a,o){return n.factory.updateBinaryExpression(t,a(t.left,r,e.isExpression),a(t.operatorToken,o,e.isBinaryOperatorToken),a(t.right,r,e.isExpression))},t[224]=function(t,r,n,i,a,o){return n.factory.updateConditionalExpression(t,a(t.condition,r,e.isExpression),a(t.questionToken,o,e.isQuestionToken),a(t.whenTrue,r,e.isExpression),a(t.colonToken,o,e.isColonToken),a(t.whenFalse,r,e.isExpression))},t[225]=function(t,r,n,i,a,o){return n.factory.updateTemplateExpression(t,a(t.head,r,e.isTemplateHead),i(t.templateSpans,r,e.isTemplateSpan))},t[226]=function(t,r,n,i,a,o){return n.factory.updateYieldExpression(t,a(t.asteriskToken,o,e.isAsteriskToken),a(t.expression,r,e.isExpression))},t[227]=function(t,r,n,i,a,o){return n.factory.updateSpreadElement(t,a(t.expression,r,e.isExpression))},t[228]=function(t,r,n,i,a,o){return n.factory.updateClassExpression(t,i(t.modifiers,r,e.isModifierLike),a(t.name,r,e.isIdentifier),i(t.typeParameters,r,e.isTypeParameterDeclaration),i(t.heritageClauses,r,e.isHeritageClause),i(t.members,r,e.isClassElement))},t[230]=function(t,r,n,i,a,o){return n.factory.updateExpressionWithTypeArguments(t,a(t.expression,r,e.isExpression),i(t.typeArguments,r,e.isTypeNode))},t[231]=function(t,r,n,i,a,o){return n.factory.updateAsExpression(t,a(t.expression,r,e.isExpression),a(t.type,r,e.isTypeNode))},t[235]=function(t,r,n,i,a,o){return n.factory.updateSatisfiesExpression(t,a(t.expression,r,e.isExpression),a(t.type,r,e.isTypeNode))},t[232]=function(t,r,n,i,a,o){return e.isOptionalChain(t)?n.factory.updateNonNullChain(t,a(t.expression,r,e.isExpression)):n.factory.updateNonNullExpression(t,a(t.expression,r,e.isExpression))},t[233]=function(t,r,n,i,a,o){return n.factory.updateMetaProperty(t,a(t.name,r,e.isIdentifier))},t[236]=function(t,r,n,i,a,o){return n.factory.updateTemplateSpan(t,a(t.expression,r,e.isExpression),a(t.literal,r,e.isTemplateMiddleOrTemplateTail))},t[238]=function(t,r,n,i,a,o){return n.factory.updateBlock(t,i(t.statements,r,e.isStatement))},t[240]=function(t,r,n,i,a,o){return n.factory.updateVariableStatement(t,i(t.modifiers,r,e.isModifier),a(t.declarationList,r,e.isVariableDeclarationList))},t[241]=function(t,r,n,i,a,o){return n.factory.updateExpressionStatement(t,a(t.expression,r,e.isExpression))},t[242]=function(t,r,n,i,a,o){return n.factory.updateIfStatement(t,a(t.expression,r,e.isExpression),a(t.thenStatement,r,e.isStatement,n.factory.liftToBlock),a(t.elseStatement,r,e.isStatement,n.factory.liftToBlock))},t[243]=function(t,r,n,i,a,o){return n.factory.updateDoStatement(t,u(t.statement,r,n,a),a(t.expression,r,e.isExpression))},t[244]=function(t,r,n,i,a,o){return n.factory.updateWhileStatement(t,a(t.expression,r,e.isExpression),u(t.statement,r,n,a))},t[245]=function(t,r,n,i,a,o){return n.factory.updateForStatement(t,a(t.initializer,r,e.isForInitializer),a(t.condition,r,e.isExpression),a(t.incrementor,r,e.isExpression),u(t.statement,r,n,a))},t[246]=function(t,r,n,i,a,o){return n.factory.updateForInStatement(t,a(t.initializer,r,e.isForInitializer),a(t.expression,r,e.isExpression),u(t.statement,r,n,a))},t[247]=function(t,r,n,i,a,o){return n.factory.updateForOfStatement(t,a(t.awaitModifier,o,e.isAwaitKeyword),a(t.initializer,r,e.isForInitializer),a(t.expression,r,e.isExpression),u(t.statement,r,n,a))},t[248]=function(t,r,n,i,a,o){return n.factory.updateContinueStatement(t,a(t.label,r,e.isIdentifier))},t[249]=function(t,r,n,i,a,o){return n.factory.updateBreakStatement(t,a(t.label,r,e.isIdentifier))},t[250]=function(t,r,n,i,a,o){return n.factory.updateReturnStatement(t,a(t.expression,r,e.isExpression))},t[251]=function(t,r,n,i,a,o){return n.factory.updateWithStatement(t,a(t.expression,r,e.isExpression),a(t.statement,r,e.isStatement,n.factory.liftToBlock))},t[252]=function(t,r,n,i,a,o){return n.factory.updateSwitchStatement(t,a(t.expression,r,e.isExpression),a(t.caseBlock,r,e.isCaseBlock))},t[253]=function(t,r,n,i,a,o){return n.factory.updateLabeledStatement(t,a(t.label,r,e.isIdentifier),a(t.statement,r,e.isStatement,n.factory.liftToBlock))},t[254]=function(t,r,n,i,a,o){return n.factory.updateThrowStatement(t,a(t.expression,r,e.isExpression))},t[255]=function(t,r,n,i,a,o){return n.factory.updateTryStatement(t,a(t.tryBlock,r,e.isBlock),a(t.catchClause,r,e.isCatchClause),a(t.finallyBlock,r,e.isBlock))},t[257]=function(t,r,n,i,a,o){return n.factory.updateVariableDeclaration(t,a(t.name,r,e.isBindingName),a(t.exclamationToken,o,e.isExclamationToken),a(t.type,r,e.isTypeNode),a(t.initializer,r,e.isExpression))},t[258]=function(t,r,n,i,a,o){return n.factory.updateVariableDeclarationList(t,i(t.declarations,r,e.isVariableDeclaration))},t[259]=function(t,r,n,i,a,s){return n.factory.updateFunctionDeclaration(t,i(t.modifiers,r,e.isModifier),a(t.asteriskToken,s,e.isAsteriskToken),a(t.name,r,e.isIdentifier),i(t.typeParameters,r,e.isTypeParameterDeclaration),o(t.parameters,r,n,i),a(t.type,r,e.isTypeNode),c(t.body,r,n,a))},t[260]=function(t,r,n,i,a,o){return n.factory.updateClassDeclaration(t,i(t.modifiers,r,e.isModifierLike),a(t.name,r,e.isIdentifier),i(t.typeParameters,r,e.isTypeParameterDeclaration),i(t.heritageClauses,r,e.isHeritageClause),i(t.members,r,e.isClassElement))},t[261]=function(t,r,n,i,a,o){return n.factory.updateInterfaceDeclaration(t,i(t.modifiers,r,e.isModifier),a(t.name,r,e.isIdentifier),i(t.typeParameters,r,e.isTypeParameterDeclaration),i(t.heritageClauses,r,e.isHeritageClause),i(t.members,r,e.isTypeElement))},t[262]=function(t,r,n,i,a,o){return n.factory.updateTypeAliasDeclaration(t,i(t.modifiers,r,e.isModifier),a(t.name,r,e.isIdentifier),i(t.typeParameters,r,e.isTypeParameterDeclaration),a(t.type,r,e.isTypeNode))},t[263]=function(t,r,n,i,a,o){return n.factory.updateEnumDeclaration(t,i(t.modifiers,r,e.isModifier),a(t.name,r,e.isIdentifier),i(t.members,r,e.isEnumMember))},t[264]=function(t,r,n,i,a,o){return n.factory.updateModuleDeclaration(t,i(t.modifiers,r,e.isModifier),a(t.name,r,e.isModuleName),a(t.body,r,e.isModuleBody))},t[265]=function(t,r,n,i,a,o){return n.factory.updateModuleBlock(t,i(t.statements,r,e.isStatement))},t[266]=function(t,r,n,i,a,o){return n.factory.updateCaseBlock(t,i(t.clauses,r,e.isCaseOrDefaultClause))},t[267]=function(t,r,n,i,a,o){return n.factory.updateNamespaceExportDeclaration(t,a(t.name,r,e.isIdentifier))},t[268]=function(t,r,n,i,a,o){return n.factory.updateImportEqualsDeclaration(t,i(t.modifiers,r,e.isModifier),t.isTypeOnly,a(t.name,r,e.isIdentifier),a(t.moduleReference,r,e.isModuleReference))},t[269]=function(t,r,n,i,a,o){return n.factory.updateImportDeclaration(t,i(t.modifiers,r,e.isModifier),a(t.importClause,r,e.isImportClause),a(t.moduleSpecifier,r,e.isExpression),a(t.assertClause,r,e.isAssertClause))},t[296]=function(t,r,n,i,a,o){return n.factory.updateAssertClause(t,i(t.elements,r,e.isAssertEntry),t.multiLine)},t[297]=function(t,r,n,i,a,o){return n.factory.updateAssertEntry(t,a(t.name,r,e.isAssertionKey),a(t.value,r,e.isExpression))},t[270]=function(t,r,n,i,a,o){return n.factory.updateImportClause(t,t.isTypeOnly,a(t.name,r,e.isIdentifier),a(t.namedBindings,r,e.isNamedImportBindings))},t[271]=function(t,r,n,i,a,o){return n.factory.updateNamespaceImport(t,a(t.name,r,e.isIdentifier))},t[277]=function(t,r,n,i,a,o){return n.factory.updateNamespaceExport(t,a(t.name,r,e.isIdentifier))},t[272]=function(t,r,n,i,a,o){return n.factory.updateNamedImports(t,i(t.elements,r,e.isImportSpecifier))},t[273]=function(t,r,n,i,a,o){return n.factory.updateImportSpecifier(t,t.isTypeOnly,a(t.propertyName,r,e.isIdentifier),a(t.name,r,e.isIdentifier))},t[274]=function(t,r,n,i,a,o){return n.factory.updateExportAssignment(t,i(t.modifiers,r,e.isModifier),a(t.expression,r,e.isExpression))},t[275]=function(t,r,n,i,a,o){return n.factory.updateExportDeclaration(t,i(t.modifiers,r,e.isModifier),t.isTypeOnly,a(t.exportClause,r,e.isNamedExportBindings),a(t.moduleSpecifier,r,e.isExpression),a(t.assertClause,r,e.isAssertClause))},t[276]=function(t,r,n,i,a,o){return n.factory.updateNamedExports(t,i(t.elements,r,e.isExportSpecifier))},t[278]=function(t,r,n,i,a,o){return n.factory.updateExportSpecifier(t,t.isTypeOnly,a(t.propertyName,r,e.isIdentifier),a(t.name,r,e.isIdentifier))},t[280]=function(t,r,n,i,a,o){return n.factory.updateExternalModuleReference(t,a(t.expression,r,e.isExpression))},t[281]=function(t,r,n,i,a,o){return n.factory.updateJsxElement(t,a(t.openingElement,r,e.isJsxOpeningElement),i(t.children,r,e.isJsxChild),a(t.closingElement,r,e.isJsxClosingElement))},t[282]=function(t,r,n,i,a,o){return n.factory.updateJsxSelfClosingElement(t,a(t.tagName,r,e.isJsxTagNameExpression),i(t.typeArguments,r,e.isTypeNode),a(t.attributes,r,e.isJsxAttributes))},t[283]=function(t,r,n,i,a,o){return n.factory.updateJsxOpeningElement(t,a(t.tagName,r,e.isJsxTagNameExpression),i(t.typeArguments,r,e.isTypeNode),a(t.attributes,r,e.isJsxAttributes))},t[284]=function(t,r,n,i,a,o){return n.factory.updateJsxClosingElement(t,a(t.tagName,r,e.isJsxTagNameExpression))},t[285]=function(t,r,n,i,a,o){return n.factory.updateJsxFragment(t,a(t.openingFragment,r,e.isJsxOpeningFragment),i(t.children,r,e.isJsxChild),a(t.closingFragment,r,e.isJsxClosingFragment))},t[288]=function(t,r,n,i,a,o){return n.factory.updateJsxAttribute(t,a(t.name,r,e.isIdentifier),a(t.initializer,r,e.isStringLiteralOrJsxExpression))},t[289]=function(t,r,n,i,a,o){return n.factory.updateJsxAttributes(t,i(t.properties,r,e.isJsxAttributeLike))},t[290]=function(t,r,n,i,a,o){return n.factory.updateJsxSpreadAttribute(t,a(t.expression,r,e.isExpression))},t[291]=function(t,r,n,i,a,o){return n.factory.updateJsxExpression(t,a(t.expression,r,e.isExpression))},t[292]=function(t,r,n,i,a,o){return n.factory.updateCaseClause(t,a(t.expression,r,e.isExpression),i(t.statements,r,e.isStatement))},t[293]=function(t,r,n,i,a,o){return n.factory.updateDefaultClause(t,i(t.statements,r,e.isStatement))},t[294]=function(t,r,n,i,a,o){return n.factory.updateHeritageClause(t,i(t.types,r,e.isExpressionWithTypeArguments))},t[295]=function(t,r,n,i,a,o){return n.factory.updateCatchClause(t,a(t.variableDeclaration,r,e.isVariableDeclaration),a(t.block,r,e.isBlock))},t[299]=function(t,r,n,i,a,o){return n.factory.updatePropertyAssignment(t,a(t.name,r,e.isPropertyName),a(t.initializer,r,e.isExpression))},t[300]=function(t,r,n,i,a,o){return n.factory.updateShorthandPropertyAssignment(t,a(t.name,r,e.isIdentifier),a(t.objectAssignmentInitializer,r,e.isExpression))},t[301]=function(t,r,n,i,a,o){return n.factory.updateSpreadAssignment(t,a(t.expression,r,e.isExpression))},t[302]=function(t,r,n,i,a,o){return n.factory.updateEnumMember(t,a(t.name,r,e.isPropertyName),a(t.initializer,r,e.isExpression))},t[308]=function(e,t,r,n,i,o){return r.factory.updateSourceFile(e,a(e.statements,t,r))},t[353]=function(t,r,n,i,a,o){return n.factory.updatePartiallyEmittedExpression(t,a(t.expression,r,e.isExpression))},t[354]=function(t,r,n,i,a,o){return n.factory.updateCommaListExpression(t,i(t.elements,r,e.isExpression))},t);function _(t){return e.Debug.assert(t.length<=1,"Too many nodes written to output."),e.singleOrUndefined(t)}}(_||(_={})),function(e){e.createSourceMapGenerator=function(t,r,n,i,o){var s,c,u=o.extendedDiagnostics?e.performance.createTimer("Source Map","beforeSourcemap","afterSourcemap"):e.performance.nullTimer,l=u.enter,_=u.exit,d=[],p=[],f=new e.Map,g=[],m=[],y="",v=0,h=0,b=0,x=0,D=0,S=0,T=!1,C=0,E=0,k=0,N=0,A=0,F=0,P=!1,w=!1,I=!1;return{getSources:function(){return d},addSource:O,setSourceContent:M,addName:L,addMapping:R,appendSourceMap:function(t,r,n,i,o,s){e.Debug.assert(t>=C,"generatedLine cannot backtrack"),e.Debug.assert(r>=0,"generatedCharacter cannot be negative"),l();for(var c,u=[],d=a(n.mappings),p=d.next();!p.done;p=d.next()){var f=p.value;if(s&&(f.generatedLine>s.line||f.generatedLine===s.line&&f.generatedCharacter>s.character))break;if(!o||!(f.generatedLine<o.line||o.line===f.generatedLine&&f.generatedCharacter<o.character)){var g=void 0,m=void 0,y=void 0,v=void 0;if(void 0!==f.sourceIndex){if(void 0===(g=u[f.sourceIndex])){var h=n.sources[f.sourceIndex],b=n.sourceRoot?e.combinePaths(n.sourceRoot,h):h,x=e.combinePaths(e.getDirectoryPath(i),b);u[f.sourceIndex]=g=O(x),n.sourcesContent&&"string"==typeof n.sourcesContent[f.sourceIndex]&&M(g,n.sourcesContent[f.sourceIndex])}m=f.sourceLine,y=f.sourceCharacter,n.names&&void 0!==f.nameIndex&&(c||(c=[]),void 0===(v=c[f.nameIndex])&&(c[f.nameIndex]=v=L(n.names[f.nameIndex])))}var D=f.generatedLine-(o?o.line:0),S=D+t,T=o&&o.line===f.generatedLine?f.generatedCharacter-o.character:f.generatedCharacter;R(S,0===D?T+r:T,g,m,y,v)}}_()},toJSON:z,toString:function(){return JSON.stringify(z())}};function O(r){l();var n=e.getRelativePathToDirectoryOrUrl(i,r,t.getCurrentDirectory(),t.getCanonicalFileName,!0),a=f.get(n);return void 0===a&&(a=p.length,p.push(n),d.push(r),f.set(n,a)),_(),a}function M(e,t){if(l(),null!==t){for(s||(s=[]);s.length<e;)s.push(null);s[e]=t}_()}function L(t){l(),c||(c=new e.Map);var r=c.get(t);return void 0===r&&(r=g.length,g.push(t),c.set(t,r)),_(),r}function R(t,r,n,i,a,o){e.Debug.assert(t>=C,"generatedLine cannot backtrack"),e.Debug.assert(r>=0,"generatedCharacter cannot be negative"),e.Debug.assert(void 0===n||n>=0,"sourceIndex cannot be negative"),e.Debug.assert(void 0===i||i>=0,"sourceLine cannot be negative"),e.Debug.assert(void 0===a||a>=0,"sourceCharacter cannot be negative"),l(),(function(e,t){return!P||C!==e||E!==t}(t,r)||function(e,t,r){return void 0!==e&&void 0!==t&&void 0!==r&&k===e&&(N>t||N===t&&A>r)}(n,i,a))&&(j(),C=t,E=r,w=!1,I=!1,P=!0),void 0!==n&&void 0!==i&&void 0!==a&&(k=n,N=i,A=a,w=!0,void 0!==o&&(F=o,I=!0)),_()}function B(e){m.push(e),m.length>=1024&&J()}function j(){if(P&&(!T||v!==C||h!==E||b!==k||x!==N||D!==A||S!==F)){if(l(),v<C){do{B(59),v++}while(v<C);h=0}else e.Debug.assertEqual(v,C,"generatedLine cannot backtrack"),T&&B(44);U(E-h),h=E,w&&(U(k-b),b=k,U(N-x),x=N,U(A-D),D=A,I&&(U(F-S),S=F)),T=!0,_()}}function J(){m.length>0&&(y+=String.fromCharCode.apply(void 0,m),m.length=0)}function z(){return j(),J(),{version:3,file:r,sourceRoot:n,sources:p,names:g,mappings:y,sourcesContent:s}}function U(t){t<0?t=1+(-t<<1):t<<=1;do{var r=31&t;(t>>=5)>0&&(r|=32),B((n=r)>=0&&n<26?65+n:n>=26&&n<52?97+n-26:n>=52&&n<62?48+n-52:62===n?43:63===n?47:e.Debug.fail("".concat(n,": not a base64 value")))}while(t>0);var n}};var t=/^\/\/[@#] source[M]appingURL=(.+)\r?\n?$/,r=/^\s*(\/\/[@#] .*)?$/;function n(e){return"string"==typeof e||null===e}function i(t){return null!==t&&"object"==typeof t&&3===t.version&&"string"==typeof t.file&&"string"==typeof t.mappings&&e.isArray(t.sources)&&e.every(t.sources,e.isString)&&(void 0===t.sourceRoot||null===t.sourceRoot||"string"==typeof t.sourceRoot)&&(void 0===t.sourcesContent||null===t.sourcesContent||e.isArray(t.sourcesContent)&&e.every(t.sourcesContent,n))&&(void 0===t.names||null===t.names||e.isArray(t.names)&&e.every(t.names,e.isString))}function a(e){var t,r=!1,n=0,i=0,a=0,o=0,s=0,c=0,u=0;return{get pos(){return n},get error(){return t},get state(){return l(!0,!0)},next:function(){for(;!r&&n<e.length;){var t=e.charCodeAt(n);if(59!==t){if(44!==t){var d=!1,y=!1;if(a+=m(),f())return _();if(a<0)return p("Invalid generatedCharacter found");if(!g()){if(d=!0,o+=m(),f())return _();if(o<0)return p("Invalid sourceIndex found");if(g())return p("Unsupported Format: No entries after sourceIndex");if(s+=m(),f())return _();if(s<0)return p("Invalid sourceLine found");if(g())return p("Unsupported Format: No entries after sourceLine");if(c+=m(),f())return _();if(c<0)return p("Invalid sourceCharacter found");if(!g()){if(y=!0,u+=m(),f())return _();if(u<0)return p("Invalid nameIndex found");if(!g())return p("Unsupported Error Format: Entries after nameIndex")}}return{value:l(d,y),done:r}}n++}else i++,a=0,n++}return _()}};function l(e,t){return{generatedLine:i,generatedCharacter:a,sourceIndex:e?o:void 0,sourceLine:e?s:void 0,sourceCharacter:e?c:void 0,nameIndex:t?u:void 0}}function _(){return r=!0,{value:void 0,done:!0}}function d(e){void 0===t&&(t=e)}function p(e){return d(e),_()}function f(){return void 0!==t}function g(){return n===e.length||44===e.charCodeAt(n)||59===e.charCodeAt(n)}function m(){for(var t,r=!0,i=0,a=0;r;n++){if(n>=e.length)return d("Error in decoding base64VLQFormatDecode, past the mapping string"),-1;var o=(t=e.charCodeAt(n))>=65&&t<=90?t-65:t>=97&&t<=122?t-97+26:t>=48&&t<=57?t-48+52:43===t?62:47===t?63:-1;if(-1===o)return d("Invalid character in VLQ"),-1;r=0!=(32&o),a|=(31&o)<<i,i+=5}return 0==(1&a)?a>>=1:a=-(a>>=1),a}}function o(e){return void 0!==e.sourceIndex&&void 0!==e.sourceLine&&void 0!==e.sourceCharacter}function s(e){return void 0!==e.sourceIndex&&void 0!==e.sourcePosition}function c(e,t){return e.generatedPosition===t.generatedPosition&&e.sourceIndex===t.sourceIndex&&e.sourcePosition===t.sourcePosition}function u(t,r){return e.Debug.assert(t.sourceIndex===r.sourceIndex),e.compareValues(t.sourcePosition,r.sourcePosition)}function l(t,r){return e.compareValues(t.generatedPosition,r.generatedPosition)}function _(e){return e.sourcePosition}function d(e){return e.generatedPosition}e.getLineInfo=function(e,t){return{getLineCount:function(){return t.length},getLineText:function(r){return e.substring(t[r],t[r+1])}}},e.tryGetSourceMappingURL=function(n){for(var i=n.getLineCount()-1;i>=0;i--){var a=n.getLineText(i),o=t.exec(a);if(o)return e.trimStringEnd(o[1]);if(!a.match(r))break}},e.isRawSourceMap=i,e.tryParseRawSourceMap=function(e){try{var t=JSON.parse(e);if(i(t))return t}catch(r){}},e.decodeMappings=a,e.sameMapping=function(e,t){return e===t||e.generatedLine===t.generatedLine&&e.generatedCharacter===t.generatedCharacter&&e.sourceIndex===t.sourceIndex&&e.sourceLine===t.sourceLine&&e.sourceCharacter===t.sourceCharacter&&e.nameIndex===t.nameIndex},e.isSourceMapping=o,e.createDocumentPositionMapper=function(t,r,n){var i,p,f,g=e.getDirectoryPath(n),m=r.sourceRoot?e.getNormalizedAbsolutePath(r.sourceRoot,g):g,y=e.getNormalizedAbsolutePath(r.file,g),v=t.getSourceFileLike(y),h=r.sources.map((function(t){return e.getNormalizedAbsolutePath(t,m)})),b=new e.Map(h.map((function(e,r){return[t.getCanonicalFileName(e),r]})));return{getSourcePosition:function(t){var r=T();if(!e.some(r))return t;var n=e.binarySearchKey(r,t.pos,d,e.compareValues);n<0&&(n=~n);var i=r[n];if(void 0===i||!s(i))return t;return{fileName:h[i.sourceIndex],pos:i.sourcePosition}},getGeneratedPosition:function(r){var n=b.get(t.getCanonicalFileName(r.fileName));if(void 0===n)return r;var i=S(n);if(!e.some(i))return r;var a=e.binarySearchKey(i,r.pos,_,e.compareValues);a<0&&(a=~a);var o=i[a];if(void 0===o||o.sourceIndex!==n)return r;return{fileName:y,pos:o.generatedPosition}}};function x(n){var i,a,s=void 0!==v?e.getPositionOfLineAndCharacter(v,n.generatedLine,n.generatedCharacter,!0):-1;if(o(n)){var c=t.getSourceFileLike(h[n.sourceIndex]);i=r.sources[n.sourceIndex],a=void 0!==c?e.getPositionOfLineAndCharacter(c,n.sourceLine,n.sourceCharacter,!0):-1}return{generatedPosition:s,source:i,sourceIndex:n.sourceIndex,sourcePosition:a,nameIndex:n.nameIndex}}function D(){if(void 0===i){var n=a(r.mappings),o=e.arrayFrom(n,x);void 0!==n.error?(t.log&&t.log("Encountered error while decoding sourcemap: ".concat(n.error)),i=e.emptyArray):i=o}return i}function S(t){if(void 0===f){for(var r=[],n=0,i=D();n<i.length;n++){var a=i[n];if(s(a)){var o=r[a.sourceIndex];o||(r[a.sourceIndex]=o=[]),o.push(a)}}f=r.map((function(t){return e.sortAndDeduplicate(t,u,c)}))}return f[t]}function T(){if(void 0===p){for(var t=[],r=0,n=D();r<n.length;r++){var i=n[r];t.push(i)}p=e.sortAndDeduplicate(t,l,c)}return p}},e.identitySourceMapConsumer={getSourcePosition:e.identity,getGeneratedPosition:e.identity}}(_||(_={})),function(e){function t(t){return(t=e.getOriginalNode(t))?e.getNodeId(t):0}function r(e){return void 0!==e.propertyName&&"default"===e.propertyName.escapedText}function n(t){if(e.getNamespaceDeclarationNode(t))return!0;var n=t.importClause&&t.importClause.namedBindings;if(!n)return!1;if(!e.isNamedImports(n))return!1;for(var i=0,a=0,o=n.elements;a<o.length;a++){r(o[a])&&i++}return i>0&&i!==n.elements.length||!!(n.elements.length-i)&&e.isDefaultImport(t)}function i(t){return!n(t)&&(e.isDefaultImport(t)||!!t.importClause&&e.isNamedImports(t.importClause.namedBindings)&&function(t){return!!t&&!!e.isNamedImports(t)&&e.some(t.elements,r)}(t.importClause.namedBindings))}function a(t,r,n){if(e.isBindingPattern(t.name))for(var i=0,o=t.name.elements;i<o.length;i++){var s=o[i];e.isOmittedExpression(s)||(n=a(s,r,n))}else if(!e.isGeneratedIdentifier(t.name)){var c=e.idText(t.name);r.get(c)||(r.set(c,!0),n=e.append(n,t.name))}return n}function o(e,t,r){var n=e[t];return n?n.push(r):e[t]=n=[r],n}function s(t){return e.isStringLiteralLike(t)||8===t.kind||e.isKeyword(t.kind)||e.isIdentifier(t)}function c(t){if(e.isExpressionStatement(t)){var r=e.skipParentheses(t.expression);return e.isSuperCall(r)?r:void 0}}function u(t){return r=t,e.isPropertyDeclaration(r)&&e.hasStaticModifier(r)||e.isClassStaticBlockDeclaration(t);var r}function l(t){var r;if(t)for(var n=t.parameters,i=n.length>0&&e.parameterIsThisKeyword(n[0]),a=i?1:0,o=i?n.length-1:n.length,s=0;s<o;s++){var c=n[s+a];(r||e.hasDecorators(c))&&(r||(r=new Array(o)),r[s]=e.getDecorators(c))}return r}e.getOriginalNodeId=t,e.chainBundle=function(t,r){return function(n){return 308===n.kind?r(n):function(n){return t.factory.createBundle(e.map(n.sourceFiles,r),n.prepends)}(n)}},e.getExportNeedsImportStarHelper=function(t){return!!e.getNamespaceDeclarationNode(t)},e.getImportNeedsImportStarHelper=n,e.getImportNeedsImportDefaultHelper=i,e.collectExternalModuleInfo=function(r,s,c,u){for(var l,_,d=[],p=e.createMultiMap(),f=[],g=new e.Map,m=!1,y=!1,v=!1,h=!1,b=0,x=s.statements;b<x.length;b++){var D=x[b];switch(D.kind){case 269:d.push(D),!v&&n(D)&&(v=!0),!h&&i(D)&&(h=!0);break;case 268:280===D.moduleReference.kind&&d.push(D);break;case 275:if(D.moduleSpecifier)if(D.exportClause)if(d.push(D),e.isNamedExports(D.exportClause))N(D);else{var S=D.exportClause.name;g.get(e.idText(S))||(o(f,t(D),S),g.set(e.idText(S),!0),l=e.append(l,S)),v=!0}else d.push(D),y=!0;else N(D);break;case 274:D.isExportEquals&&!_&&(_=D);break;case 240:if(e.hasSyntacticModifier(D,1))for(var T=0,C=D.declarationList.declarations;T<C.length;T++){var E=C[T];l=a(E,g,l)}break;case 259:if(e.hasSyntacticModifier(D,1))if(e.hasSyntacticModifier(D,1024))m||(o(f,t(D),r.factory.getDeclarationName(D)),m=!0);else{S=D.name;g.get(e.idText(S))||(o(f,t(D),S),g.set(e.idText(S),!0),l=e.append(l,S))}break;case 260:if(e.hasSyntacticModifier(D,1))if(e.hasSyntacticModifier(D,1024))m||(o(f,t(D),r.factory.getDeclarationName(D)),m=!0);else(S=D.name)&&!g.get(e.idText(S))&&(o(f,t(D),S),g.set(e.idText(S),!0),l=e.append(l,S))}}var k=e.createExternalHelpersImportDeclarationIfNeeded(r.factory,r.getEmitHelperFactory(),s,u,y,v,h);return k&&d.unshift(k),{externalImports:d,exportSpecifiers:p,exportEquals:_,hasExportStarsToExportValues:y,exportedBindings:f,exportedNames:l,externalHelpersImportDeclaration:k};function N(r){for(var n=0,i=e.cast(r.exportClause,e.isNamedExports).elements;n<i.length;n++){var a=i[n];if(!g.get(e.idText(a.name))){var s=a.propertyName||a.name;r.moduleSpecifier||p.add(e.idText(s),a);var u=c.getReferencedImportDeclaration(s)||c.getReferencedValueDeclaration(s);u&&o(f,t(u),a.name),g.set(e.idText(a.name),!0),l=e.append(l,a.name)}}}},e.isSimpleCopiableExpression=s,e.isSimpleInlineableExpression=function(t){return!e.isIdentifier(t)&&s(t)},e.isCompoundAssignment=function(e){return e>=64&&e<=78},e.getNonAssignmentOperatorForCompoundAssignment=function(e){switch(e){case 64:return 39;case 65:return 40;case 66:return 41;case 67:return 42;case 68:return 43;case 69:return 44;case 70:return 47;case 71:return 48;case 72:return 49;case 73:return 50;case 74:return 51;case 78:return 52;case 75:return 56;case 76:return 55;case 77:return 60}},e.getSuperCallFromStatement=c,e.findSuperStatementIndex=function(e,t){for(var r=t;r<e.length;r+=1){if(c(e[r]))return r}return-1},e.getProperties=function(t,r,n){return e.filter(t.members,(function(t){return function(t,r,n){return e.isPropertyDeclaration(t)&&(!!t.initializer||!r)&&e.hasStaticModifier(t)===n}(t,r,n)}))},e.getStaticPropertiesAndClassStaticBlock=function(t){return e.filter(t.members,u)},e.isInitializedProperty=function(e){return 169===e.kind&&void 0!==e.initializer},e.isNonStaticMethodOrAccessorWithPrivateName=function(t){return!e.isStatic(t)&&(e.isMethodOrAccessor(t)||e.isAutoAccessorPropertyDeclaration(t))&&e.isPrivateIdentifier(t.name)},e.getAllDecoratorsOfClass=function(t){var r=e.getDecorators(t),n=l(e.getFirstConstructorWithBody(t));if(e.some(r)||e.some(n))return{decorators:r,parameters:n}},e.getAllDecoratorsOfClassElement=function(t,r){switch(t.kind){case 174:case 175:return function(t,r){if(!t.body)return;var n=e.getAllAccessorDeclarations(r.members,t),i=n.firstAccessor,a=n.secondAccessor,o=n.getAccessor,s=n.setAccessor,c=e.hasDecorators(i)?i:a&&e.hasDecorators(a)?a:void 0;if(!c||t!==c)return;var u=e.getDecorators(c),_=l(s);if(!e.some(u)&&!e.some(_))return;return{decorators:u,parameters:_,getDecorators:o&&e.getDecorators(o),setDecorators:s&&e.getDecorators(s)}}(t,r);case 171:return function(t){if(!t.body)return;var r=e.getDecorators(t),n=l(t);if(!e.some(r)&&!e.some(n))return;return{decorators:r,parameters:n}}(t);case 169:return function(t){var r=e.getDecorators(t);if(!e.some(r))return;return{decorators:r}}(t);default:return}}}(_||(_={})),function(e){function t(r,n){var i=e.getTargetOfBindingOrAssignmentElement(r);return e.isBindingOrAssignmentPattern(i)?function(r,n){for(var i=e.getElementsOfBindingOrAssignmentPattern(r),a=0,o=i;a<o.length;a++){if(t(o[a],n))return!0}return!1}(i,n):!!e.isIdentifier(i)&&i.escapedText===n}function r(t){var n=e.tryGetPropertyNameOfBindingOrAssignmentElement(t);if(n&&e.isComputedPropertyName(n)&&!e.isLiteralExpression(n.expression))return!0;var i,a=e.getTargetOfBindingOrAssignmentElement(t);return!!a&&e.isBindingOrAssignmentPattern(a)&&(i=a,!!e.forEach(e.getElementsOfBindingOrAssignmentPattern(i),r))}function n(t,r,s,c,u){var l=e.getTargetOfBindingOrAssignmentElement(r);if(!u){var _=e.visitNode(e.getInitializerOfBindingOrAssignmentElement(r),t.visitor,e.isExpression);_?s?(s=function(e,t,r,n){return t=o(e,t,!0,n),e.context.factory.createConditionalExpression(e.context.factory.createTypeCheck(t,"undefined"),void 0,r,void 0,t)}(t,s,_,c),!e.isSimpleInlineableExpression(_)&&e.isBindingOrAssignmentPattern(l)&&(s=o(t,s,!0,c))):s=_:s||(s=t.context.factory.createVoidZero())}e.isObjectBindingOrAssignmentPattern(l)?function(t,r,i,s,c){var u,l,_=e.getElementsOfBindingOrAssignmentPattern(i),d=_.length;if(1!==d){s=o(t,s,!e.isDeclarationBindingElement(r)||0!==d,c)}for(var p=0;p<d;p++){var f=_[p];if(e.getRestIndicatorOfBindingOrAssignmentElement(f)){if(p===d-1){u&&(t.emitBindingOrAssignment(t.createObjectBindingOrAssignmentPattern(u),s,c,i),u=void 0);m=t.context.getEmitHelperFactory().createRestHelper(s,_,l,i);n(t,f,m,f)}}else{var g=e.getPropertyNameOfBindingOrAssignmentElement(f);if(!(t.level>=1)||98304&f.transformFlags||98304&e.getTargetOfBindingOrAssignmentElement(f).transformFlags||e.isComputedPropertyName(g)){u&&(t.emitBindingOrAssignment(t.createObjectBindingOrAssignmentPattern(u),s,c,i),u=void 0);var m=a(t,s,g);e.isComputedPropertyName(g)&&(l=e.append(l,m.argumentExpression)),n(t,f,m,f)}else u=e.append(u,e.visitNode(f,t.visitor))}}u&&t.emitBindingOrAssignment(t.createObjectBindingOrAssignmentPattern(u),s,c,i)}(t,r,l,s,c):e.isArrayBindingOrAssignmentPattern(l)?function(t,r,a,s,c){var u,l,_=e.getElementsOfBindingOrAssignmentPattern(a),d=_.length;if(t.level<1&&t.downlevelIteration)s=o(t,e.setTextRange(t.context.getEmitHelperFactory().createReadHelper(s,d>0&&e.getRestIndicatorOfBindingOrAssignmentElement(_[d-1])?void 0:d),c),!1,c);else if(1!==d&&(t.level<1||0===d)||e.every(_,e.isOmittedExpression)){s=o(t,s,!e.isDeclarationBindingElement(r)||0!==d,c)}for(var p=0;p<d;p++){var f=_[p];if(t.level>=1)if(65536&f.transformFlags||t.hasTransformedPriorElement&&!i(f)){t.hasTransformedPriorElement=!0;var g=t.context.factory.createTempVariable(void 0);t.hoistTempVariables&&t.context.hoistVariableDeclaration(g),l=e.append(l,[g,f]),u=e.append(u,t.createArrayBindingOrAssignmentElement(g))}else u=e.append(u,f);else{if(e.isOmittedExpression(f))continue;if(e.getRestIndicatorOfBindingOrAssignmentElement(f)){if(p===d-1){m=t.context.factory.createArraySliceCall(s,p);n(t,f,m,f)}}else{var m=t.context.factory.createElementAccessExpression(s,p);n(t,f,m,f)}}}u&&t.emitBindingOrAssignment(t.createArrayBindingOrAssignmentPattern(u),s,c,a);if(l)for(var y=0,v=l;y<v.length;y++){var h=v[y],b=h[0];n(t,f=h[1],b,f)}}(t,r,l,s,c):t.emitBindingOrAssignment(l,s,c,r)}function i(t){var r=e.getTargetOfBindingOrAssignmentElement(t);if(!r||e.isOmittedExpression(r))return!0;var n=e.tryGetPropertyNameOfBindingOrAssignmentElement(t);if(n&&!e.isPropertyNameLiteral(n))return!1;var a=e.getInitializerOfBindingOrAssignmentElement(t);return!(a&&!e.isSimpleInlineableExpression(a))&&(e.isBindingOrAssignmentPattern(r)?e.every(e.getElementsOfBindingOrAssignmentPattern(r),i):e.isIdentifier(r))}function a(t,r,n){if(e.isComputedPropertyName(n)){var i=o(t,e.visitNode(n.expression,t.visitor),!1,n);return t.context.factory.createElementAccessExpression(r,i)}if(e.isStringOrNumericLiteralLike(n)){i=e.factory.cloneNode(n);return t.context.factory.createElementAccessExpression(r,i)}var a=t.context.factory.createIdentifier(e.idText(n));return t.context.factory.createPropertyAccessExpression(r,a)}function o(t,r,n,i){if(e.isIdentifier(r)&&n)return r;var a=t.context.factory.createTempVariable(void 0);return t.hoistTempVariables?(t.context.hoistVariableDeclaration(a),t.emitExpression(e.setTextRange(t.context.factory.createAssignment(a,r),i))):t.emitBindingOrAssignment(a,r,i,void 0),a}function s(e){return e}!function(e){e[e.All=0]="All",e[e.ObjectRest=1]="ObjectRest"}(e.FlattenLevel||(e.FlattenLevel={})),e.flattenDestructuringAssignment=function(i,a,c,u,l,_){var d,p,f=i;if(e.isDestructuringAssignment(i))for(d=i.right;e.isEmptyArrayLiteral(i.left)||e.isEmptyObjectLiteral(i.left);){if(!e.isDestructuringAssignment(d))return e.visitNode(d,a,e.isExpression);f=i=d,d=i.right}var g={context:c,level:u,downlevelIteration:!!c.getCompilerOptions().downlevelIteration,hoistTempVariables:!0,emitExpression:m,emitBindingOrAssignment:function(t,r,n,i){e.Debug.assertNode(t,_?e.isIdentifier:e.isExpression);var o=_?_(t,r,n):e.setTextRange(c.factory.createAssignment(e.visitNode(t,a,e.isExpression),r),n);o.original=i,m(o)},createArrayBindingOrAssignmentPattern:function(t){return function(t,r){return t.createArrayLiteralExpression(e.map(r,t.converters.convertToArrayAssignmentElement))}(c.factory,t)},createObjectBindingOrAssignmentPattern:function(t){return function(t,r){return t.createObjectLiteralExpression(e.map(r,t.converters.convertToObjectAssignmentElement))}(c.factory,t)},createArrayBindingOrAssignmentElement:s,visitor:a};if(d&&(d=e.visitNode(d,a,e.isExpression),e.isIdentifier(d)&&t(i,d.escapedText)||r(i)?d=o(g,d,!1,f):l?d=o(g,d,!0,f):e.nodeIsSynthesized(i)&&(f=d)),n(g,i,d,f,e.isDestructuringAssignment(i)),d&&l){if(!e.some(p))return d;p.push(d)}return c.factory.inlineExpressions(p)||c.factory.createOmittedExpression();function m(t){p=e.append(p,t)}},e.flattenDestructuringBinding=function(i,a,s,c,u,l,_){var d;void 0===l&&(l=!1);var p=[],f=[],g={context:s,level:c,downlevelIteration:!!s.getCompilerOptions().downlevelIteration,hoistTempVariables:l,emitExpression:function(t){d=e.append(d,t)},emitBindingOrAssignment:N,createArrayBindingOrAssignmentPattern:function(t){return function(t,r){return e.Debug.assertEachNode(r,e.isArrayBindingElement),t.createArrayBindingPattern(r)}(s.factory,t)},createObjectBindingOrAssignmentPattern:function(t){return function(t,r){return e.Debug.assertEachNode(r,e.isBindingElement),t.createObjectBindingPattern(r)}(s.factory,t)},createArrayBindingOrAssignmentElement:function(e){return function(e,t){return e.createBindingElement(void 0,void 0,t)}(s.factory,e)},visitor:a};if(e.isVariableDeclaration(i)){var m=e.getInitializerOfBindingOrAssignmentElement(i);m&&(e.isIdentifier(m)&&t(i,m.escapedText)||r(i))&&(m=o(g,e.visitNode(m,g.visitor),!1,m),i=s.factory.updateVariableDeclaration(i,i.name,void 0,void 0,m))}if(n(g,i,u,i,_),d){var y=s.factory.createTempVariable(void 0);if(l){var v=s.factory.inlineExpressions(d);d=void 0,N(y,v,void 0,void 0)}else{s.hoistVariableDeclaration(y);var h=e.last(p);h.pendingExpressions=e.append(h.pendingExpressions,s.factory.createAssignment(y,h.value)),e.addRange(h.pendingExpressions,d),h.value=y}}for(var b=0,x=p;b<x.length;b++){var D=x[b],S=D.pendingExpressions,T=D.name,C=(v=D.value,D.location),E=D.original,k=s.factory.createVariableDeclaration(T,void 0,void 0,S?s.factory.inlineExpressions(e.append(S,v)):v);k.original=E,e.setTextRange(k,C),f.push(k)}return f;function N(t,r,n,i){e.Debug.assertNode(t,e.isBindingName),d&&(r=s.factory.inlineExpressions(e.append(d,r)),d=void 0),p.push({pendingExpressions:d,name:t,value:r,location:n,original:i})}}}(_||(_={})),function(e){var t;function r(t){return t.templateFlags?e.factory.createVoidZero():e.factory.createStringLiteral(t.text)}function n(t,r){var n=t.rawText;if(void 0===n){e.Debug.assertIsDefined(r,"Template literal node is missing 'rawText' and does not have a source file. Possibly bad transform."),n=e.getSourceTextOfNodeFromSourceFile(r,t);var i=14===t.kind||17===t.kind;n=n.substring(1,n.length-(i?1:2))}return n=n.replace(/\r\n?/g,"\n"),e.setTextRange(e.factory.createStringLiteral(n),t)}!function(e){e[e.LiftRestriction=0]="LiftRestriction",e[e.All=1]="All"}(t=e.ProcessLevel||(e.ProcessLevel={})),e.processTaggedTemplateExpression=function(i,a,o,s,c,u){var l=e.visitNode(a.tag,o,e.isExpression),_=[void 0],d=[],p=[],f=a.template;if(u===t.LiftRestriction&&!e.hasInvalidEscape(f))return e.visitEachChild(a,o,i);if(e.isNoSubstitutionTemplateLiteral(f))d.push(r(f)),p.push(n(f,s));else{d.push(r(f.head)),p.push(n(f.head,s));for(var g=0,m=f.templateSpans;g<m.length;g++){var y=m[g];d.push(r(y.literal)),p.push(n(y.literal,s)),_.push(e.visitNode(y.expression,o,e.isExpression))}}var v=i.getEmitHelperFactory().createTemplateObjectHelper(e.factory.createArrayLiteralExpression(d),e.factory.createArrayLiteralExpression(p));if(e.isExternalModule(s)){var h=e.factory.createUniqueName("templateObject");c(h),_[0]=e.factory.createLogicalOr(h,e.factory.createAssignment(h,v))}else _[0]=v;return e.factory.createCallExpression(l,void 0,_)}}(_||(_={})),function(e){var t,r;!function(e){e[e.NamespaceExports=2]="NamespaceExports",e[e.NonQualifiedEnumMembers=8]="NonQualifiedEnumMembers"}(t||(t={})),function(e){e[e.None=0]="None",e[e.HasStaticInitializedProperties=1]="HasStaticInitializedProperties",e[e.HasConstructorDecorators=2]="HasConstructorDecorators",e[e.HasMemberDecorators=4]="HasMemberDecorators",e[e.IsExportOfNamespace=8]="IsExportOfNamespace",e[e.IsNamedExternalExport=16]="IsNamedExternalExport",e[e.IsDefaultExternalExport=32]="IsDefaultExternalExport",e[e.IsDerivedClass=64]="IsDerivedClass",e[e.UseImmediatelyInvokedFunctionExpression=128]="UseImmediatelyInvokedFunctionExpression",e[e.HasAnyDecorators=6]="HasAnyDecorators",e[e.NeedsName=5]="NeedsName",e[e.MayNeedImmediatelyInvokedFunctionExpression=7]="MayNeedImmediatelyInvokedFunctionExpression",e[e.IsExported=56]="IsExported"}(r||(r={})),e.transformTypeScript=function(t){var r,n,i,o,s,c,u,l,_=t.factory,d=t.getEmitHelperFactory,p=t.startLexicalEnvironment,f=t.resumeLexicalEnvironment,g=t.endLexicalEnvironment,m=t.hoistVariableDeclaration,y=t.getEmitResolver(),v=t.getCompilerOptions(),h=e.getEmitScriptTarget(v),b=e.getEmitModuleKind(v),x=v.emitDecoratorMetadata?e.createRuntimeTypeSerializer(t):void 0,D=t.onEmitNode,S=t.onSubstituteNode;return t.onEmitNode=function(t,n,i){var a=l,o=r;e.isSourceFile(n)&&(r=n);2&u&&function(t){return 264===e.getOriginalNode(t).kind}(n)&&(l|=2);8&u&&function(t){return 263===e.getOriginalNode(t).kind}(n)&&(l|=8);D(t,n,i),l=a,r=o},t.onSubstituteNode=function(t,r){if(r=S(t,r),1===t)return function(e){switch(e.kind){case 79:return function(e){return he(e)||e}(e);case 208:case 209:return function(e){return be(e)}(e)}return e}(r);if(e.isShorthandPropertyAssignment(r))return function(t){if(2&u){var r=t.name,n=he(r);if(n){if(t.objectAssignmentInitializer){var i=_.createAssignment(n,t.objectAssignmentInitializer);return e.setTextRange(_.createPropertyAssignment(r,i),t)}return e.setTextRange(_.createPropertyAssignment(r,n),t)}}return t}(r);return r},t.enableSubstitution(208),t.enableSubstitution(209),function(t){if(309===t.kind)return function(t){return _.createBundle(t.sourceFiles.map(T),e.mapDefined(t.prepends,(function(t){return 311===t.kind?e.createUnparsedSourceFile(t,"js"):t})))}(t);return T(t)};function T(n){if(n.isDeclarationFile)return n;r=n;var i=C(n,L);return e.addEmitHelpers(i,t.readEmitHelpers()),r=void 0,i}function C(t,r){var n=o,i=s,a=c;!function(t){switch(t.kind){case 308:case 266:case 265:case 238:o=t,s=void 0;break;case 260:case 259:if(e.hasSyntacticModifier(t,2))break;t.name?te(t):e.Debug.assert(260===t.kind||e.hasSyntacticModifier(t,1024))}}(t);var u=r(t);return o!==n&&(s=i),o=n,c=a,u}function E(e){return C(e,k)}function k(e){return 1&e.transformFlags?M(e):e}function N(e){return C(e,A)}function A(r){switch(r.kind){case 269:case 268:case 274:case 275:return function(r){var n=e.getParseTreeNode(r);if(n!==r)return 1&r.transformFlags?e.visitEachChild(r,E,t):r;switch(r.kind){case 269:return function(t){if(!t.importClause)return t;if(t.importClause.isTypeOnly)return;var r=e.visitNode(t.importClause,oe,e.isImportClause);return r||1===v.importsNotUsedAsValues||2===v.importsNotUsedAsValues?_.updateImportDeclaration(t,void 0,r,t.moduleSpecifier,t.assertClause):void 0}(r);case 268:return le(r);case 274:return function(r){return y.isValueAliasDeclaration(r)?e.visitEachChild(r,E,t):void 0}(r);case 275:return function(t){if(t.isTypeOnly)return;if(!t.exportClause||e.isNamespaceExport(t.exportClause))return t;var r=!!t.moduleSpecifier&&(1===v.importsNotUsedAsValues||2===v.importsNotUsedAsValues),n=e.visitNode(t.exportClause,(function(t){return function(t,r){return e.isNamespaceExport(t)?function(t){return _.updateNamespaceExport(t,e.visitNode(t.name,E,e.isIdentifier))}(t):function(t,r){var n=e.visitNodes(t.elements,ue,e.isExportSpecifier);return r||e.some(n)?_.updateNamedExports(t,n):void 0}(t,r)}(t,r)}),e.isNamedExportBindings);return n?_.updateExportDeclaration(t,void 0,t.isTypeOnly,n,t.moduleSpecifier,t.assertClause):void 0}(r);default:e.Debug.fail("Unhandled ellided statement")}}(r);default:return k(r)}}function F(e){return C(e,P)}function P(t){if(275!==t.kind&&269!==t.kind&&270!==t.kind&&(268!==t.kind||280!==t.moduleReference.kind))return 1&t.transformFlags||e.hasSyntacticModifier(t,1)?M(t):t}function w(r){return function(n){return C(n,(function(n){return function(r,n){switch(r.kind){case 173:return function(r){if(!W(r))return;return _.updateConstructorDeclaration(r,void 0,e.visitParameterList(r.parameters,E,t),function(r,n){var i=n&&e.filter(n.parameters,(function(t){return e.isParameterPropertyDeclaration(t,n)}));if(!e.some(i))return e.visitFunctionBody(r,E,t);var o=[];f();var s=_.copyPrologue(r.statements,o,!1,E),c=e.findSuperStatementIndex(r.statements,s);c>=0&&e.addRange(o,e.visitNodes(r.statements,E,e.isStatement,s,c+1-s));var u=e.mapDefined(i,H);c>=0?e.addRange(o,u):o=a(a(a([],o.slice(0,s),!0),u,!0),o.slice(s),!0);var l=c>=0?c+1:s;e.addRange(o,e.visitNodes(r.statements,E,e.isStatement,l)),o=_.mergeLexicalEnvironment(o,g());var d=_.createBlock(e.setTextRange(_.createNodeArray(o),r.statements),!0);return e.setTextRange(d,r),e.setOriginalNode(d,r),d}(r.body,r))}(r);case 169:return function(t,r){var n=16777216&t.flags||e.hasSyntacticModifier(t,256);if(n&&!e.hasDecorators(t))return;var i=e.getAllDecoratorsOfClassElement(t,r),a=J(t,r,i);if(n)return _.updatePropertyDeclaration(t,e.concatenate(a,_.createModifiersFromModifierFlags(2)),e.visitNode(t.name,E,e.isPropertyName),void 0,void 0,void 0);return _.updatePropertyDeclaration(t,e.concatenate(a,e.visitNodes(t.modifiers,O,e.isModifierLike)),q(t),void 0,void 0,e.visitNode(t.initializer,E))}(r,n);case 174:return X(r,n);case 175:return Y(r,n);case 171:return G(r,n);case 172:return e.visitEachChild(r,E,t);case 237:return r;case 178:return;default:return e.Debug.failBadSyntaxKind(r)}}(n,r)}))}}function I(t){return function(r){return C(r,(function(r){return function(t,r){switch(t.kind){case 299:case 300:case 301:return E(t);case 174:return X(t,r);case 175:return Y(t,r);case 171:return G(t,r);default:return e.Debug.failBadSyntaxKind(t)}}(r,t)}))}}function O(t){if(!e.isDecorator(t)&&!(117086&e.modifierToFlag(t.kind)||n&&93===t.kind))return t}function M(a){if(e.isStatement(a)&&e.hasSyntacticModifier(a,2))return _.createNotEmittedStatement(a);switch(a.kind){case 93:case 88:return n?void 0:a;case 123:case 121:case 122:case 126:case 161:case 85:case 136:case 146:case 101:case 145:case 185:case 186:case 187:case 188:case 184:case 179:case 165:case 131:case 157:case 134:case 152:case 148:case 144:case 114:case 153:case 182:case 181:case 183:case 180:case 189:case 190:case 191:case 193:case 194:case 195:case 196:case 197:case 198:case 178:case 267:return;case 262:case 261:return _.createNotEmittedStatement(a);case 260:return function(i){if(!(B(i)||n&&e.hasSyntacticModifier(i,1)))return _.updateClassDeclaration(i,e.visitNodes(i.modifiers,O,e.isModifier),i.name,void 0,e.visitNodes(i.heritageClauses,E,e.isHeritageClause),e.visitNodes(i.members,w(i),e.isClassElement));var a=e.getProperties(i,!0,!0),o=function(t,r){var n=0;e.some(r)&&(n|=1);var i=e.getEffectiveBaseTypeNode(t);i&&104!==e.skipOuterExpressions(i.expression).kind&&(n|=64);e.classOrConstructorParameterIsDecorated(t)&&(n|=2);e.childIsDecorated(t)&&(n|=4);_e(t)?n|=8:!function(t){return de(t)&&e.hasSyntacticModifier(t,1024)}(t)?pe(t)&&(n|=16):n|=32;h<=1&&7&n&&(n|=128);return n}(i,a);128&o&&t.startLexicalEnvironment();var s=i.name||(5&o?_.getGeneratedNameForNode(i):void 0),c=e.getAllDecoratorsOfClass(i),u=J(i,i,c),l=128&o?e.elideNodes(_,i.modifiers):e.visitNodes(i.modifiers,O,e.isModifier),d=_.updateClassDeclaration(i,e.concatenate(u,l),s,void 0,e.visitNodes(i.heritageClauses,E,e.isHeritageClause),j(i)),p=e.getEmitFlags(i);1&o&&(p|=32);e.setEmitFlags(d,p);var f=[d];if(128&o){var g=e.createTokenRange(e.skipTrivia(r.text,i.members.end),19),m=_.getInternalName(i),y=_.createPartiallyEmittedExpression(m);e.setTextRangeEnd(y,g.end),e.setEmitFlags(y,1536);var v=_.createReturnStatement(y);e.setTextRangePos(v,g.pos),e.setEmitFlags(v,1920),f.push(v),e.insertStatementsAfterStandardPrologue(f,t.endLexicalEnvironment());var b=_.createImmediatelyInvokedArrowFunction(f);e.setEmitFlags(b,33554432);var x=_.createVariableStatement(void 0,_.createVariableDeclarationList([_.createVariableDeclaration(_.getLocalName(i,!1,!1),void 0,void 0,b)]));e.setOriginalNode(x,i),e.setCommentRange(x,i),e.setSourceMapRange(x,e.moveRangePastDecorators(i)),e.startOnNewLine(x),f=[x]}8&o?fe(f,i):(128&o||2&o)&&(32&o?f.push(_.createExportDefault(_.getLocalName(i,!1,!0))):16&o&&f.push(_.createExternalModuleExport(_.getLocalName(i,!1,!0))));f.length>1&&(f.push(_.createEndOfDeclarationMarker(i)),e.setEmitFlags(d,4194304|e.getEmitFlags(d)));return e.singleOrMany(f)}(a);case 228:return function(t){var r=e.getAllDecoratorsOfClass(t),n=J(t,t,r);return _.updateClassExpression(t,n,t.name,void 0,e.visitNodes(t.heritageClauses,E,e.isHeritageClause),B(t)?j(t):e.visitNodes(t.members,w(t),e.isClassElement))}(a);case 294:return function(r){if(117===r.token)return;return e.visitEachChild(r,E,t)}(a);case 230:return function(t){return _.updateExpressionWithTypeArguments(t,e.visitNode(t.expression,E,e.isLeftHandSideExpression),void 0)}(a);case 207:return function(t){return _.updateObjectLiteralExpression(t,e.visitNodes(t.properties,I(t),e.isObjectLiteralElement))}(a);case 173:case 169:case 171:case 174:case 175:case 172:return e.Debug.fail("Class and object literal elements must be visited with their respective visitors");case 259:return function(r){if(!W(r))return _.createNotEmittedStatement(r);var n=_.updateFunctionDeclaration(r,e.visitNodes(r.modifiers,O,e.isModifier),r.asteriskToken,r.name,void 0,e.visitParameterList(r.parameters,E,t),void 0,e.visitFunctionBody(r.body,E,t)||_.createBlock([]));if(_e(r)){var i=[n];return fe(i,r),i}return n}(a);case 215:return function(r){if(!W(r))return _.createOmittedExpression();var n=_.updateFunctionExpression(r,e.visitNodes(r.modifiers,O,e.isModifier),r.asteriskToken,r.name,void 0,e.visitParameterList(r.parameters,E,t),void 0,e.visitFunctionBody(r.body,E,t)||_.createBlock([]));return n}(a);case 216:return function(r){var n=_.updateArrowFunction(r,e.visitNodes(r.modifiers,O,e.isModifier),void 0,e.visitParameterList(r.parameters,E,t),void 0,r.equalsGreaterThanToken,e.visitFunctionBody(r.body,E,t));return n}(a);case 166:return function(t){if(e.parameterIsThisKeyword(t))return;var r=_.updateParameterDeclaration(t,e.elideNodes(_,t.modifiers),t.dotDotDotToken,e.visitNode(t.name,E,e.isBindingName),void 0,void 0,e.visitNode(t.initializer,E,e.isExpression));r!==t&&(e.setCommentRange(r,t),e.setTextRange(r,e.moveRangePastModifiers(t)),e.setSourceMapRange(r,e.moveRangePastModifiers(t)),e.setEmitFlags(r.name,32));return r}(a);case 214:return function(r){var n=e.skipOuterExpressions(r.expression,-7);if(e.isAssertionExpression(n)){var i=e.visitNode(r.expression,E,e.isExpression);return _.createPartiallyEmittedExpression(i,r)}return e.visitEachChild(r,E,t)}(a);case 213:case 231:return function(t){var r=e.visitNode(t.expression,E,e.isExpression);return _.createPartiallyEmittedExpression(r,t)}(a);case 235:return function(t){var r=e.visitNode(t.expression,E,e.isExpression);return _.createPartiallyEmittedExpression(r,t)}(a);case 210:return function(t){return _.updateCallExpression(t,e.visitNode(t.expression,E,e.isExpression),void 0,e.visitNodes(t.arguments,E,e.isExpression))}(a);case 211:return function(t){return _.updateNewExpression(t,e.visitNode(t.expression,E,e.isExpression),void 0,e.visitNodes(t.arguments,E,e.isExpression))}(a);case 212:return function(t){return _.updateTaggedTemplateExpression(t,e.visitNode(t.tag,E,e.isExpression),void 0,e.visitNode(t.template,E,e.isExpression))}(a);case 232:return function(t){var r=e.visitNode(t.expression,E,e.isLeftHandSideExpression);return _.createPartiallyEmittedExpression(r,t)}(a);case 263:return function(t){if(!function(t){return!e.isEnumConst(t)||e.shouldPreserveConstEnums(v)}(t))return _.createNotEmittedStatement(t);var n=[],a=2,s=ne(n,t);s&&(b===e.ModuleKind.System&&o===r||(a|=512));var c=ye(t),u=ve(t),l=e.hasSyntacticModifier(t,1)?_.getExternalModuleOrNamespaceExportName(i,t,!1,!0):_.getLocalName(t,!1,!0),d=_.createLogicalOr(l,_.createAssignment(l,_.createObjectLiteralExpression()));if(ee(t)){var f=_.getLocalName(t,!1,!0);d=_.createAssignment(f,d)}var m=_.createExpressionStatement(_.createCallExpression(_.createFunctionExpression(void 0,void 0,void 0,void 0,[_.createParameterDeclaration(void 0,void 0,c)],void 0,function(t,r){var n=i;i=r;var a=[];p();var o=e.map(t.members,$);return e.insertStatementsAfterStandardPrologue(a,g()),e.addRange(a,o),i=n,_.createBlock(e.setTextRange(_.createNodeArray(a),t.members),!0)}(t,u)),void 0,[d]));e.setOriginalNode(m,t),s&&(e.setSyntheticLeadingComments(m,void 0),e.setSyntheticTrailingComments(m,void 0));return e.setTextRange(m,t),e.addEmitFlags(m,a),n.push(m),n.push(_.createEndOfDeclarationMarker(t)),n}(a);case 240:return function(r){if(_e(r)){var n=e.getInitializedVariables(r.declarationList);if(0===n.length)return;return e.setTextRange(_.createExpressionStatement(_.inlineExpressions(e.map(n,Z))),r)}return e.visitEachChild(r,E,t)}(a);case 257:return function(t){var r=_.updateVariableDeclaration(t,e.visitNode(t.name,E,e.isBindingName),void 0,void 0,e.visitNode(t.initializer,E,e.isExpression));t.type&&e.setTypeNode(r.name,t.type);return r}(a);case 264:return ie(a);case 268:return le(a);case 282:return function(t){return _.updateJsxSelfClosingElement(t,e.visitNode(t.tagName,E,e.isJsxTagNameExpression),void 0,e.visitNode(t.attributes,E,e.isJsxAttributes))}(a);case 283:return function(t){return _.updateJsxOpeningElement(t,e.visitNode(t.tagName,E,e.isJsxTagNameExpression),void 0,e.visitNode(t.attributes,E,e.isJsxAttributes))}(a);default:return e.visitEachChild(a,E,t)}}function L(r){var n=e.getStrictOptionValue(v,"alwaysStrict")&&!(e.isExternalModule(r)&&b>=e.ModuleKind.ES2015)&&!e.isJsonSourceFile(r);return _.updateSourceFile(r,e.visitLexicalEnvironment(r.statements,N,t,0,n))}function R(e){return!!(8192&e.transformFlags)}function B(t){return e.hasDecorators(t)||e.some(t.typeParameters)||e.some(t.heritageClauses,R)||e.some(t.members,R)}function j(t){var r=[],n=e.getFirstConstructorWithBody(t),i=n&&e.filter(n.parameters,(function(t){return e.isParameterPropertyDeclaration(t,n)}));if(i)for(var a=0,o=i;a<o.length;a++){var s=o[a];e.isIdentifier(s.name)&&r.push(e.setOriginalNode(_.createPropertyDeclaration(void 0,s.name,void 0,void 0,void 0),s))}return e.addRange(r,e.visitNodes(t.members,w(t),e.isClassElement)),e.setTextRange(_.createNodeArray(r),t.members)}function J(t,r,n){var i,a,s,c;if(n){var u=e.visitArray(n.decorators,E,e.isDecorator),l=e.flatMap(n.parameters,z),p=e.some(u)||e.some(l)?function(t,r){return function(t,r){if(x){var n=void 0;if(U(t)){var i=d().createMetadataHelper("design:type",x.serializeTypeOfNode({currentLexicalScope:o,currentNameScope:r},t));n=e.append(n,_.createDecorator(i))}if(V(t)){var a=d().createMetadataHelper("design:paramtypes",x.serializeParameterTypesOfNode({currentLexicalScope:o,currentNameScope:r},t,r));n=e.append(n,_.createDecorator(a))}if(K(t)){var s=d().createMetadataHelper("design:returntype",x.serializeReturnTypeOfNode({currentLexicalScope:o,currentNameScope:r},t));n=e.append(n,_.createDecorator(s))}return n}}(t,r)}(t,r):void 0,f=_.createNodeArray(e.concatenate(e.concatenate(u,l),p)),g=null!==(a=null===(i=e.firstOrUndefined(n.decorators))||void 0===i?void 0:i.pos)&&void 0!==a?a:-1,m=null!==(c=null===(s=e.lastOrUndefined(n.decorators))||void 0===s?void 0:s.end)&&void 0!==c?c:-1;return e.setTextRangePosEnd(f,g,m),f}}function z(t,r){if(t){for(var n=[],i=0,a=t;i<a.length;i++){var o=a[i],s=e.visitNode(o.expression,E,e.isExpression),c=d().createParamHelper(s,r);e.setTextRange(c,o.expression),e.setEmitFlags(c,1536);var u=_.createDecorator(c);e.setSourceMapRange(u,o.expression),e.setCommentRange(u,o.expression),e.setEmitFlags(u,1536),n.push(u)}return n}}function U(e){var t=e.kind;return 171===t||174===t||175===t||169===t}function K(e){return 171===e.kind}function V(t){switch(t.kind){case 260:case 228:return void 0!==e.getFirstConstructorWithBody(t);case 171:case 174:case 175:return!0}return!1}function q(t){var r=t.name;if(e.isComputedPropertyName(r)&&(!e.hasStaticModifier(t)&&c||e.hasDecorators(t))){var n=e.visitNode(r.expression,E,e.isExpression),i=e.skipPartiallyEmittedExpressions(n);if(!e.isSimpleInlineableExpression(i)){var a=_.getGeneratedNameForNode(r);return m(a),_.updateComputedPropertyName(r,_.createAssignment(a,n))}}return e.visitNode(r,E,e.isPropertyName)}function W(t){return!e.nodeIsMissing(t.body)}function H(t){var r=t.name;if(e.isIdentifier(r)){var n=e.setParent(e.setTextRange(_.cloneNode(r),r),r.parent);e.setEmitFlags(n,1584);var i=e.setParent(e.setTextRange(_.cloneNode(r),r),r.parent);return e.setEmitFlags(i,1536),e.startOnNewLine(e.removeAllComments(e.setTextRange(e.setOriginalNode(_.createExpressionStatement(_.createAssignment(e.setTextRange(_.createPropertyAccessExpression(_.createThis(),n),t.name),i)),t),e.moveRangePos(t,-1))))}}function G(r,n){if(!(1&r.transformFlags))return r;if(W(r)){var i=e.isClassLike(n)?e.getAllDecoratorsOfClassElement(r,n):void 0,a=e.isClassLike(n)?J(r,n,i):void 0;return _.updateMethodDeclaration(r,e.concatenate(a,e.visitNodes(r.modifiers,O,e.isModifierLike)),r.asteriskToken,q(r),void 0,void 0,e.visitParameterList(r.parameters,E,t),void 0,e.visitFunctionBody(r.body,E,t))}}function Q(t){return!(e.nodeIsMissing(t.body)&&e.hasSyntacticModifier(t,256))}function X(r,n){if(!(1&r.transformFlags))return r;if(Q(r)){var i=e.isClassLike(n)?J(r,n,e.getAllDecoratorsOfClassElement(r,n)):void 0;return _.updateGetAccessorDeclaration(r,e.concatenate(i,e.visitNodes(r.modifiers,O,e.isModifierLike)),q(r),e.visitParameterList(r.parameters,E,t),void 0,e.visitFunctionBody(r.body,E,t)||_.createBlock([]))}}function Y(r,n){if(!(1&r.transformFlags))return r;if(Q(r)){var i=e.isClassLike(n)?J(r,n,e.getAllDecoratorsOfClassElement(r,n)):void 0;return _.updateSetAccessorDeclaration(r,e.concatenate(i,e.visitNodes(r.modifiers,O,e.isModifierLike)),q(r),e.visitParameterList(r.parameters,E,t),e.visitFunctionBody(r.body,E,t)||_.createBlock([]))}}function Z(r){var n=r.name;return e.isBindingPattern(n)?e.flattenDestructuringAssignment(r,E,t,0,!1,ge):e.setTextRange(_.createAssignment(me(n),e.visitNode(r.initializer,E,e.isExpression)),r)}function $(r){var n=function(t,r){var n=t.name;return e.isPrivateIdentifier(n)?_.createIdentifier(""):e.isComputedPropertyName(n)?r&&!e.isSimpleInlineableExpression(n.expression)?_.getGeneratedNameForNode(n):n.expression:e.isIdentifier(n)?_.createStringLiteral(e.idText(n)):_.cloneNode(n)}(r,!1),a=function(r){var n=y.getConstantValue(r);return void 0!==n?"string"==typeof n?_.createStringLiteral(n):_.createNumericLiteral(n):(0==(8&u)&&(u|=8,t.enableSubstitution(79)),r.initializer?e.visitNode(r.initializer,E,e.isExpression):_.createVoidZero())}(r),o=_.createAssignment(_.createElementAccessExpression(i,n),a),s=10===a.kind?o:_.createAssignment(_.createElementAccessExpression(i,o),n);return e.setTextRange(_.createExpressionStatement(e.setTextRange(s,r)),r)}function ee(t){return _e(t)||de(t)&&b!==e.ModuleKind.ES2015&&b!==e.ModuleKind.ES2020&&b!==e.ModuleKind.ES2022&&b!==e.ModuleKind.ESNext&&b!==e.ModuleKind.System}function te(t){s||(s=new e.Map);var r=re(t);s.has(r)||s.set(r,t)}function re(t){return e.Debug.assertNode(t.name,e.isIdentifier),t.name.escapedText}function ne(t,r){var n=_.createVariableStatement(e.visitNodes(r.modifiers,O,e.isModifier),_.createVariableDeclarationList([_.createVariableDeclaration(_.getLocalName(r,!1,!0))],308===o.kind?0:1));if(e.setOriginalNode(n,r),te(r),function(e){if(s){var t=re(e);return s.get(t)===e}return!0}(r))return 263===r.kind?e.setSourceMapRange(n.declarationList,r):e.setSourceMapRange(n,r),e.setCommentRange(n,r),e.addEmitFlags(n,4195328),t.push(n),!0;var i=_.createMergeDeclarationMarker(n);return e.setEmitFlags(i,4195840),t.push(i),!1}function ie(a){if(!function(t){var r=e.getParseTreeNode(t,e.isModuleDeclaration);return!r||e.isInstantiatedModule(r,e.shouldPreserveConstEnums(v))}(a))return _.createNotEmittedStatement(a);e.Debug.assertNode(a.name,e.isIdentifier,"A TypeScript namespace should have an Identifier name."),0==(2&u)&&(u|=2,t.enableSubstitution(79),t.enableSubstitution(300),t.enableEmitNotification(264));var c=[],l=2,d=ne(c,a);d&&(b===e.ModuleKind.System&&o===r||(l|=512));var f=ye(a),m=ve(a),y=e.hasSyntacticModifier(a,1)?_.getExternalModuleOrNamespaceExportName(i,a,!1,!0):_.getLocalName(a,!1,!0),h=_.createLogicalOr(y,_.createAssignment(y,_.createObjectLiteralExpression()));if(ee(a)){var x=_.getLocalName(a,!1,!0);h=_.createAssignment(x,h)}var D=_.createExpressionStatement(_.createCallExpression(_.createFunctionExpression(void 0,void 0,void 0,void 0,[_.createParameterDeclaration(void 0,void 0,f)],void 0,function(t,r){var a=i,o=n,c=s;i=r,n=t,s=void 0;var u,l,d=[];if(p(),t.body)if(265===t.body.kind)C(t.body,(function(t){return e.addRange(d,e.visitNodes(t.statements,F,e.isStatement))})),u=t.body.statements,l=t.body;else{var f=ie(t.body);f&&(e.isArray(f)?e.addRange(d,f):d.push(f));var m=ae(t).body;u=e.moveRangePos(m.statements,-1)}e.insertStatementsAfterStandardPrologue(d,g()),i=a,n=o,s=c;var y=_.createBlock(e.setTextRange(_.createNodeArray(d),u),!0);e.setTextRange(y,l),t.body&&265===t.body.kind||e.setEmitFlags(y,1536|e.getEmitFlags(y));return y}(a,m)),void 0,[h]));return e.setOriginalNode(D,a),d&&(e.setSyntheticLeadingComments(D,void 0),e.setSyntheticTrailingComments(D,void 0)),e.setTextRange(D,a),e.addEmitFlags(D,l),c.push(D),c.push(_.createEndOfDeclarationMarker(a)),c}function ae(e){if(264===e.body.kind)return ae(e.body)||e.body}function oe(t){e.Debug.assert(!t.isTypeOnly);var r=xe(t)?t.name:void 0,n=e.visitNode(t.namedBindings,se,e.isNamedImportBindings);return r||n?_.updateImportClause(t,!1,r,n):void 0}function se(t){if(271===t.kind)return xe(t)?t:void 0;var r=v.preserveValueImports&&(1===v.importsNotUsedAsValues||2===v.importsNotUsedAsValues),n=e.visitNodes(t.elements,ce,e.isImportSpecifier);return r||e.some(n)?_.updateNamedImports(t,n):void 0}function ce(e){return!e.isTypeOnly&&xe(e)?e:void 0}function ue(e){return!e.isTypeOnly&&y.isValueAliasDeclaration(e)?e:void 0}function le(n){if(!n.isTypeOnly){if(e.isExternalModuleImportEqualsDeclaration(n)){var a=xe(n);return a||1!==v.importsNotUsedAsValues?a?e.visitEachChild(n,E,t):void 0:e.setOriginalNode(e.setTextRange(_.createImportDeclaration(void 0,void 0,n.moduleReference.expression,void 0),n),n)}if(function(t){return xe(t)||!e.isExternalModule(r)&&y.isTopLevelValueImportEqualsWithEntityName(t)}(n)){var o,s,c,u=e.createExpressionFromEntityName(_,n.moduleReference);return e.setEmitFlags(u,3584),pe(n)||!_e(n)?e.setOriginalNode(e.setTextRange(_.createVariableStatement(e.visitNodes(n.modifiers,O,e.isModifier),_.createVariableDeclarationList([e.setOriginalNode(_.createVariableDeclaration(n.name,void 0,void 0,u),n)])),n),n):e.setOriginalNode((o=n.name,s=u,c=n,e.setTextRange(_.createExpressionStatement(_.createAssignment(_.getNamespaceMemberName(i,o,!1,!0),s)),c)),n)}}}function _e(t){return void 0!==n&&e.hasSyntacticModifier(t,1)}function de(t){return void 0===n&&e.hasSyntacticModifier(t,1)}function pe(t){return de(t)&&!e.hasSyntacticModifier(t,1024)}function fe(t,r){var n=_.createAssignment(_.getExternalModuleOrNamespaceExportName(i,r,!1,!0),_.getLocalName(r));e.setSourceMapRange(n,e.createRange(r.name?r.name.pos:r.pos,r.end));var a=_.createExpressionStatement(n);e.setSourceMapRange(a,e.createRange(-1,r.end)),t.push(a)}function ge(t,r,n){return e.setTextRange(_.createAssignment(me(t),r),n)}function me(e){return _.getNamespaceMemberName(i,e,!1,!0)}function ye(t){var r=_.getGeneratedNameForNode(t);return e.setSourceMapRange(r,t.name),r}function ve(e){return _.getGeneratedNameForNode(e)}function he(t){if(u&l&&!e.isGeneratedIdentifier(t)&&!e.isLocalName(t)){var r=y.getReferencedExportContainer(t,!1);if(r&&308!==r.kind)if(2&l&&264===r.kind||8&l&&263===r.kind)return e.setTextRange(_.createPropertyAccessExpression(_.getGeneratedNameForNode(r),t),t)}}function be(t){var r=function(t){if(v.isolatedModules)return;return e.isPropertyAccessExpression(t)||e.isElementAccessExpression(t)?y.getConstantValue(t):void 0}(t);if(void 0!==r){e.setConstantValue(t,r);var n="string"==typeof r?_.createStringLiteral(r):_.createNumericLiteral(r);if(!v.removeComments){var i=e.getOriginalNode(t,e.isAccessExpression);e.addSyntheticTrailingComment(n,3," ".concat(e.getTextOfNode(i).replace(/\*\//g,"*_/")," "))}return n}return t}function xe(t){return e.isInJSFile(t)||(v.preserveValueImports?y.isValueAliasDeclaration(t):y.isReferencedAliasDeclaration(t))}}}(_||(_={})),function(e){var t,r;function n(t,r,n){var i,a;e.isGeneratedPrivateIdentifier(r)?(null!==(i=t.generatedIdentifiers)&&void 0!==i||(t.generatedIdentifiers=new e.Map),t.generatedIdentifiers.set(e.getNodeForGeneratedName(r),n)):(null!==(a=t.identifiers)&&void 0!==a||(t.identifiers=new e.Map),t.identifiers.set(r.escapedText,n))}function i(e,t){var r;return null===(r=e.identifiers)||void 0===r?void 0:r.get(t)}function o(e,t){var r;return null===(r=e.generatedIdentifiers)||void 0===r?void 0:r.get(t)}!function(e){e[e.ClassAliases=1]="ClassAliases",e[e.ClassStaticThisOrSuperReference=2]="ClassStaticThisOrSuperReference"}(t||(t={})),function(e){e.Field="f",e.Method="m",e.Accessor="a"}(e.PrivateIdentifierKind||(e.PrivateIdentifierKind={})),function(e){e[e.None=0]="None",e[e.ClassWasDecorated=1]="ClassWasDecorated",e[e.NeedsClassConstructorReference=2]="NeedsClassConstructorReference",e[e.NeedsClassSuperReference=4]="NeedsClassSuperReference",e[e.NeedsSubstitutionForThisInClassStaticField=8]="NeedsSubstitutionForThisInClassStaticField"}(r||(r={})),e.transformClassFields=function(t){var r=t.factory,s=t.hoistVariableDeclaration,c=t.endLexicalEnvironment,u=t.startLexicalEnvironment,l=t.resumeLexicalEnvironment,_=t.addBlockScopedVariable,d=t.getEmitResolver(),p=t.getCompilerOptions(),f=e.getEmitScriptTarget(p),g=e.getUseDefineForClassFields(p),m=!g,y=g&&f<9,v=m||y,h=f<9,b=f<99,x=f<9,D=x&&f>=2,S=v||h||b,T=t.onSubstituteNode;t.onSubstituteNode=function(t,n){if(n=T(t,n),1===t)return function(t){switch(t.kind){case 79:return function(t){return function(t){if(1&C&&33554432&d.getNodeCheckFlags(t)){var n=d.getReferencedValueDeclaration(t);if(n){var i=E[n.id];if(i){var a=r.cloneNode(i);return e.setSourceMapRange(a,t),e.setCommentRange(a,t),a}}}return}(t)||t}(t);case 108:return function(t){if(2&C&&F){var n=F.facts,i=F.classConstructor;if(1&n)return r.createParenthesizedExpression(r.createVoidZero());if(i)return e.setTextRange(e.setOriginalNode(r.cloneNode(i),t),t)}return t}(t)}return t}(n);return n};var C,E,k,N,A=t.onEmitNode;t.onEmitNode=function(t,r,n){var i=e.getOriginalNode(r);if(i.id){var a=M.get(i.id);if(a){var o=F,s=w;return F=a,w=a,A(t,r,n),F=o,void(w=s)}}switch(r.kind){case 215:if(e.isArrowFunction(i)||262144&e.getEmitFlags(r))break;case 259:case 173:o=F,s=w;return F=void 0,w=void 0,A(t,r,n),F=o,void(w=s);case 174:case 175:case 171:case 169:o=F,s=w;return w=F,F=void 0,A(t,r,n),F=o,void(w=s);case 164:o=F,s=w;return F=w,w=void 0,A(t,r,n),F=o,void(w=s)}A(t,r,n)};var F,P,w,I,O=[],M=new e.Map;return e.chainBundle(t,(function(r){if(r.isDeclarationFile||!S)return r;var n=e.visitEachChild(r,L,t);return e.addEmitHelpers(n,t.readEmitHelpers()),n}));function L(n){if(!(16777216&n.transformFlags||134234112&n.transformFlags))return n;switch(n.kind){case 127:return b?void 0:n;case 260:return function(e){return re(e,ne)}(n);case 228:return function(e){return re(e,ie)}(n);case 172:return function(r){if(!h)return e.visitEachChild(r,L,t);return}(n);case 169:return H(n);case 240:return function(r){var n=N;N=[];var i=e.visitEachChild(r,L,t),o=e.some(N)?a([i],N,!0):i;return N=n,o}(n);case 80:return function(t){if(!h)return t;if(e.isStatement(t.parent))return t;return e.setOriginalNode(r.createIdentifier(""),t)}(n);case 208:return function(n){if(h&&e.isPrivateIdentifier(n.name)){var i=be(n.name);if(i)return e.setTextRange(e.setOriginalNode(G(i,n.expression),n),n)}if(D&&e.isSuperProperty(n)&&e.isIdentifier(n.name)&&I&&F){var a=F.classConstructor,o=F.superClassReference;if(1&F.facts)return _e(n);if(a&&o){var s=r.createReflectGetCall(o,r.createStringLiteralFromNode(n.name),a);return e.setOriginalNode(s,n.expression),e.setTextRange(s,n.expression),s}}return e.visitEachChild(n,L,t)}(n);case 209:return function(n){if(D&&e.isSuperProperty(n)&&I&&F){var i=F.classConstructor,a=F.superClassReference;if(1&F.facts)return _e(n);if(i&&a){var o=r.createReflectGetCall(a,e.visitNode(n.argumentExpression,L,e.isExpression),i);return e.setOriginalNode(o,n.expression),e.setTextRange(o,n.expression),o}}return e.visitEachChild(n,L,t)}(n);case 221:case 222:return X(n,!1);case 223:return $(n,!1);case 210:return function(n){if(h&&e.isPrivateIdentifierPropertyAccessExpression(n.expression)){var i=r.createCallBinding(n.expression,s,f),o=i.thisArg,c=i.target;return e.isCallChain(n)?r.updateCallChain(n,r.createPropertyAccessChain(e.visitNode(c,L),n.questionDotToken,"call"),void 0,void 0,a([e.visitNode(o,L,e.isExpression)],e.visitNodes(n.arguments,L,e.isExpression),!0)):r.updateCallExpression(n,r.createPropertyAccessExpression(e.visitNode(c,L),"call"),void 0,a([e.visitNode(o,L,e.isExpression)],e.visitNodes(n.arguments,L,e.isExpression),!0))}if(D&&e.isSuperProperty(n.expression)&&I&&(null==F?void 0:F.classConstructor)){var u=r.createFunctionCallCall(e.visitNode(n.expression,L,e.isExpression),F.classConstructor,e.visitNodes(n.arguments,L,e.isExpression));return e.setOriginalNode(u,n),e.setTextRange(u,n),u}return e.visitEachChild(n,L,t)}(n);case 241:return function(t){return r.updateExpressionStatement(t,e.visitNode(t.expression,B,e.isExpression))}(n);case 212:return function(n){if(h&&e.isPrivateIdentifierPropertyAccessExpression(n.tag)){var i=r.createCallBinding(n.tag,s,f),a=i.thisArg,o=i.target;return r.updateTaggedTemplateExpression(n,r.createCallExpression(r.createPropertyAccessExpression(e.visitNode(o,L),"bind"),void 0,[e.visitNode(a,L,e.isExpression)]),void 0,e.visitNode(n.template,L,e.isTemplateLiteral))}if(D&&e.isSuperProperty(n.tag)&&I&&(null==F?void 0:F.classConstructor)){var c=r.createFunctionBindCall(e.visitNode(n.tag,L,e.isExpression),F.classConstructor,[]);return e.setOriginalNode(c,n),e.setTextRange(c,n),r.updateTaggedTemplateExpression(n,c,void 0,e.visitNode(n.template,L,e.isTemplateLiteral))}return e.visitEachChild(n,L,t)}(n);case 245:return function(n){return r.updateForStatement(n,e.visitNode(n.initializer,B,e.isForInitializer),e.visitNode(n.condition,L,e.isExpression),e.visitNode(n.incrementor,B,e.isExpression),e.visitIterationBody(n.statement,L,t))}(n);case 259:case 215:case 173:case 171:case 174:case 175:return V(void 0,R,n);default:return R(n)}}function R(r){return e.visitEachChild(r,L,t)}function B(e){switch(e.kind){case 221:case 222:return X(e,!0);case 223:return $(e,!0);default:return L(e)}}function j(n){switch(n.kind){case 294:return e.visitEachChild(n,j,t);case 230:return function(n){if(4&((null==F?void 0:F.facts)||0)){var i=r.createTempVariable(s,!0);return de().superClassReference=i,r.updateExpressionWithTypeArguments(n,r.createAssignment(i,e.visitNode(n.expression,L,e.isExpression)),void 0)}return e.visitEachChild(n,L,t)}(n);default:return L(n)}}function J(t){switch(t.kind){case 207:case 206:return function(t){return e.isArrayLiteralExpression(t)?r.updateArrayLiteralExpression(t,e.visitNodes(t.elements,Se,e.isExpression)):r.updateObjectLiteralExpression(t,e.visitNodes(t.properties,Te,e.isObjectLiteralElementLike))}(t);default:return L(t)}}function z(t){switch(t.kind){case 173:return function(e){if(P)return se(e,P);return R(e)}(t);case 174:case 175:case 171:return V(void 0,K,t);case 169:return V(void 0,H,t);case 164:return function(t){var n=e.visitNode(t.expression,L,e.isExpression);e.some(k)&&(n=e.isParenthesizedExpression(n)?r.updateParenthesizedExpression(n,r.inlineExpressions(a(a([],k,!0),[n.expression],!1))):r.inlineExpressions(a(a([],k,!0),[n],!1)),k=void 0);return r.updateComputedPropertyName(t,n)}(t);case 237:return t;default:return L(t)}}function U(t){switch(t.kind){case 169:return W(t);case 174:case 175:return z(t);default:e.Debug.assertMissingNode(t,"Expected node to either be a PropertyDeclaration, GetAccessorDeclaration, or SetAccessorDeclaration")}}function K(n){if(e.Debug.assert(!e.hasDecorators(n)),!h||!e.isPrivateIdentifier(n.name))return e.visitEachChild(n,z,t);var i=be(n.name);if(e.Debug.assert(i,"Undeclared private name for property declaration."),!i.isValid)return n;var a=function(t){e.Debug.assert(e.isPrivateIdentifier(t.name));var r=be(t.name);if(e.Debug.assert(r,"Undeclared private name for property declaration."),"m"===r.kind)return r.methodName;if("a"===r.kind){if(e.isGetAccessor(t))return r.getterName;if(e.isSetAccessor(t))return r.setterName}}(n);a&&fe().push(r.createAssignment(a,r.createFunctionExpression(e.filter(n.modifiers,(function(t){return e.isModifier(t)&&!e.isStaticModifier(t)&&!e.isAccessorModifier(t)})),n.asteriskToken,a,void 0,e.visitParameterList(n.parameters,L,t),void 0,e.visitFunctionBody(n.body,L,t))))}function V(e,t,r){var n=I;I=e;var i=t(r);return I=n,i}function q(n){if(!v)return e.visitEachChild(n,z,t);var i=function(t,n){if(e.isComputedPropertyName(t)){var i=e.visitNode(t.expression,L,e.isExpression),a=e.skipPartiallyEmittedExpressions(i),o=e.isSimpleInlineableExpression(a);if(!(e.isAssignmentExpression(a)&&e.isGeneratedIdentifier(a.left))&&!o&&n){var c=r.getGeneratedNameForNode(t);return 524288&d.getNodeCheckFlags(t)?_(c):s(c),r.createAssignment(c,i)}return o||e.isIdentifier(a)?void 0:i}}(n.name,!!n.initializer||g);if(i&&fe().push(i),e.isStatic(n)&&!h){var a=ue(n,r.createThis());if(a){var o=r.createClassStaticBlockDeclaration(r.createBlock([a]));return e.setOriginalNode(o,n),e.setCommentRange(o,n),e.setCommentRange(a,{pos:-1,end:-1}),e.setSyntheticLeadingComments(a,void 0),e.setSyntheticTrailingComments(a,void 0),o}}}function W(n){return e.Debug.assert(!e.hasDecorators(n),"Decorators should already have been transformed and elided."),e.isPrivateIdentifierClassElementDeclaration(n)?function(n){if(h){var i=be(n.name);return e.Debug.assert(i,"Undeclared private name for property declaration."),i.isValid?void 0:n}return m&&!e.isStatic(n)?r.updatePropertyDeclaration(n,e.visitNodes(n.modifiers,L,e.isModifierLike),n.name,void 0,void 0,void 0):e.visitEachChild(n,L,t)}(n):q(n)}function H(t){return b&&e.isAutoAccessorPropertyDeclaration(t)?function(t){e.Debug.assertEachNode(t.modifiers,e.isModifier);var n=e.getCommentRange(t),i=e.getSourceMapRange(t),a=t.name,o=a,c=a;if(e.isComputedPropertyName(a)&&!e.isSimpleInlineableExpression(a.expression)){var u=r.createTempVariable(s);e.setSourceMapRange(u,a.expression);var l=e.visitNode(a.expression,L,e.isExpression),_=r.createAssignment(u,l);e.setSourceMapRange(_,a.expression),o=r.updateComputedPropertyName(a,r.inlineExpressions([_,u])),c=r.updateComputedPropertyName(a,u)}var d=e.createAccessorPropertyBackingField(r,t,t.modifiers,t.initializer);e.setOriginalNode(d,t),e.setEmitFlags(d,1536),e.setSourceMapRange(d,i);var p=e.createAccessorPropertyGetRedirector(r,t,t.modifiers,o);e.setOriginalNode(p,t),e.setCommentRange(p,n),e.setSourceMapRange(p,i);var f=e.createAccessorPropertySetRedirector(r,t,t.modifiers,c);return e.setOriginalNode(f,t),e.setEmitFlags(f,1536),e.setSourceMapRange(f,i),e.visitArray([d,p,f],U,e.isClassElement)}(t):W(t)}function G(t,r){return Q(t,e.visitNode(r,L,e.isExpression))}function Q(r,n){switch(e.setCommentRange(n,e.moveRangePos(n,-1)),r.kind){case"a":return t.getEmitHelperFactory().createClassPrivateFieldGetHelper(n,r.brandCheckIdentifier,r.kind,r.getterName);case"m":return t.getEmitHelperFactory().createClassPrivateFieldGetHelper(n,r.brandCheckIdentifier,r.kind,r.methodName);case"f":return t.getEmitHelperFactory().createClassPrivateFieldGetHelper(n,r.brandCheckIdentifier,r.kind,r.variableName);default:e.Debug.assertNever(r,"Unknown private element type")}}function X(n,i){if(45===n.operator||46===n.operator){var a=e.skipParentheses(n.operand);if(h&&e.isPrivateIdentifierPropertyAccessExpression(a)){var o;if(o=be(a.name)){var c=Y(e.visitNode(a.expression,L,e.isExpression)),u=c.readExpression,l=c.initializeExpression,_=G(o,u),d=e.isPrefixUnaryExpression(n)||i?void 0:r.createTempVariable(s);return _=ee(o,l||u,_=e.expandPreOrPostfixIncrementOrDecrementExpression(r,n,_,s,d),63),e.setOriginalNode(_,n),e.setTextRange(_,n),d&&(_=r.createComma(_,d),e.setTextRange(_,n)),_}}else if(D&&e.isSuperProperty(a)&&I&&F){var p=F.classConstructor,f=F.superClassReference;if(1&F.facts){_=_e(a);return e.isPrefixUnaryExpression(n)?r.updatePrefixUnaryExpression(n,_):r.updatePostfixUnaryExpression(n,_)}if(p&&f){var g=void 0,m=void 0;if(e.isPropertyAccessExpression(a)?e.isIdentifier(a.name)&&(m=g=r.createStringLiteralFromNode(a.name)):e.isSimpleInlineableExpression(a.argumentExpression)?m=g=a.argumentExpression:(m=r.createTempVariable(s),g=r.createAssignment(m,e.visitNode(a.argumentExpression,L,e.isExpression))),g&&m){_=r.createReflectGetCall(f,m,p);e.setTextRange(_,a);d=i?void 0:r.createTempVariable(s);return _=e.expandPreOrPostfixIncrementOrDecrementExpression(r,n,_,s,d),_=r.createReflectSetCall(f,g,_,p),e.setOriginalNode(_,n),e.setTextRange(_,n),d&&(_=r.createComma(_,d),e.setTextRange(_,n)),_}}}}return e.visitEachChild(n,L,t)}function Y(t){var n=e.nodeIsSynthesized(t)?t:r.cloneNode(t);if(e.isSimpleInlineableExpression(t))return{readExpression:n,initializeExpression:void 0};var i=r.createTempVariable(s);return{readExpression:i,initializeExpression:r.createAssignment(i,n)}}function Z(t){if(h){F&&M.set(e.getOriginalNodeId(t),F),u();var n=V(t,(function(t){return e.visitNodes(t,L,e.isStatement)}),t.body.statements);n=r.mergeLexicalEnvironment(n,c());var i=r.createImmediatelyInvokedArrowFunction(n);return e.setOriginalNode(i,t),e.setTextRange(i,t),e.addEmitFlags(i,2),i}}function $(n,i){if(e.isDestructuringAssignment(n)){var o=k;k=void 0,n=r.updateBinaryExpression(n,e.visitNode(n.left,J),n.operatorToken,e.visitNode(n.right,L));var c=e.some(k)?r.inlineExpressions(e.compact(a(a([],k,!0),[n],!1))):n;return k=o,c}if(e.isAssignmentExpression(n))if(h&&e.isPrivateIdentifierPropertyAccessExpression(n.left)){var u=be(n.left.name);if(u)return e.setTextRange(e.setOriginalNode(ee(u,n.left.expression,n.right,n.operatorToken.kind),n),n)}else if(D&&e.isSuperProperty(n.left)&&I&&F){var l=F.classConstructor,_=F.superClassReference;if(1&F.facts)return r.updateBinaryExpression(n,_e(n.left),n.operatorToken,e.visitNode(n.right,L,e.isExpression));if(l&&_){var d=e.isElementAccessExpression(n.left)?e.visitNode(n.left.argumentExpression,L,e.isExpression):e.isIdentifier(n.left.name)?r.createStringLiteralFromNode(n.left.name):void 0;if(d){var p=e.visitNode(n.right,L,e.isExpression);if(e.isCompoundAssignment(n.operatorToken.kind)){var f=d;e.isSimpleInlineableExpression(d)||(f=r.createTempVariable(s),d=r.createAssignment(f,d));var g=r.createReflectGetCall(_,f,l);e.setOriginalNode(g,n.left),e.setTextRange(g,n.left),p=r.createBinaryExpression(g,e.getNonAssignmentOperatorForCompoundAssignment(n.operatorToken.kind),p),e.setTextRange(p,n)}var m=i?void 0:r.createTempVariable(s);return m&&(p=r.createAssignment(m,p),e.setTextRange(m,n)),p=r.createReflectSetCall(_,d,p,l),e.setOriginalNode(p,n),e.setTextRange(p,n),m&&(p=r.createComma(p,m),e.setTextRange(p,n)),p}}}return h&&function(t){return e.isPrivateIdentifier(t.left)&&101===t.operatorToken.kind}(n)?function(r){var n=be(r.left);if(n){var i=e.visitNode(r.right,L,e.isExpression);return e.setOriginalNode(t.getEmitHelperFactory().createClassPrivateFieldInHelper(n.brandCheckIdentifier,i),r)}return e.visitEachChild(r,L,t)}(n):e.visitEachChild(n,L,t)}function ee(n,i,a,o){if(i=e.visitNode(i,L,e.isExpression),a=e.visitNode(a,L,e.isExpression),e.isCompoundAssignment(o)){var s=Y(i),c=s.readExpression;i=s.initializeExpression||c,a=r.createBinaryExpression(Q(n,c),e.getNonAssignmentOperatorForCompoundAssignment(o),a)}switch(e.setCommentRange(i,e.moveRangePos(i,-1)),n.kind){case"a":return t.getEmitHelperFactory().createClassPrivateFieldSetHelper(i,n.brandCheckIdentifier,a,n.kind,n.setterName);case"m":return t.getEmitHelperFactory().createClassPrivateFieldSetHelper(i,n.brandCheckIdentifier,a,n.kind,void 0);case"f":return t.getEmitHelperFactory().createClassPrivateFieldSetHelper(i,n.brandCheckIdentifier,a,n.kind,n.variableName);default:e.Debug.assertNever(n,"Unknown private element type")}}function te(t){return e.filter(t.members,e.isNonStaticMethodOrAccessorWithPrivateName)}function re(r,n){var i=P,a=k;if(P=r,k=void 0,O.push(F),F=void 0,h){var o=e.getNameOfDeclaration(r);o&&e.isIdentifier(o)&&(pe().className=o);var s=te(r);e.some(s)&&(pe().weakSetName=ve("instances",s[0].name))}var c=function(t){var r=0,n=e.getOriginalNode(t);e.isClassDeclaration(n)&&e.classOrConstructorParameterIsDecorated(n)&&(r|=1);for(var i=0,a=t.members;i<a.length;i++){var o=a[i];e.isStatic(o)&&(o.name&&(e.isPrivateIdentifier(o.name)||e.isAutoAccessorPropertyDeclaration(o))&&h&&(r|=2),(e.isPropertyDeclaration(o)||e.isClassStaticBlockDeclaration(o))&&(x&&16384&o.transformFlags&&(1&(r|=8)||(r|=2)),D&&134217728&o.transformFlags&&(1&r||(r|=6))))}return r}(r);c&&(de().facts=c),8&c&&0==(2&C)&&(C|=2,t.enableSubstitution(108),t.enableEmitNotification(259),t.enableEmitNotification(215),t.enableEmitNotification(173),t.enableEmitNotification(174),t.enableEmitNotification(175),t.enableEmitNotification(171),t.enableEmitNotification(169),t.enableEmitNotification(164));var u=n(r,c);return F=O.pop(),P=i,k=a,u}function ne(t,n){var i;if(2&n){var a=r.createTempVariable(s,!0);de().classConstructor=r.cloneNode(a),i=r.createAssignment(a,r.getInternalName(t))}var o=e.visitNodes(t.modifiers,L,e.isModifierLike),c=e.visitNodes(t.heritageClauses,j,e.isHeritageClause),u=ae(t),l=u.members,_=u.prologue,d=r.updateClassDeclaration(t,o,t.name,void 0,c,l),p=[];if(_&&p.push(r.createExpressionStatement(_)),p.push(d),i&&fe().unshift(i),e.some(k)&&p.push(r.createExpressionStatement(r.inlineExpressions(k))),m||h){var f=e.getStaticPropertiesAndClassStaticBlock(t);e.some(f)&&ce(p,f,r.getInternalName(t))}return p}function ie(n,i){var a,o=!!(1&i),c=e.getStaticPropertiesAndClassStaticBlock(n),u=16777216&d.getNodeCheckFlags(n);function l(){var e=d.getNodeCheckFlags(n),t=16777216&e,i=524288&e;return r.createTempVariable(i?_:s,!!t)}2&i&&(a=l(),de().classConstructor=r.cloneNode(a));var p=e.visitNodes(n.modifiers,L,e.isModifierLike),f=e.visitNodes(n.heritageClauses,j,e.isHeritageClause),g=ae(n),m=g.members,y=g.prologue,b=r.updateClassExpression(n,p,n.name,void 0,f,m),x=[];y&&x.push(y);var D=h&&e.some(c,(function(t){return e.isClassStaticBlockDeclaration(t)||e.isPrivateIdentifierClassElementDeclaration(t)||v&&e.isInitializedProperty(t)}));if(D||e.some(k))if(o)e.Debug.assertIsDefined(N,"Decorated classes transformed by TypeScript are expected to be within a variable declaration."),N&&k&&e.some(k)&&N.push(r.createExpressionStatement(r.inlineExpressions(k))),N&&e.some(c)&&ce(N,c,r.getInternalName(n)),a?x.push(e.startOnNewLine(r.createAssignment(a,b)),e.startOnNewLine(a)):(x.push(b),y&&e.startOnNewLine(b));else{if(a||(a=l()),u){0==(1&C)&&(C|=1,t.enableSubstitution(79),E=[]);var S=r.cloneNode(a);S.autoGenerateFlags&=-9,E[e.getOriginalNodeId(n)]=S}e.setEmitFlags(b,65536|e.getEmitFlags(b)),x.push(e.startOnNewLine(r.createAssignment(a,b))),e.addRange(x,e.map(k,e.startOnNewLine)),e.addRange(x,function(t,r){for(var n=[],i=0,a=t;i<a.length;i++){var o=a[i],s=e.isClassStaticBlockDeclaration(o)?Z(o):le(o,r);s&&(e.startOnNewLine(s),e.setOriginalNode(s,o),e.addEmitFlags(s,1536&e.getEmitFlags(o)),e.setSourceMapRange(s,e.moveRangePastModifiers(o)),e.setCommentRange(s,o),n.push(s))}return n}(c,a)),x.push(e.startOnNewLine(a))}else x.push(b),y&&e.startOnNewLine(b);return r.inlineExpressions(x)}function ae(t){if(h){for(var n=0,i=t.members;n<i.length;n++){var a=i[n];e.isPrivateIdentifierClassElementDeclaration(a)&&ye(a,a.name,ge)}if(e.some(te(t))&&(u=pe().weakSetName,e.Debug.assert(u,"weakSetName should be set in private identifier environment"),fe().push(r.createAssignment(u,r.createNewExpression(r.createIdentifier("WeakSet"),void 0,[])))),b)for(var o=0,c=t.members;o<c.length;o++){a=c[o];if(e.isAutoAccessorPropertyDeclaration(a))ye(a,r.getGeneratedPrivateNameForNode(a.name,void 0,"_accessor_storage"),me)}}var u,l,_,d,p=e.visitNodes(t.members,z,e.isClassElement);if(e.some(p,e.isConstructorDeclaration)||(l=se(void 0,t)),!h&&e.some(k)){var f=r.createExpressionStatement(r.inlineExpressions(k));if(134234112&f.transformFlags){var g=r.createTempVariable(s),m=r.createArrowFunction(void 0,void 0,[],void 0,void 0,r.createBlock([f]));_=r.createAssignment(g,m),f=r.createExpressionStatement(r.createCallExpression(g,void 0,[]))}var y=r.createBlock([f]);d=r.createClassStaticBlockDeclaration(y),k=void 0}if(l||d){var v=void 0;v=e.append(v,l),v=e.append(v,d),v=e.addRange(v,p),p=e.setTextRange(r.createNodeArray(v),t.members)}return{members:p,prologue:_}}function oe(t){return!e.isStatic(t)&&!e.hasAbstractModifier(e.getOriginalNode(t))&&(y&&e.isPropertyDeclaration(t)||m&&e.isInitializedProperty(t)||h&&e.isPrivateIdentifierClassElementDeclaration(t)||h&&b&&e.isAutoAccessorPropertyDeclaration(t))}function se(n,i){if(n=e.visitNode(n,L,e.isConstructorDeclaration),!e.some(i.members,oe))return n;var o=e.getEffectiveBaseTypeNode(i),s=!(!o||104===e.skipOuterExpressions(o.expression).kind),u=e.visitParameterList(n?n.parameters:void 0,L,t),_=function(n,i,o){var s,u,_=e.getProperties(n,!1,!1);g||(_=e.filter(_,(function(t){return!!t.initializer||e.isPrivateIdentifier(t.name)||e.hasAccessorModifier(t)})));var d=te(n),p=e.some(_)||e.some(d);if(!i&&!p)return e.visitFunctionBody(void 0,L,t);l();var f=!i&&o,m=0,y=0,v=-1,b=[];(null===(s=null==i?void 0:i.body)||void 0===s?void 0:s.statements)&&(y=r.copyPrologue(i.body.statements,b,!1,L),(v=e.findSuperStatementIndex(i.body.statements,y))>=0?(m=v+1,b=a(a(a([],b.slice(0,y),!0),e.visitNodes(i.body.statements,L,e.isStatement,y,m-y),!0),b.slice(y),!0)):y>=0&&(m=y));f&&b.push(r.createExpressionStatement(r.createCallExpression(r.createSuper(),void 0,[r.createSpreadElement(r.createIdentifier("arguments"))])));var x=0;if(null==i?void 0:i.body)if(g)b=b.filter((function(t){return!e.isParameterPropertyDeclaration(e.getOriginalNode(t),i)}));else{for(var D=0,S=i.body.statements;D<S.length;D++){var T=S[D];e.isParameterPropertyDeclaration(e.getOriginalNode(T),i)&&x++}if(x>0){var C=e.visitNodes(i.body.statements,L,e.isStatement,m,x);if(v>=0)e.addRange(b,C);else{var E=y;f&&E++,b=a(a(a([],b.slice(0,E),!0),C,!0),b.slice(E),!0)}m+=x}}var k=r.createThis();(function(t,n,i){if(!h||!e.some(n))return;var a=pe().weakSetName;e.Debug.assert(a,"weakSetName should be set in private identifier environment"),t.push(r.createExpressionStatement(function(t,r){return e.factory.createCallExpression(e.factory.createPropertyAccessExpression(r,"add"),void 0,[t])}(i,a)))})(b,d,k),ce(b,_,k),i&&e.addRange(b,e.visitNodes(i.body.statements,A,e.isStatement,m));if(0===(b=r.mergeLexicalEnvironment(b,c())).length&&!i)return;var N=(null==i?void 0:i.body)&&i.body.statements.length>=b.length&&null!==(u=i.body.multiLine)&&void 0!==u?u:b.length>0;return e.setTextRange(r.createBlock(e.setTextRange(r.createNodeArray(b),i?i.body.statements:n.members),N),i?i.body:void 0);function A(t){if(!g||!e.isParameterPropertyDeclaration(e.getOriginalNode(t),i))return L(t)}}(i,n,s);return _?n?(e.Debug.assert(u),r.updateConstructorDeclaration(n,void 0,u,_)):e.startOnNewLine(e.setOriginalNode(e.setTextRange(r.createConstructorDeclaration(void 0,null!=u?u:[],_),n||i),n)):n}function ce(t,r,n){for(var i=0,a=r;i<a.length;i++){var o=a[i];if(!e.isStatic(o)||h||g){var s=ue(o,n);s&&t.push(s)}}}function ue(t,n){var i=e.isClassStaticBlockDeclaration(t)?Z(t):le(t,n);if(i){var a=r.createExpressionStatement(i);return e.setOriginalNode(a,t),e.addEmitFlags(a,1536&e.getEmitFlags(t)),e.setSourceMapRange(a,e.moveRangePastModifiers(t)),e.setCommentRange(a,t),e.setSyntheticLeadingComments(i,void 0),e.setSyntheticTrailingComments(i,void 0),a}}function le(t,n){var i=I,a=function(t,n){var i,a=!g,o=e.hasAccessorModifier(t)?r.getGeneratedPrivateNameForNode(t.name):e.isComputedPropertyName(t.name)&&!e.isSimpleInlineableExpression(t.name.expression)?r.updateComputedPropertyName(t.name,r.getGeneratedNameForNode(t.name)):t.name;e.hasStaticModifier(t)&&(I=t);if(h&&e.isPrivateIdentifier(o)){var s=be(o);if(s)return"f"===s.kind?s.isStatic?function(t,r){return e.factory.createAssignment(t,e.factory.createObjectLiteralExpression([e.factory.createPropertyAssignment("value",r||e.factory.createVoidZero())]))}(s.variableName,e.visitNode(t.initializer,L,e.isExpression)):function(t,r,n){return e.factory.createCallExpression(e.factory.createPropertyAccessExpression(n,"set"),void 0,[t,r||e.factory.createVoidZero()])}(n,e.visitNode(t.initializer,L,e.isExpression),s.brandCheckIdentifier):void 0;e.Debug.fail("Undeclared private name for property declaration.")}if((e.isPrivateIdentifier(o)||e.hasStaticModifier(t))&&!t.initializer)return;var c=e.getOriginalNode(t);if(e.hasSyntacticModifier(c,256))return;var u=t.initializer||a?null!==(i=e.visitNode(t.initializer,L,e.isExpression))&&void 0!==i?i:r.createVoidZero():e.isParameterPropertyDeclaration(c,c.parent)&&e.isIdentifier(o)?o:r.createVoidZero();if(a||e.isPrivateIdentifier(o)){var l=e.createMemberAccessForPropertyName(r,n,o,o);return r.createAssignment(l,u)}var _=e.isComputedPropertyName(o)?o.expression:e.isIdentifier(o)?r.createStringLiteral(e.unescapeLeadingUnderscores(o.escapedText)):o,d=r.createPropertyDescriptor({value:u,configurable:!0,writable:!0,enumerable:!0});return r.createObjectDefinePropertyCall(n,_,d)}(t,n);return a&&e.hasStaticModifier(t)&&(null==F?void 0:F.facts)&&(e.setOriginalNode(a,t),e.addEmitFlags(a,2),M.set(e.getOriginalNodeId(a),F)),I=i,a}function _e(t){return e.isPropertyAccessExpression(t)?r.updatePropertyAccessExpression(t,r.createVoidZero(),t.name):r.updateElementAccessExpression(t,r.createVoidZero(),e.visitNode(t.argumentExpression,L,e.isExpression))}function de(){return F||(F={facts:0,classConstructor:void 0,superClassReference:void 0,privateIdentifierEnvironment:void 0})}function pe(){var e=de();return e.privateIdentifierEnvironment||(e.privateIdentifierEnvironment={className:void 0,weakSetName:void 0,identifiers:void 0,generatedIdentifiers:void 0}),e.privateIdentifierEnvironment}function fe(){return null!=k?k:k=[]}function ge(t,r,i,a,o,s,c){e.isAutoAccessorPropertyDeclaration(t)?function(t,r,i,a,o,s,c){var u=he(r,"_get"),l=he(r,"_set"),_=o?e.Debug.checkDefined(i.classConstructor,"classConstructor should be set in private identifier environment"):e.Debug.checkDefined(a.weakSetName,"weakSetName should be set in private identifier environment");n(a,r,{kind:"a",getterName:u,setterName:l,brandCheckIdentifier:_,isStatic:o,isValid:s})}(0,r,i,a,o,s):e.isPropertyDeclaration(t)?me(t,r,i,a,o,s,c):e.isMethodDeclaration(t)?function(t,r,i,a,o,s,c){var u=he(r),l=o?e.Debug.checkDefined(i.classConstructor,"classConstructor should be set in private identifier environment"):e.Debug.checkDefined(a.weakSetName,"weakSetName should be set in private identifier environment");n(a,r,{kind:"m",methodName:u,brandCheckIdentifier:l,isStatic:o,isValid:s})}(0,r,i,a,o,s):e.isGetAccessorDeclaration(t)?function(t,r,i,a,o,s,c){var u=he(r,"_get"),l=o?e.Debug.checkDefined(i.classConstructor,"classConstructor should be set in private identifier environment"):e.Debug.checkDefined(a.weakSetName,"weakSetName should be set in private identifier environment");"a"!==(null==c?void 0:c.kind)||c.isStatic!==o||c.getterName?n(a,r,{kind:"a",getterName:u,setterName:void 0,brandCheckIdentifier:l,isStatic:o,isValid:s}):c.getterName=u}(0,r,i,a,o,s,c):e.isSetAccessorDeclaration(t)&&function(t,r,i,a,o,s,c){var u=he(r,"_set"),l=o?e.Debug.checkDefined(i.classConstructor,"classConstructor should be set in private identifier environment"):e.Debug.checkDefined(a.weakSetName,"weakSetName should be set in private identifier environment");"a"!==(null==c?void 0:c.kind)||c.isStatic!==o||c.setterName?n(a,r,{kind:"a",getterName:void 0,setterName:u,brandCheckIdentifier:l,isStatic:o,isValid:s}):c.setterName=u}(0,r,i,a,o,s,c)}function me(t,i,a,o,s,c,u){if(s){e.Debug.assert(a.classConstructor,"classConstructor should be set in private identifier environment");var l=he(i);n(o,i,{kind:"f",brandCheckIdentifier:a.classConstructor,variableName:l,isStatic:!0,isValid:c})}else{var _=he(i);n(o,i,{kind:"f",brandCheckIdentifier:_,variableName:void 0,isStatic:!1,isValid:c}),fe().push(r.createAssignment(_,r.createNewExpression(r.createIdentifier("WeakMap"),void 0,[])))}}function ye(t,r,n){var a=de(),s=pe(),c=function(t,r){return e.isGeneratedPrivateIdentifier(r)?o(t,e.getNodeForGeneratedName(r)):i(t,r.escapedText)}(s,r),u=e.hasStaticModifier(t),l=!function(t){return!e.isGeneratedPrivateIdentifier(t)&&"#constructor"===t.escapedText}(r)&&void 0===c;n(t,r,a,s,u,l,c)}function ve(e,t,n){var i=pe().className,a=i?{prefix:"_",node:i,suffix:"_"}:"_",o="object"==typeof e?r.getGeneratedNameForNode(e,24,a,n):"string"==typeof e?r.createUniqueName(e,16,a,n):r.createTempVariable(void 0,!0,a,n);return 524288&d.getNodeCheckFlags(t)?_(o):s(o),o}function he(t,r){var n,i=e.tryGetTextOfPropertyName(t);return ve(null!==(n=null==i?void 0:i.substring(1))&&void 0!==n?n:t,t,r)}function be(t){return e.isGeneratedPrivateIdentifier(t)?function(t){return xe(o,e.getNodeForGeneratedName(t))}(t):xe(i,t.escapedText)}function xe(e,t){if((null==F?void 0:F.privateIdentifierEnvironment)&&(n=e(F.privateIdentifierEnvironment,t)))return n;for(var r=O.length-1;r>=0;--r){var n,i=O[r];if(i)if(i.privateIdentifierEnvironment)if(n=e(i.privateIdentifierEnvironment,t))return n}}function De(n){var i=r.getGeneratedNameForNode(n),a=be(n.name);if(!a)return e.visitEachChild(n,L,t);var o=n.expression;return(e.isThisProperty(n)||e.isSuperProperty(n)||!e.isSimpleCopiableExpression(n.expression))&&(o=r.createTempVariable(s,!0),fe().push(r.createBinaryExpression(o,63,e.visitNode(n.expression,L,e.isExpression)))),r.createAssignmentTargetWrapper(i,ee(a,o,i,63))}function Se(t){var n=e.getTargetOfBindingOrAssignmentElement(t);if(n){var i=void 0;if(e.isPrivateIdentifierPropertyAccessExpression(n))i=De(n);else if(D&&e.isSuperProperty(n)&&I&&F){var a=F.classConstructor,o=F.superClassReference;if(1&F.facts)i=_e(n);else if(a&&o){var s=e.isElementAccessExpression(n)?e.visitNode(n.argumentExpression,L,e.isExpression):e.isIdentifier(n.name)?r.createStringLiteralFromNode(n.name):void 0;if(s){var c=r.createTempVariable(void 0);i=r.createAssignmentTargetWrapper(c,r.createReflectSetCall(o,s,c,a))}}}if(i)return e.isAssignmentExpression(t)?r.updateBinaryExpression(t,i,t.operatorToken,e.visitNode(t.right,L,e.isExpression)):e.isSpreadElement(t)?r.updateSpreadElement(t,i):i}return e.visitNode(t,J)}function Te(t){if(e.isObjectBindingOrAssignmentElement(t)&&!e.isShorthandPropertyAssignment(t)){var n=e.getTargetOfBindingOrAssignmentElement(t),i=void 0;if(n)if(e.isPrivateIdentifierPropertyAccessExpression(n))i=De(n);else if(D&&e.isSuperProperty(n)&&I&&F){var a=F.classConstructor,o=F.superClassReference;if(1&F.facts)i=_e(n);else if(a&&o){var s=e.isElementAccessExpression(n)?e.visitNode(n.argumentExpression,L,e.isExpression):e.isIdentifier(n.name)?r.createStringLiteralFromNode(n.name):void 0;if(s){var c=r.createTempVariable(void 0);i=r.createAssignmentTargetWrapper(c,r.createReflectSetCall(o,s,c,a))}}}if(e.isPropertyAssignment(t)){var u=e.getInitializerOfBindingOrAssignmentElement(t);return r.updatePropertyAssignment(t,e.visitNode(t.name,L,e.isPropertyName),i?u?r.createAssignment(i,e.visitNode(u,L)):i:e.visitNode(t.initializer,J,e.isExpression))}if(e.isSpreadAssignment(t))return r.updateSpreadAssignment(t,i||e.visitNode(t.expression,J,e.isExpression));e.Debug.assert(void 0===i,"Should not have generated a wrapped target")}return e.visitNode(t,L)}}}(_||(_={})),function(e){e.createRuntimeTypeSerializer=function(t){var r,n,i=t.hoistVariableDeclaration,a=t.getEmitResolver(),o=t.getCompilerOptions(),s=e.getEmitScriptTarget(o),c=e.getStrictOptionValue(o,"strictNullChecks");return{serializeTypeNode:function(e,t){return u(e,p,t)},serializeTypeOfNode:function(e,t){return u(e,l,t)},serializeParameterTypesOfNode:function(e,t,r){return u(e,_,t,r)},serializeReturnTypeOfNode:function(e,t){return u(e,d,t)}};function u(e,t,i,a){var o=r,s=n;r=e.currentLexicalScope,n=e.currentNameScope;var c=void 0===a?t(i):t(i,a);return r=o,n=s,c}function l(t){switch(t.kind){case 169:case 166:return p(t.type);case 175:case 174:return p(function(t){var r=a.getAllAccessorDeclarations(t);return r.setAccessor&&e.getSetAccessorTypeAnnotationNode(r.setAccessor)||r.getAccessor&&e.getEffectiveReturnTypeNode(r.getAccessor)}(t));case 260:case 228:case 171:return e.factory.createIdentifier("Function");default:return e.factory.createVoidZero()}}function _(t,r){var n=e.isClassLike(t)?e.getFirstConstructorWithBody(t):e.isFunctionLike(t)&&e.nodeIsPresent(t.body)?t:void 0,i=[];if(n)for(var a=function(t,r){if(r&&174===t.kind){var n=e.getAllAccessorDeclarations(r.members,t).setAccessor;if(n)return n.parameters}return t.parameters}(n,r),o=a.length,s=0;s<o;s++){var c=a[s];0===s&&e.isIdentifier(c.name)&&"this"===c.name.escapedText||(c.dotDotDotToken?i.push(p(e.getRestParameterElementType(c.type))):i.push(l(c)))}return e.factory.createArrayLiteralExpression(i)}function d(t){return e.isFunctionLike(t)&&t.type?p(t.type):e.isAsyncFunction(t)?e.factory.createIdentifier("Promise"):e.factory.createVoidZero()}function p(t){if(void 0===t)return e.factory.createIdentifier("Object");switch((t=e.skipTypeParentheses(t)).kind){case 114:case 155:case 144:return e.factory.createVoidZero();case 181:case 182:return e.factory.createIdentifier("Function");case 185:case 186:return e.factory.createIdentifier("Array");case 179:return t.assertsModifier?e.factory.createVoidZero():e.factory.createIdentifier("Boolean");case 134:return e.factory.createIdentifier("Boolean");case 200:case 152:return e.factory.createIdentifier("String");case 149:return e.factory.createIdentifier("Object");case 198:return f(t.literal);case 148:return e.factory.createIdentifier("Number");case 160:return b("BigInt",7);case 153:return b("Symbol",2);case 180:return function(t){var o=a.getTypeReferenceSerializationKind(t.typeName,null!=n?n:r);switch(o){case e.TypeReferenceSerializationKind.Unknown:if(e.findAncestor(t,(function(t){return t.parent&&e.isConditionalTypeNode(t.parent)&&(t.parent.trueType===t||t.parent.falseType===t)})))return e.factory.createIdentifier("Object");var s=v(t.typeName),c=e.factory.createTempVariable(i);return e.factory.createConditionalExpression(e.factory.createTypeCheck(e.factory.createAssignment(c,s),"function"),void 0,c,void 0,e.factory.createIdentifier("Object"));case e.TypeReferenceSerializationKind.TypeWithConstructSignatureAndValue:return h(t.typeName);case e.TypeReferenceSerializationKind.VoidNullableOrNeverType:return e.factory.createVoidZero();case e.TypeReferenceSerializationKind.BigIntLikeType:return b("BigInt",7);case e.TypeReferenceSerializationKind.BooleanType:return e.factory.createIdentifier("Boolean");case e.TypeReferenceSerializationKind.NumberLikeType:return e.factory.createIdentifier("Number");case e.TypeReferenceSerializationKind.StringLikeType:return e.factory.createIdentifier("String");case e.TypeReferenceSerializationKind.ArrayLikeType:return e.factory.createIdentifier("Array");case e.TypeReferenceSerializationKind.ESSymbolType:return b("Symbol",2);case e.TypeReferenceSerializationKind.TypeWithCallSignature:return e.factory.createIdentifier("Function");case e.TypeReferenceSerializationKind.Promise:return e.factory.createIdentifier("Promise");case e.TypeReferenceSerializationKind.ObjectType:return e.factory.createIdentifier("Object");default:return e.Debug.assertNever(o)}}(t);case 190:return g(t.types,!0);case 189:return g(t.types,!1);case 191:return g([t.trueType,t.falseType],!1);case 195:if(146===t.operator)return p(t.type);break;case 183:case 196:case 197:case 184:case 131:case 157:case 194:case 202:case 315:case 316:case 320:case 321:case 322:break;case 317:case 318:case 319:return p(t.type);default:return e.Debug.failBadSyntaxKind(t)}return e.factory.createIdentifier("Object")}function f(t){switch(t.kind){case 10:case 14:return e.factory.createIdentifier("String");case 221:var r=t.operand;switch(r.kind){case 8:case 9:return f(r);default:return e.Debug.failBadSyntaxKind(r)}case 8:return e.factory.createIdentifier("Number");case 9:return b("BigInt",7);case 110:case 95:return e.factory.createIdentifier("Boolean");case 104:return e.factory.createVoidZero();default:return e.Debug.failBadSyntaxKind(t)}}function g(t,r){for(var n,i=0,a=t;i<a.length;i++){var o=a[i];if(144!==(o=e.skipTypeParentheses(o)).kind){if(157!==o.kind){if(131===o.kind)return e.factory.createIdentifier("Object");if(c||!(e.isLiteralTypeNode(o)&&104===o.literal.kind||155===o.kind)){var s=p(o);if(e.isIdentifier(s)&&"Object"===s.escapedText)return s;if(n){if(!m(n,s))return e.factory.createIdentifier("Object")}else n=s}}else if(!r)return e.factory.createIdentifier("Object")}else if(r)return e.factory.createVoidZero()}return null!=n?n:e.factory.createVoidZero()}function m(t,r){return e.isGeneratedIdentifier(t)?e.isGeneratedIdentifier(r):e.isIdentifier(t)?e.isIdentifier(r)&&t.escapedText===r.escapedText:e.isPropertyAccessExpression(t)?e.isPropertyAccessExpression(r)&&m(t.expression,r.expression)&&m(t.name,r.name):e.isVoidExpression(t)?e.isVoidExpression(r)&&e.isNumericLiteral(t.expression)&&"0"===t.expression.text&&e.isNumericLiteral(r.expression)&&"0"===r.expression.text:e.isStringLiteral(t)?e.isStringLiteral(r)&&t.text===r.text:e.isTypeOfExpression(t)?e.isTypeOfExpression(r)&&m(t.expression,r.expression):e.isParenthesizedExpression(t)?e.isParenthesizedExpression(r)&&m(t.expression,r.expression):e.isConditionalExpression(t)?e.isConditionalExpression(r)&&m(t.condition,r.condition)&&m(t.whenTrue,r.whenTrue)&&m(t.whenFalse,r.whenFalse):!!e.isBinaryExpression(t)&&(e.isBinaryExpression(r)&&t.operatorToken.kind===r.operatorToken.kind&&m(t.left,r.left)&&m(t.right,r.right))}function y(t,r){return e.factory.createLogicalAnd(e.factory.createStrictInequality(e.factory.createTypeOfExpression(t),e.factory.createStringLiteral("undefined")),r)}function v(t){if(79===t.kind){var r=h(t);return y(r,r)}if(79===t.left.kind)return y(h(t.left),h(t));var n=v(t.left),a=e.factory.createTempVariable(i);return e.factory.createLogicalAnd(e.factory.createLogicalAnd(n.left,e.factory.createStrictInequality(e.factory.createAssignment(a,n.right),e.factory.createVoidZero())),e.factory.createPropertyAccessExpression(a,t.right))}function h(t){switch(t.kind){case 79:var n=e.setParent(e.setTextRange(e.parseNodeFactory.cloneNode(t),t),t.parent);return n.original=void 0,e.setParent(n,e.getParseTreeNode(r)),n;case 163:return function(t){return e.factory.createPropertyAccessExpression(h(t.left),t.right)}(t)}}function b(t,r){return s<r?function(t){return e.factory.createConditionalExpression(e.factory.createTypeCheck(e.factory.createIdentifier(t),"function"),void 0,e.factory.createIdentifier(t),void 0,e.factory.createIdentifier("Object"))}(t):e.factory.createIdentifier(t)}}}(_||(_={})),function(e){e.transformLegacyDecorators=function(t){var r,n=t.factory,i=t.getEmitHelperFactory,o=t.hoistVariableDeclaration,s=t.getEmitResolver(),c=t.getCompilerOptions(),u=e.getEmitScriptTarget(c),l=t.onSubstituteNode;return t.onSubstituteNode=function(t,i){if(i=l(t,i),1===t)return function(t){if(79===t.kind)return function(t){var i;return null!==(i=function(t){if(r&&33554432&s.getNodeCheckFlags(t)){var i=s.getReferencedValueDeclaration(t);if(i){var a=r[i.id];if(a){var o=n.cloneNode(a);return e.setSourceMapRange(o,t),e.setCommentRange(o,t),o}}}return}(t))&&void 0!==i?i:t}(t);return t}(i);return i},e.chainBundle(t,(function(r){var n=e.visitEachChild(r,d,t);return e.addEmitHelpers(n,t.readEmitHelpers()),n}));function _(t){return e.isDecorator(t)?void 0:t}function d(a){if(!(33554432&a.transformFlags))return a;switch(a.kind){case 167:return;case 260:return function(a){if(!e.classOrConstructorParameterIsDecorated(a)&&!e.childIsDecorated(a))return e.visitEachChild(a,d,t);var c=e.hasDecorators(a)?function(a,c){var l,_=e.moveRangePastModifiers(a),p=function(i){if(16777216&s.getNodeCheckFlags(i)){r||(t.enableSubstitution(79),r=[]);var a=n.createUniqueName(i.name&&!e.isGeneratedIdentifier(i.name)?e.idText(i.name):"default");return r[e.getOriginalNodeId(i)]=a,o(a),a}}(a),f=u<=2?n.getInternalName(a,!1,!0):n.getLocalName(a,!1,!0),m=e.visitNodes(a.heritageClauses,d,e.isHeritageClause),v=e.visitNodes(a.members,d,e.isClassElement),h=[];l=g(a,v),v=l.members,h=l.decorationStatements;var b=n.createClassExpression(void 0,c,void 0,m,v);e.setOriginalNode(b,a),e.setTextRange(b,_);var x=n.createVariableStatement(void 0,n.createVariableDeclarationList([n.createVariableDeclaration(f,void 0,void 0,p?n.createAssignment(p,b):b)],1));e.setOriginalNode(x,a),e.setTextRange(x,_),e.setCommentRange(x,a);var D=[x];return e.addRange(D,h),function(t,a){var o=function(t){var a=e.getAllDecoratorsOfClass(t),o=y(a);if(!o)return;var s=r&&r[e.getOriginalNodeId(t)],c=u<=2?n.getInternalName(t,!1,!0):n.getLocalName(t,!1,!0),l=i().createDecorateHelper(o,c),_=n.createAssignment(c,s?n.createAssignment(s,l):l);return e.setEmitFlags(_,1536),e.setSourceMapRange(_,e.moveRangePastModifiers(t)),_}(a);o&&t.push(e.setOriginalNode(n.createExpressionStatement(o),a))}(D,a),D}(a,a.name):function(t,r){var i,a=e.visitNodes(t.modifiers,_,e.isModifier),o=e.visitNodes(t.heritageClauses,d,e.isHeritageClause),s=e.visitNodes(t.members,d,e.isClassElement),c=[];i=g(t,s),s=i.members,c=i.decorationStatements;var u=n.updateClassDeclaration(t,a,r,void 0,o,s);return e.addRange([u],c)}(a,a.name);c.length>1&&(c.push(n.createEndOfDeclarationMarker(a)),e.setEmitFlags(c[0],4194304|e.getEmitFlags(c[0])));return e.singleOrMany(c)}(a);case 228:return function(t){return n.updateClassExpression(t,e.visitNodes(t.modifiers,_,e.isModifier),t.name,void 0,e.visitNodes(t.heritageClauses,d,e.isHeritageClause),e.visitNodes(t.members,d,e.isClassElement))}(a);case 173:return function(t){return n.updateConstructorDeclaration(t,e.visitNodes(t.modifiers,_,e.isModifier),e.visitNodes(t.parameters,d,e.isParameterDeclaration),e.visitNode(t.body,d,e.isBlock))}(a);case 171:return function(t){return m(n.updateMethodDeclaration(t,e.visitNodes(t.modifiers,_,e.isModifier),t.asteriskToken,e.visitNode(t.name,d,e.isPropertyName),void 0,void 0,e.visitNodes(t.parameters,d,e.isParameterDeclaration),void 0,e.visitNode(t.body,d,e.isBlock)),t)}(a);case 175:return function(t){return m(n.updateSetAccessorDeclaration(t,e.visitNodes(t.modifiers,_,e.isModifier),e.visitNode(t.name,d,e.isPropertyName),e.visitNodes(t.parameters,d,e.isParameterDeclaration),e.visitNode(t.body,d,e.isBlock)),t)}(a);case 174:return function(t){return m(n.updateGetAccessorDeclaration(t,e.visitNodes(t.modifiers,_,e.isModifier),e.visitNode(t.name,d,e.isPropertyName),e.visitNodes(t.parameters,d,e.isParameterDeclaration),void 0,e.visitNode(t.body,d,e.isBlock)),t)}(a);case 169:return function(t){if(16777216&t.flags||e.hasSyntacticModifier(t,2))return;return m(n.updatePropertyDeclaration(t,e.visitNodes(t.modifiers,_,e.isModifier),e.visitNode(t.name,d,e.isPropertyName),void 0,void 0,e.visitNode(t.initializer,d,e.isExpression)),t)}(a);case 166:return function(t){var r=n.updateParameterDeclaration(t,e.elideNodes(n,t.modifiers),t.dotDotDotToken,e.visitNode(t.name,d,e.isBindingName),void 0,void 0,e.visitNode(t.initializer,d,e.isExpression));r!==t&&(e.setCommentRange(r,t),e.setTextRange(r,e.moveRangePastModifiers(t)),e.setSourceMapRange(r,e.moveRangePastModifiers(t)),e.setEmitFlags(r.name,32));return r}(a);default:return e.visitEachChild(a,d,t)}}function p(e){return!!(536870912&e.transformFlags)}function f(t){return e.some(t,p)}function g(t,r){var i=[];return v(i,t,!1),v(i,t,!0),function(t){for(var r=0,n=t.members;r<n.length;r++){var i=n[r];if(e.canHaveDecorators(i)){var a=e.getAllDecoratorsOfClassElement(i,t);if(e.some(null==a?void 0:a.decorators,p))return!0;if(e.some(null==a?void 0:a.parameters,f))return!0}}return!1}(t)&&(r=e.setTextRange(n.createNodeArray(a(a([],r,!0),[n.createClassStaticBlockDeclaration(n.createBlock(i,!0))],!1)),r),i=void 0),{decorationStatements:i,members:r}}function m(t,r){return t!==r&&(e.setCommentRange(t,r),e.setSourceMapRange(t,e.moveRangePastModifiers(r))),t}function y(t){if(t){var r=[];return e.addRange(r,e.map(t.decorators,b)),e.addRange(r,e.flatMap(t.parameters,x)),r}}function v(t,r,i){e.addRange(t,e.map(function(t,r){for(var n,i=function(t,r){return e.filter(t.members,(function(n){return function(t,r,n){return e.nodeOrChildIsDecorated(t,n)&&r===e.isStatic(t)}(n,r,t)}))}(t,r),a=0,o=i;a<o.length;a++){var s=o[a];n=e.append(n,h(t,s))}return n}(r,i),(function(e){return n.createExpressionStatement(e)})))}function h(t,r){var a=y(e.getAllDecoratorsOfClassElement(r,t));if(a){var o=function(t,r){return e.isStatic(r)?n.getDeclarationName(t):function(e){return n.createPropertyAccessExpression(n.getDeclarationName(e),"prototype")}(t)}(t,r),s=function(t,r){var i=t.name;return e.isPrivateIdentifier(i)?n.createIdentifier(""):e.isComputedPropertyName(i)?r&&!e.isSimpleInlineableExpression(i.expression)?n.getGeneratedNameForNode(i):i.expression:e.isIdentifier(i)?n.createStringLiteral(e.idText(i)):n.cloneNode(i)}(r,!e.hasSyntacticModifier(r,2)),c=u>0?e.isPropertyDeclaration(r)&&!e.hasAccessorModifier(r)?n.createVoidZero():n.createNull():void 0,l=i().createDecorateHelper(a,o,s,c);return e.setEmitFlags(l,1536),e.setSourceMapRange(l,e.moveRangePastModifiers(r)),l}}function b(t){return e.visitNode(t.expression,d,e.isExpression)}function x(t,r){var n;if(t){n=[];for(var a=0,o=t;a<o.length;a++){var s=o[a],c=i().createParamHelper(b(s),r);e.setTextRange(c,s.expression),e.setEmitFlags(c,1536),n.push(c)}}return n}}}(_||(_={})),function(e){var t,r;function n(t,r,n,i){var a=0!=(4096&r.getNodeCheckFlags(n)),o=[];return i.forEach((function(r,n){var i=e.unescapeLeadingUnderscores(n),s=[];s.push(t.createPropertyAssignment("get",t.createArrowFunction(void 0,void 0,[],void 0,void 0,e.setEmitFlags(t.createPropertyAccessExpression(e.setEmitFlags(t.createSuper(),4),i),4)))),a&&s.push(t.createPropertyAssignment("set",t.createArrowFunction(void 0,void 0,[t.createParameterDeclaration(void 0,void 0,"v",void 0,void 0,void 0)],void 0,void 0,t.createAssignment(e.setEmitFlags(t.createPropertyAccessExpression(e.setEmitFlags(t.createSuper(),4),i),4),t.createIdentifier("v"))))),o.push(t.createPropertyAssignment(i,t.createObjectLiteralExpression(s)))})),t.createVariableStatement(void 0,t.createVariableDeclarationList([t.createVariableDeclaration(t.createUniqueName("_super",48),void 0,void 0,t.createCallExpression(t.createPropertyAccessExpression(t.createIdentifier("Object"),"create"),void 0,[t.createNull(),t.createObjectLiteralExpression(o,!0)]))],2))}!function(e){e[e.AsyncMethodsWithSuper=1]="AsyncMethodsWithSuper"}(t||(t={})),function(e){e[e.NonTopLevel=1]="NonTopLevel",e[e.HasLexicalThis=2]="HasLexicalThis"}(r||(r={})),e.transformES2017=function(t){var r,i,o,s,c=t.factory,u=t.getEmitHelperFactory,l=t.resumeLexicalEnvironment,_=t.endLexicalEnvironment,d=t.hoistVariableDeclaration,p=t.getEmitResolver(),f=t.getCompilerOptions(),g=e.getEmitScriptTarget(f),m=0,y=[],v=0,h=t.onEmitNode,b=t.onSubstituteNode;return t.onEmitNode=function(t,n,i){if(1&r&&function(e){var t=e.kind;return 260===t||173===t||171===t||174===t||175===t}(n)){var a=6144&p.getNodeCheckFlags(n);if(a!==m){var o=m;return m=a,h(t,n,i),void(m=o)}}else if(r&&y[e.getNodeId(n)]){o=m;return m=0,h(t,n,i),void(m=o)}h(t,n,i)},t.onSubstituteNode=function(t,r){if(r=b(t,r),1===t&&m)return function(t){switch(t.kind){case 208:return q(t);case 209:return W(t);case 210:return function(t){var r=t.expression;if(e.isSuperProperty(r)){var n=e.isPropertyAccessExpression(r)?q(r):W(r);return c.createCallExpression(c.createPropertyAccessExpression(n,"call"),void 0,a([c.createThis()],t.arguments,!0))}return t}(t)}return t}(r);return r},e.chainBundle(t,(function(r){if(r.isDeclarationFile)return r;x(1,!1),x(2,!e.isEffectiveStrictModeSourceFile(r,f));var n=e.visitEachChild(r,E,t);return e.addEmitHelpers(n,t.readEmitHelpers()),n}));function x(e,t){v=t?v|e:v&~e}function D(e){return 0!=(v&e)}function S(){return D(2)}function T(e,t,r){var n=e&~v;if(n){x(n,!0);var i=t(r);return x(n,!1),i}return t(r)}function C(r){return e.visitEachChild(r,E,t)}function E(r){if(0==(256&r.transformFlags))return r;switch(r.kind){case 132:return;case 220:return function(r){if(!D(1))return e.visitEachChild(r,E,t);return e.setOriginalNode(e.setTextRange(c.createYieldExpression(void 0,e.visitNode(r.expression,E,e.isExpression)),r),r)}(r);case 171:return T(3,A,r);case 259:return T(3,w,r);case 215:return T(3,I,r);case 216:return T(1,O,r);case 208:return o&&e.isPropertyAccessExpression(r)&&106===r.expression.kind&&o.add(r.name.escapedText),e.visitEachChild(r,E,t);case 209:return o&&106===r.expression.kind&&(s=!0),e.visitEachChild(r,E,t);case 174:return T(3,F,r);case 175:return T(3,P,r);case 173:return T(3,N,r);case 260:case 228:return T(3,C,r);default:return e.visitEachChild(r,E,t)}}function k(r){if(e.isNodeWithPossibleHoistedDeclaration(r))switch(r.kind){case 240:return function(r){if(L(r.declarationList)){var n=R(r.declarationList,!1);return n?c.createExpressionStatement(n):void 0}return e.visitEachChild(r,E,t)}(r);case 245:return function(r){var n=r.initializer;return c.updateForStatement(r,L(n)?R(n,!1):e.visitNode(r.initializer,E,e.isForInitializer),e.visitNode(r.condition,E,e.isExpression),e.visitNode(r.incrementor,E,e.isExpression),e.visitIterationBody(r.statement,k,t))}(r);case 246:return function(r){return c.updateForInStatement(r,L(r.initializer)?R(r.initializer,!0):e.visitNode(r.initializer,E,e.isForInitializer),e.visitNode(r.expression,E,e.isExpression),e.visitIterationBody(r.statement,k,t))}(r);case 247:return function(r){return c.updateForOfStatement(r,e.visitNode(r.awaitModifier,E,e.isToken),L(r.initializer)?R(r.initializer,!0):e.visitNode(r.initializer,E,e.isForInitializer),e.visitNode(r.expression,E,e.isExpression),e.visitIterationBody(r.statement,k,t))}(r);case 295:return function(r){var n,a=new e.Set;if(M(r.variableDeclaration,a),a.forEach((function(t,r){i.has(r)&&(n||(n=new e.Set(i)),n.delete(r))})),n){var o=i;i=n;var s=e.visitEachChild(r,k,t);return i=o,s}return e.visitEachChild(r,k,t)}(r);case 238:case 252:case 266:case 292:case 293:case 255:case 243:case 244:case 242:case 251:case 253:return e.visitEachChild(r,k,t);default:return e.Debug.assertNever(r,"Unhandled node.")}return E(r)}function N(r){return c.updateConstructorDeclaration(r,e.visitNodes(r.modifiers,E,e.isModifierLike),e.visitParameterList(r.parameters,E,t),z(r))}function A(r){return c.updateMethodDeclaration(r,e.visitNodes(r.modifiers,E,e.isModifierLike),r.asteriskToken,r.name,void 0,void 0,e.visitParameterList(r.parameters,E,t),void 0,2&e.getFunctionFlags(r)?U(r):z(r))}function F(r){return c.updateGetAccessorDeclaration(r,e.visitNodes(r.modifiers,E,e.isModifierLike),r.name,e.visitParameterList(r.parameters,E,t),void 0,z(r))}function P(r){return c.updateSetAccessorDeclaration(r,e.visitNodes(r.modifiers,E,e.isModifierLike),r.name,e.visitParameterList(r.parameters,E,t),z(r))}function w(r){return c.updateFunctionDeclaration(r,e.visitNodes(r.modifiers,E,e.isModifierLike),r.asteriskToken,r.name,void 0,e.visitParameterList(r.parameters,E,t),void 0,2&e.getFunctionFlags(r)?U(r):e.visitFunctionBody(r.body,E,t))}function I(r){return c.updateFunctionExpression(r,e.visitNodes(r.modifiers,E,e.isModifierLike),r.asteriskToken,r.name,void 0,e.visitParameterList(r.parameters,E,t),void 0,2&e.getFunctionFlags(r)?U(r):e.visitFunctionBody(r.body,E,t))}function O(r){return c.updateArrowFunction(r,e.visitNodes(r.modifiers,E,e.isModifierLike),void 0,e.visitParameterList(r.parameters,E,t),void 0,r.equalsGreaterThanToken,2&e.getFunctionFlags(r)?U(r):e.visitFunctionBody(r.body,E,t))}function M(t,r){var n=t.name;if(e.isIdentifier(n))r.add(n.escapedText);else for(var i=0,a=n.elements;i<a.length;i++){var o=a[i];e.isOmittedExpression(o)||M(o,r)}}function L(t){return!!t&&e.isVariableDeclarationList(t)&&!(3&t.flags)&&t.declarations.some(J)}function R(t,r){!function(t){e.forEach(t.declarations,B)}(t);var n=e.getInitializedVariables(t);return 0===n.length?r?e.visitNode(c.converters.convertToAssignmentElementTarget(t.declarations[0].name),E,e.isExpression):void 0:c.inlineExpressions(e.map(n,j))}function B(t){var r=t.name;if(e.isIdentifier(r))d(r);else for(var n=0,i=r.elements;n<i.length;n++){var a=i[n];e.isOmittedExpression(a)||B(a)}}function j(t){var r=e.setSourceMapRange(c.createAssignment(c.converters.convertToAssignmentElementTarget(t.name),t.initializer),t);return e.visitNode(r,E,e.isExpression)}function J(t){var r=t.name;if(e.isIdentifier(r))return i.has(r.escapedText);for(var n=0,a=r.elements;n<a.length;n++){var o=a[n];if(!e.isOmittedExpression(o)&&J(o))return!0}return!1}function z(r){e.Debug.assertIsDefined(r.body);var i=o,a=s;o=new e.Set,s=!1;var u=e.visitFunctionBody(r.body,E,t),l=e.getOriginalNode(r,e.isFunctionLikeDeclaration);if(g>=2&&6144&p.getNodeCheckFlags(r)&&3!=(3&e.getFunctionFlags(l))){if(V(),o.size){var _=n(c,p,r,o);y[e.getNodeId(_)]=!0;var d=u.statements.slice();e.insertStatementsAfterStandardPrologue(d,[_]),u=c.updateBlock(u,d)}s&&(4096&p.getNodeCheckFlags(r)?e.addEmitHelper(u,e.advancedAsyncSuperHelper):2048&p.getNodeCheckFlags(r)&&e.addEmitHelper(u,e.asyncSuperHelper))}return o=i,s=a,u}function U(t){l();var r=e.getOriginalNode(t,e.isFunctionLike).type,a=g<2?function(t){var r=t&&e.getEntityNameFromTypeNode(t);if(r&&e.isEntityName(r)){var n=p.getTypeReferenceSerializationKind(r);if(n===e.TypeReferenceSerializationKind.TypeWithConstructSignatureAndValue||n===e.TypeReferenceSerializationKind.Unknown)return r}return}(r):void 0,d=216===t.kind,f=0!=(8192&p.getNodeCheckFlags(t)),m=i;i=new e.Set;for(var v=0,h=t.parameters;v<h.length;v++){M(h[v],i)}var b,x=o,D=s;if(d||(o=new e.Set,s=!1),d){var T=u().createAwaiterHelper(S(),f,a,K(t.body)),C=_();if(e.some(C)){P=c.converters.convertToFunctionBlock(T);b=c.updateBlock(P,e.setTextRange(c.createNodeArray(e.concatenate(C,P.statements)),P.statements))}else b=T}else{var k=[],N=c.copyPrologue(t.body.statements,k,!1,E);k.push(c.createReturnStatement(u().createAwaiterHelper(S(),f,a,K(t.body,N)))),e.insertStatementsAfterStandardPrologue(k,_());var A=g>=2&&6144&p.getNodeCheckFlags(t);if(A&&(V(),o.size)){var F=n(c,p,t,o);y[e.getNodeId(F)]=!0,e.insertStatementsAfterStandardPrologue(k,[F])}var P=c.createBlock(k,!0);e.setTextRange(P,t.body),A&&s&&(4096&p.getNodeCheckFlags(t)?e.addEmitHelper(P,e.advancedAsyncSuperHelper):2048&p.getNodeCheckFlags(t)&&e.addEmitHelper(P,e.asyncSuperHelper)),b=P}return i=m,d||(o=x,s=D),b}function K(t,r){return e.isBlock(t)?c.updateBlock(t,e.visitNodes(t.statements,k,e.isStatement,r)):c.converters.convertToFunctionBlock(e.visitNode(t,k,e.isConciseBody))}function V(){0==(1&r)&&(r|=1,t.enableSubstitution(210),t.enableSubstitution(208),t.enableSubstitution(209),t.enableEmitNotification(260),t.enableEmitNotification(171),t.enableEmitNotification(174),t.enableEmitNotification(175),t.enableEmitNotification(173),t.enableEmitNotification(240))}function q(t){return 106===t.expression.kind?e.setTextRange(c.createPropertyAccessExpression(c.createUniqueName("_super",48),t.name),t):t}function W(t){return 106===t.expression.kind?(r=t.argumentExpression,n=t,4096&m?e.setTextRange(c.createPropertyAccessExpression(c.createCallExpression(c.createUniqueName("_superIndex",48),void 0,[r]),"value"),n):e.setTextRange(c.createCallExpression(c.createUniqueName("_superIndex",48),void 0,[r]),n)):t;var r,n}},e.createSuperAccessVariableStatement=n}(_||(_={})),function(e){var t,r;!function(e){e[e.AsyncMethodsWithSuper=1]="AsyncMethodsWithSuper"}(t||(t={})),function(e){e[e.None=0]="None",e[e.HasLexicalThis=1]="HasLexicalThis",e[e.IterationContainer=2]="IterationContainer",e[e.AncestorFactsMask=3]="AncestorFactsMask",e[e.SourceFileIncludes=1]="SourceFileIncludes",e[e.SourceFileExcludes=2]="SourceFileExcludes",e[e.StrictModeSourceFileIncludes=0]="StrictModeSourceFileIncludes",e[e.ClassOrFunctionIncludes=1]="ClassOrFunctionIncludes",e[e.ClassOrFunctionExcludes=2]="ClassOrFunctionExcludes",e[e.ArrowFunctionIncludes=0]="ArrowFunctionIncludes",e[e.ArrowFunctionExcludes=2]="ArrowFunctionExcludes",e[e.IterationStatementIncludes=2]="IterationStatementIncludes",e[e.IterationStatementExcludes=0]="IterationStatementExcludes"}(r||(r={})),e.transformES2018=function(t){var r=t.factory,n=t.getEmitHelperFactory,i=t.resumeLexicalEnvironment,o=t.endLexicalEnvironment,s=t.hoistVariableDeclaration,c=t.getEmitResolver(),u=t.getCompilerOptions(),l=e.getEmitScriptTarget(u),_=t.onEmitNode;t.onEmitNode=function(t,r,n){if(1&p&&function(e){var t=e.kind;return 260===t||173===t||171===t||174===t||175===t}(r)){var i=6144&c.getNodeCheckFlags(r);if(i!==x){var a=x;return x=i,_(t,r,n),void(x=a)}}else if(p&&S[e.getNodeId(r)]){a=x;return x=0,_(t,r,n),void(x=a)}_(t,r,n)};var d=t.onSubstituteNode;t.onSubstituteNode=function(t,n){if(n=d(t,n),1===t&&x)return function(t){switch(t.kind){case 208:return X(t);case 209:return Y(t);case 210:return function(t){var n=t.expression;if(e.isSuperProperty(n)){var i=e.isPropertyAccessExpression(n)?X(n):Y(n);return r.createCallExpression(r.createPropertyAccessExpression(i,"call"),void 0,a([r.createThis()],t.arguments,!0))}return t}(t)}return t}(n);return n};var p,f,g,m,y,v,h,b=!1,x=0,D=0,S=[];return e.chainBundle(t,(function(n){if(n.isDeclarationFile)return n;m=n;var i=function(n){var i=T(2,e.isEffectiveStrictModeSourceFile(n,u)?0:1);b=!1;var a=e.visitEachChild(n,k,t),o=e.concatenate(a.statements,y&&[r.createVariableStatement(void 0,r.createVariableDeclarationList(y))]),s=r.updateSourceFile(a,e.setTextRange(r.createNodeArray(o),n.statements));return C(i),s}(n);return e.addEmitHelpers(i,t.readEmitHelpers()),m=void 0,y=void 0,i}));function T(e,t){var r=D;return D=3&(D&~e|t),r}function C(e){D=e}function E(t){y=e.append(y,r.createVariableDeclaration(t))}function k(e){return w(e,!1)}function N(e){return w(e,!0)}function A(e){if(132!==e.kind)return e}function F(e,t,r,n){if(function(e,t){return D!==(D&~e|t)}(r,n)){var i=T(r,n),a=e(t);return C(i),a}return e(t)}function P(r){return e.visitEachChild(r,k,t)}function w(i,o){if(0==(128&i.transformFlags))return i;switch(i.kind){case 220:return function(i){if(2&f&&1&f)return e.setOriginalNode(e.setTextRange(r.createYieldExpression(void 0,n().createAwaitHelper(e.visitNode(i.expression,k,e.isExpression))),i),i);return e.visitEachChild(i,k,t)}(i);case 226:return function(i){if(2&f&&1&f){if(i.asteriskToken){var a=e.visitNode(e.Debug.checkDefined(i.expression),k,e.isExpression);return e.setOriginalNode(e.setTextRange(r.createYieldExpression(void 0,n().createAwaitHelper(r.updateYieldExpression(i,i.asteriskToken,e.setTextRange(n().createAsyncDelegatorHelper(e.setTextRange(n().createAsyncValuesHelper(a),a)),a)))),i),i)}return e.setOriginalNode(e.setTextRange(r.createYieldExpression(void 0,L(i.expression?e.visitNode(i.expression,k,e.isExpression):r.createVoidZero())),i),i)}return e.visitEachChild(i,k,t)}(i);case 250:return function(n){if(2&f&&1&f)return r.updateReturnStatement(n,L(n.expression?e.visitNode(n.expression,k,e.isExpression):r.createVoidZero()));return e.visitEachChild(n,k,t)}(i);case 253:return function(n){if(2&f){var i=e.unwrapInnermostStatementOfLabel(n);return 247===i.kind&&i.awaitModifier?M(i,n):r.restoreEnclosingLabel(e.visitNode(i,k,e.isStatement,r.liftToBlock),n)}return e.visitEachChild(n,k,t)}(i);case 207:return function(i){if(65536&i.transformFlags){var a=function(t){for(var n,i=[],a=0,o=t;a<o.length;a++){var s=o[a];if(301===s.kind){n&&(i.push(r.createObjectLiteralExpression(n)),n=void 0);var c=s.expression;i.push(e.visitNode(c,k,e.isExpression))}else n=e.append(n,299===s.kind?r.createPropertyAssignment(s.name,e.visitNode(s.initializer,k,e.isExpression)):e.visitNode(s,k,e.isObjectLiteralElementLike))}n&&i.push(r.createObjectLiteralExpression(n));return i}(i.properties);a.length&&207!==a[0].kind&&a.unshift(r.createObjectLiteralExpression());var o=a[0];if(a.length>1){for(var s=1;s<a.length;s++)o=n().createAssignHelper([o,a[s]]);return o}return n().createAssignHelper(a)}return e.visitEachChild(i,k,t)}(i);case 223:return function(n,i){if(e.isDestructuringAssignment(n)&&65536&n.left.transformFlags)return e.flattenDestructuringAssignment(n,k,t,1,!i);if(27===n.operatorToken.kind)return r.updateBinaryExpression(n,e.visitNode(n.left,N,e.isExpression),n.operatorToken,e.visitNode(n.right,i?N:k,e.isExpression));return e.visitEachChild(n,k,t)}(i,o);case 354:return function(n,i){if(i)return e.visitEachChild(n,N,t);for(var a,o=0;o<n.elements.length;o++){var s=n.elements[o],c=e.visitNode(s,o<n.elements.length-1?N:k,e.isExpression);(a||c!==s)&&(a||(a=n.elements.slice(0,o)),a.push(c))}var u=a?e.setTextRange(r.createNodeArray(a),n.elements):n.elements;return r.updateCommaListExpression(n,u)}(i,o);case 295:return function(n){if(n.variableDeclaration&&e.isBindingPattern(n.variableDeclaration.name)&&65536&n.variableDeclaration.name.transformFlags){var i=r.getGeneratedNameForNode(n.variableDeclaration.name),o=r.updateVariableDeclaration(n.variableDeclaration,n.variableDeclaration.name,void 0,void 0,i),s=e.flattenDestructuringBinding(o,k,t,1),c=e.visitNode(n.block,k,e.isBlock);return e.some(s)&&(c=r.updateBlock(c,a([r.createVariableStatement(void 0,s)],c.statements,!0))),r.updateCatchClause(n,r.updateVariableDeclaration(n.variableDeclaration,i,void 0,void 0,void 0),c)}return e.visitEachChild(n,k,t)}(i);case 240:return function(r){if(e.hasSyntacticModifier(r,1)){var n=b;b=!0;var i=e.visitEachChild(r,k,t);return b=n,i}return e.visitEachChild(r,k,t)}(i);case 257:return function(e){if(b){var t=b;b=!1;var r=I(e,!0);return b=t,r}return I(e,!1)}(i);case 243:case 244:case 246:return F(P,i,0,2);case 247:return M(i,void 0);case 245:return F(O,i,0,2);case 219:case 241:return function(r){return e.visitEachChild(r,N,t)}(i);case 173:return F(J,i,2,1);case 171:return F(K,i,2,1);case 174:return F(z,i,2,1);case 175:return F(U,i,2,1);case 259:return F(V,i,2,1);case 215:return F(W,i,2,1);case 216:return F(q,i,2,0);case 166:return B(i);case 214:return function(r,n){return e.visitEachChild(r,n?N:k,t)}(i,o);case 212:return function(r){return e.processTaggedTemplateExpression(t,r,k,m,E,e.ProcessLevel.LiftRestriction)}(i);case 208:return v&&e.isPropertyAccessExpression(i)&&106===i.expression.kind&&v.add(i.name.escapedText),e.visitEachChild(i,k,t);case 209:return v&&106===i.expression.kind&&(h=!0),e.visitEachChild(i,k,t);case 260:case 228:return F(P,i,2,1);default:return e.visitEachChild(i,k,t)}}function I(r,n){return e.isBindingPattern(r.name)&&65536&r.name.transformFlags?e.flattenDestructuringBinding(r,k,t,1,void 0,n):e.visitEachChild(r,k,t)}function O(n){return r.updateForStatement(n,e.visitNode(n.initializer,N,e.isForInitializer),e.visitNode(n.condition,k,e.isExpression),e.visitNode(n.incrementor,N,e.isExpression),e.visitIterationBody(n.statement,k,t))}function M(i,a){var o=T(0,2);65536&i.initializer.transformFlags&&(i=function(t){var n=e.skipParentheses(t.initializer);if(e.isVariableDeclarationList(n)||e.isAssignmentPattern(n)){var i=void 0,a=void 0,o=r.createTempVariable(void 0),s=[e.createForOfBindingStatement(r,n,o)];return e.isBlock(t.statement)?(e.addRange(s,t.statement.statements),i=t.statement,a=t.statement.statements):t.statement&&(e.append(s,t.statement),i=t.statement,a=t.statement),r.updateForOfStatement(t,t.awaitModifier,e.setTextRange(r.createVariableDeclarationList([e.setTextRange(r.createVariableDeclaration(o),t.initializer)],1),t.initializer),t.expression,e.setTextRange(r.createBlock(e.setTextRange(r.createNodeArray(s),a),!0),i))}return t}(i));var c=i.awaitModifier?function(i,a,o){var c=e.visitNode(i.expression,k,e.isExpression),u=e.isIdentifier(c)?r.getGeneratedNameForNode(c):r.createTempVariable(void 0),l=e.isIdentifier(c)?r.getGeneratedNameForNode(u):r.createTempVariable(void 0),_=r.createTempVariable(void 0),d=r.createTempVariable(s),p=r.createUniqueName("e"),f=r.getGeneratedNameForNode(p),g=r.createTempVariable(void 0),m=e.setTextRange(n().createAsyncValuesHelper(c),i.expression),y=r.createCallExpression(r.createPropertyAccessExpression(u,"next"),void 0,[]),v=r.createPropertyAccessExpression(l,"done"),h=r.createPropertyAccessExpression(l,"value"),b=r.createFunctionCallCall(g,u,[]);s(p),s(g);var x=2&o?r.inlineExpressions([r.createAssignment(p,r.createVoidZero()),m]):m,D=e.setEmitFlags(e.setTextRange(r.createForStatement(e.setEmitFlags(e.setTextRange(r.createVariableDeclarationList([r.createVariableDeclaration(_,void 0,void 0,r.createTrue()),e.setTextRange(r.createVariableDeclaration(u,void 0,void 0,x),i.expression),r.createVariableDeclaration(l)]),i.expression),2097152),r.inlineExpressions([r.createAssignment(l,L(y)),r.createAssignment(d,v),r.createLogicalNot(d)]),void 0,function(n,i,a){var o=r.createTempVariable(s),c=r.createAssignment(o,i),u=r.createExpressionStatement(c);e.setSourceMapRange(u,n.expression);var l=r.createAssignment(a,r.createFalse()),_=r.createExpressionStatement(l);e.setSourceMapRange(_,n.expression);var d=r.createAssignment(a,r.createTrue()),p=r.createExpressionStatement(d);e.setSourceMapRange(_,n.expression);var f,g,m=[],y=e.createForOfBindingStatement(r,n.initializer,o);m.push(e.visitNode(y,k,e.isStatement));var v=e.visitIterationBody(n.statement,k,t);e.isBlock(v)?(e.addRange(m,v.statements),f=v,g=v.statements):m.push(v);var h=e.setEmitFlags(e.setTextRange(r.createBlock(e.setTextRange(r.createNodeArray(m),g),!0),f),432);return r.createBlock([u,_,r.createTryStatement(h,void 0,r.createBlock([p]))])}(i,h,_)),i),256);return e.setOriginalNode(D,i),r.createTryStatement(r.createBlock([r.restoreEnclosingLabel(D,a)]),r.createCatchClause(r.createVariableDeclaration(f),e.setEmitFlags(r.createBlock([r.createExpressionStatement(r.createAssignment(p,r.createObjectLiteralExpression([r.createPropertyAssignment("error",f)])))]),1)),r.createBlock([r.createTryStatement(r.createBlock([e.setEmitFlags(r.createIfStatement(r.createLogicalAnd(r.createLogicalAnd(r.createLogicalNot(_),r.createLogicalNot(d)),r.createAssignment(g,r.createPropertyAccessExpression(u,"return"))),r.createExpressionStatement(L(b))),1)]),void 0,e.setEmitFlags(r.createBlock([e.setEmitFlags(r.createIfStatement(p,r.createThrowStatement(r.createPropertyAccessExpression(p,"error"))),1)]),1))]))}(i,a,o):r.restoreEnclosingLabel(e.visitEachChild(i,k,t),a);return C(o),c}function L(e){return 1&f?r.createYieldExpression(void 0,n().createAwaitHelper(e)):r.createAwaitExpression(e)}function R(t){return e.Debug.assertNode(t,e.isParameter),B(t)}function B(n){return(null==g?void 0:g.has(n))?r.updateParameterDeclaration(n,void 0,n.dotDotDotToken,e.isBindingPattern(n.name)?r.getGeneratedNameForNode(n):n.name,void 0,void 0,void 0):65536&n.transformFlags?r.updateParameterDeclaration(n,void 0,n.dotDotDotToken,r.getGeneratedNameForNode(n),void 0,void 0,e.visitNode(n.initializer,k,e.isExpression)):e.visitEachChild(n,k,t)}function j(t){for(var r,n=0,i=t.parameters;n<i.length;n++){var a=i[n];r?r.add(a):65536&a.transformFlags&&(r=new e.Set)}return r}function J(n){var i=f,a=g;f=e.getFunctionFlags(n),g=j(n);var o=r.updateConstructorDeclaration(n,n.modifiers,e.visitParameterList(n.parameters,R,t),G(n));return f=i,g=a,o}function z(n){var i=f,a=g;f=e.getFunctionFlags(n),g=j(n);var o=r.updateGetAccessorDeclaration(n,n.modifiers,e.visitNode(n.name,k,e.isPropertyName),e.visitParameterList(n.parameters,R,t),void 0,G(n));return f=i,g=a,o}function U(n){var i=f,a=g;f=e.getFunctionFlags(n),g=j(n);var o=r.updateSetAccessorDeclaration(n,n.modifiers,e.visitNode(n.name,k,e.isPropertyName),e.visitParameterList(n.parameters,R,t),G(n));return f=i,g=a,o}function K(n){var i=f,a=g;f=e.getFunctionFlags(n),g=j(n);var o=r.updateMethodDeclaration(n,1&f?e.visitNodes(n.modifiers,A,e.isModifierLike):n.modifiers,2&f?void 0:n.asteriskToken,e.visitNode(n.name,k,e.isPropertyName),e.visitNode(void 0,k,e.isToken),void 0,e.visitParameterList(n.parameters,R,t),void 0,2&f&&1&f?H(n):G(n));return f=i,g=a,o}function V(n){var i=f,a=g;f=e.getFunctionFlags(n),g=j(n);var o=r.updateFunctionDeclaration(n,1&f?e.visitNodes(n.modifiers,A,e.isModifier):n.modifiers,2&f?void 0:n.asteriskToken,n.name,void 0,e.visitParameterList(n.parameters,R,t),void 0,2&f&&1&f?H(n):G(n));return f=i,g=a,o}function q(n){var i=f,a=g;f=e.getFunctionFlags(n),g=j(n);var o=r.updateArrowFunction(n,n.modifiers,void 0,e.visitParameterList(n.parameters,R,t),void 0,n.equalsGreaterThanToken,G(n));return f=i,g=a,o}function W(n){var i=f,a=g;f=e.getFunctionFlags(n),g=j(n);var o=r.updateFunctionExpression(n,1&f?e.visitNodes(n.modifiers,A,e.isModifier):n.modifiers,2&f?void 0:n.asteriskToken,n.name,void 0,e.visitParameterList(n.parameters,R,t),void 0,2&f&&1&f?H(n):G(n));return f=i,g=a,o}function H(a){i();var s=[],u=r.copyPrologue(a.body.statements,s,!1,k);Q(s,a);var _=v,d=h;v=new e.Set,h=!1;var f=r.createReturnStatement(n().createAsyncGeneratorHelper(r.createFunctionExpression(void 0,r.createToken(41),a.name&&r.getGeneratedNameForNode(a.name),void 0,[],void 0,r.updateBlock(a.body,e.visitLexicalEnvironment(a.body.statements,k,t,u))),!!(1&D))),g=l>=2&&6144&c.getNodeCheckFlags(a);if(g){0==(1&p)&&(p|=1,t.enableSubstitution(210),t.enableSubstitution(208),t.enableSubstitution(209),t.enableEmitNotification(260),t.enableEmitNotification(171),t.enableEmitNotification(174),t.enableEmitNotification(175),t.enableEmitNotification(173),t.enableEmitNotification(240));var m=e.createSuperAccessVariableStatement(r,c,a,v);S[e.getNodeId(m)]=!0,e.insertStatementsAfterStandardPrologue(s,[m])}s.push(f),e.insertStatementsAfterStandardPrologue(s,o());var y=r.updateBlock(a.body,s);return g&&h&&(4096&c.getNodeCheckFlags(a)?e.addEmitHelper(y,e.advancedAsyncSuperHelper):2048&c.getNodeCheckFlags(a)&&e.addEmitHelper(y,e.asyncSuperHelper)),v=_,h=d,y}function G(t){var n;i();var a=0,s=[],c=null!==(n=e.visitNode(t.body,k,e.isConciseBody))&&void 0!==n?n:r.createBlock([]);e.isBlock(c)&&(a=r.copyPrologue(c.statements,s,!1,k)),e.addRange(s,Q(void 0,t));var u=o();if(a>0||e.some(s)||e.some(u)){var l=r.converters.convertToFunctionBlock(c,!0);return e.insertStatementsAfterStandardPrologue(s,u),e.addRange(s,l.statements.slice(a)),r.updateBlock(l,e.setTextRange(r.createNodeArray(s),l.statements))}return c}function Q(n,i){for(var a=!1,o=0,s=i.parameters;o<s.length;o++){var c=s[o];if(a){if(e.isBindingPattern(c.name)){if(c.name.elements.length>0){var u=e.flattenDestructuringBinding(c,k,t,0,r.getGeneratedNameForNode(c));if(e.some(u)){var l=r.createVariableDeclarationList(u),_=r.createVariableStatement(void 0,l);e.setEmitFlags(_,1048576),n=e.append(n,_)}}else if(c.initializer){var d=r.getGeneratedNameForNode(c),p=e.visitNode(c.initializer,k,e.isExpression),f=r.createAssignment(d,p);_=r.createExpressionStatement(f);e.setEmitFlags(_,1048576),n=e.append(n,_)}}else if(c.initializer){d=r.cloneNode(c.name);e.setTextRange(d,c.name),e.setEmitFlags(d,48);p=e.visitNode(c.initializer,k,e.isExpression);e.addEmitFlags(p,1584);f=r.createAssignment(d,p);e.setTextRange(f,c),e.setEmitFlags(f,1536);var g=r.createBlock([r.createExpressionStatement(f)]);e.setTextRange(g,c),e.setEmitFlags(g,1953);var m=r.createTypeCheck(r.cloneNode(c.name),"undefined");_=r.createIfStatement(m,g);e.startOnNewLine(_),e.setTextRange(_,c),e.setEmitFlags(_,1050528),n=e.append(n,_)}}else if(65536&c.transformFlags){a=!0;u=e.flattenDestructuringBinding(c,k,t,1,r.getGeneratedNameForNode(c),!1,!0);if(e.some(u)){l=r.createVariableDeclarationList(u),_=r.createVariableStatement(void 0,l);e.setEmitFlags(_,1048576),n=e.append(n,_)}}}return n}function X(t){return 106===t.expression.kind?e.setTextRange(r.createPropertyAccessExpression(r.createUniqueName("_super",48),t.name),t):t}function Y(t){return 106===t.expression.kind?(n=t.argumentExpression,i=t,4096&x?e.setTextRange(r.createPropertyAccessExpression(r.createCallExpression(r.createIdentifier("_superIndex"),void 0,[n]),"value"),i):e.setTextRange(r.createCallExpression(r.createIdentifier("_superIndex"),void 0,[n]),i)):t;var n,i}}}(_||(_={})),function(e){e.transformES2019=function(t){var r=t.factory;return e.chainBundle(t,(function(r){if(r.isDeclarationFile)return r;return e.visitEachChild(r,n,t)}));function n(i){return 0==(64&i.transformFlags)?i:295===i.kind?function(i){if(!i.variableDeclaration)return r.updateCatchClause(i,r.createVariableDeclaration(r.createTempVariable(void 0)),e.visitNode(i.block,n,e.isBlock));return e.visitEachChild(i,n,t)}(i):e.visitEachChild(i,n,t)}}}(_||(_={})),function(e){e.transformES2020=function(t){var r=t.factory,n=t.hoistVariableDeclaration;return e.chainBundle(t,(function(r){if(r.isDeclarationFile)return r;return e.visitEachChild(r,i,t)}));function i(a){if(0==(32&a.transformFlags))return a;switch(a.kind){case 210:var l=o(a,!1);return e.Debug.assertNotNode(l,e.isSyntheticReference),l;case 208:case 209:if(e.isOptionalChain(a)){l=c(a,!1,!1);return e.Debug.assertNotNode(l,e.isSyntheticReference),l}return e.visitEachChild(a,i,t);case 223:return 60===a.operatorToken.kind?function(t){var a=e.visitNode(t.left,i,e.isExpression),o=a;e.isSimpleCopiableExpression(a)||(o=r.createTempVariable(n),a=r.createAssignment(o,a));return e.setTextRange(r.createConditionalExpression(u(a,o),void 0,o,void 0,e.visitNode(t.right,i,e.isExpression)),t)}(a):e.visitEachChild(a,i,t);case 217:return function(t){return e.isOptionalChain(e.skipParentheses(t.expression))?e.setOriginalNode(s(t.expression,!1,!0),t):r.updateDeleteExpression(t,e.visitNode(t.expression,i,e.isExpression))}(a);default:return e.visitEachChild(a,i,t)}}function a(t,n,i){var a=s(t.expression,n,i);return e.isSyntheticReference(a)?r.createSyntheticReferenceExpression(r.updateParenthesizedExpression(t,a.expression),a.thisArg):r.updateParenthesizedExpression(t,a)}function o(n,o){if(e.isOptionalChain(n))return c(n,o,!1);if(e.isParenthesizedExpression(n.expression)&&e.isOptionalChain(e.skipParentheses(n.expression))){var s=a(n.expression,!0,!1),u=e.visitNodes(n.arguments,i,e.isExpression);return e.isSyntheticReference(s)?e.setTextRange(r.createFunctionCallCall(s.expression,s.thisArg,u),n):r.updateCallExpression(n,s,void 0,u)}return e.visitEachChild(n,i,t)}function s(t,s,u){switch(t.kind){case 214:return a(t,s,u);case 208:case 209:return function(t,a,o){if(e.isOptionalChain(t))return c(t,a,o);var s,u=e.visitNode(t.expression,i,e.isExpression);return e.Debug.assertNotNode(u,e.isSyntheticReference),a&&(e.isSimpleCopiableExpression(u)?s=u:(s=r.createTempVariable(n),u=r.createAssignment(s,u))),u=208===t.kind?r.updatePropertyAccessExpression(t,u,e.visitNode(t.name,i,e.isIdentifier)):r.updateElementAccessExpression(t,u,e.visitNode(t.argumentExpression,i,e.isExpression)),s?r.createSyntheticReferenceExpression(u,s):u}(t,s,u);case 210:return o(t,s);default:return e.visitNode(t,i,e.isExpression)}}function c(t,a,o){var c=function(t){e.Debug.assertNotNode(t,e.isNonNullChain);for(var r=[t];!t.questionDotToken&&!e.isTaggedTemplateExpression(t);)t=e.cast(e.skipPartiallyEmittedExpressions(t.expression),e.isOptionalChain),e.Debug.assertNotNode(t,e.isNonNullChain),r.unshift(t);return{expression:t.expression,chain:r}}(t),l=c.expression,_=c.chain,d=s(e.skipPartiallyEmittedExpressions(l),e.isCallChain(_[0]),!1),p=e.isSyntheticReference(d)?d.thisArg:void 0,f=e.isSyntheticReference(d)?d.expression:d,g=r.restoreOuterExpressions(l,f,8);e.isSimpleCopiableExpression(f)||(f=r.createTempVariable(n),g=r.createAssignment(f,g));for(var m,y=f,v=0;v<_.length;v++){var h=_[v];switch(h.kind){case 208:case 209:v===_.length-1&&a&&(e.isSimpleCopiableExpression(y)?m=y:(m=r.createTempVariable(n),y=r.createAssignment(m,y))),y=208===h.kind?r.createPropertyAccessExpression(y,e.visitNode(h.name,i,e.isIdentifier)):r.createElementAccessExpression(y,e.visitNode(h.argumentExpression,i,e.isExpression));break;case 210:0===v&&p?(e.isGeneratedIdentifier(p)||(p=r.cloneNode(p),e.addEmitFlags(p,1536)),y=r.createFunctionCallCall(y,106===p.kind?r.createThis():p,e.visitNodes(h.arguments,i,e.isExpression))):y=r.createCallExpression(y,void 0,e.visitNodes(h.arguments,i,e.isExpression))}e.setOriginalNode(y,h)}var b=o?r.createConditionalExpression(u(g,f,!0),void 0,r.createTrue(),void 0,r.createDeleteExpression(y)):r.createConditionalExpression(u(g,f,!0),void 0,r.createVoidZero(),void 0,y);return e.setTextRange(b,t),m?r.createSyntheticReferenceExpression(b,m):b}function u(e,t,n){return r.createBinaryExpression(r.createBinaryExpression(e,r.createToken(n?36:37),r.createNull()),r.createToken(n?56:55),r.createBinaryExpression(t,r.createToken(n?36:37),r.createVoidZero()))}}}(_||(_={})),function(e){e.transformES2021=function(t){var r=t.hoistVariableDeclaration,n=t.factory;return e.chainBundle(t,(function(r){if(r.isDeclarationFile)return r;return e.visitEachChild(r,i,t)}));function i(a){if(0==(16&a.transformFlags))return a;if(223===a.kind){var o=a;if(e.isLogicalOrCoalescingAssignmentExpression(o))return function(t){var a=t.operatorToken,o=e.getNonAssignmentOperatorForCompoundAssignment(a.kind),s=e.skipParentheses(e.visitNode(t.left,i,e.isLeftHandSideExpression)),c=s,u=e.skipParentheses(e.visitNode(t.right,i,e.isExpression));if(e.isAccessExpression(s)){var l=e.isSimpleCopiableExpression(s.expression),_=l?s.expression:n.createTempVariable(r),d=l?s.expression:n.createAssignment(_,s.expression);if(e.isPropertyAccessExpression(s))c=n.createPropertyAccessExpression(_,s.name),s=n.createPropertyAccessExpression(d,s.name);else{var p=e.isSimpleCopiableExpression(s.argumentExpression),f=p?s.argumentExpression:n.createTempVariable(r);c=n.createElementAccessExpression(_,f),s=n.createElementAccessExpression(d,p?s.argumentExpression:n.createAssignment(f,s.argumentExpression))}}return n.createBinaryExpression(s,o,n.createParenthesizedExpression(n.createAssignment(c,u)))}(o)}return e.visitEachChild(a,i,t)}}}(_||(_={})),function(e){e.transformESNext=function(t){return e.chainBundle(t,(function(n){if(n.isDeclarationFile)return n;return e.visitEachChild(n,r,t)}));function r(n){return 0==(4&n.transformFlags)?n:(n.kind,e.visitEachChild(n,r,t))}}}(_||(_={})),function(e){e.transformJsx=function(r){var n,i,a=r.factory,o=r.getEmitHelperFactory,s=r.getCompilerOptions();return e.chainBundle(r,(function(t){if(t.isDeclarationFile)return t;n=t,(i={}).importSpecifier=e.getJSXImplicitImportBase(s,t);var o=e.visitEachChild(t,_,r);e.addEmitHelpers(o,r.readEmitHelpers());var c=o.statements;i.filenameDeclaration&&(c=e.insertStatementAfterCustomPrologue(c.slice(),a.createVariableStatement(void 0,a.createVariableDeclarationList([i.filenameDeclaration],2))));if(i.utilizedImplicitRuntimeImports)for(var u=0,l=e.arrayFrom(i.utilizedImplicitRuntimeImports.entries());u<l.length;u++){var d=l[u],p=d[0],f=d[1];if(e.isExternalModule(t)){var g=a.createImportDeclaration(void 0,a.createImportClause(!1,void 0,a.createNamedImports(e.arrayFrom(f.values()))),a.createStringLiteral(p),void 0);e.setParentRecursive(g,!1),c=e.insertStatementAfterCustomPrologue(c.slice(),g)}else if(e.isExternalOrCommonJsModule(t)){var m=a.createVariableStatement(void 0,a.createVariableDeclarationList([a.createVariableDeclaration(a.createObjectBindingPattern(e.map(e.arrayFrom(f.values()),(function(e){return a.createBindingElement(void 0,e.propertyName,e.name)}))),void 0,void 0,a.createCallExpression(a.createIdentifier("require"),void 0,[a.createStringLiteral(p)]))],2));e.setParentRecursive(m,!1),c=e.insertStatementAfterCustomPrologue(c.slice(),m)}}c!==o.statements&&(o=a.updateSourceFile(o,c));return i=void 0,o}));function c(){if(i.filenameDeclaration)return i.filenameDeclaration.name;var e=a.createVariableDeclaration(a.createUniqueName("_jsxFileName",48),void 0,void 0,a.createStringLiteral(n.fileName));return i.filenameDeclaration=e,i.filenameDeclaration.name}function u(e){var t=function(e){return 5===s.jsx?"jsxDEV":e?"jsxs":"jsx"}(e);return l(t)}function l(t){var r,n,o="createElement"===t?i.importSpecifier:e.getJSXRuntimeImport(i.importSpecifier,s),c=null===(n=null===(r=i.utilizedImplicitRuntimeImports)||void 0===r?void 0:r.get(o))||void 0===n?void 0:n.get(t);if(c)return c.name;i.utilizedImplicitRuntimeImports||(i.utilizedImplicitRuntimeImports=new e.Map);var u=i.utilizedImplicitRuntimeImports.get(o);u||(u=new e.Map,i.utilizedImplicitRuntimeImports.set(o,u));var l=a.createUniqueName("_".concat(t),112),_=a.createImportSpecifier(!1,a.createIdentifier(t),l);return l.generatedImportReference=_,u.set(t,_),l}function _(t){return 2&t.transformFlags?function(t){switch(t.kind){case 281:return f(t,!1);case 282:return g(t,!1);case 285:return m(t,!1);case 291:return F(t);default:return e.visitEachChild(t,_,r)}}(t):t}function d(t){switch(t.kind){case 11:return function(t){var r=function(t){for(var r,n=0,i=-1,a=0;a<t.length;a++){var o=t.charCodeAt(a);e.isLineBreak(o)?(-1!==n&&-1!==i&&(r=k(r,t.substr(n,i-n+1))),n=-1):e.isWhiteSpaceSingleLine(o)||(i=a,-1===n&&(n=a))}return-1!==n?k(r,t.substr(n)):r}(t.text);return void 0===r?void 0:a.createStringLiteral(r)}(t);case 291:return F(t);case 281:return f(t,!0);case 282:return g(t,!0);case 285:return m(t,!0);default:return e.Debug.failBadSyntaxKind(t)}}function p(t){return void 0===i.importSpecifier||function(t){for(var r=!1,n=0,i=t.attributes.properties;n<i.length;n++){var a=i[n];if(e.isJsxSpreadAttribute(a))r=!0;else if(r&&e.isJsxAttribute(a)&&"key"===a.name.escapedText)return!0}return!1}(t)}function f(e,t){return(p(e.openingElement)?b:v)(e.openingElement,e.children,t,e)}function g(e,t){return(p(e)?b:v)(e,void 0,t,e)}function m(e,t){return(void 0===i.importSpecifier?D:x)(e.openingFragment,e.children,t,e)}function y(t){var r=e.getSemanticJsxChildren(t);if(1===e.length(r)&&!r[0].dotDotDotToken){var n=d(r[0]);return n&&a.createPropertyAssignment("children",n)}var i=e.mapDefined(t,d);return e.length(i)?a.createPropertyAssignment("children",a.createArrayLiteralExpression(i)):void 0}function v(t,r,n,i){var o=A(t),s=r&&r.length?y(r):void 0,c=e.find(t.attributes.properties,(function(t){return!!t.name&&e.isIdentifier(t.name)&&"key"===t.name.escapedText})),u=c?e.filter(t.attributes.properties,(function(e){return e!==c})):t.attributes.properties;return h(o,e.length(u)?S(u,s):a.createObjectLiteralExpression(s?[s]:e.emptyArray),c,r||e.emptyArray,n,i)}function h(t,r,i,o,l,_){var d,p=e.getSemanticJsxChildren(o),f=e.length(p)>1||!!(null===(d=p[0])||void 0===d?void 0:d.dotDotDotToken),g=[t,r];if(i&&g.push(E(i.initializer)),5===s.jsx){var m=e.getOriginalNode(n);if(m&&e.isSourceFile(m)){void 0===i&&g.push(a.createVoidZero()),g.push(f?a.createTrue():a.createFalse());var y=e.getLineAndCharacterOfPosition(m,_.pos);g.push(a.createObjectLiteralExpression([a.createPropertyAssignment("fileName",c()),a.createPropertyAssignment("lineNumber",a.createNumericLiteral(y.line+1)),a.createPropertyAssignment("columnNumber",a.createNumericLiteral(y.character+1))])),g.push(a.createThis())}}var v=e.setTextRange(a.createCallExpression(u(f),void 0,g),_);return l&&e.startOnNewLine(v),v}function b(t,o,c,u){var _=A(t),p=t.attributes.properties,f=e.length(p)?S(p):a.createNull(),g=void 0===i.importSpecifier?e.createJsxFactoryExpression(a,r.getEmitResolver().getJsxFactoryEntity(n),s.reactNamespace,t):l("createElement"),m=e.createExpressionForJsxElement(a,g,_,f,e.mapDefined(o,d),u);return c&&e.startOnNewLine(m),m}function x(e,t,r,n){var i;if(t&&t.length){var o=function(e){var t=y(e);return t&&a.createObjectLiteralExpression([t])}(t);o&&(i=o)}return h(l("Fragment"),i||a.createObjectLiteralExpression([]),void 0,t,r,n)}function D(t,i,o,c){var u=e.createExpressionForJsxFragment(a,r.getEmitResolver().getJsxFactoryEntity(n),r.getEmitResolver().getJsxFragmentFactoryEntity(n),s.reactNamespace,e.mapDefined(i,d),t,c);return o&&e.startOnNewLine(u),u}function S(t,r){var n=e.getEmitScriptTarget(s);return n&&n>=5?a.createObjectLiteralExpression(function(t,r){var n=e.flatten(e.spanMap(t,e.isJsxSpreadAttribute,(function(t,r){return e.map(t,(function(t){return r?(n=t,a.createSpreadAssignment(e.visitNode(n.expression,_,e.isExpression))):C(t);var n}))})));r&&n.push(r);return n}(t,r)):function(t,r){var n=e.flatten(e.spanMap(t,e.isJsxSpreadAttribute,(function(t,r){return r?e.map(t,T):a.createObjectLiteralExpression(e.map(t,C))})));e.isJsxSpreadAttribute(t[0])&&n.unshift(a.createObjectLiteralExpression());r&&n.push(a.createObjectLiteralExpression([r]));return e.singleOrUndefined(n)||o().createAssignHelper(n)}(t,r)}function T(t){return e.visitNode(t.expression,_,e.isExpression)}function C(t){var r=function(t){var r=t.name,n=e.idText(r);return/^[A-Za-z_]\w*$/.test(n)?r:a.createStringLiteral(n)}(t),n=E(t.initializer);return a.createPropertyAssignment(r,n)}function E(t){if(void 0===t)return a.createTrue();if(10===t.kind){var r=void 0!==t.singleQuote?t.singleQuote:!e.isStringDoubleQuoted(t,n),i=a.createStringLiteral((o=t.text,((s=N(o))===o?void 0:s)||t.text),r);return e.setTextRange(i,t)}var o,s;return 291===t.kind?void 0===t.expression?a.createTrue():e.visitNode(t.expression,_,e.isExpression):e.isJsxElement(t)?f(t,!1):e.isJsxSelfClosingElement(t)?g(t,!1):e.isJsxFragment(t)?m(t,!1):e.Debug.failBadSyntaxKind(t)}function k(e,t){var r=N(t);return void 0===e?r:e+" "+r}function N(r){return r.replace(/&((#((\d+)|x([\da-fA-F]+)))|(\w+));/g,(function(r,n,i,a,o,s,c){if(o)return e.utf16EncodeAsString(parseInt(o,10));if(s)return e.utf16EncodeAsString(parseInt(s,16));var u=t.get(c);return u?e.utf16EncodeAsString(u):r}))}function A(t){if(281===t.kind)return A(t.openingElement);var r=t.tagName;return e.isIdentifier(r)&&e.isIntrinsicJsxName(r.escapedText)?a.createStringLiteral(e.idText(r)):e.createExpressionFromEntityName(a,r)}function F(t){var r=e.visitNode(t.expression,_,e.isExpression);return t.dotDotDotToken?a.createSpreadElement(r):r}};var t=new e.Map(e.getEntries({quot:34,amp:38,apos:39,lt:60,gt:62,nbsp:160,iexcl:161,cent:162,pound:163,curren:164,yen:165,brvbar:166,sect:167,uml:168,copy:169,ordf:170,laquo:171,not:172,shy:173,reg:174,macr:175,deg:176,plusmn:177,sup2:178,sup3:179,acute:180,micro:181,para:182,middot:183,cedil:184,sup1:185,ordm:186,raquo:187,frac14:188,frac12:189,frac34:190,iquest:191,Agrave:192,Aacute:193,Acirc:194,Atilde:195,Auml:196,Aring:197,AElig:198,Ccedil:199,Egrave:200,Eacute:201,Ecirc:202,Euml:203,Igrave:204,Iacute:205,Icirc:206,Iuml:207,ETH:208,Ntilde:209,Ograve:210,Oacute:211,Ocirc:212,Otilde:213,Ouml:214,times:215,Oslash:216,Ugrave:217,Uacute:218,Ucirc:219,Uuml:220,Yacute:221,THORN:222,szlig:223,agrave:224,aacute:225,acirc:226,atilde:227,auml:228,aring:229,aelig:230,ccedil:231,egrave:232,eacute:233,ecirc:234,euml:235,igrave:236,iacute:237,icirc:238,iuml:239,eth:240,ntilde:241,ograve:242,oacute:243,ocirc:244,otilde:245,ouml:246,divide:247,oslash:248,ugrave:249,uacute:250,ucirc:251,uuml:252,yacute:253,thorn:254,yuml:255,OElig:338,oelig:339,Scaron:352,scaron:353,Yuml:376,fnof:402,circ:710,tilde:732,Alpha:913,Beta:914,Gamma:915,Delta:916,Epsilon:917,Zeta:918,Eta:919,Theta:920,Iota:921,Kappa:922,Lambda:923,Mu:924,Nu:925,Xi:926,Omicron:927,Pi:928,Rho:929,Sigma:931,Tau:932,Upsilon:933,Phi:934,Chi:935,Psi:936,Omega:937,alpha:945,beta:946,gamma:947,delta:948,epsilon:949,zeta:950,eta:951,theta:952,iota:953,kappa:954,lambda:955,mu:956,nu:957,xi:958,omicron:959,pi:960,rho:961,sigmaf:962,sigma:963,tau:964,upsilon:965,phi:966,chi:967,psi:968,omega:969,thetasym:977,upsih:978,piv:982,ensp:8194,emsp:8195,thinsp:8201,zwnj:8204,zwj:8205,lrm:8206,rlm:8207,ndash:8211,mdash:8212,lsquo:8216,rsquo:8217,sbquo:8218,ldquo:8220,rdquo:8221,bdquo:8222,dagger:8224,Dagger:8225,bull:8226,hellip:8230,permil:8240,prime:8242,Prime:8243,lsaquo:8249,rsaquo:8250,oline:8254,frasl:8260,euro:8364,image:8465,weierp:8472,real:8476,trade:8482,alefsym:8501,larr:8592,uarr:8593,rarr:8594,darr:8595,harr:8596,crarr:8629,lArr:8656,uArr:8657,rArr:8658,dArr:8659,hArr:8660,forall:8704,part:8706,exist:8707,empty:8709,nabla:8711,isin:8712,notin:8713,ni:8715,prod:8719,sum:8721,minus:8722,lowast:8727,radic:8730,prop:8733,infin:8734,ang:8736,and:8743,or:8744,cap:8745,cup:8746,int:8747,there4:8756,sim:8764,cong:8773,asymp:8776,ne:8800,equiv:8801,le:8804,ge:8805,sub:8834,sup:8835,nsub:8836,sube:8838,supe:8839,oplus:8853,otimes:8855,perp:8869,sdot:8901,lceil:8968,rceil:8969,lfloor:8970,rfloor:8971,lang:9001,rang:9002,loz:9674,spades:9824,clubs:9827,hearts:9829,diams:9830}))}(_||(_={})),function(e){e.transformES2016=function(t){var r=t.factory,n=t.hoistVariableDeclaration;return e.chainBundle(t,(function(r){if(r.isDeclarationFile)return r;return e.visitEachChild(r,i,t)}));function i(a){return 0==(512&a.transformFlags)?a:223===a.kind?function(a){switch(a.operatorToken.kind){case 67:return function(t){var a,o,s=e.visitNode(t.left,i,e.isExpression),c=e.visitNode(t.right,i,e.isExpression);if(e.isElementAccessExpression(s)){var u=r.createTempVariable(n),l=r.createTempVariable(n);a=e.setTextRange(r.createElementAccessExpression(e.setTextRange(r.createAssignment(u,s.expression),s.expression),e.setTextRange(r.createAssignment(l,s.argumentExpression),s.argumentExpression)),s),o=e.setTextRange(r.createElementAccessExpression(u,l),s)}else if(e.isPropertyAccessExpression(s)){u=r.createTempVariable(n);a=e.setTextRange(r.createPropertyAccessExpression(e.setTextRange(r.createAssignment(u,s.expression),s.expression),s.name),s),o=e.setTextRange(r.createPropertyAccessExpression(u,s.name),s)}else a=s,o=s;return e.setTextRange(r.createAssignment(a,e.setTextRange(r.createGlobalMethodCall("Math","pow",[o,c]),t)),t)}(a);case 42:return function(t){var n=e.visitNode(t.left,i,e.isExpression),a=e.visitNode(t.right,i,e.isExpression);return e.setTextRange(r.createGlobalMethodCall("Math","pow",[n,a]),t)}(a);default:return e.visitEachChild(a,i,t)}}(a):e.visitEachChild(a,i,t)}}}(_||(_={})),function(e){var t,r,n,i,o,s;function c(e,t){return{kind:e,expression:t}}!function(e){e[e.CapturedThis=1]="CapturedThis",e[e.BlockScopedBindings=2]="BlockScopedBindings"}(t||(t={})),function(e){e[e.Body=1]="Body",e[e.Initializer=2]="Initializer"}(r||(r={})),function(e){e[e.ToOriginal=0]="ToOriginal",e[e.ToOutParameter=1]="ToOutParameter"}(n||(n={})),function(e){e[e.Break=2]="Break",e[e.Continue=4]="Continue",e[e.Return=8]="Return"}(i||(i={})),function(e){e[e.None=0]="None",e[e.Function=1]="Function",e[e.ArrowFunction=2]="ArrowFunction",e[e.AsyncFunctionBody=4]="AsyncFunctionBody",e[e.NonStaticClassElement=8]="NonStaticClassElement",e[e.CapturesThis=16]="CapturesThis",e[e.ExportedVariableStatement=32]="ExportedVariableStatement",e[e.TopLevel=64]="TopLevel",e[e.Block=128]="Block",e[e.IterationStatement=256]="IterationStatement",e[e.IterationStatementBlock=512]="IterationStatementBlock",e[e.IterationContainer=1024]="IterationContainer",e[e.ForStatement=2048]="ForStatement",e[e.ForInOrForOfStatement=4096]="ForInOrForOfStatement",e[e.ConstructorWithCapturedSuper=8192]="ConstructorWithCapturedSuper",e[e.StaticInitializer=16384]="StaticInitializer",e[e.AncestorFactsMask=32767]="AncestorFactsMask",e[e.BlockScopeIncludes=0]="BlockScopeIncludes",e[e.BlockScopeExcludes=7104]="BlockScopeExcludes",e[e.SourceFileIncludes=64]="SourceFileIncludes",e[e.SourceFileExcludes=8064]="SourceFileExcludes",e[e.FunctionIncludes=65]="FunctionIncludes",e[e.FunctionExcludes=32670]="FunctionExcludes",e[e.AsyncFunctionBodyIncludes=69]="AsyncFunctionBodyIncludes",e[e.AsyncFunctionBodyExcludes=32662]="AsyncFunctionBodyExcludes",e[e.ArrowFunctionIncludes=66]="ArrowFunctionIncludes",e[e.ArrowFunctionExcludes=15232]="ArrowFunctionExcludes",e[e.ConstructorIncludes=73]="ConstructorIncludes",e[e.ConstructorExcludes=32662]="ConstructorExcludes",e[e.DoOrWhileStatementIncludes=1280]="DoOrWhileStatementIncludes",e[e.DoOrWhileStatementExcludes=0]="DoOrWhileStatementExcludes",e[e.ForStatementIncludes=3328]="ForStatementIncludes",e[e.ForStatementExcludes=5056]="ForStatementExcludes",e[e.ForInOrForOfStatementIncludes=5376]="ForInOrForOfStatementIncludes",e[e.ForInOrForOfStatementExcludes=3008]="ForInOrForOfStatementExcludes",e[e.BlockIncludes=128]="BlockIncludes",e[e.BlockExcludes=6976]="BlockExcludes",e[e.IterationStatementBlockIncludes=512]="IterationStatementBlockIncludes",e[e.IterationStatementBlockExcludes=7104]="IterationStatementBlockExcludes",e[e.StaticInitializerIncludes=16449]="StaticInitializerIncludes",e[e.StaticInitializerExcludes=32670]="StaticInitializerExcludes",e[e.NewTarget=32768]="NewTarget",e[e.CapturedLexicalThis=65536]="CapturedLexicalThis",e[e.SubtreeFactsMask=-32768]="SubtreeFactsMask",e[e.ArrowFunctionSubtreeExcludes=0]="ArrowFunctionSubtreeExcludes",e[e.FunctionSubtreeExcludes=98304]="FunctionSubtreeExcludes"}(o||(o={})),function(e){e[e.None=0]="None",e[e.UnpackedSpread=1]="UnpackedSpread",e[e.PackedSpread=2]="PackedSpread"}(s||(s={})),e.transformES2015=function(t){var r,n,i,o,s,u,l=t.factory,_=t.getEmitHelperFactory,d=t.startLexicalEnvironment,p=t.resumeLexicalEnvironment,f=t.endLexicalEnvironment,g=t.hoistVariableDeclaration,m=t.getCompilerOptions(),y=t.getEmitResolver(),v=t.onSubstituteNode,h=t.onEmitNode;function b(t){o=e.append(o,l.createVariableDeclaration(t))}return t.onEmitNode=function(t,r,n){if(1&u&&e.isFunctionLike(r)){var i=x(32670,8&e.getEmitFlags(r)?81:65);return h(t,r,n),void D(i,0,0)}h(t,r,n)},t.onSubstituteNode=function(t,r){if(r=v(t,r),1===t)return function(t){switch(t.kind){case 79:return function(t){if(2&u&&!e.isInternalName(t)){var r=y.getReferencedDeclarationWithCollidingName(t);if(r&&(!e.isClassLike(r)||!function(t,r){var n=e.getParseTreeNode(r);if(!n||n===t||n.end<=t.pos||n.pos>=t.end)return!1;var i=e.getEnclosingBlockScopeContainer(t);for(;n;){if(n===i||n===t)return!1;if(e.isClassElement(n)&&n.parent===t)return!0;n=n.parent}return!1}(r,t)))return e.setTextRange(l.getGeneratedNameForNode(e.getNameOfDeclaration(r)),t)}return t}(t);case 108:return function(t){if(1&u&&16&i)return e.setTextRange(l.createUniqueName("_this",48),t);return t}(t)}return t}(r);if(e.isIdentifier(r))return function(t){if(2&u&&!e.isInternalName(t)){var r=e.getParseTreeNode(t,e.isIdentifier);if(r&&function(e){switch(e.parent.kind){case 205:case 260:case 263:case 257:return e.parent.name===e&&y.isDeclarationWithCollidingName(e.parent)}return!1}(r))return e.setTextRange(l.getGeneratedNameForNode(r),t)}return t}(r);return r},e.chainBundle(t,(function(a){if(a.isDeclarationFile)return a;r=a,n=a.text;var s=function(t){var r=x(8064,64),n=[],i=[];d();var a=l.copyPrologue(t.statements,n,!1,C);e.addRange(i,e.visitNodes(t.statements,C,e.isStatement,a)),o&&i.push(l.createVariableStatement(void 0,l.createVariableDeclarationList(o)));return l.mergeLexicalEnvironment(n,f()),z(n,t),D(r,0,0),l.updateSourceFile(t,e.setTextRange(l.createNodeArray(e.concatenate(n,i)),t.statements))}(a);return e.addEmitHelpers(s,t.readEmitHelpers()),r=void 0,n=void 0,o=void 0,i=0,s}));function x(e,t){var r=i;return i=32767&(i&~e|t),r}function D(e,t,r){i=-32768&(i&~t|r)|e}function S(e){return 0!=(8192&i)&&250===e.kind&&!e.expression}function T(t){return 0!=(1024&t.transformFlags)||void 0!==s||8192&i&&function(t){return 4194304&t.transformFlags&&(e.isReturnStatement(t)||e.isIfStatement(t)||e.isWithStatement(t)||e.isSwitchStatement(t)||e.isCaseBlock(t)||e.isCaseClause(t)||e.isDefaultClause(t)||e.isTryStatement(t)||e.isCatchClause(t)||e.isLabeledStatement(t)||e.isIterationStatement(t,!1)||e.isBlock(t))}(t)||e.isIterationStatement(t,!1)&&fe(t)||0!=(33554432&e.getEmitFlags(t))}function C(e){return T(e)?A(e,!1):e}function E(e){return T(e)?A(e,!0):e}function k(t){if(T(t)){var r=e.getOriginalNode(t);if(e.isPropertyDeclaration(r)&&e.hasStaticModifier(r)){var n=x(32670,16449),i=A(t,!1);return D(n,98304,0),i}return A(t,!1)}return t}function N(e){return 106===e.kind?Ie(!0):C(e)}function A(n,o){switch(n.kind){case 124:return;case 260:return function(t){var r=l.createVariableDeclaration(l.getLocalName(t,!0),void 0,void 0,w(t));e.setOriginalNode(r,t);var n=[],i=l.createVariableStatement(void 0,l.createVariableDeclarationList([r]));if(e.setOriginalNode(i,t),e.setTextRange(i,t),e.startOnNewLine(i),n.push(i),e.hasSyntacticModifier(t,1)){var a=e.hasSyntacticModifier(t,1024)?l.createExportDefault(l.getLocalName(t)):l.createExternalModuleExport(l.getLocalName(t));e.setOriginalNode(a,i),n.push(a)}var o=e.getEmitFlags(t);0==(4194304&o)&&(n.push(l.createEndOfDeclarationMarker(t)),e.setEmitFlags(i,4194304|o));return e.singleOrMany(n)}(n);case 228:return function(e){return w(e)}(n);case 166:return function(t){return t.dotDotDotToken?void 0:e.isBindingPattern(t.name)?e.setOriginalNode(e.setTextRange(l.createParameterDeclaration(void 0,void 0,l.getGeneratedNameForNode(t),void 0,void 0,void 0),t),t):t.initializer?e.setOriginalNode(e.setTextRange(l.createParameterDeclaration(void 0,void 0,t.name,void 0,void 0,void 0),t),t):t}(n);case 259:return function(r){var n=s;s=void 0;var a=x(32670,65),o=e.visitParameterList(r.parameters,C,t),c=Q(r),u=32768&i?l.getLocalName(r):r.name;return D(a,98304,0),s=n,l.updateFunctionDeclaration(r,e.visitNodes(r.modifiers,C,e.isModifier),r.asteriskToken,u,void 0,o,void 0,c)}(n);case 216:return function(r){16384&r.transformFlags&&!(16384&i)&&(i|=65536);var n=s;s=void 0;var a=x(15232,66),o=l.createFunctionExpression(void 0,void 0,void 0,void 0,e.visitParameterList(r.parameters,C,t),void 0,Q(r));return e.setTextRange(o,r),e.setOriginalNode(o,r),e.setEmitFlags(o,8),D(a,0,0),s=n,o}(n);case 215:return function(r){var n=262144&e.getEmitFlags(r)?x(32662,69):x(32670,65),a=s;s=void 0;var o=e.visitParameterList(r.parameters,C,t),c=Q(r),u=32768&i?l.getLocalName(r):r.name;return D(n,98304,0),s=a,l.updateFunctionExpression(r,void 0,r.asteriskToken,u,void 0,o,void 0,c)}(n);case 257:return Z(n);case 79:return P(n);case 258:return function(r){if(3&r.flags||524288&r.transformFlags){3&r.flags&&Oe();var n=e.flatMap(r.declarations,1&r.flags?Y:Z),i=l.createVariableDeclarationList(n);return e.setOriginalNode(i,r),e.setTextRange(i,r),e.setCommentRange(i,r),524288&r.transformFlags&&(e.isBindingPattern(r.declarations[0].name)||e.isBindingPattern(e.last(r.declarations).name))&&e.setSourceMapRange(i,function(t){for(var r=-1,n=-1,i=0,a=t;i<a.length;i++){var o=a[i];r=-1===r?o.pos:-1===o.pos?r:Math.min(r,o.pos),n=Math.max(n,o.end)}return e.createRange(r,n)}(n)),i}return e.visitEachChild(r,C,t)}(n);case 252:return function(r){if(void 0!==s){var n=s.allowedNonLabeledJumps;s.allowedNonLabeledJumps|=2;var i=e.visitEachChild(r,C,t);return s.allowedNonLabeledJumps=n,i}return e.visitEachChild(r,C,t)}(n);case 266:return function(r){var n=x(7104,0),i=e.visitEachChild(r,C,t);return D(n,0,0),i}(n);case 238:return function(r,n){if(n)return e.visitEachChild(r,C,t);var a=256&i?x(7104,512):x(6976,128),o=e.visitEachChild(r,C,t);return D(a,0,0),o}(n,!1);case 249:case 248:return function(r){if(s){var n=249===r.kind?2:4;if(!(r.label&&s.labels&&s.labels.get(e.idText(r.label))||!r.label&&s.allowedNonLabeledJumps&n)){var i=void 0,a=r.label;a?249===r.kind?(i="break-".concat(a.escapedText),xe(s,!0,e.idText(a),i)):(i="continue-".concat(a.escapedText),xe(s,!1,e.idText(a),i)):249===r.kind?(s.nonLocalJumps|=2,i="break"):(s.nonLocalJumps|=4,i="continue");var o=l.createStringLiteral(i);if(s.loopOutParameters.length){for(var c=s.loopOutParameters,u=void 0,_=0;_<c.length;_++){var d=he(c[_],1);u=0===_?d:l.createBinaryExpression(u,27,d)}o=l.createBinaryExpression(u,27,o)}return l.createReturnStatement(o)}}return e.visitEachChild(r,C,t)}(n);case 253:return function(t){s&&!s.labels&&(s.labels=new e.Map);var r=e.unwrapInnermostStatementOfLabel(t,s&&$);return e.isIterationStatement(r,!1)?function(e,t){switch(e.kind){case 243:case 244:return re(e,t);case 245:return ne(e,t);case 246:return ie(e,t);case 247:return ae(e,t)}}(r,t):l.restoreEnclosingLabel(e.visitNode(r,C,e.isStatement,l.liftToBlock),t,s&&ee)}(n);case 243:case 244:return re(n,void 0);case 245:return ne(n,void 0);case 246:return ie(n,void 0);case 247:return ae(n,void 0);case 241:case 219:return function(r){return e.visitEachChild(r,E,t)}(n);case 207:return function(r){for(var n=r.properties,a=-1,o=!1,s=0;s<n.length;s++){var c=n[s];if(1048576&c.transformFlags&&4&i||(o=164===e.Debug.checkDefined(c.name).kind)){a=s;break}}if(a<0)return e.visitEachChild(r,C,t);var u=l.createTempVariable(g),_=[],d=l.createAssignment(u,e.setEmitFlags(l.createObjectLiteralExpression(e.visitNodes(n,C,e.isObjectLiteralElementLike,0,a),r.multiLine),o?65536:0));r.multiLine&&e.startOnNewLine(d);return _.push(d),function(t,r,n,i){for(var a=r.properties,o=a.length,s=i;s<o;s++){var c=a[s];switch(c.kind){case 174:case 175:var u=e.getAllAccessorDeclarations(r.properties,c);c===u.firstAccessor&&t.push(H(n,u,r,!!r.multiLine));break;case 171:t.push(Ee(c,n,r,r.multiLine));break;case 299:t.push(Te(c,n,r.multiLine));break;case 300:t.push(Ce(c,n,r.multiLine));break;default:e.Debug.failBadSyntaxKind(r)}}}(_,r,u,a),_.push(r.multiLine?e.startOnNewLine(e.setParent(e.setTextRange(l.cloneNode(u),u),u.parent)):u),l.inlineExpressions(_)}(n);case 295:return function(r){var n,i=x(7104,0);if(e.Debug.assert(!!r.variableDeclaration,"Catch clause variable should always be present when downleveling ES2015."),e.isBindingPattern(r.variableDeclaration.name)){var o=l.createTempVariable(void 0),s=l.createVariableDeclaration(o);e.setTextRange(s,r.variableDeclaration);var c=e.flattenDestructuringBinding(r.variableDeclaration,C,t,0,o),u=l.createVariableDeclarationList(c);e.setTextRange(u,r.variableDeclaration);var _=l.createVariableStatement(void 0,u);n=l.updateCatchClause(r,s,(d=r.block,p=_,f=e.visitNodes(d.statements,C,e.isStatement),l.updateBlock(d,a([p],f,!0))))}else n=e.visitEachChild(r,C,t);var d,p,f;return D(i,0,0),n}(n);case 300:return function(t){return e.setTextRange(l.createPropertyAssignment(t.name,P(l.cloneNode(t.name))),t)}(n);case 164:case 226:return function(r){return e.visitEachChild(r,C,t)}(n);case 206:return function(r){if(e.some(r.elements,e.isSpreadElement))return Ne(r.elements,!1,!!r.multiLine,!!r.elements.hasTrailingComma);return e.visitEachChild(r,C,t)}(n);case 210:return function(t){if(33554432&e.getEmitFlags(t))return function(t){var r=e.cast(e.cast(e.skipOuterExpressions(t.expression),e.isArrowFunction).body,e.isBlock),n=function(t){return e.isVariableStatement(t)&&!!e.first(t.declarationList.declarations).initializer},i=s;s=void 0;var a=e.visitNodes(r.statements,k,e.isStatement);s=i;var o=e.filter(a,n),c=e.filter(a,(function(e){return!n(e)})),u=e.cast(e.first(o),e.isVariableStatement).declarationList.declarations[0],_=e.skipOuterExpressions(u.initializer),d=e.tryCast(_,e.isAssignmentExpression);!d&&e.isBinaryExpression(_)&&27===_.operatorToken.kind&&(d=e.tryCast(_.left,e.isAssignmentExpression));var p=e.cast(d?e.skipOuterExpressions(d.right):_,e.isCallExpression),f=e.cast(e.skipOuterExpressions(p.expression),e.isFunctionExpression),g=f.body.statements,m=0,y=-1,v=[];if(d){var h=e.tryCast(g[m],e.isExpressionStatement);h&&(v.push(h),m++),v.push(g[m]),m++,v.push(l.createExpressionStatement(l.createAssignment(d.left,e.cast(u.name,e.isIdentifier))))}for(;!e.isReturnStatement(e.elementAt(g,y));)y--;e.addRange(v,g,m,y),y<-1&&e.addRange(v,g,y+1);return e.addRange(v,c),e.addRange(v,o,1),l.restoreOuterExpressions(t.expression,l.restoreOuterExpressions(u.initializer,l.restoreOuterExpressions(d&&d.right,l.updateCallExpression(p,l.restoreOuterExpressions(p.expression,l.updateFunctionExpression(f,void 0,void 0,void 0,void 0,f.parameters,void 0,l.updateBlock(f.body,v))),void 0,p.arguments))))}(t);var r=e.skipOuterExpressions(t.expression);if(106===r.kind||e.isSuperProperty(r)||e.some(t.arguments,e.isSpreadElement))return ke(t,!0);return l.updateCallExpression(t,e.visitNode(t.expression,N,e.isExpression),void 0,e.visitNodes(t.arguments,C,e.isExpression))}(n);case 211:return function(r){if(e.some(r.arguments,e.isSpreadElement)){var n=l.createCallBinding(l.createPropertyAccessExpression(r.expression,"bind"),g),i=n.target,o=n.thisArg;return l.createNewExpression(l.createFunctionApplyCall(e.visitNode(i,C,e.isExpression),o,Ne(l.createNodeArray(a([l.createVoidZero()],r.arguments,!0)),!0,!1,!1)),void 0,[])}return e.visitEachChild(r,C,t)}(n);case 214:return function(r,n){return e.visitEachChild(r,n?E:C,t)}(n,o);case 223:return X(n,o);case 354:return function(r,n){if(n)return e.visitEachChild(r,E,t);for(var i,a=0;a<r.elements.length;a++){var o=r.elements[a],s=e.visitNode(o,a<r.elements.length-1?E:C,e.isExpression);(i||s!==o)&&(i||(i=r.elements.slice(0,a)),i.push(s))}var c=i?e.setTextRange(l.createNodeArray(i),r.elements):r.elements;return l.updateCommaListExpression(r,c)}(n,o);case 14:case 15:case 16:case 17:return function(t){return e.setTextRange(l.createStringLiteral(t.text),t)}(n);case 10:return function(t){if(t.hasExtendedUnicodeEscape)return e.setTextRange(l.createStringLiteral(t.text),t);return t}(n);case 8:return function(t){if(384&t.numericLiteralFlags)return e.setTextRange(l.createNumericLiteral(t.text),t);return t}(n);case 212:return function(n){return e.processTaggedTemplateExpression(t,n,C,r,b,e.ProcessLevel.All)}(n);case 225:return function(t){for(var r=l.createStringLiteral(t.head.text),n=0,i=t.templateSpans;n<i.length;n++){var a=i[n],o=[e.visitNode(a.expression,C,e.isExpression)];a.literal.text.length>0&&o.push(l.createStringLiteral(a.literal.text)),r=l.createCallExpression(l.createPropertyAccessExpression(r,"concat"),void 0,o)}return e.setTextRange(r,t)}(n);case 227:return function(t){return e.visitNode(t.expression,C,e.isExpression)}(n);case 106:return Ie(!1);case 108:return function(e){2&i&&!(16384&i)&&(i|=65536);if(s)return 2&i?(s.containsLexicalThis=!0,e):s.thisName||(s.thisName=l.createUniqueName("this"));return e}(n);case 233:return function(e){if(103===e.keywordToken&&"target"===e.name.escapedText)return i|=32768,l.createUniqueName("_newTarget",48);return e}(n);case 171:return function(t){e.Debug.assert(!e.isComputedPropertyName(t.name));var r=G(t,e.moveRangePos(t,-1),void 0,void 0);return e.setEmitFlags(r,512|e.getEmitFlags(r)),e.setTextRange(l.createPropertyAssignment(t.name,r),t)}(n);case 174:case 175:return function(r){e.Debug.assert(!e.isComputedPropertyName(r.name));var n=s;s=void 0;var i,a=x(32670,65),o=e.visitParameterList(r.parameters,C,t),c=Q(r);i=174===r.kind?l.updateGetAccessorDeclaration(r,r.modifiers,r.name,o,r.type,c):l.updateSetAccessorDeclaration(r,r.modifiers,r.name,o,c);return D(a,98304,0),s=n,i}(n);case 240:return function(r){var n,i=x(0,e.hasSyntacticModifier(r,1)?32:0);if(s&&0==(3&r.declarationList.flags)&&!function(t){return 1===t.declarationList.declarations.length&&!!t.declarationList.declarations[0].initializer&&!!(33554432&e.getEmitFlags(t.declarationList.declarations[0].initializer))}(r)){for(var a=void 0,o=0,c=r.declarationList.declarations;o<c.length;o++){var u=c[o];if(me(s,u),u.initializer){var _=void 0;e.isBindingPattern(u.name)?_=e.flattenDestructuringAssignment(u,C,t,0):(_=l.createBinaryExpression(u.name,63,e.visitNode(u.initializer,C,e.isExpression)),e.setTextRange(_,u)),a=e.append(a,_)}}n=a?e.setTextRange(l.createExpressionStatement(l.inlineExpressions(a)),r):void 0}else n=e.visitEachChild(r,C,t);return D(i,0,0),n}(n);case 250:return function(r){if(s)return s.nonLocalJumps|=8,S(r)&&(r=F(r)),l.createReturnStatement(l.createObjectLiteralExpression([l.createPropertyAssignment(l.createIdentifier("value"),r.expression?e.visitNode(r.expression,C,e.isExpression):l.createVoidZero())]));if(S(r))return F(r);return e.visitEachChild(r,C,t)}(n);default:return e.visitEachChild(n,C,t)}}function F(t){return e.setOriginalNode(l.createReturnStatement(l.createUniqueName("_this",48)),t)}function P(t){return s&&y.isArgumentsLocalBinding(t)?s.argumentsName||(s.argumentsName=l.createUniqueName("arguments")):t.hasExtendedUnicodeEscape?e.setOriginalNode(e.setTextRange(l.createIdentifier(e.unescapeLeadingUnderscores(t.escapedText)),t),t):t}function w(o){o.name&&Oe();var c=e.getClassExtendsHeritageElement(o),u=l.createFunctionExpression(void 0,void 0,void 0,void 0,c?[l.createParameterDeclaration(void 0,void 0,l.createUniqueName("_super",48))]:[],void 0,function(o,c){var u=[],g=l.getInternalName(o),m=e.isIdentifierANonContextualKeyword(g)?l.getGeneratedNameForNode(g):g;d(),function(t,r,n){n&&t.push(e.setTextRange(l.createExpressionStatement(_().createExtendsHelper(l.getInternalName(r))),n))}(u,o,c),function(r,n,o,c){var u=s;s=void 0;var _=x(32662,73),d=e.getFirstConstructorWithBody(n),g=function(t,r){if(!t||!r)return!1;if(e.some(t.parameters))return!1;var n=e.firstOrUndefined(t.body.statements);if(!n||!e.nodeIsSynthesized(n)||241!==n.kind)return!1;var i=n.expression;if(!e.nodeIsSynthesized(i)||210!==i.kind)return!1;var a=i.expression;if(!e.nodeIsSynthesized(a)||106!==a.kind)return!1;var o=e.singleOrUndefined(i.arguments);if(!o||!e.nodeIsSynthesized(o)||227!==o.kind)return!1;var s=o.expression;return e.isIdentifier(s)&&"arguments"===s.escapedText}(d,void 0!==c),m=l.createFunctionDeclaration(void 0,void 0,o,void 0,function(r,n){return e.visitParameterList(r&&!n?r.parameters:void 0,C,t)||[]}(d,g),void 0,function(t,r,n,o){var s=!!n&&104!==e.skipOuterExpressions(n.expression).kind;if(!t)return function(t,r){var n=[];p(),l.mergeLexicalEnvironment(n,f()),r&&n.push(l.createReturnStatement(M()));var i=l.createNodeArray(n);e.setTextRange(i,t.members);var a=l.createBlock(i,!0);return e.setTextRange(a,t),e.setEmitFlags(a,1536),a}(r,s);var c=[],u=[];p();var _,d=e.takeWhile(t.body.statements,e.isPrologueDirective),g=function(t,r){for(var n=r.length;n<t.length;n+=1){var i=e.getSuperCallFromStatement(t[n]);if(i)return{superCall:i,superStatementIndex:n}}return{superStatementIndex:-1}}(t.body.statements,d),m=g.superCall,y=g.superStatementIndex,v=-1===y?d.length:y+1,h=v;o||(h=l.copyStandardPrologue(t.body.statements,c,h,!1));o||(h=l.copyCustomPrologue(t.body.statements,u,h,C,void 0));o?_=M():m&&(_=function(e){return ke(e,!1)}(m));_&&(i|=8192);if(R(c,t),J(c,t,o),e.addRange(u,e.visitNodes(t.body.statements,C,e.isStatement,h)),l.mergeLexicalEnvironment(c,f()),K(c,t,!1),s||_)if(!_||v!==t.body.statements.length||16384&t.body.transformFlags)y<=d.length?U(u,t,_||O()):(U(c,t,O()),_&&function(t,r){Me();var n=l.createExpressionStatement(l.createBinaryExpression(l.createThis(),63,r));e.insertStatementAfterCustomPrologue(t,n),e.setCommentRange(n,e.getOriginalNode(r).parent)}(u,_)),I(t.body)||u.push(l.createReturnStatement(l.createUniqueName("_this",48)));else{var b=e.cast(e.cast(_,e.isBinaryExpression).left,e.isCallExpression),x=l.createReturnStatement(_);e.setCommentRange(x,e.getCommentRange(b)),e.setEmitFlags(b,1536),u.push(x)}else z(c,t);var D=l.createBlock(e.setTextRange(l.createNodeArray(a(a(a(a([],d,!0),c,!0),y<=d.length?e.emptyArray:e.visitNodes(t.body.statements,C,e.isStatement,d.length,y-d.length),!0),u,!0)),t.body.statements),!0);return e.setTextRange(D,t.body),D}(d,n,c,g));e.setTextRange(m,d||n),c&&e.setEmitFlags(m,8);r.push(m),D(_,98304,0),s=u}(u,o,m,c),function(t,n){for(var i=0,a=n.members;i<a.length;i++){var o=a[i];switch(o.kind){case 237:t.push(V(o));break;case 171:t.push(q(Le(n,o),o,n));break;case 174:case 175:var s=e.getAllAccessorDeclarations(n.members,o);o===s.firstAccessor&&t.push(W(Le(n,o),s,n));break;case 173:case 172:break;default:e.Debug.failBadSyntaxKind(o,r&&r.fileName)}}}(u,o);var y=e.createTokenRange(e.skipTrivia(n,o.members.end),19),v=l.createPartiallyEmittedExpression(m);e.setTextRangeEnd(v,y.end),e.setEmitFlags(v,1536);var h=l.createReturnStatement(v);e.setTextRangePos(h,y.pos),e.setEmitFlags(h,1920),u.push(h),e.insertStatementsAfterStandardPrologue(u,f());var b=l.createBlock(e.setTextRange(l.createNodeArray(u),o.members),!0);return e.setEmitFlags(b,1536),b}(o,c));e.setEmitFlags(u,65536&e.getEmitFlags(o)|524288);var g=l.createPartiallyEmittedExpression(u);e.setTextRangeEnd(g,o.end),e.setEmitFlags(g,1536);var m=l.createPartiallyEmittedExpression(g);e.setTextRangeEnd(m,e.skipTrivia(n,o.pos)),e.setEmitFlags(m,1536);var y=l.createParenthesizedExpression(l.createCallExpression(m,void 0,c?[e.visitNode(c.expression,C,e.isExpression)]:[]));return e.addSyntheticLeadingComment(y,3,"* @class "),y}function I(t){if(250===t.kind)return!0;if(242===t.kind){var r=t;if(r.elseStatement)return I(r.thenStatement)&&I(r.elseStatement)}else if(238===t.kind){var n=e.lastOrUndefined(t.statements);if(n&&I(n))return!0}return!1}function O(){return e.setEmitFlags(l.createThis(),4)}function M(){return l.createLogicalOr(l.createLogicalAnd(l.createStrictInequality(l.createUniqueName("_super",48),l.createNull()),l.createFunctionApplyCall(l.createUniqueName("_super",48),O(),l.createIdentifier("arguments"))),O())}function L(t){return void 0!==t.initializer||e.isBindingPattern(t.name)}function R(t,r){if(!e.some(r.parameters,L))return!1;for(var n=!1,i=0,a=r.parameters;i<a.length;i++){var o=a[i],s=o.name,c=o.initializer;o.dotDotDotToken||(e.isBindingPattern(s)?n=B(t,o,s,c)||n:c&&(j(t,o,s,c),n=!0))}return n}function B(r,n,i,a){return i.elements.length>0?(e.insertStatementAfterCustomPrologue(r,e.setEmitFlags(l.createVariableStatement(void 0,l.createVariableDeclarationList(e.flattenDestructuringBinding(n,C,t,0,l.getGeneratedNameForNode(n)))),1048576)),!0):!!a&&(e.insertStatementAfterCustomPrologue(r,e.setEmitFlags(l.createExpressionStatement(l.createAssignment(l.getGeneratedNameForNode(n),e.visitNode(a,C,e.isExpression))),1048576)),!0)}function j(t,r,n,i){i=e.visitNode(i,C,e.isExpression);var a=l.createIfStatement(l.createTypeCheck(l.cloneNode(n),"undefined"),e.setEmitFlags(e.setTextRange(l.createBlock([l.createExpressionStatement(e.setEmitFlags(e.setTextRange(l.createAssignment(e.setEmitFlags(e.setParent(e.setTextRange(l.cloneNode(n),n),n.parent),48),e.setEmitFlags(i,1584|e.getEmitFlags(i))),r),1536))]),r),1953));e.startOnNewLine(a),e.setTextRange(a,r),e.setEmitFlags(a,1050528),e.insertStatementAfterCustomPrologue(t,a)}function J(r,n,i){var a=[],o=e.lastOrUndefined(n.parameters);if(!function(e,t){return!(!e||!e.dotDotDotToken||t)}(o,i))return!1;var s=79===o.name.kind?e.setParent(e.setTextRange(l.cloneNode(o.name),o.name),o.name.parent):l.createTempVariable(void 0);e.setEmitFlags(s,48);var c=79===o.name.kind?l.cloneNode(o.name):s,u=n.parameters.length-1,_=l.createLoopVariable();a.push(e.setEmitFlags(e.setTextRange(l.createVariableStatement(void 0,l.createVariableDeclarationList([l.createVariableDeclaration(s,void 0,void 0,l.createArrayLiteralExpression([]))])),o),1048576));var d=l.createForStatement(e.setTextRange(l.createVariableDeclarationList([l.createVariableDeclaration(_,void 0,void 0,l.createNumericLiteral(u))]),o),e.setTextRange(l.createLessThan(_,l.createPropertyAccessExpression(l.createIdentifier("arguments"),"length")),o),e.setTextRange(l.createPostfixIncrement(_),o),l.createBlock([e.startOnNewLine(e.setTextRange(l.createExpressionStatement(l.createAssignment(l.createElementAccessExpression(c,0===u?_:l.createSubtract(_,l.createNumericLiteral(u))),l.createElementAccessExpression(l.createIdentifier("arguments"),_))),o))]));return e.setEmitFlags(d,1048576),e.startOnNewLine(d),a.push(d),79!==o.name.kind&&a.push(e.setEmitFlags(e.setTextRange(l.createVariableStatement(void 0,l.createVariableDeclarationList(e.flattenDestructuringBinding(o,C,t,0,c))),o),1048576)),e.insertStatementsAfterCustomPrologue(r,a),!0}function z(e,t){return!!(65536&i&&216!==t.kind)&&(U(e,t,l.createThis()),!0)}function U(t,r,n){Me();var i=l.createVariableStatement(void 0,l.createVariableDeclarationList([l.createVariableDeclaration(l.createUniqueName("_this",48),void 0,void 0,n)]));e.setEmitFlags(i,1050112),e.setSourceMapRange(i,r),e.insertStatementAfterCustomPrologue(t,i)}function K(t,r,n){if(32768&i){var a=void 0;switch(r.kind){case 216:return t;case 171:case 174:case 175:a=l.createVoidZero();break;case 173:a=l.createPropertyAccessExpression(e.setEmitFlags(l.createThis(),4),"constructor");break;case 259:case 215:a=l.createConditionalExpression(l.createLogicalAnd(e.setEmitFlags(l.createThis(),4),l.createBinaryExpression(e.setEmitFlags(l.createThis(),4),102,l.getLocalName(r))),void 0,l.createPropertyAccessExpression(e.setEmitFlags(l.createThis(),4),"constructor"),void 0,l.createVoidZero());break;default:return e.Debug.failBadSyntaxKind(r)}var o=l.createVariableStatement(void 0,l.createVariableDeclarationList([l.createVariableDeclaration(l.createUniqueName("_newTarget",48),void 0,void 0,a)]));e.setEmitFlags(o,1050112),n&&(t=t.slice()),e.insertStatementAfterCustomPrologue(t,o)}return t}function V(t){return e.setTextRange(l.createEmptyStatement(),t)}function q(r,n,i){var a,o=e.getCommentRange(n),s=e.getSourceMapRange(n),c=G(n,n,void 0,i),u=e.visitNode(n.name,C,e.isPropertyName);if(!e.isPrivateIdentifier(u)&&e.getUseDefineForClassFields(t.getCompilerOptions())){var _=e.isComputedPropertyName(u)?u.expression:e.isIdentifier(u)?l.createStringLiteral(e.unescapeLeadingUnderscores(u.escapedText)):u;a=l.createObjectDefinePropertyCall(r,_,l.createPropertyDescriptor({value:c,enumerable:!1,writable:!0,configurable:!0}))}else{var d=e.createMemberAccessForPropertyName(l,r,u,n.name);a=l.createAssignment(d,c)}e.setEmitFlags(c,1536),e.setSourceMapRange(c,s);var p=e.setTextRange(l.createExpressionStatement(a),n);return e.setOriginalNode(p,n),e.setCommentRange(p,o),e.setEmitFlags(p,48),p}function W(t,r,n){var i=l.createExpressionStatement(H(t,r,n,!1));return e.setEmitFlags(i,1536),e.setSourceMapRange(i,e.getSourceMapRange(r.firstAccessor)),i}function H(t,r,n,i){var a=r.firstAccessor,o=r.getAccessor,s=r.setAccessor,c=e.setParent(e.setTextRange(l.cloneNode(t),t),t.parent);e.setEmitFlags(c,1568),e.setSourceMapRange(c,a.name);var u=e.visitNode(a.name,C,e.isPropertyName);if(e.isPrivateIdentifier(u))return e.Debug.failBadSyntaxKind(u,"Encountered unhandled private identifier while transforming ES2015.");var _=e.createExpressionForPropertyName(l,u);e.setEmitFlags(_,1552),e.setSourceMapRange(_,a.name);var d=[];if(o){var p=G(o,void 0,void 0,n);e.setSourceMapRange(p,e.getSourceMapRange(o)),e.setEmitFlags(p,512);var f=l.createPropertyAssignment("get",p);e.setCommentRange(f,e.getCommentRange(o)),d.push(f)}if(s){var g=G(s,void 0,void 0,n);e.setSourceMapRange(g,e.getSourceMapRange(s)),e.setEmitFlags(g,512);var m=l.createPropertyAssignment("set",g);e.setCommentRange(m,e.getCommentRange(s)),d.push(m)}d.push(l.createPropertyAssignment("enumerable",o||s?l.createFalse():l.createTrue()),l.createPropertyAssignment("configurable",l.createTrue()));var y=l.createCallExpression(l.createPropertyAccessExpression(l.createIdentifier("Object"),"defineProperty"),void 0,[c,_,l.createObjectLiteralExpression(d,!0)]);return i&&e.startOnNewLine(y),y}function G(r,n,a,o){var c=s;s=void 0;var u=o&&e.isClassLike(o)&&!e.isStatic(r)?x(32670,73):x(32670,65),_=e.visitParameterList(r.parameters,C,t),d=Q(r);return 32768&i&&!a&&(259===r.kind||215===r.kind)&&(a=l.getGeneratedNameForNode(r)),D(u,98304,0),s=c,e.setOriginalNode(e.setTextRange(l.createFunctionExpression(void 0,r.asteriskToken,a,void 0,_,void 0,d),n),r)}function Q(t){var n,i,a,o=!1,s=!1,c=[],u=[],_=t.body;if(p(),e.isBlock(_)&&(a=l.copyStandardPrologue(_.statements,c,0,!1),a=l.copyCustomPrologue(_.statements,u,a,C,e.isHoistedFunction),a=l.copyCustomPrologue(_.statements,u,a,C,e.isHoistedVariableStatement)),o=R(u,t)||o,o=J(u,t,!1)||o,e.isBlock(_))a=l.copyCustomPrologue(_.statements,u,a,C),n=_.statements,e.addRange(u,e.visitNodes(_.statements,C,e.isStatement,a)),!o&&_.multiLine&&(o=!0);else{e.Debug.assert(216===t.kind),n=e.moveRangeEnd(_,-1);var d=t.equalsGreaterThanToken;e.nodeIsSynthesized(d)||e.nodeIsSynthesized(_)||(e.rangeEndIsOnSameLineAsRangeStart(d,_,r)?s=!0:o=!0);var g=e.visitNode(_,C,e.isExpression),m=l.createReturnStatement(g);e.setTextRange(m,_),e.moveSyntheticComments(m,_),e.setEmitFlags(m,1440),u.push(m),i=_}if(l.mergeLexicalEnvironment(c,f()),K(c,t,!1),z(c,t),e.some(c)&&(o=!0),u.unshift.apply(u,c),e.isBlock(_)&&e.arrayIsEqualTo(u,_.statements))return _;var y=l.createBlock(e.setTextRange(l.createNodeArray(u),n),o);return e.setTextRange(y,t.body),!o&&s&&e.setEmitFlags(y,1),i&&e.setTokenSourceMapRange(y,19,i),e.setOriginalNode(y,t.body),y}function X(r,n){return e.isDestructuringAssignment(r)?e.flattenDestructuringAssignment(r,C,t,0,!n):27===r.operatorToken.kind?l.updateBinaryExpression(r,e.visitNode(r.left,E,e.isExpression),r.operatorToken,e.visitNode(r.right,n?E:C,e.isExpression)):e.visitEachChild(r,C,t)}function Y(r){var n=r.name;return e.isBindingPattern(n)?Z(r):!r.initializer&&function(e){var t=y.getNodeCheckFlags(e),r=262144&t,n=524288&t;return!(0!=(64&i)||r&&n&&0!=(512&i))&&0==(4096&i)&&(!y.isDeclarationWithCollidingName(e)||n&&!r&&0==(6144&i))}(r)?l.updateVariableDeclaration(r,r.name,void 0,void 0,l.createVoidZero()):e.visitEachChild(r,C,t)}function Z(r){var n,i=x(32,0);return n=e.isBindingPattern(r.name)?e.flattenDestructuringBinding(r,C,t,0,void 0,0!=(32&i)):e.visitEachChild(r,C,t),D(i,0,0),n}function $(t){s.labels.set(e.idText(t.label),!0)}function ee(t){s.labels.set(e.idText(t.label),!1)}function te(r,n,a,o,c){var u=x(r,n),_=function(r,n,a,o){if(!fe(r)){var c=void 0;s&&(c=s.allowedNonLabeledJumps,s.allowedNonLabeledJumps=6);var u=o?o(r,n,void 0,a):l.restoreEnclosingLabel(e.isForStatement(r)?function(t){return l.updateForStatement(t,e.visitNode(t.initializer,E,e.isForInitializer),e.visitNode(t.condition,C,e.isExpression),e.visitNode(t.incrementor,E,e.isExpression),e.visitNode(t.statement,C,e.isStatement,l.liftToBlock))}(r):e.visitEachChild(r,C,t),n,s&&ee);return s&&(s.allowedNonLabeledJumps=c),u}var _=function(t){var r;switch(t.kind){case 245:case 246:case 247:var n=t.initializer;n&&258===n.kind&&(r=n)}var i=[],a=[];if(r&&3&e.getCombinedNodeFlags(r))for(var o=_e(t)||de(t)||pe(t),c=0,u=r.declarations;c<u.length;c++){Se(t,u[c],i,a,o)}var l={loopParameters:i,loopOutParameters:a};s&&(s.argumentsName&&(l.argumentsName=s.argumentsName),s.thisName&&(l.thisName=s.thisName),s.hoistedLocalVariables&&(l.hoistedLocalVariables=s.hoistedLocalVariables));return l}(r),p=[],g=s;s=_;var m,y=_e(r)?function(t,r){var n=l.createUniqueName("_loop_init"),a=0!=(1048576&t.initializer.transformFlags),o=0;r.containsLexicalThis&&(o|=8);a&&4&i&&(o|=262144);var s=[];s.push(l.createVariableStatement(void 0,t.initializer)),be(r.loopOutParameters,2,1,s);var c=l.createVariableStatement(void 0,e.setEmitFlags(l.createVariableDeclarationList([l.createVariableDeclaration(n,void 0,void 0,e.setEmitFlags(l.createFunctionExpression(void 0,a?l.createToken(41):void 0,void 0,void 0,void 0,void 0,e.visitNode(l.createBlock(s,!0),C,e.isBlock)),o))]),2097152)),u=l.createVariableDeclarationList(e.map(r.loopOutParameters,ve));return{functionName:n,containsYield:a,functionDeclaration:c,part:u}}(r,_):void 0,v=ge(r)?function(t,r,n){var a=l.createUniqueName("_loop");d();var o=e.visitNode(t.statement,C,e.isStatement,l.liftToBlock),s=f(),c=[];(de(t)||pe(t))&&(r.conditionVariable=l.createUniqueName("inc"),t.incrementor?c.push(l.createIfStatement(r.conditionVariable,l.createExpressionStatement(e.visitNode(t.incrementor,C,e.isExpression)),l.createExpressionStatement(l.createAssignment(r.conditionVariable,l.createTrue())))):c.push(l.createIfStatement(l.createLogicalNot(r.conditionVariable),l.createExpressionStatement(l.createAssignment(r.conditionVariable,l.createTrue())))),de(t)&&c.push(l.createIfStatement(l.createPrefixUnaryExpression(53,e.visitNode(t.condition,C,e.isExpression)),e.visitNode(l.createBreakStatement(),C,e.isStatement))));e.isBlock(o)?e.addRange(c,o.statements):c.push(o);be(r.loopOutParameters,1,1,c),e.insertStatementsAfterStandardPrologue(c,s);var u=l.createBlock(c,!0);e.isBlock(o)&&e.setOriginalNode(u,o);var _=0!=(1048576&t.statement.transformFlags),p=524288;r.containsLexicalThis&&(p|=8);_&&0!=(4&i)&&(p|=262144);var g=l.createVariableStatement(void 0,e.setEmitFlags(l.createVariableDeclarationList([l.createVariableDeclaration(a,void 0,void 0,e.setEmitFlags(l.createFunctionExpression(void 0,_?l.createToken(41):void 0,void 0,void 0,r.loopParameters,void 0,u),p))]),2097152)),m=function(t,r,n,i){var a=[],o=!(-5&r.nonLocalJumps||r.labeledNonLocalBreaks||r.labeledNonLocalContinues),s=l.createCallExpression(t,void 0,e.map(r.loopParameters,(function(e){return e.name}))),c=i?l.createYieldExpression(l.createToken(41),e.setEmitFlags(s,8388608)):s;if(o)a.push(l.createExpressionStatement(c)),be(r.loopOutParameters,1,0,a);else{var u=l.createUniqueName("state"),_=l.createVariableStatement(void 0,l.createVariableDeclarationList([l.createVariableDeclaration(u,void 0,void 0,c)]));if(a.push(_),be(r.loopOutParameters,1,0,a),8&r.nonLocalJumps){var d=void 0;n?(n.nonLocalJumps|=8,d=l.createReturnStatement(u)):d=l.createReturnStatement(l.createPropertyAccessExpression(u,"value")),a.push(l.createIfStatement(l.createTypeCheck(u,"object"),d))}if(2&r.nonLocalJumps&&a.push(l.createIfStatement(l.createStrictEquality(u,l.createStringLiteral("break")),l.createBreakStatement())),r.labeledNonLocalBreaks||r.labeledNonLocalContinues){var p=[];De(r.labeledNonLocalBreaks,!0,u,n,p),De(r.labeledNonLocalContinues,!1,u,n,p),a.push(l.createSwitchStatement(u,l.createCaseBlock(p)))}}return a}(a,r,n,_);return{functionName:a,containsYield:_,functionDeclaration:g,part:m}}(r,_,g):void 0;s=g,y&&p.push(y.functionDeclaration);v&&p.push(v.functionDeclaration);(function(e,t,r){var n;t.argumentsName&&(r?r.argumentsName=t.argumentsName:(n||(n=[])).push(l.createVariableDeclaration(t.argumentsName,void 0,void 0,l.createIdentifier("arguments"))));t.thisName&&(r?r.thisName=t.thisName:(n||(n=[])).push(l.createVariableDeclaration(t.thisName,void 0,void 0,l.createIdentifier("this"))));if(t.hoistedLocalVariables)if(r)r.hoistedLocalVariables=t.hoistedLocalVariables;else{n||(n=[]);for(var i=0,a=t.hoistedLocalVariables;i<a.length;i++){var o=a[i];n.push(l.createVariableDeclaration(o))}}if(t.loopOutParameters.length){n||(n=[]);for(var s=0,c=t.loopOutParameters;s<c.length;s++){var u=c[s];n.push(l.createVariableDeclaration(u.outParamName))}}t.conditionVariable&&(n||(n=[]),n.push(l.createVariableDeclaration(t.conditionVariable,void 0,void 0,l.createFalse())));n&&e.push(l.createVariableStatement(void 0,l.createVariableDeclarationList(n)))})(p,_,g),y&&p.push((h=y.functionName,b=y.containsYield,x=l.createCallExpression(h,void 0,[]),D=b?l.createYieldExpression(l.createToken(41),e.setEmitFlags(x,8388608)):x,l.createExpressionStatement(D)));var h,b,x,D;if(v)if(o)m=o(r,n,v.part,a);else{var S=ye(r,y,l.createBlock(v.part,!0));m=l.restoreEnclosingLabel(S,n,s&&ee)}else{var T=ye(r,y,e.visitNode(r.statement,C,e.isStatement,l.liftToBlock));m=l.restoreEnclosingLabel(T,n,s&&ee)}return p.push(m),p}(a,o,u,c);return D(u,0,0),_}function re(e,t){return te(0,1280,e,t)}function ne(e,t){return te(5056,3328,e,t)}function ie(e,t){return te(3008,5376,e,t)}function ae(e,t){return te(3008,5376,e,t,m.downlevelIteration?ue:ce)}function oe(r,n,i){var a=[],o=r.initializer;if(e.isVariableDeclarationList(o)){3&r.initializer.flags&&Oe();var s=e.firstOrUndefined(o.declarations);if(s&&e.isBindingPattern(s.name)){var c=e.flattenDestructuringBinding(s,C,t,0,n),u=e.setTextRange(l.createVariableDeclarationList(c),r.initializer);e.setOriginalNode(u,r.initializer),e.setSourceMapRange(u,e.createRange(c[0].pos,e.last(c).end)),a.push(l.createVariableStatement(void 0,u))}else a.push(e.setTextRange(l.createVariableStatement(void 0,e.setOriginalNode(e.setTextRange(l.createVariableDeclarationList([l.createVariableDeclaration(s?s.name:l.createTempVariable(void 0),void 0,void 0,n)]),e.moveRangePos(o,-1)),o)),e.moveRangeEnd(o,-1)))}else{var _=l.createAssignment(o,n);e.isDestructuringAssignment(_)?a.push(l.createExpressionStatement(X(_,!0))):(e.setTextRangeEnd(_,o.end),a.push(e.setTextRange(l.createExpressionStatement(e.visitNode(_,C,e.isExpression)),e.moveRangeEnd(o,-1))))}if(i)return se(e.addRange(a,i));var d=e.visitNode(r.statement,C,e.isStatement,l.liftToBlock);return e.isBlock(d)?l.updateBlock(d,e.setTextRange(l.createNodeArray(e.concatenate(a,d.statements)),d.statements)):(a.push(d),se(a))}function se(t){return e.setEmitFlags(l.createBlock(l.createNodeArray(t),!0),432)}function ce(t,r,n){var i=e.visitNode(t.expression,C,e.isExpression),a=l.createLoopVariable(),o=e.isIdentifier(i)?l.getGeneratedNameForNode(i):l.createTempVariable(void 0);e.setEmitFlags(i,48|e.getEmitFlags(i));var c=e.setTextRange(l.createForStatement(e.setEmitFlags(e.setTextRange(l.createVariableDeclarationList([e.setTextRange(l.createVariableDeclaration(a,void 0,void 0,l.createNumericLiteral(0)),e.moveRangePos(t.expression,-1)),e.setTextRange(l.createVariableDeclaration(o,void 0,void 0,i),t.expression)]),t.expression),2097152),e.setTextRange(l.createLessThan(a,l.createPropertyAccessExpression(o,"length")),t.expression),e.setTextRange(l.createPostfixIncrement(a),t.expression),oe(t,l.createElementAccessExpression(o,a),n)),t);return e.setEmitFlags(c,256),e.setTextRange(c,t),l.restoreEnclosingLabel(c,r,s&&ee)}function ue(t,r,n,i){var a=e.visitNode(t.expression,C,e.isExpression),o=e.isIdentifier(a)?l.getGeneratedNameForNode(a):l.createTempVariable(void 0),c=e.isIdentifier(a)?l.getGeneratedNameForNode(o):l.createTempVariable(void 0),u=l.createUniqueName("e"),d=l.getGeneratedNameForNode(u),p=l.createTempVariable(void 0),f=e.setTextRange(_().createValuesHelper(a),t.expression),m=l.createCallExpression(l.createPropertyAccessExpression(o,"next"),void 0,[]);g(u),g(p);var y=1024&i?l.inlineExpressions([l.createAssignment(u,l.createVoidZero()),f]):f,v=e.setEmitFlags(e.setTextRange(l.createForStatement(e.setEmitFlags(e.setTextRange(l.createVariableDeclarationList([e.setTextRange(l.createVariableDeclaration(o,void 0,void 0,y),t.expression),l.createVariableDeclaration(c,void 0,void 0,m)]),t.expression),2097152),l.createLogicalNot(l.createPropertyAccessExpression(c,"done")),l.createAssignment(c,m),oe(t,l.createPropertyAccessExpression(c,"value"),n)),t),256);return l.createTryStatement(l.createBlock([l.restoreEnclosingLabel(v,r,s&&ee)]),l.createCatchClause(l.createVariableDeclaration(d),e.setEmitFlags(l.createBlock([l.createExpressionStatement(l.createAssignment(u,l.createObjectLiteralExpression([l.createPropertyAssignment("error",d)])))]),1)),l.createBlock([l.createTryStatement(l.createBlock([e.setEmitFlags(l.createIfStatement(l.createLogicalAnd(l.createLogicalAnd(c,l.createLogicalNot(l.createPropertyAccessExpression(c,"done"))),l.createAssignment(p,l.createPropertyAccessExpression(o,"return"))),l.createExpressionStatement(l.createFunctionCallCall(p,o,[]))),1)]),void 0,e.setEmitFlags(l.createBlock([e.setEmitFlags(l.createIfStatement(u,l.createThrowStatement(l.createPropertyAccessExpression(u,"error"))),1)]),1))]))}function le(e){return 0!=(131072&y.getNodeCheckFlags(e))}function _e(t){return e.isForStatement(t)&&!!t.initializer&&le(t.initializer)}function de(t){return e.isForStatement(t)&&!!t.condition&&le(t.condition)}function pe(t){return e.isForStatement(t)&&!!t.incrementor&&le(t.incrementor)}function fe(e){return ge(e)||_e(e)}function ge(e){return 0!=(65536&y.getNodeCheckFlags(e))}function me(t,r){t.hoistedLocalVariables||(t.hoistedLocalVariables=[]),function r(n){if(79===n.kind)t.hoistedLocalVariables.push(n);else for(var i=0,a=n.elements;i<a.length;i++){var o=a[i];e.isOmittedExpression(o)||r(o.name)}}(r.name)}function ye(t,r,n){switch(t.kind){case 245:return function(t,r,n){var i=t.condition&&le(t.condition),a=i||t.incrementor&&le(t.incrementor);return l.updateForStatement(t,e.visitNode(r?r.part:t.initializer,E,e.isForInitializer),e.visitNode(i?void 0:t.condition,C,e.isExpression),e.visitNode(a?void 0:t.incrementor,E,e.isExpression),n)}(t,r,n);case 246:return function(t,r){return l.updateForInStatement(t,e.visitNode(t.initializer,C,e.isForInitializer),e.visitNode(t.expression,C,e.isExpression),r)}(t,n);case 247:return function(t,r){return l.updateForOfStatement(t,void 0,e.visitNode(t.initializer,C,e.isForInitializer),e.visitNode(t.expression,C,e.isExpression),r)}(t,n);case 243:return function(t,r){return l.updateDoStatement(t,r,e.visitNode(t.expression,C,e.isExpression))}(t,n);case 244:return function(t,r){return l.updateWhileStatement(t,e.visitNode(t.expression,C,e.isExpression),r)}(t,n);default:return e.Debug.failBadSyntaxKind(t,"IterationStatement expected")}}function ve(e){return l.createVariableDeclaration(e.originalName,void 0,void 0,e.outParamName)}function he(e,t){var r=0===t?e.outParamName:e.originalName,n=0===t?e.originalName:e.outParamName;return l.createBinaryExpression(n,63,r)}function be(e,t,r,n){for(var i=0,a=e;i<a.length;i++){var o=a[i];o.flags&t&&n.push(l.createExpressionStatement(he(o,r)))}}function xe(t,r,n,i){r?(t.labeledNonLocalBreaks||(t.labeledNonLocalBreaks=new e.Map),t.labeledNonLocalBreaks.set(n,i)):(t.labeledNonLocalContinues||(t.labeledNonLocalContinues=new e.Map),t.labeledNonLocalContinues.set(n,i))}function De(e,t,r,n,i){e&&e.forEach((function(e,a){var o=[];if(!n||n.labels&&n.labels.get(a)){var s=l.createIdentifier(a);o.push(t?l.createBreakStatement(s):l.createContinueStatement(s))}else xe(n,t,a,e),o.push(l.createReturnStatement(r));i.push(l.createCaseClause(l.createStringLiteral(e),o))}))}function Se(t,r,n,i,a){var o=r.name;if(e.isBindingPattern(o))for(var s=0,c=o.elements;s<c.length;s++){var u=c[s];e.isOmittedExpression(u)||Se(t,u,n,i,a)}else{n.push(l.createParameterDeclaration(void 0,void 0,o));var _=y.getNodeCheckFlags(r);if(4194304&_||a){var d=l.createUniqueName("out_"+e.idText(o)),p=0;4194304&_&&(p|=1),e.isForStatement(t)&&(t.initializer&&y.isBindingCapturedByNode(t.initializer,r)&&(p|=2),(t.condition&&y.isBindingCapturedByNode(t.condition,r)||t.incrementor&&y.isBindingCapturedByNode(t.incrementor,r))&&(p|=1)),i.push({flags:p,originalName:o,outParamName:d})}}}function Te(t,r,n){var i=l.createAssignment(e.createMemberAccessForPropertyName(l,r,e.visitNode(t.name,C,e.isPropertyName)),e.visitNode(t.initializer,C,e.isExpression));return e.setTextRange(i,t),n&&e.startOnNewLine(i),i}function Ce(t,r,n){var i=l.createAssignment(e.createMemberAccessForPropertyName(l,r,e.visitNode(t.name,C,e.isPropertyName)),l.cloneNode(t.name));return e.setTextRange(i,t),n&&e.startOnNewLine(i),i}function Ee(t,r,n,i){var a=l.createAssignment(e.createMemberAccessForPropertyName(l,r,e.visitNode(t.name,C,e.isPropertyName)),G(t,t,void 0,n));return e.setTextRange(a,t),i&&e.startOnNewLine(a),a}function ke(r,n){if(32768&r.transformFlags||106===r.expression.kind||e.isSuperProperty(e.skipOuterExpressions(r.expression))){var i=l.createCallBinding(r.expression,g),a=i.target,o=i.thisArg;106===r.expression.kind&&e.setEmitFlags(o,4);var s=void 0;if(s=32768&r.transformFlags?l.createFunctionApplyCall(e.visitNode(a,N,e.isExpression),106===r.expression.kind?o:e.visitNode(o,C,e.isExpression),Ne(r.arguments,!0,!1,!1)):e.setTextRange(l.createFunctionCallCall(e.visitNode(a,N,e.isExpression),106===r.expression.kind?o:e.visitNode(o,C,e.isExpression),e.visitNodes(r.arguments,C,e.isExpression)),r),106===r.expression.kind){var c=l.createLogicalOr(s,O());s=n?l.createAssignment(l.createUniqueName("_this",48),c):c}return e.setOriginalNode(s,r)}return e.visitEachChild(r,C,t)}function Ne(t,r,n,i){var a=t.length,o=e.flatten(e.spanMap(t,Ae,(function(e,t,r,o){return t(e,n,i&&o===a)})));if(1===o.length){var s=o[0];if(r&&!m.downlevelIteration||e.isPackedArrayLiteral(s.expression)||e.isCallToHelper(s.expression,"___spreadArray"))return s.expression}for(var c=_(),u=0!==o[0].kind,d=u?l.createArrayLiteralExpression():o[0].expression,p=u?0:1;p<o.length;p++){var f=o[p];d=c.createSpreadArrayHelper(d,f.expression,1===f.kind&&!r)}return d}function Ae(t){return e.isSpreadElement(t)?Fe:we}function Fe(t){return e.map(t,Pe)}function Pe(t){var r=e.visitNode(t.expression,C,e.isExpression),n=e.isCallToHelper(r,"___read"),i=n||e.isPackedArrayLiteral(r)?2:1;return!m.downlevelIteration||1!==i||e.isArrayLiteralExpression(r)||n||(r=_().createReadHelper(r,void 0),i=2),c(i,r)}function we(t,r,n){return c(0,l.createArrayLiteralExpression(e.visitNodes(l.createNodeArray(t,n),C,e.isExpression),r))}function Ie(e){return 8&i&&!e?l.createPropertyAccessExpression(l.createUniqueName("_super",48),"prototype"):l.createUniqueName("_super",48)}function Oe(){0==(2&u)&&(u|=2,t.enableSubstitution(79))}function Me(){0==(1&u)&&(u|=1,t.enableSubstitution(108),t.enableEmitNotification(173),t.enableEmitNotification(171),t.enableEmitNotification(174),t.enableEmitNotification(175),t.enableEmitNotification(216),t.enableEmitNotification(215),t.enableEmitNotification(259))}function Le(t,r){return e.isStatic(r)?l.getInternalName(t):l.createPropertyAccessExpression(l.getInternalName(t),"prototype")}}}(_||(_={})),function(e){e.transformES5=function(t){var r,n,i=t.factory,a=t.getCompilerOptions();1!==a.jsx&&3!==a.jsx||(r=t.onEmitNode,t.onEmitNode=function(t,i,a){switch(i.kind){case 283:case 284:case 282:var o=i.tagName;n[e.getOriginalNodeId(o)]=!0}r(t,i,a)},t.enableEmitNotification(283),t.enableEmitNotification(284),t.enableEmitNotification(282),n=[]);var o=t.onSubstituteNode;return t.onSubstituteNode=function(t,r){if(r.id&&n&&n[r.id])return o(t,r);if(r=o(t,r),e.isPropertyAccessExpression(r))return function(t){if(e.isPrivateIdentifier(t.name))return t;var r=s(t.name);if(r)return e.setTextRange(i.createElementAccessExpression(t.expression,r),t);return t}(r);if(e.isPropertyAssignment(r))return function(t){var r=e.isIdentifier(t.name)&&s(t.name);if(r)return i.updatePropertyAssignment(t,r,t.initializer);return t}(r);return r},t.enableSubstitution(208),t.enableSubstitution(299),e.chainBundle(t,(function(e){return e}));function s(t){var r=t.originalKeywordKind||(e.nodeIsSynthesized(t)?e.stringToToken(e.idText(t)):void 0);if(void 0!==r&&r>=81&&r<=116)return e.setTextRange(i.createStringLiteralFromNode(t),t)}}}(_||(_={})),function(e){var t,r,n,i,o;!function(e){e[e.Nop=0]="Nop",e[e.Statement=1]="Statement",e[e.Assign=2]="Assign",e[e.Break=3]="Break",e[e.BreakWhenTrue=4]="BreakWhenTrue",e[e.BreakWhenFalse=5]="BreakWhenFalse",e[e.Yield=6]="Yield",e[e.YieldStar=7]="YieldStar",e[e.Return=8]="Return",e[e.Throw=9]="Throw",e[e.Endfinally=10]="Endfinally"}(t||(t={})),function(e){e[e.Open=0]="Open",e[e.Close=1]="Close"}(r||(r={})),function(e){e[e.Exception=0]="Exception",e[e.With=1]="With",e[e.Switch=2]="Switch",e[e.Loop=3]="Loop",e[e.Labeled=4]="Labeled"}(n||(n={})),function(e){e[e.Try=0]="Try",e[e.Catch=1]="Catch",e[e.Finally=2]="Finally",e[e.Done=3]="Done"}(i||(i={})),function(e){e[e.Next=0]="Next",e[e.Throw=1]="Throw",e[e.Return=2]="Return",e[e.Break=3]="Break",e[e.Yield=4]="Yield",e[e.YieldStar=5]="YieldStar",e[e.Catch=6]="Catch",e[e.Endfinally=7]="Endfinally"}(o||(o={})),e.transformGenerators=function(t){var r,n,i,o,s,c,u,l,_,d,p=t.factory,f=t.getEmitHelperFactory,g=t.resumeLexicalEnvironment,m=t.endLexicalEnvironment,y=t.hoistFunctionDeclaration,v=t.hoistVariableDeclaration,h=t.getCompilerOptions(),b=e.getEmitScriptTarget(h),x=t.getEmitResolver(),D=t.onSubstituteNode;t.onSubstituteNode=function(t,i){if(i=D(t,i),1===t)return function(t){if(e.isIdentifier(t))return function(t){if(!e.isGeneratedIdentifier(t)&&r&&r.has(e.idText(t))){var i=e.getOriginalNode(t);if(e.isIdentifier(i)&&i.parent){var a=x.getReferencedValueDeclaration(i);if(a){var o=n[e.getOriginalNodeId(a)];if(o){var s=e.setParent(e.setTextRange(p.cloneNode(o),o),o.parent);return e.setSourceMapRange(s,t),e.setCommentRange(s,t),s}}}}return t}(t);return t}(i);return i};var S,T,C,E,k,N,A,F,P,w,I,O,M=1,L=0,R=0;return e.chainBundle(t,(function(r){if(r.isDeclarationFile||0==(2048&r.transformFlags))return r;var n=e.visitEachChild(r,B,t);return e.addEmitHelpers(n,t.readEmitHelpers()),n}));function B(r){var n=r.transformFlags;return o?function(r){switch(r.kind){case 243:case 244:return function(r){return o?(oe(),r=e.visitEachChild(r,B,t),ce(),r):e.visitEachChild(r,B,t)}(r);case 252:return function(r){o&&re({kind:2,isScript:!0,breakLabel:-1});r=e.visitEachChild(r,B,t),o&&ue();return r}(r);case 253:return function(r){o&&re({kind:4,isScript:!0,labelText:e.idText(r.label),breakLabel:-1});r=e.visitEachChild(r,B,t),o&&le();return r}(r);default:return j(r)}}(r):i?j(r):e.isFunctionLikeDeclaration(r)&&r.asteriskToken?function(t){switch(t.kind){case 259:return J(t);case 215:return z(t);default:return e.Debug.failBadSyntaxKind(t)}}(r):2048&n?e.visitEachChild(r,B,t):r}function j(r){switch(r.kind){case 259:return J(r);case 215:return z(r);case 174:case 175:return function(r){var n=i,a=o;return i=!1,o=!1,r=e.visitEachChild(r,B,t),i=n,o=a,r}(r);case 240:return function(t){if(1048576&t.transformFlags)return void G(t.declarationList);if(1048576&e.getEmitFlags(t))return t;for(var r=0,n=t.declarationList.declarations;r<n.length;r++){var i=n[r];v(i.name)}var a=e.getInitializedVariables(t.declarationList);if(0===a.length)return;return e.setSourceMapRange(p.createExpressionStatement(p.inlineExpressions(e.map(a,Q))),t)}(r);case 245:return function(r){o&&oe();var n=r.initializer;if(n&&e.isVariableDeclarationList(n)){for(var i=0,a=n.declarations;i<a.length;i++){var s=a[i];v(s.name)}var c=e.getInitializedVariables(n);r=p.updateForStatement(r,c.length>0?p.inlineExpressions(e.map(c,Q)):void 0,e.visitNode(r.condition,B,e.isExpression),e.visitNode(r.incrementor,B,e.isExpression),e.visitIterationBody(r.statement,B,t))}else r=e.visitEachChild(r,B,t);o&&ce();return r}(r);case 246:return function(r){o&&oe();var n=r.initializer;if(e.isVariableDeclarationList(n)){for(var i=0,a=n.declarations;i<a.length;i++){var s=a[i];v(s.name)}r=p.updateForInStatement(r,n.declarations[0].name,e.visitNode(r.expression,B,e.isExpression),e.visitNode(r.statement,B,e.isStatement,p.liftToBlock))}else r=e.visitEachChild(r,B,t);o&&ce();return r}(r);case 249:return function(r){if(o){var n=ge(r.label&&e.idText(r.label));if(n>0)return he(n,r)}return e.visitEachChild(r,B,t)}(r);case 248:return function(r){if(o){var n=me(r.label&&e.idText(r.label));if(n>0)return he(n,r)}return e.visitEachChild(r,B,t)}(r);case 250:return function(t){return r=e.visitNode(t.expression,B,e.isExpression),n=t,e.setTextRange(p.createReturnStatement(p.createArrayLiteralExpression(r?[ve(2),r]:[ve(2)])),n);var r,n}(r);default:return 1048576&r.transformFlags?function(r){switch(r.kind){case 223:return function(r){var n=e.getExpressionAssociativity(r);switch(n){case 0:return function(r){if(X(r.right))return e.isLogicalOperator(r.operatorToken.kind)?function(t){var r=ee(),n=$();De(n,e.visitNode(t.left,B,e.isExpression),t.left),55===t.operatorToken.kind?Ce(r,n,t.left):Te(r,n,t.left);return De(n,e.visitNode(t.right,B,e.isExpression),t.right),te(r),n}(r):27===r.operatorToken.kind?K(r):p.updateBinaryExpression(r,Z(e.visitNode(r.left,B,e.isExpression)),r.operatorToken,e.visitNode(r.right,B,e.isExpression));return e.visitEachChild(r,B,t)}(r);case 1:return function(r){var n=r.left,i=r.right;if(X(i)){var a=void 0;switch(n.kind){case 208:a=p.updatePropertyAccessExpression(n,Z(e.visitNode(n.expression,B,e.isLeftHandSideExpression)),n.name);break;case 209:a=p.updateElementAccessExpression(n,Z(e.visitNode(n.expression,B,e.isLeftHandSideExpression)),Z(e.visitNode(n.argumentExpression,B,e.isExpression)));break;default:a=e.visitNode(n,B,e.isExpression)}var o=r.operatorToken.kind;return e.isCompoundAssignment(o)?e.setTextRange(p.createAssignment(a,e.setTextRange(p.createBinaryExpression(Z(a),e.getNonAssignmentOperatorForCompoundAssignment(o),e.visitNode(i,B,e.isExpression)),r)),r):p.updateBinaryExpression(r,a,r.operatorToken,e.visitNode(i,B,e.isExpression))}return e.visitEachChild(r,B,t)}(r);default:return e.Debug.assertNever(n)}}(r);case 354:return function(t){for(var r=[],n=0,i=t.elements;n<i.length;n++){var a=i[n];e.isBinaryExpression(a)&&27===a.operatorToken.kind?r.push(K(a)):(X(a)&&r.length>0&&(Ee(1,[p.createExpressionStatement(p.inlineExpressions(r))]),r=[]),r.push(e.visitNode(a,B,e.isExpression)))}return p.inlineExpressions(r)}(r);case 224:return function(r){if(X(r.whenTrue)||X(r.whenFalse)){var n=ee(),i=ee(),a=$();return Ce(n,e.visitNode(r.condition,B,e.isExpression),r.condition),De(a,e.visitNode(r.whenTrue,B,e.isExpression),r.whenTrue),Se(i),te(n),De(a,e.visitNode(r.whenFalse,B,e.isExpression),r.whenFalse),te(i),a}return e.visitEachChild(r,B,t)}(r);case 226:return function(t){var r=ee(),n=e.visitNode(t.expression,B,e.isExpression);if(t.asteriskToken){!function(e,t){Ee(7,[e],t)}(0==(8388608&e.getEmitFlags(t.expression))?e.setTextRange(f().createValuesHelper(n),t):n,t)}else!function(e,t){Ee(6,[e],t)}(n,t);return te(r),function(t){return e.setTextRange(p.createCallExpression(p.createPropertyAccessExpression(E,"sent"),void 0,[]),t)}(t)}(r);case 206:return function(e){return V(e.elements,void 0,void 0,e.multiLine)}(r);case 207:return function(t){var r=t.properties,n=t.multiLine,i=Y(r),a=$();De(a,p.createObjectLiteralExpression(e.visitNodes(r,B,e.isObjectLiteralElementLike,0,i),n));var o=e.reduceLeft(r,s,[],i);return o.push(n?e.startOnNewLine(e.setParent(e.setTextRange(p.cloneNode(a),a),a.parent)):a),p.inlineExpressions(o);function s(r,i){X(i)&&r.length>0&&(xe(p.createExpressionStatement(p.inlineExpressions(r))),r=[]);var o=e.createExpressionForObjectLiteralElementLike(p,t,i,a),s=e.visitNode(o,B,e.isExpression);return s&&(n&&e.startOnNewLine(s),r.push(s)),r}}(r);case 209:return function(r){if(X(r.argumentExpression))return p.updateElementAccessExpression(r,Z(e.visitNode(r.expression,B,e.isLeftHandSideExpression)),e.visitNode(r.argumentExpression,B,e.isExpression));return e.visitEachChild(r,B,t)}(r);case 210:return function(r){if(!e.isImportCall(r)&&e.forEach(r.arguments,X)){var n=p.createCallBinding(r.expression,v,b,!0),i=n.target,a=n.thisArg;return e.setOriginalNode(e.setTextRange(p.createFunctionApplyCall(Z(e.visitNode(i,B,e.isLeftHandSideExpression)),a,V(r.arguments)),r),r)}return e.visitEachChild(r,B,t)}(r);case 211:return function(r){if(e.forEach(r.arguments,X)){var n=p.createCallBinding(p.createPropertyAccessExpression(r.expression,"bind"),v),i=n.target,a=n.thisArg;return e.setOriginalNode(e.setTextRange(p.createNewExpression(p.createFunctionApplyCall(Z(e.visitNode(i,B,e.isExpression)),a,V(r.arguments,p.createVoidZero())),void 0,[]),r),r)}return e.visitEachChild(r,B,t)}(r);default:return e.visitEachChild(r,B,t)}}(r):4196352&r.transformFlags?e.visitEachChild(r,B,t):r}}function J(r){if(r.asteriskToken)r=e.setOriginalNode(e.setTextRange(p.createFunctionDeclaration(r.modifiers,void 0,r.name,void 0,e.visitParameterList(r.parameters,B,t),void 0,U(r.body)),r),r);else{var n=i,a=o;i=!1,o=!1,r=e.visitEachChild(r,B,t),i=n,o=a}return i?void y(r):r}function z(r){if(r.asteriskToken)r=e.setOriginalNode(e.setTextRange(p.createFunctionExpression(void 0,void 0,r.name,void 0,e.visitParameterList(r.parameters,B,t),void 0,U(r.body)),r),r);else{var n=i,a=o;i=!1,o=!1,r=e.visitEachChild(r,B,t),i=n,o=a}return r}function U(t){var r=[],n=i,a=o,f=s,y=c,v=u,h=l,b=_,x=d,D=M,k=S,N=T,A=C,F=E;i=!0,o=!1,s=void 0,c=void 0,u=void 0,l=void 0,_=void 0,d=void 0,M=1,S=void 0,T=void 0,C=void 0,E=p.createTempVariable(void 0),g();var P=p.copyPrologue(t.statements,r,!1,B);q(t.statements,P);var w=ke();return e.insertStatementsAfterStandardPrologue(r,m()),r.push(p.createReturnStatement(w)),i=n,o=a,s=f,c=y,u=v,l=h,_=b,d=x,M=D,S=k,T=N,C=A,E=F,e.setTextRange(p.createBlock(r,t.multiLine),t)}function K(t){var r=[];return n(t.left),n(t.right),p.inlineExpressions(r);function n(t){e.isBinaryExpression(t)&&27===t.operatorToken.kind?(n(t.left),n(t.right)):(X(t)&&r.length>0&&(Ee(1,[p.createExpressionStatement(p.inlineExpressions(r))]),r=[]),r.push(e.visitNode(t,B,e.isExpression)))}}function V(t,r,n,i){var o,s=Y(t);if(s>0){o=$();var c=e.visitNodes(t,B,e.isExpression,0,s);De(o,p.createArrayLiteralExpression(r?a([r],c,!0):c)),r=void 0}var u=e.reduceLeft(t,(function(t,n){if(X(n)&&t.length>0){var s=void 0!==o;o||(o=$()),De(o,s?p.createArrayConcatCall(o,[p.createArrayLiteralExpression(t,i)]):p.createArrayLiteralExpression(r?a([r],t,!0):t,i)),r=void 0,t=[]}return t.push(e.visitNode(n,B,e.isExpression)),t}),[],s);return o?p.createArrayConcatCall(o,[p.createArrayLiteralExpression(u,i)]):e.setTextRange(p.createArrayLiteralExpression(r?a([r],u,!0):u,i),n)}function q(e,t){void 0===t&&(t=0);for(var r=e.length,n=t;n<r;n++)H(e[n])}function W(t){e.isBlock(t)?q(t.statements):H(t)}function H(i){var a=o;o||(o=X(i)),function(i){switch(i.kind){case 238:return function(t){X(t)?q(t.statements):xe(e.visitNode(t,B,e.isStatement))}(i);case 241:return function(t){xe(e.visitNode(t,B,e.isStatement))}(i);case 242:return function(t){if(X(t))if(X(t.thenStatement)||X(t.elseStatement)){var r=ee(),n=t.elseStatement?ee():void 0;Ce(t.elseStatement?n:r,e.visitNode(t.expression,B,e.isExpression),t.expression),W(t.thenStatement),t.elseStatement&&(Se(r),te(n),W(t.elseStatement)),te(r)}else xe(e.visitNode(t,B,e.isStatement));else xe(e.visitNode(t,B,e.isStatement))}(i);case 243:return function(t){if(X(t)){var r=ee(),n=ee();se(r),te(n),W(t.statement),te(r),Te(n,e.visitNode(t.expression,B,e.isExpression)),ce()}else xe(e.visitNode(t,B,e.isStatement))}(i);case 244:return function(t){if(X(t)){var r=ee(),n=se(r);te(r),Ce(n,e.visitNode(t.expression,B,e.isExpression)),W(t.statement),Se(r),ce()}else xe(e.visitNode(t,B,e.isStatement))}(i);case 245:return function(t){if(X(t)){var r=ee(),n=ee(),i=se(n);if(t.initializer){var a=t.initializer;e.isVariableDeclarationList(a)?G(a):xe(e.setTextRange(p.createExpressionStatement(e.visitNode(a,B,e.isExpression)),a))}te(r),t.condition&&Ce(i,e.visitNode(t.condition,B,e.isExpression)),W(t.statement),te(n),t.incrementor&&xe(e.setTextRange(p.createExpressionStatement(e.visitNode(t.incrementor,B,e.isExpression)),t.incrementor)),Se(r),ce()}else xe(e.visitNode(t,B,e.isStatement))}(i);case 246:return function(t){if(X(t)){var r=$(),n=$(),i=$(),a=p.createLoopVariable(),o=t.initializer;v(a),De(r,e.visitNode(t.expression,B,e.isExpression)),De(n,p.createArrayLiteralExpression()),xe(p.createForInStatement(i,r,p.createExpressionStatement(p.createCallExpression(p.createPropertyAccessExpression(n,"push"),void 0,[i])))),De(a,p.createNumericLiteral(0));var s=ee(),c=ee(),u=se(c);te(s),Ce(u,p.createLessThan(a,p.createPropertyAccessExpression(n,"length"))),De(i,p.createElementAccessExpression(n,a)),Ce(c,p.createBinaryExpression(i,101,r));var l=void 0;if(e.isVariableDeclarationList(o)){for(var _=0,d=o.declarations;_<d.length;_++){var f=d[_];v(f.name)}l=p.cloneNode(o.declarations[0].name)}else l=e.visitNode(o,B,e.isExpression),e.Debug.assert(e.isLeftHandSideExpression(l));De(l,i),W(t.statement),te(c),xe(p.createExpressionStatement(p.createPostfixIncrement(a))),Se(s),ce()}else xe(e.visitNode(t,B,e.isStatement))}(i);case 248:return function(t){var r=me(t.label?e.idText(t.label):void 0);r>0?Se(r,t):xe(t)}(i);case 249:return function(t){var r=ge(t.label?e.idText(t.label):void 0);r>0?Se(r,t):xe(t)}(i);case 250:return function(t){r=e.visitNode(t.expression,B,e.isExpression),n=t,Ee(8,[r],n);var r,n}(i);case 251:return function(t){X(t)?(r=Z(e.visitNode(t.expression,B,e.isExpression)),n=ee(),i=ee(),te(n),re({kind:1,expression:r,startLabel:n,endLabel:i}),W(t.statement),e.Debug.assert(1===ae()),te(ne().endLabel)):xe(e.visitNode(t,B,e.isStatement));var r,n,i}(i);case 252:return function(t){if(X(t.caseBlock)){for(var r=t.caseBlock,n=r.clauses.length,i=(re({kind:2,isScript:!1,breakLabel:f=ee()}),f),a=Z(e.visitNode(t.expression,B,e.isExpression)),o=[],s=-1,c=0;c<n;c++){var u=r.clauses[c];o.push(ee()),293===u.kind&&-1===s&&(s=c)}for(var l=0,_=[];l<n;){var d=0;for(c=l;c<n;c++){if(292===(u=r.clauses[c]).kind){if(X(u.expression)&&_.length>0)break;_.push(p.createCaseClause(e.visitNode(u.expression,B,e.isExpression),[he(o[c],u.expression)]))}else d++}_.length&&(xe(p.createSwitchStatement(a,p.createCaseBlock(_))),l+=_.length,_=[]),d>0&&(l+=d,d=0)}Se(s>=0?o[s]:i);for(c=0;c<n;c++)te(o[c]),q(r.clauses[c].statements);ue()}else xe(e.visitNode(t,B,e.isStatement));var f}(i);case 253:return function(t){X(t)?(r=e.idText(t.label),n=ee(),re({kind:4,isScript:!1,labelText:r,breakLabel:n}),W(t.statement),le()):xe(e.visitNode(t,B,e.isStatement));var r,n}(i);case 254:return function(t){var r;n=e.visitNode(null!==(r=t.expression)&&void 0!==r?r:p.createVoidZero(),B,e.isExpression),i=t,Ee(9,[n],i);var n,i}(i);case 255:return function(i){X(i)?(a=ee(),o=ee(),te(a),re({kind:0,state:0,startLabel:a,endLabel:o}),be(),W(i.tryBlock),i.catchClause&&(!function(i){var a;if(e.Debug.assert(0===ae()),e.isGeneratedIdentifier(i.name))a=i.name,v(i.name);else{var o=e.idText(i.name);a=$(o),r||(r=new e.Map,n=[],t.enableSubstitution(79)),r.set(o,!0),n[e.getOriginalNodeId(i)]=a}var s=ie();e.Debug.assert(s.state<1);var c=s.endLabel;Se(c);var u=ee();te(u),s.state=1,s.catchVariable=a,s.catchLabel=u,De(a,p.createCallExpression(p.createPropertyAccessExpression(E,"sent"),void 0,[])),be()}(i.catchClause.variableDeclaration),W(i.catchClause.block)),i.finallyBlock&&(!function(){e.Debug.assert(0===ae());var t=ie();e.Debug.assert(t.state<2);var r=t.endLabel;Se(r);var n=ee();te(n),t.state=2,t.finallyLabel=n}(),W(i.finallyBlock)),function(){e.Debug.assert(0===ae());var t=ne(),r=t.state;r<2?Se(t.endLabel):Ee(10);te(t.endLabel),be(),t.state=3}()):xe(e.visitEachChild(i,B,t));var a,o}(i);default:xe(e.visitNode(i,B,e.isStatement))}}(i),o=a}function G(t){for(var r=0,n=t.declarations;r<n.length;r++){var i=n[r],a=p.cloneNode(i.name);e.setCommentRange(a,i.name),v(a)}for(var o=e.getInitializedVariables(t),s=o.length,c=0,u=[];c<s;){for(var l=c;l<s;l++){if(X((i=o[l]).initializer)&&u.length>0)break;u.push(Q(i))}u.length&&(xe(p.createExpressionStatement(p.inlineExpressions(u))),c+=u.length,u=[])}}function Q(t){return e.setSourceMapRange(p.createAssignment(e.setSourceMapRange(p.cloneNode(t.name),t.name),e.visitNode(t.initializer,B,e.isExpression)),t)}function X(e){return!!e&&0!=(1048576&e.transformFlags)}function Y(e){for(var t=e.length,r=0;r<t;r++)if(X(e[r]))return r;return-1}function Z(t){if(e.isGeneratedIdentifier(t)||4096&e.getEmitFlags(t))return t;var r=p.createTempVariable(v);return De(r,t,t),r}function $(e){var t=e?p.createUniqueName(e):p.createTempVariable(void 0);return v(t),t}function ee(){_||(_=[]);var e=M;return M++,_[e]=-1,e}function te(t){e.Debug.assert(void 0!==_,"No labels were defined."),_[t]=S?S.length:0}function re(e){s||(s=[],u=[],c=[],l=[]);var t=u.length;return u[t]=0,c[t]=S?S.length:0,s[t]=e,l.push(e),t}function ne(){var t=ie();if(void 0===t)return e.Debug.fail("beginBlock was never called.");var r=u.length;return u[r]=1,c[r]=S?S.length:0,s[r]=t,l.pop(),t}function ie(){return e.lastOrUndefined(l)}function ae(){var e=ie();return e&&e.kind}function oe(){re({kind:3,isScript:!0,breakLabel:-1,continueLabel:-1})}function se(e){var t=ee();return re({kind:3,isScript:!1,breakLabel:t,continueLabel:e}),t}function ce(){e.Debug.assert(3===ae());var t=ne(),r=t.breakLabel;t.isScript||te(r)}function ue(){e.Debug.assert(2===ae());var t=ne(),r=t.breakLabel;t.isScript||te(r)}function le(){e.Debug.assert(4===ae());var t=ne();t.isScript||te(t.breakLabel)}function _e(e){return 2===e.kind||3===e.kind}function de(e){return 4===e.kind}function pe(e){return 3===e.kind}function fe(e,t){for(var r=t;r>=0;r--){var n=l[r];if(!de(n))break;if(n.labelText===e)return!0}return!1}function ge(e){if(l)if(e)for(var t=l.length-1;t>=0;t--){if(de(r=l[t])&&r.labelText===e)return r.breakLabel;if(_e(r)&&fe(e,t-1))return r.breakLabel}else for(t=l.length-1;t>=0;t--){var r;if(_e(r=l[t]))return r.breakLabel}return 0}function me(e){if(l)if(e)for(var t=l.length-1;t>=0;t--){if(pe(r=l[t])&&fe(e,t-1))return r.continueLabel}else for(t=l.length-1;t>=0;t--){var r;if(pe(r=l[t]))return r.continueLabel}return 0}function ye(e){if(void 0!==e&&e>0){void 0===d&&(d=[]);var t=p.createNumericLiteral(-1);return void 0===d[e]?d[e]=[t]:d[e].push(t),t}return p.createOmittedExpression()}function ve(t){var r=p.createNumericLiteral(t);return e.addSyntheticTrailingComment(r,3,function(e){switch(e){case 2:return"return";case 3:return"break";case 4:return"yield";case 5:return"yield*";case 7:return"endfinally";default:return}}(t)),r}function he(t,r){return e.Debug.assertLessThan(0,t,"Invalid label"),e.setTextRange(p.createReturnStatement(p.createArrayLiteralExpression([ve(3),ye(t)])),r)}function be(){Ee(0)}function xe(e){e?Ee(1,[e]):be()}function De(e,t,r){Ee(2,[e,t],r)}function Se(e,t){Ee(3,[e],t)}function Te(e,t,r){Ee(4,[e,t],r)}function Ce(e,t,r){Ee(5,[e,t],r)}function Ee(e,t,r){void 0===S&&(S=[],T=[],C=[]),void 0===_&&te(ee());var n=S.length;S[n]=e,T[n]=t,C[n]=r}function ke(){L=0,R=0,k=void 0,N=!1,A=!1,F=void 0,P=void 0,w=void 0,I=void 0,O=void 0;var t=function(){if(S){for(var t=0;t<S.length;t++)Pe(t);Ne(S.length)}else Ne(0);if(F){var r=p.createPropertyAccessExpression(E,"label"),n=p.createSwitchStatement(r,p.createCaseBlock(F));return[e.startOnNewLine(n)]}if(P)return P;return[]}();return f().createGeneratorHelper(e.setEmitFlags(p.createFunctionExpression(void 0,void 0,void 0,void 0,[p.createParameterDeclaration(void 0,void 0,E)],void 0,p.createBlock(t,t.length>0)),524288))}function Ne(e){(function(e){if(!A)return!0;if(!_||!d)return!1;for(var t=0;t<_.length;t++)if(_[t]===e&&d[t])return!0;return!1})(e)&&(Fe(e),O=void 0,Ie(void 0,void 0)),P&&F&&Ae(!1),function(){if(void 0!==d&&void 0!==k)for(var e=0;e<k.length;e++){var t=k[e];if(void 0!==t)for(var r=0,n=t;r<n.length;r++){var i=n[r],a=d[i];if(void 0!==a)for(var o=0,s=a;o<s.length;o++){s[o].text=String(e)}}}}()}function Ae(e){if(F||(F=[]),P){if(O)for(var t=O.length-1;t>=0;t--){var r=O[t];P=[p.createWithStatement(r.expression,p.createBlock(P))]}if(I){var n=I.startLabel,i=I.catchLabel,a=I.finallyLabel,o=I.endLabel;P.unshift(p.createExpressionStatement(p.createCallExpression(p.createPropertyAccessExpression(p.createPropertyAccessExpression(E,"trys"),"push"),void 0,[p.createArrayLiteralExpression([ye(n),ye(i),ye(a),ye(o)])]))),I=void 0}e&&P.push(p.createExpressionStatement(p.createAssignment(p.createPropertyAccessExpression(E,"label"),p.createNumericLiteral(R+1))))}F.push(p.createCaseClause(p.createNumericLiteral(R),P||[])),P=void 0}function Fe(e){if(_)for(var t=0;t<_.length;t++)_[t]===e&&(P&&(Ae(!N),N=!1,A=!1,R++),void 0===k&&(k=[]),void 0===k[R]?k[R]=[t]:k[R].push(t))}function Pe(t){if(Fe(t),function(e){if(s)for(;L<u.length&&c[L]<=e;L++){var t=s[L],r=u[L];switch(t.kind){case 0:0===r?(w||(w=[]),P||(P=[]),w.push(I),I=t):1===r&&(I=w.pop());break;case 1:0===r?(O||(O=[]),O.push(t)):1===r&&O.pop()}}}(t),!N){N=!1,A=!1;var r=S[t];if(0!==r){if(10===r)return N=!0,void we(p.createReturnStatement(p.createArrayLiteralExpression([ve(7)])));var n=T[t];if(1===r)return we(n[0]);var i,a,o,l=C[t];switch(r){case 2:return i=n[0],a=n[1],o=l,void we(e.setTextRange(p.createExpressionStatement(p.createAssignment(i,a)),o));case 3:return function(t,r){N=!0,we(e.setEmitFlags(e.setTextRange(p.createReturnStatement(p.createArrayLiteralExpression([ve(3),ye(t)])),r),384))}(n[0],l);case 4:return function(t,r,n){we(e.setEmitFlags(p.createIfStatement(r,e.setEmitFlags(e.setTextRange(p.createReturnStatement(p.createArrayLiteralExpression([ve(3),ye(t)])),n),384)),1))}(n[0],n[1],l);case 5:return function(t,r,n){we(e.setEmitFlags(p.createIfStatement(p.createLogicalNot(r),e.setEmitFlags(e.setTextRange(p.createReturnStatement(p.createArrayLiteralExpression([ve(3),ye(t)])),n),384)),1))}(n[0],n[1],l);case 6:return function(t,r){N=!0,we(e.setEmitFlags(e.setTextRange(p.createReturnStatement(p.createArrayLiteralExpression(t?[ve(4),t]:[ve(4)])),r),384))}(n[0],l);case 7:return function(t,r){N=!0,we(e.setEmitFlags(e.setTextRange(p.createReturnStatement(p.createArrayLiteralExpression([ve(5),t])),r),384))}(n[0],l);case 8:return Ie(n[0],l);case 9:return function(t,r){N=!0,A=!0,we(e.setTextRange(p.createThrowStatement(t),r))}(n[0],l)}}}}function we(e){e&&(P?P.push(e):P=[e])}function Ie(t,r){N=!0,A=!0,we(e.setEmitFlags(e.setTextRange(p.createReturnStatement(p.createArrayLiteralExpression(t?[ve(2),t]:[ve(2)])),r),384))}}}(_||(_={})),function(e){e.transformModule=function(r){var n=r.factory,i=r.getEmitHelperFactory,o=r.startLexicalEnvironment,s=r.endLexicalEnvironment,c=r.hoistVariableDeclaration,u=r.getCompilerOptions(),l=r.getEmitResolver(),_=r.getEmitHost(),d=e.getEmitScriptTarget(u),p=e.getEmitModuleKind(u),f=r.onSubstituteNode,g=r.onEmitNode;r.onSubstituteNode=function(t,r){if((r=f(t,r)).id&&x[r.id])return r;if(1===t)return function(t){switch(t.kind){case 79:return Z(t);case 210:return function(t){if(e.isIdentifier(t.expression)){var r=Z(t.expression);if(x[e.getNodeId(r)]=!0,!(e.isIdentifier(r)||4096&e.getEmitFlags(t.expression)))return e.addEmitFlags(n.updateCallExpression(t,r,void 0,t.arguments),536870912)}return t}(t);case 212:return function(t){if(e.isIdentifier(t.tag)){var r=Z(t.tag);if(x[e.getNodeId(r)]=!0,!(e.isIdentifier(r)||4096&e.getEmitFlags(t.tag)))return e.addEmitFlags(n.updateTaggedTemplateExpression(t,r,void 0,t.template),536870912)}return t}(t);case 223:return function(t){if(e.isAssignmentOperator(t.operatorToken.kind)&&e.isIdentifier(t.left)&&!e.isGeneratedIdentifier(t.left)&&!e.isLocalName(t.left)&&!e.isDeclarationNameOfEnumOrNamespace(t.left)){var r=$(t.left);if(r){for(var n=t,i=0,a=r;i<a.length;i++){var o=a[i];x[e.getNodeId(n)]=!0,n=X(o,n,t)}return n}}return t}(t)}return t}(r);if(e.isShorthandPropertyAssignment(r))return function(t){var r=t.name,i=Z(r);if(i!==r){if(t.objectAssignmentInitializer){var a=n.createAssignment(i,t.objectAssignmentInitializer);return e.setTextRange(n.createPropertyAssignment(r,a),t)}return e.setTextRange(n.createPropertyAssignment(r,i),t)}return t}(r);return r},r.onEmitNode=function(t,r,n){308===r.kind?(m=r,y=h[e.getOriginalNodeId(m)],g(t,r,n),m=void 0,y=void 0):g(t,r,n)},r.enableSubstitution(210),r.enableSubstitution(212),r.enableSubstitution(79),r.enableSubstitution(223),r.enableSubstitution(300),r.enableEmitNotification(308);var m,y,v,h=[],b=[],x=[];return e.chainBundle(r,(function(t){if(t.isDeclarationFile||!(e.isEffectiveExternalModule(t,u)||8388608&t.transformFlags||e.isJsonSourceFile(t)&&e.hasJsonModuleEmitEnabled(u)&&e.outFile(u)))return t;m=t,y=e.collectExternalModuleInfo(r,t,l,u),h[e.getOriginalNodeId(t)]=y;var n=function(t){switch(t){case e.ModuleKind.AMD:return T;case e.ModuleKind.UMD:return C;default:return S}}(p),i=n(t);return m=void 0,y=void 0,v=!1,i}));function D(){return!(y.exportEquals||!e.isExternalModule(m))}function S(t){o();var i=[],a=e.getStrictOptionValue(u,"alwaysStrict")||!u.noImplicitUseStrict&&e.isExternalModule(m),c=n.copyPrologue(t.statements,i,a&&!e.isJsonSourceFile(t),F);if(D()&&e.append(i,Q()),e.length(y.exportedNames))for(var l=0;l<y.exportedNames.length;l+=50)e.append(i,n.createExpressionStatement(e.reduceLeft(y.exportedNames.slice(l,l+50),(function(t,r){return n.createAssignment(n.createPropertyAccessExpression(n.createIdentifier("exports"),n.createIdentifier(e.idText(r))),t)}),n.createVoidZero())));e.append(i,e.visitNode(y.externalHelpersImportDeclaration,F,e.isStatement)),e.addRange(i,e.visitNodes(t.statements,F,e.isStatement,c)),A(i,!1),e.insertStatementsAfterStandardPrologue(i,s());var _=n.updateSourceFile(t,e.setTextRange(n.createNodeArray(i),t.statements));return e.addEmitHelpers(_,r.readEmitHelpers()),_}function T(t){var i=n.createIdentifier("define"),o=e.tryGetModuleNameFromFile(n,t,_,u),s=e.isJsonSourceFile(t)&&t,c=E(t,!0),l=c.aliasedModuleNames,d=c.unaliasedModuleNames,p=c.importAliasNames,f=n.updateSourceFile(t,e.setTextRange(n.createNodeArray([n.createExpressionStatement(n.createCallExpression(i,void 0,a(a([],o?[o]:[],!0),[n.createArrayLiteralExpression(s?e.emptyArray:a(a([n.createStringLiteral("require"),n.createStringLiteral("exports")],l,!0),d,!0)),s?s.statements.length?s.statements[0].expression:n.createObjectLiteralExpression():n.createFunctionExpression(void 0,void 0,void 0,void 0,a([n.createParameterDeclaration(void 0,void 0,"require"),n.createParameterDeclaration(void 0,void 0,"exports")],p,!0),void 0,N(t))],!1)))]),t.statements));return e.addEmitHelpers(f,r.readEmitHelpers()),f}function C(t){var i=E(t,!1),o=i.aliasedModuleNames,s=i.unaliasedModuleNames,c=i.importAliasNames,l=e.tryGetModuleNameFromFile(n,t,_,u),d=n.createFunctionExpression(void 0,void 0,void 0,void 0,[n.createParameterDeclaration(void 0,void 0,"factory")],void 0,e.setTextRange(n.createBlock([n.createIfStatement(n.createLogicalAnd(n.createTypeCheck(n.createIdentifier("module"),"object"),n.createTypeCheck(n.createPropertyAccessExpression(n.createIdentifier("module"),"exports"),"object")),n.createBlock([n.createVariableStatement(void 0,[n.createVariableDeclaration("v",void 0,void 0,n.createCallExpression(n.createIdentifier("factory"),void 0,[n.createIdentifier("require"),n.createIdentifier("exports")]))]),e.setEmitFlags(n.createIfStatement(n.createStrictInequality(n.createIdentifier("v"),n.createIdentifier("undefined")),n.createExpressionStatement(n.createAssignment(n.createPropertyAccessExpression(n.createIdentifier("module"),"exports"),n.createIdentifier("v")))),1)]),n.createIfStatement(n.createLogicalAnd(n.createTypeCheck(n.createIdentifier("define"),"function"),n.createPropertyAccessExpression(n.createIdentifier("define"),"amd")),n.createBlock([n.createExpressionStatement(n.createCallExpression(n.createIdentifier("define"),void 0,a(a([],l?[l]:[],!0),[n.createArrayLiteralExpression(a(a([n.createStringLiteral("require"),n.createStringLiteral("exports")],o,!0),s,!0)),n.createIdentifier("factory")],!1)))])))],!0),void 0)),p=n.updateSourceFile(t,e.setTextRange(n.createNodeArray([n.createExpressionStatement(n.createCallExpression(d,void 0,[n.createFunctionExpression(void 0,void 0,void 0,void 0,a([n.createParameterDeclaration(void 0,void 0,"require"),n.createParameterDeclaration(void 0,void 0,"exports")],c,!0),void 0,N(t))]))]),t.statements));return e.addEmitHelpers(p,r.readEmitHelpers()),p}function E(t,r){for(var i=[],a=[],o=[],s=0,c=t.amdDependencies;s<c.length;s++){var d=c[s];d.name?(i.push(n.createStringLiteral(d.path)),o.push(n.createParameterDeclaration(void 0,void 0,d.name))):a.push(n.createStringLiteral(d.path))}for(var p=0,f=y.externalImports;p<f.length;p++){var g=f[p],v=e.getExternalModuleNameLiteral(n,g,m,_,l,u),h=e.getLocalNameForExternalImport(n,g,m);v&&(r&&h?(e.setEmitFlags(h,4),i.push(v),o.push(n.createParameterDeclaration(void 0,void 0,h))):a.push(v))}return{aliasedModuleNames:i,unaliasedModuleNames:a,importAliasNames:o}}function k(t){if(!e.isImportEqualsDeclaration(t)&&!e.isExportDeclaration(t)&&e.getExternalModuleNameLiteral(n,t,m,_,l,u)){var r=e.getLocalNameForExternalImport(n,t,m),i=R(t,r);if(i!==r)return n.createExpressionStatement(n.createAssignment(r,i))}}function N(r){o();var i=[],a=n.copyPrologue(r.statements,i,!u.noImplicitUseStrict,F);D()&&e.append(i,Q()),e.length(y.exportedNames)&&e.append(i,n.createExpressionStatement(e.reduceLeft(y.exportedNames,(function(t,r){return n.createAssignment(n.createPropertyAccessExpression(n.createIdentifier("exports"),n.createIdentifier(e.idText(r))),t)}),n.createVoidZero()))),e.append(i,e.visitNode(y.externalHelpersImportDeclaration,F,e.isStatement)),p===e.ModuleKind.AMD&&e.addRange(i,e.mapDefined(y.externalImports,k)),e.addRange(i,e.visitNodes(r.statements,F,e.isStatement,a)),A(i,!0),e.insertStatementsAfterStandardPrologue(i,s());var c=n.createBlock(i,!0);return v&&e.addEmitHelper(c,t),c}function A(t,r){if(y.exportEquals){var i=e.visitNode(y.exportEquals.expression,w);if(i)if(r){var a=n.createReturnStatement(i);e.setTextRange(a,y.exportEquals),e.setEmitFlags(a,1920),t.push(a)}else{a=n.createExpressionStatement(n.createAssignment(n.createPropertyAccessExpression(n.createIdentifier("module"),"exports"),i));e.setTextRange(a,y.exportEquals),e.setEmitFlags(a,1536),t.push(a)}}}function F(t){switch(t.kind){case 269:return function(t){var r,i=e.getNamespaceDeclarationNode(t);if(p!==e.ModuleKind.AMD){if(!t.importClause)return e.setOriginalNode(e.setTextRange(n.createExpressionStatement(B(t)),t),t);var a=[];i&&!e.isDefaultImport(t)?a.push(n.createVariableDeclaration(n.cloneNode(i.name),void 0,void 0,R(t,B(t)))):(a.push(n.createVariableDeclaration(n.getGeneratedNameForNode(t),void 0,void 0,R(t,B(t)))),i&&e.isDefaultImport(t)&&a.push(n.createVariableDeclaration(n.cloneNode(i.name),void 0,void 0,n.getGeneratedNameForNode(t)))),r=e.append(r,e.setOriginalNode(e.setTextRange(n.createVariableStatement(void 0,n.createVariableDeclarationList(a,d>=2?2:0)),t),t))}else i&&e.isDefaultImport(t)&&(r=e.append(r,n.createVariableStatement(void 0,n.createVariableDeclarationList([e.setOriginalNode(e.setTextRange(n.createVariableDeclaration(n.cloneNode(i.name),void 0,void 0,n.getGeneratedNameForNode(t)),t),t)],d>=2?2:0))));if(z(t)){var o=e.getOriginalNodeId(t);b[o]=U(b[o],t)}else r=U(r,t);return e.singleOrMany(r)}(t);case 268:return function(t){var r;e.Debug.assert(e.isExternalModuleImportEqualsDeclaration(t),"import= for internal module references should be handled in an earlier transformer."),p!==e.ModuleKind.AMD?r=e.hasSyntacticModifier(t,1)?e.append(r,e.setOriginalNode(e.setTextRange(n.createExpressionStatement(X(t.name,B(t))),t),t)):e.append(r,e.setOriginalNode(e.setTextRange(n.createVariableStatement(void 0,n.createVariableDeclarationList([n.createVariableDeclaration(n.cloneNode(t.name),void 0,void 0,B(t))],d>=2?2:0)),t),t)):e.hasSyntacticModifier(t,1)&&(r=e.append(r,e.setOriginalNode(e.setTextRange(n.createExpressionStatement(X(n.getExportName(t),n.getLocalName(t))),t),t)));if(z(t)){var i=e.getOriginalNodeId(t);b[i]=K(b[i],t)}else r=K(r,t);return e.singleOrMany(r)}(t);case 275:return function(t){if(!t.moduleSpecifier)return;var r=n.getGeneratedNameForNode(t);if(t.exportClause&&e.isNamedExports(t.exportClause)){var a=[];p!==e.ModuleKind.AMD&&a.push(e.setOriginalNode(e.setTextRange(n.createVariableStatement(void 0,n.createVariableDeclarationList([n.createVariableDeclaration(r,void 0,void 0,B(t))])),t),t));for(var o=0,s=t.exportClause.elements;o<s.length;o++){var c=s[o];if(0===d)a.push(e.setOriginalNode(e.setTextRange(n.createExpressionStatement(i().createCreateBindingHelper(r,n.createStringLiteralFromNode(c.propertyName||c.name),c.propertyName?n.createStringLiteralFromNode(c.name):void 0)),c),c));else{var l=!(!e.getESModuleInterop(u)||67108864&e.getEmitFlags(t)||"default"!==e.idText(c.propertyName||c.name)),_=n.createPropertyAccessExpression(l?i().createImportDefaultHelper(r):r,c.propertyName||c.name);a.push(e.setOriginalNode(e.setTextRange(n.createExpressionStatement(X(n.getExportName(c),_,void 0,!0)),c),c))}}return e.singleOrMany(a)}return t.exportClause?((a=[]).push(e.setOriginalNode(e.setTextRange(n.createExpressionStatement(X(n.cloneNode(t.exportClause.name),function(t,r){if(!e.getESModuleInterop(u)||67108864&e.getEmitFlags(t))return r;if(e.getExportNeedsImportStarHelper(t))return i().createImportStarHelper(r);return r}(t,p!==e.ModuleKind.AMD?B(t):e.isExportNamespaceAsDefaultDeclaration(t)?r:n.createIdentifier(e.idText(t.exportClause.name))))),t),t)),e.singleOrMany(a)):e.setOriginalNode(e.setTextRange(n.createExpressionStatement(i().createExportStarHelper(p!==e.ModuleKind.AMD?B(t):r)),t),t)}(t);case 274:return function(t){if(t.isExportEquals)return;var r,i=t.original;if(i&&z(i)){var a=e.getOriginalNodeId(t);b[a]=G(b[a],n.createIdentifier("default"),e.visitNode(t.expression,w),t,!0)}else r=G(r,n.createIdentifier("default"),e.visitNode(t.expression,w),t,!0);return e.singleOrMany(r)}(t);case 240:return function(t){var i,a,o;if(e.hasSyntacticModifier(t,1)){for(var s=void 0,c=!1,u=0,l=t.declarationList.declarations;u<l.length;u++){var _=l[u];if(e.isIdentifier(_.name)&&e.isLocalName(_.name))s||(s=e.visitNodes(t.modifiers,Y,e.isModifier)),a=e.append(a,_);else if(_.initializer)if(!e.isBindingPattern(_.name)&&(e.isArrowFunction(_.initializer)||e.isFunctionExpression(_.initializer)||e.isClassExpression(_.initializer))){var d=n.createAssignment(e.setTextRange(n.createPropertyAccessExpression(n.createIdentifier("exports"),_.name),_.name),n.createIdentifier(e.getTextOfIdentifierOrLiteral(_.name))),p=n.createVariableDeclaration(_.name,_.exclamationToken,_.type,e.visitNode(_.initializer,w));a=e.append(a,p),o=e.append(o,d),c=!0}else o=e.append(o,J(_))}if(a&&(i=e.append(i,n.updateVariableStatement(t,s,n.updateVariableDeclarationList(t.declarationList,a)))),o){var f=e.setOriginalNode(e.setTextRange(n.createExpressionStatement(n.inlineExpressions(o)),t),t);c&&e.removeAllComments(f),i=e.append(i,f)}}else i=e.append(i,e.visitEachChild(t,w,r));if(z(t)){var g=e.getOriginalNodeId(t);b[g]=V(b[g],t)}else i=V(i,t);return e.singleOrMany(i)}(t);case 259:return function(t){var i;i=e.hasSyntacticModifier(t,1)?e.append(i,e.setOriginalNode(e.setTextRange(n.createFunctionDeclaration(e.visitNodes(t.modifiers,Y,e.isModifier),t.asteriskToken,n.getDeclarationName(t,!0,!0),void 0,e.visitNodes(t.parameters,w),void 0,e.visitEachChild(t.body,w,r)),t),t)):e.append(i,e.visitEachChild(t,w,r));if(z(t)){var a=e.getOriginalNodeId(t);b[a]=W(b[a],t)}else i=W(i,t);return e.singleOrMany(i)}(t);case 260:return function(t){var i;i=e.hasSyntacticModifier(t,1)?e.append(i,e.setOriginalNode(e.setTextRange(n.createClassDeclaration(e.visitNodes(t.modifiers,Y,e.isModifierLike),n.getDeclarationName(t,!0,!0),void 0,e.visitNodes(t.heritageClauses,w),e.visitNodes(t.members,w)),t),t)):e.append(i,e.visitEachChild(t,w,r));if(z(t)){var a=e.getOriginalNodeId(t);b[a]=W(b[a],t)}else i=W(i,t);return e.singleOrMany(i)}(t);case 355:return function(t){if(z(t)&&240===t.original.kind){var r=e.getOriginalNodeId(t);b[r]=V(b[r],t.original)}return t}(t);case 356:return function(t){var r=e.getOriginalNodeId(t),n=b[r];if(n)return delete b[r],e.append(n,t);return t}(t);default:return w(t)}}function P(t,i){if(!(276828160&t.transformFlags))return t;switch(t.kind){case 245:return function(t){return n.updateForStatement(t,e.visitNode(t.initializer,I,e.isForInitializer),e.visitNode(t.condition,w,e.isExpression),e.visitNode(t.incrementor,I,e.isExpression),e.visitIterationBody(t.statement,w,r))}(t);case 241:return function(t){return n.updateExpressionStatement(t,e.visitNode(t.expression,I,e.isExpression))}(t);case 214:return function(t,r){return n.updateParenthesizedExpression(t,e.visitNode(t.expression,r?I:w,e.isExpression))}(t,i);case 353:return function(t,r){return n.updatePartiallyEmittedExpression(t,e.visitNode(t.expression,r?I:w,e.isExpression))}(t,i);case 210:if(e.isImportCall(t)&&void 0===m.impliedNodeFormat)return function(t){var r=e.getExternalModuleNameLiteral(n,t,m,_,l,u),i=e.visitNode(e.firstOrUndefined(t.arguments),w),a=!r||i&&e.isStringLiteral(i)&&i.text===r.text?i:r,o=!!(16384&t.transformFlags);switch(u.module){case e.ModuleKind.AMD:return M(a,o);case e.ModuleKind.UMD:return function(t,r){if(v=!0,e.isSimpleCopiableExpression(t)){var i=e.isGeneratedIdentifier(t)?t:e.isStringLiteral(t)?n.createStringLiteralFromNode(t):e.setEmitFlags(e.setTextRange(n.cloneNode(t),t),1536);return n.createConditionalExpression(n.createIdentifier("__syncRequire"),void 0,L(t),void 0,M(i,r))}var a=n.createTempVariable(c);return n.createComma(n.createAssignment(a,t),n.createConditionalExpression(n.createIdentifier("__syncRequire"),void 0,L(a,!0),void 0,M(a,r)))}(null!=a?a:n.createVoidZero(),o);case e.ModuleKind.CommonJS:default:return L(a)}}(t);break;case 223:if(e.isDestructuringAssignment(t))return function(t,n){if(O(t.left))return e.flattenDestructuringAssignment(t,w,r,0,!n,j);return e.visitEachChild(t,w,r)}(t,i);break;case 221:case 222:return function(t,i){if((45===t.operator||46===t.operator)&&e.isIdentifier(t.operand)&&!e.isGeneratedIdentifier(t.operand)&&!e.isLocalName(t.operand)&&!e.isDeclarationNameOfEnumOrNamespace(t.operand)){var a=$(t.operand);if(a){var o=void 0,s=e.visitNode(t.operand,w,e.isExpression);e.isPrefixUnaryExpression(t)?s=n.updatePrefixUnaryExpression(t,s):(s=n.updatePostfixUnaryExpression(t,s),i||(o=n.createTempVariable(c),s=n.createAssignment(o,s),e.setTextRange(s,t)),s=n.createComma(s,n.cloneNode(t.operand)),e.setTextRange(s,t));for(var u=0,l=a;u<l.length;u++){var _=l[u];x[e.getNodeId(s)]=!0,s=X(_,s),e.setTextRange(s,t)}return o&&(x[e.getNodeId(s)]=!0,s=n.createComma(s,o),e.setTextRange(s,t)),s}}return e.visitEachChild(t,w,r)}(t,i)}return e.visitEachChild(t,w,r)}function w(e){return P(e,!1)}function I(e){return P(e,!0)}function O(t){if(e.isObjectLiteralExpression(t))for(var r=0,n=t.properties;r<n.length;r++){switch((o=n[r]).kind){case 299:if(O(o.initializer))return!0;break;case 300:if(O(o.name))return!0;break;case 301:if(O(o.expression))return!0;break;case 171:case 174:case 175:return!1;default:e.Debug.assertNever(o,"Unhandled object member kind")}}else if(e.isArrayLiteralExpression(t))for(var i=0,a=t.elements;i<a.length;i++){var o=a[i];if(e.isSpreadElement(o)){if(O(o.expression))return!0}else if(O(o))return!0}else if(e.isIdentifier(t))return e.length($(t))>(e.isExportName(t)?1:0);return!1}function M(t,r){var a,o=n.createUniqueName("resolve"),s=n.createUniqueName("reject"),c=[n.createParameterDeclaration(void 0,void 0,o),n.createParameterDeclaration(void 0,void 0,s)],l=n.createBlock([n.createExpressionStatement(n.createCallExpression(n.createIdentifier("require"),void 0,[n.createArrayLiteralExpression([t||n.createOmittedExpression()]),o,s]))]);d>=2?a=n.createArrowFunction(void 0,void 0,c,void 0,void 0,l):(a=n.createFunctionExpression(void 0,void 0,void 0,void 0,c,void 0,l),r&&e.setEmitFlags(a,8));var _=n.createNewExpression(n.createIdentifier("Promise"),void 0,[a]);return e.getESModuleInterop(u)?n.createCallExpression(n.createPropertyAccessExpression(_,n.createIdentifier("then")),void 0,[i().createImportStarCallbackHelper()]):_}function L(t,r){var a,o=!t||e.isSimpleInlineableExpression(t)||r?void 0:n.createTempVariable(c),s=n.createCallExpression(n.createPropertyAccessExpression(n.createIdentifier("Promise"),"resolve"),void 0,[]),l=n.createCallExpression(n.createIdentifier("require"),void 0,o?[o]:t?[t]:[]);e.getESModuleInterop(u)&&(l=i().createImportStarHelper(l)),a=d>=2?n.createArrowFunction(void 0,void 0,[],void 0,void 0,l):n.createFunctionExpression(void 0,void 0,void 0,void 0,[],void 0,n.createBlock([n.createReturnStatement(l)]));var _=n.createCallExpression(n.createPropertyAccessExpression(s,"then"),void 0,[a]);return void 0===o?_:n.createCommaListExpression([n.createAssignment(o,t),_])}function R(t,r){return!e.getESModuleInterop(u)||67108864&e.getEmitFlags(t)?r:e.getImportNeedsImportStarHelper(t)?i().createImportStarHelper(r):e.getImportNeedsImportDefaultHelper(t)?i().createImportDefaultHelper(r):r}function B(t){var r=e.getExternalModuleNameLiteral(n,t,m,_,l,u),i=[];return r&&i.push(r),n.createCallExpression(n.createIdentifier("require"),void 0,i)}function j(t,r,i){var a=$(t);if(a){for(var o=e.isExportName(t)?r:n.createAssignment(t,r),s=0,c=a;s<c.length;s++){var u=c[s];e.setEmitFlags(o,4),o=X(u,o,i)}return o}return n.createAssignment(t,r)}function J(t){return e.isBindingPattern(t.name)?e.flattenDestructuringAssignment(e.visitNode(t,w),void 0,r,0,!1,j):n.createAssignment(e.setTextRange(n.createPropertyAccessExpression(n.createIdentifier("exports"),t.name),t.name),t.initializer?e.visitNode(t.initializer,w):n.createVoidZero())}function z(t){return 0!=(4194304&e.getEmitFlags(t))}function U(e,t){if(y.exportEquals)return e;var r=t.importClause;if(!r)return e;r.name&&(e=H(e,r));var n=r.namedBindings;if(n)switch(n.kind){case 271:e=H(e,n);break;case 272:for(var i=0,a=n.elements;i<a.length;i++){e=H(e,a[i],!0)}}return e}function K(e,t){return y.exportEquals?e:H(e,t)}function V(e,t){if(y.exportEquals)return e;for(var r=0,n=t.declarationList.declarations;r<n.length;r++){e=q(e,n[r])}return e}function q(t,r){if(y.exportEquals)return t;if(e.isBindingPattern(r.name))for(var n=0,i=r.name.elements;n<i.length;n++){var a=i[n];e.isOmittedExpression(a)||(t=q(t,a))}else e.isGeneratedIdentifier(r.name)||(t=H(t,r));return t}function W(t,r){if(y.exportEquals)return t;e.hasSyntacticModifier(r,1)&&(t=G(t,e.hasSyntacticModifier(r,1024)?n.createIdentifier("default"):n.getDeclarationName(r),n.getLocalName(r),r));return r.name&&(t=H(t,r)),t}function H(t,r,i){var a=n.getDeclarationName(r),o=y.exportSpecifiers.get(e.idText(a));if(o)for(var s=0,c=o;s<c.length;s++){var u=c[s];t=G(t,u.name,a,u.name,void 0,i)}return t}function G(t,r,i,a,o,s){return t=e.append(t,function(t,r,i,a,o){var s=e.setTextRange(n.createExpressionStatement(X(t,r,void 0,o)),i);e.startOnNewLine(s),a||e.setEmitFlags(s,1536);return s}(r,i,a,o,s)),t}function Q(){var t;return t=0===d?n.createExpressionStatement(X(n.createIdentifier("__esModule"),n.createTrue())):n.createExpressionStatement(n.createCallExpression(n.createPropertyAccessExpression(n.createIdentifier("Object"),"defineProperty"),void 0,[n.createIdentifier("exports"),n.createStringLiteral("__esModule"),n.createObjectLiteralExpression([n.createPropertyAssignment("value",n.createTrue())])])),e.setEmitFlags(t,1048576),t}function X(t,r,i,a){return e.setTextRange(a&&0!==d?n.createCallExpression(n.createPropertyAccessExpression(n.createIdentifier("Object"),"defineProperty"),void 0,[n.createIdentifier("exports"),n.createStringLiteralFromNode(t),n.createObjectLiteralExpression([n.createPropertyAssignment("enumerable",n.createTrue()),n.createPropertyAssignment("get",n.createFunctionExpression(void 0,void 0,void 0,void 0,[],void 0,n.createBlock([n.createReturnStatement(r)])))])]):n.createAssignment(n.createPropertyAccessExpression(n.createIdentifier("exports"),n.cloneNode(t)),r),i)}function Y(e){switch(e.kind){case 93:case 88:return}return e}function Z(t){var r,i;if(4096&e.getEmitFlags(t)){var a=e.getExternalHelpersModuleName(m);return a?n.createPropertyAccessExpression(a,t):t}if((!e.isGeneratedIdentifier(t)||64&t.autoGenerateFlags)&&!e.isLocalName(t)){var o=l.getReferencedExportContainer(t,e.isExportName(t));if(o&&308===o.kind)return e.setTextRange(n.createPropertyAccessExpression(n.createIdentifier("exports"),n.cloneNode(t)),t);var s=l.getReferencedImportDeclaration(t);if(s){if(e.isImportClause(s))return e.setTextRange(n.createPropertyAccessExpression(n.getGeneratedNameForNode(s.parent),n.createIdentifier("default")),t);if(e.isImportSpecifier(s)){var c=s.propertyName||s.name;return e.setTextRange(n.createPropertyAccessExpression(n.getGeneratedNameForNode((null===(i=null===(r=s.parent)||void 0===r?void 0:r.parent)||void 0===i?void 0:i.parent)||s),n.cloneNode(c)),t)}}}return t}function $(t){if(!e.isGeneratedIdentifier(t)){var r=l.getReferencedImportDeclaration(t)||l.getReferencedValueDeclaration(t);if(r)return y&&y.exportedBindings[e.getOriginalNodeId(r)]}}};var t={name:"typescript:dynamicimport-sync-require",scoped:!0,text:'\n            var __syncRequire = typeof module === "object" && typeof module.exports === "object";'}}(_||(_={})),function(e){e.transformSystemModule=function(t){var r=t.factory,n=t.startLexicalEnvironment,i=t.endLexicalEnvironment,a=t.hoistVariableDeclaration,o=t.getCompilerOptions(),s=t.getEmitResolver(),c=t.getEmitHost(),u=t.onSubstituteNode,l=t.onEmitNode;t.onSubstituteNode=function(t,n){if(function(e){return y&&e.id&&y[e.id]}(n=u(t,n)))return n;if(1===t)return function(t){switch(t.kind){case 79:return function(t){var n,i;if(4096&e.getEmitFlags(t)){var a=e.getExternalHelpersModuleName(_);return a?r.createPropertyAccessExpression(a,t):t}if(!e.isGeneratedIdentifier(t)&&!e.isLocalName(t)){var o=s.getReferencedImportDeclaration(t);if(o){if(e.isImportClause(o))return e.setTextRange(r.createPropertyAccessExpression(r.getGeneratedNameForNode(o.parent),r.createIdentifier("default")),t);if(e.isImportSpecifier(o))return e.setTextRange(r.createPropertyAccessExpression(r.getGeneratedNameForNode((null===(i=null===(n=o.parent)||void 0===n?void 0:n.parent)||void 0===i?void 0:i.parent)||o),r.cloneNode(o.propertyName||o.name)),t)}}return t}(t);case 223:return function(t){if(e.isAssignmentOperator(t.operatorToken.kind)&&e.isIdentifier(t.left)&&!e.isGeneratedIdentifier(t.left)&&!e.isLocalName(t.left)&&!e.isDeclarationNameOfEnumOrNamespace(t.left)){var r=X(t.left);if(r){for(var n=t,i=0,a=r;i<a.length;i++){n=z(a[i],Y(n))}return n}}return t}(t);case 233:return function(t){if(e.isImportMeta(t))return r.createPropertyAccessExpression(f,r.createIdentifier("meta"));return t}(t)}return t}(n);if(4===t)return function(t){if(300===t.kind)return function(t){var n,i,a=t.name;if(!e.isGeneratedIdentifier(a)&&!e.isLocalName(a)){var o=s.getReferencedImportDeclaration(a);if(o){if(e.isImportClause(o))return e.setTextRange(r.createPropertyAssignment(r.cloneNode(a),r.createPropertyAccessExpression(r.getGeneratedNameForNode(o.parent),r.createIdentifier("default"))),t);if(e.isImportSpecifier(o))return e.setTextRange(r.createPropertyAssignment(r.cloneNode(a),r.createPropertyAccessExpression(r.getGeneratedNameForNode((null===(i=null===(n=o.parent)||void 0===n?void 0:n.parent)||void 0===i?void 0:i.parent)||o),r.cloneNode(o.propertyName||o.name))),t)}}return t}(t);return t}(n);return n},t.onEmitNode=function(t,r,n){if(308===r.kind){var i=e.getOriginalNodeId(r);_=r,d=v[i],p=b[i],y=x[i],f=D[i],y&&delete x[i],l(t,r,n),_=void 0,d=void 0,p=void 0,f=void 0,y=void 0}else l(t,r,n)},t.enableSubstitution(79),t.enableSubstitution(300),t.enableSubstitution(223),t.enableSubstitution(233),t.enableEmitNotification(308);var _,d,p,f,g,m,y,v=[],h=[],b=[],x=[],D=[];return e.chainBundle(t,(function(a){if(a.isDeclarationFile||!(e.isEffectiveExternalModule(a,o)||8388608&a.transformFlags))return a;var u=e.getOriginalNodeId(a);_=a,m=a,d=v[u]=e.collectExternalModuleInfo(t,a,s,o),p=r.createUniqueName("exports"),b[u]=p,f=D[u]=r.createUniqueName("context");var l=function(t){for(var n=new e.Map,i=[],a=0,u=t;a<u.length;a++){var l=u[a],d=e.getExternalModuleNameLiteral(r,l,_,c,s,o);if(d){var p=d.text,f=n.get(p);void 0!==f?i[f].externalImports.push(l):(n.set(p,i.length),i.push({name:d,externalImports:[l]}))}}return i}(d.externalImports),h=function(t,a){var s=[];n();var c=e.getStrictOptionValue(o,"alwaysStrict")||!o.noImplicitUseStrict&&e.isExternalModule(_),u=r.copyPrologue(t.statements,s,c,C);s.push(r.createVariableStatement(void 0,r.createVariableDeclarationList([r.createVariableDeclaration("__moduleName",void 0,void 0,r.createLogicalAnd(f,r.createPropertyAccessExpression(f,"id")))]))),e.visitNode(d.externalHelpersImportDeclaration,C,e.isStatement);var l=e.visitNodes(t.statements,C,e.isStatement,u);e.addRange(s,g),e.insertStatementsAfterStandardPrologue(s,i());var p=function(e){if(!d.hasExportStarsToExportValues)return;if(!d.exportedNames&&0===d.exportSpecifiers.size){for(var t=!1,n=0,i=d.externalImports;n<i.length;n++){var a=i[n];if(275===a.kind&&a.exportClause){t=!0;break}}if(!t){var o=S(void 0);return e.push(o),o.name}}var s=[];if(d.exportedNames)for(var c=0,u=d.exportedNames;c<u.length;c++){var l=u[c];"default"!==l.escapedText&&s.push(r.createPropertyAssignment(r.createStringLiteralFromNode(l),r.createTrue()))}var _=r.createUniqueName("exportedNames");e.push(r.createVariableStatement(void 0,r.createVariableDeclarationList([r.createVariableDeclaration(_,void 0,void 0,r.createObjectLiteralExpression(s,!0))])));var p=S(_);return e.push(p),p.name}(s),m=2097152&t.transformFlags?r.createModifiersFromModifierFlags(512):void 0,y=r.createObjectLiteralExpression([r.createPropertyAssignment("setters",T(p,a)),r.createPropertyAssignment("execute",r.createFunctionExpression(m,void 0,void 0,void 0,[],void 0,r.createBlock(l,!0)))],!0);return s.push(r.createReturnStatement(y)),r.createBlock(s,!0)}(a,l),E=r.createFunctionExpression(void 0,void 0,void 0,void 0,[r.createParameterDeclaration(void 0,void 0,p),r.createParameterDeclaration(void 0,void 0,f)],void 0,h),k=e.tryGetModuleNameFromFile(r,a,c,o),N=r.createArrayLiteralExpression(e.map(l,(function(e){return e.name}))),A=e.setEmitFlags(r.updateSourceFile(a,e.setTextRange(r.createNodeArray([r.createExpressionStatement(r.createCallExpression(r.createPropertyAccessExpression(r.createIdentifier("System"),"register"),void 0,k?[k,N,E]:[N,E]))]),a.statements)),1024);e.outFile(o)||e.moveEmitHelpers(A,h,(function(e){return!e.scoped}));y&&(x[u]=y,y=void 0);return _=void 0,d=void 0,p=void 0,f=void 0,g=void 0,m=void 0,A}));function S(t){var n=r.createUniqueName("exportStar"),i=r.createIdentifier("m"),a=r.createIdentifier("n"),o=r.createIdentifier("exports"),s=r.createStrictInequality(a,r.createStringLiteral("default"));return t&&(s=r.createLogicalAnd(s,r.createLogicalNot(r.createCallExpression(r.createPropertyAccessExpression(t,"hasOwnProperty"),void 0,[a])))),r.createFunctionDeclaration(void 0,void 0,n,void 0,[r.createParameterDeclaration(void 0,void 0,i)],void 0,r.createBlock([r.createVariableStatement(void 0,r.createVariableDeclarationList([r.createVariableDeclaration(o,void 0,void 0,r.createObjectLiteralExpression([]))])),r.createForInStatement(r.createVariableDeclarationList([r.createVariableDeclaration(a)]),i,r.createBlock([e.setEmitFlags(r.createIfStatement(s,r.createExpressionStatement(r.createAssignment(r.createElementAccessExpression(o,a),r.createElementAccessExpression(i,a)))),1)])),r.createExpressionStatement(r.createCallExpression(p,void 0,[o]))],!0))}function T(t,n){for(var i=[],a=0,o=n;a<o.length;a++){for(var s=o[a],c=e.forEach(s.externalImports,(function(t){return e.getLocalNameForExternalImport(r,t,_)})),u=c?r.getGeneratedNameForNode(c):r.createUniqueName(""),l=[],d=0,f=s.externalImports;d<f.length;d++){var g=f[d],m=e.getLocalNameForExternalImport(r,g,_);switch(g.kind){case 269:if(!g.importClause)break;case 268:e.Debug.assert(void 0!==m),l.push(r.createExpressionStatement(r.createAssignment(m,u))),e.hasSyntacticModifier(g,1)&&l.push(r.createExpressionStatement(r.createCallExpression(p,void 0,[r.createStringLiteral(e.idText(m)),u])));break;case 275:if(e.Debug.assert(void 0!==m),g.exportClause)if(e.isNamedExports(g.exportClause)){for(var y=[],v=0,h=g.exportClause.elements;v<h.length;v++){var b=h[v];y.push(r.createPropertyAssignment(r.createStringLiteral(e.idText(b.name)),r.createElementAccessExpression(u,r.createStringLiteral(e.idText(b.propertyName||b.name)))))}l.push(r.createExpressionStatement(r.createCallExpression(p,void 0,[r.createObjectLiteralExpression(y,!0)])))}else l.push(r.createExpressionStatement(r.createCallExpression(p,void 0,[r.createStringLiteral(e.idText(g.exportClause.name)),u])));else l.push(r.createExpressionStatement(r.createCallExpression(t,void 0,[u])))}}i.push(r.createFunctionExpression(void 0,void 0,void 0,void 0,[r.createParameterDeclaration(void 0,void 0,u)],void 0,r.createBlock(l,!0)))}return r.createArrayLiteralExpression(i,!0)}function C(t){switch(t.kind){case 269:return function(t){var n;t.importClause&&a(e.getLocalNameForExternalImport(r,t,_));if(w(t)){var i=e.getOriginalNodeId(t);h[i]=I(h[i],t)}else n=I(n,t);return e.singleOrMany(n)}(t);case 268:return function(t){var n;if(e.Debug.assert(e.isExternalModuleImportEqualsDeclaration(t),"import= for internal module references should be handled in an earlier transformer."),a(e.getLocalNameForExternalImport(r,t,_)),w(t)){var i=e.getOriginalNodeId(t);h[i]=O(h[i],t)}else n=O(n,t);return e.singleOrMany(n)}(t);case 275:return function(t){return void e.Debug.assertIsDefined(t)}(t);case 274:return function(t){if(t.isExportEquals)return;var n=e.visitNode(t.expression,W,e.isExpression),i=t.original;if(!i||!w(i))return J(r.createIdentifier("default"),n,!0);var a=e.getOriginalNodeId(t);h[a]=j(h[a],r.createIdentifier("default"),n,!0)}(t);default:return U(t)}}function E(t){if(e.isBindingPattern(t.name))for(var n=0,i=t.name.elements;n<i.length;n++){var o=i[n];e.isOmittedExpression(o)||E(o)}else a(r.cloneNode(t.name))}function k(t){return 0==(2097152&e.getEmitFlags(t))&&(308===m.kind||0==(3&e.getOriginalNode(t).flags))}function N(r,n){var i=n?A:F;return e.isBindingPattern(r.name)?e.flattenDestructuringAssignment(r,W,t,0,!1,i):r.initializer?i(r.name,e.visitNode(r.initializer,W,e.isExpression)):r.name}function A(e,t,r){return P(e,t,r,!0)}function F(e,t,r){return P(e,t,r,!1)}function P(t,n,i,o){return a(r.cloneNode(t)),o?z(t,Y(e.setTextRange(r.createAssignment(t,n),i))):Y(e.setTextRange(r.createAssignment(t,n),i))}function w(t){return 0!=(4194304&e.getEmitFlags(t))}function I(e,t){if(d.exportEquals)return e;var r=t.importClause;if(!r)return e;r.name&&(e=B(e,r));var n=r.namedBindings;if(n)switch(n.kind){case 271:e=B(e,n);break;case 272:for(var i=0,a=n.elements;i<a.length;i++){e=B(e,a[i])}}return e}function O(e,t){return d.exportEquals?e:B(e,t)}function M(e,t,r){if(d.exportEquals)return e;for(var n=0,i=t.declarationList.declarations;n<i.length;n++){var a=i[n];(a.initializer||r)&&(e=L(e,a,r))}return e}function L(t,n,i){if(d.exportEquals)return t;if(e.isBindingPattern(n.name))for(var a=0,o=n.name.elements;a<o.length;a++){var s=o[a];e.isOmittedExpression(s)||(t=L(t,s,i))}else if(!e.isGeneratedIdentifier(n.name)){var c=void 0;i&&(t=j(t,n.name,r.getLocalName(n)),c=e.idText(n.name)),t=B(t,n,c)}return t}function R(t,n){if(d.exportEquals)return t;var i;if(e.hasSyntacticModifier(n,1)){var a=e.hasSyntacticModifier(n,1024)?r.createStringLiteral("default"):n.name;t=j(t,a,r.getLocalName(n)),i=e.getTextOfIdentifierOrLiteral(a)}return n.name&&(t=B(t,n,i)),t}function B(t,n,i){if(d.exportEquals)return t;var a=r.getDeclarationName(n),o=d.exportSpecifiers.get(e.idText(a));if(o)for(var s=0,c=o;s<c.length;s++){var u=c[s];u.name.escapedText!==i&&(t=j(t,u.name,a))}return t}function j(t,r,n,i){return t=e.append(t,J(r,n,i))}function J(t,n,i){var a=r.createExpressionStatement(z(t,n));return e.startOnNewLine(a),i||e.setEmitFlags(a,1536),a}function z(t,n){var i=e.isIdentifier(t)?r.createStringLiteralFromNode(t):t;return e.setEmitFlags(n,1536|e.getEmitFlags(n)),e.setCommentRange(r.createCallExpression(p,void 0,[i,n]),n)}function U(n){switch(n.kind){case 240:return function(t){if(!k(t.declarationList))return e.visitNode(t,W,e.isStatement);for(var n,i,a=e.hasSyntacticModifier(t,1),o=w(t),s=0,c=t.declarationList.declarations;s<c.length;s++){var u=c[s];u.initializer?n=e.append(n,N(u,a&&!o)):E(u)}if(n&&(i=e.append(i,e.setTextRange(r.createExpressionStatement(r.inlineExpressions(n)),t))),o){var l=e.getOriginalNodeId(t);h[l]=M(h[l],t,a)}else i=M(i,t,!1);return e.singleOrMany(i)}(n);case 259:return function(n){if(g=e.hasSyntacticModifier(n,1)?e.append(g,r.updateFunctionDeclaration(n,e.visitNodes(n.modifiers,Q,e.isModifierLike),n.asteriskToken,r.getDeclarationName(n,!0,!0),void 0,e.visitNodes(n.parameters,W,e.isParameterDeclaration),void 0,e.visitNode(n.body,W,e.isBlock))):e.append(g,e.visitEachChild(n,W,t)),w(n)){var i=e.getOriginalNodeId(n);h[i]=R(h[i],n)}else g=R(g,n)}(n);case 260:return function(t){var n,i=r.getLocalName(t);if(a(i),n=e.append(n,e.setTextRange(r.createExpressionStatement(r.createAssignment(i,e.setTextRange(r.createClassExpression(e.visitNodes(t.modifiers,Q,e.isModifierLike),t.name,void 0,e.visitNodes(t.heritageClauses,W,e.isHeritageClause),e.visitNodes(t.members,W,e.isClassElement)),t))),t)),w(t)){var o=e.getOriginalNodeId(t);h[o]=R(h[o],t)}else n=R(n,t);return e.singleOrMany(n)}(n);case 245:return K(n,!0);case 246:return function(n){var i=m;return m=n,n=r.updateForInStatement(n,V(n.initializer),e.visitNode(n.expression,W,e.isExpression),e.visitIterationBody(n.statement,U,t)),m=i,n}(n);case 247:return function(n){var i=m;return m=n,n=r.updateForOfStatement(n,n.awaitModifier,V(n.initializer),e.visitNode(n.expression,W,e.isExpression),e.visitIterationBody(n.statement,U,t)),m=i,n}(n);case 243:return function(n){return r.updateDoStatement(n,e.visitIterationBody(n.statement,U,t),e.visitNode(n.expression,W,e.isExpression))}(n);case 244:return function(n){return r.updateWhileStatement(n,e.visitNode(n.expression,W,e.isExpression),e.visitIterationBody(n.statement,U,t))}(n);case 253:return function(t){return r.updateLabeledStatement(t,t.label,e.visitNode(t.statement,U,e.isStatement,r.liftToBlock))}(n);case 251:return function(t){return r.updateWithStatement(t,e.visitNode(t.expression,W,e.isExpression),e.visitNode(t.statement,U,e.isStatement,r.liftToBlock))}(n);case 252:return function(t){return r.updateSwitchStatement(t,e.visitNode(t.expression,W,e.isExpression),e.visitNode(t.caseBlock,U,e.isCaseBlock))}(n);case 266:return function(t){var n=m;return m=t,t=r.updateCaseBlock(t,e.visitNodes(t.clauses,U,e.isCaseOrDefaultClause)),m=n,t}(n);case 292:return function(t){return r.updateCaseClause(t,e.visitNode(t.expression,W,e.isExpression),e.visitNodes(t.statements,U,e.isStatement))}(n);case 293:case 255:return function(r){return e.visitEachChild(r,U,t)}(n);case 295:return function(t){var n=m;return m=t,t=r.updateCatchClause(t,t.variableDeclaration,e.visitNode(t.block,U,e.isBlock)),m=n,t}(n);case 238:return function(r){var n=m;return m=r,r=e.visitEachChild(r,U,t),m=n,r}(n);case 355:return function(t){if(w(t)&&240===t.original.kind){var r=e.getOriginalNodeId(t),n=e.hasSyntacticModifier(t.original,1);h[r]=M(h[r],t.original,n)}return t}(n);case 356:return function(t){var r=e.getOriginalNodeId(t),n=h[r];if(n)return delete h[r],e.append(n,t);var i=e.getOriginalNode(t);return e.isModuleOrEnumDeclaration(i)?e.append(B(n,i),t):t}(n);default:return W(n)}}function K(n,i){var a=m;return m=n,n=r.updateForStatement(n,e.visitNode(n.initializer,i?V:H,e.isForInitializer),e.visitNode(n.condition,W,e.isExpression),e.visitNode(n.incrementor,H,e.isExpression),e.visitIterationBody(n.statement,i?U:W,t)),m=a,n}function V(t){if(function(t){return e.isVariableDeclarationList(t)&&k(t)}(t)){for(var n=void 0,i=0,a=t.declarations;i<a.length;i++){var o=a[i];n=e.append(n,N(o,!1)),o.initializer||E(o)}return n?r.inlineExpressions(n):r.createOmittedExpression()}return e.visitNode(t,H,e.isExpression)}function q(n,i){if(!(276828160&n.transformFlags))return n;switch(n.kind){case 245:return K(n,!1);case 241:return function(t){return r.updateExpressionStatement(t,e.visitNode(t.expression,H,e.isExpression))}(n);case 214:return function(t,n){return r.updateParenthesizedExpression(t,e.visitNode(t.expression,n?H:W,e.isExpression))}(n,i);case 353:return function(t,n){return r.updatePartiallyEmittedExpression(t,e.visitNode(t.expression,n?H:W,e.isExpression))}(n,i);case 223:if(e.isDestructuringAssignment(n))return function(r,n){if(G(r.left))return e.flattenDestructuringAssignment(r,W,t,0,!n);return e.visitEachChild(r,W,t)}(n,i);break;case 210:if(e.isImportCall(n))return function(t){var n=e.getExternalModuleNameLiteral(r,t,_,c,s,o),i=e.visitNode(e.firstOrUndefined(t.arguments),W),a=!n||i&&e.isStringLiteral(i)&&i.text===n.text?i:n;return r.createCallExpression(r.createPropertyAccessExpression(f,r.createIdentifier("import")),void 0,a?[a]:[])}(n);break;case 221:case 222:return function(n,i){if((45===n.operator||46===n.operator)&&e.isIdentifier(n.operand)&&!e.isGeneratedIdentifier(n.operand)&&!e.isLocalName(n.operand)&&!e.isDeclarationNameOfEnumOrNamespace(n.operand)){var o=X(n.operand);if(o){var s=void 0,c=e.visitNode(n.operand,W,e.isExpression);e.isPrefixUnaryExpression(n)?c=r.updatePrefixUnaryExpression(n,c):(c=r.updatePostfixUnaryExpression(n,c),i||(s=r.createTempVariable(a),c=r.createAssignment(s,c),e.setTextRange(c,n)),c=r.createComma(c,r.cloneNode(n.operand)),e.setTextRange(c,n));for(var u=0,l=o;u<l.length;u++){c=z(l[u],Y(c))}return s&&(c=r.createComma(c,s),e.setTextRange(c,n)),c}}return e.visitEachChild(n,W,t)}(n,i)}return e.visitEachChild(n,W,t)}function W(e){return q(e,!1)}function H(e){return q(e,!0)}function G(t){if(e.isAssignmentExpression(t,!0))return G(t.left);if(e.isSpreadElement(t))return G(t.expression);if(e.isObjectLiteralExpression(t))return e.some(t.properties,G);if(e.isArrayLiteralExpression(t))return e.some(t.elements,G);if(e.isShorthandPropertyAssignment(t))return G(t.name);if(e.isPropertyAssignment(t))return G(t.initializer);if(e.isIdentifier(t)){var r=s.getReferencedExportContainer(t);return void 0!==r&&308===r.kind}return!1}function Q(e){switch(e.kind){case 93:case 88:return}return e}function X(t){var n;if(!e.isGeneratedIdentifier(t)){var i=s.getReferencedImportDeclaration(t)||s.getReferencedValueDeclaration(t);if(i){var a=s.getReferencedExportContainer(t,!1);a&&308===a.kind&&(n=e.append(n,r.getDeclarationName(i))),n=e.addRange(n,d&&d.exportedBindings[e.getOriginalNodeId(i)])}}return n}function Y(t){return void 0===y&&(y=[]),y[e.getNodeId(t)]=!0,t}}}(_||(_={})),function(e){e.transformECMAScriptModule=function(t){var r,n,i,o=t.factory,s=t.getEmitHelperFactory,c=t.getEmitHost(),u=t.getEmitResolver(),l=t.getCompilerOptions(),_=e.getEmitScriptTarget(l),d=t.onEmitNode,p=t.onSubstituteNode;return t.onEmitNode=function(t,n,i){e.isSourceFile(n)?((e.isExternalModule(n)||l.isolatedModules)&&l.importHelpers&&(r=new e.Map),d(t,n,i),r=void 0):d(t,n,i)},t.onSubstituteNode=function(t,n){if(n=p(t,n),r&&e.isIdentifier(n)&&4096&e.getEmitFlags(n))return function(t){var n=e.idText(t),i=r.get(n);i||r.set(n,i=o.createUniqueName(n,48));return i}(n);return n},t.enableEmitNotification(308),t.enableSubstitution(79),e.chainBundle(t,(function(r){if(r.isDeclarationFile)return r;if(e.isExternalModule(r)||l.isolatedModules){n=r,i=void 0;var c=function(r){var n=e.createExternalHelpersImportDeclarationIfNeeded(o,s(),r,l);if(n){var i=[],a=o.copyPrologue(r.statements,i);return e.append(i,n),e.addRange(i,e.visitNodes(r.statements,f,e.isStatement,a)),o.updateSourceFile(r,e.setTextRange(o.createNodeArray(i),r.statements))}return e.visitEachChild(r,f,t)}(r);return n=void 0,i&&(c=o.updateSourceFile(c,e.setTextRange(o.createNodeArray(e.insertStatementsAfterCustomPrologue(c.statements.slice(),i)),c.statements))),!e.isExternalModule(r)||e.some(c.statements,e.isExternalModuleIndicator)?c:o.updateSourceFile(c,e.setTextRange(o.createNodeArray(a(a([],c.statements,!0),[e.createEmptyExports(o)],!1)),c.statements))}return r}));function f(t){switch(t.kind){case 268:return e.getEmitModuleKind(l)>=e.ModuleKind.Node16?function(t){var r;return e.Debug.assert(e.isExternalModuleImportEqualsDeclaration(t),"import= for internal module references should be handled in an earlier transformer."),r=e.append(r,e.setOriginalNode(e.setTextRange(o.createVariableStatement(void 0,o.createVariableDeclarationList([o.createVariableDeclaration(o.cloneNode(t.name),void 0,void 0,g(t))],_>=2?2:0)),t),t)),r=function(t,r){e.hasSyntacticModifier(r,1)&&(t=e.append(t,o.createExportDeclaration(void 0,r.isTypeOnly,o.createNamedExports([o.createExportSpecifier(!1,void 0,e.idText(r.name))]))));return t}(r,t),e.singleOrMany(r)}(t):void 0;case 274:return function(e){return e.isExportEquals?void 0:e}(t);case 275:return function(t){if(void 0!==l.module&&l.module>e.ModuleKind.ES2015)return t;if(!t.exportClause||!e.isNamespaceExport(t.exportClause)||!t.moduleSpecifier)return t;var r=t.exportClause.name,n=o.getGeneratedNameForNode(r),i=o.createImportDeclaration(void 0,o.createImportClause(!1,void 0,o.createNamespaceImport(n)),t.moduleSpecifier,t.assertClause);e.setOriginalNode(i,t.exportClause);var a=e.isExportNamespaceAsDefaultDeclaration(t)?o.createExportDefault(n):o.createExportDeclaration(void 0,!1,o.createNamedExports([o.createExportSpecifier(!1,n,r)]));return e.setOriginalNode(a,t),[i,a]}(t)}return t}function g(t){var r=e.getExternalModuleNameLiteral(o,t,e.Debug.checkDefined(n),c,u,l),a=[];if(r&&a.push(r),!i){var s=o.createUniqueName("_createRequire",48),d=o.createImportDeclaration(void 0,o.createImportClause(!1,void 0,o.createNamedImports([o.createImportSpecifier(!1,o.createIdentifier("createRequire"),s)])),o.createStringLiteral("module")),p=o.createUniqueName("__require",48),f=o.createVariableStatement(void 0,o.createVariableDeclarationList([o.createVariableDeclaration(p,void 0,void 0,o.createCallExpression(o.cloneNode(s),void 0,[o.createPropertyAccessExpression(o.createMetaProperty(100,o.createIdentifier("meta")),o.createIdentifier("url"))]))],_>=2?2:0));i=[d,f]}var g=i[1].declarationList.declarations[0].name;return e.Debug.assertNode(g,e.isIdentifier),o.createCallExpression(o.cloneNode(g),void 0,a)}}}(_||(_={})),function(e){e.transformNodeModule=function(t){var r=t.onSubstituteNode,n=t.onEmitNode,i=e.transformECMAScriptModule(t),a=t.onSubstituteNode,o=t.onEmitNode;t.onSubstituteNode=r,t.onEmitNode=n;var s,c=e.transformModule(t),u=t.onSubstituteNode,l=t.onEmitNode;return t.onSubstituteNode=function(t,n){return e.isSourceFile(n)?(s=n,r(t,n)):s?s.impliedNodeFormat===e.ModuleKind.ESNext?a(t,n):u(t,n):r(t,n)},t.onEmitNode=function(t,r,i){e.isSourceFile(r)&&(s=r);if(!s)return n(t,r,i);if(s.impliedNodeFormat===e.ModuleKind.ESNext)return o(t,r,i);return l(t,r,i)},t.enableSubstitution(308),t.enableEmitNotification(308),function(r){return 308===r.kind?_(r):function(r){return t.factory.createBundle(e.map(r.sourceFiles,_),r.prepends)}(r)};function _(t){if(t.isDeclarationFile)return t;s=t;var r=(t.impliedNodeFormat===e.ModuleKind.ESNext?i:c)(t);return s=void 0,e.Debug.assert(e.isSourceFile(r)),r}}}(_||(_={})),function(e){function t(t){return e.isVariableDeclaration(t)||e.isPropertyDeclaration(t)||e.isPropertySignature(t)||e.isPropertyAccessExpression(t)||e.isBindingElement(t)||e.isConstructorDeclaration(t)?r:e.isSetAccessor(t)||e.isGetAccessor(t)?function(r){var n;n=175===t.kind?e.isStatic(t)?r.errorModuleName?e.Diagnostics.Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2:e.Diagnostics.Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1:r.errorModuleName?e.Diagnostics.Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2:e.Diagnostics.Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1:e.isStatic(t)?r.errorModuleName?2===r.accessibility?e.Diagnostics.Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:e.Diagnostics.Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2:e.Diagnostics.Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1:r.errorModuleName?2===r.accessibility?e.Diagnostics.Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:e.Diagnostics.Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2:e.Diagnostics.Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1;return{diagnosticMessage:n,errorNode:t.name,typeName:t.name}}:e.isConstructSignatureDeclaration(t)||e.isCallSignatureDeclaration(t)||e.isMethodDeclaration(t)||e.isMethodSignature(t)||e.isFunctionDeclaration(t)||e.isIndexSignatureDeclaration(t)?function(r){var n;switch(t.kind){case 177:n=r.errorModuleName?e.Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1:e.Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0;break;case 176:n=r.errorModuleName?e.Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1:e.Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0;break;case 178:n=r.errorModuleName?e.Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1:e.Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0;break;case 171:case 170:n=e.isStatic(t)?r.errorModuleName?2===r.accessibility?e.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named:e.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1:e.Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0:260===t.parent.kind?r.errorModuleName?2===r.accessibility?e.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named:e.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1:e.Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0:r.errorModuleName?e.Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1:e.Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0;break;case 259:n=r.errorModuleName?2===r.accessibility?e.Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named:e.Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1:e.Diagnostics.Return_type_of_exported_function_has_or_is_using_private_name_0;break;default:return e.Debug.fail("This is unknown kind for signature: "+t.kind)}return{diagnosticMessage:n,errorNode:t.name||t}}:e.isParameter(t)?e.isParameterPropertyDeclaration(t,t.parent)&&e.hasSyntacticModifier(t.parent,8)?r:function(r){var n=function(r){switch(t.parent.kind){case 173:return r.errorModuleName?2===r.accessibility?e.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:e.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2:e.Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1;case 177:case 182:return r.errorModuleName?e.Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2:e.Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1;case 176:return r.errorModuleName?e.Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2:e.Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1;case 178:return r.errorModuleName?e.Diagnostics.Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2:e.Diagnostics.Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1;case 171:case 170:return e.isStatic(t.parent)?r.errorModuleName?2===r.accessibility?e.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:e.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2:e.Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1:260===t.parent.parent.kind?r.errorModuleName?2===r.accessibility?e.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:e.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2:e.Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1:r.errorModuleName?e.Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2:e.Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1;case 259:case 181:return r.errorModuleName?2===r.accessibility?e.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:e.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2:e.Diagnostics.Parameter_0_of_exported_function_has_or_is_using_private_name_1;case 175:case 174:return r.errorModuleName?2===r.accessibility?e.Diagnostics.Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:e.Diagnostics.Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2:e.Diagnostics.Parameter_0_of_accessor_has_or_is_using_private_name_1;default:return e.Debug.fail("Unknown parent for parameter: ".concat(e.Debug.formatSyntaxKind(t.parent.kind)))}}(r);return void 0!==n?{diagnosticMessage:n,errorNode:t,typeName:t.name}:void 0}:e.isTypeParameterDeclaration(t)?function(){var r;switch(t.parent.kind){case 260:r=e.Diagnostics.Type_parameter_0_of_exported_class_has_or_is_using_private_name_1;break;case 261:r=e.Diagnostics.Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1;break;case 197:r=e.Diagnostics.Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1;break;case 182:case 177:r=e.Diagnostics.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1;break;case 176:r=e.Diagnostics.Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1;break;case 171:case 170:r=e.isStatic(t.parent)?e.Diagnostics.Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1:260===t.parent.parent.kind?e.Diagnostics.Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1:e.Diagnostics.Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1;break;case 181:case 259:r=e.Diagnostics.Type_parameter_0_of_exported_function_has_or_is_using_private_name_1;break;case 262:r=e.Diagnostics.Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1;break;default:return e.Debug.fail("This is unknown parent for type parameter: "+t.parent.kind)}return{diagnosticMessage:r,errorNode:t,typeName:t.name}}:e.isExpressionWithTypeArguments(t)?function(){var r;r=e.isClassDeclaration(t.parent.parent)?e.isHeritageClause(t.parent)&&117===t.parent.token?e.Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_private_name_1:t.parent.parent.name?e.Diagnostics.extends_clause_of_exported_class_0_has_or_is_using_private_name_1:e.Diagnostics.extends_clause_of_exported_class_has_or_is_using_private_name_0:e.Diagnostics.extends_clause_of_exported_interface_0_has_or_is_using_private_name_1;return{diagnosticMessage:r,errorNode:t,typeName:e.getNameOfDeclaration(t.parent.parent)}}:e.isImportEqualsDeclaration(t)?function(){return{diagnosticMessage:e.Diagnostics.Import_declaration_0_is_using_private_name_1,errorNode:t,typeName:t.name}}:e.isTypeAliasDeclaration(t)||e.isJSDocTypeAlias(t)?function(r){return{diagnosticMessage:r.errorModuleName?e.Diagnostics.Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2:e.Diagnostics.Exported_type_alias_0_has_or_is_using_private_name_1,errorNode:e.isJSDocTypeAlias(t)?e.Debug.checkDefined(t.typeExpression):t.type,typeName:e.isJSDocTypeAlias(t)?e.getNameOfDeclaration(t):t.name}}:e.Debug.assertNever(t,"Attempted to set a declaration diagnostic context for unhandled node kind: ".concat(e.Debug.formatSyntaxKind(t.kind)));function r(r){var n=function(r){return 257===t.kind||205===t.kind?r.errorModuleName?2===r.accessibility?e.Diagnostics.Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:e.Diagnostics.Exported_variable_0_has_or_is_using_name_1_from_private_module_2:e.Diagnostics.Exported_variable_0_has_or_is_using_private_name_1:169===t.kind||208===t.kind||168===t.kind||166===t.kind&&e.hasSyntacticModifier(t.parent,8)?e.isStatic(t)?r.errorModuleName?2===r.accessibility?e.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:e.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2:e.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_private_name_1:260===t.parent.kind||166===t.kind?r.errorModuleName?2===r.accessibility?e.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:e.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2:e.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_private_name_1:r.errorModuleName?e.Diagnostics.Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2:e.Diagnostics.Property_0_of_exported_interface_has_or_is_using_private_name_1:void 0}(r);return void 0!==n?{diagnosticMessage:n,errorNode:t,typeName:t.name}:void 0}}e.canProduceDiagnostics=function(t){return e.isVariableDeclaration(t)||e.isPropertyDeclaration(t)||e.isPropertySignature(t)||e.isBindingElement(t)||e.isSetAccessor(t)||e.isGetAccessor(t)||e.isConstructSignatureDeclaration(t)||e.isCallSignatureDeclaration(t)||e.isMethodDeclaration(t)||e.isMethodSignature(t)||e.isFunctionDeclaration(t)||e.isParameter(t)||e.isTypeParameterDeclaration(t)||e.isExpressionWithTypeArguments(t)||e.isImportEqualsDeclaration(t)||e.isTypeAliasDeclaration(t)||e.isConstructorDeclaration(t)||e.isIndexSignatureDeclaration(t)||e.isPropertyAccessExpression(t)||e.isJSDocTypeAlias(t)},e.createGetSymbolAccessibilityDiagnosticForNodeName=function(r){return e.isSetAccessor(r)||e.isGetAccessor(r)?function(t){var n=function(t){return e.isStatic(r)?t.errorModuleName?2===t.accessibility?e.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:e.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2:e.Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_private_name_1:260===r.parent.kind?t.errorModuleName?2===t.accessibility?e.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:e.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2:e.Diagnostics.Public_property_0_of_exported_class_has_or_is_using_private_name_1:t.errorModuleName?e.Diagnostics.Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2:e.Diagnostics.Property_0_of_exported_interface_has_or_is_using_private_name_1}(t);return void 0!==n?{diagnosticMessage:n,errorNode:r,typeName:r.name}:void 0}:e.isMethodSignature(r)||e.isMethodDeclaration(r)?function(t){var n=function(t){return e.isStatic(r)?t.errorModuleName?2===t.accessibility?e.Diagnostics.Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:e.Diagnostics.Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2:e.Diagnostics.Public_static_method_0_of_exported_class_has_or_is_using_private_name_1:260===r.parent.kind?t.errorModuleName?2===t.accessibility?e.Diagnostics.Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named:e.Diagnostics.Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2:e.Diagnostics.Public_method_0_of_exported_class_has_or_is_using_private_name_1:t.errorModuleName?e.Diagnostics.Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2:e.Diagnostics.Method_0_of_exported_interface_has_or_is_using_private_name_1}(t);return void 0!==n?{diagnosticMessage:n,errorNode:r,typeName:r.name}:void 0}:t(r)},e.createGetSymbolAccessibilityDiagnosticForNode=t}(_||(_={})),function(e){function t(t,r){var n=r.text.substring(t.pos,t.end);return e.stringContains(n,"@internal")}function r(r,n){var i=e.getParseTreeNode(r);if(i&&166===i.kind){var a=i.parent.parameters.indexOf(i),o=a>0?i.parent.parameters[a-1]:void 0,s=n.text,c=o?e.concatenate(e.getTrailingCommentRanges(s,e.skipTrivia(s,o.end+1,!1,!0)),e.getLeadingCommentRanges(s,r.pos)):e.getTrailingCommentRanges(s,e.skipTrivia(s,r.pos,!1,!0));return c&&c.length&&t(e.last(c),n)}var u=i&&e.getLeadingCommentRangesOfNode(i,n);return!!e.forEach(u,(function(e){return t(e,n)}))}e.getDeclarationDiagnostics=function(t,r,n){var a=t.getCompilerOptions();return e.transformNodes(r,t,e.factory,a,n?[n]:e.filter(t.getSourceFiles(),e.isSourceFileNotJson),[i],!1).diagnostics},e.isInternalDeclaration=r;var n=531469;function i(t){var i,u,l,_,d,p,f,g,m,y,v,h,b=function(){return e.Debug.fail("Diagnostic emitted without context")},x=b,D=!0,S=!1,T=!1,C=!1,E=!1,k=t.factory,N=t.getEmitHost(),A={trackSymbol:function(e,t,r){if(262144&e.flags)return!1;var n=M(F.isSymbolAccessible(e,t,r,!0));return O(F.getTypeReferenceDirectivesForSymbol(e,r)),n},reportInaccessibleThisError:function(){(f||g)&&t.addDiagnostic(e.createDiagnosticForNode(f||g,e.Diagnostics.The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary,L(),"this"))},reportInaccessibleUniqueSymbolError:function(){(f||g)&&t.addDiagnostic(e.createDiagnosticForNode(f||g,e.Diagnostics.The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary,L(),"unique symbol"))},reportCyclicStructureError:function(){(f||g)&&t.addDiagnostic(e.createDiagnosticForNode(f||g,e.Diagnostics.The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialized_A_type_annotation_is_necessary,L()))},reportPrivateInBaseOfClassExpression:function(r){(f||g)&&t.addDiagnostic(e.createDiagnosticForNode(f||g,e.Diagnostics.Property_0_of_exported_class_expression_may_not_be_private_or_protected,r))},reportLikelyUnsafeImportRequiredError:function(r){(f||g)&&t.addDiagnostic(e.createDiagnosticForNode(f||g,e.Diagnostics.The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_annotation_is_necessary,L(),r))},reportTruncationError:function(){(f||g)&&t.addDiagnostic(e.createDiagnosticForNode(f||g,e.Diagnostics.The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_type_annotation_is_needed))},moduleResolverHost:N,trackReferencedAmbientModule:function(t,r){var n=F.getTypeReferenceDirectivesForSymbol(r,67108863);if(e.length(n))return O(n);var i=e.getSourceFileOfNode(t);y.set(e.getOriginalNodeId(i),i)},trackExternalModuleSymbolOfImportTypeNode:function(e){S||(p||(p=[])).push(e)},reportNonlocalAugmentation:function(r,n,i){var a,o=null===(a=n.declarations)||void 0===a?void 0:a.find((function(t){return e.getSourceFileOfNode(t)===r})),s=e.filter(i.declarations,(function(t){return e.getSourceFileOfNode(t)!==r}));if(o&&s)for(var c=0,u=s;c<u.length;c++){var l=u[c];t.addDiagnostic(e.addRelatedInfo(e.createDiagnosticForNode(l,e.Diagnostics.Declaration_augments_declaration_in_another_file_This_cannot_be_serialized),e.createDiagnosticForNode(o,e.Diagnostics.This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_file)))}},reportNonSerializableProperty:function(r){(f||g)&&t.addDiagnostic(e.createDiagnosticForNode(f||g,e.Diagnostics.The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized,r))},reportImportTypeNodeResolutionModeOverride:function(){e.isNightly()||!f&&!g||t.addDiagnostic(e.createDiagnosticForNode(f||g,e.Diagnostics.The_type_of_this_expression_cannot_be_named_without_a_resolution_mode_assertion_which_is_an_unstable_feature_Use_nightly_TypeScript_to_silence_this_error_Try_updating_with_npm_install_D_typescript_next))}},F=t.getEmitResolver(),P=t.getCompilerOptions(),w=P.noResolve,I=P.stripInternal;return function(r){if(308===r.kind&&r.isDeclarationFile)return r;if(309===r.kind){S=!0,y=new e.Map,v=new e.Map;var n=!1,s=k.createBundle(e.map(r.sourceFiles,(function(r){if(!r.isDeclarationFile){if(n=n||r.hasNoDefaultLib,m=r,i=r,l=void 0,d=!1,_=new e.Map,x=b,C=!1,E=!1,B(r,y),j(r,v),e.isExternalOrCommonJsModule(r)||e.isJsonSourceFile(r)){T=!1,D=!1;var a=e.isSourceFileJS(r)?k.createNodeArray(R(r,!0)):e.visitNodes(r.statements,ne);return k.updateSourceFile(r,[k.createModuleDeclaration([k.createModifier(136)],k.createStringLiteral(e.getResolvedExternalModuleName(t.getEmitHost(),r)),k.createModuleBlock(e.setTextRange(k.createNodeArray(te(a)),r.statements)))],!0,[],[],!1,[])}D=!0;var o=e.isSourceFileJS(r)?k.createNodeArray(R(r)):e.visitNodes(r.statements,ne);return k.updateSourceFile(r,te(o),!0,[],[],!1,[])}})),e.mapDefined(r.prepends,(function(t){if(311===t.kind){var r=e.createUnparsedSourceFile(t,"dts",I);return n=n||!!r.hasNoDefaultLib,B(r,y),O(e.map(r.typeReferenceDirectives,(function(e){return[e.fileName,e.resolutionMode]}))),j(r,v),r}return t})));s.syntheticFileReferences=[],s.syntheticTypeReferences=z(),s.syntheticLibReferences=J(),s.hasNoDefaultLib=n;var c=e.getDirectoryPath(e.normalizeSlashes(e.getOutputPathsFor(r,N,!0).declarationFilePath)),f=K(s.syntheticFileReferences,c);return y.forEach(f),s}D=!0,C=!1,E=!1,i=r,m=r,x=b,S=!1,T=!1,d=!1,l=void 0,_=new e.Map,u=void 0,y=B(m,new e.Map),v=j(m,new e.Map);var g,A=[],F=e.getDirectoryPath(e.normalizeSlashes(e.getOutputPathsFor(r,N,!0).declarationFilePath)),w=K(A,F);if(e.isSourceFileJS(m))g=k.createNodeArray(R(r)),y.forEach(w),h=e.filter(g,e.isAnyImportSyntax);else{var M=e.visitNodes(r.statements,ne);g=e.setTextRange(k.createNodeArray(te(M)),r.statements),y.forEach(w),h=e.filter(g,e.isAnyImportSyntax),e.isExternalModule(r)&&(!T||C&&!E)&&(g=e.setTextRange(k.createNodeArray(a(a([],g,!0),[e.createEmptyExports(k)],!1)),g))}var L=k.updateSourceFile(r,g,!0,A,z(),r.hasNoDefaultLib,J());return L.exportedModulesFromDeclarationEmit=p,L;function J(){return e.map(e.arrayFrom(v.keys()),(function(e){return{fileName:e,pos:-1,end:-1}}))}function z(){return u?e.mapDefined(e.arrayFrom(u.keys()),U):[]}function U(t){var r=t[0],n=t[1];if(h)for(var i=0,a=h;i<a.length;i++){var s=a[i];if(e.isImportEqualsDeclaration(s)&&e.isExternalModuleReference(s.moduleReference)){var c=s.moduleReference.expression;if(e.isStringLiteralLike(c)&&c.text===r)return}else if(e.isImportDeclaration(s)&&e.isStringLiteral(s.moduleSpecifier)&&s.moduleSpecifier.text===r)return}return o({fileName:r,pos:-1,end:-1},n?{resolutionMode:n}:void 0)}function K(t,n){return function(i){var a;if(i.isDeclarationFile)a=i.fileName;else{if(S&&e.contains(r.sourceFiles,i))return;var o=e.getOutputPathsFor(i,N,!0);a=o.declarationFilePath||o.jsFilePath||i.fileName}if(a){var s=e.moduleSpecifiers.getModuleSpecifier(P,m,e.toPath(n,N.getCurrentDirectory(),N.getCanonicalFileName),e.toPath(a,N.getCurrentDirectory(),N.getCanonicalFileName),N);if(!e.pathIsRelative(s))return void O([[s,void 0]]);var c=e.getRelativePathToDirectoryOrUrl(n,a,N.getCurrentDirectory(),N.getCanonicalFileName,!1);if(e.startsWith(c,"./")&&e.hasExtension(c)&&(c=c.substring(2)),e.startsWith(c,"node_modules/")||e.pathContainsNodeModules(c))return;t.push({pos:-1,end:-1,fileName:c})}}}};function O(t){if(t){u=u||new e.Set;for(var r=0,n=t;r<n.length;r++){var i=n[r];u.add(i)}}}function M(r){if(0===r.accessibility){if(r&&r.aliasesToMakeVisible)if(l)for(var n=0,i=r.aliasesToMakeVisible;n<i.length;n++){var a=i[n];e.pushIfUnique(l,a)}else l=r.aliasesToMakeVisible}else{var o=x(r);if(o)return o.typeName?t.addDiagnostic(e.createDiagnosticForNode(r.errorNode||o.errorNode,o.diagnosticMessage,e.getTextOfNode(o.typeName),r.errorSymbolName,r.errorModuleName)):t.addDiagnostic(e.createDiagnosticForNode(r.errorNode||o.errorNode,o.diagnosticMessage,r.errorSymbolName,r.errorModuleName)),!0}return!1}function L(){return f?e.declarationNameToString(f):g&&e.getNameOfDeclaration(g)?e.declarationNameToString(e.getNameOfDeclaration(g)):g&&e.isExportAssignment(g)?g.isExportEquals?"export=":"default":"(Missing)"}function R(t,r){var i=x;x=function(r){return r.errorNode&&e.canProduceDiagnostics(r.errorNode)?e.createGetSymbolAccessibilityDiagnosticForNode(r.errorNode)(r):{diagnosticMessage:r.errorModuleName?e.Diagnostics.Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotation_may_unblock_declaration_emit:e.Diagnostics.Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_declaration_emit,errorNode:r.errorNode||t}};var a=F.getDeclarationStatementsForSourceFile(t,n,A,r);return x=i,a}function B(t,r){return w||!e.isUnparsedSource(t)&&e.isSourceFileJS(t)||e.forEach(t.referencedFiles,(function(n){var i=N.getSourceFileFromReference(t,n);i&&r.set(e.getOriginalNodeId(i),i)})),r}function j(t,r){return e.forEach(t.libReferenceDirectives,(function(t){N.getLibFileFromReference(t)&&r.set(e.toFileNameLowerCase(t.fileName),!0)})),r}function J(t){return 79===t.kind?t:204===t.kind?k.updateArrayBindingPattern(t,e.visitNodes(t.elements,r)):k.updateObjectBindingPattern(t,e.visitNodes(t.elements,r));function r(t){return 229===t.kind?t:t.propertyName&&e.isIdentifier(t.propertyName)&&e.isIdentifier(t.name)&&!t.symbol.isReferenced?k.updateBindingElement(t,t.dotDotDotToken,void 0,t.propertyName,U(t)?t.initializer:void 0):k.updateBindingElement(t,t.dotDotDotToken,t.propertyName,J(t.name),U(t)?t.initializer:void 0)}}function z(t,r,n){var i;d||(i=x,x=e.createGetSymbolAccessibilityDiagnosticForNode(t));var a=k.updateParameterDeclaration(t,function(t,r,n){return e.factory.createModifiersFromModifierFlags(s(t,r,n))}(t,r),t.dotDotDotToken,J(t.name),F.isOptionalParameter(t)?t.questionToken||k.createToken(57):void 0,V(t,n||t.type,!0),K(t));return d||(x=i),a}function U(t){return function(t){switch(t.kind){case 169:case 168:return!e.hasEffectiveModifier(t,8);case 166:case 257:return!0}return!1}(t)&&F.isLiteralConstDeclaration(e.getParseTreeNode(t))}function K(t){if(U(t))return F.createLiteralConstValue(e.getParseTreeNode(t),A)}function V(t,r,a){if((a||!e.hasEffectiveModifier(t,8))&&!U(t)){var o,s=166===t.kind&&(F.isRequiredInitializedParameter(t)||F.isOptionalUninitializedParameterProperty(t));return r&&!s?e.visitNode(r,re):e.getParseTreeNode(t)?175===t.kind?k.createKeywordTypeNode(131):(f=t.name,d||(o=x,x=e.createGetSymbolAccessibilityDiagnosticForNode(t)),257===t.kind||205===t.kind?c(F.createTypeOfDeclaration(t,i,n,A)):166===t.kind||169===t.kind||168===t.kind?e.isPropertySignature(t)||!t.initializer?c(F.createTypeOfDeclaration(t,i,n,A,s)):c(F.createTypeOfDeclaration(t,i,n,A,s)||F.createTypeOfExpression(t.initializer,i,n,A)):c(F.createReturnTypeOfSignatureDeclaration(t,i,n,A))):r?e.visitNode(r,re):k.createKeywordTypeNode(131)}function c(e){return f=void 0,d||(x=o),e||k.createKeywordTypeNode(131)}}function q(t){switch((t=e.getParseTreeNode(t)).kind){case 259:case 264:case 261:case 260:case 262:case 263:return!F.isDeclarationVisible(t);case 257:return!W(t);case 268:case 269:case 275:case 274:return!1;case 172:return!0}return!1}function W(t){return!e.isOmittedExpression(t)&&(e.isBindingPattern(t.name)?e.some(t.name.elements,W):F.isDeclarationVisible(t))}function H(t,r,n){if(!e.hasEffectiveModifier(t,8)){var i=e.map(r,(function(e){return z(e,n)}));if(i)return k.createNodeArray(i,r.hasTrailingComma)}}function G(t,r){var n;if(!r){var i=e.getThisParameter(t);i&&(n=[z(i)])}if(e.isSetAccessorDeclaration(t)){var a=void 0;if(!r){var o=e.getSetAccessorValueParameter(t);if(o)a=z(o,void 0,le(t,F.getAllAccessorDeclarations(t)))}a||(a=k.createParameterDeclaration(void 0,void 0,"value")),n=e.append(n,a)}return k.createNodeArray(n||e.emptyArray)}function Q(t,r){return e.hasEffectiveModifier(t,8)?void 0:e.visitNodes(r,re)}function X(t){return e.isSourceFile(t)||e.isTypeAliasDeclaration(t)||e.isModuleDeclaration(t)||e.isClassDeclaration(t)||e.isInterfaceDeclaration(t)||e.isFunctionLike(t)||e.isIndexSignatureDeclaration(t)||e.isMappedTypeNode(t)}function Y(e,t){M(F.isEntityNameVisible(e,t)),O(F.getTypeReferenceDirectivesForEntityName(e))}function Z(t,r){return e.hasJSDocNodes(t)&&e.hasJSDocNodes(r)&&(t.jsDoc=r.jsDoc),e.setCommentRange(t,e.getCommentRange(r))}function $(r,n){if(n){if(T=T||264!==r.kind&&202!==r.kind,e.isStringLiteralLike(n))if(S){var i=e.getExternalModuleNameFromDeclaration(t.getEmitHost(),F,r);if(i)return k.createStringLiteral(i)}else{var a=F.getSymbolOfExternalModuleSpecifier(n);a&&(p||(p=[])).push(a)}return n}}function ee(r){if(void 0!==e.getResolutionModeOverrideForClause(r))return e.isNightly()||t.addDiagnostic(e.createDiagnosticForNode(r,e.Diagnostics.resolution_mode_assertions_are_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_with_npm_install_D_typescript_next)),r}function te(t){for(;e.length(l);){var r=l.shift();if(!e.isLateVisibilityPaintedStatement(r))return e.Debug.fail("Late replaced statement was found which is not handled by the declaration transformer!: ".concat(e.Debug.formatSyntaxKind(r.kind)));var n=D;D=r.parent&&e.isSourceFile(r.parent)&&!(e.isExternalModule(r.parent)&&S);var i=ae(r);D=n,_.set(e.getOriginalNodeId(r),i)}return e.visitNodes(t,(function(t){if(e.isLateVisibilityPaintedStatement(t)){var r=e.getOriginalNodeId(t);if(_.has(r)){var n=_.get(r);return _.delete(r),n&&((e.isArray(n)?e.some(n,e.needsScopeMarker):e.needsScopeMarker(n))&&(C=!0),e.isSourceFile(t.parent)&&(e.isArray(n)?e.some(n,e.isExternalModuleIndicator):e.isExternalModuleIndicator(n))&&(T=!0)),n}}return t}))}function re(r){if(!se(r)){if(e.isDeclaration(r)){if(q(r))return;if(e.hasDynamicName(r)&&!F.isLateBound(e.getParseTreeNode(r)))return}if(!(e.isFunctionLike(r)&&F.isImplementationOfOverload(r)||e.isSemicolonClassElement(r))){var n;X(r)&&(n=i,i=r);var a=x,o=e.canProduceDiagnostics(r),s=d,c=(184===r.kind||197===r.kind)&&262!==r.parent.kind;if((e.isMethodDeclaration(r)||e.isMethodSignature(r))&&e.hasEffectiveModifier(r,8)){if(r.symbol&&r.symbol.declarations&&r.symbol.declarations[0]!==r)return;return h(k.createPropertyDeclaration(ue(r),r.name,void 0,void 0,void 0))}if(o&&!d&&(x=e.createGetSymbolAccessibilityDiagnosticForNode(r)),e.isTypeQueryNode(r)&&Y(r.exprName,i),c&&(d=!0),function(e){switch(e.kind){case 177:case 173:case 171:case 174:case 175:case 169:case 168:case 170:case 176:case 178:case 257:case 165:case 230:case 180:case 191:case 181:case 182:case 202:return!0}return!1}(r))switch(r.kind){case 230:(e.isEntityName(r.expression)||e.isEntityNameExpression(r.expression))&&Y(r.expression,i);var u=e.visitEachChild(r,re,t);return h(k.updateExpressionWithTypeArguments(u,u.expression,u.typeArguments));case 180:Y(r.typeName,i);u=e.visitEachChild(r,re,t);return h(k.updateTypeReferenceNode(u,u.typeName,u.typeArguments));case 177:return h(k.updateConstructSignature(r,Q(r,r.typeParameters),H(r,r.parameters),V(r,r.type)));case 173:return h(k.createConstructorDeclaration(ue(r),H(r,r.parameters,0),void 0));case 171:return e.isPrivateIdentifier(r.name)?h(void 0):h(k.createMethodDeclaration(ue(r),void 0,r.name,r.questionToken,Q(r,r.typeParameters),H(r,r.parameters),V(r,r.type),void 0));case 174:if(e.isPrivateIdentifier(r.name))return h(void 0);var l=le(r,F.getAllAccessorDeclarations(r));return h(k.updateGetAccessorDeclaration(r,ue(r),r.name,G(r,e.hasEffectiveModifier(r,8)),V(r,l),void 0));case 175:return e.isPrivateIdentifier(r.name)?h(void 0):h(k.updateSetAccessorDeclaration(r,ue(r),r.name,G(r,e.hasEffectiveModifier(r,8)),void 0));case 169:return e.isPrivateIdentifier(r.name)?h(void 0):h(k.updatePropertyDeclaration(r,ue(r),r.name,r.questionToken,V(r,r.type),K(r)));case 168:return e.isPrivateIdentifier(r.name)?h(void 0):h(k.updatePropertySignature(r,ue(r),r.name,r.questionToken,V(r,r.type)));case 170:return e.isPrivateIdentifier(r.name)?h(void 0):h(k.updateMethodSignature(r,ue(r),r.name,r.questionToken,Q(r,r.typeParameters),H(r,r.parameters),V(r,r.type)));case 176:return h(k.updateCallSignature(r,Q(r,r.typeParameters),H(r,r.parameters),V(r,r.type)));case 178:return h(k.updateIndexSignature(r,ue(r),H(r,r.parameters),e.visitNode(r.type,re)||k.createKeywordTypeNode(131)));case 257:return e.isBindingPattern(r.name)?oe(r.name):(c=!0,d=!0,h(k.updateVariableDeclaration(r,r.name,void 0,V(r,r.type),K(r))));case 165:return function(t){return 171===t.parent.kind&&e.hasEffectiveModifier(t.parent,8)}(r)&&(r.default||r.constraint)?h(k.updateTypeParameterDeclaration(r,r.modifiers,r.name,void 0,void 0)):h(e.visitEachChild(r,re,t));case 191:var _=e.visitNode(r.checkType,re),p=e.visitNode(r.extendsType,re),g=i;i=r.trueType;var y=e.visitNode(r.trueType,re);i=g;var v=e.visitNode(r.falseType,re);return h(k.updateConditionalTypeNode(r,_,p,y,v));case 181:return h(k.updateFunctionTypeNode(r,e.visitNodes(r.typeParameters,re),H(r,r.parameters),e.visitNode(r.type,re)));case 182:return h(k.updateConstructorTypeNode(r,ue(r),e.visitNodes(r.typeParameters,re),H(r,r.parameters),e.visitNode(r.type,re)));case 202:return e.isLiteralImportTypeNode(r)?h(k.updateImportTypeNode(r,k.updateLiteralTypeNode(r.argument,$(r,r.argument.literal)),r.assertions,r.qualifier,e.visitNodes(r.typeArguments,re,e.isTypeNode),r.isTypeOf)):h(r);default:e.Debug.assertNever(r,"Attempted to process unhandled node kind: ".concat(e.Debug.formatSyntaxKind(r.kind)))}return e.isTupleTypeNode(r)&&e.getLineAndCharacterOfPosition(m,r.pos).line===e.getLineAndCharacterOfPosition(m,r.end).line&&e.setEmitFlags(r,1),h(e.visitEachChild(r,re,t))}}function h(t){return t&&o&&e.hasDynamicName(r)&&function(t){var r;d||(r=x,x=e.createGetSymbolAccessibilityDiagnosticForNodeName(t));f=t.name,e.Debug.assert(F.isLateBound(e.getParseTreeNode(t)));var n=t;Y(n.name.expression,i),d||(x=r);f=void 0}(r),X(r)&&(i=n),o&&!d&&(x=a),c&&(d=s),t===r?t:t&&e.setOriginalNode(Z(t,r),r)}}function ne(t){if(function(e){switch(e.kind){case 259:case 264:case 268:case 261:case 260:case 262:case 263:case 240:case 269:case 275:case 274:return!0}return!1}(t)&&!se(t)){switch(t.kind){case 275:return e.isSourceFile(t.parent)&&(T=!0),E=!0,k.updateExportDeclaration(t,t.modifiers,t.isTypeOnly,t.exportClause,$(t,t.moduleSpecifier),e.getResolutionModeOverrideForClause(t.assertClause)?t.assertClause:void 0);case 274:if(e.isSourceFile(t.parent)&&(T=!0),E=!0,79===t.expression.kind)return t;var r=k.createUniqueName("_default",16);x=function(){return{diagnosticMessage:e.Diagnostics.Default_export_of_the_module_has_or_is_using_private_name_0,errorNode:t}},g=t;var i=k.createVariableDeclaration(r,void 0,F.createTypeOfExpression(t.expression,t,n,A),void 0);g=void 0;var a=k.createVariableStatement(D?[k.createModifier(136)]:[],k.createVariableDeclarationList([i],2));return Z(a,t),e.removeAllComments(t),[a,k.updateExportAssignment(t,t.modifiers,r)]}var o=ae(t);return _.set(e.getOriginalNodeId(t),o),t}}function ie(t){if(e.isImportEqualsDeclaration(t)||e.hasEffectiveModifier(t,1024)||!e.canHaveModifiers(t))return t;var r=k.createModifiersFromModifierFlags(258046&e.getEffectiveModifierFlags(t));return k.updateModifiers(t,r)}function ae(t){if(l)for(;e.orderedRemoveItem(l,t););if(!se(t)){switch(t.kind){case 268:return function(t){if(F.isDeclarationVisible(t)){if(280===t.moduleReference.kind){var r=e.getExternalModuleImportEqualsDeclarationExpression(t);return k.updateImportEqualsDeclaration(t,t.modifiers,t.isTypeOnly,t.name,k.updateExternalModuleReference(t.moduleReference,$(t,r)))}var n=x;return x=e.createGetSymbolAccessibilityDiagnosticForNode(t),Y(t.moduleReference,i),x=n,t}}(t);case 269:return function(t){if(!t.importClause)return k.updateImportDeclaration(t,t.modifiers,t.importClause,$(t,t.moduleSpecifier),ee(t.assertClause));var r=t.importClause&&t.importClause.name&&F.isDeclarationVisible(t.importClause)?t.importClause.name:void 0;if(!t.importClause.namedBindings)return r&&k.updateImportDeclaration(t,t.modifiers,k.updateImportClause(t.importClause,t.importClause.isTypeOnly,r,void 0),$(t,t.moduleSpecifier),ee(t.assertClause));if(271===t.importClause.namedBindings.kind){var n=F.isDeclarationVisible(t.importClause.namedBindings)?t.importClause.namedBindings:void 0;return r||n?k.updateImportDeclaration(t,t.modifiers,k.updateImportClause(t.importClause,t.importClause.isTypeOnly,r,n),$(t,t.moduleSpecifier),ee(t.assertClause)):void 0}var i=e.mapDefined(t.importClause.namedBindings.elements,(function(e){return F.isDeclarationVisible(e)?e:void 0}));return i&&i.length||r?k.updateImportDeclaration(t,t.modifiers,k.updateImportClause(t.importClause,t.importClause.isTypeOnly,r,i&&i.length?k.updateNamedImports(t.importClause.namedBindings,i):void 0),$(t,t.moduleSpecifier),ee(t.assertClause)):F.isImportRequiredByAugmentation(t)?k.updateImportDeclaration(t,t.modifiers,void 0,$(t,t.moduleSpecifier),ee(t.assertClause)):void 0}(t)}if(!(e.isDeclaration(t)&&q(t)||e.isFunctionLike(t)&&F.isImplementationOfOverload(t))){var r;X(t)&&(r=i,i=t);var o=e.canProduceDiagnostics(t),s=x;o&&(x=e.createGetSymbolAccessibilityDiagnosticForNode(t));var c=D;switch(t.kind){case 262:D=!1;var u=me(k.updateTypeAliasDeclaration(t,ue(t),t.name,e.visitNodes(t.typeParameters,re,e.isTypeParameterDeclaration),e.visitNode(t.type,re,e.isTypeNode)));return D=c,u;case 261:return me(k.updateInterfaceDeclaration(t,ue(t),t.name,Q(t,t.typeParameters),_e(t.heritageClauses),e.visitNodes(t.members,re)));case 259:if((u=me(k.updateFunctionDeclaration(t,ue(t),void 0,t.name,Q(t,t.typeParameters),H(t,t.parameters),V(t,t.type),void 0)))&&F.isExpandoFunctionDeclaration(t)&&function(t){var r;if(t.body)return!0;var n=null===(r=t.symbol.declarations)||void 0===r?void 0:r.filter((function(t){return e.isFunctionDeclaration(t)&&!t.body}));return!n||n.indexOf(t)===n.length-1}(t)){var d=F.getPropertiesOfContainerFunction(t),p=e.parseNodeFactory.createModuleDeclaration(void 0,u.name||k.createIdentifier("_default"),k.createModuleBlock([]),16);e.setParent(p,i),p.locals=e.createSymbolTable(d),p.symbol=d[0].parent;var m=[],y=e.mapDefined(d,(function(t){if(t.valueDeclaration&&e.isPropertyAccessExpression(t.valueDeclaration)){x=e.createGetSymbolAccessibilityDiagnosticForNode(t.valueDeclaration);var r=F.createTypeOfDeclaration(t.valueDeclaration,p,n,A);x=s;var i=e.unescapeLeadingUnderscores(t.escapedName),a=e.isStringANonContextualKeyword(i),o=a?k.getGeneratedNameForNode(t.valueDeclaration):k.createIdentifier(i);a&&m.push([o,i]);var c=k.createVariableDeclaration(o,void 0,r,void 0);return k.createVariableStatement(a?void 0:[k.createToken(93)],k.createVariableDeclarationList([c]))}}));m.length?y.push(k.createExportDeclaration(void 0,!1,k.createNamedExports(e.map(m,(function(e){var t=e[0],r=e[1];return k.createExportSpecifier(!1,t,r)}))))):y=e.mapDefined(y,(function(e){return k.updateModifiers(e,0)}));var v=k.createModuleDeclaration(ue(t),t.name,k.createModuleBlock(y),16);if(!e.hasEffectiveModifier(u,1024))return[u,v];var h=k.createModifiersFromModifierFlags(-1026&e.getEffectiveModifierFlags(u)|2),b=k.updateFunctionDeclaration(u,h,void 0,u.name,u.typeParameters,u.parameters,u.type,void 0),S=k.updateModuleDeclaration(v,h,v.name,v.body),N=k.createExportAssignment(void 0,!1,v.name);return e.isSourceFile(t.parent)&&(T=!0),E=!0,[b,S,N]}return u;case 264:D=!1;var P=t.body;if(P&&265===P.kind){var w=C,I=E;E=!1,C=!1;var O=te(e.visitNodes(P.statements,ne));16777216&t.flags&&(C=!1),e.isGlobalScopeAugmentation(t)||function(t){return e.some(t,ce)}(O)||E||(O=C?k.createNodeArray(a(a([],O,!0),[e.createEmptyExports(k)],!1)):e.visitNodes(O,ie));var M=k.updateModuleBlock(P,O);D=c,C=w,E=I;var L=ue(t);return me(k.updateModuleDeclaration(t,L,e.isExternalModuleAugmentation(t)?$(t,t.name):t.name,M))}D=c;L=ue(t);D=!1,e.visitNode(P,ne);var R=e.getOriginalNodeId(P);M=_.get(R);return _.delete(R),me(k.updateModuleDeclaration(t,L,t.name,M));case 260:f=t.name,g=t;h=k.createNodeArray(ue(t));var B=Q(t,t.typeParameters),j=e.getFirstConstructorWithBody(t),J=void 0;if(j){var z=x;J=e.compact(e.flatMap(j.parameters,(function(t){if(e.hasSyntacticModifier(t,16476)&&!se(t))return x=e.createGetSymbolAccessibilityDiagnosticForNode(t),79===t.name.kind?Z(k.createPropertyDeclaration(ue(t),t.name,t.questionToken,V(t,t.type),K(t)),t):function r(n){for(var i,a=0,o=n.elements;a<o.length;a++){var s=o[a];e.isOmittedExpression(s)||(e.isBindingPattern(s.name)&&(i=e.concatenate(i,r(s.name))),(i=i||[]).push(k.createPropertyDeclaration(ue(t),s.name,void 0,V(s,void 0),void 0)))}return i}(t.name)}))),x=z}var U=e.some(t.members,(function(t){return!!t.name&&e.isPrivateIdentifier(t.name)}))?[k.createPropertyDeclaration(void 0,k.createPrivateIdentifier("#private"),void 0,void 0,void 0)]:void 0,G=e.concatenate(e.concatenate(U,J),e.visitNodes(t.members,re)),ae=k.createNodeArray(G),oe=e.getEffectiveBaseTypeNode(t);if(oe&&!e.isEntityNameExpression(oe.expression)&&104!==oe.expression.kind){var le=t.name?e.unescapeLeadingUnderscores(t.name.escapedText):"default",de=k.createUniqueName("".concat(le,"_base"),16);x=function(){return{diagnosticMessage:e.Diagnostics.extends_clause_of_exported_class_0_has_or_is_using_private_name_1,errorNode:oe,typeName:t.name}};var pe=k.createVariableDeclaration(de,void 0,F.createTypeOfExpression(oe.expression,t,n,A),void 0),fe=k.createVariableStatement(D?[k.createModifier(136)]:[],k.createVariableDeclarationList([pe],2)),ge=k.createNodeArray(e.map(t.heritageClauses,(function(t){if(94===t.token){var r=x;x=e.createGetSymbolAccessibilityDiagnosticForNode(t.types[0]);var n=k.updateHeritageClause(t,e.map(t.types,(function(t){return k.updateExpressionWithTypeArguments(t,de,e.visitNodes(t.typeArguments,re))})));return x=r,n}return k.updateHeritageClause(t,e.visitNodes(k.createNodeArray(e.filter(t.types,(function(t){return e.isEntityNameExpression(t.expression)||104===t.expression.kind}))),re))})));return[fe,me(k.updateClassDeclaration(t,h,t.name,B,ge,ae))]}ge=_e(t.heritageClauses);return me(k.updateClassDeclaration(t,h,t.name,B,ge,ae));case 240:return me(function(t){if(!e.forEach(t.declarationList.declarations,W))return;var r=e.visitNodes(t.declarationList.declarations,re);if(!e.length(r))return;return k.updateVariableStatement(t,k.createNodeArray(ue(t)),k.updateVariableDeclarationList(t.declarationList,r))}(t));case 263:return me(k.updateEnumDeclaration(t,k.createNodeArray(ue(t)),t.name,k.createNodeArray(e.mapDefined(t.members,(function(e){if(!se(e)){var t=F.getConstantValue(e);return Z(k.updateEnumMember(e,e.name,void 0!==t?"string"==typeof t?k.createStringLiteral(t):k.createNumericLiteral(t):void 0),e)}})))))}return e.Debug.assertNever(t,"Unhandled top-level node in declaration emit: ".concat(e.Debug.formatSyntaxKind(t.kind)))}}function me(n){return X(t)&&(i=r),o&&(x=s),264===t.kind&&(D=c),n===t?n:(g=void 0,f=void 0,n&&e.setOriginalNode(Z(n,t),t))}}function oe(t){return e.flatten(e.mapDefined(t.elements,(function(t){return function(t){if(229===t.kind)return;if(t.name){if(!W(t))return;return e.isBindingPattern(t.name)?oe(t.name):k.createVariableDeclaration(t.name,void 0,V(t,void 0),void 0)}}(t)})))}function se(e){return!!I&&!!e&&r(e,m)}function ce(t){return e.isExportAssignment(t)||e.isExportDeclaration(t)}function ue(t){var r=e.getEffectiveModifierFlags(t),n=function(t){var r=241147,n=D&&!function(e){if(261===e.kind)return!0;return!1}(t)?2:0,i=308===t.parent.kind;(!i||S&&i&&e.isExternalModule(t.parent))&&(r^=2,n=0);return s(t,r,n)}(t);return r===n?e.visitArray(t.modifiers,(function(t){return e.tryCast(t,e.isModifier)}),e.isModifier):k.createModifiersFromModifierFlags(n)}function le(t,r){var n=c(t);return n||t===r.firstAccessor||(n=c(r.firstAccessor),x=e.createGetSymbolAccessibilityDiagnosticForNode(r.firstAccessor)),!n&&r.secondAccessor&&t!==r.secondAccessor&&(n=c(r.secondAccessor),x=e.createGetSymbolAccessibilityDiagnosticForNode(r.secondAccessor)),n}function _e(t){return k.createNodeArray(e.filter(e.map(t,(function(t){return k.updateHeritageClause(t,e.visitNodes(k.createNodeArray(e.filter(t.types,(function(r){return e.isEntityNameExpression(r.expression)||94===t.token&&104===r.expression.kind}))),re))})),(function(e){return e.types&&!!e.types.length})))}}function s(t,r,n){void 0===r&&(r=258043),void 0===n&&(n=0);var i=e.getEffectiveModifierFlags(t)&r|n;return 1024&i&&!(1&i)&&(i^=1),1024&i&&2&i&&(i^=2),i}function c(e){if(e)return 174===e.kind?e.type:e.parameters.length>0?e.parameters[0].type:void 0}e.transformDeclarations=i}(_||(_={})),function(e){var t,r;function n(t,r,n){if(n)return e.emptyArray;var i=e.getEmitScriptTarget(t),a=e.getEmitModuleKind(t),o=[];return e.addRange(o,r&&e.map(r.before,s)),o.push(e.transformTypeScript),o.push(e.transformLegacyDecorators),o.push(e.transformClassFields),e.getJSXTransformEnabled(t)&&o.push(e.transformJsx),i<99&&o.push(e.transformESNext),i<8&&o.push(e.transformES2021),i<7&&o.push(e.transformES2020),i<6&&o.push(e.transformES2019),i<5&&o.push(e.transformES2018),i<4&&o.push(e.transformES2017),i<3&&o.push(e.transformES2016),i<2&&(o.push(e.transformES2015),o.push(e.transformGenerators)),o.push(function(t){switch(t){case e.ModuleKind.ESNext:case e.ModuleKind.ES2022:case e.ModuleKind.ES2020:case e.ModuleKind.ES2015:return e.transformECMAScriptModule;case e.ModuleKind.System:return e.transformSystemModule;case e.ModuleKind.Node16:case e.ModuleKind.NodeNext:return e.transformNodeModule;default:return e.transformModule}}(a)),i<1&&o.push(e.transformES5),e.addRange(o,r&&e.map(r.after,s)),o}function i(t){var r=[];return r.push(e.transformDeclarations),e.addRange(r,t&&e.map(t.afterDeclarations,c)),r}function o(t,r){return function(n){var i=t(n);return"function"==typeof i?r(n,i):function(t){return function(r){return e.isBundle(r)?t.transformBundle(r):t.transformSourceFile(r)}}(i)}}function s(t){return o(t,e.chainBundle)}function c(e){return o(e,(function(e,t){return t}))}function u(e,t){return t}function l(e,t,r){r(e,t)}!function(e){e[e.Uninitialized=0]="Uninitialized",e[e.Initialized=1]="Initialized",e[e.Completed=2]="Completed",e[e.Disposed=3]="Disposed"}(t||(t={})),function(e){e[e.Substitution=1]="Substitution",e[e.EmitNotifications=2]="EmitNotifications"}(r||(r={})),e.noTransformers={scriptTransformers:e.emptyArray,declarationTransformers:e.emptyArray},e.getTransformers=function(e,t,r){return{scriptTransformers:n(e,t,r),declarationTransformers:i(t)}},e.noEmitSubstitution=u,e.noEmitNotification=l,e.transformNodes=function(t,r,n,i,o,s,c){for(var _,d,p,f,g,m=new Array(358),y=0,v=[],h=[],b=[],x=[],D=0,S=!1,T=[],C=0,E=u,k=l,N=0,A=[],F={factory:n,getCompilerOptions:function(){return i},getEmitResolver:function(){return t},getEmitHost:function(){return r},getEmitHelperFactory:e.memoize((function(){return e.createEmitHelperFactory(F)})),startLexicalEnvironment:function(){e.Debug.assert(N>0,"Cannot modify the lexical environment during initialization."),e.Debug.assert(N<2,"Cannot modify the lexical environment after transformation has completed."),e.Debug.assert(!S,"Lexical environment is suspended."),v[D]=_,h[D]=d,b[D]=p,x[D]=y,D++,_=void 0,d=void 0,p=void 0,y=0},suspendLexicalEnvironment:function(){e.Debug.assert(N>0,"Cannot modify the lexical environment during initialization."),e.Debug.assert(N<2,"Cannot modify the lexical environment after transformation has completed."),e.Debug.assert(!S,"Lexical environment is already suspended."),S=!0},resumeLexicalEnvironment:function(){e.Debug.assert(N>0,"Cannot modify the lexical environment during initialization."),e.Debug.assert(N<2,"Cannot modify the lexical environment after transformation has completed."),e.Debug.assert(S,"Lexical environment is not suspended."),S=!1},endLexicalEnvironment:function(){var t;if(e.Debug.assert(N>0,"Cannot modify the lexical environment during initialization."),e.Debug.assert(N<2,"Cannot modify the lexical environment after transformation has completed."),e.Debug.assert(!S,"Lexical environment is suspended."),_||d||p){if(d&&(t=a([],d,!0)),_){var r=n.createVariableStatement(void 0,n.createVariableDeclarationList(_));e.setEmitFlags(r,1048576),t?t.push(r):t=[r]}p&&(t=a(t?a([],t,!0):[],p,!0))}D--,_=v[D],d=h[D],p=b[D],y=x[D],0===D&&(v=[],h=[],b=[],x=[]);return t},setLexicalEnvironmentFlags:function(e,t){y=t?y|e:y&~e},getLexicalEnvironmentFlags:function(){return y},hoistVariableDeclaration:function(t){e.Debug.assert(N>0,"Cannot modify the lexical environment during initialization."),e.Debug.assert(N<2,"Cannot modify the lexical environment after transformation has completed.");var r=e.setEmitFlags(n.createVariableDeclaration(t),64);_?_.push(r):_=[r];1&y&&(y|=2)},hoistFunctionDeclaration:function(t){e.Debug.assert(N>0,"Cannot modify the lexical environment during initialization."),e.Debug.assert(N<2,"Cannot modify the lexical environment after transformation has completed."),e.setEmitFlags(t,1048576),d?d.push(t):d=[t]},addInitializationStatement:function(t){e.Debug.assert(N>0,"Cannot modify the lexical environment during initialization."),e.Debug.assert(N<2,"Cannot modify the lexical environment after transformation has completed."),e.setEmitFlags(t,1048576),p?p.push(t):p=[t]},startBlockScope:function(){e.Debug.assert(N>0,"Cannot start a block scope during initialization."),e.Debug.assert(N<2,"Cannot start a block scope after transformation has completed."),T[C]=f,C++,f=void 0},endBlockScope:function(){e.Debug.assert(N>0,"Cannot end a block scope during initialization."),e.Debug.assert(N<2,"Cannot end a block scope after transformation has completed.");var t=e.some(f)?[n.createVariableStatement(void 0,n.createVariableDeclarationList(f.map((function(e){return n.createVariableDeclaration(e)})),1))]:void 0;C--,f=T[C],0===C&&(T=[]);return t},addBlockScopedVariable:function(t){e.Debug.assert(C>0,"Cannot add a block scoped variable outside of an iteration body."),(f||(f=[])).push(t)},requestEmitHelper:function t(r){if(e.Debug.assert(N>0,"Cannot modify the transformation context during initialization."),e.Debug.assert(N<2,"Cannot modify the transformation context after transformation has completed."),e.Debug.assert(!r.scoped,"Cannot request a scoped emit helper."),r.dependencies)for(var n=0,i=r.dependencies;n<i.length;n++){var a=i[n];t(a)}g=e.append(g,r)},readEmitHelpers:function(){e.Debug.assert(N>0,"Cannot modify the transformation context during initialization."),e.Debug.assert(N<2,"Cannot modify the transformation context after transformation has completed.");var t=g;return g=void 0,t},enableSubstitution:function(t){e.Debug.assert(N<2,"Cannot modify the transformation context after transformation has completed."),m[t]|=1},enableEmitNotification:function(t){e.Debug.assert(N<2,"Cannot modify the transformation context after transformation has completed."),m[t]|=2},isSubstitutionEnabled:J,isEmitNotificationEnabled:z,get onSubstituteNode(){return E},set onSubstituteNode(t){e.Debug.assert(N<1,"Cannot modify transformation hooks after initialization has completed."),e.Debug.assert(void 0!==t,"Value must not be 'undefined'"),E=t},get onEmitNode(){return k},set onEmitNode(t){e.Debug.assert(N<1,"Cannot modify transformation hooks after initialization has completed."),e.Debug.assert(void 0!==t,"Value must not be 'undefined'"),k=t},addDiagnostic:function(e){A.push(e)}},P=0,w=o;P<w.length;P++){var I=w[P];e.disposeEmitNodes(e.getSourceFileOfNode(e.getParseTreeNode(I)))}e.performance.mark("beforeTransform");var O=s.map((function(e){return e(F)})),M=function(e){for(var t=0,r=O;t<r.length;t++){e=(0,r[t])(e)}return e};N=1;for(var L=[],R=0,B=o;R<B.length;R++){I=B[R];null===e.tracing||void 0===e.tracing||e.tracing.push("emit","transformNodes",308===I.kind?{path:I.path}:{kind:I.kind,pos:I.pos,end:I.end}),L.push((c?M:j)(I)),null===e.tracing||void 0===e.tracing||e.tracing.pop()}return N=2,e.performance.mark("afterTransform"),e.performance.measure("transformTime","beforeTransform","afterTransform"),{transformed:L,substituteNode:function(t,r){return e.Debug.assert(N<3,"Cannot substitute a node after the result is disposed."),r&&J(r)&&E(t,r)||r},emitNodeWithNotification:function(t,r,n){e.Debug.assert(N<3,"Cannot invoke TransformationResult callbacks after the result is disposed."),r&&(z(r)?k(t,r,n):n(t,r))},isEmitNotificationEnabled:z,dispose:function(){if(N<3){for(var t=0,r=o;t<r.length;t++){var n=r[t];e.disposeEmitNodes(e.getSourceFileOfNode(e.getParseTreeNode(n)))}_=void 0,v=void 0,d=void 0,h=void 0,E=void 0,k=void 0,g=void 0,N=3}},diagnostics:A};function j(t){return!t||e.isSourceFile(t)&&t.isDeclarationFile?t:M(t)}function J(t){return 0!=(1&m[t.kind])&&0==(4&e.getEmitFlags(t))}function z(t){return 0!=(2&m[t.kind])||0!=(2&e.getEmitFlags(t))}},e.nullTransformationContext={factory:e.factory,getCompilerOptions:function(){return{}},getEmitResolver:e.notImplemented,getEmitHost:e.notImplemented,getEmitHelperFactory:e.notImplemented,startLexicalEnvironment:e.noop,resumeLexicalEnvironment:e.noop,suspendLexicalEnvironment:e.noop,endLexicalEnvironment:e.returnUndefined,setLexicalEnvironmentFlags:e.noop,getLexicalEnvironmentFlags:function(){return 0},hoistVariableDeclaration:e.noop,hoistFunctionDeclaration:e.noop,addInitializationStatement:e.noop,startBlockScope:e.noop,endBlockScope:e.returnUndefined,addBlockScopedVariable:e.noop,requestEmitHelper:e.noop,readEmitHelpers:e.notImplemented,enableSubstitution:e.noop,enableEmitNotification:e.noop,isSubstitutionEnabled:e.notImplemented,isEmitNotificationEnabled:e.notImplemented,onSubstituteNode:u,onEmitNode:l,addDiagnostic:e.noop}}(_||(_={})),function(e){var t,r,n=function(){var e=[];return e[1024]=["{","}"],e[2048]=["(",")"],e[4096]=["<",">"],e[8192]=["[","]"],e}();function i(t,r,n,i,a,s){void 0===i&&(i=!1);var u=e.isArray(n)?n:e.getSourceFilesToEmit(t,n,i),l=t.getCompilerOptions();if(e.outFile(l)){var _=t.getPrependNodes();if(u.length||_.length){var d=e.factory.createBundle(u,_);if(g=r(c(d,t,i),d))return g}}else{if(!a)for(var p=0,f=u;p<f.length;p++){var g,m=f[p];if(g=r(c(m,t,i),m))return g}if(s){var y=o(l);if(y)return r({buildInfoPath:y},void 0)}}}function o(t){var r=t.configFilePath;if(e.isIncrementalCompilation(t)){if(t.tsBuildInfoFile)return t.tsBuildInfoFile;var n,i=e.outFile(t);if(i)n=e.removeFileExtension(i);else{if(!r)return;var a=e.removeFileExtension(r);n=t.outDir?t.rootDir?e.resolvePath(t.outDir,e.getRelativePathFromDirectory(t.rootDir,a,!0)):e.combinePaths(t.outDir,e.getBaseFileName(a)):a}return n+".tsbuildinfo"}}function s(t,r){var n=e.outFile(t),i=t.emitDeclarationOnly?void 0:n,a=i&&u(i,t),s=r||e.getEmitDeclarations(t)?e.removeFileExtension(n)+".d.ts":void 0;return{jsFilePath:i,sourceMapFilePath:a,declarationFilePath:s,declarationMapPath:s&&e.getAreDeclarationMapsEnabled(t)?s+".map":void 0,buildInfoPath:o(t)}}function c(t,r,n){var i=r.getCompilerOptions();if(309===t.kind)return s(i,n);var a=e.getOwnEmitOutputFilePath(t.fileName,r,l(t.fileName,i)),o=e.isJsonSourceFile(t),c=o&&0===e.comparePaths(t.fileName,a,r.getCurrentDirectory(),!r.useCaseSensitiveFileNames()),_=i.emitDeclarationOnly||c?void 0:a,d=!_||e.isJsonSourceFile(t)?void 0:u(_,i),p=n||e.getEmitDeclarations(i)&&!o?e.getDeclarationEmitOutputFilePath(t.fileName,r):void 0;return{jsFilePath:_,sourceMapFilePath:d,declarationFilePath:p,declarationMapPath:p&&e.getAreDeclarationMapsEnabled(i)?p+".map":void 0,buildInfoPath:void 0}}function u(e,t){return t.sourceMap&&!t.inlineSourceMap?e+".map":void 0}function l(t,r){return e.fileExtensionIs(t,".json")?".json":1===r.jsx&&e.fileExtensionIsOneOf(t,[".jsx",".tsx"])?".jsx":e.fileExtensionIsOneOf(t,[".mts",".mjs"])?".mjs":e.fileExtensionIsOneOf(t,[".cts",".cjs"])?".cjs":".js"}function _(t,r,n,i,a){return i?e.resolvePath(i,e.getRelativePathFromDirectory(a?a():v(r,n),t,n)):t}function d(t,r,n,i){return e.changeExtension(_(t,r,n,r.options.declarationDir||r.options.outDir,i),e.getDeclarationEmitExtensionForPath(t))}function p(t,r,n,i){if(!r.options.emitDeclarationOnly){var a=e.fileExtensionIs(t,".json"),o=e.changeExtension(_(t,r,n,r.options.outDir,i),l(t,r.options));return a&&0===e.comparePaths(t,o,e.Debug.checkDefined(r.options.configFilePath),n)?void 0:o}}function f(){var t;return{addOutput:function(e){e&&(t||(t=[])).push(e)},getOutputs:function(){return t||e.emptyArray}}}function g(e,t){var r=s(e.options,!1),n=r.jsFilePath,i=r.sourceMapFilePath,a=r.declarationFilePath,o=r.declarationMapPath,c=r.buildInfoPath;t(n),t(i),t(a),t(o),t(c)}function m(t,r,n,i,a){if(!e.isDeclarationFileName(r)){var o=p(r,t,n,a);if(i(o),!e.fileExtensionIs(r,".json")&&(o&&t.options.sourceMap&&i("".concat(o,".map")),e.getEmitDeclarations(t.options))){var s=d(r,t,n,a);i(s),t.options.declarationMap&&i("".concat(s,".map"))}}}function y(t,r,n,i,a){var o;return t.rootDir?(o=e.getNormalizedAbsolutePath(t.rootDir,n),null==a||a(t.rootDir)):t.composite&&t.configFilePath?(o=e.getDirectoryPath(e.normalizeSlashes(t.configFilePath)),null==a||a(o)):o=e.computeCommonSourceDirectoryOfFilenames(r(),n,i),o&&o[o.length-1]!==e.directorySeparator&&(o+=e.directorySeparator),o}function v(t,r){var n=t.options,i=t.fileNames;return y(n,(function(){return e.filter(i,(function(t){return!(n.noEmitForJsFiles&&e.fileExtensionIsOneOf(t,e.supportedJSExtensionsFlat)||e.isDeclarationFileName(t))}))}),e.getDirectoryPath(e.normalizeSlashes(e.Debug.checkDefined(n.configFilePath))),e.createGetCanonicalFileName(!r))}function h(t,r,n,a,o,s,c){var u,l=a.scriptTransformers,_=a.declarationTransformers,d=r.getCompilerOptions(),p=d.sourceMap||d.inlineSourceMap||e.getAreDeclarationMapsEnabled(d)?[]:void 0,f=d.listEmittedFiles?[]:void 0,g=e.createDiagnosticCollection(),m=e.getNewLineCharacter(d,(function(){return r.getNewLine()})),y=e.createTextWriter(m),v=e.performance.createTimer("printTime","beforePrint","afterPrint"),h=v.enter,x=v.exit,S=!1;return h(),i(r,(function(i,a){var s,p=i.jsFilePath,m=i.sourceMapFilePath,y=i.declarationFilePath,v=i.declarationMapPath,h=i.buildInfoPath;h&&a&&e.isBundle(a)&&(s=e.getDirectoryPath(e.getNormalizedAbsolutePath(h,r.getCurrentDirectory())),u={commonSourceDirectory:x(r.getCommonSourceDirectory()),sourceFiles:a.sourceFiles.map((function(t){return x(e.getNormalizedAbsolutePath(t.fileName,r.getCurrentDirectory()))}))});null===e.tracing||void 0===e.tracing||e.tracing.push("emit","emitJsFileOrBundle",{jsFilePath:p}),function(n,i,a,s){if(!n||o||!i)return;if(r.isEmitBlocked(i)||d.noEmit)return void(S=!0);var c=e.transformNodes(t,r,e.factory,d,[n],l,!1),_=D({removeComments:d.removeComments,newLine:d.newLine,noEmitHelpers:d.noEmitHelpers,module:d.module,target:d.target,sourceMap:d.sourceMap,inlineSourceMap:d.inlineSourceMap,inlineSources:d.inlineSources,extendedDiagnostics:d.extendedDiagnostics,writeBundleFileInfo:!!u,relativeToBuildInfo:s},{hasGlobalName:t.hasGlobalName,onEmitNode:c.emitNodeWithNotification,isEmitNotificationEnabled:c.isEmitNotificationEnabled,substituteNode:c.substituteNode});e.Debug.assert(1===c.transformed.length,"Should only see one output from the transform"),C(i,a,c,_,d),c.dispose(),u&&(u.js=_.bundleFileInfo)}(a,p,m,x),null===e.tracing||void 0===e.tracing||e.tracing.pop(),null===e.tracing||void 0===e.tracing||e.tracing.push("emit","emitDeclarationFileOrBundle",{declarationFilePath:y}),function(n,i,a,s){if(!n)return;if(!i)return void((o||d.emitDeclarationOnly)&&(S=!0));var l=e.isSourceFile(n)?[n]:n.sourceFiles,p=c?l:e.filter(l,e.isSourceFileNotJson),f=e.outFile(d)?[e.factory.createBundle(p,e.isSourceFile(n)?void 0:n.prepends)]:p;o&&!e.getEmitDeclarations(d)&&p.forEach(T);var m=e.transformNodes(t,r,e.factory,d,f,_,!1);if(e.length(m.diagnostics))for(var y=0,v=m.diagnostics;y<v.length;y++){var h=v[y];g.add(h)}var b={removeComments:d.removeComments,newLine:d.newLine,noEmitHelpers:!0,module:d.module,target:d.target,sourceMap:!c&&d.declarationMap,inlineSourceMap:d.inlineSourceMap,extendedDiagnostics:d.extendedDiagnostics,onlyPrintJsDocStyle:!0,writeBundleFileInfo:!!u,recordInternalSection:!!u,relativeToBuildInfo:s},x=D(b,{hasGlobalName:t.hasGlobalName,onEmitNode:m.emitNodeWithNotification,isEmitNotificationEnabled:m.isEmitNotificationEnabled,substituteNode:m.substituteNode}),E=!!m.diagnostics&&!!m.diagnostics.length||!!r.isEmitBlocked(i)||!!d.noEmit;S=S||E,(!E||c)&&(e.Debug.assert(1===m.transformed.length,"Should only see one output from the decl transform"),C(i,a,m,x,{sourceMap:b.sourceMap,sourceRoot:d.sourceRoot,mapRoot:d.mapRoot,extendedDiagnostics:d.extendedDiagnostics}));m.dispose(),u&&(u.dts=x.bundleFileInfo)}(a,y,v,x),null===e.tracing||void 0===e.tracing||e.tracing.pop(),null===e.tracing||void 0===e.tracing||e.tracing.push("emit","emitBuildInfo",{buildInfoPath:h}),function(t,i){if(!i||n||S)return;var a=r.getProgramBuildInfo();if(r.isEmitBlocked(i))return void(S=!0);var o=e.version,s={bundle:t,program:a,version:o};e.writeFile(r,g,i,b(s),!1,void 0,{buildInfo:s})}(u,h),null===e.tracing||void 0===e.tracing||e.tracing.pop(),!S&&f&&(o||(p&&f.push(p),m&&f.push(m),h&&f.push(h)),y&&f.push(y),v&&f.push(v));function x(t){return e.ensurePathIsNonModuleName(e.getRelativePathFromDirectory(s,t,r.getCanonicalFileName))}}),e.getSourceFilesToEmit(r,n,c),c,s,!n),x(),{emitSkipped:S,diagnostics:g.getDiagnostics(),emittedFiles:f,sourceMaps:p};function T(r){e.isExportAssignment(r)?79===r.expression.kind&&t.collectLinkedAliases(r.expression,!0):e.isExportSpecifier(r)?t.collectLinkedAliases(r.propertyName||r.name,!0):e.forEachChild(r,T)}function C(t,n,i,a,o){var s,c,u=i.transformed[0],l=309===u.kind?u:void 0,_=308===u.kind?u:void 0,f=l?l.sourceFiles:[_];if(function(t,r){return(t.sourceMap||t.inlineSourceMap)&&(308!==r.kind||!e.fileExtensionIs(r.fileName,".json"))}(o,u)&&(s=e.createSourceMapGenerator(r,e.getBaseFileName(e.normalizeSlashes(t)),function(t){var r=e.normalizeSlashes(t.sourceRoot||"");return r?e.ensureTrailingDirectorySeparator(r):r}(o),function(t,n,i){if(t.sourceRoot)return r.getCommonSourceDirectory();if(t.mapRoot){var a=e.normalizeSlashes(t.mapRoot);return i&&(a=e.getDirectoryPath(e.getSourceFilePathInNewDir(i.fileName,r,a))),0===e.getRootLength(a)&&(a=e.combinePaths(r.getCommonSourceDirectory(),a)),a}return e.getDirectoryPath(e.normalizePath(n))}(o,t,_),o)),l?a.writeBundle(l,y,s):a.writeFile(_,y,s),s){p&&p.push({inputSourceFileNames:s.getSources(),sourceMap:s.toJSON()});var v=function(t,n,i,a,o){if(t.inlineSourceMap){var s=n.toString(),c=e.base64encode(e.sys,s);return"data:application/json;base64,".concat(c)}var u=e.getBaseFileName(e.normalizeSlashes(e.Debug.checkDefined(a)));if(t.mapRoot){var l=e.normalizeSlashes(t.mapRoot);return o&&(l=e.getDirectoryPath(e.getSourceFilePathInNewDir(o.fileName,r,l))),0===e.getRootLength(l)?(l=e.combinePaths(r.getCommonSourceDirectory(),l),encodeURI(e.getRelativePathToDirectoryOrUrl(e.getDirectoryPath(e.normalizePath(i)),e.combinePaths(l,u),r.getCurrentDirectory(),r.getCanonicalFileName,!0))):encodeURI(e.combinePaths(l,u))}return encodeURI(u)}(o,s,t,n,_);if(v&&(y.isAtStartOfLine()||y.rawWrite(m),c=y.getTextPos(),y.writeComment("//# ".concat("sourceMappingURL","=").concat(v))),n){var h=s.toString();e.writeFile(r,g,n,h,!1,f),a.bundleFileInfo&&(a.bundleFileInfo.mapHash=e.computeSignature(h,e.maybeBind(r,r.createHash)))}}else y.writeLine();var b=y.getText();e.writeFile(r,g,t,b,!!d.emitBOM,f,{sourceMapUrlPos:c,diagnostics:i.diagnostics}),a.bundleFileInfo&&(a.bundleFileInfo.hash=e.computeSignature(b,e.maybeBind(r,r.createHash))),y.clear()}}function b(e){return JSON.stringify(e)}function x(t,r){return e.readJsonOrUndefined(t,r)}function D(t,r){void 0===t&&(t={}),void 0===r&&(r={});var i,a,o,s,c,u,l,_,d,p,f,g,m,y,v,h,b,x,D,E,k,N,A,F=r.hasGlobalName,P=r.onEmitNode,w=void 0===P?e.noEmitNotification:P,I=r.isEmitNotificationEnabled,O=r.substituteNode,M=void 0===O?e.noEmitSubstitution:O,L=r.onBeforeEmitNode,R=r.onAfterEmitNode,B=r.onBeforeEmitNodeArray,j=r.onAfterEmitNodeArray,J=r.onBeforeEmitToken,z=r.onAfterEmitToken,U=!!t.extendedDiagnostics,K=e.getNewLineCharacter(t),V=e.getEmitModuleKind(t),q=new e.Map,W=t.preserveSourceNewlines,H=function(e){y.write(e)},G=t.writeBundleFileInfo?{sections:[]}:void 0,Q=G?e.Debug.checkDefined(t.relativeToBuildInfo):void 0,X=t.recordInternalSection,Y=0,Z="text",$=!0,ee=-1,te=-1,re=-1,ne=-1,ie=-1,ae=!1,oe=!!t.removeComments,se=e.performance.createTimerIf(U,"commentTime","beforeComment","afterComment"),ce=se.enter,ue=se.exit,le=e.factory.parenthesizer,_e={select:function(e){return 0===e?le.parenthesizeLeadingTypeArgument:void 0}},de=function(){return e.createBinaryExpressionTrampoline((function(e,t){if(t){t.stackIndex++,t.preserveSourceNewlinesStack[t.stackIndex]=W,t.containerPosStack[t.stackIndex]=re,t.containerEndStack[t.stackIndex]=ne,t.declarationListContainerEndStack[t.stackIndex]=ie;var r=t.shouldEmitCommentsStack[t.stackIndex]=Be(e),n=t.shouldEmitSourceMapsStack[t.stackIndex]=je(e);null==L||L(e),r&&Vr(e),n&&pn(e),Me(e)}else t={stackIndex:0,preserveSourceNewlinesStack:[void 0],containerPosStack:[-1],containerEndStack:[-1],declarationListContainerEndStack:[-1],shouldEmitCommentsStack:[!1],shouldEmitSourceMapsStack:[!1]};return t}),(function(e,r,n){return t(e,n,"left")}),(function(e,t,r){var n=27!==e.kind,i=Sr(r,r.left,e),a=Sr(r,e,r.right);fr(i,n),rn(e.pos),lr(e,101===e.kind?$t:er),an(e.end,!0),fr(a,!0)}),(function(e,r,n){return t(e,n,"right")}),(function(e,t){var r=Sr(e,e.left,e.operatorToken),n=Sr(e,e.operatorToken,e.right);if(gr(r,n),t.stackIndex>0){var i=t.preserveSourceNewlinesStack[t.stackIndex],a=t.containerPosStack[t.stackIndex],o=t.containerEndStack[t.stackIndex],s=t.declarationListContainerEndStack[t.stackIndex],c=t.shouldEmitCommentsStack[t.stackIndex],u=t.shouldEmitSourceMapsStack[t.stackIndex];Le(i),u&&fn(e),c&&qr(e,a,o,s),null==R||R(e),t.stackIndex--}}),void 0);function t(t,r,n){var i="left"===n?le.getParenthesizeLeftSideOfBinaryForOperator(r.operatorToken.kind):le.getParenthesizeRightSideOfBinaryForOperator(r.operatorToken.kind),a=Je(0,1,t);if(a===qe&&(e.Debug.assertIsDefined(N),a=ze(1,1,t=i(e.cast(N,e.isExpression))),N=void 0),(a===Kr||a===dn||a===Ke)&&e.isBinaryExpression(t))return t;A=i,a(1,t)}}();return Ae(),{printNode:function(t,r,n){switch(t){case 0:e.Debug.assert(e.isSourceFile(r),"Expected a SourceFile node.");break;case 2:e.Debug.assert(e.isIdentifier(r),"Expected an Identifier node.");break;case 1:e.Debug.assert(e.isExpression(r),"Expected an Expression node.")}switch(r.kind){case 308:return fe(r);case 309:return pe(r);case 310:return function(e,t){var r=y;Ne(t,void 0),Ee(4,e,void 0),Ae(),y=r}(r,Te()),Ce()}return ge(t,r,n,Te()),Ce()},printList:function(e,t,r){return me(e,t,r,Te()),Ce()},printFile:fe,printBundle:pe,writeNode:ge,writeList:me,writeFile:Se,writeBundle:De,bundleFileInfo:G};function pe(e){return De(e,Te(),void 0),Ce()}function fe(e){return Se(e,Te(),void 0),Ce()}function ge(e,t,r,n){var i=y;Ne(n,void 0),Ee(e,t,r),Ae(),y=i}function me(e,t,r,n){var i=y;Ne(n,void 0),r&&ke(r),qt(void 0,t,e),Ae(),y=i}function ye(){return y.getTextPosWithWriteLine?y.getTextPosWithWriteLine():y.getTextPos()}function ve(t,r,n){var i=e.lastOrUndefined(G.sections);i&&i.kind===n?i.end=r:G.sections.push({pos:t,end:r,kind:n})}function he(t){if(X&&G&&i&&(e.isDeclaration(t)||e.isVariableStatement(t))&&e.isInternalDeclaration(t,i)&&"internal"!==Z){var r=Z;return xe(y.getTextPos()),Y=ye(),Z="internal",r}}function be(e){e&&(xe(y.getTextPos()),Y=ye(),Z=e)}function xe(e){return Y<e&&(ve(Y,e,Z),!0)}function De(r,n,i){var a;h=!1;var o=y;Ne(n,i),Pt(r),Ft(r),We(r),function(t){Et(!!t.hasNoDefaultLib,t.syntheticFileReferences||[],t.syntheticTypeReferences||[],t.syntheticLibReferences||[]);for(var r=0,n=t.prepends;r<n.length;r++){var i=n[r];if(e.isUnparsedSource(i)&&i.syntheticReferences)for(var a=0,o=i.syntheticReferences;a<o.length;a++){Pe(o[a]),or()}}}(r);for(var s=0,c=r.prepends;s<c.length;s++){var u=c[s];or();var l=y.getTextPos(),_=G&&G.sections;if(_&&(G.sections=[]),Ee(4,u,void 0),G){var d=G.sections;G.sections=_,u.oldFileOfCurrentEmit?(a=G.sections).push.apply(a,d):(d.forEach((function(t){return e.Debug.assert(e.isBundleFileTextLike(t))})),G.sections.push({pos:l,end:y.getTextPos(),kind:"prepend",data:Q(u.fileName),texts:d}))}}Y=ye();for(var p=0,f=r.sourceFiles;p<f.length;p++){var g=f[p];Ee(0,g,g)}if(G&&r.sourceFiles.length&&xe(y.getTextPos())){var m=function(t){for(var r,n=new e.Set,i=0;i<t.sourceFiles.length;i++){for(var a=t.sourceFiles[i],o=void 0,s=0,c=0,u=a.statements;c<u.length;c++){var l=u[c];if(!e.isPrologueDirective(l))break;n.has(l.expression.text)||(n.add(l.expression.text),(o||(o=[])).push({pos:l.pos,end:l.end,expression:{pos:l.expression.pos,end:l.expression.end,text:l.expression.text}}),s=s<l.end?l.end:s)}o&&(r||(r=[])).push({file:i,text:a.text.substring(0,s),directives:o})}return r}(r);m&&(G.sources||(G.sources={}),G.sources.prologues=m);var v=function(r){var n;if(V===e.ModuleKind.None||t.noEmitHelpers)return;for(var i=new e.Map,a=0,o=r.sourceFiles;a<o.length;a++){var s=o[a],c=void 0!==e.getExternalHelpersModuleName(s),u=He(s);if(u)for(var l=0,_=u;l<_.length;l++){var d=_[l];d.scoped||c||i.get(d.name)||(i.set(d.name,!0),(n||(n=[])).push(d.name))}}return n}(r);v&&(G.sources||(G.sources={}),G.sources.helpers=v)}Ae(),y=o}function Se(e,t,r){h=!0;var n=y;Ne(t,r),Pt(e),Ft(e),Ee(0,e,e),Ae(),y=n}function Te(){return v||(v=e.createTextWriter(K))}function Ce(){var e=v.getText();return v.clear(),e}function Ee(e,t,r){r&&ke(r),Re(e,t,void 0)}function ke(e){i=e,E=void 0,k=void 0,e&&vn(e)}function Ne(r,n){r&&t.omitTrailingSemicolon&&(r=e.getTrailingSemicolonDeferringWriter(r)),b=n,$=!(y=r)||!b}function Ae(){a=[],o=[],s=new e.Set,c=[],u=new e.Map,l=[],_=0,d=[],p=0,f=[],i=void 0,E=void 0,k=void 0,Ne(void 0,void 0)}function Fe(){return E||(E=e.getLineStarts(e.Debug.checkDefined(i)))}function Pe(e,t){if(void 0!==e){var r=he(e);Re(4,e,t),be(r)}}function we(e){void 0!==e&&Re(2,e,void 0)}function Ie(e,t){void 0!==e&&Re(1,e,t)}function Oe(t){Re(e.isStringLiteral(t)?6:4,t)}function Me(t){W&&134217728&e.getEmitFlags(t)&&(W=!1)}function Le(e){W=e}function Re(e,t,r){A=r,Je(0,e,t)(e,t),A=void 0}function Be(t){return!oe&&!e.isSourceFile(t)}function je(t){return!($||e.isSourceFile(t)||e.isInJsonFile(t)||e.isUnparsedSource(t)||e.isUnparsedPrepend(t))}function Je(t,r,n){switch(t){case 0:if(w!==e.noEmitNotification&&(!I||I(n)))return Ue;case 1:if(M!==e.noEmitSubstitution&&(N=M(r,n)||n)!==n)return A&&(N=A(N)),qe;case 2:if(Be(n))return Kr;case 3:if(je(n))return dn;case 4:return Ke;default:return e.Debug.assertNever(t)}}function ze(e,t,r){return Je(e+1,t,r)}function Ue(e,t){var r=ze(0,e,t);w(e,t,r)}function Ke(e,t){if(null==L||L(t),W){var r=W;Me(t),Ve(e,t),Le(r)}else Ve(e,t);null==R||R(t),A=void 0}function Ve(t,r,n){if(void 0===n&&(n=!0),n){var a=e.getSnippetElement(r);if(a)return function(t,r,n){switch(n.kind){case 1:!function(e,t,r){ar("${".concat(r.order,":")),Ve(e,t,!1),ar("}")}(t,r,n);break;case 0:!function(t,r,n){e.Debug.assert(239===r.kind,"A tab stop cannot be attached to a node of kind ".concat(e.Debug.formatSyntaxKind(r.kind),".")),e.Debug.assert(5!==t,"A tab stop cannot be attached to an embedded statement."),ar("$".concat(n.order))}(t,r,n)}}(t,r,a)}if(0===t)return Ct(e.cast(r,e.isSourceFile));if(2===t)return Xe(e.cast(r,e.isIdentifier));if(6===t)return Ge(e.cast(r,e.isStringLiteral),!0);if(3===t)return function(e){Pe(e.name),nr(),$t("in"),nr(),Pe(e.constraint)}(e.cast(r,e.isTypeParameterDeclaration));if(5===t)return e.Debug.assertNode(r,e.isEmptyStatement),tt(!0);if(4===t){switch(r.kind){case 15:case 16:case 17:return Ge(r,!1);case 79:return Xe(r);case 80:return Ye(r);case 163:return function(e){(function(e){79===e.kind?Ie(e):Pe(e)})(e.left),Yt("."),Pe(e.right)}(r);case 164:return function(e){Yt("["),Ie(e.expression,le.parenthesizeExpressionOfComputedPropertyName),Yt("]")}(r);case 165:return function(e){Ot(e,e.modifiers),Pe(e.name),e.constraint&&(nr(),$t("extends"),nr(),Pe(e.constraint));e.default&&(nr(),er("="),nr(),Pe(e.default))}(r);case 166:return function(e){It(e,e.modifiers),Pe(e.dotDotDotToken),wt(e.name,tr),Pe(e.questionToken),e.parent&&320===e.parent.kind&&!e.name?Pe(e.type):Mt(e.type);Lt(e.initializer,e.type?e.type.end:e.questionToken?e.questionToken.end:e.name?e.name.end:e.modifiers?e.modifiers.end:e.pos,e,le.parenthesizeExpressionForDisallowedComma)}(r);case 167:return l=r,Yt("@"),void Ie(l.expression,le.parenthesizeLeftSideOfAccess);case 168:return function(e){Ot(e,e.modifiers),wt(e.name,ir),Pe(e.questionToken),Mt(e.type),Zt()}(r);case 169:return function(e){It(e,e.modifiers),Pe(e.name),Pe(e.questionToken),Pe(e.exclamationToken),Mt(e.type),Lt(e.initializer,e.type?e.type.end:e.questionToken?e.questionToken.end:e.name.end,e),Zt()}(r);case 170:return function(e){Nr(e),Ot(e,e.modifiers),Pe(e.name),Pe(e.questionToken),zt(e,e.typeParameters),Ut(e,e.parameters),Mt(e.type),Zt(),Ar(e)}(r);case 171:return function(e){It(e,e.modifiers),Pe(e.asteriskToken),Pe(e.name),Pe(e.questionToken),lt(e,_t)}(r);case 172:return function(e){$t("static"),dt(e.body)}(r);case 173:return function(e){Ot(e,e.modifiers),$t("constructor"),lt(e,_t)}(r);case 174:case 175:return function(e){It(e,e.modifiers),$t(174===e.kind?"get":"set"),nr(),Pe(e.name),lt(e,_t)}(r);case 176:return function(e){Nr(e),zt(e,e.typeParameters),Ut(e,e.parameters),Mt(e.type),Zt(),Ar(e)}(r);case 177:return function(e){Nr(e),$t("new"),nr(),zt(e,e.typeParameters),Ut(e,e.parameters),Mt(e.type),Zt(),Ar(e)}(r);case 178:return function(e){Ot(e,e.modifiers),t=e,r=e.parameters,qt(t,r,8848),Mt(e.type),Zt();var t,r}(r);case 179:return function(e){e.assertsModifier&&(Pe(e.assertsModifier),nr());Pe(e.parameterName),e.type&&(nr(),$t("is"),nr(),Pe(e.type))}(r);case 180:return function(e){Pe(e.typeName),Jt(e,e.typeArguments)}(r);case 181:return function(e){Nr(e),zt(e,e.typeParameters),Kt(e,e.parameters),nr(),Yt("=>"),nr(),Pe(e.type),Ar(e)}(r);case 182:return function(e){Nr(e),Ot(e,e.modifiers),$t("new"),nr(),zt(e,e.typeParameters),Ut(e,e.parameters),nr(),Yt("=>"),nr(),Pe(e.type),Ar(e)}(r);case 183:return function(e){$t("typeof"),nr(),Pe(e.exprName),Jt(e,e.typeArguments)}(r);case 184:return function(t){Yt("{");var r=1&e.getEmitFlags(t)?768:32897;qt(t,t.members,524288|r),Yt("}")}(r);case 185:return function(e){Pe(e.elementType,le.parenthesizeNonArrayTypeOfPostfixType),Yt("["),Yt("]")}(r);case 186:return function(t){it(22,t.pos,Yt,t);var r=1&e.getEmitFlags(t)?528:657;qt(t,t.elements,524288|r,le.parenthesizeElementTypeOfTupleType),it(23,t.elements.end,Yt,t)}(r);case 187:return function(e){Pe(e.type,le.parenthesizeTypeOfOptionalType),Yt("?")}(r);case 189:return function(e){qt(e,e.types,516,le.parenthesizeConstituentTypeOfUnionType)}(r);case 190:return function(e){qt(e,e.types,520,le.parenthesizeConstituentTypeOfIntersectionType)}(r);case 191:return function(e){Pe(e.checkType,le.parenthesizeCheckTypeOfConditionalType),nr(),$t("extends"),nr(),Pe(e.extendsType,le.parenthesizeExtendsTypeOfConditionalType),nr(),Yt("?"),nr(),Pe(e.trueType),nr(),Yt(":"),nr(),Pe(e.falseType)}(r);case 192:return function(e){$t("infer"),nr(),Pe(e.typeParameter)}(r);case 193:return function(e){Yt("("),Pe(e.type),Yt(")")}(r);case 230:return $e(r);case 194:return void $t("this");case 195:return function(e){_r(e.operator,$t),nr();var t=146===e.operator?le.parenthesizeOperandOfReadonlyTypeOperator:le.parenthesizeOperandOfTypeOperator;Pe(e.type,t)}(r);case 196:return function(e){Pe(e.objectType,le.parenthesizeNonArrayTypeOfPostfixType),Yt("["),Pe(e.indexType),Yt("]")}(r);case 197:return function(t){var r=e.getEmitFlags(t);Yt("{"),1&r?nr():(or(),sr());t.readonlyToken&&(Pe(t.readonlyToken),146!==t.readonlyToken.kind&&$t("readonly"),nr());Yt("["),Re(3,t.typeParameter),t.nameType&&(nr(),$t("as"),nr(),Pe(t.nameType));Yt("]"),t.questionToken&&(Pe(t.questionToken),57!==t.questionToken.kind&&Yt("?"));Yt(":"),nr(),Pe(t.type),Zt(),1&r?nr():(or(),cr());qt(t,t.members,2),Yt("}")}(r);case 198:return function(e){Ie(e.literal)}(r);case 199:return function(e){Pe(e.dotDotDotToken),Pe(e.name),Pe(e.questionToken),it(58,e.name.end,Yt,e),nr(),Pe(e.type)}(r);case 200:return function(e){Pe(e.head),qt(e,e.templateSpans,262144)}(r);case 201:return function(e){Pe(e.type),Pe(e.literal)}(r);case 202:return function(e){e.isTypeOf&&($t("typeof"),nr());if($t("import"),Yt("("),Pe(e.argument),e.assertions){Yt(","),nr(),Yt("{"),nr(),$t("assert"),Yt(":"),nr();var t=e.assertions.assertClause.elements;qt(e.assertions.assertClause,t,526226),nr(),Yt("}")}Yt(")"),e.qualifier&&(Yt("."),Pe(e.qualifier));Jt(e,e.typeArguments)}(r);case 203:return function(e){Yt("{"),qt(e,e.elements,525136),Yt("}")}(r);case 204:return function(e){Yt("["),qt(e,e.elements,524880),Yt("]")}(r);case 205:return function(e){Pe(e.dotDotDotToken),e.propertyName&&(Pe(e.propertyName),Yt(":"),nr());Pe(e.name),Lt(e.initializer,e.name.end,e,le.parenthesizeExpressionForDisallowedComma)}(r);case 236:return function(e){Ie(e.expression),Pe(e.literal)}(r);case 237:return void Zt();case 238:return function(e){et(e,!e.multiLine&&Tr(e))}(r);case 240:return function(e){Ot(e,e.modifiers),Pe(e.declarationList),Zt()}(r);case 239:return tt(!1);case 241:return function(t){Ie(t.expression,le.parenthesizeExpressionOfExpressionStatement),i&&e.isJsonSourceFile(i)&&!e.nodeIsSynthesized(t.expression)||Zt()}(r);case 242:return function(e){var t=it(99,e.pos,$t,e);nr(),it(20,t,Yt,e),Ie(e.expression),it(21,e.expression.end,Yt,e),jt(e,e.thenStatement),e.elseStatement&&(dr(e,e.thenStatement,e.elseStatement),it(91,e.thenStatement.end,$t,e),242===e.elseStatement.kind?(nr(),Pe(e.elseStatement)):jt(e,e.elseStatement))}(r);case 243:return function(t){it(90,t.pos,$t,t),jt(t,t.statement),e.isBlock(t.statement)&&!W?nr():dr(t,t.statement,t.expression);rt(t,t.statement.end),Zt()}(r);case 244:return function(e){rt(e,e.pos),jt(e,e.statement)}(r);case 245:return function(e){var t=it(97,e.pos,$t,e);nr();var r=it(20,t,Yt,e);nt(e.initializer),r=it(26,e.initializer?e.initializer.end:r,Yt,e),Bt(e.condition),r=it(26,e.condition?e.condition.end:r,Yt,e),Bt(e.incrementor),it(21,e.incrementor?e.incrementor.end:r,Yt,e),jt(e,e.statement)}(r);case 246:return function(e){var t=it(97,e.pos,$t,e);nr(),it(20,t,Yt,e),nt(e.initializer),nr(),it(101,e.initializer.end,$t,e),nr(),Ie(e.expression),it(21,e.expression.end,Yt,e),jt(e,e.statement)}(r);case 247:return function(e){var t=it(97,e.pos,$t,e);nr(),function(e){e&&(Pe(e),nr())}(e.awaitModifier),it(20,t,Yt,e),nt(e.initializer),nr(),it(162,e.initializer.end,$t,e),nr(),Ie(e.expression),it(21,e.expression.end,Yt,e),jt(e,e.statement)}(r);case 248:return function(e){it(86,e.pos,$t,e),Rt(e.label),Zt()}(r);case 249:return function(e){it(81,e.pos,$t,e),Rt(e.label),Zt()}(r);case 250:return function(e){it(105,e.pos,$t,e),Bt(e.expression&&st(e.expression),st),Zt()}(r);case 251:return function(e){var t=it(116,e.pos,$t,e);nr(),it(20,t,Yt,e),Ie(e.expression),it(21,e.expression.end,Yt,e),jt(e,e.statement)}(r);case 252:return function(e){var t=it(107,e.pos,$t,e);nr(),it(20,t,Yt,e),Ie(e.expression),it(21,e.expression.end,Yt,e),nr(),Pe(e.caseBlock)}(r);case 253:return function(e){Pe(e.label),it(58,e.label.end,Yt,e),nr(),Pe(e.statement)}(r);case 254:return function(e){it(109,e.pos,$t,e),Bt(st(e.expression),st),Zt()}(r);case 255:return function(e){it(111,e.pos,$t,e),nr(),Pe(e.tryBlock),e.catchClause&&(dr(e,e.tryBlock,e.catchClause),Pe(e.catchClause));e.finallyBlock&&(dr(e,e.catchClause||e.tryBlock,e.finallyBlock),it(96,(e.catchClause||e.tryBlock).end,$t,e),nr(),Pe(e.finallyBlock))}(r);case 256:return function(e){ur(87,e.pos,$t),Zt()}(r);case 257:return function(e){var t,r,n,i,a;Pe(e.name),Pe(e.exclamationToken),Mt(e.type),Lt(e.initializer,null!==(a=null!==(r=null===(t=e.type)||void 0===t?void 0:t.end)&&void 0!==r?r:null===(i=null===(n=e.name.emitNode)||void 0===n?void 0:n.typeNode)||void 0===i?void 0:i.end)&&void 0!==a?a:e.name.end,e,le.parenthesizeExpressionForDisallowedComma)}(r);case 258:return function(t){$t(e.isLet(t)?"let":e.isVarConst(t)?"const":"var"),nr(),qt(t,t.declarations,528)}(r);case 259:return function(e){ut(e)}(r);case 260:return function(e){gt(e)}(r);case 261:return function(e){Ot(e,e.modifiers),$t("interface"),nr(),Pe(e.name),zt(e,e.typeParameters),qt(e,e.heritageClauses,512),nr(),Yt("{"),qt(e,e.members,129),Yt("}")}(r);case 262:return function(e){Ot(e,e.modifiers),$t("type"),nr(),Pe(e.name),zt(e,e.typeParameters),nr(),Yt("="),nr(),Pe(e.type),Zt()}(r);case 263:return function(e){Ot(e,e.modifiers),$t("enum"),nr(),Pe(e.name),nr(),Yt("{"),qt(e,e.members,145),Yt("}")}(r);case 264:return function(t){Ot(t,t.modifiers),1024&~t.flags&&($t(16&t.flags?"namespace":"module"),nr());Pe(t.name);var r=t.body;if(!r)return Zt();for(;r&&e.isModuleDeclaration(r);)Yt("."),Pe(r.name),r=r.body;nr(),Pe(r)}(r);case 265:return function(t){Nr(t),e.forEach(t.statements,Pr),et(t,Tr(t)),Ar(t)}(r);case 266:return function(e){it(18,e.pos,Yt,e),qt(e,e.clauses,129),it(19,e.clauses.end,Yt,e,!0)}(r);case 267:return function(e){var t=it(93,e.pos,$t,e);nr(),t=it(128,t,$t,e),nr(),t=it(143,t,$t,e),nr(),Pe(e.name),Zt()}(r);case 268:return function(e){Ot(e,e.modifiers),it(100,e.modifiers?e.modifiers.end:e.pos,$t,e),nr(),e.isTypeOnly&&(it(154,e.pos,$t,e),nr());Pe(e.name),nr(),it(63,e.name.end,Yt,e),nr(),function(e){79===e.kind?Ie(e):Pe(e)}(e.moduleReference),Zt()}(r);case 269:return function(e){Ot(e,e.modifiers),it(100,e.modifiers?e.modifiers.end:e.pos,$t,e),nr(),e.importClause&&(Pe(e.importClause),nr(),it(158,e.importClause.end,$t,e),nr());Ie(e.moduleSpecifier),e.assertClause&&Rt(e.assertClause);Zt()}(r);case 270:return function(e){e.isTypeOnly&&(it(154,e.pos,$t,e),nr());Pe(e.name),e.name&&e.namedBindings&&(it(27,e.name.end,Yt,e),nr());Pe(e.namedBindings)}(r);case 271:return function(e){var t=it(41,e.pos,Yt,e);nr(),it(128,t,$t,e),nr(),Pe(e.name)}(r);case 277:return function(e){var t=it(41,e.pos,Yt,e);nr(),it(128,t,$t,e),nr(),Pe(e.name)}(r);case 272:case 276:return function(e){mt(e)}(r);case 273:case 278:return function(e){yt(e)}(r);case 274:return function(e){var t=it(93,e.pos,$t,e);nr(),e.isExportEquals?it(63,t,er,e):it(88,t,$t,e);nr(),Ie(e.expression,e.isExportEquals?le.getParenthesizeRightSideOfBinaryForOperator(63):le.parenthesizeExpressionOfExportDefault),Zt()}(r);case 275:return function(e){Ot(e,e.modifiers);var t=it(93,e.pos,$t,e);nr(),e.isTypeOnly&&(t=it(154,t,$t,e),nr());e.exportClause?Pe(e.exportClause):t=it(41,t,Yt,e);if(e.moduleSpecifier){nr(),it(158,e.exportClause?e.exportClause.end:t,$t,e),nr(),Ie(e.moduleSpecifier)}e.assertClause&&Rt(e.assertClause);Zt()}(r);case 296:return function(e){it(130,e.pos,$t,e),nr();var t=e.elements;qt(e,t,526226)}(r);case 297:return function(t){Pe(t.name),Yt(":"),nr();var r=t.value;if(0==(512&e.getEmitFlags(r))){an(e.getCommentRange(r).pos)}Pe(r)}(r);case 279:case 322:case 333:case 334:case 336:case 337:case 338:case 339:case 352:case 356:case 355:return;case 280:return function(e){$t("require"),Yt("("),Ie(e.expression),Yt(")")}(r);case 11:return function(e){y.writeLiteral(e.text)}(r);case 283:case 286:return function(t){if(Yt("<"),e.isJsxOpeningElement(t)){var r=br(t.tagName,t);vt(t.tagName),Jt(t,t.typeArguments),t.attributes.properties&&t.attributes.properties.length>0&&nr(),Pe(t.attributes),xr(t.attributes,t),gr(r)}Yt(">")}(r);case 284:case 287:return function(t){Yt("</"),e.isJsxClosingElement(t)&&vt(t.tagName);Yt(">")}(r);case 288:return function(e){Pe(e.name),function(e,t,r,n){r&&(t(e),n(r))}("=",Yt,e.initializer,Oe)}(r);case 289:return function(e){qt(e,e.properties,262656)}(r);case 290:return function(e){Yt("{..."),Ie(e.expression),Yt("}")}(r);case 291:return function(t){var r;if(t.expression||!oe&&!e.nodeIsSynthesized(t)&&(o=t.pos,function(t){var r=!1;return e.forEachTrailingCommentRange((null==i?void 0:i.text)||"",t+1,(function(){return r=!0})),r}(o)||function(t){var r=!1;return e.forEachLeadingCommentRange((null==i?void 0:i.text)||"",t+1,(function(){return r=!0})),r}(o))){var n=i&&!e.nodeIsSynthesized(t)&&e.getLineAndCharacterOfPosition(i,t.pos).line!==e.getLineAndCharacterOfPosition(i,t.end).line;n&&y.increaseIndent();var a=it(18,t.pos,Yt,t);Pe(t.dotDotDotToken),Ie(t.expression),it(19,(null===(r=t.expression)||void 0===r?void 0:r.end)||a,Yt,t),n&&y.decreaseIndent()}var o}(r);case 292:return function(e){it(82,e.pos,$t,e),nr(),Ie(e.expression,le.parenthesizeExpressionForDisallowedComma),ht(e,e.statements,e.expression.end)}(r);case 293:return function(e){var t=it(88,e.pos,$t,e);ht(e,e.statements,t)}(r);case 294:return function(e){nr(),_r(e.token,$t),nr(),qt(e,e.types,528)}(r);case 295:return function(e){var t=it(83,e.pos,$t,e);nr(),e.variableDeclaration&&(it(20,t,Yt,e),Pe(e.variableDeclaration),it(21,e.variableDeclaration.end,Yt,e),nr());Pe(e.block)}(r);case 299:return function(t){Pe(t.name),Yt(":"),nr();var r=t.initializer;if(0==(512&e.getEmitFlags(r))){an(e.getCommentRange(r).pos)}Ie(r,le.parenthesizeExpressionForDisallowedComma)}(r);case 300:return function(e){Pe(e.name),e.objectAssignmentInitializer&&(nr(),Yt("="),nr(),Ie(e.objectAssignmentInitializer,le.parenthesizeExpressionForDisallowedComma))}(r);case 301:return function(e){e.expression&&(it(25,e.pos,Yt,e),Ie(e.expression,le.parenthesizeExpressionForDisallowedComma))}(r);case 302:return function(e){Pe(e.name),Lt(e.initializer,e.name.end,e,le.parenthesizeExpressionForDisallowedComma)}(r);case 303:return Qe(r);case 310:case 304:return function(e){for(var t=0,r=e.texts;t<r.length;t++){var n=r[t];or(),Pe(n)}}(r);case 305:case 306:return c=r,u=ye(),Qe(c),void(G&&ve(u,y.getTextPos(),305===c.kind?"text":"internal"));case 307:return function(t){var r=ye();if(Qe(t),G){var n=e.clone(t.section);n.pos=r,n.end=y.getTextPos(),G.sections.push(n)}}(r);case 308:return Ct(r);case 309:return e.Debug.fail("Bundles should be printed using printBundle");case 311:return e.Debug.fail("InputFiles should not be printed");case 312:return Tt(r);case 313:return function(e){nr(),Yt("{"),Pe(e.name),Yt("}")}(r);case 315:return Yt("*");case 316:return Yt("?");case 317:return function(e){Yt("?"),Pe(e.type)}(r);case 318:return function(e){Yt("!"),Pe(e.type)}(r);case 319:return function(e){Pe(e.type),Yt("=")}(r);case 320:return function(e){$t("function"),Ut(e,e.parameters),Yt(":"),Pe(e.type)}(r);case 188:case 321:return function(e){Yt("..."),Pe(e.type)}(r);case 323:return function(t){if(H("/**"),t.comment){var r=e.getTextOfJSDocComment(t.comment);if(r)for(var n=0,i=r.split(/\r\n?|\n/g);n<i.length;n++){var a=i[n];or(),nr(),Yt("*"),nr(),H(a)}}t.tags&&(1!==t.tags.length||346!==t.tags[0].kind||t.comment?qt(t,t.tags,33):(nr(),Pe(t.tags[0])));nr(),H("*/")}(r);case 325:return bt(r);case 326:return xt(r);case 330:case 335:case 340:return Dt((s=r).tagName),void St(s.comment);case 331:case 332:return function(e){Dt(e.tagName),nr(),Yt("{"),Pe(e.class),Yt("}"),St(e.comment)}(r);case 341:return function(e){Dt(e.tagName),e.name&&(nr(),Pe(e.name));St(e.comment),xt(e.typeExpression)}(r);case 343:case 350:return function(e){Dt(e.tagName),Tt(e.typeExpression),nr(),e.isBracketed&&Yt("[");Pe(e.name),e.isBracketed&&Yt("]");St(e.comment)}(r);case 342:case 344:case 345:case 346:return function(e){Dt(e.tagName),Tt(e.typeExpression),St(e.comment)}(r);case 347:return function(e){Dt(e.tagName),Tt(e.constraint),nr(),qt(e,e.typeParameters,528),St(e.comment)}(r);case 348:return function(e){Dt(e.tagName),e.typeExpression&&(312===e.typeExpression.kind?Tt(e.typeExpression):(nr(),Yt("{"),H("Object"),e.typeExpression.isArrayType&&(Yt("["),Yt("]")),Yt("}")));e.fullName&&(nr(),Pe(e.fullName));St(e.comment),e.typeExpression&&325===e.typeExpression.kind&&bt(e.typeExpression)}(r);case 349:return function(e){Dt(e.tagName),Pe(e.name),St(e.comment)}(r)}if(e.isExpression(r)&&(t=1,M!==e.noEmitSubstitution)){var o=M(t,r)||r;o!==r&&(r=o,A&&(r=A(r)))}}var s,c,u,l;if(1===t)switch(r.kind){case 8:case 9:return function(e){Ge(e,!1)}(r);case 10:case 13:case 14:return Ge(r,!1);case 79:return Xe(r);case 80:return Ye(r);case 206:return function(e){var t=e.elements,r=e.multiLine?65536:0;Wt(e,t,8914|r,le.parenthesizeExpressionForDisallowedComma)}(r);case 207:return function(t){e.forEach(t.properties,wr);var r=65536&e.getEmitFlags(t);r&&sr();var n=t.multiLine?65536:0,a=i&&i.languageVersion>=1&&!e.isJsonSourceFile(i)?64:0;qt(t,t.properties,526226|a|n),r&&cr()}(r);case 208:return function(t){Ie(t.expression,le.parenthesizeLeftSideOfAccess);var r=t.questionDotToken||e.setTextRangePosEnd(e.factory.createToken(24),t.expression.end,t.name.pos),n=Sr(t,t.expression,r),i=Sr(t,r,t.name);fr(n,!1);var a=28!==r.kind&&function(t){if(t=e.skipPartiallyEmittedExpressions(t),e.isNumericLiteral(t)){var r=kr(t,!0,!1);return!t.numericLiteralFlags&&!e.stringContains(r,e.tokenToString(24))}if(e.isAccessExpression(t)){var n=e.getConstantValue(t);return"number"==typeof n&&isFinite(n)&&Math.floor(n)===n}}(t.expression)&&!y.hasTrailingComment()&&!y.hasTrailingWhitespace();a&&Yt(".");t.questionDotToken?Pe(r):it(r.kind,t.expression.end,Yt,t);fr(i,!1),Pe(t.name),gr(n,i)}(r);case 209:return function(e){Ie(e.expression,le.parenthesizeLeftSideOfAccess),Pe(e.questionDotToken),it(22,e.expression.end,Yt,e),Ie(e.argumentExpression),it(23,e.argumentExpression.end,Yt,e)}(r);case 210:return function(t){var r=536870912&e.getEmitFlags(t);r&&(Yt("("),Qt("0"),Yt(","),nr());Ie(t.expression,le.parenthesizeLeftSideOfAccess),r&&Yt(")");Pe(t.questionDotToken),Jt(t,t.typeArguments),Wt(t,t.arguments,2576,le.parenthesizeExpressionForDisallowedComma)}(r);case 211:return function(e){it(103,e.pos,$t,e),nr(),Ie(e.expression,le.parenthesizeExpressionOfNew),Jt(e,e.typeArguments),Wt(e,e.arguments,18960,le.parenthesizeExpressionForDisallowedComma)}(r);case 212:return function(t){var r=536870912&e.getEmitFlags(t);r&&(Yt("("),Qt("0"),Yt(","),nr());Ie(t.tag,le.parenthesizeLeftSideOfAccess),r&&Yt(")");Jt(t,t.typeArguments),nr(),Ie(t.template)}(r);case 213:return function(e){Yt("<"),Pe(e.type),Yt(">"),Ie(e.expression,le.parenthesizeOperandOfPrefixUnary)}(r);case 214:return function(e){var t=it(20,e.pos,Yt,e),r=br(e.expression,e);Ie(e.expression,void 0),xr(e.expression,e),gr(r),it(21,e.expression?e.expression.end:t,Yt,e)}(r);case 215:return function(e){Ir(e.name),ut(e)}(r);case 216:return function(e){Ot(e,e.modifiers),lt(e,Ze)}(r);case 217:return function(e){it(89,e.pos,$t,e),nr(),Ie(e.expression,le.parenthesizeOperandOfPrefixUnary)}(r);case 218:return function(e){it(112,e.pos,$t,e),nr(),Ie(e.expression,le.parenthesizeOperandOfPrefixUnary)}(r);case 219:return function(e){it(114,e.pos,$t,e),nr(),Ie(e.expression,le.parenthesizeOperandOfPrefixUnary)}(r);case 220:return function(e){it(133,e.pos,$t,e),nr(),Ie(e.expression,le.parenthesizeOperandOfPrefixUnary)}(r);case 221:return function(e){_r(e.operator,er),function(e){var t=e.operand;return 221===t.kind&&(39===e.operator&&(39===t.operator||45===t.operator)||40===e.operator&&(40===t.operator||46===t.operator))}(e)&&nr();Ie(e.operand,le.parenthesizeOperandOfPrefixUnary)}(r);case 222:return function(e){Ie(e.operand,le.parenthesizeOperandOfPostfixUnary),_r(e.operator,er)}(r);case 223:return de(r);case 224:return function(e){var t=Sr(e,e.condition,e.questionToken),r=Sr(e,e.questionToken,e.whenTrue),n=Sr(e,e.whenTrue,e.colonToken),i=Sr(e,e.colonToken,e.whenFalse);Ie(e.condition,le.parenthesizeConditionOfConditionalExpression),fr(t,!0),Pe(e.questionToken),fr(r,!0),Ie(e.whenTrue,le.parenthesizeBranchOfConditionalExpression),gr(t,r),fr(n,!0),Pe(e.colonToken),fr(i,!0),Ie(e.whenFalse,le.parenthesizeBranchOfConditionalExpression),gr(n,i)}(r);case 225:return function(e){Pe(e.head),qt(e,e.templateSpans,262144)}(r);case 226:return function(e){it(125,e.pos,$t,e),Pe(e.asteriskToken),Bt(e.expression&&st(e.expression),ct)}(r);case 227:return function(e){it(25,e.pos,Yt,e),Ie(e.expression,le.parenthesizeExpressionForDisallowedComma)}(r);case 228:return function(e){Ir(e.name),gt(e)}(r);case 229:case 352:case 355:case 356:return;case 231:return function(e){Ie(e.expression,void 0),e.type&&(nr(),$t("as"),nr(),Pe(e.type))}(r);case 232:return function(e){Ie(e.expression,le.parenthesizeLeftSideOfAccess),er("!")}(r);case 230:return $e(r);case 235:return function(e){Ie(e.expression,void 0),e.type&&(nr(),$t("satisfies"),nr(),Pe(e.type))}(r);case 233:return function(e){ur(e.keywordToken,e.pos,Yt),Yt("."),Pe(e.name)}(r);case 234:return e.Debug.fail("SyntheticExpression should never be printed.");case 281:return function(e){Pe(e.openingElement),qt(e,e.children,262144),Pe(e.closingElement)}(r);case 282:return function(e){Yt("<"),vt(e.tagName),Jt(e,e.typeArguments),nr(),Pe(e.attributes),Yt("/>")}(r);case 285:return function(e){Pe(e.openingFragment),qt(e,e.children,262144),Pe(e.closingFragment)}(r);case 351:return e.Debug.fail("SyntaxList should not be printed");case 353:return function(t){var r=e.getEmitFlags(t);512&r||t.pos===t.expression.pos||an(t.expression.pos);Ie(t.expression),1024&r||t.end===t.expression.end||rn(t.expression.end)}(r);case 354:return function(e){Wt(e,e.elements,528,void 0)}(r);case 357:return e.Debug.fail("SyntheticReferenceExpression should not be printed")}return e.isKeyword(r.kind)?lr(r,$t):e.isTokenKind(r.kind)?lr(r,Yt):void e.Debug.fail("Unhandled SyntaxKind: ".concat(e.Debug.formatSyntaxKind(r.kind),"."))}function qe(t,r){var n=ze(1,t,r);e.Debug.assertIsDefined(N),r=N,N=void 0,n(t,r)}function We(r){var n=!1,a=309===r.kind?r:void 0;if(!a||V!==e.ModuleKind.None){for(var o=a?a.prepends.length:0,s=a?a.sourceFiles.length+o:1,c=0;c<s;c++){var u=a?c<o?a.prepends[c]:a.sourceFiles[c-o]:r,l=e.isSourceFile(u)?u:e.isUnparsedSource(u)?void 0:i,_=t.noEmitHelpers||!!l&&e.hasRecordedExternalHelpers(l),d=(e.isSourceFile(u)||e.isUnparsedSource(u))&&!h,p=e.isUnparsedSource(u)?u.helpers:He(u);if(p)for(var f=0,g=p;f<g.length;f++){var m=g[f];if(m.scoped){if(a)continue}else{if(_)continue;if(d){if(q.get(m.name))continue;q.set(m.name,!0)}}var v=ye();"string"==typeof m.text?pr(m.text):pr(m.text(Ur)),G&&G.sections.push({pos:v,end:y.getTextPos(),kind:"emitHelpers",data:m.name}),n=!0}}return n}}function He(t){var r=e.getEmitHelpers(t);return r&&e.stableSort(r,e.compareEmitHelpers)}function Ge(r,n){var i,a=kr(r,t.neverAsciiEscape,n);!t.sourceMap&&!t.inlineSourceMap||10!==r.kind&&!e.isTemplateLiteralKind(r.kind)?(i=a,y.writeStringLiteral(i)):Qt(a)}function Qe(e){y.rawWrite(e.parent.text.substring(e.pos,e.end))}function Xe(e){(e.symbol?Xt:H)(Er(e,!1),e.symbol),qt(e,e.typeArguments,53776)}function Ye(e){(e.symbol?Xt:H)(Er(e,!1),e.symbol)}function Ze(e){zt(e,e.typeParameters),Kt(e,e.parameters),Mt(e.type),nr(),Pe(e.equalsGreaterThanToken)}function $e(e){Ie(e.expression,le.parenthesizeLeftSideOfAccess),Jt(e,e.typeArguments)}function et(t,r){it(18,t.pos,Yt,t);var n=r||1&e.getEmitFlags(t)?768:129;qt(t,t.statements,n),it(19,t.statements.end,Yt,t,!!(1&n))}function tt(e){e?Yt(";"):Zt()}function rt(e,t){var r=it(115,t,$t,e);nr(),it(20,r,Yt,e),Ie(e.expression),it(21,e.expression.end,Yt,e)}function nt(e){void 0!==e&&(258===e.kind?Pe(e):Ie(e))}function it(t,r,n,a,o){var s=e.getParseTreeNode(a),c=s&&s.kind===a.kind,u=r;if(c&&i&&(r=e.skipTrivia(i.text,r)),c&&a.pos!==u){var l=o&&i&&!e.positionsAreOnSameLine(u,r,i);l&&sr(),rn(u),l&&cr()}if(r=_r(t,n,r),c&&a.end!==r){var _=291===a.kind;an(r,!_,_)}return r}function at(e){return 2===e.kind||!!e.hasTrailingNewLine}function ot(t){return!!i&&(!!e.some(e.getLeadingCommentRanges(i.text,t.pos),at)||(!!e.some(e.getSyntheticLeadingComments(t),at)||!!e.isPartiallyEmittedExpression(t)&&(!(t.pos===t.expression.pos||!e.some(e.getTrailingCommentRanges(i.text,t.expression.pos),at))||ot(t.expression))))}function st(t){if(!oe&&e.isPartiallyEmittedExpression(t)&&ot(t)){var r=e.getParseTreeNode(t);if(r&&e.isParenthesizedExpression(r)){var n=e.factory.createParenthesizedExpression(t.expression);return e.setOriginalNode(n,t),e.setTextRange(n,r),n}return e.factory.createParenthesizedExpression(t)}return t}function ct(e){return st(le.parenthesizeExpressionForDisallowedComma(e))}function ut(e){Ot(e,e.modifiers),$t("function"),Pe(e.asteriskToken),nr(),we(e.name),lt(e,_t)}function lt(t,r){var n=t.body;if(n)if(e.isBlock(n)){var i=65536&e.getEmitFlags(t);i&&sr(),Nr(t),e.forEach(t.parameters,Pr),Pr(t.body),r(t),dt(n),Ar(t),i&&cr()}else r(t),nr(),Ie(n,le.parenthesizeConciseBodyOfArrowFunction);else r(t),Zt()}function _t(e){zt(e,e.typeParameters),Ut(e,e.parameters),Mt(e.type)}function dt(t){null==L||L(t),nr(),Yt("{"),sr();var r=function(t){if(1&e.getEmitFlags(t))return!0;if(t.multiLine)return!1;if(!e.nodeIsSynthesized(t)&&i&&!e.rangeIsOnSingleLine(t,i))return!1;if(mr(t,e.firstOrUndefined(t.statements),2)||vr(t,e.lastOrUndefined(t.statements),2,t.statements))return!1;for(var r,n=0,a=t.statements;n<a.length;n++){var o=a[n];if(yr(r,o,2)>0)return!1;r=o}return!0}(t)?pt:ft;Xr(t,t.statements,r),cr(),ur(19,t.statements.end,Yt,t),null==R||R(t)}function pt(e){ft(e,!0)}function ft(e,t){var r=Nt(e.statements),n=y.getTextPos();We(e),0===r&&n===y.getTextPos()&&t?(cr(),qt(e,e.statements,768),sr()):qt(e,e.statements,1,void 0,r)}function gt(t){e.forEach(t.members,wr),It(t,t.modifiers),$t("class"),t.name&&(nr(),we(t.name));var r=65536&e.getEmitFlags(t);r&&sr(),zt(t,t.typeParameters),qt(t,t.heritageClauses,0),nr(),Yt("{"),qt(t,t.members,129),Yt("}"),r&&cr()}function mt(e){Yt("{"),qt(e,e.elements,525136),Yt("}")}function yt(e){e.isTypeOnly&&($t("type"),nr()),e.propertyName&&(Pe(e.propertyName),nr(),it(128,e.propertyName.end,$t,e),nr()),Pe(e.name)}function vt(e){79===e.kind?Ie(e):Pe(e)}function ht(t,r,n){var a=163969;1===r.length&&(!i||e.nodeIsSynthesized(t)||e.nodeIsSynthesized(r[0])||e.rangeStartPositionsAreOnSameLine(t,r[0],i))?(ur(58,n,Yt,t),nr(),a&=-130):it(58,n,Yt,t),qt(t,r,a)}function bt(t){qt(t,e.factory.createNodeArray(t.jsDocPropertyTags),33)}function xt(t){t.typeParameters&&qt(t,e.factory.createNodeArray(t.typeParameters),33),t.parameters&&qt(t,e.factory.createNodeArray(t.parameters),33),t.type&&(or(),nr(),Yt("*"),nr(),Pe(t.type))}function Dt(e){Yt("@"),Pe(e)}function St(t){var r=e.getTextOfJSDocComment(t);r&&(nr(),H(r))}function Tt(e){e&&(nr(),Yt("{"),Pe(e.type),Yt("}"))}function Ct(t){or();var r=t.statements;0===r.length||!e.isPrologueDirective(r[0])||e.nodeIsSynthesized(r[0])?Xr(t,r,kt):kt(t)}function Et(t,r,n,a){if(t){var o=y.getTextPos();rr('/// <reference no-default-lib="true"/>'),G&&G.sections.push({pos:o,end:y.getTextPos(),kind:"no-default-lib"}),or()}if(i&&i.moduleName&&(rr('/// <amd-module name="'.concat(i.moduleName,'" />')),or()),i&&i.amdDependencies)for(var s=0,c=i.amdDependencies;s<c.length;s++){var u=c[s];u.name?rr('/// <amd-dependency name="'.concat(u.name,'" path="').concat(u.path,'" />')):rr('/// <amd-dependency path="'.concat(u.path,'" />')),or()}for(var l=0,_=r;l<_.length;l++){var d=_[l];o=y.getTextPos();rr('/// <reference path="'.concat(d.fileName,'" />')),G&&G.sections.push({pos:o,end:y.getTextPos(),kind:"reference",data:d.fileName}),or()}for(var p=0,f=n;p<f.length;p++){d=f[p],o=y.getTextPos();var g=d.resolutionMode&&d.resolutionMode!==(null==i?void 0:i.impliedNodeFormat)?'resolution-mode="'.concat(d.resolutionMode===e.ModuleKind.ESNext?"import":"require",'"'):"";rr('/// <reference types="'.concat(d.fileName,'" ').concat(g,"/>")),G&&G.sections.push({pos:o,end:y.getTextPos(),kind:d.resolutionMode?d.resolutionMode===e.ModuleKind.ESNext?"type-import":"type-require":"type",data:d.fileName}),or()}for(var m=0,v=a;m<v.length;m++){d=v[m],o=y.getTextPos();rr('/// <reference lib="'.concat(d.fileName,'" />')),G&&G.sections.push({pos:o,end:y.getTextPos(),kind:"lib",data:d.fileName}),or()}}function kt(t){var r=t.statements;Nr(t),e.forEach(t.statements,Pr),We(t);var n=e.findIndex(r,(function(t){return!e.isPrologueDirective(t)}));!function(e){e.isDeclarationFile&&Et(e.hasNoDefaultLib,e.referencedFiles,e.typeReferenceDirectives,e.libReferenceDirectives)}(t),qt(t,r,1,void 0,-1===n?r.length:n),Ar(t)}function Nt(t,r,n,i){for(var a=!!r,o=0;o<t.length;o++){var s=t[o];if(!e.isPrologueDirective(s))return o;if(!n||!n.has(s.expression.text)){a&&(a=!1,ke(r)),or();var c=y.getTextPos();Pe(s),i&&G&&G.sections.push({pos:c,end:y.getTextPos(),kind:"prologue",data:s.expression.text}),n&&n.add(s.expression.text)}}return t.length}function At(e,t){for(var r=0,n=e;r<n.length;r++){var i=n[r];if(!t.has(i.data)){or();var a=y.getTextPos();Pe(i),G&&G.sections.push({pos:a,end:y.getTextPos(),kind:"prologue",data:i.data}),t&&t.add(i.data)}}}function Ft(t){if(e.isSourceFile(t))Nt(t.statements,t);else{for(var r=new e.Set,n=0,i=t.prepends;n<i.length;n++){At(i[n].prologues,r)}for(var a=0,o=t.sourceFiles;a<o.length;a++){var s=o[a];Nt(s.statements,s,r,!0)}ke(void 0)}}function Pt(t){if(e.isSourceFile(t)||e.isUnparsedSource(t)){var r=e.getShebang(t.text);if(r)return rr(r),or(),!0}else{for(var n=0,i=t.prepends;n<i.length;n++){var a=i[n];if(e.Debug.assertNode(a,e.isUnparsedSource),Pt(a))return!0}for(var o=0,s=t.sourceFiles;o<s.length;o++){if(Pt(s[o]))return!0}}}function wt(e,t){if(e){var r=H;H=t,Pe(e),H=r}}function It(t,r){if(null==r?void 0:r.length){if(e.every(r,e.isModifier))return Ot(t,r);if(e.every(r,e.isDecorator))return void qt(t,r,2146305);null==B||B(r);for(var n=void 0,i=void 0,a=0,o=0;a<r.length;){for(;o<r.length;){var s=r[o];if(i=e.isDecorator(s)?"decorators":"modifiers",void 0===n)n=i;else if(i!==n)break;o++}var c={pos:-1,end:-1};0===a&&(c.pos=r.pos),o===r.length-1&&(c.end=r.end),Gt(Pe,t,r,"modifiers"===n?2359808:2146305,void 0,a,o-a,!1,c),a=o,n=i,o++}null==j||j(r)}}function Ot(e,t){qt(e,t,2359808)}function Mt(e){e&&(Yt(":"),nr(),Pe(e))}function Lt(e,t,r,n){e&&(nr(),it(63,t,er,r),nr(),Ie(e,n))}function Rt(e){e&&(nr(),Pe(e))}function Bt(e,t){e&&(nr(),Ie(e,t))}function jt(t,r){e.isBlock(r)||1&e.getEmitFlags(t)?(nr(),Pe(r)):(or(),sr(),e.isEmptyStatement(r)?Re(5,r):Pe(r),cr())}function Jt(e,t){qt(e,t,53776,_e)}function zt(t,r){if(e.isFunctionLike(t)&&t.typeArguments)return Jt(t,t.typeArguments);qt(t,r,53776)}function Ut(e,t){qt(e,t,2576)}function Kt(t,r){!function(t,r){var n=e.singleOrUndefined(r);return n&&n.pos===t.pos&&e.isArrowFunction(t)&&!t.type&&!e.some(t.modifiers)&&!e.some(t.typeParameters)&&!e.some(n.modifiers)&&!n.dotDotDotToken&&!n.questionToken&&!n.type&&!n.initializer&&e.isIdentifier(n.name)}(t,r)?Ut(t,r):qt(t,r,528)}function Vt(e){switch(60&e){case 0:break;case 16:Yt(",");break;case 4:nr(),Yt("|");break;case 32:nr(),Yt("*"),nr();break;case 8:nr(),Yt("&")}}function qt(e,t,r,n,i,a){Ht(Pe,e,t,r,n,i,a)}function Wt(e,t,r,n,i,a){Ht(Ie,e,t,r,n,i,a)}function Ht(t,r,a,o,s,c,u){if(void 0===c&&(c=0),void 0===u&&(u=a?a.length-c:0),!(void 0===a&&16384&o)){var l=void 0===a||c>=a.length||0===u;if(l&&32768&o)return null==B||B(a),void(null==j||j(a));15360&o&&(Yt(function(e){return n[15360&e][0]}(o)),l&&a&&an(a.pos,!0)),null==B||B(a),l?!(1&o)||W&&(!r||i&&e.rangeIsOnSingleLine(r,i))?256&o&&!(524288&o)&&nr():or():Gt(t,r,a,o,s,c,u,a.hasTrailingComma,a),null==j||j(a),15360&o&&(l&&a&&rn(a.end),Yt(function(e){return n[15360&e][1]}(o)))}}function Gt(t,r,n,i,a,o,s,c,u){var l=0==(262144&i),_=l,d=mr(r,n[o],i);d?(or(d),_=!1):256&i&&nr(),128&i&&sr();for(var p,f,g=function(e,t){return 1===e.length?S:"object"==typeof t?T:C}(t,a),y=!1,v=0;v<s;v++){var h=n[o+v];if(32&i)or(),Vt(i);else if(p){60&i&&p.end!==(r?r.end:-1)&&rn(p.end),Vt(i),be(f);var b=yr(p,h,i);b>0?(0==(131&i)&&(sr(),y=!0),or(b),_=!1):p&&512&i&&nr()}if(f=he(h),_)an(e.getCommentRange(h).pos);else _=l;m=h.pos,g(h,t,a,v),y&&(cr(),y=!1),p=h}var x=p?e.getEmitFlags(p):0,D=oe||!!(1024&x),E=c&&64&i&&16&i;E&&(p&&!D?it(27,p.end,Yt,p):Yt(",")),p&&(r?r.end:-1)!==p.end&&60&i&&!D&&rn(E&&(null==u?void 0:u.end)?u.end:p.end),128&i&&cr(),be(f);var k=vr(r,n[o+s-1],i,u);k?or(k):2097408&i&&nr()}function Qt(e){y.writeLiteral(e)}function Xt(e,t){y.writeSymbol(e,t)}function Yt(e){y.writePunctuation(e)}function Zt(){y.writeTrailingSemicolon(";")}function $t(e){y.writeKeyword(e)}function er(e){y.writeOperator(e)}function tr(e){y.writeParameter(e)}function rr(e){y.writeComment(e)}function nr(){y.writeSpace(" ")}function ir(e){y.writeProperty(e)}function ar(e){y.nonEscapingWrite?y.nonEscapingWrite(e):y.write(e)}function or(e){void 0===e&&(e=1);for(var t=0;t<e;t++)y.writeLine(t>0)}function sr(){y.increaseIndent()}function cr(){y.decreaseIndent()}function ur(t,r,n,i){return $?_r(t,n,r):function(t,r,n,i,a){if($||t&&e.isInJsonFile(t))return a(r,n,i);var o=t&&t.emitNode,s=o&&o.flags||0,c=o&&o.tokenSourceMapRanges&&o.tokenSourceMapRanges[r],u=c&&c.source||x;i=gn(u,c?c.pos:i),0==(128&s)&&i>=0&&yn(u,i);i=a(r,n,i),c&&(i=c.end);0==(256&s)&&i>=0&&yn(u,i);return i}(i,t,n,r,_r)}function lr(t,r){J&&J(t),r(e.tokenToString(t.kind)),z&&z(t)}function _r(t,r,n){var i=e.tokenToString(t);return r(i),n<0?n:n+i.length}function dr(t,r,n){if(1&e.getEmitFlags(t))nr();else if(W){var i=Sr(t,r,n);i?or(i):nr()}else or()}function pr(t){for(var r=t.split(/\r\n?|\n/g),n=e.guessIndentation(r),i=0,a=r;i<a.length;i++){var o=a[i],s=n?o.slice(n):o;s.length&&(or(),H(s))}}function fr(e,t){e?(sr(),or(e)):t&&nr()}function gr(e,t){e&&cr(),t&&cr()}function mr(t,r,n){if(2&n||W){if(65536&n)return 1;if(void 0===r)return!t||i&&e.rangeIsOnSingleLine(t,i)?0:1;if(r.pos===m)return 0;if(11===r.kind)return 0;if(i&&t&&!e.positionIsSynthesized(t.pos)&&!e.nodeIsSynthesized(r)&&(!r.parent||e.getOriginalNode(r.parent)===e.getOriginalNode(t)))return W?hr((function(n){return e.getLinesBetweenPositionAndPrecedingNonWhitespaceCharacter(r.pos,t.pos,i,n)})):e.rangeStartPositionsAreOnSameLine(t,r,i)?0:1;if(Dr(r,n))return 1}return 1&n?1:0}function yr(t,r,n){if(2&n||W){if(void 0===t||void 0===r)return 0;if(11===r.kind)return 0;if(i&&!e.nodeIsSynthesized(t)&&!e.nodeIsSynthesized(r))return W&&function(t,r){if(r.pos<t.end)return!1;t=e.getOriginalNode(t),r=e.getOriginalNode(r);var n=t.parent;if(!n||n!==r.parent)return!1;var i=e.getContainingNodeArray(t),a=null==i?void 0:i.indexOf(t);return void 0!==a&&a>-1&&i.indexOf(r)===a+1}(t,r)?hr((function(n){return e.getLinesBetweenRangeEndAndRangeStart(t,r,i,n)})):!W&&(a=t,o=r,(a=e.getOriginalNode(a)).parent&&a.parent===e.getOriginalNode(o).parent)?e.rangeEndIsOnSameLineAsRangeStart(t,r,i)?0:1:65536&n?1:0;if(Dr(t,n)||Dr(r,n))return 1}else if(e.getStartsOnNewLine(r))return 1;var a,o;return 1&n?1:0}function vr(t,r,n,a){if(2&n||W){if(65536&n)return 1;if(void 0===r)return!t||i&&e.rangeIsOnSingleLine(t,i)?0:1;if(i&&t&&!e.positionIsSynthesized(t.pos)&&!e.nodeIsSynthesized(r)&&(!r.parent||r.parent===t)){if(W){var o=a&&!e.positionIsSynthesized(a.end)?a.end:r.end;return hr((function(r){return e.getLinesBetweenPositionAndNextNonWhitespaceCharacter(o,t.end,i,r)}))}return e.rangeEndPositionsAreOnSameLine(t,r,i)?0:1}if(Dr(r,n))return 1}return 1&n&&!(131072&n)?1:0}function hr(t){e.Debug.assert(!!W);var r=t(!0);return 0===r?t(!1):r}function br(e,t){var r=W&&mr(t,e,0);return r&&fr(r,!1),!!r}function xr(e,t){var r=W&&vr(t,e,0,void 0);r&&or(r)}function Dr(t,r){if(e.nodeIsSynthesized(t)){var n=e.getStartsOnNewLine(t);return void 0===n?0!=(65536&r):n}return 0!=(65536&r)}function Sr(t,r,n){return 131072&e.getEmitFlags(t)?0:(t=Cr(t),r=Cr(r),n=Cr(n),e.getStartsOnNewLine(n)?1:!i||e.nodeIsSynthesized(t)||e.nodeIsSynthesized(r)||e.nodeIsSynthesized(n)?0:W?hr((function(t){return e.getLinesBetweenRangeEndAndRangeStart(r,n,i,t)})):e.rangeEndIsOnSameLineAsRangeStart(r,n,i)?0:1)}function Tr(t){return 0===t.statements.length&&(!i||e.rangeEndIsOnSameLineAsRangeStart(t,t,i))}function Cr(t){for(;214===t.kind&&e.nodeIsSynthesized(t);)t=t.expression;return t}function Er(t,r){if(e.isGeneratedIdentifier(t)||e.isGeneratedPrivateIdentifier(t))return Or(t);if(e.isStringLiteral(t)&&t.textSourceNode)return Er(t.textSourceNode,r);var n=i,a=!!n&&!!t.parent&&!e.nodeIsSynthesized(t);if(e.isMemberName(t)){if(!a||e.getSourceFileOfNode(t)!==e.getOriginalNode(n))return e.idText(t)}else if(e.Debug.assertNode(t,e.isLiteralExpression),!a)return t.text;return e.getSourceTextOfNodeFromSourceFile(n,t,r)}function kr(r,n,a){if(10===r.kind&&r.textSourceNode){var o=r.textSourceNode;if(e.isIdentifier(o)||e.isPrivateIdentifier(o)||e.isNumericLiteral(o)){var s=e.isNumericLiteral(o)?o.text:Er(o);return a?'"'.concat(e.escapeJsxAttributeString(s),'"'):n||16777216&e.getEmitFlags(r)?'"'.concat(e.escapeString(s),'"'):'"'.concat(e.escapeNonAsciiString(s),'"')}return kr(o,n,a)}var c=(n?1:0)|(a?2:0)|(t.terminateUnterminatedLiterals?4:0)|(t.target&&99===t.target?8:0);return e.getLiteralText(r,i,c)}function Nr(t){t&&524288&e.getEmitFlags(t)||(d.push(p),p=0,l.push(_),_=0,c.push(u),u=void 0,f.push(g))}function Ar(t){t&&524288&e.getEmitFlags(t)||(p=d.pop(),_=l.pop(),u=c.pop(),g=f.pop())}function Fr(t){g&&g!==e.lastOrUndefined(f)||(g=new e.Set),g.add(t)}function Pr(t){if(t)switch(t.kind){case 238:case 292:case 293:e.forEach(t.statements,Pr);break;case 253:case 251:case 243:case 244:Pr(t.statement);break;case 242:Pr(t.thenStatement),Pr(t.elseStatement);break;case 245:case 247:case 246:Pr(t.initializer),Pr(t.statement);break;case 252:Pr(t.caseBlock);break;case 266:e.forEach(t.clauses,Pr);break;case 255:Pr(t.tryBlock),Pr(t.catchClause),Pr(t.finallyBlock);break;case 295:Pr(t.variableDeclaration),Pr(t.block);break;case 240:Pr(t.declarationList);break;case 258:e.forEach(t.declarations,Pr);break;case 257:case 166:case 205:case 260:case 271:case 277:Ir(t.name);break;case 259:Ir(t.name),524288&e.getEmitFlags(t)&&(e.forEach(t.parameters,Pr),Pr(t.body));break;case 203:case 204:case 272:e.forEach(t.elements,Pr);break;case 269:Pr(t.importClause);break;case 270:Ir(t.name),Pr(t.namedBindings);break;case 273:Ir(t.propertyName||t.name)}}function wr(e){if(e)switch(e.kind){case 299:case 300:case 169:case 171:case 174:case 175:Ir(e.name)}}function Ir(t){t&&(e.isGeneratedIdentifier(t)||e.isGeneratedPrivateIdentifier(t)?Or(t):e.isBindingPattern(t)&&Pr(t))}function Or(t){if(4==(7&t.autoGenerateFlags))return Mr(e.getNodeForGeneratedName(t),e.isPrivateIdentifier(t),t.autoGenerateFlags,t.autoGeneratePrefix,t.autoGenerateSuffix);var r=t.autoGenerateId;return o[r]||(o[r]=function(t){var r=e.formatGeneratedNamePart(t.autoGeneratePrefix,Or),n=e.formatGeneratedNamePart(t.autoGenerateSuffix);switch(7&t.autoGenerateFlags){case 1:return Jr(0,!!(8&t.autoGenerateFlags),e.isPrivateIdentifier(t),r,n);case 2:return e.Debug.assertNode(t,e.isIdentifier),Jr(268435456,!!(8&t.autoGenerateFlags),!1,r,n);case 3:return zr(e.idText(t),32&t.autoGenerateFlags?Rr:Lr,!!(16&t.autoGenerateFlags),!!(8&t.autoGenerateFlags),e.isPrivateIdentifier(t),r,n)}return e.Debug.fail("Unsupported GeneratedIdentifierKind: ".concat(e.Debug.formatEnum(7&t.autoGenerateFlags,e.GeneratedIdentifierFlags,!0),"."))}(t))}function Mr(t,r,n,i,o){var s=e.getNodeId(t);return a[s]||(a[s]=function(t,r,n,i,a){switch(t.kind){case 79:case 80:return zr(Er(t),Lr,!!(16&n),!!(8&n),r,i,a);case 264:case 263:return e.Debug.assert(!i&&!a&&!r),function(t){var r=Er(t.name);return function(t,r){for(var n=r;e.isNodeDescendantOf(n,r);n=n.nextContainer)if(n.locals){var i=n.locals.get(e.escapeLeadingUnderscores(t));if(i&&3257279&i.flags)return!1}return!0}(r,t)?r:zr(r,Lr,!1,!1,!1,"","")}(t);case 269:case 275:return e.Debug.assert(!i&&!a&&!r),function(t){var r=e.getExternalModuleName(t);return zr(e.isStringLiteral(r)?e.makeIdentifierFromModuleName(r.text):"module",Lr,!1,!1,!1,"","")}(t);case 259:case 260:case 274:return e.Debug.assert(!i&&!a&&!r),zr("default",Lr,!1,!1,!1,"","");case 228:return e.Debug.assert(!i&&!a&&!r),zr("class",Lr,!1,!1,!1,"","");case 171:case 174:case 175:return function(t,r,n,i){if(e.isIdentifier(t.name))return Mr(t.name,r);return Jr(0,!1,r,n,i)}(t,r,i,a);case 164:return Jr(0,!0,r,i,a);default:return Jr(0,!1,r,i,a)}}(t,r,null!=n?n:0,e.formatGeneratedNamePart(i,Or),e.formatGeneratedNamePart(o)))}function Lr(e){return Rr(e)&&!s.has(e)&&!(g&&g.has(e))}function Rr(t){return!i||e.isFileLevelUniqueName(i,t,F)}function Br(e){var t;switch(e){case"":return p;case"#":return _;default:return null!==(t=null==u?void 0:u.get(e))&&void 0!==t?t:0}}function jr(t,r){switch(t){case"":p=r;break;case"#":_=r;break;default:null!=u||(u=new e.Map),u.set(t,r)}}function Jr(t,r,n,i,a){i.length>0&&35===i.charCodeAt(0)&&(i=i.slice(1));var o=e.formatGeneratedName(n,i,"",a),s=Br(o);if(t&&!(s&t)){var c=268435456===t?"_i":"_n";if(Lr(l=e.formatGeneratedName(n,i,c,a)))return s|=t,r&&Fr(l),jr(o,s),l}for(;;){var u=268435455&s;if(s++,8!==u&&13!==u){var l;c=u<26?"_"+String.fromCharCode(97+u):"_"+(u-26);if(Lr(l=e.formatGeneratedName(n,i,c,a)))return r&&Fr(l),jr(o,s),l}}}function zr(t,r,n,i,a,o,c){if((void 0===r&&(r=Lr),t.length>0&&35===t.charCodeAt(0)&&(t=t.slice(1)),o.length>0&&35===o.charCodeAt(0)&&(o=o.slice(1)),n)&&r(l=e.formatGeneratedName(a,o,t,c)))return i?Fr(l):s.add(l),l;95!==t.charCodeAt(t.length-1)&&(t+="_");for(var u=1;;){var l;if(r(l=e.formatGeneratedName(a,o,t+u,c)))return i?Fr(l):s.add(l),l;u++}}function Ur(e){return zr(e,Rr,!0,!1,!1,"","")}function Kr(e,t){var r=ze(2,e,t),n=re,i=ne,a=ie;Vr(t),r(e,t),qr(t,n,i,a)}function Vr(t){var r=e.getEmitFlags(t),n=e.getCommentRange(t);!function(t,r,n,i){ce(),ae=!1;var a=n<0||0!=(512&r)||11===t.kind,o=i<0||0!=(1024&r)||11===t.kind;(n>0||i>0)&&n!==i&&(a||Yr(n,352!==t.kind),(!a||n>=0&&0!=(512&r))&&(re=n),(!o||i>=0&&0!=(1024&r))&&(ne=i,258===t.kind&&(ie=i)));e.forEach(e.getSyntheticLeadingComments(t),Hr),ue()}(t,r,n.pos,n.end),2048&r&&(oe=!0)}function qr(t,r,n,i){var a=e.getEmitFlags(t),o=e.getCommentRange(t);2048&a&&(oe=!1),Wr(t,a,o.pos,o.end,r,n,i);var s=e.getTypeNode(t);s&&Wr(t,a,s.pos,s.end,r,n,i)}function Wr(t,r,n,i,a,o,s){ce();var c=i<0||0!=(1024&r)||11===t.kind;e.forEach(e.getSyntheticTrailingComments(t),Gr),(n>0||i>0)&&n!==i&&(re=a,ne=o,ie=s,c||352===t.kind||function(e){un(e,nn)}(i)),ue()}function Hr(e){(e.hasLeadingNewline||2===e.kind)&&y.writeLine(),Qr(e),e.hasTrailingNewLine||2===e.kind?y.writeLine():y.writeSpace(" ")}function Gr(e){y.isAtStartOfLine()||y.writeSpace(" "),Qr(e),e.hasTrailingNewLine&&y.writeLine()}function Qr(t){var r=function(e){return 3===e.kind?"/*".concat(e.text,"*/"):"//".concat(e.text)}(t),n=3===t.kind?e.computeLineStarts(r):void 0;e.writeCommentRange(r,n,y,0,r.length,K)}function Xr(t,r,n){ce();var a,o,s=r.pos,c=r.end,u=e.getEmitFlags(t),l=oe||c<0||0!=(1024&u);s<0||0!=(512&u)||(a=r,(o=i&&e.emitDetachedComments(i.text,Fe(),y,ln,a,K,oe))&&(k?k.push(o):k=[o])),ue(),2048&u&&!oe?(oe=!0,n(t),oe=!1):n(t),ce(),l||(Yr(r.end,!0),ae&&!y.isAtStartOfLine()&&y.writeLine()),ue()}function Yr(e,t){ae=!1,t?0===e&&(null==i?void 0:i.isDeclarationFile)?cn(e,$r):cn(e,tn):0===e&&cn(e,Zr)}function Zr(e,t,r,n,i){_n(e,t)&&tn(e,t,r,n,i)}function $r(e,t,r,n,i){_n(e,t)||tn(e,t,r,n,i)}function en(r,n){return!t.onlyPrintJsDocStyle||(e.isJSDocLikeText(r,n)||e.isPinnedComment(r,n))}function tn(t,r,n,a,o){i&&en(i.text,t)&&(ae||(e.emitNewLineBeforeLeadingCommentOfPosition(Fe(),y,o,t),ae=!0),mn(t),e.writeCommentRange(i.text,Fe(),y,t,r,K),mn(r),a?y.writeLine():3===n&&y.writeSpace(" "))}function rn(e){oe||-1===e||Yr(e,!0)}function nn(t,r,n,a){i&&en(i.text,t)&&(y.isAtStartOfLine()||y.writeSpace(" "),mn(t),e.writeCommentRange(i.text,Fe(),y,t,r,K),mn(r),a&&y.writeLine())}function an(e,t,r){oe||(ce(),un(e,t?nn:r?on:sn),ue())}function on(t,r,n){i&&(mn(t),e.writeCommentRange(i.text,Fe(),y,t,r,K),mn(r),2===n&&y.writeLine())}function sn(t,r,n,a){i&&(mn(t),e.writeCommentRange(i.text,Fe(),y,t,r,K),mn(r),a?y.writeLine():y.writeSpace(" "))}function cn(t,r){!i||-1!==re&&t===re||(function(t){return void 0!==k&&e.last(k).nodePos===t}(t)?function(t){if(!i)return;var r=e.last(k).detachedCommentEndPos;k.length-1?k.pop():k=void 0;e.forEachLeadingCommentRange(i.text,r,t,r)}(r):e.forEachLeadingCommentRange(i.text,t,r,t))}function un(t,r){i&&(-1===ne||t!==ne&&t!==ie)&&e.forEachTrailingCommentRange(i.text,t,r)}function ln(t,r,n,a,o,s){i&&en(i.text,a)&&(mn(a),e.writeCommentRange(t,r,n,a,o,s),mn(o))}function _n(t,r){return!!i&&e.isRecognizedTripleSlashComment(i.text,t,r)}function dn(e,t){var r=ze(3,e,t);pn(t),r(e,t),fn(t)}function pn(t){var r=e.getEmitFlags(t),n=e.getSourceMapRange(t);if(e.isUnparsedNode(t)){e.Debug.assertIsDefined(t.parent,"UnparsedNodes must have parent pointers");var i=function(t){return void 0===t.parsedSourceMap&&void 0!==t.sourceMapText&&(t.parsedSourceMap=e.tryParseRawSourceMap(t.sourceMapText)||!1),t.parsedSourceMap||void 0}(t.parent);i&&b&&b.appendSourceMap(y.getLine(),y.getColumn(),i,t.parent.sourceMapPath,t.parent.getLineAndCharacterOfPosition(t.pos),t.parent.getLineAndCharacterOfPosition(t.end))}else{var a=n.source||x;352!==t.kind&&0==(16&r)&&n.pos>=0&&yn(n.source||x,gn(a,n.pos)),64&r&&($=!0)}}function fn(t){var r=e.getEmitFlags(t),n=e.getSourceMapRange(t);e.isUnparsedNode(t)||(64&r&&($=!1),352!==t.kind&&0==(32&r)&&n.end>=0&&yn(n.source||x,n.end))}function gn(t,r){return t.skipTrivia?t.skipTrivia(r):e.skipTrivia(t.text,r)}function mn(t){if(!($||e.positionIsSynthesized(t)||hn(x))){var r=e.getLineAndCharacterOfPosition(x,t),n=r.line,i=r.character;b.addMapping(y.getLine(),y.getColumn(),ee,n,i,void 0)}}function yn(e,t){if(e!==x){var r=x,n=ee;vn(e),mn(t),function(e,t){x=e,ee=t}(r,n)}else mn(t)}function vn(e){$||(x=e,e!==D?hn(e)||(ee=b.addSource(e.fileName),t.inlineSources&&b.setSourceContent(ee,e.text),D=e,te=ee):ee=te)}function hn(t){return e.fileExtensionIs(t.fileName,".json")}}function S(e,t,r,n){t(e)}function T(e,t,r,n){t(e,r.select(n))}function C(e,t,r,n){t(e,r)}e.isBuildInfoFile=function(t){return e.fileExtensionIs(t,".tsbuildinfo")},e.forEachEmittedFile=i,e.getTsBuildInfoEmitOutputFilePath=o,e.getOutputPathsForBundle=s,e.getOutputPathsFor=c,e.getOutputExtension=l,e.getOutputDeclarationFileName=d,e.getCommonSourceDirectory=y,e.getCommonSourceDirectoryOfConfig=v,e.getAllProjectOutputs=function(t,r){var n=f(),i=n.addOutput,a=n.getOutputs;if(e.outFile(t.options))g(t,i);else{for(var s=e.memoize((function(){return v(t,r)})),c=0,u=t.fileNames;c<u.length;c++){var l=u[c];m(t,l,r,i,s)}i(o(t.options))}return a()},e.getOutputFileNames=function(t,r,n){r=e.normalizePath(r),e.Debug.assert(e.contains(t.fileNames,r),"Expected fileName to be present in command line");var i=f(),a=i.addOutput,o=i.getOutputs;return e.outFile(t.options)?g(t,a):m(t,r,n,a),o()},e.getFirstProjectOutput=function(t,r){if(e.outFile(t.options)){var n=s(t.options,!1).jsFilePath;return e.Debug.checkDefined(n,"project ".concat(t.options.configFilePath," expected to have at least one output"))}for(var i=e.memoize((function(){return v(t,r)})),a=0,c=t.fileNames;a<c.length;a++){var u=c[a];if(!e.isDeclarationFileName(u)){if(n=p(u,t,r,i))return n;if(!e.fileExtensionIs(u,".json")&&e.getEmitDeclarations(t.options))return d(u,t,r,i)}}var l=o(t.options);return l||e.Debug.fail("project ".concat(t.options.configFilePath," expected to have at least one output"))},e.emitFiles=h,e.getBuildInfoText=b,e.getBuildInfo=x,e.notImplementedResolver={hasGlobalName:e.notImplemented,getReferencedExportContainer:e.notImplemented,getReferencedImportDeclaration:e.notImplemented,getReferencedDeclarationWithCollidingName:e.notImplemented,isDeclarationWithCollidingName:e.notImplemented,isValueAliasDeclaration:e.notImplemented,isReferencedAliasDeclaration:e.notImplemented,isTopLevelValueImportEqualsWithEntityName:e.notImplemented,getNodeCheckFlags:e.notImplemented,isDeclarationVisible:e.notImplemented,isLateBound:function(e){return!1},collectLinkedAliases:e.notImplemented,isImplementationOfOverload:e.notImplemented,isRequiredInitializedParameter:e.notImplemented,isOptionalUninitializedParameterProperty:e.notImplemented,isExpandoFunctionDeclaration:e.notImplemented,getPropertiesOfContainerFunction:e.notImplemented,createTypeOfDeclaration:e.notImplemented,createReturnTypeOfSignatureDeclaration:e.notImplemented,createTypeOfExpression:e.notImplemented,createLiteralConstValue:e.notImplemented,isSymbolAccessible:e.notImplemented,isEntityNameVisible:e.notImplemented,getConstantValue:e.notImplemented,getReferencedValueDeclaration:e.notImplemented,getTypeReferenceSerializationKind:e.notImplemented,isOptionalParameter:e.notImplemented,moduleExportsSomeValue:e.notImplemented,isArgumentsLocalBinding:e.notImplemented,getExternalModuleFileFromDeclaration:e.notImplemented,getTypeReferenceDirectivesForEntityName:e.notImplemented,getTypeReferenceDirectivesForSymbol:e.notImplemented,isLiteralConstDeclaration:e.notImplemented,getJsxFactoryEntity:e.notImplemented,getJsxFragmentFactoryEntity:e.notImplemented,getAllAccessorDeclarations:e.notImplemented,getSymbolOfExternalModuleSpecifier:e.notImplemented,isBindingCapturedByNode:e.notImplemented,getDeclarationStatementsForSourceFile:e.notImplemented,isImportRequiredByAugmentation:e.notImplemented},e.emitUsingBuildInfo=function(t,r,n,i){var o,c=e.maybeBind(r,r.createHash),u=s(t.options,!1),l=u.buildInfoPath,_=u.jsFilePath,d=u.sourceMapFilePath,p=u.declarationFilePath,f=u.declarationMapPath;if(r.getBuildInfo)o=r.getBuildInfo(l,t.options.configFilePath);else{var g=r.readFile(l);if(!g)return l;o=x(l,g)}if(!o)return l;if(!o.bundle||!o.bundle.js||p&&!o.bundle.dts)return l;var m=r.readFile(e.Debug.checkDefined(_));if(!m)return _;if(e.computeSignature(m,c)!==o.bundle.js.hash)return _;var y=d&&r.readFile(d);if(d&&!y||t.options.inlineSourceMap)return d||"inline sourcemap decoding";if(d&&e.computeSignature(y,c)!==o.bundle.js.mapHash)return d;var v=p&&r.readFile(p);if(p&&!v)return p;if(p&&e.computeSignature(v,c)!==o.bundle.dts.hash)return p;var D=f&&r.readFile(f);if(f&&!D||t.options.inlineSourceMap)return f||"inline sourcemap decoding";if(f&&e.computeSignature(D,c)!==o.bundle.dts.mapHash)return f;var S,T,C=e.getDirectoryPath(e.getNormalizedAbsolutePath(l,r.getCurrentDirectory())),E=e.createInputFiles(m,v,d,y,f,D,_,p,l,o,!0),k=[],N=e.createPrependNodes(t.projectReferences,n,(function(e){return r.readFile(e)})),A=function(t,r,n){var i,a=e.Debug.checkDefined(t.js),o=(null===(i=a.sources)||void 0===i?void 0:i.prologues)&&e.arrayToMap(a.sources.prologues,(function(e){return e.file}));return t.sourceFiles.map((function(t,i){var a,s,c=null==o?void 0:o.get(i),u=null==c?void 0:c.directives.map((function(t){var r=e.setTextRange(e.factory.createStringLiteral(t.expression.text),t.expression),n=e.setTextRange(e.factory.createExpressionStatement(r),t);return e.setParent(r,n),n})),l=e.factory.createToken(1),_=e.factory.createSourceFile(null!=u?u:[],l,0);return _.fileName=e.getRelativePathFromDirectory(n.getCurrentDirectory(),e.getNormalizedAbsolutePath(t,r),!n.useCaseSensitiveFileNames()),_.text=null!==(a=null==c?void 0:c.text)&&void 0!==a?a:"",e.setTextRangePosWidth(_,0,null!==(s=null==c?void 0:c.text.length)&&void 0!==s?s:0),e.setEachParent(_.statements,_),e.setTextRangePosWidth(l,_.end,0),e.setParent(l,_),_}))}(o.bundle,C,r),F={getPrependNodes:e.memoize((function(){return a(a([],N,!0),[E],!1)})),getCanonicalFileName:r.getCanonicalFileName,getCommonSourceDirectory:function(){return e.getNormalizedAbsolutePath(o.bundle.commonSourceDirectory,C)},getCompilerOptions:function(){return t.options},getCurrentDirectory:function(){return r.getCurrentDirectory()},getNewLine:function(){return r.getNewLine()},getSourceFile:e.returnUndefined,getSourceFileByPath:e.returnUndefined,getSourceFiles:function(){return A},getLibFileFromReference:e.notImplemented,isSourceFileFromExternalLibrary:e.returnFalse,getResolvedProjectReferenceToRedirect:e.returnUndefined,getProjectReferenceRedirect:e.returnUndefined,isSourceOfProjectReferenceRedirect:e.returnFalse,writeFile:function(r,n,i,a,s,u){switch(r){case _:if(m===n)return;break;case d:if(y===n)return;break;case l:var g=u.buildInfo;g.program=o.program,g.program&&void 0!==S&&t.options.composite&&(g.program.outSignature=e.computeSignature(S,c,T));var h=o.bundle,x=h.js,C=h.dts,E=h.sourceFiles;return g.bundle.js.sources=x.sources,C&&(g.bundle.dts.sources=C.sources),g.bundle.sourceFiles=E,void k.push({name:r,text:b(g),writeByteOrderMark:i,buildInfo:g});case p:if(v===n)return;S=n,T=u;break;case f:if(D===n)return;break;default:e.Debug.fail("Unexpected path: ".concat(r))}k.push({name:r,text:n,writeByteOrderMark:i})},isEmitBlocked:e.returnFalse,readFile:function(e){return r.readFile(e)},fileExists:function(e){return r.fileExists(e)},useCaseSensitiveFileNames:function(){return r.useCaseSensitiveFileNames()},getProgramBuildInfo:e.returnUndefined,getSourceFileFromReference:e.returnUndefined,redirectTargetsMap:e.createMultiMap(),getFileIncludeReasons:e.notImplemented,createHash:c};return h(e.notImplementedResolver,F,void 0,e.getTransformers(t.options,i)),k},function(e){e[e.Notification=0]="Notification",e[e.Substitution=1]="Substitution",e[e.Comments=2]="Comments",e[e.SourceMaps=3]="SourceMaps",e[e.Emit=4]="Emit"}(t||(t={})),e.createPrinter=D,function(e){e[e.Auto=0]="Auto",e[e.CountMask=268435455]="CountMask",e[e._i=268435456]="_i"}(r||(r={}))}(_||(_={})),function(e){var t;function r(e){e.watcher.close()}e.createCachedDirectoryStructureHost=function(t,r,n){if(t.getDirectories&&t.readDirectory){var i=new e.Map,a=e.createGetCanonicalFileName(n);return{useCaseSensitiveFileNames:n,fileExists:function(e){var r=c(o(e));return r&&_(r.sortedAndCanonicalizedFiles,a(u(e)))||t.fileExists(e)},readFile:function(e,r){return t.readFile(e,r)},directoryExists:t.directoryExists&&function(r){var n=o(r);return i.has(e.ensureTrailingDirectorySeparator(n))||t.directoryExists(r)},getDirectories:function(e){var r=o(e),n=l(e,r);if(n)return n.directories.slice();return t.getDirectories(e)},readDirectory:function(i,a,s,c,_){var p,f=o(i),g=l(i,f);if(void 0!==g)return e.matchFiles(i,a,s,c,n,r,_,(function(t){var r=o(t);if(r===f)return g||m(t,r);var n=l(t,r);return void 0!==n?n||m(t,r):e.emptyFileSystemEntries}),d);return t.readDirectory(i,a,s,c,_);function m(r,n){if(p&&n===f)return p;var i={files:e.map(t.readDirectory(r,void 0,void 0,["*.*"]),u)||e.emptyArray,directories:t.getDirectories(r)||e.emptyArray};return n===f&&(p=i),i}},createDirectory:t.createDirectory&&function(r){var n=c(o(r));if(n){var i=u(r),s=a(i),l=n.sortedAndCanonicalizedDirectories;e.insertSorted(l,s,e.compareStringsCaseSensitive)&&n.directories.push(i)}t.createDirectory(r)},writeFile:t.writeFile&&function(e,r,n){var i=c(o(e));i&&p(i,u(e),!0);return t.writeFile(e,r,n)},addOrDeleteFileOrDirectory:function(e,r){if(void 0!==s(r))return void f();var n=c(r);if(!n)return;if(!t.directoryExists)return void f();var i=u(e),o={fileExists:t.fileExists(r),directoryExists:t.directoryExists(r)};o.directoryExists||_(n.sortedAndCanonicalizedDirectories,a(i))?f():p(n,i,o.fileExists);return o},addOrDeleteFile:function(t,r,n){if(n===e.FileWatcherEventKind.Changed)return;var i=c(r);i&&p(i,u(t),n===e.FileWatcherEventKind.Created)},clearCache:f,realpath:t.realpath&&d}}function o(t){return e.toPath(t,r,a)}function s(t){return i.get(e.ensureTrailingDirectorySeparator(t))}function c(t){var r=s(e.getDirectoryPath(t));return r?(r.sortedAndCanonicalizedFiles||(r.sortedAndCanonicalizedFiles=r.files.map(a).sort(),r.sortedAndCanonicalizedDirectories=r.directories.map(a).sort()),r):r}function u(t){return e.getBaseFileName(e.normalizePath(t))}function l(r,n){var a=s(n=e.ensureTrailingDirectorySeparator(n));if(a)return a;try{return function(r,n){var a;if(!t.realpath||e.ensureTrailingDirectorySeparator(o(t.realpath(r)))===n){var s={files:e.map(t.readDirectory(r,void 0,void 0,["*.*"]),u)||[],directories:t.getDirectories(r)||[]};return i.set(e.ensureTrailingDirectorySeparator(n),s),s}if(null===(a=t.directoryExists)||void 0===a?void 0:a.call(t,r))return i.set(n,!1),!1}(r,n)}catch(c){return void e.Debug.assert(!i.has(e.ensureTrailingDirectorySeparator(n)))}}function _(t,r){return e.binarySearch(t,r,e.identity,e.compareStringsCaseSensitive)>=0}function d(e){return t.realpath?t.realpath(e):e}function p(t,r,n){var i=t.sortedAndCanonicalizedFiles,o=a(r);if(n)e.insertSorted(i,o,e.compareStringsCaseSensitive)&&t.files.push(r);else{var s=e.binarySearch(i,o,e.identity,e.compareStringsCaseSensitive);if(s>=0){i.splice(s,1);var c=t.files.findIndex((function(e){return a(e)===o}));t.files.splice(c,1)}}}function f(){i.clear()}},function(e){e[e.None=0]="None",e[e.Partial=1]="Partial",e[e.Full=2]="Full"}(e.ConfigFileProgramReloadLevel||(e.ConfigFileProgramReloadLevel={})),e.updateSharedExtendedConfigFileWatcher=function(t,r,n,i,a){var o,s=e.arrayToMap((null===(o=null==r?void 0:r.configFile)||void 0===o?void 0:o.extendedSourceFiles)||e.emptyArray,a);n.forEach((function(e,r){s.has(r)||(e.projects.delete(t),e.close())})),s.forEach((function(r,a){var o=n.get(a);o?o.projects.add(t):n.set(a,{projects:new e.Set([t]),watcher:i(r,a),close:function(){var e=n.get(a);e&&0===e.projects.size&&(e.watcher.close(),n.delete(a))}})}))},e.clearSharedExtendedConfigFileWatcher=function(e,t){t.forEach((function(t){t.projects.delete(e)&&t.close()}))},e.cleanExtendedConfigCache=function e(t,r,n){t.delete(r)&&t.forEach((function(i,a){var o;(null===(o=i.extendedResult.extendedSourceFiles)||void 0===o?void 0:o.some((function(e){return n(e)===r})))&&e(t,a,n)}))},e.updatePackageJsonWatch=function(t,r,n){var i=new e.Map(t);e.mutateMap(r,i,{createNewValue:n,onDeleteValue:e.closeFileWatcher})},e.updateMissingFilePathsWatch=function(t,r,n){var i=t.getMissingFilePaths(),a=e.arrayToMap(i,e.identity,e.returnTrue);e.mutateMap(r,a,{createNewValue:n,onDeleteValue:e.closeFileWatcher})},e.updateWatchingWildcardDirectories=function(t,n,i){function a(e,t){return{watcher:i(e,t),flags:t}}e.mutateMap(t,n,{createNewValue:a,onDeleteValue:r,onExistingValue:function(e,r,n){if(e.flags===r)return;e.watcher.close(),t.set(n,a(n,r))}})},e.isIgnoredFileFromWildCardWatching=function(t){var r=t.watchedDirPath,n=t.fileOrDirectory,i=t.fileOrDirectoryPath,a=t.configFileName,o=t.options,s=t.program,c=t.extraFileExtensions,u=t.currentDirectory,l=t.useCaseSensitiveFileNames,_=t.writeLog,d=t.toPath,p=e.removeIgnoredPath(i);if(!p)return _("Project: ".concat(a," Detected ignored path: ").concat(n)),!0;if((i=p)===r)return!1;if(e.hasExtension(i)&&!e.isSupportedSourceFileName(n,o,c))return _("Project: ".concat(a," Detected file add/remove of non supported extension: ").concat(n)),!0;if(e.isExcludedFile(n,o.configFile.configFileSpecs,e.getNormalizedAbsolutePath(e.getDirectoryPath(a),u),l,u))return _("Project: ".concat(a," Detected excluded file: ").concat(n)),!0;if(!s)return!1;if(e.outFile(o)||o.outDir)return!1;if(e.isDeclarationFileName(i)){if(o.declarationDir)return!1}else if(!e.fileExtensionIsOneOf(i,e.supportedJSExtensionsFlat))return!1;var f=e.removeFileExtension(i),g=e.isArray(s)?void 0:function(e){return!!e.getState}(s)?s.getProgramOrUndefined():s,m=g||e.isArray(s)?void 0:s;return!(!y(f+".ts")&&!y(f+".tsx"))&&(_("Project: ".concat(a," Detected output file: ").concat(n)),!0);function y(t){return g?!!g.getSourceFileByPath(t):m?m.getState().fileInfos.has(t):!!e.find(s,(function(e){return d(e)===t}))}},e.isEmittedFileOfProgram=function(e,t){return!!e&&e.isEmittedFile(t)},function(e){e[e.None=0]="None",e[e.TriggerOnly=1]="TriggerOnly",e[e.Verbose=2]="Verbose"}(t=e.WatchLogLevel||(e.WatchLogLevel={})),e.getWatchFactory=function(r,n,i,o){e.setSysLog(n===t.Verbose?i:e.noop);var s={watchFile:function(e,t,n,i){return r.watchFile(e,t,n,i)},watchDirectory:function(e,t,n,i){return r.watchDirectory(e,t,0!=(1&n),i)}},c=n!==t.None?{watchFile:d("watchFile"),watchDirectory:d("watchDirectory")}:void 0,u=n===t.Verbose?{watchFile:function(e,t,r,n,a,s){i("FileWatcher:: Added:: ".concat(p(e,r,n,a,s,o)));var u=c.watchFile(e,t,r,n,a,s);return{close:function(){i("FileWatcher:: Close:: ".concat(p(e,r,n,a,s,o))),u.close()}}},watchDirectory:function(t,r,n,a,s,u){var l="DirectoryWatcher:: Added:: ".concat(p(t,n,a,s,u,o));i(l);var _=e.timestamp(),d=c.watchDirectory(t,r,n,a,s,u),f=e.timestamp()-_;return i("Elapsed:: ".concat(f,"ms ").concat(l)),{close:function(){var r="DirectoryWatcher:: Close:: ".concat(p(t,n,a,s,u,o));i(r);var c=e.timestamp();d.close();var l=e.timestamp()-c;i("Elapsed:: ".concat(l,"ms ").concat(r))}}}}:c||s,l=n===t.Verbose?function(e,t,r,n,a){return i("ExcludeWatcher:: Added:: ".concat(p(e,t,r,n,a,o))),{close:function(){return i("ExcludeWatcher:: Close:: ".concat(p(e,t,r,n,a,o)))}}}:e.returnNoopFileWatcher;return{watchFile:_("watchFile"),watchDirectory:_("watchDirectory")};function _(t){return function(n,i,a,o,s,c){var _;return e.matchesExclude(n,"watchFile"===t?null==o?void 0:o.excludeFiles:null==o?void 0:o.excludeDirectories,"boolean"==typeof r.useCaseSensitiveFileNames?r.useCaseSensitiveFileNames:r.useCaseSensitiveFileNames(),(null===(_=r.getCurrentDirectory)||void 0===_?void 0:_.call(r))||"")?l(n,a,o,s,c):u[t].call(void 0,n,i,a,o,s,c)}}function d(t){return function(r,n,c,u,l,_){return s[t].call(void 0,r,(function(){for(var s=[],d=0;d<arguments.length;d++)s[d]=arguments[d];var f="".concat("watchFile"===t?"FileWatcher":"DirectoryWatcher",":: Triggered with ").concat(s[0]," ").concat(void 0!==s[1]?s[1]:"",":: ").concat(p(r,c,u,l,_,o));i(f);var g=e.timestamp();n.call.apply(n,a([void 0],s,!1));var m=e.timestamp()-g;i("Elapsed:: ".concat(m,"ms ").concat(f))}),c,u,l,_)}}function p(e,t,r,n,i,a){return"WatchInfo: ".concat(e," ").concat(t," ").concat(JSON.stringify(r)," ").concat(a?a(n,i):void 0===i?n:"".concat(n," ").concat(i))}},e.getFallbackOptions=function(t){var r=null==t?void 0:t.fallbackPolling;return{watchFile:void 0!==r?r:e.WatchFileKind.PriorityPollingInterval}},e.closeFileWatcherOf=r}(_||(_={})),function(e){function t(t,r){var n=e.getDirectoryPath(r),i=e.isRootedDiskPath(t)?t:e.combinePaths(n,t);return e.normalizePath(i)}function r(e,t){return n(e,t)}function n(t,r,n){void 0===n&&(n=e.sys);var i=new e.Map,a=e.createGetCanonicalFileName(n.useCaseSensitiveFileNames);function o(){return e.getDirectoryPath(e.normalizePath(n.getExecutingFilePath()))}var s=e.getNewLineCharacter(t,(function(){return n.newLine})),c=n.realpath&&function(e){return n.realpath(e)},u={getSourceFile:function(t,n,i){var a;try{e.performance.mark("beforeIORead"),a=u.readFile(t),e.performance.mark("afterIORead"),e.performance.measure("I/O Read","beforeIORead","afterIORead")}catch(o){i&&i(o.message),a=""}return void 0!==a?e.createSourceFile(t,a,n,r):void 0},getDefaultLibLocation:o,getDefaultLibFileName:function(t){return e.combinePaths(o(),e.getDefaultLibFileName(t))},writeFile:function(t,r,a,o){try{e.performance.mark("beforeIOWrite"),e.writeFileEnsuringDirectories(t,r,a,(function(e,t,r){return n.writeFile(e,t,r)}),(function(e){return(u.createDirectory||n.createDirectory)(e)}),(function(e){return t=e,!!i.has(t)||!!(u.directoryExists||n.directoryExists)(t)&&(i.set(t,!0),!0);var t})),e.performance.mark("afterIOWrite"),e.performance.measure("I/O Write","beforeIOWrite","afterIOWrite")}catch(s){o&&o(s.message)}},getCurrentDirectory:e.memoize((function(){return n.getCurrentDirectory()})),useCaseSensitiveFileNames:function(){return n.useCaseSensitiveFileNames},getCanonicalFileName:a,getNewLine:function(){return s},fileExists:function(e){return n.fileExists(e)},readFile:function(e){return n.readFile(e)},trace:function(e){return n.write(e+s)},directoryExists:function(e){return n.directoryExists(e)},getEnvironmentVariable:function(e){return n.getEnvironmentVariable?n.getEnvironmentVariable(e):""},getDirectories:function(e){return n.getDirectories(e)},realpath:c,readDirectory:function(e,t,r,i,a){return n.readDirectory(e,t,r,i,a)},createDirectory:function(e){return n.createDirectory(e)},createHash:e.maybeBind(n,n.createHash)};return u}function i(t,r){var n="".concat(e.diagnosticCategoryName(t)," TS").concat(t.code,": ").concat(g(t.messageText,r.getNewLine())).concat(r.getNewLine());if(t.file){var i=e.getLineAndCharacterOfPosition(t.file,t.start),a=i.line,o=i.character,s=t.file.fileName,c=e.convertToRelativePath(s,r.getCurrentDirectory(),(function(e){return r.getCanonicalFileName(e)}));return"".concat(c,"(").concat(a+1,",").concat(o+1,"): ")+n}return n}var s;e.findConfigFile=function(t,r,n){return void 0===n&&(n="tsconfig.json"),e.forEachAncestorDirectory(t,(function(t){var i=e.combinePaths(t,n);return r(i)?i:void 0}))},e.resolveTripleslashReference=t,e.computeCommonSourceDirectoryOfFilenames=function(t,r,n){var i;return e.forEach(t,(function(t){var a=e.getNormalizedPathComponents(t,r);if(a.pop(),i){for(var o=Math.min(i.length,a.length),s=0;s<o;s++)if(n(i[s])!==n(a[s])){if(0===s)return!0;i.length=s;break}a.length<i.length&&(i.length=a.length)}else i=a}))?"":i?e.getPathFromPathComponents(i):r},e.createCompilerHost=r,e.createCompilerHostWorker=n,e.changeCompilerHostLikeToUseCache=function(t,r,n){var i=t.readFile,o=t.fileExists,s=t.directoryExists,c=t.createDirectory,u=t.writeFile,l=new e.Map,_=new e.Map,d=new e.Map,p=new e.Map,f=function(e,r){var n=i.call(t,r);return l.set(e,void 0!==n&&n),n};t.readFile=function(n){var a=r(n),o=l.get(a);return void 0!==o?!1!==o?o:void 0:e.fileExtensionIs(n,".json")||e.isBuildInfoFile(n)?f(a,n):i.call(t,n)};var g=n?function(t,i,a,o){var s=r(t),c="object"==typeof i?i.impliedNodeFormat:void 0,u=p.get(c),l=null==u?void 0:u.get(s);if(l)return l;var _=n(t,i,a,o);return _&&(e.isDeclarationFileName(t)||e.fileExtensionIs(t,".json"))&&p.set(c,(u||new e.Map).set(s,_)),_}:void 0;return t.fileExists=function(e){var n=r(e),i=_.get(n);if(void 0!==i)return i;var a=o.call(t,e);return _.set(n,!!a),a},u&&(t.writeFile=function(e,n){for(var i=[],o=2;o<arguments.length;o++)i[o-2]=arguments[o];var s=r(e);_.delete(s);var c=l.get(s);void 0!==c&&c!==n?(l.delete(s),p.forEach((function(e){return e.delete(s)}))):g&&p.forEach((function(e){var t=e.get(s);t&&t.text!==n&&e.delete(s)})),u.call.apply(u,a([t,e,n],i,!1))}),s&&(t.directoryExists=function(e){var n=r(e),i=d.get(n);if(void 0!==i)return i;var a=s.call(t,e);return d.set(n,!!a),a},c&&(t.createDirectory=function(e){var n=r(e);d.delete(n),c.call(t,e)})),{originalReadFile:i,originalFileExists:o,originalDirectoryExists:s,originalCreateDirectory:c,originalWriteFile:u,getSourceFileWithCache:g,readFileWithCache:function(e){var t=r(e),n=l.get(t);return void 0!==n?!1!==n?n:void 0:f(t,e)}}},e.getPreEmitDiagnostics=function(t,r,n){var i;return i=e.addRange(i,t.getConfigFileParsingDiagnostics()),i=e.addRange(i,t.getOptionsDiagnostics(n)),i=e.addRange(i,t.getSyntacticDiagnostics(r,n)),i=e.addRange(i,t.getGlobalDiagnostics(n)),i=e.addRange(i,t.getSemanticDiagnostics(r,n)),e.getEmitDeclarations(t.getCompilerOptions())&&(i=e.addRange(i,t.getDeclarationDiagnostics(r,n))),e.sortAndDeduplicateDiagnostics(i||e.emptyArray)},e.formatDiagnostics=function(e,t){for(var r="",n=0,a=e;n<a.length;n++){r+=i(a[n],t)}return r},e.formatDiagnostic=i,function(e){e.Grey="\x1b[90m",e.Red="\x1b[91m",e.Yellow="\x1b[93m",e.Blue="\x1b[94m",e.Cyan="\x1b[96m"}(s=e.ForegroundColorEscapeSequences||(e.ForegroundColorEscapeSequences={}));var c="\x1b[7m",u="\x1b[0m",l="    ";function _(t){switch(t){case e.DiagnosticCategory.Error:return s.Red;case e.DiagnosticCategory.Warning:return s.Yellow;case e.DiagnosticCategory.Suggestion:return e.Debug.fail("Should never get an Info diagnostic on the command line.");case e.DiagnosticCategory.Message:return s.Blue}}function d(e,t){return t+e+u}function p(t,r,n,i,a,o){var s=e.getLineAndCharacterOfPosition(t,r),l=s.line,_=s.character,p=e.getLineAndCharacterOfPosition(t,r+n),f=p.line,g=p.character,m=e.getLineAndCharacterOfPosition(t,t.text.length).line,y=f-l>=4,v=(f+1+"").length;y&&(v=Math.max("...".length,v));for(var h="",b=l;b<=f;b++){h+=o.getNewLine(),y&&l+1<b&&b<f-1&&(h+=i+d(e.padLeft("...",v),c)+" "+o.getNewLine(),b=f-1);var x=e.getPositionOfLineAndCharacter(t,b,0),D=b<m?e.getPositionOfLineAndCharacter(t,b+1,0):t.text.length,S=t.text.slice(x,D);if(S=(S=e.trimStringEnd(S)).replace(/\t/g," "),h+=i+d(e.padLeft(b+1+"",v),c)+" ",h+=S+o.getNewLine(),h+=i+d(e.padLeft("",v),c)+" ",h+=a,b===l){var T=b===f?g:void 0;h+=S.slice(0,_).replace(/\S/g," "),h+=S.slice(_,T).replace(/./g,"~")}else h+=b===f?S.slice(0,g).replace(/./g,"~"):S.replace(/./g,"~");h+=u}return h}function f(t,r,n,i){void 0===i&&(i=d);var a=e.getLineAndCharacterOfPosition(t,r),o=a.line,c=a.character,u="";return u+=i(n?e.convertToRelativePath(t.fileName,n.getCurrentDirectory(),(function(e){return n.getCanonicalFileName(e)})):t.fileName,s.Cyan),u+=":",u+=i("".concat(o+1),s.Yellow),u+=":",u+=i("".concat(c+1),s.Yellow)}function g(t,r,n){if(void 0===n&&(n=0),e.isString(t))return t;if(void 0===t)return"";var i="";if(n){i+=r;for(var a=0;a<n;a++)i+="  "}if(i+=t.messageText,n++,t.next)for(var o=0,s=t.next;o<s.length;o++){i+=g(s[o],r,n)}return i}function m(t,r,n,i,a){if(0===t.length)return[];for(var o=[],s=new e.Map,c=0,u=t;c<u.length;c++){var l=u[c],_=void 0,d=y(l,i),p=e.isString(l)?l:l.fileName.toLowerCase(),f=void 0!==d?"".concat(d,"|").concat(p):p;s.has(f)?_=s.get(f):s.set(f,_=a(p,r,n,d)),o.push(_)}return o}function y(t,r){return(e.isString(t)?r:t.resolutionMode)||r}function v(e,t){if(void 0!==e.impliedNodeFormat)return b(e,M(e,t))}function h(t){var r;return e.isExportDeclaration(t)?t.isTypeOnly:!!(null===(r=t.importClause)||void 0===r?void 0:r.isTypeOnly)}function b(t,r){var n,i;if(void 0!==t.impliedNodeFormat){var a;if(e.isImportDeclaration(r.parent)||e.isExportDeclaration(r.parent))if(h(r.parent))if(a=x(r.parent.assertClause))return a;if(r.parent.parent&&e.isImportTypeNode(r.parent.parent))if(a=x(null===(n=r.parent.parent.assertions)||void 0===n?void 0:n.assertClause))return a;if(t.impliedNodeFormat!==e.ModuleKind.ESNext)return e.isImportCall(e.walkUpParenthesizedExpressions(r.parent))?e.ModuleKind.ESNext:e.ModuleKind.CommonJS;var o=null===(i=e.walkUpParenthesizedExpressions(r.parent))||void 0===i?void 0:i.parent;return o&&e.isImportEqualsDeclaration(o)?e.ModuleKind.CommonJS:e.ModuleKind.ESNext}}function x(t,r){if(t)if(1===e.length(t.elements)){var n=t.elements[0];if(e.isStringLiteralLike(n.name))if("resolution-mode"===n.name.text){if(e.isStringLiteralLike(n.value)){if("import"===n.value.text||"require"===n.value.text)return"import"===n.value.text?e.ModuleKind.ESNext:e.ModuleKind.CommonJS;null==r||r(n.value,e.Diagnostics.resolution_mode_should_be_either_require_or_import)}}else null==r||r(n.name,e.Diagnostics.resolution_mode_is_the_only_valid_key_for_type_import_assertions)}else null==r||r(t,e.Diagnostics.Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require)}function D(t,r,n,i,a){if(0===t.length)return[];for(var o=[],s=new e.Map,c=0,u=0,l=t;u<l.length;u++){var _=l[u],d=void 0,p=v(r,c);c++;var f=void 0!==p?"".concat(p,"|").concat(_):_;s.has(f)?d=s.get(f):s.set(f,d=a(_,p,n,i)),o.push(d)}return o}function S(t,r,n,i){var a;return function t(r,o,s){if(i){var c=i(r,s);if(c)return c}return e.forEach(o,(function(r,i){if(!r||!(null==a?void 0:a.has(r.sourceFile.path))){var o=n(r,s,i);return o||!r?o:((a||(a=new e.Set)).add(r.sourceFile.path),t(r.commandLine.projectReferences,r.references,r))}}))}(t,r,void 0)}function T(t){switch(null==t?void 0:t.kind){case e.FileIncludeKind.Import:case e.FileIncludeKind.ReferenceFile:case e.FileIncludeKind.TypeReferenceDirective:case e.FileIncludeKind.LibReferenceDirective:return!0;default:return!1}}function C(e){return void 0!==e.pos}function E(t,r){var n,i,a,o,s,c,u,l,_,d,p,f=e.Debug.checkDefined(t(r.file)),g=r.kind,m=r.index;switch(g){case e.FileIncludeKind.Import:var y=M(f,m);if(d=null===(s=null===(o=f.resolvedModules)||void 0===o?void 0:o.get(y.text,v(f,m)))||void 0===s?void 0:s.packageId,-1===y.pos)return{file:f,packageId:d,text:y.text};l=e.skipTrivia(f.text,y.pos),_=y.end;break;case e.FileIncludeKind.ReferenceFile:l=(n=f.referencedFiles[m]).pos,_=n.end;break;case e.FileIncludeKind.TypeReferenceDirective:l=(i=f.typeReferenceDirectives[m]).pos,_=i.end,p=i.resolutionMode,d=null===(u=null===(c=f.resolvedTypeReferenceDirectiveNames)||void 0===c?void 0:c.get(e.toFileNameLowerCase(f.typeReferenceDirectives[m].fileName),p||f.impliedNodeFormat))||void 0===u?void 0:u.packageId;break;case e.FileIncludeKind.LibReferenceDirective:l=(a=f.libReferenceDirectives[m]).pos,_=a.end;break;default:return e.Debug.assertNever(g)}return{file:f,pos:l,end:_,packageId:d}}function k(t,r,n,i){switch(e.getEmitModuleResolutionKind(i)){case e.ModuleResolutionKind.Node16:case e.ModuleResolutionKind.NodeNext:return e.fileExtensionIsOneOf(t,[".d.mts",".mts",".mjs"])?e.ModuleKind.ESNext:e.fileExtensionIsOneOf(t,[".d.cts",".cts",".cjs"])?e.ModuleKind.CommonJS:e.fileExtensionIsOneOf(t,[".d.ts",".ts",".tsx",".js",".jsx"])?function(){var a=e.getTemporaryModuleResolutionState(r,n,i),o=[];a.failedLookupLocations=o,a.affectingLocations=o;var s=e.getPackageScopeForPath(t,a);return{impliedNodeFormat:"module"===(null==s?void 0:s.contents.packageJsonContent.type)?e.ModuleKind.ESNext:e.ModuleKind.CommonJS,packageJsonLocations:o,packageJsonScope:s}}():void 0;default:return}}function N(t,r,n,i){var o=t.getCompilerOptions();if(o.noEmit)return t.getSemanticDiagnostics(r,i),r||e.outFile(o)?e.emitSkippedWithNoDiagnostics:t.emitBuildInfo(n,i);if(o.noEmitOnError){var s=a(a(a(a([],t.getOptionsDiagnostics(i),!0),t.getSyntacticDiagnostics(r,i),!0),t.getGlobalDiagnostics(i),!0),t.getSemanticDiagnostics(r,i),!0);if(0===s.length&&e.getEmitDeclarations(t.getCompilerOptions())&&(s=t.getDeclarationDiagnostics(void 0,i)),s.length){var c;if(!r&&!e.outFile(o)){var u=t.emitBuildInfo(n,i);u.diagnostics&&(s=a(a([],s,!0),u.diagnostics,!0)),c=u.emittedFiles}return{diagnostics:s,sourceMaps:void 0,emittedFiles:c,emitSkipped:!0}}}}function A(t,r){return e.filter(t,(function(e){return!e.skippedOn||!r[e.skippedOn]}))}function F(t,r){return void 0===r&&(r=t),{fileExists:function(e){return r.fileExists(e)},readDirectory:function(t,n,i,a,o){return e.Debug.assertIsDefined(r.readDirectory,"'CompilerHost.readDirectory' must be implemented to correctly process 'projectReferences'"),r.readDirectory(t,n,i,a,o)},readFile:function(e){return r.readFile(e)},useCaseSensitiveFileNames:t.useCaseSensitiveFileNames(),getCurrentDirectory:function(){return t.getCurrentDirectory()},onUnRecoverableConfigFileDiagnostic:t.onUnRecoverableConfigFileDiagnostic||e.returnUndefined,trace:t.trace?function(e){return t.trace(e)}:void 0}}function P(t,r,n){if(!t)return e.emptyArray;for(var i,a=0;a<t.length;a++){var o=t[a],s=r(o,a);if(o.prepend&&s&&s.options){if(!e.outFile(s.options))continue;var c=e.getOutputPathsForBundle(s.options,!0),u=c.jsFilePath,l=c.sourceMapFilePath,_=c.declarationFilePath,d=c.declarationMapPath,p=c.buildInfoPath,f=e.createInputFiles(n,u,l,_,d,p);(i||(i=[])).push(f)}}return i||e.emptyArray}function w(t,r){var n=r||t;return e.resolveConfigFileProjectName(n.path)}function I(t,r){switch(r.extension){case".ts":case".d.ts":return;case".tsx":return n();case".jsx":return n()||i();case".js":return i();case".json":return t.resolveJsonModule?void 0:e.Diagnostics.Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used}function n(){return t.jsx?void 0:e.Diagnostics.Module_0_was_resolved_to_1_but_jsx_is_not_set}function i(){return e.getAllowJSCompilerOption(t)||!e.getStrictOptionValue(t,"noImplicitAny")?void 0:e.Diagnostics.Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type}}function O(e){for(var t=e.imports,r=e.moduleAugmentations,n=t.map((function(e){return e.text})),i=0,a=r;i<a.length;i++){var o=a[i];10===o.kind&&n.push(o.text)}return n}function M(t,r){var n=t.imports,i=t.moduleAugmentations;if(r<n.length)return n[r];for(var a=n.length,o=0,s=i;o<s.length;o++){var c=s[o];if(10===c.kind){if(r===a)return c;a++}}e.Debug.fail("should never ask for module name at index higher than possible module name")}e.formatColorAndReset=d,e.formatLocation=f,e.formatDiagnosticsWithColorAndContext=function(t,r){for(var n="",i=0,a=t;i<a.length;i++){var o=a[i];if(o.file)n+=f(y=o.file,v=o.start,r),n+=" - ";if(n+=d(e.diagnosticCategoryName(o),_(o.category)),n+=d(" TS".concat(o.code,": "),s.Grey),n+=g(o.messageText,r.getNewLine()),o.file&&(n+=r.getNewLine(),n+=p(o.file,o.start,o.length,"",_(o.category),r)),o.relatedInformation){n+=r.getNewLine();for(var c=0,u=o.relatedInformation;c<u.length;c++){var m=u[c],y=m.file,v=m.start,h=m.length,b=m.messageText;y&&(n+=r.getNewLine(),n+="  "+f(y,v,r),n+=p(y,v,h,l,s.Cyan,r)),n+=r.getNewLine(),n+=l+g(b,r.getNewLine())}}n+=r.getNewLine()}return n},e.flattenDiagnosticMessageText=g,e.loadWithTypeDirectiveCache=m,e.getModeForFileReference=y,e.getModeForResolutionAtIndex=v,e.isExclusivelyTypeOnlyImportOrExport=h,e.getModeForUsageLocation=b,e.getResolutionModeOverrideForClause=x,e.loadWithModeAwareCache=D,e.forEachResolvedProjectReference=function(e,t){return S(void 0,e,(function(e,r){return e&&t(e,r)}))},e.inferredTypesContainingFile="__inferred type names__.ts",e.isReferencedFile=T,e.isReferenceFileLocation=C,e.getReferencedFileLocation=E,e.isProgramUptoDate=function(t,r,n,i,a,o,s,c,u){if(!t||(null==s?void 0:s()))return!1;if(!e.arrayIsEqualTo(t.getRootFileNames(),r))return!1;var l;if(!e.arrayIsEqualTo(t.getProjectReferences(),u,(function(r,n,i){return e.projectReferenceIsEqualTo(r,n)&&d(t.getResolvedProjectReferences()[i],r)})))return!1;if(t.getSourceFiles().some((function(e){return!function(e){return e.version===i(e.resolvedPath,e.fileName)}(e)||o(e.path)})))return!1;if(t.getMissingFilePaths().some(a))return!1;var _=t.getCompilerOptions();return!!e.compareDataObjects(_,n)&&(!_.configFile||!n.configFile||_.configFile.text===n.configFile.text);function d(t,r){if(t){if(e.contains(l,t))return!0;var n=w(r),i=c(n);return!!i&&(t.commandLine.options.configFile===i.options.configFile&&(!!e.arrayIsEqualTo(t.commandLine.fileNames,i.fileNames)&&((l||(l=[])).push(t),!e.forEach(t.references,(function(e,r){return!d(e,t.commandLine.projectReferences[r])})))))}var a=w(r);return!c(a)}},e.getConfigFileParsingDiagnostics=function(e){return e.options.configFile?a(a([],e.options.configFile.parseDiagnostics,!0),e.errors,!0):e.errors},e.getImpliedNodeFormatForFile=function(e,t,r,n){var i=k(e,t,r,n);return"object"==typeof i?i.impliedNodeFormat:i},e.getImpliedNodeFormatForFileWorker=k,e.plainJSErrors=new e.Set([e.Diagnostics.Cannot_redeclare_block_scoped_variable_0.code,e.Diagnostics.A_module_cannot_have_multiple_default_exports.code,e.Diagnostics.Another_export_default_is_here.code,e.Diagnostics.The_first_export_default_is_here.code,e.Diagnostics.Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module.code,e.Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode.code,e.Diagnostics.Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here.code,e.Diagnostics.constructor_is_a_reserved_word.code,e.Diagnostics.delete_cannot_be_called_on_an_identifier_in_strict_mode.code,e.Diagnostics.Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of_0_For_more_information_see_https_Colon_Slash_Slashdeveloper_mozilla_org_Slashen_US_Slashdocs_SlashWeb_SlashJavaScript_SlashReference_SlashStrict_mode.code,e.Diagnostics.Invalid_use_of_0_Modules_are_automatically_in_strict_mode.code,e.Diagnostics.Invalid_use_of_0_in_strict_mode.code,e.Diagnostics.A_label_is_not_allowed_here.code,e.Diagnostics.Octal_literals_are_not_allowed_in_strict_mode.code,e.Diagnostics.with_statements_are_not_allowed_in_strict_mode.code,e.Diagnostics.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement.code,e.Diagnostics.A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement.code,e.Diagnostics.A_class_declaration_without_the_default_modifier_must_have_a_name.code,e.Diagnostics.A_class_member_cannot_have_the_0_keyword.code,e.Diagnostics.A_comma_expression_is_not_allowed_in_a_computed_property_name.code,e.Diagnostics.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement.code,e.Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement.code,e.Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement.code,e.Diagnostics.A_default_clause_cannot_appear_more_than_once_in_a_switch_statement.code,e.Diagnostics.A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration.code,e.Diagnostics.A_definite_assignment_assertion_is_not_permitted_in_this_context.code,e.Diagnostics.A_destructuring_declaration_must_have_an_initializer.code,e.Diagnostics.A_get_accessor_cannot_have_parameters.code,e.Diagnostics.A_rest_element_cannot_contain_a_binding_pattern.code,e.Diagnostics.A_rest_element_cannot_have_a_property_name.code,e.Diagnostics.A_rest_element_cannot_have_an_initializer.code,e.Diagnostics.A_rest_element_must_be_last_in_a_destructuring_pattern.code,e.Diagnostics.A_rest_parameter_cannot_have_an_initializer.code,e.Diagnostics.A_rest_parameter_must_be_last_in_a_parameter_list.code,e.Diagnostics.A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma.code,e.Diagnostics.A_return_statement_cannot_be_used_inside_a_class_static_block.code,e.Diagnostics.A_set_accessor_cannot_have_rest_parameter.code,e.Diagnostics.A_set_accessor_must_have_exactly_one_parameter.code,e.Diagnostics.An_export_declaration_can_only_be_used_at_the_top_level_of_a_module.code,e.Diagnostics.An_export_declaration_cannot_have_modifiers.code,e.Diagnostics.An_import_declaration_can_only_be_used_at_the_top_level_of_a_module.code,e.Diagnostics.An_import_declaration_cannot_have_modifiers.code,e.Diagnostics.An_object_member_cannot_be_declared_optional.code,e.Diagnostics.Argument_of_dynamic_import_cannot_be_spread_element.code,e.Diagnostics.Cannot_assign_to_private_method_0_Private_methods_are_not_writable.code,e.Diagnostics.Cannot_redeclare_identifier_0_in_catch_clause.code,e.Diagnostics.Catch_clause_variable_cannot_have_an_initializer.code,e.Diagnostics.Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_decorator.code,e.Diagnostics.Classes_can_only_extend_a_single_class.code,e.Diagnostics.Classes_may_not_have_a_field_named_constructor.code,e.Diagnostics.Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_part_of_a_destructuring_pattern.code,e.Diagnostics.Duplicate_label_0.code,e.Diagnostics.Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_assertion_as_arguments.code,e.Diagnostics.For_await_loops_cannot_be_used_inside_a_class_static_block.code,e.Diagnostics.JSX_attributes_must_only_be_assigned_a_non_empty_expression.code,e.Diagnostics.JSX_elements_cannot_have_multiple_attributes_with_the_same_name.code,e.Diagnostics.JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array.code,e.Diagnostics.JSX_property_access_expressions_cannot_include_JSX_namespace_names.code,e.Diagnostics.Jump_target_cannot_cross_function_boundary.code,e.Diagnostics.Line_terminator_not_permitted_before_arrow.code,e.Diagnostics.Modifiers_cannot_appear_here.code,e.Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement.code,e.Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement.code,e.Diagnostics.Private_identifiers_are_not_allowed_outside_class_bodies.code,e.Diagnostics.Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member_declaration_property_access_or_on_the_left_hand_side_of_an_in_expression.code,e.Diagnostics.Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier.code,e.Diagnostics.Tagged_template_expressions_are_not_permitted_in_an_optional_chain.code,e.Diagnostics.The_left_hand_side_of_a_for_of_statement_may_not_be_async.code,e.Diagnostics.The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer.code,e.Diagnostics.The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer.code,e.Diagnostics.Trailing_comma_not_allowed.code,e.Diagnostics.Variable_declaration_list_cannot_be_empty.code,e.Diagnostics._0_and_1_operations_cannot_be_mixed_without_parentheses.code,e.Diagnostics._0_expected.code,e.Diagnostics._0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2.code,e.Diagnostics._0_list_cannot_be_empty.code,e.Diagnostics._0_modifier_already_seen.code,e.Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration.code,e.Diagnostics._0_modifier_cannot_appear_on_a_module_or_namespace_element.code,e.Diagnostics._0_modifier_cannot_appear_on_a_parameter.code,e.Diagnostics._0_modifier_cannot_appear_on_class_elements_of_this_kind.code,e.Diagnostics._0_modifier_cannot_be_used_here.code,e.Diagnostics._0_modifier_must_precede_1_modifier.code,e.Diagnostics.const_declarations_can_only_be_declared_inside_a_block.code,e.Diagnostics.const_declarations_must_be_initialized.code,e.Diagnostics.extends_clause_already_seen.code,e.Diagnostics.let_declarations_can_only_be_declared_inside_a_block.code,e.Diagnostics.let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations.code,e.Diagnostics.Class_constructor_may_not_be_a_generator.code,e.Diagnostics.Class_constructor_may_not_be_an_accessor.code,e.Diagnostics.await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules.code]),e.createProgram=function(n,i,s,c,u){var l,_,d,p,f,g,h,b,x,M,L,R,B=e.isArray(n)?function(e,t,r,n,i){return{rootNames:e,options:t,host:r,oldProgram:n,configFileParsingDiagnostics:i}}(n,i,s,c,u):n,j=B.rootNames,J=B.options,z=B.configFileParsingDiagnostics,U=B.projectReferences,K=B.oldProgram,V=new e.Map,q=e.createMultiMap(),W={},H={},G=e.createModeAwareCache(),Q="number"==typeof J.maxNodeModuleJsDepth?J.maxNodeModuleJsDepth:0,X=0,Y=new e.Map,Z=new e.Map;null===e.tracing||void 0===e.tracing||e.tracing.push("program","createProgram",{configFilePath:J.configFilePath,rootDir:J.rootDir},!0),e.performance.mark("beforeProgram");var $,ee,te,re,ne,ie=B.host||r(J),ae=F(ie),oe=J.noLib,se=e.memoize((function(){return ie.getDefaultLibFileName(J)})),ce=ie.getDefaultLibLocation?ie.getDefaultLibLocation():e.getDirectoryPath(se()),ue=e.createDiagnosticCollection(),le=ie.getCurrentDirectory(),_e=e.getSupportedExtensions(J),de=e.getSupportedExtensionsWithJsonIfResolveJsonModule(J,_e),pe=new e.Map,fe=ie.hasInvalidatedResolutions||e.returnFalse;if(ie.resolveModuleNames)re=function(t,r,n,i,a){return ie.resolveModuleNames(e.Debug.checkEachDefined(t),n,i,a,J,r).map((function(t){if(!t||void 0!==t.extension)return t;var r=e.clone(t);return r.extension=e.extensionFromPath(t.resolvedFileName),r}))},ee=null===(l=ie.getModuleResolutionCache)||void 0===l?void 0:l.call(ie);else{ee=e.createModuleResolutionCache(le,Gt,J);var ge=function(t,r,n,i){return e.resolveModuleName(t,n,J,ie,ee,i,r).resolvedModule};re=function(t,r,n,i,a){return D(e.Debug.checkEachDefined(t),r,n,a,ge)}}if(ie.resolveTypeReferenceDirectives)ne=function(t,r,n,i){return ie.resolveTypeReferenceDirectives(e.Debug.checkEachDefined(t),r,n,J,i)};else{te=e.createTypeReferenceDirectiveResolutionCache(le,Gt,void 0,null==ee?void 0:ee.getPackageJsonInfoCache());var me=function(t,r,n,i){return e.resolveTypeReferenceDirective(t,r,J,ie,n,te,i).resolvedTypeReferenceDirective};ne=function(t,r,n,i){return m(e.Debug.checkEachDefined(t),r,n,i,me)}}var ye,ve,he,be,xe,De=new e.Map,Se=new e.Map,Te=e.createMultiMap(),Ce=!1,Ee=new e.Map,ke=ie.useCaseSensitiveFileNames()?new e.Map:void 0,Ne=!!(null===(_=ie.useSourceOfProjectReferenceRedirect)||void 0===_?void 0:_.call(ie))&&!J.disableSourceOfProjectReferenceRedirect,Ae=function(t){var r,n,i=t.compilerHost.fileExists,a=t.compilerHost.directoryExists,o=t.compilerHost.getDirectories,s=t.compilerHost.realpath;if(!t.useSourceOfProjectReferenceRedirect)return{onProgramCreateComplete:e.noop,fileExists:u};t.compilerHost.fileExists=u,a&&(n=t.compilerHost.directoryExists=function(n){return a.call(t.compilerHost,n)?(d(n),!0):!!t.getResolvedProjectReferences()&&(r||(r=new e.Set,t.forEachResolvedProjectReference((function(n){var i=e.outFile(n.commandLine.options);if(i)r.add(e.getDirectoryPath(t.toPath(i)));else{var a=n.commandLine.options.declarationDir||n.commandLine.options.outDir;a&&r.add(t.toPath(a))}}))),p(n,!1))});o&&(t.compilerHost.getDirectories=function(e){return!t.getResolvedProjectReferences()||a&&a.call(t.compilerHost,e)?o.call(t.compilerHost,e):[]});s&&(t.compilerHost.realpath=function(e){var r;return(null===(r=t.getSymlinkCache().getSymlinkedFiles())||void 0===r?void 0:r.get(t.toPath(e)))||s.call(t.compilerHost,e)});return{onProgramCreateComplete:c,fileExists:u,directoryExists:n};function c(){t.compilerHost.fileExists=i,t.compilerHost.directoryExists=a,t.compilerHost.getDirectories=o}function u(r){return!!i.call(t.compilerHost,r)||!!t.getResolvedProjectReferences()&&(!!e.isDeclarationFileName(r)&&p(r,!0))}function l(r){var n=t.getSourceOfProjectReferenceRedirect(t.toPath(r));return void 0!==n?!e.isString(n)||i.call(t.compilerHost,n):void 0}function _(n){var i=t.toPath(n),a="".concat(i).concat(e.directorySeparator);return e.forEachKey(r,(function(t){return i===t||e.startsWith(t,a)||e.startsWith(i,"".concat(t,"/"))}))}function d(r){var n;if(t.getResolvedProjectReferences()&&!e.containsIgnoredPath(r)&&s&&e.stringContains(r,e.nodeModulesPathPart)){var i=t.getSymlinkCache(),a=e.ensureTrailingDirectorySeparator(t.toPath(r));if(!(null===(n=i.getSymlinkedDirectories())||void 0===n?void 0:n.has(a))){var o,c=e.normalizePath(s.call(t.compilerHost,r));c!==r&&(o=e.ensureTrailingDirectorySeparator(t.toPath(c)))!==a?i.setSymlinkedDirectory(r,{real:e.ensureTrailingDirectorySeparator(c),realPath:o}):i.setSymlinkedDirectory(a,!1)}}}function p(r,n){var i,a=n?function(e){return l(e)}:function(e){return _(e)},o=a(r);if(void 0!==o)return o;var s=t.getSymlinkCache(),c=s.getSymlinkedDirectories();if(!c)return!1;var u=t.toPath(r);return!!e.stringContains(u,e.nodeModulesPathPart)&&(!(!n||!(null===(i=s.getSymlinkedFiles())||void 0===i?void 0:i.has(u)))||(e.firstDefinedIterator(c.entries(),(function(i){var o=i[0],c=i[1];if(c&&e.startsWith(u,o)){var l=a(u.replace(o,c.realPath));if(n&&l){var _=e.getNormalizedAbsolutePath(r,t.compilerHost.getCurrentDirectory());s.setSymlinkedFile(u,"".concat(c.real).concat(_.replace(new RegExp(o,"i"),"")))}return l}}))||!1))}}({compilerHost:ie,getSymlinkCache:pr,useSourceOfProjectReferenceRedirect:Ne,toPath:Ze,getResolvedProjectReferences:nt,getSourceOfProjectReferenceRedirect:Jt,forEachResolvedProjectReference:jt}),Fe=Ae.onProgramCreateComplete,Pe=Ae.fileExists,we=Ae.directoryExists,Ie=ie.readFile.bind(ie);null===e.tracing||void 0===e.tracing||e.tracing.push("program","shouldProgramCreateNewSourceFiles",{hasOldProgram:!!K});var Oe,Me=function(t,r){return!!t&&e.optionsHaveChanges(t.getCompilerOptions(),r,e.sourceFileAffectingCompilerOptions)}(K,J);if(null===e.tracing||void 0===e.tracing||e.tracing.pop(),null===e.tracing||void 0===e.tracing||e.tracing.push("program","tryReuseStructureFromOldProgram",{}),Oe=function(){var t,r;if(!K)return 0;var n=K.getCompilerOptions();if(e.changesAffectModuleResolution(n,J))return 0;var i=K.getRootFileNames();if(!e.arrayIsEqualTo(i,j))return 0;if(S(K.getProjectReferences(),K.getResolvedProjectReferences(),(function(t,r,n){var i=Xt((r?r.commandLine.projectReferences:U)[n]);return t?!i||i.sourceFile!==t.sourceFile||!e.arrayIsEqualTo(t.commandLine.fileNames,i.commandLine.fileNames):void 0!==i}),(function(t,r){var n=r?Ut(r.sourceFile.path).commandLine.projectReferences:U;return!e.arrayIsEqualTo(t,n,e.projectReferenceIsEqualTo)})))return 0;U&&(ve=U.map(Xt));var a=[],o=[];if(Oe=2,K.getMissingFilePaths().some((function(e){return ie.fileExists(e)})))return 0;var s,c=K.getSourceFiles();!function(e){e[e.Exists=0]="Exists",e[e.Modified=1]="Modified"}(s||(s={}));for(var u=new e.Map,l=0,_=c;l<_.length;l++){var d=wt((A=_[l]).fileName,ee,ie,J);if(!(B=ie.getSourceFileByPath?ie.getSourceFileByPath(A.fileName,A.resolvedPath,d,void 0,Me||d.impliedNodeFormat!==A.impliedNodeFormat):ie.getSourceFile(A.fileName,d,void 0,Me||d.impliedNodeFormat!==A.impliedNodeFormat)))return 0;B.packageJsonLocations=(null===(t=d.packageJsonLocations)||void 0===t?void 0:t.length)?d.packageJsonLocations:void 0,B.packageJsonScope=d.packageJsonScope,e.Debug.assert(!B.redirectInfo,"Host should not return a redirect source file from `getSourceFile`");var p=void 0;if(A.redirectInfo){if(B!==A.redirectInfo.unredirected)return 0;p=!1,B=A}else if(K.redirectTargetsMap.has(A.path)){if(B!==A)return 0;p=!1}else p=B!==A;B.path=A.path,B.originalFileName=A.originalFileName,B.resolvedPath=A.resolvedPath,B.fileName=A.fileName;var f=K.sourceFileToPackageName.get(A.path);if(void 0!==f){var g=u.get(f),m=p?1:0;if(void 0!==g&&1===m||1===g)return 0;u.set(f,m)}p?(A.impliedNodeFormat!==B.impliedNodeFormat?Oe=1:e.arrayIsEqualTo(A.libReferenceDirectives,B.libReferenceDirectives,St)?A.hasNoDefaultLib!==B.hasNoDefaultLib?Oe=1:e.arrayIsEqualTo(A.referencedFiles,B.referencedFiles,St)?(Et(B),e.arrayIsEqualTo(A.imports,B.imports,Tt)&&e.arrayIsEqualTo(A.moduleAugmentations,B.moduleAugmentations,Tt)?(6291456&A.flags)!=(6291456&B.flags)?Oe=1:e.arrayIsEqualTo(A.typeReferenceDirectives,B.typeReferenceDirectives,St)||(Oe=1):Oe=1):Oe=1:Oe=1,o.push({oldFile:A,newFile:B})):fe(A.path)&&(Oe=1,o.push({oldFile:A,newFile:B})),a.push(B)}if(2!==Oe)return Oe;for(var y=o.map((function(e){return e.oldFile})),v=0,b=c;v<b.length;v++){var x=b[v];if(!e.contains(y,x))for(var D=0,T=x.ambientModuleNames;D<T.length;D++){var C=T[D];V.set(C,x.fileName)}}for(var E=0,k=o;E<k.length;E++){var N=k[E],A=N.oldFile,F=O(B=N.newFile),P=et(F,B);e.hasChangesInResolutions(F,P,A.resolvedModules,A,e.moduleResolutionIsEqualTo)?(Oe=1,B.resolvedModules=e.zipToModeAwareCache(B,F,P)):B.resolvedModules=A.resolvedModules;var w=B.typeReferenceDirectives,I=Ge(w,B);e.hasChangesInResolutions(w,I,A.resolvedTypeReferenceDirectiveNames,A,e.typeDirectiveIsEqualTo)?(Oe=1,B.resolvedTypeReferenceDirectiveNames=e.zipToModeAwareCache(B,w,I)):B.resolvedTypeReferenceDirectiveNames=A.resolvedTypeReferenceDirectiveNames}if(2!==Oe)return Oe;if(e.changesAffectingProgramStructure(n,J)||(null===(r=ie.hasChangedAutomaticTypeDirectiveNames)||void 0===r?void 0:r.call(ie)))return 1;ye=K.getMissingFilePaths(),e.Debug.assert(a.length===K.getSourceFiles().length);for(var M=0,L=a;M<L.length;M++){var B=L[M];Ee.set(B.path,B)}return K.getFilesByNameMap().forEach((function(e,t){e?e.path!==t?Ee.set(t,Ee.get(e.path)):K.isSourceFileFromExternalLibrary(e)&&Z.set(e.path,!0):Ee.set(t,e)})),h=a,q=K.getFileIncludeReasons(),R=K.getFileProcessingDiagnostics(),G=K.getResolvedTypeReferenceDirectives(),Se=K.sourceFileToPackageName,Te=K.redirectTargetsMap,Ce=K.usesUriStyleNodeCoreModules,2}(),null===e.tracing||void 0===e.tracing||e.tracing.pop(),2!==Oe){f=[],g=[],U&&(ve||(ve=U.map(Xt)),j.length&&(null==ve||ve.forEach((function(t,r){if(t){var n=e.outFile(t.commandLine.options);if(Ne){if(n||e.getEmitModuleKind(t.commandLine.options)===e.ModuleKind.None)for(var i=0,a=t.commandLine.fileNames;i<a.length;i++){At(u=a[i],{kind:e.FileIncludeKind.SourceFromProjectReference,index:r})}}else if(n)At(e.changeExtension(n,".d.ts"),{kind:e.FileIncludeKind.OutputFromProjectReference,index:r});else if(e.getEmitModuleKind(t.commandLine.options)===e.ModuleKind.None)for(var o=e.memoize((function(){return e.getCommonSourceDirectoryOfConfig(t.commandLine,!ie.useCaseSensitiveFileNames())})),s=0,c=t.commandLine.fileNames;s<c.length;s++){var u=c[s];e.isDeclarationFileName(u)||e.fileExtensionIs(u,".json")||At(e.getOutputDeclarationFileName(u,t.commandLine,!ie.useCaseSensitiveFileNames(),o),{kind:e.FileIncludeKind.OutputFromProjectReference,index:r})}}})))),null===e.tracing||void 0===e.tracing||e.tracing.push("program","processRootFiles",{count:j.length}),e.forEach(j,(function(t,r){return Dt(t,!1,!1,{kind:e.FileIncludeKind.RootFile,index:r})})),null===e.tracing||void 0===e.tracing||e.tracing.pop();var Le=j.length?e.getAutomaticTypeDirectiveNames(J,ie):e.emptyArray;if(Le.length){null===e.tracing||void 0===e.tracing||e.tracing.push("program","processTypeReferences",{count:Le.length});for(var Re=J.configFilePath?e.getDirectoryPath(J.configFilePath):ie.getCurrentDirectory(),Be=Ge(Le,e.combinePaths(Re,e.inferredTypesContainingFile)),je=0;je<Le.length;je++)qt(Le[je],void 0,Be[je],{kind:e.FileIncludeKind.AutomaticTypeDirectiveFile,typeReference:Le[je],packageId:null===(d=Be[je])||void 0===d?void 0:d.packageId});null===e.tracing||void 0===e.tracing||e.tracing.pop()}if(j.length&&!oe){var Je=se();!J.lib&&Je?Dt(Je,!0,!1,{kind:e.FileIncludeKind.LibFile}):e.forEach(J.lib,(function(t,r){Dt(Wt(t),!0,!1,{kind:e.FileIncludeKind.LibFile,index:r})}))}ye=e.arrayFrom(e.mapDefinedIterator(Ee.entries(),(function(e){var t=e[0];return void 0===e[1]?t:void 0}))),h=e.stableSort(f,(function(t,r){return e.compareValues(Ye(t),Ye(r))})).concat(g),f=void 0,g=void 0}if(e.Debug.assert(!!ye),K&&ie.onReleaseOldSourceFile){for(var ze=0,Ue=K.getSourceFiles();ze<Ue.length;ze++){var Ke=Ue[ze],Ve=ut(Ke.resolvedPath);(Me||!Ve||Ve.impliedNodeFormat!==Ke.impliedNodeFormat||Ke.resolvedPath===Ke.path&&Ve.resolvedPath!==Ke.path)&&ie.onReleaseOldSourceFile(Ke,K.getCompilerOptions(),!!ut(Ke.path))}ie.getParsedCommandLine||K.forEachResolvedProjectReference((function(e){Ut(e.sourceFile.path)||ie.onReleaseOldSourceFile(e.sourceFile,K.getCompilerOptions(),!1)}))}K&&ie.onReleaseParsedCommandLine&&S(K.getProjectReferences(),K.getResolvedProjectReferences(),(function(e,t,r){var n=w((null==t?void 0:t.commandLine.projectReferences[r])||K.getProjectReferences()[r]);(null==he?void 0:he.has(Ze(n)))||ie.onReleaseParsedCommandLine(n,e,K.getCompilerOptions())})),te=void 0,K=void 0;var qe={getRootFileNames:function(){return j},getSourceFile:ct,getSourceFileByPath:ut,getSourceFiles:function(){return h},getMissingFilePaths:function(){return ye},getModuleResolutionCache:function(){return ee},getFilesByNameMap:function(){return Ee},getCompilerOptions:function(){return J},getSyntacticDiagnostics:function(e,t){return lt(e,dt,t)},getOptionsDiagnostics:function(){return e.sortAndDeduplicateDiagnostics(e.concatenate(ue.getGlobalDiagnostics(),function(){if(!J.configFile)return e.emptyArray;var t=ue.getDiagnostics(J.configFile.fileName);return jt((function(r){t=e.concatenate(t,ue.getDiagnostics(r.sourceFile.fileName))})),t}()))},getGlobalDiagnostics:function(){return j.length?e.sortAndDeduplicateDiagnostics(ot().getGlobalDiagnostics().slice()):e.emptyArray},getSemanticDiagnostics:function(e,t){return lt(e,ft,t)},getCachedSemanticDiagnostics:function(e){var t;return e?null===(t=W.perFile)||void 0===t?void 0:t.get(e.path):W.allDiagnostics},getSuggestionDiagnostics:function(e,t){return pt((function(){return ot().getSuggestionDiagnostics(e,t)}))},getDeclarationDiagnostics:function(t,r){var n=qe.getCompilerOptions();return!t||e.outFile(n)?vt(t,r):lt(t,xt,r)},getBindAndCheckDiagnostics:function(e,t){return gt(e,t)},getProgramDiagnostics:_t,getTypeChecker:ot,getClassifiableNames:function(){var t;if(!L){ot(),L=new e.Set;for(var r=0,n=h;r<n.length;r++){null===(t=n[r].classifiableNames)||void 0===t||t.forEach((function(e){return L.add(e)}))}}return L},getCommonSourceDirectory:$e,emit:function(t,r,n,i,a,o){null===e.tracing||void 0===e.tracing||e.tracing.push("emit","emit",{path:null==t?void 0:t.path},!0);var s=pt((function(){return function(t,r,n,i,a,o,s){if(!s){var c=N(t,r,n,i);if(c)return c}var u=ot().getEmitResolver(e.outFile(J)?void 0:r,i);e.performance.mark("beforeEmit");var l=e.emitFiles(u,tt(n),r,e.getTransformers(J,o,a),a,!1,s);return e.performance.mark("afterEmit"),e.performance.measure("Emit","beforeEmit","afterEmit"),l}(qe,t,r,n,i,a,o)}));return null===e.tracing||void 0===e.tracing||e.tracing.pop(),s},getCurrentDirectory:function(){return le},getNodeCount:function(){return ot().getNodeCount()},getIdentifierCount:function(){return ot().getIdentifierCount()},getSymbolCount:function(){return ot().getSymbolCount()},getTypeCount:function(){return ot().getTypeCount()},getInstantiationCount:function(){return ot().getInstantiationCount()},getRelationCacheSizes:function(){return ot().getRelationCacheSizes()},getFileProcessingDiagnostics:function(){return R},getResolvedTypeReferenceDirectives:function(){return G},isSourceFileFromExternalLibrary:at,isSourceFileDefaultLibrary:function(t){if(!t.isDeclarationFile)return!1;if(t.hasNoDefaultLib)return!0;if(!J.noLib)return!1;var r=ie.useCaseSensitiveFileNames()?e.equateStringsCaseSensitive:e.equateStringsCaseInsensitive;return J.lib?e.some(J.lib,(function(e){return r(t.fileName,Wt(e))})):r(t.fileName,se())},getSourceFileFromReference:function(e,r){return kt(t(r.fileName,e.fileName),ct)},getLibFileFromReference:function(t){var r=e.toFileNameLowerCase(t.fileName),n=e.libMap.get(r);if(n)return ct(Wt(n))},sourceFileToPackageName:Se,redirectTargetsMap:Te,usesUriStyleNodeCoreModules:Ce,isEmittedFile:function(t){if(J.noEmit)return!1;var r=Ze(t);if(ut(r))return!1;var n=e.outFile(J);if(n)return dr(r,n)||dr(r,e.removeFileExtension(n)+".d.ts");if(J.declarationDir&&e.containsPath(J.declarationDir,r,le,!ie.useCaseSensitiveFileNames()))return!0;if(J.outDir)return e.containsPath(J.outDir,r,le,!ie.useCaseSensitiveFileNames());if(e.fileExtensionIsOneOf(r,e.supportedJSExtensionsFlat)||e.isDeclarationFileName(r)){var i=e.removeFileExtension(r);return!!ut(i+".ts")||!!ut(i+".tsx")}return!1},getConfigFileParsingDiagnostics:function(){return z||e.emptyArray},getResolvedModuleWithFailedLookupLocationsFromCache:function(t,r,n){return ee&&e.resolveModuleNameFromCache(t,r,ee,n)},getProjectReferences:function(){return U},getResolvedProjectReferences:nt,getProjectReferenceRedirect:Mt,getResolvedProjectReferenceToRedirect:Bt,getResolvedProjectReferenceByPath:Ut,forEachResolvedProjectReference:jt,isSourceOfProjectReferenceRedirect:zt,emitBuildInfo:function(t){e.Debug.assert(!e.outFile(J)),null===e.tracing||void 0===e.tracing||e.tracing.push("emit","emitBuildInfo",{},!0),e.performance.mark("beforeEmit");var r=e.emitFiles(e.notImplementedResolver,tt(t),void 0,e.noTransformers,!1,!0);return e.performance.mark("afterEmit"),e.performance.measure("Emit","beforeEmit","afterEmit"),null===e.tracing||void 0===e.tracing||e.tracing.pop(),r},fileExists:Pe,readFile:Ie,directoryExists:we,getSymlinkCache:pr,realpath:null===(p=ie.realpath)||void 0===p?void 0:p.bind(ie),useCaseSensitiveFileNames:function(){return ie.useCaseSensitiveFileNames()},getFileIncludeReasons:function(){return q},structureIsReused:Oe,writeFile:rt};return Fe(),null==R||R.forEach((function(t){switch(t.kind){case 1:return ue.add(Yt(t.file&&ut(t.file),t.fileProcessingReason,t.diagnostic,t.args||e.emptyArray));case 0:var r=E(ut,t.reason),n=r.file,i=r.pos,o=r.end;return ue.add(e.createFileDiagnostic.apply(void 0,a([n,e.Debug.checkDefined(i),e.Debug.checkDefined(o)-i,t.diagnostic],t.args||e.emptyArray,!1)));default:e.Debug.assertNever(t)}})),function(){J.strictPropertyInitialization&&!e.getStrictOptionValue(J,"strictNullChecks")&&ar(e.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1,"strictPropertyInitialization","strictNullChecks");J.exactOptionalPropertyTypes&&!e.getStrictOptionValue(J,"strictNullChecks")&&ar(e.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1,"exactOptionalPropertyTypes","strictNullChecks");J.isolatedModules&&(J.out&&ar(e.Diagnostics.Option_0_cannot_be_specified_with_option_1,"out","isolatedModules"),J.outFile&&ar(e.Diagnostics.Option_0_cannot_be_specified_with_option_1,"outFile","isolatedModules"));J.inlineSourceMap&&(J.sourceMap&&ar(e.Diagnostics.Option_0_cannot_be_specified_with_option_1,"sourceMap","inlineSourceMap"),J.mapRoot&&ar(e.Diagnostics.Option_0_cannot_be_specified_with_option_1,"mapRoot","inlineSourceMap"));J.composite&&(!1===J.declaration&&ar(e.Diagnostics.Composite_projects_may_not_disable_declaration_emit,"declaration"),!1===J.incremental&&ar(e.Diagnostics.Composite_projects_may_not_disable_incremental_compilation,"declaration"));var t=e.outFile(J);J.tsBuildInfoFile?e.isIncrementalCompilation(J)||ar(e.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1_or_option_2,"tsBuildInfoFile","incremental","composite"):!J.incremental||t||J.configFilePath||ue.add(e.createCompilerDiagnostic(e.Diagnostics.Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBuildInfoFile_is_specified));if(function(){var t=J.suppressOutputPathCheck?void 0:e.getTsBuildInfoEmitOutputFilePath(J);S(U,ve,(function(r,n,i){var a=(n?n.commandLine.projectReferences:U)[i],o=n&&n.sourceFile;if(r){var s=r.commandLine.options;if(!s.composite||s.noEmit)(n?n.commandLine.fileNames:j).length&&(s.composite||sr(o,i,e.Diagnostics.Referenced_project_0_must_have_setting_composite_Colon_true,a.path),s.noEmit&&sr(o,i,e.Diagnostics.Referenced_project_0_may_not_disable_emit,a.path));if(a.prepend){var c=e.outFile(s);c?ie.fileExists(c)||sr(o,i,e.Diagnostics.Output_file_0_from_project_1_does_not_exist,c,a.path):sr(o,i,e.Diagnostics.Cannot_prepend_project_0_because_it_does_not_have_outFile_set,a.path)}!n&&t&&t===e.getTsBuildInfoEmitOutputFilePath(s)&&(sr(o,i,e.Diagnostics.Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1,t,a.path),pe.set(Ze(t),!0))}else sr(o,i,e.Diagnostics.File_0_not_found,a.path)}))}(),J.composite)for(var r=new e.Set(j.map(Ze)),n=0,i=h;n<i.length;n++){var a=i[n];e.sourceFileMayBeEmitted(a,qe)&&!r.has(a.path)&&$t(a,e.Diagnostics.File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_include_pattern,[a.fileName,J.configFilePath||""])}if(J.paths)for(var o in J.paths)if(e.hasProperty(J.paths,o))if(e.hasZeroOrOneAsteriskCharacter(o)||tr(!0,o,e.Diagnostics.Pattern_0_can_have_at_most_one_Asterisk_character,o),e.isArray(J.paths[o])){var s=J.paths[o].length;0===s&&tr(!1,o,e.Diagnostics.Substitutions_for_pattern_0_shouldn_t_be_an_empty_array,o);for(var c=0;c<s;c++){var u=J.paths[o][c],l=typeof u;"string"===l?(e.hasZeroOrOneAsteriskCharacter(u)||er(o,c,e.Diagnostics.Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character,u,o),J.baseUrl||e.pathIsRelative(u)||e.pathIsAbsolute(u)||er(o,c,e.Diagnostics.Non_relative_paths_are_not_allowed_when_baseUrl_is_not_set_Did_you_forget_a_leading_Slash)):er(o,c,e.Diagnostics.Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2,u,o,l)}}else tr(!1,o,e.Diagnostics.Substitutions_for_pattern_0_should_be_an_array,o);J.sourceMap||J.inlineSourceMap||(J.inlineSources&&ar(e.Diagnostics.Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided,"inlineSources"),J.sourceRoot&&ar(e.Diagnostics.Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided,"sourceRoot"));J.out&&J.outFile&&ar(e.Diagnostics.Option_0_cannot_be_specified_with_option_1,"out","outFile");!J.mapRoot||J.sourceMap||J.declarationMap||ar(e.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1_or_option_2,"mapRoot","sourceMap","declarationMap");J.declarationDir&&(e.getEmitDeclarations(J)||ar(e.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1_or_option_2,"declarationDir","declaration","composite"),t&&ar(e.Diagnostics.Option_0_cannot_be_specified_with_option_1,"declarationDir",J.out?"out":"outFile"));J.declarationMap&&!e.getEmitDeclarations(J)&&ar(e.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1_or_option_2,"declarationMap","declaration","composite");J.lib&&J.noLib&&ar(e.Diagnostics.Option_0_cannot_be_specified_with_option_1,"lib","noLib");J.noImplicitUseStrict&&e.getStrictOptionValue(J,"alwaysStrict")&&ar(e.Diagnostics.Option_0_cannot_be_specified_with_option_1,"noImplicitUseStrict","alwaysStrict");var _=e.getEmitScriptTarget(J),d=e.find(h,(function(t){return e.isExternalModule(t)&&!t.isDeclarationFile}));if(J.isolatedModules){J.module===e.ModuleKind.None&&_<2&&ar(e.Diagnostics.Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES2015_or_higher,"isolatedModules","target"),!1===J.preserveConstEnums&&ar(e.Diagnostics.Option_preserveConstEnums_cannot_be_disabled_when_isolatedModules_is_enabled,"preserveConstEnums","isolatedModules");for(var p=0,f=h;p<f.length;p++){a=f[p];if(!e.isExternalModule(a)&&!e.isSourceFileJS(a)&&!a.isDeclarationFile&&6!==a.scriptKind){var g=e.getErrorSpanForNode(a,a);ue.add(e.createFileDiagnostic(a,g.start,g.length,e.Diagnostics._0_cannot_be_compiled_under_isolatedModules_because_it_is_considered_a_global_script_file_Add_an_import_export_or_an_empty_export_statement_to_make_it_a_module,e.getBaseFileName(a.fileName)))}}}else if(d&&_<2&&J.module===e.ModuleKind.None){g=e.getErrorSpanForNode(d,"boolean"==typeof d.externalModuleIndicator?d:d.externalModuleIndicator);ue.add(e.createFileDiagnostic(d,g.start,g.length,e.Diagnostics.Cannot_use_imports_exports_or_module_augmentations_when_module_is_none))}if(t&&!J.emitDeclarationOnly)if(J.module&&J.module!==e.ModuleKind.AMD&&J.module!==e.ModuleKind.System)ar(e.Diagnostics.Only_amd_and_system_modules_are_supported_alongside_0,J.out?"out":"outFile","module");else if(void 0===J.module&&d){g=e.getErrorSpanForNode(d,"boolean"==typeof d.externalModuleIndicator?d:d.externalModuleIndicator);ue.add(e.createFileDiagnostic(d,g.start,g.length,e.Diagnostics.Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system,J.out?"out":"outFile"))}J.resolveJsonModule&&(e.getEmitModuleResolutionKind(J)!==e.ModuleResolutionKind.NodeJs&&e.getEmitModuleResolutionKind(J)!==e.ModuleResolutionKind.Node16&&e.getEmitModuleResolutionKind(J)!==e.ModuleResolutionKind.NodeNext?ar(e.Diagnostics.Option_resolveJsonModule_cannot_be_specified_without_node_module_resolution_strategy,"resolveJsonModule"):e.hasJsonModuleEmitEnabled(J)||ar(e.Diagnostics.Option_resolveJsonModule_can_only_be_specified_when_module_code_generation_is_commonjs_amd_es2015_or_esNext,"resolveJsonModule","module"));if(J.outDir||J.rootDir||J.sourceRoot||J.mapRoot){var m=$e();J.outDir&&""===m&&h.some((function(t){return e.getRootLength(t.fileName)>1}))&&ar(e.Diagnostics.Cannot_find_the_common_subdirectory_path_for_the_input_files,"outDir")}J.useDefineForClassFields&&0===_&&ar(e.Diagnostics.Option_0_cannot_be_specified_when_option_target_is_ES3,"useDefineForClassFields");J.checkJs&&!e.getAllowJSCompilerOption(J)&&ue.add(e.createCompilerDiagnostic(e.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1,"checkJs","allowJs"));J.emitDeclarationOnly&&(e.getEmitDeclarations(J)||ar(e.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1_or_option_2,"emitDeclarationOnly","declaration","composite"),J.noEmit&&ar(e.Diagnostics.Option_0_cannot_be_specified_with_option_1,"emitDeclarationOnly","noEmit"));J.emitDecoratorMetadata&&!J.experimentalDecorators&&ar(e.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1,"emitDecoratorMetadata","experimentalDecorators");J.jsxFactory?(J.reactNamespace&&ar(e.Diagnostics.Option_0_cannot_be_specified_with_option_1,"reactNamespace","jsxFactory"),4!==J.jsx&&5!==J.jsx||ar(e.Diagnostics.Option_0_cannot_be_specified_when_option_jsx_is_1,"jsxFactory",e.inverseJsxOptionMap.get(""+J.jsx)),e.parseIsolatedEntityName(J.jsxFactory,_)||or("jsxFactory",e.Diagnostics.Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name,J.jsxFactory)):J.reactNamespace&&!e.isIdentifierText(J.reactNamespace,_)&&or("reactNamespace",e.Diagnostics.Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier,J.reactNamespace);J.jsxFragmentFactory&&(J.jsxFactory||ar(e.Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1,"jsxFragmentFactory","jsxFactory"),4!==J.jsx&&5!==J.jsx||ar(e.Diagnostics.Option_0_cannot_be_specified_when_option_jsx_is_1,"jsxFragmentFactory",e.inverseJsxOptionMap.get(""+J.jsx)),e.parseIsolatedEntityName(J.jsxFragmentFactory,_)||or("jsxFragmentFactory",e.Diagnostics.Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name,J.jsxFragmentFactory));J.reactNamespace&&(4!==J.jsx&&5!==J.jsx||ar(e.Diagnostics.Option_0_cannot_be_specified_when_option_jsx_is_1,"reactNamespace",e.inverseJsxOptionMap.get(""+J.jsx)));J.jsxImportSource&&2===J.jsx&&ar(e.Diagnostics.Option_0_cannot_be_specified_when_option_jsx_is_1,"jsxImportSource",e.inverseJsxOptionMap.get(""+J.jsx));J.preserveValueImports&&e.getEmitModuleKind(J)<e.ModuleKind.ES2015&&or("importsNotUsedAsValues",e.Diagnostics.Option_preserveValueImports_can_only_be_used_when_module_is_set_to_es2015_or_later);if(!J.noEmit&&!J.suppressOutputPathCheck){var y=tt(),v=new e.Set;e.forEachEmittedFile(y,(function(e){J.emitDeclarationOnly||b(e.jsFilePath,v),b(e.declarationFilePath,v)}))}function b(t,r){if(t){var n=Ze(t);if(Ee.has(n)){var i=void 0;J.configFilePath||(i=e.chainDiagnosticMessages(void 0,e.Diagnostics.Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript_files_Learn_more_at_https_Colon_Slash_Slashaka_ms_Slashtsconfig)),i=e.chainDiagnosticMessages(i,e.Diagnostics.Cannot_write_file_0_because_it_would_overwrite_input_file,t),_r(t,e.createCompilerDiagnosticFromMessageChain(i))}var a=ie.useCaseSensitiveFileNames()?n:e.toFileNameLowerCase(n);r.has(a)?_r(t,e.createCompilerDiagnostic(e.Diagnostics.Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files,t)):r.add(a)}}}(),e.performance.mark("afterProgram"),e.performance.measure("Program","beforeProgram","afterProgram"),null===e.tracing||void 0===e.tracing||e.tracing.pop(),qe;function We(e){if(e)for(var t=0,r=e;t<r.length;t++){var n=r[t];ue.add(n)}}function He(t,r,n){if(!t.length)return e.emptyArray;var i=e.getNormalizedAbsolutePath(r.originalFileName,le),a=Qe(r);null===e.tracing||void 0===e.tracing||e.tracing.push("program","resolveModuleNamesWorker",{containingFileName:i}),e.performance.mark("beforeResolveModule");var o=re(t,r,i,n,a);return e.performance.mark("afterResolveModule"),e.performance.measure("ResolveModule","beforeResolveModule","afterResolveModule"),null===e.tracing||void 0===e.tracing||e.tracing.pop(),function(t,r){var n;if(ee)for(var i=e.getNormalizedAbsolutePath(r.originalFileName,le),a=e.isString(r)?void 0:r.impliedNodeFormat,o=e.getDirectoryPath(i),s=Qe(r),c=0,u=0,l=t;u<l.length;u++){var _=l[u],d="string"==typeof _?v(r,c):y(_,a),p="string"==typeof _?_:_.fileName;c++,e.isExternalModuleNameRelative(p)||We(null===(n=ee.getOrCreateCacheForModuleName(p,d,s).get(o))||void 0===n?void 0:n.resolutionDiagnostics)}}(t,r),o}function Ge(t,r){if(!t.length)return[];var n=e.isString(r)?r:e.getNormalizedAbsolutePath(r.originalFileName,le),i=e.isString(r)?void 0:Qe(r),a=e.isString(r)?void 0:r.impliedNodeFormat;null===e.tracing||void 0===e.tracing||e.tracing.push("program","resolveTypeReferenceDirectiveNamesWorker",{containingFileName:n}),e.performance.mark("beforeResolveTypeReference");var o=ne(t,n,i,a);return e.performance.mark("afterResolveTypeReference"),e.performance.measure("ResolveTypeReference","beforeResolveTypeReference","afterResolveTypeReference"),null===e.tracing||void 0===e.tracing||e.tracing.pop(),o}function Qe(t){var r=Bt(t.originalFileName);if(r||!e.isDeclarationFileName(t.originalFileName))return r;var n=Xe(t.path);if(n)return n;if(ie.realpath&&J.preserveSymlinks&&e.stringContains(t.originalFileName,e.nodeModulesPathPart)){var i=Ze(ie.realpath(t.originalFileName));return i===t.path?void 0:Xe(i)}}function Xe(t){var r=Jt(t);return e.isString(r)?Bt(r):r?jt((function(r){var n=e.outFile(r.commandLine.options);if(n)return Ze(n)===t?r:void 0})):void 0}function Ye(t){if(e.containsPath(ce,t.fileName,!1)){var r=e.getBaseFileName(t.fileName);if("lib.d.ts"===r||"lib.es6.d.ts"===r)return 0;var n=e.removeSuffix(e.removePrefix(r,"lib."),".d.ts"),i=e.libs.indexOf(n);if(-1!==i)return i+1}return e.libs.length+2}function Ze(t){return e.toPath(t,le,Gt)}function $e(){if(void 0===x){var t=e.filter(h,(function(t){return e.sourceFileMayBeEmitted(t,qe)}));x=e.getCommonSourceDirectory(J,(function(){return e.mapDefined(t,(function(e){return e.isDeclarationFile?void 0:e.fileName}))}),le,Gt,(function(r){return function(t,r){for(var n=!0,i=ie.getCanonicalFileName(e.getNormalizedAbsolutePath(r,le)),a=0,o=t;a<o.length;a++){var s=o[a];if(!s.isDeclarationFile)0!==ie.getCanonicalFileName(e.getNormalizedAbsolutePath(s.fileName,le)).indexOf(i)&&($t(s,e.Diagnostics.File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files,[s.fileName,r]),n=!1)}return n}(t,r)}))}return x}function et(t,r){if(0===Oe&&!r.ambientModuleNames.length)return He(t,r,void 0);var n,i,a,o=K&&K.getSourceFile(r.fileName);if(o!==r&&r.resolvedModules){for(var s=[],c=0,u=0,l=t;u<l.length;u++){var _=l[u],d=r.resolvedModules.get(_,v(r,c));c++,s.push(d)}return s}var p={};for(c=0;c<t.length;c++){_=t[c];if(r===o&&!fe(o.path)){var f=e.getResolvedModule(o,_,v(o,c));if(f){e.isTraceEnabled(J,ie)&&e.trace(ie,f.packageId?e.Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3:e.Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2,_,e.getNormalizedAbsolutePath(r.originalFileName,le),f.resolvedFileName,f.packageId&&e.packageIdToString(f.packageId)),(i||(i=new Array(t.length)))[c]=f,(a||(a=[])).push(_);continue}}var g=!1;e.contains(r.ambientModuleNames,_)?(g=!0,e.isTraceEnabled(J,ie)&&e.trace(ie,e.Diagnostics.Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1,_,e.getNormalizedAbsolutePath(r.originalFileName,le))):g=h(_,c),g?(i||(i=new Array(t.length)))[c]=p:(n||(n=[])).push(_)}var m=n&&n.length?He(n,r,a):e.emptyArray;if(!i)return e.Debug.assert(m.length===t.length),m;var y=0;for(c=0;c<i.length;c++)i[c]?i[c]===p&&(i[c]=void 0):(i[c]=m[y],y++);return e.Debug.assert(y===m.length),i;function h(t,r){if(r>=e.length(null==o?void 0:o.imports)+e.length(null==o?void 0:o.moduleAugmentations))return!1;var n=e.getResolvedModule(o,t,o&&v(o,r)),i=n&&K.getSourceFile(n.resolvedFileName);if(n&&i)return!1;var a=V.get(t);return!!a&&(e.isTraceEnabled(J,ie)&&e.trace(ie,e.Diagnostics.Module_0_was_resolved_as_ambient_module_declared_in_1_since_this_file_was_not_modified,t,a),!0)}}function tt(t){return{getPrependNodes:it,getCanonicalFileName:Gt,getCommonSourceDirectory:qe.getCommonSourceDirectory,getCompilerOptions:qe.getCompilerOptions,getCurrentDirectory:function(){return le},getNewLine:function(){return ie.getNewLine()},getSourceFile:qe.getSourceFile,getSourceFileByPath:qe.getSourceFileByPath,getSourceFiles:qe.getSourceFiles,getLibFileFromReference:qe.getLibFileFromReference,isSourceFileFromExternalLibrary:at,getResolvedProjectReferenceToRedirect:Bt,getProjectReferenceRedirect:Mt,isSourceOfProjectReferenceRedirect:zt,getSymlinkCache:pr,writeFile:t||rt,isEmitBlocked:st,readFile:function(e){return ie.readFile(e)},fileExists:function(t){var r=Ze(t);return!!ut(r)||!e.contains(ye,r)&&ie.fileExists(t)},useCaseSensitiveFileNames:function(){return ie.useCaseSensitiveFileNames()},getProgramBuildInfo:function(){return qe.getProgramBuildInfo&&qe.getProgramBuildInfo()},getSourceFileFromReference:function(e,t){return qe.getSourceFileFromReference(e,t)},redirectTargetsMap:Te,getFileIncludeReasons:qe.getFileIncludeReasons,createHash:e.maybeBind(ie,ie.createHash)}}function rt(e,t,r,n,i,a){ie.writeFile(e,t,r,n,i,a)}function nt(){return ve}function it(){return P(U,(function(e,t){var r;return null===(r=ve[t])||void 0===r?void 0:r.commandLine}),(function(e){var t=Ze(e),r=ut(t);return r?r.text:Ee.has(t)?void 0:ie.readFile(t)}))}function at(e){return!!Z.get(e.path)}function ot(){return M||(M=e.createTypeChecker(qe))}function st(e){return pe.has(Ze(e))}function ct(e){return ut(Ze(e))}function ut(e){return Ee.get(e)||void 0}function lt(t,r,n){return t?r(t,n):e.sortAndDeduplicateDiagnostics(e.flatMap(qe.getSourceFiles(),(function(e){return n&&n.throwIfCancellationRequested(),r(e,n)})))}function _t(t){var r;if(e.skipTypeChecking(t,J,qe))return e.emptyArray;var n=ue.getDiagnostics(t.fileName);return(null===(r=t.commentDirectives)||void 0===r?void 0:r.length)?yt(t,t.commentDirectives,n).diagnostics:n}function dt(t){return e.isSourceFileJS(t)?(t.additionalSyntacticDiagnostics||(t.additionalSyntacticDiagnostics=function(t){return pt((function(){var r=[];return n(t,t),e.forEachChildRecursively(t,n,i),r;function n(t,n){switch(n.kind){case 166:case 169:case 171:if(n.questionToken===t)return r.push(s(t,e.Diagnostics.The_0_modifier_can_only_be_used_in_TypeScript_files,"?")),"skip";case 170:case 173:case 174:case 175:case 215:case 259:case 216:case 257:if(n.type===t)return r.push(s(t,e.Diagnostics.Type_annotations_can_only_be_used_in_TypeScript_files)),"skip"}switch(t.kind){case 270:if(t.isTypeOnly)return r.push(s(n,e.Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files,"import type")),"skip";break;case 275:if(t.isTypeOnly)return r.push(s(t,e.Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files,"export type")),"skip";break;case 273:case 278:if(t.isTypeOnly)return r.push(s(t,e.Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files,e.isImportSpecifier(t)?"import...type":"export...type")),"skip";break;case 268:return r.push(s(t,e.Diagnostics.import_can_only_be_used_in_TypeScript_files)),"skip";case 274:if(t.isExportEquals)return r.push(s(t,e.Diagnostics.export_can_only_be_used_in_TypeScript_files)),"skip";break;case 294:if(117===t.token)return r.push(s(t,e.Diagnostics.implements_clauses_can_only_be_used_in_TypeScript_files)),"skip";break;case 261:var i=e.tokenToString(118);return e.Debug.assertIsDefined(i),r.push(s(t,e.Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files,i)),"skip";case 264:var a=16&t.flags?e.tokenToString(143):e.tokenToString(142);return e.Debug.assertIsDefined(a),r.push(s(t,e.Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files,a)),"skip";case 262:return r.push(s(t,e.Diagnostics.Type_aliases_can_only_be_used_in_TypeScript_files)),"skip";case 263:var o=e.Debug.checkDefined(e.tokenToString(92));return r.push(s(t,e.Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files,o)),"skip";case 232:return r.push(s(t,e.Diagnostics.Non_null_assertions_can_only_be_used_in_TypeScript_files)),"skip";case 231:return r.push(s(t.type,e.Diagnostics.Type_assertion_expressions_can_only_be_used_in_TypeScript_files)),"skip";case 235:return r.push(s(t.type,e.Diagnostics.Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files)),"skip";case 213:e.Debug.fail()}}function i(t,n){switch(e.canHaveModifiers(n)&&n.modifiers===t&&e.some(t,e.isDecorator)&&!J.experimentalDecorators&&r.push(s(n,e.Diagnostics.Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_the_experimentalDecorators_option_in_your_tsconfig_or_jsconfig_to_remove_this_warning)),n.kind){case 260:case 228:case 171:case 173:case 174:case 175:case 215:case 259:case 216:if(t===n.typeParameters)return r.push(o(t,e.Diagnostics.Type_parameter_declarations_can_only_be_used_in_TypeScript_files)),"skip";case 240:if(t===n.modifiers)return a(n.modifiers,240===n.kind),"skip";break;case 169:if(t===n.modifiers){for(var i=0,c=t;i<c.length;i++){var u=c[i];e.isModifier(u)&&124!==u.kind&&127!==u.kind&&r.push(s(u,e.Diagnostics.The_0_modifier_can_only_be_used_in_TypeScript_files,e.tokenToString(u.kind)))}return"skip"}break;case 166:if(t===n.modifiers&&e.some(t,e.isModifier))return r.push(o(t,e.Diagnostics.Parameter_modifiers_can_only_be_used_in_TypeScript_files)),"skip";break;case 210:case 211:case 230:case 282:case 283:case 212:if(t===n.typeArguments)return r.push(o(t,e.Diagnostics.Type_arguments_can_only_be_used_in_TypeScript_files)),"skip"}}function a(t,n){for(var i=0,a=t;i<a.length;i++){var o=a[i];switch(o.kind){case 85:if(n)continue;case 123:case 121:case 122:case 146:case 136:case 126:case 161:case 101:case 145:r.push(s(o,e.Diagnostics.The_0_modifier_can_only_be_used_in_TypeScript_files,e.tokenToString(o.kind)))}}}function o(r,n,i,a,o){var s=r.pos;return e.createFileDiagnostic(t,s,r.end-s,n,i,a,o)}function s(r,n,i,a,o){return e.createDiagnosticForNodeInSourceFile(t,r,n,i,a,o)}}))}(t)),e.concatenate(t.additionalSyntacticDiagnostics,t.parseDiagnostics)):t.parseDiagnostics}function pt(t){try{return t()}catch(r){throw r instanceof e.OperationCanceledException&&(M=void 0),r}}function ft(t,r){return e.concatenate(A(gt(t,r),J),_t(t))}function gt(e,t){return bt(e,t,W,mt)}function mt(t,r){return pt((function(){if(e.skipTypeChecking(t,J,qe))return e.emptyArray;var n=ot();e.Debug.assert(!!t.bindDiagnostics);var i=(1===t.scriptKind||2===t.scriptKind)&&e.isCheckJsEnabledForFile(t,J),a=e.isPlainJsFile(t,J.checkJs),o=!(!!t.checkJsDirective&&!1===t.checkJsDirective.enabled)&&(3===t.scriptKind||4===t.scriptKind||5===t.scriptKind||a||i||7===t.scriptKind),s=o?t.bindDiagnostics:e.emptyArray,c=o?n.getDiagnostics(t,r):e.emptyArray;return a&&(s=e.filter(s,(function(t){return e.plainJSErrors.has(t.code)})),c=e.filter(c,(function(t){return e.plainJSErrors.has(t.code)}))),function(t,r){for(var n,i=[],a=2;a<arguments.length;a++)i[a-2]=arguments[a];var o=e.flatten(i);if(!r||!(null===(n=t.commentDirectives)||void 0===n?void 0:n.length))return o;for(var s=yt(t,t.commentDirectives,o),c=s.diagnostics,u=s.directives,l=0,_=u.getUnusedExpectations();l<_.length;l++){var d=_[l];c.push(e.createDiagnosticForRange(t,d.range,e.Diagnostics.Unused_ts_expect_error_directive))}return c}(t,o&&!a,s,c,i?t.jsDocDiagnostics:void 0)}))}function yt(t,r,n){var i=e.createCommentDirectivesMap(t,r),a=n.filter((function(t){return-1===function(t,r){var n=t.file,i=t.start;if(!n)return-1;var a=e.getLineStarts(n),o=e.computeLineAndCharacterOfPosition(a,i).line-1;for(;o>=0;){if(r.markUsed(o))return o;var s=n.text.slice(a[o],a[o+1]).trim();if(""!==s&&!/^(\s*)\/\/(.*)$/.test(s))return-1;o--}return-1}(t,i)}));return{diagnostics:a,directives:i}}function vt(e,t){return bt(e,t,H,ht)}function ht(t,r){return pt((function(){var n=ot().getEmitResolver(t,r);return e.getDeclarationDiagnostics(tt(e.noop),n,t)||e.emptyArray}))}function bt(t,r,n,i){var a,o=t?null===(a=n.perFile)||void 0===a?void 0:a.get(t.path):n.allDiagnostics;if(o)return o;var s=i(t,r);return t?(n.perFile||(n.perFile=new e.Map)).set(t.path,s):n.allDiagnostics=s,s}function xt(e,t){return e.isDeclarationFile?[]:vt(e,t)}function Dt(t,r,n,i){Nt(e.normalizePath(t),r,n,void 0,i)}function St(e,t){return e.fileName===t.fileName}function Tt(e,t){return 79===e.kind?79===t.kind&&e.escapedText===t.escapedText:10===t.kind&&e.text===t.text}function Ct(t,r){var n=e.factory.createStringLiteral(t),i=e.factory.createImportDeclaration(void 0,void 0,n,void 0);return e.addEmitFlags(i,67108864),e.setParent(n,i),e.setParent(i,r),n.flags&=-9,i.flags&=-9,n}function Et(t){if(!t.imports){var r,n,i,a=e.isSourceFileJS(t),o=e.isExternalModule(t);if((J.isolatedModules||o)&&!t.isDeclarationFile){J.importHelpers&&(r=[Ct(e.externalHelpersModuleNameText,t)]);var s=e.getJSXRuntimeImport(e.getJSXImplicitImportBase(J,t),J);s&&(r||(r=[])).push(Ct(s,t))}for(var c=0,u=t.statements;c<u.length;c++){l(u[c],!1)}return(2097152&t.flags||a)&&function(t){var n=/import|require/g;for(;null!==n.exec(t.text);){var i=_(t,n.lastIndex);a&&e.isRequireCall(i,!0)||e.isImportCall(i)&&i.arguments.length>=1&&e.isStringLiteralLike(i.arguments[0])?(e.setParentRecursive(i,!1),r=e.append(r,i.arguments[0])):e.isLiteralImportTypeNode(i)&&(e.setParentRecursive(i,!1),r=e.append(r,i.argument.literal))}}(t),t.imports=r||e.emptyArray,t.moduleAugmentations=n||e.emptyArray,void(t.ambientModuleNames=i||e.emptyArray)}function l(a,s){if(e.isAnyImportOrReExport(a)){var c=e.getExternalModuleName(a);!(c&&e.isStringLiteral(c)&&c.text)||s&&e.isExternalModuleNameRelative(c.text)||(e.setParentRecursive(a,!1),r=e.append(r,c),Ce||0!==X||t.isDeclarationFile||(Ce=e.startsWith(c.text,"node:")))}else if(e.isModuleDeclaration(a)&&e.isAmbientModule(a)&&(s||e.hasSyntacticModifier(a,2)||t.isDeclarationFile)){a.name.parent=a;var u=e.getTextOfIdentifierOrLiteral(a.name);if(o||s&&!e.isExternalModuleNameRelative(u))(n||(n=[])).push(a.name);else if(!s){t.isDeclarationFile&&(i||(i=[])).push(u);var _=a.body;if(_)for(var d=0,p=_.statements;d<p.length;d++){l(p[d],!0)}}}}function _(t,r){for(var n=t,i=function(e){if(e.pos<=r&&(r<e.end||r===e.end&&1===e.kind))return e};;){var o=a&&e.hasJSDocNodes(n)&&e.forEach(n.jsDoc,i)||e.forEachChild(n,i);if(!o)return n;n=o}}}function kt(t,r,n,i){if(e.hasExtension(t)){var a=ie.getCanonicalFileName(t);if(!J.allowNonTsExtensions&&!e.forEach(e.flatten(de),(function(t){return e.fileExtensionIs(a,t)})))return void(n&&(e.hasJSFileExtension(a)?n(e.Diagnostics.File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option,t):n(e.Diagnostics.File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1,t,"'"+e.flatten(_e).join("', '")+"'")));var o=r(t);if(n)if(o)T(i)&&a===ie.getCanonicalFileName(ut(i.file).fileName)&&n(e.Diagnostics.A_file_cannot_have_a_reference_to_itself);else{var s=Mt(t);s?n(e.Diagnostics.Output_file_0_has_not_been_built_from_source_file_1,s,t):n(e.Diagnostics.File_0_not_found,t)}return o}var c=J.allowNonTsExtensions&&r(t);if(c)return c;if(!n||!J.allowNonTsExtensions){var u=e.forEach(_e[0],(function(e){return r(t+e)}));return n&&!u&&n(e.Diagnostics.Could_not_resolve_the_path_0_with_the_extensions_Colon_1,t,"'"+e.flatten(_e).join("', '")+"'"),u}n(e.Diagnostics.File_0_not_found,t)}function Nt(e,t,r,n,i){kt(e,(function(e){return Pt(e,t,r,i,n)}),(function(e){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return Zt(void 0,i,e,t)}),i)}function At(e,t){return Nt(e,!1,!1,void 0,t)}function Ft(t,r,n){!T(n)&&e.some(q.get(r.path),T)?Zt(r,n,e.Diagnostics.Already_included_file_name_0_differs_from_file_name_1_only_in_casing,[r.fileName,t]):Zt(r,n,e.Diagnostics.File_name_0_differs_from_already_included_file_name_1_only_in_casing,[t,r.fileName])}function Pt(t,r,n,i,a){null===e.tracing||void 0===e.tracing||e.tracing.push("program","findSourceFile",{fileName:t,isDefaultLib:r||void 0,fileIncludeKind:e.FileIncludeKind[i.kind]});var o=function(t,r,n,i,a){var o,s,c=Ze(t);if(Ne){var u=Jt(c);if(!u&&ie.realpath&&J.preserveSymlinks&&e.isDeclarationFileName(t)&&e.stringContains(t,e.nodeModulesPathPart)){var l=Ze(ie.realpath(t));l!==c&&(u=Jt(l))}if(u){var _=e.isString(u)?Pt(u,r,n,i,a):void 0;return _&&Ot(_,c,void 0),_}}var d,p=t;if(Ee.has(c)){var m=Ee.get(c);if(It(m||void 0,i),m&&J.forceConsistentCasingInFileNames){var y=m.fileName;Ze(y)!==Ze(t)&&(t=Mt(t)||t),e.getNormalizedAbsolutePathWithoutRoot(y,le)!==e.getNormalizedAbsolutePathWithoutRoot(t,le)&&Ft(t,m,i)}return m&&Z.get(m.path)&&0===X?(Z.set(m.path,!1),J.noResolve||(Kt(m,r),Vt(m)),J.noLib||Ht(m),Y.set(m.path,!1),Qt(m)):m&&Y.get(m.path)&&X<Q&&(Y.set(m.path,!1),Qt(m)),m||void 0}if(T(i)&&!Ne){var v=Lt(t);if(v){if(e.outFile(v.commandLine.options))return;var h=Rt(v,t);t=h,d=Ze(h)}}var b=wt(t,ee,ie,J),x=ie.getSourceFile(t,b,(function(r){return Zt(void 0,i,e.Diagnostics.Cannot_read_file_0_Colon_1,[t,r])}),Me||(null===(o=null==K?void 0:K.getSourceFileByPath(Ze(t)))||void 0===o?void 0:o.impliedNodeFormat)!==b.impliedNodeFormat);if(a){var D=e.packageIdToString(a),S=De.get(D);if(S){var C=function(e,t,r,n,i,a,o){var s,c=Object.create(e);return c.fileName=r,c.path=n,c.resolvedPath=i,c.originalFileName=a,c.redirectInfo={redirectTarget:e,unredirected:t},c.packageJsonLocations=(null===(s=o.packageJsonLocations)||void 0===s?void 0:s.length)?o.packageJsonLocations:void 0,c.packageJsonScope=o.packageJsonScope,Z.set(n,X>0),Object.defineProperties(c,{id:{get:function(){return this.redirectInfo.redirectTarget.id},set:function(e){this.redirectInfo.redirectTarget.id=e}},symbol:{get:function(){return this.redirectInfo.redirectTarget.symbol},set:function(e){this.redirectInfo.redirectTarget.symbol=e}}}),c}(S,x,t,c,Ze(t),p,b);return Te.add(S.path,t),Ot(C,c,d),It(C,i),Se.set(c,e.packageIdToPackageName(a)),g.push(C),C}x&&(De.set(D,x),Se.set(c,e.packageIdToPackageName(a)))}if(Ot(x,c,d),x){if(Z.set(c,X>0),x.fileName=t,x.path=c,x.resolvedPath=Ze(t),x.originalFileName=p,x.packageJsonLocations=(null===(s=b.packageJsonLocations)||void 0===s?void 0:s.length)?b.packageJsonLocations:void 0,x.packageJsonScope=b.packageJsonScope,It(x,i),ie.useCaseSensitiveFileNames()){var E=e.toFileNameLowerCase(c),k=ke.get(E);k?Ft(t,k,i):ke.set(E,x)}oe=oe||x.hasNoDefaultLib&&!n,J.noResolve||(Kt(x,r),Vt(x)),J.noLib||Ht(x),Qt(x),r?f.push(x):g.push(x)}return x}(t,r,n,i,a);return null===e.tracing||void 0===e.tracing||e.tracing.pop(),o}function wt(t,r,n,i){var a=k(e.getNormalizedAbsolutePath(t,le),null==r?void 0:r.getPackageJsonInfoCache(),n,i),s=e.getEmitScriptTarget(i),c=e.getSetExternalModuleIndicator(i);return"object"==typeof a?o(o({},a),{languageVersion:s,setExternalModuleIndicator:c}):{languageVersion:s,impliedNodeFormat:a,setExternalModuleIndicator:c}}function It(e,t){e&&q.add(e.path,t)}function Ot(e,t,r){r?(Ee.set(r,e),Ee.set(t,e||!1)):Ee.set(t,e)}function Mt(e){var t=Lt(e);return t&&Rt(t,e)}function Lt(t){if(ve&&ve.length&&!e.isDeclarationFileName(t)&&!e.fileExtensionIs(t,".json"))return Bt(t)}function Rt(t,r){var n=e.outFile(t.commandLine.options);return n?e.changeExtension(n,".d.ts"):e.getOutputDeclarationFileName(r,t.commandLine,!ie.useCaseSensitiveFileNames())}function Bt(t){void 0===be&&(be=new e.Map,jt((function(e){Ze(J.configFilePath)!==e.sourceFile.path&&e.commandLine.fileNames.forEach((function(t){return be.set(Ze(t),e.sourceFile.path)}))})));var r=be.get(Ze(t));return r&&Ut(r)}function jt(t){return e.forEachResolvedProjectReference(ve,t)}function Jt(t){if(e.isDeclarationFileName(t))return void 0===xe&&(xe=new e.Map,jt((function(t){var r=e.outFile(t.commandLine.options);if(r){var n=e.changeExtension(r,".d.ts");xe.set(Ze(n),!0)}else{var i=e.memoize((function(){return e.getCommonSourceDirectoryOfConfig(t.commandLine,!ie.useCaseSensitiveFileNames())}));e.forEach(t.commandLine.fileNames,(function(r){if(!e.isDeclarationFileName(r)&&!e.fileExtensionIs(r,".json")){var n=e.getOutputDeclarationFileName(r,t.commandLine,!ie.useCaseSensitiveFileNames(),i);xe.set(Ze(n),r)}}))}}))),xe.get(t)}function zt(e){return Ne&&!!Bt(e)}function Ut(e){if(he)return he.get(e)||void 0}function Kt(r,n){e.forEach(r.referencedFiles,(function(i,a){Nt(t(i.fileName,r.fileName),n,!1,void 0,{kind:e.FileIncludeKind.ReferenceFile,file:r.path,index:a})}))}function Vt(t){var r=t.typeReferenceDirectives;if(r)for(var n=Ge(r,t),i=0;i<r.length;i++){var a=t.typeReferenceDirectives[i],o=n[i],s=e.toFileNameLowerCase(a.fileName);e.setResolvedTypeReferenceDirective(t,s,o);var c=a.resolutionMode||t.impliedNodeFormat;c&&e.getEmitModuleResolutionKind(J)!==e.ModuleResolutionKind.Node16&&e.getEmitModuleResolutionKind(J)!==e.ModuleResolutionKind.NodeNext&&ue.add(e.createDiagnosticForRange(t,a,e.Diagnostics.resolution_mode_assertions_are_only_supported_when_moduleResolution_is_node16_or_nodenext)),qt(s,c,o,{kind:e.FileIncludeKind.TypeReferenceDirective,file:t.path,index:i})}}function qt(t,r,n,i){null===e.tracing||void 0===e.tracing||e.tracing.push("program","processTypeReferenceDirective",{directive:t,hasResolved:!!n,refKind:i.kind,refPath:T(i)?i.file:void 0}),function(t,r,n,i){var a=G.get(t,r);if(a&&a.primary)return;var o=!0;if(n){if(n.isExternalLibraryImport&&X++,n.primary)Nt(n.resolvedFileName,!1,!1,n.packageId,i);else if(a){if(n.resolvedFileName!==a.resolvedFileName){var s=ie.readFile(n.resolvedFileName),c=ct(a.resolvedFileName);s!==c.text&&Zt(c,i,e.Diagnostics.Conflicting_definitions_for_0_found_at_1_and_2_Consider_installing_a_specific_version_of_this_library_to_resolve_the_conflict,[t,n.resolvedFileName,a.resolvedFileName])}o=!1}else Nt(n.resolvedFileName,!1,!1,n.packageId,i);n.isExternalLibraryImport&&X--}else Zt(void 0,i,e.Diagnostics.Cannot_find_type_definition_file_for_0,[t]);o&&G.set(t,r,n)}(t,r,n,i),null===e.tracing||void 0===e.tracing||e.tracing.pop()}function Wt(t){for(var r=t.split("."),n=r[1],i=2;r[i]&&"d"!==r[i];)n+=(2===i?"/":"-")+r[i],i++;var a=e.combinePaths(le,"__lib_node_modules_lookup_".concat(t,"__.ts")),o=e.resolveModuleName("@typescript/lib-"+n,a,{moduleResolution:e.ModuleResolutionKind.NodeJs},ie,ee);return(null==o?void 0:o.resolvedModule)?o.resolvedModule.resolvedFileName:e.combinePaths(ce,t)}function Ht(t){e.forEach(t.libReferenceDirectives,(function(r,n){var i=e.toFileNameLowerCase(r.fileName),a=e.libMap.get(i);if(a)Dt(Wt(a),!0,!0,{kind:e.FileIncludeKind.LibReferenceDirective,file:t.path,index:n});else{var o=e.removeSuffix(e.removePrefix(i,"lib."),".d.ts"),s=e.getSpellingSuggestion(o,e.libs,e.identity),c=s?e.Diagnostics.Cannot_find_lib_definition_for_0_Did_you_mean_1:e.Diagnostics.Cannot_find_lib_definition_for_0;(R||(R=[])).push({kind:0,reason:{kind:e.FileIncludeKind.LibReferenceDirective,file:t.path,index:n},diagnostic:c,args:[i,s]})}}))}function Gt(e){return ie.getCanonicalFileName(e)}function Qt(t){var r;if(Et(t),t.imports.length||t.moduleAugmentations.length){var n=O(t),i=et(n,t);e.Debug.assert(i.length===n.length);for(var a=(Ne?null===(r=Qe(t))||void 0===r?void 0:r.commandLine.options:void 0)||J,o=0;o<n.length;o++){var s=i[o];if(e.setResolvedModule(t,n[o],s,v(t,o)),s){var c=s.isExternalLibraryImport,u=!e.resolutionExtensionIsTSOrJson(s.extension),l=c&&u,_=s.resolvedFileName;c&&X++;var d=l&&X>Q,p=_&&!I(a,s)&&!a.noResolve&&o<t.imports.length&&!d&&!(u&&!e.getAllowJSCompilerOption(a))&&(e.isInJSFile(t.imports[o])||!(8388608&t.imports[o].flags));d?Y.set(t.path,!0):p&&Pt(_,!1,!1,{kind:e.FileIncludeKind.Import,file:t.path,index:o},s.packageId),c&&X--}}}else t.resolvedModules=void 0}function Xt(t){he||(he=new e.Map);var r,n,i=w(t),a=Ze(i),o=he.get(a);if(void 0!==o)return o||void 0;if(ie.getParsedCommandLine){if(!(r=ie.getParsedCommandLine(i)))return Ot(void 0,a,void 0),void he.set(a,!1);n=e.Debug.checkDefined(r.options.configFile),e.Debug.assert(!n.path||n.path===a),Ot(n,a,void 0)}else{var s=e.getNormalizedAbsolutePath(e.getDirectoryPath(i),ie.getCurrentDirectory());if(Ot(n=ie.getSourceFile(i,100),a,void 0),void 0===n)return void he.set(a,!1);r=e.parseJsonSourceFileConfigFileContent(n,ae,s,void 0,i)}n.fileName=i,n.path=a,n.resolvedPath=a,n.originalFileName=i;var c={commandLine:r,sourceFile:n};return he.set(a,c),r.projectReferences&&(c.references=r.projectReferences.map(Xt)),c}function Yt(t,r,n,i){var o,s,c,u=T(r)?r:void 0;t&&(null===(o=q.get(t.path))||void 0===o||o.forEach(f)),r&&f(r),u&&1===(null==s?void 0:s.length)&&(s=void 0);var l=u&&E(ut,u),_=s&&e.chainDiagnosticMessages(s,e.Diagnostics.The_file_is_in_the_program_because_Colon),d=t&&e.explainIfFileIsRedirectAndImpliedFormat(t),p=e.chainDiagnosticMessages.apply(void 0,a([d?_?a([_],d,!0):d:_,n],i||e.emptyArray,!1));return l&&C(l)?e.createFileDiagnosticFromMessageChain(l.file,l.pos,l.end-l.pos,p,c):e.createCompilerDiagnosticFromMessageChain(p,c);function f(t){(s||(s=[])).push(e.fileIncludeReasonToDiagnostics(qe,t)),!u&&T(t)?u=t:u!==t&&(c=e.append(c,function(t){if(T(t)){var r,n=E(ut,t);switch(t.kind){case e.FileIncludeKind.Import:r=e.Diagnostics.File_is_included_via_import_here;break;case e.FileIncludeKind.ReferenceFile:r=e.Diagnostics.File_is_included_via_reference_here;break;case e.FileIncludeKind.TypeReferenceDirective:r=e.Diagnostics.File_is_included_via_type_library_reference_here;break;case e.FileIncludeKind.LibReferenceDirective:r=e.Diagnostics.File_is_included_via_library_reference_here;break;default:e.Debug.assertNever(t)}return C(n)?e.createFileDiagnostic(n.file,n.pos,n.end-n.pos,r):void 0}if(!J.configFile)return;var i,a;switch(t.kind){case e.FileIncludeKind.RootFile:if(!J.configFile.configFileSpecs)return;var o=e.getNormalizedAbsolutePath(j[t.index],le),s=e.getMatchedFileSpec(qe,o);if(s){i=e.getTsConfigPropArrayElementValue(J.configFile,"files",s),a=e.Diagnostics.File_is_matched_by_files_list_specified_here;break}var c=e.getMatchedIncludeSpec(qe,o);if(!c||!e.isString(c))return;i=e.getTsConfigPropArrayElementValue(J.configFile,"include",c),a=e.Diagnostics.File_is_matched_by_include_pattern_specified_here;break;case e.FileIncludeKind.SourceFromProjectReference:case e.FileIncludeKind.OutputFromProjectReference:var u=e.Debug.checkDefined(null==ve?void 0:ve[t.index]),l=S(U,ve,(function(e,t,r){return e===u?{sourceFile:(null==t?void 0:t.sourceFile)||J.configFile,index:r}:void 0}));if(!l)return;var _=l.sourceFile,d=l.index,p=e.firstDefined(e.getTsConfigPropArray(_,"references"),(function(t){return e.isArrayLiteralExpression(t.initializer)?t.initializer:void 0}));return p&&p.elements.length>d?e.createDiagnosticForNodeInSourceFile(_,p.elements[d],t.kind===e.FileIncludeKind.OutputFromProjectReference?e.Diagnostics.File_is_output_from_referenced_project_specified_here:e.Diagnostics.File_is_source_from_referenced_project_specified_here):void 0;case e.FileIncludeKind.AutomaticTypeDirectiveFile:if(!J.types)return;i=ir("types",t.typeReference),a=e.Diagnostics.File_is_entry_point_of_type_library_specified_here;break;case e.FileIncludeKind.LibFile:if(void 0!==t.index){i=ir("lib",J.lib[t.index]),a=e.Diagnostics.File_is_library_specified_here;break}var f=e.forEachEntry(e.targetOptionDeclaration.type,(function(t,r){return t===e.getEmitScriptTarget(J)?r:void 0}));i=f?(g=f,(m=rr("target"))&&e.firstDefined(m,(function(t){return e.isStringLiteral(t.initializer)&&t.initializer.text===g?t.initializer:void 0}))):void 0,a=e.Diagnostics.File_is_default_library_for_target_specified_here;break;default:e.Debug.assertNever(t)}var g,m;return i&&e.createDiagnosticForNodeInSourceFile(J.configFile,i,a)}(t))),t===r&&(r=void 0)}}function Zt(e,t,r,n){(R||(R=[])).push({kind:1,file:e&&e.path,fileProcessingReason:t,diagnostic:r,args:n})}function $t(e,t,r){ue.add(Yt(e,void 0,t,r))}function er(t,r,n,i,a,o){for(var s=!0,c=0,u=nr();c<u.length;c++){var l=u[c];if(e.isObjectLiteralExpression(l.initializer))for(var _=0,d=e.getPropertyAssignment(l.initializer,t);_<d.length;_++){var p=d[_].initializer;e.isArrayLiteralExpression(p)&&p.elements.length>r&&(ue.add(e.createDiagnosticForNodeInSourceFile(J.configFile,p.elements[r],n,i,a,o)),s=!1)}}s&&ue.add(e.createCompilerDiagnostic(n,i,a,o))}function tr(t,r,n,i){for(var a=!0,o=0,s=nr();o<s.length;o++){var c=s[o];e.isObjectLiteralExpression(c.initializer)&&lr(c.initializer,t,r,void 0,n,i)&&(a=!1)}a&&ue.add(e.createCompilerDiagnostic(n,i))}function rr(t){var r=ur();return r&&e.getPropertyAssignment(r,t)}function nr(){return rr("paths")||e.emptyArray}function ir(t,r){var n=ur();return n&&e.getPropertyArrayElementValue(n,t,r)}function ar(e,t,r,n){cr(!0,t,r,e,t,r,n)}function or(e,t,r,n){cr(!1,e,void 0,t,r,n)}function sr(t,r,n,i,a){var o=e.firstDefined(e.getTsConfigPropArray(t||J.configFile,"references"),(function(t){return e.isArrayLiteralExpression(t.initializer)?t.initializer:void 0}));o&&o.elements.length>r?ue.add(e.createDiagnosticForNodeInSourceFile(t||J.configFile,o.elements[r],n,i,a)):ue.add(e.createCompilerDiagnostic(n,i,a))}function cr(t,r,n,i,a,o,s){var c=ur();(!c||!lr(c,t,r,n,i,a,o,s))&&ue.add(e.createCompilerDiagnostic(i,a,o,s))}function ur(){if(void 0===$){$=!1;var t=e.getTsConfigObjectLiteralExpression(J.configFile);if(t)for(var r=0,n=e.getPropertyAssignment(t,"compilerOptions");r<n.length;r++){var i=n[r];if(e.isObjectLiteralExpression(i.initializer)){$=i.initializer;break}}}return $||void 0}function lr(t,r,n,i,a,o,s,c){for(var u=e.getPropertyAssignment(t,n,i),l=0,_=u;l<_.length;l++){var d=_[l];ue.add(e.createDiagnosticForNodeInSourceFile(J.configFile,r?d.name:d.initializer,a,o,s,c))}return!!u.length}function _r(e,t){pe.set(Ze(e),!0),ue.add(t)}function dr(t,r){return 0===e.comparePaths(t,r,le,!ie.useCaseSensitiveFileNames())}function pr(){return ie.getSymlinkCache?ie.getSymlinkCache():(b||(b=e.createSymlinkCache(le,Gt)),h&&G&&!b.hasProcessedResolutions()&&b.setSymlinksFromResolutions(h,G),b)}},e.emitSkippedWithNoDiagnostics={diagnostics:e.emptyArray,sourceMaps:void 0,emittedFiles:void 0,emitSkipped:!0},e.handleNoEmitOptions=N,e.filterSemanticDiagnostics=A,e.parseConfigHostFromCompilerHostLike=F,e.createPrependNodes=P,e.resolveProjectReferencePath=w,e.getResolutionDiagnostic=I,e.getModuleNameStringLiteralAt=M}(_||(_={})),function(e){e.getFileEmitOutput=function(e,t,r,n,i,a){var o=[],s=e.emit(t,(function(e,t,r){o.push({name:e,writeByteOrderMark:r,text:t})}),n,r,i,a),c=s.emitSkipped,u=s.diagnostics;return{outputFiles:o,emitSkipped:c,diagnostics:u}},function(t){function r(){return t=new e.Map,r=new e.Map,i=void 0,a={getKeys:function(e){return r.get(e)},getValues:function(e){return t.get(e)},keys:function(){return t.keys()},deleteKey:function(a){(i||(i=new e.Set)).add(a);var o=t.get(a);return!!o&&(o.forEach((function(e){return n(r,e,a)})),t.delete(a),!0)},set:function(o,s){null==i||i.delete(o);var c=t.get(o);return t.set(o,s),null==c||c.forEach((function(e){s.has(e)||n(r,e,o)})),s.forEach((function(t){(null==c?void 0:c.has(t))||function(t,r,n){var i=t.get(r);i||(i=new e.Set,t.set(r,i)),i.add(n)}(r,t,o)})),a}};var t,r,i,a}function n(e,t,r){var n=e.get(t);return!!(null==n?void 0:n.delete(r))&&(n.size||e.delete(t),!0)}function i(t){return e.mapDefined(t.declarations,(function(t){var r;return null===(r=e.getSourceFileOfNode(t))||void 0===r?void 0:r.resolvedPath}))}function a(e,t){var r=e.getSymbolAtLocation(t);return r&&i(r)}function o(t,r,n,i){return e.toPath(t.getProjectReferenceRedirect(r)||r,n,i)}function s(t,r,n){var i;if(r.imports&&r.imports.length>0)for(var s=t.getTypeChecker(),c=0,u=r.imports;c<u.length;c++){var l=a(s,u[c]);null==l||l.forEach(S)}var _=e.getDirectoryPath(r.resolvedPath);if(r.referencedFiles&&r.referencedFiles.length>0)for(var d=0,p=r.referencedFiles;d<p.length;d++){var f=p[d];S(o(t,f.fileName,_,n))}if(r.resolvedTypeReferenceDirectiveNames&&r.resolvedTypeReferenceDirectiveNames.forEach((function(e){if(e){var r=e.resolvedFileName;S(o(t,r,_,n))}})),r.moduleAugmentations.length){s=t.getTypeChecker();for(var g=0,m=r.moduleAugmentations;g<m.length;g++){var y=m[g];if(e.isStringLiteral(y)){var v=s.getSymbolAtLocation(y);v&&D(v)}}}for(var h=0,b=t.getTypeChecker().getAmbientModules();h<b.length;h++){var x=b[h];x.declarations&&x.declarations.length>1&&D(x)}return i;function D(t){if(t.declarations)for(var n=0,i=t.declarations;n<i.length;n++){var a=i[n],o=e.getSourceFileOfNode(a);o&&o!==r&&S(o.resolvedPath)}}function S(t){(i||(i=new e.Set)).add(t)}}function c(e,t){return t&&!t.referencedMap==!e}function u(t,r,n,i,a,o){var s=r.getSourceFileByPath(n);return s?l(t,r,s,i,a,o)?(t.referencedMap?y:m)(t,r,s,i,a,o):[s]:e.emptyArray}function l(t,r,n,i,a,o,s){var c;if(void 0===s&&(s=t.useFileVersionAsSignature),null===(c=t.hasCalledUpdateShapeSignature)||void 0===c?void 0:c.has(n.resolvedPath))return!1;var u,l=t.fileInfos.get(n.resolvedPath),d=l.signature;if(n.isDeclarationFile||s||r.emit(n,(function(r,i,s,c,l,p){e.Debug.assert(e.isDeclarationFileName(r),"File extension for signature expected to be dts: Got:: ".concat(r)),(u=e.computeSignatureWithDiagnostics(n,i,a,o,p))!==d&&_(t,n,l[0].exportedModulesFromDeclarationEmit)}),i,!0,void 0,!0),void 0===u&&(u=n.version,t.exportedModulesMap&&u!==d)){(t.oldExportedModulesMap||(t.oldExportedModulesMap=new e.Map)).set(n.resolvedPath,t.exportedModulesMap.getValues(n.resolvedPath)||!1);var p=t.referencedMap?t.referencedMap.getValues(n.resolvedPath):void 0;p?t.exportedModulesMap.set(n.resolvedPath,p):t.exportedModulesMap.deleteKey(n.resolvedPath)}return(t.oldSignatures||(t.oldSignatures=new e.Map)).set(n.resolvedPath,d||!1),(t.hasCalledUpdateShapeSignature||(t.hasCalledUpdateShapeSignature=new e.Set)).add(n.resolvedPath),l.signature=u,u!==d}function _(t,r,n){var a;t.exportedModulesMap&&((t.oldExportedModulesMap||(t.oldExportedModulesMap=new e.Map)).set(r.resolvedPath,t.exportedModulesMap.getValues(r.resolvedPath)||!1),n?(n.forEach((function(t){var r;(null==(r=i(t))?void 0:r.length)&&(a||(a=new e.Set),r.forEach((function(e){return a.add(e)})))})),a?t.exportedModulesMap.set(r.resolvedPath,a):t.exportedModulesMap.deleteKey(r.resolvedPath)):t.exportedModulesMap.deleteKey(r.resolvedPath))}function d(t,r){if(!t.allFileNames){var n=r.getSourceFiles();t.allFileNames=n===e.emptyArray?e.emptyArray:n.map((function(e){return e.fileName}))}return t.allFileNames}function p(t,r){var n=t.referencedMap.getKeys(r);return n?e.arrayFrom(n.keys()):[]}function f(t){return function(t){return e.some(t.moduleAugmentations,(function(t){return e.isGlobalScopeAugmentation(t.parent)}))}(t)||!e.isExternalOrCommonJsModule(t)&&!e.isJsonSourceFile(t)&&!function(t){for(var r=0,n=t.statements;r<n.length;r++){var i=n[r];if(!e.isModuleWithStringLiteralName(i))return!1}return!0}(t)}function g(t,r,n){if(t.allFilesExcludingDefaultLibraryFile)return t.allFilesExcludingDefaultLibraryFile;var i;n&&c(n);for(var a=0,o=r.getSourceFiles();a<o.length;a++){var s=o[a];s!==n&&c(s)}return t.allFilesExcludingDefaultLibraryFile=i||e.emptyArray,t.allFilesExcludingDefaultLibraryFile;function c(e){r.isSourceFileDefaultLibrary(e)||(i||(i=[])).push(e)}}function m(t,r,n){var i=r.getCompilerOptions();return i&&e.outFile(i)?[n]:g(t,r,n)}function y(t,r,n,i,a,o){if(f(n))return g(t,r,n);var s=r.getCompilerOptions();if(s&&(s.isolatedModules||e.outFile(s)))return[n];var c=new e.Map;c.set(n.resolvedPath,n);for(var u=p(t,n.resolvedPath);u.length>0;){var _=u.pop();if(!c.has(_)){var d=r.getSourceFileByPath(_);c.set(_,d),d&&l(t,r,d,i,a,o)&&u.push.apply(u,p(t,d.resolvedPath))}}return e.arrayFrom(e.mapDefinedIterator(c.values(),(function(e){return e})))}t.createManyToManyPathMap=r,t.canReuseOldState=c,t.create=function(t,n,i,a){var o,u,l,_=new e.Map,d=t.getCompilerOptions().module!==e.ModuleKind.None?r():void 0,p=d?r():void 0,g=c(d,i);t.getTypeChecker();for(var m=0,y=t.getSourceFiles();m<y.length;m++){var v=y[m],h=e.Debug.checkDefined(v.version,"Program intended to be used with Builder should have source files with versions set"),b=g?null===(o=i.oldSignatures)||void 0===o?void 0:o.get(v.resolvedPath):void 0,x=void 0===b?g?null===(u=i.fileInfos.get(v.resolvedPath))||void 0===u?void 0:u.signature:void 0:b||void 0;if(d){var D=s(t,v,n);if(D&&d.set(v.resolvedPath,D),g){var S=null===(l=i.oldExportedModulesMap)||void 0===l?void 0:l.get(v.resolvedPath),T=void 0===S?i.exportedModulesMap.getValues(v.resolvedPath):S||void 0;T&&p.set(v.resolvedPath,T)}}_.set(v.resolvedPath,{version:h,signature:x,affectsGlobalScope:f(v)||void 0,impliedFormat:v.impliedNodeFormat})}return{fileInfos:_,referencedMap:d,exportedModulesMap:p,useFileVersionAsSignature:!a&&!g}},t.releaseCache=function(e){e.allFilesExcludingDefaultLibraryFile=void 0,e.allFileNames=void 0},t.getFilesAffectedBy=function(e,t,r,n,i,a){var o,s,c=u(e,t,r,n,i,a);return null===(o=e.oldSignatures)||void 0===o||o.clear(),null===(s=e.oldExportedModulesMap)||void 0===s||s.clear(),c},t.getFilesAffectedByWithOldState=u,t.updateSignatureOfFile=function(t,r,n){t.fileInfos.get(n).signature=r,(t.hasCalledUpdateShapeSignature||(t.hasCalledUpdateShapeSignature=new e.Set)).add(n)},t.updateShapeSignature=l,t.updateExportedModules=_,t.getAllDependencies=function(t,r,n){var i=r.getCompilerOptions();if(e.outFile(i))return d(t,r);if(!t.referencedMap||f(n))return d(t,r);for(var a=new e.Set,o=[n.resolvedPath];o.length;){var s=o.pop();if(!a.has(s)){a.add(s);var c=t.referencedMap.getValues(s);if(c)for(var u=c.keys(),l=u.next();!l.done;l=u.next())o.push(l.value)}}return e.arrayFrom(e.mapDefinedIterator(a.keys(),(function(e){var t,n;return null!==(n=null===(t=r.getSourceFileByPath(e))||void 0===t?void 0:t.fileName)&&void 0!==n?n:e})))},t.getReferencedByPaths=p,t.getAllFilesExcludingDefaultLibraryFile=g}(e.BuilderState||(e.BuilderState={}))}(_||(_={})),function(e){var t;function r(t,r,i,a){var o,s,c=e.BuilderState.create(t,r,i,a);c.program=t;var u=t.getCompilerOptions();c.compilerOptions=u;var l=e.outFile(u);l?u.composite&&(null==i?void 0:i.outSignature)&&l===e.outFile(null==i?void 0:i.compilerOptions)&&(c.outSignature=null==i?void 0:i.outSignature):c.semanticDiagnosticsPerFile=new e.Map,c.changedFilesSet=new e.Set,c.latestChangedDtsFile=u.composite?null==i?void 0:i.latestChangedDtsFile:void 0;var _=e.BuilderState.canReuseOldState(c.referencedMap,i),d=_?i.compilerOptions:void 0,p=_&&i.semanticDiagnosticsPerFile&&!!c.semanticDiagnosticsPerFile&&!e.compilerOptionsAffectSemanticDiagnostics(u,d),f=u.composite&&(null==i?void 0:i.emitSignatures)&&!l&&!e.compilerOptionsAffectDeclarationPath(u,i.compilerOptions);_&&(null===(o=i.changedFilesSet)||void 0===o||o.forEach((function(e){return c.changedFilesSet.add(e)})),!l&&i.affectedFilesPendingEmit&&(c.affectedFilesPendingEmit=i.affectedFilesPendingEmit.slice(),c.affectedFilesPendingEmitKind=i.affectedFilesPendingEmitKind&&new e.Map(i.affectedFilesPendingEmitKind),c.affectedFilesPendingEmitIndex=i.affectedFilesPendingEmitIndex,c.seenAffectedFiles=new e.Set));var g=c.referencedMap,m=_?i.referencedMap:void 0,y=p&&!u.skipLibCheck==!d.skipLibCheck,v=y&&!u.skipDefaultLibCheck==!d.skipDefaultLibCheck;return c.fileInfos.forEach((function(a,o){var s,u,l,d;if(!_||!(s=i.fileInfos.get(o))||s.version!==a.version||s.impliedFormat!==a.impliedFormat||(l=u=g&&g.getValues(o),d=m&&m.getValues(o),l!==d&&(void 0===l||void 0===d||l.size!==d.size||e.forEachKey(l,(function(e){return!d.has(e)}))))||u&&e.forEachKey(u,(function(e){return!c.fileInfos.has(e)&&i.fileInfos.has(e)})))c.changedFilesSet.add(o);else if(p){var h=t.getSourceFileByPath(o);if(h.isDeclarationFile&&!y)return;if(h.hasNoDefaultLib&&!v)return;var b=i.semanticDiagnosticsPerFile.get(o);b&&(c.semanticDiagnosticsPerFile.set(o,i.hasReusableDiagnostic?function(t,r,i){if(!t.length)return e.emptyArray;var a=e.getDirectoryPath(e.getNormalizedAbsolutePath(e.getTsBuildInfoEmitOutputFilePath(r.getCompilerOptions()),r.getCurrentDirectory()));return t.map((function(e){var t=n(e,r,o);t.reportsUnnecessary=e.reportsUnnecessary,t.reportsDeprecated=e.reportDeprecated,t.source=e.source,t.skippedOn=e.skippedOn;var i=e.relatedInformation;return t.relatedInformation=i?i.length?i.map((function(e){return n(e,r,o)})):[]:void 0,t}));function o(t){return e.toPath(t,a,i)}}(b,t,r):b),c.semanticDiagnosticsFromOldState||(c.semanticDiagnosticsFromOldState=new e.Set),c.semanticDiagnosticsFromOldState.add(o))}if(f){var x=i.emitSignatures.get(o);x&&(c.emitSignatures||(c.emitSignatures=new e.Map)).set(o,x)}})),_&&e.forEachEntry(i.fileInfos,(function(e,t){return e.affectsGlobalScope&&!c.fileInfos.has(t)}))?e.BuilderState.getAllFilesExcludingDefaultLibraryFile(c,t,void 0).forEach((function(e){return c.changedFilesSet.add(e.resolvedPath)})):d&&!l&&e.compilerOptionsAffectEmit(u,d)&&(t.getSourceFiles().forEach((function(e){return E(c,e.resolvedPath,1)})),e.Debug.assert(!c.seenAffectedFiles||!c.seenAffectedFiles.size),c.seenAffectedFiles=c.seenAffectedFiles||new e.Set),c.buildInfoEmitPending=!_||c.changedFilesSet.size!==((null===(s=i.changedFilesSet)||void 0===s?void 0:s.size)||0),c}function n(e,t,r){var n=e.file;return o(o({},e),{file:n?t.getSourceFileByPath(r(n)):void 0})}function i(t,r){e.Debug.assert(!r||!t.affectedFiles||t.affectedFiles[t.affectedFilesIndex-1]!==r||!t.semanticDiagnosticsPerFile.has(r.resolvedPath))}function a(t,r,n,i,a){for(var o,s;;){var c=t.affectedFiles;if(c){for(var l=t.seenAffectedFiles,_=t.affectedFilesIndex;_<c.length;){var d=c[_];if(!l.has(d.resolvedPath))return t.affectedFilesIndex=_,u(t,d,r,n,i,a),d;_++}t.changedFilesSet.delete(t.currentChangedFilePath),t.currentChangedFilePath=void 0,null===(o=t.oldSignatures)||void 0===o||o.clear(),null===(s=t.oldExportedModulesMap)||void 0===s||s.clear(),t.affectedFiles=void 0}var p=t.changedFilesSet.keys().next();if(p.done)return;var f=e.Debug.checkDefined(t.program),g=f.getCompilerOptions();if(e.outFile(g))return e.Debug.assert(!t.semanticDiagnosticsPerFile),f;t.affectedFiles=e.BuilderState.getFilesAffectedByWithOldState(t,f,p.value,r,n,i),t.currentChangedFilePath=p.value,t.affectedFilesIndex=0,t.seenAffectedFiles||(t.seenAffectedFiles=new e.Set)}}function s(e){e.affectedFilesPendingEmit=void 0,e.affectedFilesPendingEmitKind=void 0,e.affectedFilesPendingEmitIndex=void 0}function c(t){if(!t.cleanedDiagnosticsOfLibFiles){t.cleanedDiagnosticsOfLibFiles=!0;var r=e.Debug.checkDefined(t.program),n=r.getCompilerOptions();e.forEach(r.getSourceFiles(),(function(i){return r.isSourceFileDefaultLibrary(i)&&!e.skipTypeChecking(i,n,r)&&_(t,i.resolvedPath)}))}}function u(t,r,n,i,a,o){if(_(t,r.resolvedPath),t.allFilesExcludingDefaultLibraryFile===t.affectedFiles)return c(t),void e.BuilderState.updateShapeSignature(t,e.Debug.checkDefined(t.program),r,n,i,a);t.compilerOptions.assumeChangesOnlyAffectDirectDependencies||function(t,r,n,i,a,o){var s;if(!t.exportedModulesMap||!t.changedFilesSet.has(r.resolvedPath))return;if(!d(t,r.resolvedPath))return;if(t.compilerOptions.isolatedModules){var c=new e.Map;c.set(r.resolvedPath,!0);for(var u=e.BuilderState.getReferencedByPaths(t,r.resolvedPath);u.length>0;){var _=u.pop();if(!c.has(_)){if(c.set(_,!0),p(t,_,n,i,a,o))return;if(l(t,_,n,i,a,o),d(t,_)){var g=e.Debug.checkDefined(t.program).getSourceFileByPath(_);u.push.apply(u,e.BuilderState.getReferencedByPaths(t,g.resolvedPath))}}}}var m=new e.Set;null===(s=t.exportedModulesMap.getKeys(r.resolvedPath))||void 0===s||s.forEach((function(r){if(p(t,r,n,i,a,o))return!0;var s=t.referencedMap.getKeys(r);return s&&e.forEachKey(s,(function(e){return f(t,e,m,n,i,a,o)}))}))}(t,r,n,i,a,o)}function l(t,r,n,i,a,o){if(_(t,r),!t.changedFilesSet.has(r)){var s=e.Debug.checkDefined(t.program),c=s.getSourceFileByPath(r);c&&(e.BuilderState.updateShapeSignature(t,s,c,n,i,a,!o.disableUseFileVersionAsSignature),e.getEmitDeclarations(t.compilerOptions)&&E(t,r,0))}}function _(e,t){return!e.semanticDiagnosticsFromOldState||(e.semanticDiagnosticsFromOldState.delete(t),e.semanticDiagnosticsPerFile.delete(t),!e.semanticDiagnosticsFromOldState.size)}function d(t,r){var n=e.Debug.checkDefined(t.oldSignatures).get(r)||void 0;return e.Debug.checkDefined(t.fileInfos.get(r)).signature!==n}function p(t,r,n,i,a,o){var s;return!!(null===(s=t.fileInfos.get(r))||void 0===s?void 0:s.affectsGlobalScope)&&(e.BuilderState.getAllFilesExcludingDefaultLibraryFile(t,t.program,void 0).forEach((function(e){return l(t,e.resolvedPath,n,i,a,o)})),c(t),!0)}function f(t,r,n,i,a,o,s){var c,u;if(e.tryAddToSet(n,r)){if(p(t,r,i,a,o,s))return!0;l(t,r,i,a,o,s),null===(c=t.exportedModulesMap.getKeys(r))||void 0===c||c.forEach((function(e){return f(t,e,n,i,a,o,s)})),null===(u=t.referencedMap.getKeys(r))||void 0===u||u.forEach((function(e){return!n.has(e)&&l(t,e,i,a,o,s)}))}}function g(t,r,n,i,a){a?t.buildInfoEmitPending=!1:r===t.program?(t.changedFilesSet.clear(),t.programEmitComplete=!0):(t.seenAffectedFiles.add(r.resolvedPath),t.buildInfoEmitPending=!0,void 0!==n&&(t.seenEmittedFiles||(t.seenEmittedFiles=new e.Map)).set(r.resolvedPath,n),i?t.affectedFilesPendingEmitIndex++:t.affectedFilesIndex++)}function m(e,t,r){return g(e,r),{result:t,affected:r}}function y(e,t,r,n,i,a){return g(e,r,n,i,a),{result:t,affected:r}}function v(t,r,n){return e.concatenate(function(t,r,n){var i=r.resolvedPath;if(t.semanticDiagnosticsPerFile){var a=t.semanticDiagnosticsPerFile.get(i);if(a)return e.filterSemanticDiagnostics(a,t.compilerOptions)}var o=e.Debug.checkDefined(t.program).getBindAndCheckDiagnostics(r,n);t.semanticDiagnosticsPerFile&&t.semanticDiagnosticsPerFile.set(i,o);return e.filterSemanticDiagnostics(o,t.compilerOptions)}(t,r,n),e.Debug.checkDefined(t.program).getProgramDiagnostics(r))}function h(t){return!!e.outFile(t.options||{})}function b(e,t,r){if(e)if("list"===e.type){var n=t;if(e.element.isFilePath&&n.length)return n.map(r)}else if(e.isFilePath)return r(t);return t}function x(t,r){return e.Debug.assert(!!t.length),t.map((function(e){var t=D(e,r);t.reportsUnnecessary=e.reportsUnnecessary,t.reportDeprecated=e.reportsDeprecated,t.source=e.source,t.skippedOn=e.skippedOn;var n=e.relatedInformation;return t.relatedInformation=n?n.length?n.map((function(e){return D(e,r)})):[]:void 0,t}))}function D(e,t){var r=e.file;return o(o({},e),{file:r?t(r.resolvedPath):void 0})}function S(e,t){return void 0!==(null==t?void 0:t.sourceMapUrlPos)?e.substring(0,t.sourceMapUrlPos):e}function T(t,r,n,i,a){var o,s;return r=S(r,a),(null===(o=null==a?void 0:a.diagnostics)||void 0===o?void 0:o.length)&&(r+=a.diagnostics.map((function(r){return"".concat(function(r){if(r.file.resolvedPath===t.resolvedPath)return"(".concat(r.start,",").concat(r.length,")");void 0===s&&(s=e.getDirectoryPath(t.resolvedPath));return"".concat(e.ensurePathIsNonModuleName(e.getRelativePathFromDirectory(s,r.file.resolvedPath,i)),"(").concat(r.start,",").concat(r.length,")")}(r)).concat(e.DiagnosticCategory[r.category]).concat(r.code,": ").concat(c(r.messageText))})).join("\n")),(null!=n?n:e.generateDjb2Hash)(r);function c(t){return e.isString(t)?t:void 0===t?"":t.next?t.messageText+t.next.map(c).join("\n"):t.messageText}}function C(t,r,n){return(null!=r?r:e.generateDjb2Hash)(S(t,n))}function E(t,r,n){t.affectedFilesPendingEmit||(t.affectedFilesPendingEmit=[]),t.affectedFilesPendingEmitKind||(t.affectedFilesPendingEmitKind=new e.Map);var i=t.affectedFilesPendingEmitKind.get(r);t.affectedFilesPendingEmit.push(r),t.affectedFilesPendingEmitKind.set(r,i||n),void 0===t.affectedFilesPendingEmitIndex&&(t.affectedFilesPendingEmitIndex=0)}function k(t){return e.isString(t)?{version:t,signature:t,affectsGlobalScope:void 0,impliedFormat:void 0}:e.isString(t.signature)?t:{version:t.version,signature:!1===t.signature?void 0:t.version,affectsGlobalScope:t.affectsGlobalScope,impliedFormat:t.impliedFormat}}function N(t,r){return{getState:e.notImplemented,saveEmitState:e.noop,restoreEmitState:e.noop,getProgram:n,getProgramOrUndefined:function(){return t().program},releaseProgram:function(){return t().program=void 0},getCompilerOptions:function(){return t().compilerOptions},getSourceFile:function(e){return n().getSourceFile(e)},getSourceFiles:function(){return n().getSourceFiles()},getOptionsDiagnostics:function(e){return n().getOptionsDiagnostics(e)},getGlobalDiagnostics:function(e){return n().getGlobalDiagnostics(e)},getConfigFileParsingDiagnostics:function(){return r},getSyntacticDiagnostics:function(e,t){return n().getSyntacticDiagnostics(e,t)},getDeclarationDiagnostics:function(e,t){return n().getDeclarationDiagnostics(e,t)},getSemanticDiagnostics:function(e,t){return n().getSemanticDiagnostics(e,t)},emit:function(e,t,r,i,a){return n().emit(e,t,r,i,a)},emitBuildInfo:function(e,t){return n().emitBuildInfo(e,t)},getAllDependencies:e.notImplemented,getCurrentDirectory:function(){return n().getCurrentDirectory()},close:e.noop};function n(){return e.Debug.checkDefined(t().program)}}!function(e){e[e.DtsOnly=0]="DtsOnly",e[e.Full=1]="Full"}(e.BuilderFileEmit||(e.BuilderFileEmit={})),e.isProgramBundleEmitBuildInfo=h,function(e){e[e.SemanticDiagnosticsBuilderProgram=0]="SemanticDiagnosticsBuilderProgram",e[e.EmitAndSemanticDiagnosticsBuilderProgram=1]="EmitAndSemanticDiagnosticsBuilderProgram"}(t=e.BuilderProgramKind||(e.BuilderProgramKind={})),e.getBuilderCreationParameters=function(t,r,n,i,a,o){var s,c,u;return void 0===t?(e.Debug.assert(void 0===r),s=n,u=i,e.Debug.assert(!!u),c=u.getProgram()):e.isArray(t)?(u=i,c=e.createProgram({rootNames:t,options:r,host:n,oldProgram:u&&u.getProgramOrUndefined(),configFileParsingDiagnostics:a,projectReferences:o}),s=n):(c=t,s=r,u=n,a=i),{host:s,newProgram:c,oldProgram:u,configFileParsingDiagnostics:a||e.emptyArray}},e.computeSignatureWithDiagnostics=T,e.computeSignature=C,e.createBuilderProgram=function(n,o){var c=o.newProgram,u=o.host,l=o.oldProgram,_=o.configFileParsingDiagnostics,d=l&&l.getState();if(d&&c===d.program&&_===c.getConfigFileParsingDiagnostics())return c=void 0,d=void 0,l;var p=e.createGetCanonicalFileName(u.useCaseSensitiveFileNames()),f=e.maybeBind(u,u.createHash),h=r(c,p,d,u.disableUseFileVersionAsSignature);c.getProgramBuildInfo=function(){return function(t,r){var n=e.outFile(t.compilerOptions);if(!n||t.compilerOptions.composite){var i=e.Debug.checkDefined(t.program).getCurrentDirectory(),a=e.getDirectoryPath(e.getNormalizedAbsolutePath(e.getTsBuildInfoEmitOutputFilePath(t.compilerOptions),i)),o=t.latestChangedDtsFile?w(t.latestChangedDtsFile):void 0;if(n){var s=[],c=[];return t.program.getRootFileNames().forEach((function(e){var r=t.program.getSourceFile(e);r&&(s.push(I(r.resolvedPath)),c.push(r.version))})),{fileNames:s,fileInfos:c,options:L(t.compilerOptions,"affectsBundleEmitBuildInfo"),outSignature:t.outSignature,latestChangedDtsFile:o}}var u,l,_,d,p,f,g,m,y=[],v=new e.Map,h=e.arrayFrom(t.fileInfos.entries(),(function(r){var n,i,a=r[0],o=r[1],s=O(a);e.Debug.assert(y[s-1]===I(a));var c=null===(n=t.oldSignatures)||void 0===n?void 0:n.get(a),u=void 0!==c?c||void 0:o.signature;if(t.compilerOptions.composite){var l=t.program.getSourceFileByPath(a);if(!e.isJsonSourceFile(l)&&e.sourceFileMayBeEmitted(l,t.program)){var d=null===(i=t.emitSignatures)||void 0===i?void 0:i.get(a);d!==u&&(_||(_=[])).push(void 0===d?s:[s,d])}}return o.version===u?o.affectsGlobalScope||o.impliedFormat?{version:o.version,signature:void 0,affectsGlobalScope:o.affectsGlobalScope,impliedFormat:o.impliedFormat}:o.version:void 0!==u?void 0===c?o:{version:o.version,signature:u,affectsGlobalScope:o.affectsGlobalScope,impliedFormat:o.impliedFormat}:{version:o.version,signature:!1,affectsGlobalScope:o.affectsGlobalScope,impliedFormat:o.impliedFormat}}));if(t.referencedMap&&(d=e.arrayFrom(t.referencedMap.keys()).sort(e.compareStringsCaseSensitive).map((function(e){return[O(e),M(t.referencedMap.getValues(e))]}))),t.exportedModulesMap&&(p=e.mapDefined(e.arrayFrom(t.exportedModulesMap.keys()).sort(e.compareStringsCaseSensitive),(function(e){var r,n=null===(r=t.oldExportedModulesMap)||void 0===r?void 0:r.get(e);return void 0===n?[O(e),M(t.exportedModulesMap.getValues(e))]:n?[O(e),M(n)]:void 0}))),t.semanticDiagnosticsPerFile)for(var D=0,S=e.arrayFrom(t.semanticDiagnosticsPerFile.keys()).sort(e.compareStringsCaseSensitive);D<S.length;D++){var T=S[D],C=t.semanticDiagnosticsPerFile.get(T);(f||(f=[])).push(C.length?[O(T),x(C,I)]:O(T))}if(t.affectedFilesPendingEmit)for(var E=new e.Set,k=0,N=t.affectedFilesPendingEmit.slice(t.affectedFilesPendingEmitIndex).sort(e.compareStringsCaseSensitive);k<N.length;k++){var A=N[k];e.tryAddToSet(E,A)&&(g||(g=[])).push([O(A),t.affectedFilesPendingEmitKind.get(A)])}if(t.changedFilesSet.size)for(var F=0,P=e.arrayFrom(t.changedFilesSet.keys()).sort(e.compareStringsCaseSensitive);F<P.length;F++)A=P[F],(m||(m=[])).push(O(A));return{fileNames:y,fileInfos:h,options:L(t.compilerOptions,"affectsMultiFileEmitBuildInfo"),fileIdsList:u,referencedMap:d,exportedModulesMap:p,semanticDiagnosticsPerFile:f,affectedFilesPendingEmit:g,changeFileSet:m,emitSignatures:_,latestChangedDtsFile:o}}function w(t){return I(e.getNormalizedAbsolutePath(t,i))}function I(t){return e.ensurePathIsNonModuleName(e.getRelativePathFromDirectory(a,t,r))}function O(e){var t=v.get(e);return void 0===t&&(y.push(I(e)),v.set(e,t=y.length)),t}function M(t){var r=e.arrayFrom(t.keys(),O).sort(e.compareValues),n=r.join(),i=null==l?void 0:l.get(n);return void 0===i&&((u||(u=[])).push(r),(l||(l=new e.Map)).set(n,i=u.length)),i}function L(t,r){for(var n,i=e.getOptionsNameMap().optionsNameMap,a=0,o=e.getOwnKeys(t).sort(e.compareStringsCaseSensitive);a<o.length;a++){var s=o[a],c=i.get(s.toLowerCase());(null==c?void 0:c[r])&&((n||(n={}))[s]=b(c,t[s],w))}return n}}(h,p)},c=void 0,l=void 0,d=void 0;var D=function(){return h},S=N(D,_);return S.getState=D,S.saveEmitState=function(){return function(t){var r=e.outFile(t.compilerOptions);return e.Debug.assert(!t.changedFilesSet.size||r),{affectedFilesPendingEmit:t.affectedFilesPendingEmit&&t.affectedFilesPendingEmit.slice(),affectedFilesPendingEmitKind:t.affectedFilesPendingEmitKind&&new e.Map(t.affectedFilesPendingEmitKind),affectedFilesPendingEmitIndex:t.affectedFilesPendingEmitIndex,seenEmittedFiles:t.seenEmittedFiles&&new e.Map(t.seenEmittedFiles),programEmitComplete:t.programEmitComplete,emitSignatures:t.emitSignatures&&new e.Map(t.emitSignatures),outSignature:t.outSignature,latestChangedDtsFile:t.latestChangedDtsFile,hasChangedEmitSignature:t.hasChangedEmitSignature,changedFilesSet:r?new e.Set(t.changedFilesSet):void 0}}(h)},S.restoreEmitState=function(e){return function(e,t){e.affectedFilesPendingEmit=t.affectedFilesPendingEmit,e.affectedFilesPendingEmitKind=t.affectedFilesPendingEmitKind,e.affectedFilesPendingEmitIndex=t.affectedFilesPendingEmitIndex,e.seenEmittedFiles=t.seenEmittedFiles,e.programEmitComplete=t.programEmitComplete,e.emitSignatures=t.emitSignatures,e.outSignature=t.outSignature,e.latestChangedDtsFile=t.latestChangedDtsFile,e.hasChangedEmitSignature=t.hasChangedEmitSignature,t.changedFilesSet&&(e.changedFilesSet=t.changedFilesSet)}(h,e)},S.hasChangedEmitSignature=function(){return!!h.hasChangedEmitSignature},S.getAllDependencies=function(t){return e.BuilderState.getAllDependencies(h,e.Debug.checkDefined(h.program),t)},S.getSemanticDiagnostics=function(t,r){i(h,t);var n,a=e.Debug.checkDefined(h.program).getCompilerOptions();if(e.outFile(a))return e.Debug.assert(!h.semanticDiagnosticsPerFile),e.Debug.checkDefined(h.program).getSemanticDiagnostics(t,r);if(t)return v(h,t,r);for(;F(r););for(var o=0,s=e.Debug.checkDefined(h.program).getSourceFiles();o<s.length;o++){var c=s[o];n=e.addRange(n,v(h,c,r))}return n||e.emptyArray},S.emit=function(r,a,o,c,l){var _;n===t.EmitAndSemanticDiagnosticsBuilderProgram&&i(h,r);var d=e.handleNoEmitOptions(S,r,a,o);if(d)return d;if(!r){if(n===t.EmitAndSemanticDiagnosticsBuilderProgram){for(var p=[],f=!1,g=void 0,m=[],y=void 0;y=k(a,o,c,l);)f=f||y.result.emitSkipped,g=e.addRange(g,y.result.diagnostics),m=e.addRange(m,y.result.emittedFiles),p=e.addRange(p,y.result.sourceMaps);return{emitSkipped:f,diagnostics:g||e.emptyArray,emittedFiles:m,sourceMaps:p}}(null===(_=h.affectedFilesPendingEmitKind)||void 0===_?void 0:_.size)&&(e.Debug.assert(n===t.SemanticDiagnosticsBuilderProgram),c&&!e.every(h.affectedFilesPendingEmit,(function(e,t){return t<h.affectedFilesPendingEmitIndex||0===h.affectedFilesPendingEmitKind.get(e)}))||s(h))}return e.Debug.checkDefined(h.program).emit(r,e.getEmitDeclarations(h.compilerOptions)?A(a,l):a||e.maybeBind(u,u.writeFile),o,c,l)},S.releaseProgram=function(){return function(t){e.BuilderState.releaseCache(t),t.program=void 0}(h)},n===t.SemanticDiagnosticsBuilderProgram?S.getSemanticDiagnosticsOfNextAffectedFile=F:n===t.EmitAndSemanticDiagnosticsBuilderProgram?(S.getSemanticDiagnosticsOfNextAffectedFile=F,S.emitNextAffectedFile=k,S.emitBuildInfo=function(t,r){if(h.buildInfoEmitPending){var n=e.Debug.checkDefined(h.program).emitBuildInfo(t||e.maybeBind(u,u.writeFile),r);return h.buildInfoEmitPending=!1,n}return e.emitSkippedWithNoDiagnostics}):e.notImplemented(),S;function k(t,r,n,i){var o=a(h,r,f,p,u),c=1,l=!1;if(!o)if(e.outFile(h.compilerOptions)){var _=e.Debug.checkDefined(h.program);if(h.programEmitComplete)return;o=_}else{var d=function(t){var r=t.affectedFilesPendingEmit;if(r){for(var n=t.seenEmittedFiles||(t.seenEmittedFiles=new e.Map),i=t.affectedFilesPendingEmitIndex;i<r.length;i++){var a=e.Debug.checkDefined(t.program).getSourceFileByPath(r[i]);if(a){var o=n.get(a.resolvedPath),c=e.Debug.checkDefined(e.Debug.checkDefined(t.affectedFilesPendingEmitKind).get(a.resolvedPath));if(void 0===o||o<c)return t.affectedFilesPendingEmitIndex=i,{affectedFile:a,emitKind:c}}}s(t)}}(h);if(!d){if(!h.buildInfoEmitPending)return;var g=e.Debug.checkDefined(h.program);return y(h,g.emitBuildInfo(t||e.maybeBind(u,u.writeFile),r),g,1,!1,!0)}o=d.affectedFile,c=d.emitKind,l=!0}return y(h,e.Debug.checkDefined(h.program).emit(o===h.program?void 0:o,e.getEmitDeclarations(h.compilerOptions)?A(t,i):t||e.maybeBind(u,u.writeFile),r,n||0===c,i),o,c,l)}function A(t,r){return function(n,i,a,o,s,c){var l,_,d,g,m,y,v;if(e.isDeclarationFileName(n))if(e.outFile(h.compilerOptions)){if(h.compilerOptions.composite){var b=C(i,f,c);if(b===h.outSignature)return;h.outSignature=b,h.hasChangedEmitSignature=!0,h.latestChangedDtsFile=n}}else{e.Debug.assert(1===(null==s?void 0:s.length));var x=void 0;if(!r){var D=s[0],S=h.fileInfos.get(D.resolvedPath);if(S.signature===D.version){var E=T(D,i,f,p,c);if((null===(l=null==c?void 0:c.diagnostics)||void 0===l?void 0:l.length)||(x=E),E!==D.version)if(u.storeFilesChangingSignatureDuringEmit&&(null!==(_=h.filesChangingSignature)&&void 0!==_?_:h.filesChangingSignature=new e.Set).add(D.resolvedPath),h.exportedModulesMap&&e.BuilderState.updateExportedModules(h,D,D.exportedModulesFromDeclarationEmit),h.affectedFiles)void 0===(null===(d=h.oldSignatures)||void 0===d?void 0:d.get(D.resolvedPath))&&(null!==(g=h.oldSignatures)&&void 0!==g?g:h.oldSignatures=new e.Map).set(D.resolvedPath,S.signature||!1),S.signature=E;else S.signature=E,null===(m=h.oldExportedModulesMap)||void 0===m||m.clear()}}if(h.compilerOptions.composite){var k=s[0].resolvedPath,N=null===(y=h.emitSignatures)||void 0===y?void 0:y.get(k);if(null!=x||(x=C(i,f,c)),x===N)return;(null!==(v=h.emitSignatures)&&void 0!==v?v:h.emitSignatures=new e.Map).set(k,x),h.hasChangedEmitSignature=!0,h.latestChangedDtsFile=n}}t?t(n,i,a,o,s,c):u.writeFile?u.writeFile(n,i,a,o,s,c):h.program.writeFile(n,i,a,o,s,c)}}function F(e,r){for(;;){var i=a(h,e,f,p,u);if(!i)return;if(i===h.program)return m(h,h.program.getSemanticDiagnostics(void 0,e),i);if((n===t.EmitAndSemanticDiagnosticsBuilderProgram||h.compilerOptions.noEmit||h.compilerOptions.noEmitOnError)&&E(h,i.resolvedPath,1),!r||!r(i))return m(h,v(h,i,e),i);g(h,i)}}},e.toBuilderStateFileInfo=k,e.createBuilderProgramUsingProgramBuildInfo=function(t,r,n){var i,a,o,s,c,u,l,_=e.getDirectoryPath(e.getNormalizedAbsolutePath(r,n.getCurrentDirectory())),d=e.createGetCanonicalFileName(n.useCaseSensitiveFileNames()),p=t.latestChangedDtsFile?m(t.latestChangedDtsFile):void 0;if(h(t))c={fileInfos:new e.Map,compilerOptions:t.options?e.convertToOptionsWithAbsolutePaths(t.options,m):{},latestChangedDtsFile:p,outSignature:t.outSignature};else{u=null===(i=t.fileNames)||void 0===i?void 0:i.map((function(t){return e.toPath(t,_,d)})),l=null===(a=t.fileIdsList)||void 0===a?void 0:a.map((function(t){return new e.Set(t.map(y))}));var f=new e.Map,g=(null===(o=t.options)||void 0===o?void 0:o.composite)&&!e.outFile(t.options)?new e.Map:void 0;t.fileInfos.forEach((function(e,t){var r=y(t+1),n=k(e);f.set(r,n),g&&n.signature&&g.set(r,n.signature)})),null===(s=t.emitSignatures)||void 0===s||s.forEach((function(t){e.isNumber(t)?g.delete(y(t)):g.set(y(t[0]),t[1])})),c={fileInfos:f,compilerOptions:t.options?e.convertToOptionsWithAbsolutePaths(t.options,m):{},referencedMap:v(t.referencedMap),exportedModulesMap:v(t.exportedModulesMap),semanticDiagnosticsPerFile:t.semanticDiagnosticsPerFile&&e.arrayToMap(t.semanticDiagnosticsPerFile,(function(t){return y(e.isNumber(t)?t:t[0])}),(function(t){return e.isNumber(t)?e.emptyArray:t[1]})),hasReusableDiagnostic:!0,affectedFilesPendingEmit:e.map(t.affectedFilesPendingEmit,(function(e){return y(e[0])})),affectedFilesPendingEmitKind:t.affectedFilesPendingEmit&&e.arrayToMap(t.affectedFilesPendingEmit,(function(e){return y(e[0])}),(function(e){return e[1]})),affectedFilesPendingEmitIndex:t.affectedFilesPendingEmit&&0,changedFilesSet:new e.Set(e.map(t.changeFileSet,y)),latestChangedDtsFile:p,emitSignatures:(null==g?void 0:g.size)?g:void 0}}return{getState:function(){return c},saveEmitState:e.noop,restoreEmitState:e.noop,getProgram:e.notImplemented,getProgramOrUndefined:e.returnUndefined,releaseProgram:e.noop,getCompilerOptions:function(){return c.compilerOptions},getSourceFile:e.notImplemented,getSourceFiles:e.notImplemented,getOptionsDiagnostics:e.notImplemented,getGlobalDiagnostics:e.notImplemented,getConfigFileParsingDiagnostics:e.notImplemented,getSyntacticDiagnostics:e.notImplemented,getDeclarationDiagnostics:e.notImplemented,getSemanticDiagnostics:e.notImplemented,emit:e.notImplemented,getAllDependencies:e.notImplemented,getCurrentDirectory:e.notImplemented,emitNextAffectedFile:e.notImplemented,getSemanticDiagnosticsOfNextAffectedFile:e.notImplemented,emitBuildInfo:e.notImplemented,close:e.noop,hasChangedEmitSignature:e.returnFalse};function m(t){return e.getNormalizedAbsolutePath(t,_)}function y(e){return u[e-1]}function v(t){if(t){var r=e.BuilderState.createManyToManyPathMap();return t.forEach((function(e){var t=e[0],n=e[1];return r.set(y(t),l[n-1])})),r}}},e.getBuildInfoFileVersionMap=function(t,r,n){var i=e.getDirectoryPath(e.getNormalizedAbsolutePath(r,n.getCurrentDirectory())),a=e.createGetCanonicalFileName(n.useCaseSensitiveFileNames()),o=new e.Map;return t.fileInfos.forEach((function(r,n){var s=e.toPath(t.fileNames[n],i,a),c=e.isString(r)?r:r.version;o.set(s,c)})),o},e.createRedirectedBuilderProgram=N}(_||(_={})),function(e){e.createSemanticDiagnosticsBuilderProgram=function(t,r,n,i,a,o){return e.createBuilderProgram(e.BuilderProgramKind.SemanticDiagnosticsBuilderProgram,e.getBuilderCreationParameters(t,r,n,i,a,o))},e.createEmitAndSemanticDiagnosticsBuilderProgram=function(t,r,n,i,a,o){return e.createBuilderProgram(e.BuilderProgramKind.EmitAndSemanticDiagnosticsBuilderProgram,e.getBuilderCreationParameters(t,r,n,i,a,o))},e.createAbstractBuilder=function(t,r,n,i,a,o){var s=e.getBuilderCreationParameters(t,r,n,i,a,o),c=s.newProgram,u=s.configFileParsingDiagnostics;return e.createRedirectedBuilderProgram((function(){return{program:c,compilerOptions:c.getCompilerOptions()}}),u)}}(_||(_={})),function(e){function t(t){return e.endsWith(t,"/node_modules/.staging")?e.removeSuffix(t,"/.staging"):e.some(e.ignoredPaths,(function(r){return e.stringContains(t,r)}))?void 0:t}function r(t){var r=e.getRootLength(t);if(t.length===r)return!1;var n=t.indexOf(e.directorySeparator,r);if(-1===n)return!1;var i=t.substring(r,n+1),a=r>1||47!==t.charCodeAt(0);if(a&&0!==t.search(/[a-zA-Z]:/)&&0===i.search(/[a-zA-Z]\$\//)){if(-1===(n=t.indexOf(e.directorySeparator,n+1)))return!1;i=t.substring(r+i.length,n+1)}if(a&&0!==i.search(/users\//i))return!0;for(var o=n+1,s=2;s>0;s--)if(0===(o=t.indexOf(e.directorySeparator,o)+1))return!1;return!0}function n(e){var t,r;return!(!(null===(t=e.resolvedModule)||void 0===t?void 0:t.originalPath)&&!(null===(r=e.resolvedTypeReferenceDirective)||void 0===r?void 0:r.originalPath))}e.removeIgnoredPath=t,e.canWatchDirectoryOrFile=r,e.createResolutionCache=function(i,a,o){var s,c,u,l,_,d,p,f,g=e.createMultiMap(),m=[],y=[],v=e.createMultiMap(),h=new e.Map,b=!1,x=e.memoize((function(){return i.getCurrentDirectory()})),D=i.getCachedDirectoryStructureHost(),S=new e.Map,T=e.createCacheWithRedirects(),C=e.createCacheWithRedirects(),E=e.createModuleResolutionCache(x(),i.getCanonicalFileName,void 0,T,C),k=new e.Map,N=e.createCacheWithRedirects(),A=e.createTypeReferenceDirectiveResolutionCache(x(),i.getCanonicalFileName,void 0,E.getPackageJsonInfoCache(),N),F=[".ts",".tsx",".js",".jsx",".json"],P=new e.Map,w=new e.Map,I=new e.Map,O=a&&e.removeTrailingDirectorySeparator(e.getNormalizedAbsolutePath(a,x())),M=O&&i.toPath(O),L=void 0!==M?M.split(e.directorySeparator).length:0,R=new e.Map;return{getModuleResolutionCache:function(){return E},startRecordingFilesWithChangedResolutions:function(){s=[]},finishRecordingFilesWithChangedResolutions:function(){var e=s;return s=void 0,e},startCachingPerDirectoryResolution:function(){E.clearAllExceptPackageJsonInfoCache(),A.clearAllExceptPackageJsonInfoCache(),g.forEach($),g.clear()},finishCachingPerDirectoryResolution:function(t,r){u=void 0,g.forEach($),g.clear(),t!==r&&(null==t||t.getSourceFiles().forEach((function(t){for(var r,n,i,a=e.isExternalOrCommonJsModule(t)&&null!==(n=null===(r=t.packageJsonLocations)||void 0===r?void 0:r.length)&&void 0!==n?n:0,o=null!==(i=h.get(t.path))&&void 0!==i?i:e.emptyArray,s=o.length;s<a;s++)Z(t.packageJsonLocations[s],!1);if(o.length>a)for(s=a;s<o.length;s++)I.get(o[s]).files--;a?h.set(t.path,t.packageJsonLocations):h.delete(t.path)})),h.forEach((function(e,r){(null==t?void 0:t.getSourceFileByPath(r))||(e.forEach((function(e){return I.get(e).files--})),h.delete(r))})));w.forEach((function(e,t){0===e.refCount&&(w.delete(t),e.watcher.close())})),I.forEach((function(e,t){0===e.files&&0===e.resolutions&&(I.delete(t),e.watcher.close())})),b=!1},resolveModuleNames:function(t,r,n,i,a){return V({names:t,containingFile:r,redirectedReference:i,cache:S,perDirectoryCacheWithRedirects:T,loader:U,getResolutionWithResolvedFileName:B,shouldRetryResolution:function(t){return!t.resolvedModule||!e.resolutionExtensionIsTSOrJson(t.resolvedModule.extension)},reusedNames:n,logChanges:o,containingSourceFile:a})},getResolvedModuleWithFailedLookupLocationsFromCache:function(e,t,r){var n=S.get(i.toPath(t));return n?n.get(e,r):void 0},resolveTypeReferenceDirectives:function(e,t,r,n){return V({names:e,containingFile:t,redirectedReference:r,cache:k,perDirectoryCacheWithRedirects:N,loader:K,getResolutionWithResolvedFileName:j,shouldRetryResolution:function(e){return void 0===e.resolvedTypeReferenceDirective},containingSourceFileMode:n})},removeResolutionsFromProjectReferenceRedirects:function(t){if(!e.fileExtensionIs(t,".json"))return;var r=i.getCurrentProgram();if(!r)return;var n=r.getResolvedProjectReferenceByPath(t);if(!n)return;n.commandLine.fileNames.forEach((function(e){return ae(i.toPath(e))}))},removeResolutionsOfFile:ae,hasChangedAutomaticTypeDirectiveNames:function(){return b},invalidateResolutionOfFile:function(t){ae(t);var r=b;oe(v.get(t),e.returnTrue)&&b&&!r&&i.onChangedAutomaticTypeDirectiveNames()},invalidateResolutionsOfFailedLookupLocations:ce,setFilesWithInvalidatedNonRelativeUnresolvedImports:function(t){e.Debug.assert(u===t||void 0===u),u=t},createHasInvalidatedResolutions:function(e){ce();var t=c;return c=void 0,function(r){return e(r)||!!(null==t?void 0:t.has(r))||z(r)}},isFileWithInvalidatedNonRelativeUnresolvedImports:z,updateTypeRootsWatch:function(){var t=i.getCompilationSettings();if(t.types)return void de();var r=e.getEffectiveTypeRoots(t,{directoryExists:fe,getCurrentDirectory:x});r?e.mutateMap(R,e.arrayToMap(r,(function(e){return i.toPath(e)})),{createNewValue:pe,onDeleteValue:e.closeFileWatcher}):de()},closeTypeRootsWatch:de,clear:function(){e.clearMap(w,e.closeFileWatcherOf),e.clearMap(I,e.closeFileWatcherOf),P.clear(),g.clear(),de(),S.clear(),k.clear(),v.clear(),m.length=0,y.length=0,d=void 0,p=void 0,f=void 0,_=void 0,l=void 0,E.clear(),A.clear(),h.clear(),b=!1}};function B(e){return e.resolvedModule}function j(e){return e.resolvedTypeReferenceDirective}function J(t,r){return!(void 0===t||r.length<=t.length)&&(e.startsWith(r,t)&&r[t.length]===e.directorySeparator)}function z(e){if(!u)return!1;var t=u.get(e);return!!t&&!!t.length}function U(t,r,n,a,o,s,c){var u,l,_=e.resolveModuleName(t,r,n,a,E,o,c);if(!i.getGlobalCache)return _;var d=i.getGlobalCache();if(!(void 0===d||e.isExternalModuleNameRelative(t)||_.resolvedModule&&e.extensionIsTS(_.resolvedModule.extension))){var p=e.loadModuleFromGlobalCache(e.Debug.checkDefined(i.globalCacheResolutionModuleName)(t),i.projectName,n,a,d,E),f=p.resolvedModule,g=p.failedLookupLocations,m=p.affectingLocations;if(f)return _.resolvedModule=f,(u=_.failedLookupLocations).push.apply(u,g),(l=_.affectingLocations).push.apply(l,m),_}return _}function K(t,r,n,i,a,o,s){return e.resolveTypeReferenceDirective(t,r,n,i,a,A,s)}function V(t){var r,a,o,c=t.names,u=t.containingFile,l=t.redirectedReference,_=t.cache,d=t.perDirectoryCacheWithRedirects,p=t.loader,f=t.getResolutionWithResolvedFileName,g=t.shouldRetryResolution,m=t.reusedNames,y=t.logChanges,v=t.containingSourceFile,h=t.containingSourceFileMode,b=i.toPath(u),x=_.get(b)||_.set(b,e.createModeAwareCache()).get(b),D=e.getDirectoryPath(b),S=d.getOrCreateMapOfCacheRedirects(l),T=S.get(D);T||(T=e.createModeAwareCache(),S.set(D,T));for(var C=[],E=i.getCompilationSettings(),k=y&&z(b),N=i.getCurrentProgram(),A=N&&N.getResolvedProjectReferenceToRedirect(u),F=A?!l||l.sourceFile.path!==A.sourceFile.path:!!l,P=e.createModeAwareCache(),w=0,I=0,O=c;I<O.length;I++){var M=O[I],L=e.isString(M)?M:M.fileName.toLowerCase(),R=e.isString(M)?v?e.getModeForResolutionAtIndex(v,w):void 0:e.getModeForFileReference(M,h);w++;var B=x.get(L,R);if(!P.has(L,R)&&F||!B||B.isInvalidated||k&&!e.isExternalModuleNameRelative(L)&&g(B)){var j=B,J=T.get(L,R);if(J){B=J;var K=(null===(r=i.getCompilerHost)||void 0===r?void 0:r.call(i))||i;if(e.isTraceEnabled(E,K)){var V=f(B);e.trace(K,p===U?(null==V?void 0:V.resolvedFileName)?V.packagetId?e.Diagnostics.Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3_with_Package_ID_4:e.Diagnostics.Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3:e.Diagnostics.Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved:(null==V?void 0:V.resolvedFileName)?V.packagetId?e.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3_with_Package_ID_4:e.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3:e.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_resolved,L,u,e.getDirectoryPath(u),null==V?void 0:V.resolvedFileName,(null==V?void 0:V.packagetId)&&e.packageIdToString(V.packagetId))}}else B=p(L,u,E,(null===(a=i.getCompilerHost)||void 0===a?void 0:a.call(i))||i,l,v,R),T.set(L,R,B),i.onDiscoveredSymlink&&n(B)&&i.onDiscoveredSymlink();x.set(L,R,B),Q(L,B,b,f),j&&te(j,b,f),y&&s&&!q(j,B)&&(s.push(b),y=!1)}else{K=(null===(o=i.getCompilerHost)||void 0===o?void 0:o.call(i))||i;if(e.isTraceEnabled(E,K)&&!P.has(L,R)){V=f(B);e.trace(K,p===U?(null==V?void 0:V.resolvedFileName)?V.packagetId?e.Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3:e.Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2:e.Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved:(null==V?void 0:V.resolvedFileName)?V.packagetId?e.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3:e.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2:e.Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved,L,u,null==V?void 0:V.resolvedFileName,(null==V?void 0:V.packagetId)&&e.packageIdToString(V.packagetId))}}e.Debug.assert(void 0!==B&&!B.isInvalidated),P.set(L,R,!0),C.push(f(B))}return x.forEach((function(t,r,n){P.has(r,n)||e.contains(m,r)||(te(t,b,f),x.delete(r,n))})),C;function q(e,t){if(e===t)return!0;if(!e||!t)return!1;var r=f(e),n=f(t);return r===n||!(!r||!n)&&r.resolvedFileName===n.resolvedFileName}}function q(t){return e.endsWith(t,"/node_modules/@types")}function W(t,r){if(J(M,r)){t=e.isRootedDiskPath(t)?e.normalizePath(t):e.getNormalizedAbsolutePath(t,x());var n=r.split(e.directorySeparator),i=t.split(e.directorySeparator);return e.Debug.assert(i.length===n.length,"FailedLookup: ".concat(t," failedLookupLocationPath: ").concat(r)),n.length>L+1?{dir:i.slice(0,L+1).join(e.directorySeparator),dirPath:n.slice(0,L+1).join(e.directorySeparator)}:{dir:O,dirPath:M,nonRecursive:!1}}return H(e.getDirectoryPath(e.getNormalizedAbsolutePath(t,x())),e.getDirectoryPath(r))}function H(t,n){for(;e.pathContainsNodeModules(n);)t=e.getDirectoryPath(t),n=e.getDirectoryPath(n);if(e.isNodeModulesDirectory(n))return r(e.getDirectoryPath(n))?{dir:t,dirPath:n}:void 0;var i,a,o=!0;if(void 0!==M)for(;!J(n,M);){var s=e.getDirectoryPath(n);if(s===n)break;o=!1,i=n,a=t,n=s,t=e.getDirectoryPath(t)}return r(n)?{dir:a||t,dirPath:i||n,nonRecursive:o}:void 0}function G(t){return e.fileExtensionIsOneOf(t,F)}function Q(t,r,n,a){if(r.refCount)r.refCount++,e.Debug.assertIsDefined(r.files);else{r.refCount=1,e.Debug.assert(0===e.length(r.files)),e.isExternalModuleNameRelative(t)?X(r):g.add(t,r);var o=a(r);o&&o.resolvedFileName&&v.add(i.toPath(o.resolvedFileName),r)}(r.files||(r.files=[])).push(n)}function X(t){e.Debug.assert(!!t.refCount);var r=t.failedLookupLocations,n=t.affectingLocations;if(r.length||n.length){r.length&&m.push(t);for(var a=!1,o=0,s=r;o<s.length;o++){var c=s[o],u=i.toPath(c),l=W(c,u);if(l){var _=l.dir,d=l.dirPath,p=l.nonRecursive;if(!G(u)){var f=P.get(u)||0;P.set(u,f+1)}d===M?(e.Debug.assert(!p),a=!0):ee(_,d,p)}}a&&ee(O,M,!0),Y(t,!r.length)}}function Y(t,r){e.Debug.assert(!!t.refCount);var n=t.affectingLocations;if(n.length){r&&y.push(t);for(var i=0,a=n;i<a.length;i++){Z(a[i],!0)}}}function Z(t,n){var a=I.get(t);if(a)n?a.resolutions++:a.files++;else{var o=t;if(i.realpath&&t!==(o=i.realpath(t))){var s=I.get(o);if(s)return n?s.resolutions++:s.files++,s.paths.add(t),void I.set(t,s)}var c=new e.Set;c.add(o);var u=r(i.toPath(o))?i.watchAffectingFileLocation(o,(function(t,r){null==D||D.addOrDeleteFile(t,i.toPath(o),r);var n=E.getPackageJsonInfoCache().getInternalMap();c.forEach((function(t){d.resolutions&&(null!=_?_:_=new e.Set).add(t),d.files&&(null!=l?l:l=new e.Set).add(t),null==n||n.delete(i.toPath(t))})),i.scheduleInvalidateResolutionsOfFailedLookupLocations()})):e.noopFileWatcher,d={watcher:u!==e.noopFileWatcher?{close:function(){u.close(),u=e.noopFileWatcher}}:u,resolutions:n?1:0,files:n?0:1,paths:c};I.set(o,d),t!==o&&(I.set(t,d),c.add(t))}}function $(e,t){var r=i.getCurrentProgram();r&&r.getTypeChecker().tryFindAmbientModuleWithoutAugmentations(t)?e.forEach((function(e){return Y(e,!0)})):e.forEach(X)}function ee(t,r,n){var i=w.get(r);i?(e.Debug.assert(!!n==!!i.nonRecursive),i.refCount++):w.set(r,{watcher:ne(t,r,n),refCount:1,nonRecursive:n})}function te(t,r,n){if(e.unorderedRemoveItem(e.Debug.checkDefined(t.files),r),t.refCount--,!t.refCount){var a=n(t);a&&a.resolvedFileName&&v.remove(i.toPath(a.resolvedFileName),t);var o=t.failedLookupLocations,s=t.affectingLocations;if(e.unorderedRemoveItem(m,t)){for(var c=!1,u=0,l=o;u<l.length;u++){var _=l[u],d=i.toPath(_),p=W(_,d);if(p){var f=p.dirPath,g=P.get(d);g&&(1===g?P.delete(d):(e.Debug.assert(g>1),P.set(d,g-1))),f===M?c=!0:re(f)}}c&&re(M)}else s.length&&e.unorderedRemoveItem(y,t);for(var h=0,b=s;h<b.length;h++){var x=b[h];I.get(x).resolutions--}}}function re(e){w.get(e).refCount--}function ne(e,t,r){return i.watchDirectoryOfFailedLookupLocation(e,(function(e){var r=i.toPath(e);D&&D.addOrDeleteFileOrDirectory(e,r),se(r,t===r)}),r?0:1)}function ie(e,t,r){var n=e.get(t);n&&(n.forEach((function(e){return te(e,t,r)})),e.delete(t))}function ae(e){ie(S,e,B),ie(k,e,j)}function oe(t,r){if(!t)return!1;for(var n=!1,i=0,a=t;i<a.length;i++){var o=a[i];if(!o.isInvalidated&&r(o)){o.isInvalidated=n=!0;for(var s=0,u=e.Debug.checkDefined(o.files);s<u.length;s++){var l=u[s];(null!=c?c:c=new e.Set).add(l),b=b||e.endsWith(l,e.inferredTypesContainingFile)}}}return n}function se(r,n){if(n)(f||(f=new e.Set)).add(r);else{var a=t(r);if(!a)return!1;if(r=a,i.fileIsOpen(r))return!1;var o=e.getDirectoryPath(r);if(q(r)||e.isNodeModulesDirectory(r)||q(o)||e.isNodeModulesDirectory(o))(d||(d=new e.Set)).add(r),(p||(p=new e.Set)).add(r);else{if(!G(r)&&!P.has(r))return!1;if(e.isEmittedFileOfProgram(i.getCurrentProgram(),r))return!1;(d||(d=new e.Set)).add(r);var s=e.parseNodeModuleFromPath(r);s&&(p||(p=new e.Set)).add(s)}}i.scheduleInvalidateResolutionsOfFailedLookupLocations()}function ce(){var t,r=!1;if(l&&(null===(t=i.getCurrentProgram())||void 0===t||t.getSourceFiles().forEach((function(t){e.some(t.packageJsonLocations,(function(e){return l.has(e)}))&&((null!=c?c:c=new e.Set).add(t.path),r=!0)})),l=void 0),!(d||p||f||_))return r;r=oe(m,ue)||r;var n=E.getPackageJsonInfoCache().getInternalMap();return n&&(d||p||f)&&n.forEach((function(e,t){return le(t)?n.delete(t):void 0})),d=void 0,p=void 0,f=void 0,r=oe(y,_e)||r,_=void 0,r}function ue(e){return!!_e(e)||!!(d||p||f)&&e.failedLookupLocations.some((function(e){return le(i.toPath(e))}))}function le(t){return(null==d?void 0:d.has(t))||e.firstDefinedIterator((null==p?void 0:p.keys())||e.emptyIterator,(function(r){return!!e.startsWith(t,r)||void 0}))||e.firstDefinedIterator((null==f?void 0:f.keys())||e.emptyIterator,(function(e){return!!J(e,t)||void 0}))}function _e(e){return!!_&&e.affectingLocations.some((function(e){return _.has(e)}))}function de(){e.clearMap(R,e.closeFileWatcher)}function pe(e,t){return i.watchTypeRootsDirectory(t,(function(r){var n=i.toPath(r);D&&D.addOrDeleteFileOrDirectory(r,n),b=!0,i.onChangedAutomaticTypeDirectiveNames();var a=function(e,t){if(J(M,t))return M;var r=H(e,t);return r&&w.has(r.dirPath)?r.dirPath:void 0}(t,e);a&&se(n,a===n)}),1)}function fe(t){var n=e.getDirectoryPath(e.getDirectoryPath(t)),a=i.toPath(n);return a===M||r(a)}}}(_||(_={})),function(e){!function(t){var r,n,i;function s(t,r,n,i){var a=r.importModuleSpecifierPreference,o=r.importModuleSpecifierEnding;return{relativePreference:"relative"===a?0:"non-relative"===a?1:"project-relative"===a?3:2,ending:function(){switch(o){case"minimal":return 0;case"index":return 1;case"js":return 2;default:return function(t){var r=t.imports;return e.firstDefined(r,(function(t){var r=t.text;return e.pathIsRelative(r)?e.hasJSFileExtension(r):void 0}))||!1}(i)||c(n,i.path,t)?2:e.getEmitModuleResolutionKind(n)!==e.ModuleResolutionKind.NodeJs?1:0}}()}}function c(t,r,n){var i;return(e.getEmitModuleResolutionKind(t)===e.ModuleResolutionKind.Node16||e.getEmitModuleResolutionKind(t)===e.ModuleResolutionKind.NodeNext)&&e.getImpliedNodeFormatForFile(r,null===(i=n.getPackageJsonInfoCache)||void 0===i?void 0:i.call(n),function(t){var r;return{fileExists:t.fileExists,readFile:e.Debug.checkDefined(t.readFile),directoryExists:t.directoryExists,getCurrentDirectory:t.getCurrentDirectory,realpath:t.realpath,useCaseSensitiveFileNames:null===(r=t.useCaseSensitiveFileNames)||void 0===r?void 0:r.call(t)}}(n),t)!==e.ModuleKind.CommonJS}function u(t,r,n,i,a,o,s,c){void 0===c&&(c={});var u=d(n,a),l=v(n,i,a,s,c);return e.firstDefined(l,(function(e){return S(e,u,r,a,t,s,void 0,c.overrideImportMode)}))||p(i,u,t,a,c.overrideImportMode||r.impliedNodeFormat,o)}function l(t,r,n,i,a){var o;void 0===a&&(a={});var s=e.getSourceFileOfModule(t);if(!s)return e.emptyArray;var c=null===(o=n.getModuleSpecifierCache)||void 0===o?void 0:o.call(n),u=null==c?void 0:c.get(r.path,s.path,i,a);return[null==u?void 0:u.moduleSpecifiers,s,null==u?void 0:u.modulePaths,c]}function _(t,r,n,i,a,o,c){void 0===c&&(c={});var u=!1,_=function(t,r){var n,i=null===(n=t.declarations)||void 0===n?void 0:n.find((function(t){return e.isNonGlobalAmbientModule(t)&&(!e.isExternalModuleAugmentation(t)||!e.isExternalModuleNameRelative(e.getTextOfIdentifierOrLiteral(t.name)))}));if(i)return i.name.text;var a=e.mapDefined(t.declarations,(function(t){var n,i,a,o;if(e.isModuleDeclaration(t)){var s=l(t);if((null===(n=null==s?void 0:s.parent)||void 0===n?void 0:n.parent)&&e.isModuleBlock(s.parent)&&e.isAmbientModule(s.parent.parent)&&e.isSourceFile(s.parent.parent.parent)){var c=null===(o=null===(a=null===(i=s.parent.parent.symbol.exports)||void 0===i?void 0:i.get("export="))||void 0===a?void 0:a.valueDeclaration)||void 0===o?void 0:o.expression;if(c){var u=r.getSymbolAtLocation(c);if(u)if((2097152&(null==u?void 0:u.flags)?r.getAliasedSymbol(u):u)===t.symbol)return s.parent.parent}}}function l(e){for(;4&e.flags;)e=e.parent;return e}})),o=a[0];if(o)return o.name.text}(t,r);if(_)return{moduleSpecifiers:[_],computedWithoutCache:u};var f=l(t,i,a,o,c),g=f[0],m=f[1],y=f[2],v=f[3];if(g)return{moduleSpecifiers:g,computedWithoutCache:u};if(!m)return{moduleSpecifiers:e.emptyArray,computedWithoutCache:u};u=!0,y||(y=h(i.path,m.originalFileName,a));var b=function(t,r,n,i,a,o){void 0===o&&(o={});var c=d(n.path,i),u=s(i,a,r,n),l=e.forEach(t,(function(t){return e.forEach(i.getFileIncludeReasons().get(e.toPath(t.path,i.getCurrentDirectory(),c.getCanonicalFileName)),(function(t){if(t.kind===e.FileIncludeKind.Import&&t.file===n.path&&(!n.impliedNodeFormat||n.impliedNodeFormat===e.getModeForResolutionAtIndex(n,t.index))){var r=e.getModuleNameStringLiteralAt(n,t.index).text;return 1===u.relativePreference&&e.pathIsRelative(r)?void 0:r}}))}));if(l){return[l]}for(var _,f,g,m=e.some(t,(function(e){return e.isInNodeModules})),y=0,v=t;y<v.length;y++){var h=v[y],b=S(h,c,n,i,r,a,void 0,o.overrideImportMode);if(_=e.append(_,b),b&&h.isRedirect)return _;if(!b&&!h.isRedirect){var x=p(h.path,c,r,i,o.overrideImportMode||n.impliedNodeFormat,u);e.pathIsBareSpecifier(x)?f=e.append(f,x):m&&!h.isInNodeModules||(g=e.append(g,x))}}return(null==f?void 0:f.length)?f:(null==_?void 0:_.length)?_:e.Debug.checkDefined(g)}(y,n,i,a,o,c);return null==v||v.set(i.path,m.path,o,c,y,b),{moduleSpecifiers:b,computedWithoutCache:u}}function d(t,r){return{getCanonicalFileName:e.createGetCanonicalFileName(!r.useCaseSensitiveFileNames||r.useCaseSensitiveFileNames()),importingSourceFileName:t,sourceDirectory:e.getDirectoryPath(t)}}function p(t,r,n,i,a,o){var s=o.ending,c=o.relativePreference,u=n.baseUrl,l=n.paths,_=n.rootDirs,d=r.sourceDirectory,p=r.getCanonicalFileName,g=_&&function(t,r,n,i,a,o){var s=T(r,t,i);if(void 0===s)return;var c=T(n,t,i),u=e.flatMap(c,(function(t){return e.map(s,(function(r){return e.ensurePathIsNonModuleName(e.getRelativePathFromDirectory(t,r,i))}))})),l=e.min(u,e.compareNumberOfDirectorySeparators);if(!l)return;return e.getEmitModuleResolutionKind(o)===e.ModuleResolutionKind.NodeJs?C(l,a,o):e.removeFileExtension(l)}(_,t,d,p,s,n)||C(e.ensurePathIsNonModuleName(e.getRelativePathFromDirectory(d,t,p)),s,n);if(!u&&!l||0===c)return g;var y=N(t,e.getNormalizedAbsolutePath(e.getPathsBasePath(n,i)||u,i.getCurrentDirectory()),p);if(!y)return g;var v=l&&x(y,l,b(s,n,a),i,n),h=void 0===v&&void 0!==u?C(y,s,n):v;if(!h)return g;if(1===c)return h;if(3===c){var D=n.configFilePath?e.toPath(e.getDirectoryPath(n.configFilePath),i.getCurrentDirectory(),r.getCanonicalFileName):r.getCanonicalFileName(i.getCurrentDirectory()),S=e.toPath(t,D,p),E=e.startsWith(d,D),k=e.startsWith(S,D);if(E&&!k||!E&&k)return h;var F=m(i,e.getDirectoryPath(S));return m(i,d)!==F?h:g}return 2!==c&&e.Debug.assertNever(c),A(h)||f(g)<f(h)?g:h}function f(t){for(var r=0,n=e.startsWith(t,"./")?2:0;n<t.length;n++)47===t.charCodeAt(n)&&r++;return r}function g(t,r){return e.compareBooleans(r.isRedirect,t.isRedirect)||e.compareNumberOfDirectorySeparators(t.path,r.path)}function m(t,r){return t.getNearestAncestorDirectoryWithPackageJson?t.getNearestAncestorDirectoryWithPackageJson(r):!!e.forEachAncestorDirectory(r,(function(r){return!!t.fileExists(e.combinePaths(r,"package.json"))||void 0}))}function y(t,r,n,i,o){var s,c=e.hostGetCanonicalFileName(n),u=n.getCurrentDirectory(),l=n.isSourceOfProjectReferenceRedirect(r)?n.getProjectReferenceRedirect(r):void 0,_=e.toPath(r,u,c),d=n.redirectTargetsMap.get(_)||e.emptyArray,p=a(a(a([],l?[l]:e.emptyArray,!0),[r],!1),d,!0).map((function(t){return e.getNormalizedAbsolutePath(t,u)})),f=!e.every(p,e.containsIgnoredPath);if(!i){var g=e.forEach(p,(function(t){return!(f&&e.containsIgnoredPath(t))&&o(t,l===t)}));if(g)return g}var m=null===(s=n.getSymlinkCache)||void 0===s?void 0:s.call(n).getSymlinkedDirectoriesByRealpath(),y=e.getNormalizedAbsolutePath(r,u);return m&&e.forEachAncestorDirectory(e.getDirectoryPath(y),(function(r){var n=m.get(e.ensureTrailingDirectorySeparator(e.toPath(r,u,c)));if(n)return!e.startsWithDirectory(t,r,c)&&e.forEach(p,(function(t){if(e.startsWithDirectory(t,r,c))for(var i=e.getRelativePathFromDirectory(r,t,c),a=0,s=n;a<s.length;a++){var u=s[a],_=e.resolvePath(u,i),d=o(_,t===l);if(f=!0,d)return d}}))}))||(i?e.forEach(p,(function(t){return f&&e.containsIgnoredPath(t)?void 0:o(t,t===l)})):void 0)}function v(t,r,n,i,a){var o;void 0===a&&(a={});var s=e.toPath(r,n.getCurrentDirectory(),e.hostGetCanonicalFileName(n)),c=null===(o=n.getModuleSpecifierCache)||void 0===o?void 0:o.call(n);if(c){var u=c.get(t,s,i,a);if(null==u?void 0:u.modulePaths)return u.modulePaths}var l=h(t,r,n);return c&&c.setModulePaths(t,s,i,a,l),l}function h(t,r,n){var i=e.hostGetCanonicalFileName(n),a=new e.Map,o=!1;y(t,r,n,!0,(function(t,r){var n=e.pathContainsNodeModules(t);a.set(t,{path:i(t),isRedirect:r,isInNodeModules:n}),o=o||n}));for(var s,c=[],u=function(t){var r,n=e.ensureTrailingDirectorySeparator(t);a.forEach((function(t,i){var o=t.path,s=t.isRedirect,c=t.isInNodeModules;e.startsWith(o,n)&&((r||(r=[])).push({path:i,isRedirect:s,isInNodeModules:c}),a.delete(i))})),r&&(r.length>1&&r.sort(g),c.push.apply(c,r));var i=e.getDirectoryPath(t);if(i===t)return s=t,"break";s=t=i},l=e.getDirectoryPath(t);0!==a.size;){var _=u(l);if(l=s,"break"===_)break}if(a.size){var d=e.arrayFrom(a.values());d.length>1&&d.sort(g),c.push.apply(c,d)}return c}function b(t,r,n){if(e.getEmitModuleResolutionKind(r)>=e.ModuleResolutionKind.Node16&&n===e.ModuleKind.ESNext)return[2];switch(t){case 2:return[2,0,1];case 1:return[1,0,2];case 0:return[0,1,2];default:e.Debug.assertNever(t)}}function x(t,r,n,i,a){for(var o in r)for(var s=function(r){var i=e.normalizePath(r),s=i.indexOf("*"),c=n.map((function(e){return{ending:e,value:C(t,e,a)}}));if(e.tryGetExtensionFromPath(i)&&c.push({ending:void 0,value:t}),-1!==s)for(var u=i.substring(0,s),l=i.substring(s+1),d=0,p=c;d<p.length;d++){var f=p[d],g=f.ending,m=f.value;if(m.length>=u.length+l.length&&e.startsWith(m,u)&&e.endsWith(m,l)&&_({ending:g,value:m})){var y=m.substring(u.length,m.length-l.length);return{value:o.replace("*",y)}}}else if(e.some(c,(function(e){return 0!==e.ending&&i===e.value}))||e.some(c,(function(e){return 0===e.ending&&i===e.value&&_(e)})))return{value:o}},c=0,u=r[o];c<u.length;c++){var l=s(u[c]);if("object"==typeof l)return l.value}function _(e){var r=e.ending,n=e.value;return 0!==r||n===C(t,r,a,i)}}function D(t,r,n,i,a,o,s){if(void 0===s&&(s=0),"string"==typeof a){var c=e.getNormalizedAbsolutePath(e.combinePaths(n,a),void 0),u=e.hasTSFileExtension(r)?e.removeFileExtension(r)+k(r,t):void 0;switch(s){case 0:if(0===e.comparePaths(r,c)||u&&0===e.comparePaths(u,c))return{moduleFileToTry:i};break;case 1:if(e.containsPath(c,r)){var l=e.getRelativePathFromDirectory(c,r,!1);return{moduleFileToTry:e.getNormalizedAbsolutePath(e.combinePaths(e.combinePaths(i,a),l),void 0)}}break;case 2:var _=c.indexOf("*"),d=c.slice(0,_),p=c.slice(_+1);if(e.startsWith(r,d)&&e.endsWith(r,p)){var f=r.slice(d.length,r.length-p.length);return{moduleFileToTry:i.replace("*",f)}}if(u&&e.startsWith(u,d)&&e.endsWith(u,p)){f=u.slice(d.length,u.length-p.length);return{moduleFileToTry:i.replace("*",f)}}}}else{if(Array.isArray(a))return e.forEach(a,(function(e){return D(t,r,n,i,e,o)}));if("object"==typeof a&&null!==a){if(e.allKeysStartWithDot(a))return e.forEach(e.getOwnKeys(a),(function(s){var c=e.getNormalizedAbsolutePath(e.combinePaths(i,s),void 0),u=e.endsWith(s,"/")?1:e.stringContains(s,"*")?2:0;return D(t,r,n,c,a[s],o,u)}));for(var g=0,m=e.getOwnKeys(a);g<m.length;g++){var y=m[g];if("default"===y||o.indexOf(y)>=0||e.isApplicableVersionedTypesKey(o,y)){var v=a[y],h=D(t,r,n,i,v,o);if(h)return h}}}}}function S(t,r,n,i,a,c,u,l){var _=t.path,d=t.isRedirect,p=r.getCanonicalFileName,f=r.sourceDirectory;if(i.fileExists&&i.readFile){var g=e.getNodeModulePathParts(_);if(g){var m=s(i,c,a,n),y=_,v=!1;if(!u)for(var h=g.packageRootIndex,S=void 0;;){var T=M(h),E=T.moduleFileToTry,N=T.packageRootPath,A=T.blockedByExports,F=T.verbatimFromExports;if(e.getEmitModuleResolutionKind(a)!==e.ModuleResolutionKind.Classic){if(A)return;if(F)return E}if(N){y=N,v=!0;break}if(S||(S=E),-1===(h=_.indexOf(e.directorySeparator,h+1))){y=C(S,m.ending,a,i);break}}if(!d||v){var P=i.getGlobalTypingsCacheLocation&&i.getGlobalTypingsCacheLocation(),w=p(y.substring(0,g.topLevelNodeModulesIndex));if(e.startsWith(f,w)||P&&e.startsWith(p(P),w)){var I=y.substring(g.topLevelPackageNameIndex+1),O=e.getPackageNameFromTypesPackageName(I);return e.getEmitModuleResolutionKind(a)===e.ModuleResolutionKind.Classic&&O===I?void 0:O}}}}function M(t){var r,s,c=_.substring(0,t),u=e.combinePaths(c,"package.json"),d=_,f=!1,y=null===(s=null===(r=i.getPackageJsonInfoCache)||void 0===r?void 0:r.call(i))||void 0===s?void 0:s.getPackageJsonInfo(u);if("object"==typeof y||void 0===y&&i.fileExists(u)){var v=(null==y?void 0:y.contents.packageJsonContent)||JSON.parse(i.readFile(u)),h=l||n.impliedNodeFormat;if(e.getEmitModuleResolutionKind(a)===e.ModuleResolutionKind.Node16||e.getEmitModuleResolutionKind(a)===e.ModuleResolutionKind.NodeNext){var S=["node",h===e.ModuleKind.ESNext?"import":"require","types"],T=v.exports&&"string"==typeof v.name?D(a,_,c,e.getPackageNameFromTypesPackageName(v.name),v.exports,S):void 0;if(T){var C=e.hasTSFileExtension(T.moduleFileToTry)?{moduleFileToTry:e.removeFileExtension(T.moduleFileToTry)+k(T.moduleFileToTry,a)}:T;return o(o({},C),{verbatimFromExports:!0})}if(v.exports)return{moduleFileToTry:_,blockedByExports:!0}}var E=v.typesVersions?e.getPackageJsonTypesVersionsPaths(v.typesVersions):void 0;if(E){var N=x(_.slice(c.length+1),E.paths,b(m.ending,a,h),i,a);void 0===N?f=!0:d=e.combinePaths(c,N)}var A=v.typings||v.types||v.main||"index.js";if(e.isString(A)&&(!f||!e.matchPatternOrExact(e.tryParsePatterns(E.paths),A))){var F=e.toPath(A,c,p);if(e.removeFileExtension(F)===e.removeFileExtension(p(d)))return{packageRootPath:c,moduleFileToTry:d}}}else{var P=p(d.substring(g.packageRootIndex+1));if("index.d.ts"===P||"index.js"===P||"index.ts"===P||"index.tsx"===P)return{moduleFileToTry:d,packageRootPath:c}}return{moduleFileToTry:d}}}function T(t,r,n){return e.mapDefined(r,(function(e){var r=N(t,e,n);return void 0!==r&&A(r)?void 0:r}))}function C(t,r,n,i){if(e.fileExtensionIsOneOf(t,[".json",".mjs",".cjs"]))return t;var a=e.removeFileExtension(t);if(t===a)return t;if(e.fileExtensionIsOneOf(t,[".d.mts",".mts",".d.cts",".cts"]))return a+E(t,n);switch(r){case 0:var o=e.removeSuffix(a,"/index");return i&&o!==a&&function(t,r){if(t.fileExists)for(var n=0,i=e.flatten(e.getSupportedExtensions({allowJs:!0},[{extension:"node",isMixedContent:!1},{extension:"json",isMixedContent:!1,scriptKind:6}]));n<i.length;n++){var a=r+i[n];if(t.fileExists(a))return a}}(i,o)?a:o;case 1:return a;case 2:return a+E(t,n);default:return e.Debug.assertNever(r)}}function E(t,r){var n;return null!==(n=k(t,r))&&void 0!==n?n:e.Debug.fail("Extension ".concat(e.extensionFromPath(t)," is unsupported:: FileName:: ").concat(t))}function k(t,r){var n=e.tryGetExtensionFromPath(t);switch(n){case".ts":case".d.ts":return".js";case".tsx":return 1===r.jsx?".jsx":".js";case".js":case".jsx":case".json":return n;case".d.mts":case".mts":case".mjs":return".mjs";case".d.cts":case".cts":case".cjs":return".cjs";default:return}}function N(t,r,n){var i=e.getRelativePathToDirectoryOrUrl(r,t,r,n,!1);return e.isRootedDiskPath(i)?void 0:i}function A(t){return e.startsWith(t,"..")}!function(e){e[e.Relative=0]="Relative",e[e.NonRelative=1]="NonRelative",e[e.Shortest=2]="Shortest",e[e.ExternalNonRelative=3]="ExternalNonRelative"}(r||(r={})),function(e){e[e.Minimal=0]="Minimal",e[e.Index=1]="Index",e[e.JsExtension=2]="JsExtension"}(n||(n={})),t.updateModuleSpecifier=function(t,r,n,i,a,o,s){void 0===s&&(s={});var l=u(t,r,n,i,a,function(t,r,n,i){return{relativePreference:e.isExternalModuleNameRelative(r)?0:1,ending:e.hasJSFileExtension(r)||c(t,n,i)?2:e.getEmitModuleResolutionKind(t)!==e.ModuleResolutionKind.NodeJs||e.endsWith(r,"index")?1:0}}(t,o,n,a),{},s);if(l!==o)return l},t.getModuleSpecifier=function(e,t,r,n,i,a){return void 0===a&&(a={}),u(e,t,r,n,i,s(i,{},e,t),{},a)},t.getNodeModulesPackageName=function(t,r,n,i,a,o){void 0===o&&(o={});var s=d(r.path,i),c=v(r.path,n,i,a,o);return e.firstDefined(c,(function(e){return S(e,s,r,i,t,a,!0,o.overrideImportMode)}))},t.tryGetModuleSpecifiersFromCache=function(e,t,r,n,i){return void 0===i&&(i={}),l(e,t,r,n,i)[0]},t.getModuleSpecifiers=function(e,t,r,n,i,a,o){return void 0===o&&(o={}),_(e,t,r,n,i,a,o).moduleSpecifiers},t.getModuleSpecifiersWithCacheInfo=_,t.countPathComponents=f,t.forEachFileNameOfModule=y,function(e){e[e.Exact=0]="Exact",e[e.Directory=1]="Directory",e[e.Pattern=2]="Pattern"}(i||(i={})),t.tryGetJSExtensionForFile=k}(e.moduleSpecifiers||(e.moduleSpecifiers={}))}(_||(_={})),function(e){var t=e.sys?{getCurrentDirectory:function(){return e.sys.getCurrentDirectory()},getNewLine:function(){return e.sys.newLine},getCanonicalFileName:e.createGetCanonicalFileName(e.sys.useCaseSensitiveFileNames)}:void 0;function r(r,n){var i=r===e.sys&&t?t:{getCurrentDirectory:function(){return r.getCurrentDirectory()},getNewLine:function(){return r.newLine},getCanonicalFileName:e.createGetCanonicalFileName(r.useCaseSensitiveFileNames)};if(!n)return function(t){return r.write(e.formatDiagnostic(t,i))};var a=new Array(1);return function(t){a[0]=t,r.write(e.formatDiagnosticsWithColorAndContext(a,i)+i.getNewLine()),a[0]=void 0}}function n(t,r,n){return!(!t.clearScreen||n.preserveWatchOutput||n.extendedDiagnostics||n.diagnostics||!e.contains(e.screenStartingMessageCodes,r.code))&&(t.clearScreen(),!0)}function i(e){return e.now?e.now().toLocaleTimeString("en-US",{timeZone:"UTC"}):(new Date).toLocaleTimeString()}function o(t,r){return r?function(r,a,o){n(t,r,o);var s="[".concat(e.formatColorAndReset(i(t),e.ForegroundColorEscapeSequences.Grey),"] ");s+="".concat(e.flattenDiagnosticMessageText(r.messageText,t.newLine)).concat(a+a),t.write(s)}:function(r,a,o){var s="";n(t,r,o)||(s+=a),s+="".concat(i(t)," - "),s+="".concat(e.flattenDiagnosticMessageText(r.messageText,t.newLine)).concat(function(t,r){return e.contains(e.screenStartingMessageCodes,t.code)?r+r:r}(r,a)),t.write(s)}}function s(t){return e.countWhere(t,(function(t){return t.category===e.DiagnosticCategory.Error}))}function c(t){return e.filter(t,(function(t){return t.category===e.DiagnosticCategory.Error})).map((function(e){if(void 0!==e.file)return"".concat(e.file.fileName)})).map((function(r){var n=e.find(t,(function(e){return void 0!==e.file&&e.file.fileName===r}));if(void 0!==n){var i=e.getLineAndCharacterOfPosition(n.file,n.start).line;return{fileName:r,line:i+1}}}))}function u(t){return 1===t?e.Diagnostics.Found_1_error_Watching_for_file_changes:e.Diagnostics.Found_0_errors_Watching_for_file_changes}function l(t,r){var n=e.formatColorAndReset(":"+t.line,e.ForegroundColorEscapeSequences.Grey);return e.pathIsAbsolute(t.fileName)&&e.pathIsAbsolute(r)?e.getRelativePathFromDirectory(r,t.fileName,!1)+n:t.fileName+n}function _(t,r,n,i){if(0===t)return"";var a=r.filter((function(e){return void 0!==e})),o=a.map((function(e){return"".concat(e.fileName,":").concat(e.line)})).filter((function(e,t,r){return r.indexOf(e)===t})),s=a[0]&&l(a[0],i.getCurrentDirectory()),c=1===t?e.createCompilerDiagnostic(void 0!==r[0]?e.Diagnostics.Found_1_error_in_1:e.Diagnostics.Found_1_error,t,s):e.createCompilerDiagnostic(0===o.length?e.Diagnostics.Found_0_errors:1===o.length?e.Diagnostics.Found_0_errors_in_the_same_file_starting_at_Colon_1:e.Diagnostics.Found_0_errors_in_1_files,t,1===o.length?s:o.length),u=o.length>1?function(t,r){var n=t.filter((function(e,t,r){return t===r.findIndex((function(t){return(null==t?void 0:t.fileName)===(null==e?void 0:e.fileName)}))}));if(0===n.length)return"";var i=function(e){return Math.log(e)*Math.LOG10E+1},a=n.map((function(r){return[r,e.countWhere(t,(function(e){return e.fileName===r.fileName}))]})),o=a.reduce((function(e,t){return Math.max(e,t[1]||0)}),0),s=e.Diagnostics.Errors_Files.message,c=s.split(" ")[0].length,u=Math.max(c,i(o)),_=Math.max(i(o)-c,0),d="";return d+=" ".repeat(_)+s+"\n",a.forEach((function(e){var t=e[0],n=e[1],i=Math.log(n)*Math.LOG10E+1|0,a=i<u?" ".repeat(u-i):"",o=l(t,r.getCurrentDirectory());d+="".concat(a).concat(n,"  ").concat(o,"\n")})),d}(a,i):"";return"".concat(n).concat(e.flattenDiagnosticMessageText(c.messageText,n)).concat(n).concat(n).concat(u)}function d(e){return!!e.getState}function p(t,r){var n=t.getCompilerOptions();n.explainFiles?f(d(t)?t.getProgram():t,r):(n.listFiles||n.listFilesOnly)&&e.forEach(t.getSourceFiles(),(function(e){r(e.fileName)}))}function f(t,r){for(var n,i,a=t.getFileIncludeReasons(),o=e.createGetCanonicalFileName(t.useCaseSensitiveFileNames()),s=function(r){return e.convertToRelativePath(r,t.getCurrentDirectory(),o)},c=0,u=t.getSourceFiles();c<u.length;c++){var l=u[c];r("".concat(h(l,s))),null===(n=a.get(l.path))||void 0===n||n.forEach((function(e){return r("  ".concat(v(t,e,s).messageText))})),null===(i=g(l,s))||void 0===i||i.forEach((function(e){return r("  ".concat(e.messageText))}))}}function g(t,r){var n,i;if(t.path!==t.resolvedPath&&(null!=i?i:i=[]).push(e.chainDiagnosticMessages(void 0,e.Diagnostics.File_is_output_of_project_reference_source_0,h(t.originalFileName,r))),t.redirectInfo&&(null!=i?i:i=[]).push(e.chainDiagnosticMessages(void 0,e.Diagnostics.File_redirects_to_file_0,h(t.redirectInfo.redirectTarget,r))),e.isExternalOrCommonJsModule(t))switch(t.impliedNodeFormat){case e.ModuleKind.ESNext:t.packageJsonScope&&(null!=i?i:i=[]).push(e.chainDiagnosticMessages(void 0,e.Diagnostics.File_is_ECMAScript_module_because_0_has_field_type_with_value_module,h(e.last(t.packageJsonLocations),r)));break;case e.ModuleKind.CommonJS:t.packageJsonScope?(null!=i?i:i=[]).push(e.chainDiagnosticMessages(void 0,t.packageJsonScope.contents.packageJsonContent.type?e.Diagnostics.File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module:e.Diagnostics.File_is_CommonJS_module_because_0_does_not_have_field_type,h(e.last(t.packageJsonLocations),r))):(null===(n=t.packageJsonLocations)||void 0===n?void 0:n.length)&&(null!=i?i:i=[]).push(e.chainDiagnosticMessages(void 0,e.Diagnostics.File_is_CommonJS_module_because_package_json_was_not_found))}return i}function m(t,r){var n,i=t.getCompilerOptions().configFile;if(null===(n=null==i?void 0:i.configFileSpecs)||void 0===n?void 0:n.validatedFilesSpec){var a=e.createGetCanonicalFileName(t.useCaseSensitiveFileNames()),o=a(r),s=e.getDirectoryPath(e.getNormalizedAbsolutePath(i.fileName,t.getCurrentDirectory()));return e.find(i.configFileSpecs.validatedFilesSpec,(function(t){return a(e.getNormalizedAbsolutePath(t,s))===o}))}}function y(t,r){var n,i,a=t.getCompilerOptions().configFile;if(null===(n=null==a?void 0:a.configFileSpecs)||void 0===n?void 0:n.validatedIncludeSpecs){if(a.configFileSpecs.isDefaultIncludeSpec)return!0;var o=e.fileExtensionIs(r,".json"),s=e.getDirectoryPath(e.getNormalizedAbsolutePath(a.fileName,t.getCurrentDirectory())),c=t.useCaseSensitiveFileNames();return e.find(null===(i=null==a?void 0:a.configFileSpecs)||void 0===i?void 0:i.validatedIncludeSpecs,(function(t){if(o&&!e.endsWith(t,".json"))return!1;var n=e.getPatternFromSpec(t,s,"files");return!!n&&e.getRegexFromPattern("(".concat(n,")$"),c).test(r)}))}}function v(t,r,n){var i,a,o=t.getCompilerOptions();if(e.isReferencedFile(r)){var s=e.getReferencedFileLocation((function(e){return t.getSourceFileByPath(e)}),r),c=e.isReferenceFileLocation(s)?s.file.text.substring(s.pos,s.end):'"'.concat(s.text,'"'),u=void 0;switch(e.Debug.assert(e.isReferenceFileLocation(s)||r.kind===e.FileIncludeKind.Import,"Only synthetic references are imports"),r.kind){case e.FileIncludeKind.Import:u=e.isReferenceFileLocation(s)?s.packageId?e.Diagnostics.Imported_via_0_from_file_1_with_packageId_2:e.Diagnostics.Imported_via_0_from_file_1:s.text===e.externalHelpersModuleNameText?s.packageId?e.Diagnostics.Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions:e.Diagnostics.Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions:s.packageId?e.Diagnostics.Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions:e.Diagnostics.Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions;break;case e.FileIncludeKind.ReferenceFile:e.Debug.assert(!s.packageId),u=e.Diagnostics.Referenced_via_0_from_file_1;break;case e.FileIncludeKind.TypeReferenceDirective:u=s.packageId?e.Diagnostics.Type_library_referenced_via_0_from_file_1_with_packageId_2:e.Diagnostics.Type_library_referenced_via_0_from_file_1;break;case e.FileIncludeKind.LibReferenceDirective:e.Debug.assert(!s.packageId),u=e.Diagnostics.Library_referenced_via_0_from_file_1;break;default:e.Debug.assertNever(r)}return e.chainDiagnosticMessages(void 0,u,c,h(s.file,n),s.packageId&&e.packageIdToString(s.packageId))}switch(r.kind){case e.FileIncludeKind.RootFile:if(!(null===(i=o.configFile)||void 0===i?void 0:i.configFileSpecs))return e.chainDiagnosticMessages(void 0,e.Diagnostics.Root_file_specified_for_compilation);var l=e.getNormalizedAbsolutePath(t.getRootFileNames()[r.index],t.getCurrentDirectory());if(m(t,l))return e.chainDiagnosticMessages(void 0,e.Diagnostics.Part_of_files_list_in_tsconfig_json);var _=y(t,l);return e.isString(_)?e.chainDiagnosticMessages(void 0,e.Diagnostics.Matched_by_include_pattern_0_in_1,_,h(o.configFile,n)):e.chainDiagnosticMessages(void 0,_?e.Diagnostics.Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk:e.Diagnostics.Root_file_specified_for_compilation);case e.FileIncludeKind.SourceFromProjectReference:case e.FileIncludeKind.OutputFromProjectReference:var d=r.kind===e.FileIncludeKind.OutputFromProjectReference,p=e.Debug.checkDefined(null===(a=t.getResolvedProjectReferences())||void 0===a?void 0:a[r.index]);return e.chainDiagnosticMessages(void 0,e.outFile(o)?d?e.Diagnostics.Output_from_referenced_project_0_included_because_1_specified:e.Diagnostics.Source_from_referenced_project_0_included_because_1_specified:d?e.Diagnostics.Output_from_referenced_project_0_included_because_module_is_specified_as_none:e.Diagnostics.Source_from_referenced_project_0_included_because_module_is_specified_as_none,h(p.sourceFile.fileName,n),o.outFile?"--outFile":"--out");case e.FileIncludeKind.AutomaticTypeDirectiveFile:return e.chainDiagnosticMessages(void 0,o.types?r.packageId?e.Diagnostics.Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1:e.Diagnostics.Entry_point_of_type_library_0_specified_in_compilerOptions:r.packageId?e.Diagnostics.Entry_point_for_implicit_type_library_0_with_packageId_1:e.Diagnostics.Entry_point_for_implicit_type_library_0,r.typeReference,r.packageId&&e.packageIdToString(r.packageId));case e.FileIncludeKind.LibFile:if(void 0!==r.index)return e.chainDiagnosticMessages(void 0,e.Diagnostics.Library_0_specified_in_compilerOptions,o.lib[r.index]);var f=e.forEachEntry(e.targetOptionDeclaration.type,(function(t,r){return t===e.getEmitScriptTarget(o)?r:void 0}));return e.chainDiagnosticMessages(void 0,f?e.Diagnostics.Default_library_for_target_0:e.Diagnostics.Default_library,f);default:e.Debug.assertNever(r)}}function h(t,r){var n=e.isString(t)?t:t.fileName;return r?r(n):n}function b(t,r,n,i,a,o,u,l){var _=!!t.getCompilerOptions().listFilesOnly,d=t.getConfigFileParsingDiagnostics().slice(),f=d.length;e.addRange(d,t.getSyntacticDiagnostics(void 0,o)),d.length===f&&(e.addRange(d,t.getOptionsDiagnostics(o)),_||(e.addRange(d,t.getGlobalDiagnostics(o)),d.length===f&&e.addRange(d,t.getSemanticDiagnostics(void 0,o))));var g=_?{emitSkipped:!0,diagnostics:e.emptyArray}:t.emit(void 0,a,o,u,l),m=g.emittedFiles,y=g.diagnostics;e.addRange(d,y);var v=e.sortAndDeduplicateDiagnostics(d);if(v.forEach(r),n){var h=t.getCurrentDirectory();e.forEach(m,(function(t){var r=e.getNormalizedAbsolutePath(t,h);n("TSFILE: ".concat(r))})),p(t,n)}return i&&i(s(v),c(v)),{emitResult:g,diagnostics:v}}function x(t,r,n,i,a,o,s,c){var u=b(t,r,n,i,a,o,s,c),l=u.emitResult,_=u.diagnostics;return l.emitSkipped&&_.length>0?e.ExitStatus.DiagnosticsPresent_OutputsSkipped:_.length>0?e.ExitStatus.DiagnosticsPresent_OutputsGenerated:e.ExitStatus.Success}function D(t,r){return void 0===t&&(t=e.sys),{onWatchStatusChange:r||o(t),watchFile:e.maybeBind(t,t.watchFile)||e.returnNoopFileWatcher,watchDirectory:e.maybeBind(t,t.watchDirectory)||e.returnNoopFileWatcher,setTimeout:e.maybeBind(t,t.setTimeout)||e.noop,clearTimeout:e.maybeBind(t,t.clearTimeout)||e.noop}}function S(t,r){var n=e.memoize((function(){return e.getDirectoryPath(e.normalizePath(t.getExecutingFilePath()))}));return{useCaseSensitiveFileNames:function(){return t.useCaseSensitiveFileNames},getNewLine:function(){return t.newLine},getCurrentDirectory:e.memoize((function(){return t.getCurrentDirectory()})),getDefaultLibLocation:n,getDefaultLibFileName:function(t){return e.combinePaths(n(),e.getDefaultLibFileName(t))},fileExists:function(e){return t.fileExists(e)},readFile:function(e,r){return t.readFile(e,r)},directoryExists:function(e){return t.directoryExists(e)},getDirectories:function(e){return t.getDirectories(e)},readDirectory:function(e,r,n,i,a){return t.readDirectory(e,r,n,i,a)},realpath:e.maybeBind(t,t.realpath),getEnvironmentVariable:e.maybeBind(t,t.getEnvironmentVariable),trace:function(e){return t.write(e+t.newLine)},createDirectory:function(e){return t.createDirectory(e)},writeFile:function(e,r,n){return t.writeFile(e,r,n)},createHash:e.maybeBind(t,t.createHash),createProgram:r||e.createEmitAndSemanticDiagnosticsBuilderProgram,disableUseFileVersionAsSignature:t.disableUseFileVersionAsSignature,storeFilesChangingSignatureDuringEmit:t.storeFilesChangingSignatureDuringEmit,now:e.maybeBind(t,t.now)}}function T(t,r,n,i){void 0===t&&(t=e.sys);var a=function(e){return t.write(e+t.newLine)},o=S(t,r);return e.copyProperties(o,D(t,i)),o.afterProgramCreate=function(r){var i=r.getCompilerOptions(),s=e.getNewLineCharacter(i,(function(){return t.newLine}));b(r,n,a,(function(t){return o.onWatchStatusChange(e.createCompilerDiagnostic(u(t),t),s,i,t)}))},o}function C(t,r,n){r(n),t.exit(e.ExitStatus.DiagnosticsPresent_OutputsSkipped)}e.createDiagnosticReporter=r,e.screenStartingMessageCodes=[e.Diagnostics.Starting_compilation_in_watch_mode.code,e.Diagnostics.File_change_detected_Starting_incremental_compilation.code],e.getLocaleTimeString=i,e.createWatchStatusReporter=o,e.parseConfigFileWithSystem=function(t,r,n,i,a,o){var s=a;s.onUnRecoverableConfigFileDiagnostic=function(e){return C(a,o,e)};var c=e.getParsedCommandLineOfConfigFile(t,r,s,n,i);return s.onUnRecoverableConfigFileDiagnostic=void 0,c},e.getErrorCountForSummary=s,e.getFilesInErrorForSummary=c,e.getWatchErrorSummaryDiagnosticMessage=u,e.getErrorSummaryText=_,e.isBuilderProgram=d,e.listFiles=p,e.explainFiles=f,e.explainIfFileIsRedirectAndImpliedFormat=g,e.getMatchedFileSpec=m,e.getMatchedIncludeSpec=y,e.fileIncludeReasonToDiagnostics=v,e.emitFilesAndReportErrors=b,e.emitFilesAndReportErrorsAndGetExitStatus=x,e.noopFileWatcher={close:e.noop},e.returnNoopFileWatcher=function(){return e.noopFileWatcher},e.createWatchHost=D,e.WatchType={ConfigFile:"Config file",ExtendedConfigFile:"Extended config file",SourceFile:"Source file",MissingFile:"Missing file",WildcardDirectory:"Wild card directory",FailedLookupLocations:"Failed Lookup Locations",AffectingFileLocation:"File location affecting resolution",TypeRoots:"Type roots",ConfigFileOfReferencedProject:"Config file of referened project",ExtendedConfigOfReferencedProject:"Extended config file of referenced project",WildcardDirectoryOfReferencedProject:"Wild card directory of referenced project",PackageJson:"package.json file",ClosedScriptInfo:"Closed Script info",ConfigFileForInferredRoot:"Config file for the inferred project root",NodeModules:"node_modules for closed script infos and package.jsons affecting module specifier cache",MissingSourceMapFile:"Missing source map file",NoopConfigFileForInferredRoot:"Noop Config file for the inferred project root",MissingGeneratedFile:"Missing generated file",NodeModulesForModuleSpecifierCache:"node_modules for module specifier cache invalidation"},e.createWatchFactory=function(t,r){var n=t.trace?r.extendedDiagnostics?e.WatchLogLevel.Verbose:r.diagnostics?e.WatchLogLevel.TriggerOnly:e.WatchLogLevel.None:e.WatchLogLevel.None,i=n!==e.WatchLogLevel.None?function(e){return t.trace(e)}:e.noop,a=e.getWatchFactory(t,n,i);return a.writeLog=i,a},e.createCompilerHostFromProgramHost=function(t,r,n){void 0===n&&(n=t);var i=t.useCaseSensitiveFileNames(),a=e.memoize((function(){return t.getNewLine()})),o={getSourceFile:function(n,i,a){var s;try{e.performance.mark("beforeIORead");var c=r().charset;s=c?t.readFile(n,c):o.readFile(n),e.performance.mark("afterIORead"),e.performance.measure("I/O Read","beforeIORead","afterIORead")}catch(u){a&&a(u.message),s=""}return void 0!==s?e.createSourceFile(n,s,i):void 0},getDefaultLibLocation:e.maybeBind(t,t.getDefaultLibLocation),getDefaultLibFileName:function(e){return t.getDefaultLibFileName(e)},writeFile:function(r,n,i,a){try{e.performance.mark("beforeIOWrite"),e.writeFileEnsuringDirectories(r,n,i,(function(e,r,n){return t.writeFile(e,r,n)}),(function(e){return t.createDirectory(e)}),(function(e){return t.directoryExists(e)})),e.performance.mark("afterIOWrite"),e.performance.measure("I/O Write","beforeIOWrite","afterIOWrite")}catch(o){a&&a(o.message)}},getCurrentDirectory:e.memoize((function(){return t.getCurrentDirectory()})),useCaseSensitiveFileNames:function(){return i},getCanonicalFileName:e.createGetCanonicalFileName(i),getNewLine:function(){return e.getNewLineCharacter(r(),a)},fileExists:function(e){return t.fileExists(e)},readFile:function(e){return t.readFile(e)},trace:e.maybeBind(t,t.trace),directoryExists:e.maybeBind(n,n.directoryExists),getDirectories:e.maybeBind(n,n.getDirectories),realpath:e.maybeBind(t,t.realpath),getEnvironmentVariable:e.maybeBind(t,t.getEnvironmentVariable)||function(){return""},createHash:e.maybeBind(t,t.createHash),readDirectory:e.maybeBind(t,t.readDirectory),disableUseFileVersionAsSignature:t.disableUseFileVersionAsSignature,storeFilesChangingSignatureDuringEmit:t.storeFilesChangingSignatureDuringEmit};return o},e.setGetSourceFileAsHashVersioned=function(t){var r=t.getSourceFile,n=e.maybeBind(t,t.createHash)||e.generateDjb2Hash;t.getSourceFile=function(){for(var e=[],i=0;i<arguments.length;i++)e[i]=arguments[i];var o=r.call.apply(r,a([t],e,!1));return o&&(o.version=n(o.text)),o}},e.createProgramHost=S,e.createWatchCompilerHostOfConfigFile=function(e){var t=e.configFileName,n=e.optionsToExtend,i=e.watchOptionsToExtend,a=e.extraFileExtensions,o=e.system,s=e.createProgram,c=e.reportDiagnostic,u=e.reportWatchStatus,l=c||r(o),_=T(o,s,l,u);return _.onUnRecoverableConfigFileDiagnostic=function(e){return C(o,l,e)},_.configFileName=t,_.optionsToExtend=n,_.watchOptionsToExtend=i,_.extraFileExtensions=a,_},e.createWatchCompilerHostOfFilesAndCompilerOptions=function(e){var t=e.rootFiles,n=e.options,i=e.watchOptions,a=e.projectReferences,o=e.system,s=e.createProgram,c=e.reportDiagnostic,u=e.reportWatchStatus,l=T(o,s,c||r(o),u);return l.rootFiles=t,l.options=n,l.watchOptions=i,l.projectReferences=a,l},e.performIncrementalCompilation=function(t){var n=t.system||e.sys,i=t.host||(t.host=e.createIncrementalCompilerHost(t.options,n)),a=e.createIncrementalProgram(t),o=x(a,t.reportDiagnostic||r(n),(function(e){return i.trace&&i.trace(e)}),t.reportErrorSummary||t.options.pretty?function(e,t){return n.write(_(e,t,n.newLine,i))}:void 0);return t.afterProgramEmitAndDiagnostics&&t.afterProgramEmitAndDiagnostics(a),o}}(_||(_={})),function(e){function t(t,r){var n=e.getTsBuildInfoEmitOutputFilePath(t);if(n){var i;if(r.getBuildInfo)i=r.getBuildInfo(n,t.configFilePath);else{var a=r.readFile(n);if(!a)return;i=e.getBuildInfo(n,a)}if(i&&i.version===e.version&&i.program)return e.createBuilderProgramUsingProgramBuildInfo(i.program,n,r)}}function r(t,r){void 0===r&&(r=e.sys);var n=e.createCompilerHostWorker(t,void 0,r);return n.createHash=e.maybeBind(r,r.createHash),n.disableUseFileVersionAsSignature=r.disableUseFileVersionAsSignature,n.storeFilesChangingSignatureDuringEmit=r.storeFilesChangingSignatureDuringEmit,e.setGetSourceFileAsHashVersioned(n),e.changeCompilerHostLikeToUseCache(n,(function(t){return e.toPath(t,n.getCurrentDirectory(),n.getCanonicalFileName)})),n}e.readBuilderProgram=t,e.createIncrementalCompilerHost=r,e.createIncrementalProgram=function(n){var i=n.rootNames,a=n.options,o=n.configFileParsingDiagnostics,s=n.projectReferences,c=n.host,u=n.createProgram;return c=c||r(a),(u=u||e.createEmitAndSemanticDiagnosticsBuilderProgram)(i,a,c,t(a,c),o,s)},e.createWatchCompilerHost=function(t,r,n,i,a,o,s,c){return e.isArray(t)?e.createWatchCompilerHostOfFilesAndCompilerOptions({rootFiles:t,options:r,watchOptions:c,projectReferences:s,system:n,createProgram:i,reportDiagnostic:a,reportWatchStatus:o}):e.createWatchCompilerHostOfConfigFile({configFileName:t,optionsToExtend:r,watchOptionsToExtend:s,extraFileExtensions:c,system:n,createProgram:i,reportDiagnostic:a,reportWatchStatus:o})},e.createWatchProgram=function(r){var n,i,s,c,u,l,_,d,p,f,g,m=r.extendedConfigCache,y=!1,v=new e.Map,h=!1,b=r.useCaseSensitiveFileNames(),x=r.getCurrentDirectory(),D=r.configFileName,S=r.optionsToExtend,T=void 0===S?{}:S,C=r.watchOptionsToExtend,E=r.extraFileExtensions,k=r.createProgram,N=r.rootFiles,A=r.options,F=r.watchOptions,P=r.projectReferences,w=!1,I=!1,O=void 0===D?void 0:e.createCachedDirectoryStructureHost(r,x,b),M=O||r,L=e.parseConfigHostFromCompilerHostLike(r,M),R=Z();D&&r.configFileParsingResult&&(_e(r.configFileParsingResult),R=Z()),ne(e.Diagnostics.Starting_compilation_in_watch_mode),D&&!r.configFileParsingResult&&(R=e.getNewLineCharacter(T,(function(){return r.getNewLine()})),e.Debug.assert(!N),le(),R=Z());var B,j=e.createWatchFactory(r,A),J=j.watchFile,z=j.watchDirectory,U=j.writeLog,K=e.createGetCanonicalFileName(b);U("Current directory: ".concat(x," CaseSensitiveFileNames: ").concat(b)),D&&(B=J(D,(function(){e.Debug.assert(!!D),i=e.ConfigFileProgramReloadLevel.Full,se()}),e.PollingInterval.High,F,e.WatchType.ConfigFile));var V=e.createCompilerHostFromProgramHost(r,(function(){return A}),M);e.setGetSourceFileAsHashVersioned(V);var q=V.getSourceFile;V.getSourceFile=function(e){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return te.apply(void 0,a([e,$(e)],t,!1))},V.getSourceFileByPath=te,V.getNewLine=function(){return R},V.fileExists=function(e){var t=$(e);if(ee(v.get(t)))return!1;return M.fileExists(e)},V.onReleaseOldSourceFile=function(e,t,r){var n=v.get(e.resolvedPath);void 0!==n&&(ee(n)?(p||(p=[])).push(e.path):n.sourceFile===e&&(n.fileWatcher&&n.fileWatcher.close(),v.delete(e.resolvedPath),r||W.removeResolutionsOfFile(e.path)))},V.onReleaseParsedCommandLine=function(t){var r,n=$(t),i=null==_?void 0:_.get(n);if(!i)return;_.delete(n),i.watchedDirectories&&e.clearMap(i.watchedDirectories,e.closeFileWatcherOf);null===(r=i.watcher)||void 0===r||r.close(),e.clearSharedExtendedConfigFileWatcher(n,d)},V.toPath=$,V.getCompilationSettings=function(){return A},V.useSourceOfProjectReferenceRedirect=e.maybeBind(r,r.useSourceOfProjectReferenceRedirect),V.watchDirectoryOfFailedLookupLocation=function(t,r,n){return z(t,r,n,F,e.WatchType.FailedLookupLocations)},V.watchAffectingFileLocation=function(t,r){return J(t,r,e.PollingInterval.High,F,e.WatchType.AffectingFileLocation)},V.watchTypeRootsDirectory=function(t,r,n){return z(t,r,n,F,e.WatchType.TypeRoots)},V.getCachedDirectoryStructureHost=function(){return O},V.scheduleInvalidateResolutionsOfFailedLookupLocations=function(){if(!r.setTimeout||!r.clearTimeout)return W.invalidateResolutionsOfFailedLookupLocations();var e=ae();U("Scheduling invalidateFailedLookup".concat(e?", Cancelled earlier one":"")),l=r.setTimeout(oe,250)},V.onInvalidatedResolution=se,V.onChangedAutomaticTypeDirectiveNames=se,V.fileIsOpen=e.returnFalse,V.getCurrentProgram=X,V.writeLog=U,V.getParsedCommandLine=de;var W=e.createResolutionCache(V,D?e.getDirectoryPath(e.getNormalizedAbsolutePath(D,x)):x,!1);V.resolveModuleNames=r.resolveModuleNames?function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return r.resolveModuleNames.apply(r,e)}:function(e,t,r,n,i,a){return W.resolveModuleNames(e,t,r,n,a)},V.resolveTypeReferenceDirectives=r.resolveTypeReferenceDirectives?function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return r.resolveTypeReferenceDirectives.apply(r,e)}:function(e,t,r,n,i){return W.resolveTypeReferenceDirectives(e,t,r,i)},V.getModuleResolutionCache=r.resolveModuleNames?e.maybeBind(r,r.getModuleResolutionCache):function(){return W.getModuleResolutionCache()};var H=!!r.resolveModuleNames||!!r.resolveTypeReferenceDirectives?e.maybeBind(r,r.hasInvalidatedResolutions)||e.returnTrue:e.returnFalse;return n=t(A,V),Y(),ve(),D&&be($(D),A,F,e.WatchType.ExtendedConfigFile),D?{getCurrentProgram:Q,getProgram:ue,close:G}:{getCurrentProgram:Q,getProgram:ue,updateRootFileNames:function(t){e.Debug.assert(!D,"Cannot update root file names with config file watch mode"),N=t,se()},close:G};function G(){ae(),W.clear(),e.clearMap(v,(function(e){e&&e.fileWatcher&&(e.fileWatcher.close(),e.fileWatcher=void 0)})),B&&(B.close(),B=void 0),null==m||m.clear(),m=void 0,d&&(e.clearMap(d,e.closeFileWatcherOf),d=void 0),c&&(e.clearMap(c,e.closeFileWatcherOf),c=void 0),s&&(e.clearMap(s,e.closeFileWatcher),s=void 0),_&&(e.clearMap(_,(function(t){var r;null===(r=t.watcher)||void 0===r||r.close(),t.watcher=void 0,t.watchedDirectories&&e.clearMap(t.watchedDirectories,e.closeFileWatcherOf),t.watchedDirectories=void 0})),_=void 0)}function Q(){return n}function X(){return n&&n.getProgramOrUndefined()}function Y(){U("Synchronizing program"),ae();var t=Q();h&&(R=Z(),t&&e.changesAffectModuleResolution(t.getCompilerOptions(),A)&&W.clear());var i=W.createHasInvalidatedResolutions(H),a=e.changeCompilerHostLikeToUseCache(V,$),o=a.originalReadFile,c=a.originalFileExists,u=a.originalDirectoryExists,l=a.originalCreateDirectory,_=a.originalWriteFile,d=a.readFileWithCache;return e.isProgramUptoDate(X(),N,A,(function(t){return function(t,r){var n=v.get(t);if(!n)return;if(n.version)return n.version;var i=r(t);return void 0!==i?(V.createHash||e.generateDjb2Hash)(i):void 0}(t,d)}),(function(e){return V.fileExists(e)}),i,ie,de,P)?I&&(y&&ne(e.Diagnostics.File_change_detected_Starting_incremental_compilation),n=k(void 0,void 0,V,n,g,P),I=!1):(y&&ne(e.Diagnostics.File_change_detected_Starting_incremental_compilation),function(t){U("CreatingProgramWith::"),U("  roots: ".concat(JSON.stringify(N))),U("  options: ".concat(JSON.stringify(A))),P&&U("  projectReferences: ".concat(JSON.stringify(P)));var r=h||!X();h=!1,I=!1,W.startCachingPerDirectoryResolution(),V.hasInvalidatedResolutions=t,V.hasChangedAutomaticTypeDirectiveNames=ie;var i=X();n=k(N,A,V,n,g,P),W.finishCachingPerDirectoryResolution(n.getProgram(),i),e.updateMissingFilePathsWatch(n.getProgram(),s||(s=new e.Map),me),r&&W.updateTypeRootsWatch();if(p){for(var a=0,o=p;a<o.length;a++){var c=o[a];s.has(c)||v.delete(c)}p=void 0}}(i)),y=!1,r.afterProgramCreate&&t!==n&&r.afterProgramCreate(n),V.readFile=o,V.fileExists=c,V.directoryExists=u,V.createDirectory=l,V.writeFile=_,n}function Z(){return e.getNewLineCharacter(A||T,(function(){return r.getNewLine()}))}function $(t){return e.toPath(t,x,K)}function ee(e){return"boolean"==typeof e}function te(t,r,n,i,a){var o=v.get(r);if(!ee(o)){if(void 0===o||a||function(e){return"boolean"==typeof e.version}(o)){var s=q(t,n,i);if(o)s?(o.sourceFile=s,o.version=s.version,o.fileWatcher||(o.fileWatcher=pe(r,t,fe,e.PollingInterval.Low,F,e.WatchType.SourceFile))):(o.fileWatcher&&o.fileWatcher.close(),v.set(r,!1));else if(s){var c=pe(r,t,fe,e.PollingInterval.Low,F,e.WatchType.SourceFile);v.set(r,{sourceFile:s,version:s.version,fileWatcher:c})}else v.set(r,!1);return s}return o.sourceFile}}function re(e){var t=v.get(e);void 0!==t&&(ee(t)?v.set(e,{version:!1}):t.version=!1)}function ne(t){r.onWatchStatusChange&&r.onWatchStatusChange(e.createCompilerDiagnostic(t),R,A||T)}function ie(){return W.hasChangedAutomaticTypeDirectiveNames()}function ae(){return!!l&&(r.clearTimeout(l),l=void 0,!0)}function oe(){l=void 0,W.invalidateResolutionsOfFailedLookupLocations()&&se()}function se(){r.setTimeout&&r.clearTimeout&&(u&&r.clearTimeout(u),U("Scheduling update"),u=r.setTimeout(ce,250))}function ce(){u=void 0,y=!0,ue()}function ue(){switch(i){case e.ConfigFileProgramReloadLevel.Partial:e.perfLogger.logStartUpdateProgram("PartialConfigReload"),function(){U("Reloading new file names and options"),i=e.ConfigFileProgramReloadLevel.None,N=e.getFileNamesFromConfigSpecs(A.configFile.configFileSpecs,e.getNormalizedAbsolutePath(e.getDirectoryPath(D),x),A,L,E),e.updateErrorForNoInputFiles(N,e.getNormalizedAbsolutePath(D,x),A.configFile.configFileSpecs,g,w)&&(I=!0);Y()}();break;case e.ConfigFileProgramReloadLevel.Full:e.perfLogger.logStartUpdateProgram("FullConfigReload"),function(){U("Reloading config file: ".concat(D)),i=e.ConfigFileProgramReloadLevel.None,O&&O.clearCache();le(),h=!0,Y(),ve(),be($(D),A,F,e.WatchType.ExtendedConfigFile)}();break;default:e.perfLogger.logStartUpdateProgram("SynchronizeProgram"),Y()}return e.perfLogger.logStopUpdateProgram("Done"),Q()}function le(){_e(e.getParsedCommandLineOfConfigFile(D,T,L,m||(m=new e.Map),C,E))}function _e(t){N=t.fileNames,A=t.options,F=t.watchOptions,P=t.projectReferences,f=t.wildcardDirectories,g=e.getConfigFileParsingDiagnostics(t).slice(),w=e.canJsonReportNoInputFiles(t.raw),I=!0}function de(t){var n=$(t),i=null==_?void 0:_.get(n);if(i){if(!i.reloadLevel)return i.parsedCommandLine;if(i.parsedCommandLine&&i.reloadLevel===e.ConfigFileProgramReloadLevel.Partial&&!r.getParsedCommandLine){U("Reloading new file names and options");var a=e.getFileNamesFromConfigSpecs(i.parsedCommandLine.options.configFile.configFileSpecs,e.getNormalizedAbsolutePath(e.getDirectoryPath(t),x),A,L);return i.parsedCommandLine=o(o({},i.parsedCommandLine),{fileNames:a}),i.reloadLevel=void 0,i.parsedCommandLine}}U("Loading config file: ".concat(t));var s=r.getParsedCommandLine?r.getParsedCommandLine(t):function(t){var r=L.onUnRecoverableConfigFileDiagnostic;L.onUnRecoverableConfigFileDiagnostic=e.noop;var n=e.getParsedCommandLineOfConfigFile(t,void 0,L,m||(m=new e.Map),C);return L.onUnRecoverableConfigFileDiagnostic=r,n}(t);return i?(i.parsedCommandLine=s,i.reloadLevel=void 0):(_||(_=new e.Map)).set(n,i={parsedCommandLine:s}),function(t,r,n){var i,a,o,s,c;n.watcher||(n.watcher=J(t,(function(n,i){ge(t,r,i);var a=null==_?void 0:_.get(r);a&&(a.reloadLevel=e.ConfigFileProgramReloadLevel.Full),W.removeResolutionsFromProjectReferenceRedirects(r),se()}),e.PollingInterval.High,(null===(i=n.parsedCommandLine)||void 0===i?void 0:i.watchOptions)||F,e.WatchType.ConfigFileOfReferencedProject)),(null===(a=n.parsedCommandLine)||void 0===a?void 0:a.wildcardDirectories)?e.updateWatchingWildcardDirectories(n.watchedDirectories||(n.watchedDirectories=new e.Map),new e.Map(e.getEntries(null===(o=n.parsedCommandLine)||void 0===o?void 0:o.wildcardDirectories)),(function(i,a){var o;return z(i,(function(n){var a=$(n);O&&O.addOrDeleteFileOrDirectory(n,a),re(a);var o=null==_?void 0:_.get(r);(null==o?void 0:o.parsedCommandLine)&&(e.isIgnoredFileFromWildCardWatching({watchedDirPath:$(i),fileOrDirectory:n,fileOrDirectoryPath:a,configFileName:t,options:o.parsedCommandLine.options,program:o.parsedCommandLine.fileNames,currentDirectory:x,useCaseSensitiveFileNames:b,writeLog:U,toPath:$})||o.reloadLevel!==e.ConfigFileProgramReloadLevel.Full&&(o.reloadLevel=e.ConfigFileProgramReloadLevel.Partial,se()))}),a,(null===(o=n.parsedCommandLine)||void 0===o?void 0:o.watchOptions)||F,e.WatchType.WildcardDirectoryOfReferencedProject)})):n.watchedDirectories&&(e.clearMap(n.watchedDirectories,e.closeFileWatcherOf),n.watchedDirectories=void 0);be(r,null===(s=n.parsedCommandLine)||void 0===s?void 0:s.options,(null===(c=n.parsedCommandLine)||void 0===c?void 0:c.watchOptions)||F,e.WatchType.ExtendedConfigOfReferencedProject)}(t,n,i),s}function pe(e,t,r,n,i,a){return J(t,(function(t,n){return r(t,n,e)}),n,i,a)}function fe(t,r,n){ge(t,n,r),r===e.FileWatcherEventKind.Deleted&&v.has(n)&&W.invalidateResolutionOfFile(n),re(n),se()}function ge(e,t,r){O&&O.addOrDeleteFile(e,t,r)}function me(t){return(null==_?void 0:_.has(t))?e.noopFileWatcher:pe(t,t,ye,e.PollingInterval.Medium,F,e.WatchType.MissingFile)}function ye(t,r,n){ge(t,n,r),r===e.FileWatcherEventKind.Created&&s.has(n)&&(s.get(n).close(),s.delete(n),re(n),se())}function ve(){f?e.updateWatchingWildcardDirectories(c||(c=new e.Map),new e.Map(e.getEntries(f)),he):c&&e.clearMap(c,e.closeFileWatcherOf)}function he(t,r){return z(t,(function(r){e.Debug.assert(!!D);var n=$(r);O&&O.addOrDeleteFileOrDirectory(r,n),re(n),e.isIgnoredFileFromWildCardWatching({watchedDirPath:$(t),fileOrDirectory:r,fileOrDirectoryPath:n,configFileName:D,extraFileExtensions:E,options:A,program:Q()||N,currentDirectory:x,useCaseSensitiveFileNames:b,writeLog:U,toPath:$})||i!==e.ConfigFileProgramReloadLevel.Full&&(i=e.ConfigFileProgramReloadLevel.Partial,se())}),r,F,e.WatchType.WildcardDirectory)}function be(t,r,n,a){e.updateSharedExtendedConfigFileWatcher(t,r,d||(d=new e.Map),(function(t,r){return J(t,(function(n,a){var o;ge(t,r,a),m&&e.cleanExtendedConfigCache(m,r,$);var s=null===(o=d.get(r))||void 0===o?void 0:o.projects;(null==s?void 0:s.size)&&s.forEach((function(t){if($(D)===t)i=e.ConfigFileProgramReloadLevel.Full;else{var r=null==_?void 0:_.get(t);r&&(r.reloadLevel=e.ConfigFileProgramReloadLevel.Full),W.removeResolutionsFromProjectReferenceRedirects(t)}se()}))}),e.PollingInterval.High,n,a)}),$)}}}(_||(_={})),function(e){!function(e){e[e.Unbuildable=0]="Unbuildable",e[e.UpToDate=1]="UpToDate",e[e.UpToDateWithUpstreamTypes=2]="UpToDateWithUpstreamTypes",e[e.OutOfDateWithPrepend=3]="OutOfDateWithPrepend",e[e.OutputMissing=4]="OutputMissing",e[e.ErrorReadingFile=5]="ErrorReadingFile",e[e.OutOfDateWithSelf=6]="OutOfDateWithSelf",e[e.OutOfDateWithUpstream=7]="OutOfDateWithUpstream",e[e.OutOfDateBuildInfo=8]="OutOfDateBuildInfo",e[e.UpstreamOutOfDate=9]="UpstreamOutOfDate",e[e.UpstreamBlocked=10]="UpstreamBlocked",e[e.ComputingUpstream=11]="ComputingUpstream",e[e.TsVersionOutputOfDate=12]="TsVersionOutputOfDate",e[e.UpToDateWithInputFileText=13]="UpToDateWithInputFileText",e[e.ContainerOnly=14]="ContainerOnly",e[e.ForceBuild=15]="ForceBuild"}(e.UpToDateStatusType||(e.UpToDateStatusType={})),e.resolveConfigFileProjectName=function(t){return e.fileExtensionIs(t,".json")?t:e.combinePaths(t,"tsconfig.json")}}(_||(_={})),function(e){var t,r,n,i=new Date(-864e13),o=new Date(864e13);function s(t,r){return function(e,t,r){var n,i=e.get(t);return i||(n=r(),e.set(t,n)),i||n}(t,r,(function(){return new e.Map}))}function c(e){return e.now?e.now():new Date}function u(e){return!!e&&!!e.buildOrder}function l(e){return u(e)?e.buildOrder:e}function _(t,r){return function(n){var i=r?"[".concat(e.formatColorAndReset(e.getLocaleTimeString(t),e.ForegroundColorEscapeSequences.Grey),"] "):"".concat(e.getLocaleTimeString(t)," - ");i+="".concat(e.flattenDiagnosticMessageText(n.messageText,t.newLine)).concat(t.newLine+t.newLine),t.write(i)}}function d(t,r,n,i){var a=e.createProgramHost(t,r);return a.getModifiedTime=t.getModifiedTime?function(e){return t.getModifiedTime(e)}:e.returnUndefined,a.setModifiedTime=t.setModifiedTime?function(e,r){return t.setModifiedTime(e,r)}:e.noop,a.deleteFile=t.deleteFile?function(e){return t.deleteFile(e)}:e.noop,a.reportDiagnostic=n||e.createDiagnosticReporter(t),a.reportSolutionBuilderStatus=i||_(t),a.now=e.maybeBind(t,t.now),a}function p(t,r,n,i,a){var o,s,c=r,u=r,l=c.getCurrentDirectory(),_=e.createGetCanonicalFileName(c.useCaseSensitiveFileNames()),d=(o=i,s={},e.commonOptionsWithBuild.forEach((function(t){e.hasProperty(o,t.name)&&(s[t.name]=o[t.name])})),s),p=e.createCompilerHostFromProgramHost(c,(function(){return T.projectCompilerOptions}));e.setGetSourceFileAsHashVersioned(p),p.getParsedCommandLine=function(e){return v(T,e,g(T,e))},p.resolveModuleNames=e.maybeBind(c,c.resolveModuleNames),p.resolveTypeReferenceDirectives=e.maybeBind(c,c.resolveTypeReferenceDirectives),p.getModuleResolutionCache=e.maybeBind(c,c.getModuleResolutionCache);var f=p.resolveModuleNames?void 0:e.createModuleResolutionCache(l,_),m=p.resolveTypeReferenceDirectives?void 0:e.createTypeReferenceDirectiveResolutionCache(l,_,void 0,null==f?void 0:f.getPackageJsonInfoCache());if(!p.resolveModuleNames){var y=function(t,r,n,i){return e.resolveModuleName(t,n,T.projectCompilerOptions,p,f,i,r).resolvedModule};p.resolveModuleNames=function(t,r,n,i,a,o){return e.loadWithModeAwareCache(e.Debug.checkEachDefined(t),e.Debug.checkDefined(o),r,i,y)},p.getModuleResolutionCache=function(){return f}}if(!p.resolveTypeReferenceDirectives){var h=function(t,r,n,i){return e.resolveTypeReferenceDirective(t,r,T.projectCompilerOptions,p,n,T.typeReferenceDirectiveResolutionCache,i).resolvedTypeReferenceDirective};p.resolveTypeReferenceDirectives=function(t,r,n,i,a){return e.loadWithTypeDirectiveCache(e.Debug.checkEachDefined(t),r,n,a,h)}}p.getBuildInfo=function(e,t){return K(T,e,g(T,t),void 0)};var b=e.createWatchFactory(u,i),x=b.watchFile,D=b.watchDirectory,S=b.writeLog,T={host:c,hostWithWatch:u,currentDirectory:l,getCanonicalFileName:_,parseConfigFileHost:e.parseConfigHostFromCompilerHostLike(c),write:e.maybeBind(c,c.trace),options:i,baseCompilerOptions:d,rootNames:n,baseWatchOptions:a,resolvedConfigFilePaths:new e.Map,configFileCache:new e.Map,projectStatus:new e.Map,extendedConfigCache:new e.Map,buildInfoCache:new e.Map,outputTimeStamps:new e.Map,builderPrograms:new e.Map,diagnostics:new e.Map,projectPendingBuild:new e.Map,projectErrorsReported:new e.Map,compilerHost:p,moduleResolutionCache:f,typeReferenceDirectiveResolutionCache:m,buildOrder:void 0,readFileWithCache:function(e){return c.readFile(e)},projectCompilerOptions:d,cache:void 0,allProjectBuildPending:!0,needsSummary:!0,watchAllProjectsPending:t,watch:t,allWatchedWildcardDirectories:new e.Map,allWatchedInputFiles:new e.Map,allWatchedConfigFiles:new e.Map,allWatchedExtendedConfigFiles:new e.Map,allWatchedPackageJsonFiles:new e.Map,filesWatched:new e.Map,lastCachedPackageJsonLookups:new e.Map,timerToBuildInvalidatedProject:void 0,reportFileChangeDetected:!1,watchFile:x,watchDirectory:D,writeLog:S};return T}function f(t,r){return e.toPath(r,t.currentDirectory,t.getCanonicalFileName)}function g(e,t){var r=e.resolvedConfigFilePaths,n=r.get(t);if(void 0!==n)return n;var i=f(e,t);return r.set(t,i),i}function m(e){return!!e.options}function y(e,t){var r=e.configFileCache.get(t);return r&&m(r)?r:void 0}function v(t,r,n){var i,a=t.configFileCache,o=a.get(n);if(o)return m(o)?o:void 0;e.performance.mark("SolutionBuilder::beforeConfigFileParsing");var s,c=t.parseConfigFileHost,u=t.baseCompilerOptions,l=t.baseWatchOptions,_=t.extendedConfigCache,d=t.host;return d.getParsedCommandLine?(s=d.getParsedCommandLine(r))||(i=e.createCompilerDiagnostic(e.Diagnostics.File_0_not_found,r)):(c.onUnRecoverableConfigFileDiagnostic=function(e){return i=e},s=e.getParsedCommandLineOfConfigFile(r,u,c,_,l),c.onUnRecoverableConfigFileDiagnostic=e.noop),a.set(n,s||i),e.performance.mark("SolutionBuilder::afterConfigFileParsing"),e.performance.measure("SolutionBuilder::Config file parsing","SolutionBuilder::beforeConfigFileParsing","SolutionBuilder::afterConfigFileParsing"),s}function h(t,r){return e.resolveConfigFileProjectName(e.resolvePath(t.currentDirectory,r))}function b(t,r){for(var n,i,a=new e.Map,o=new e.Map,s=[],c=0,u=r;c<u.length;c++){l(u[c])}return i?{buildOrder:n||e.emptyArray,circularDiagnostics:i}:n||e.emptyArray;function l(r,c){var u=g(t,r);if(!o.has(u))if(a.has(u))c||(i||(i=[])).push(e.createCompilerDiagnostic(e.Diagnostics.Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0,s.join("\r\n")));else{a.set(u,!0),s.push(r);var _=v(t,r,u);if(_&&_.projectReferences)for(var d=0,p=_.projectReferences;d<p.length;d++){var f=p[d];l(h(t,f.path),c||f.circular)}s.pop(),o.set(u,!0),(n||(n=[])).push(r)}}}function x(t){return t.buildOrder||function(t){var r=b(t,t.rootNames.map((function(e){return h(t,e)})));t.resolvedConfigFilePaths.clear();var n=new e.Map(l(r).map((function(e){return[g(t,e),!0]}))),i={onDeleteValue:e.noop};e.mutateMapSkippingNewValues(t.configFileCache,n,i),e.mutateMapSkippingNewValues(t.projectStatus,n,i),e.mutateMapSkippingNewValues(t.builderPrograms,n,i),e.mutateMapSkippingNewValues(t.diagnostics,n,i),e.mutateMapSkippingNewValues(t.projectPendingBuild,n,i),e.mutateMapSkippingNewValues(t.projectErrorsReported,n,i),e.mutateMapSkippingNewValues(t.buildInfoCache,n,i),e.mutateMapSkippingNewValues(t.outputTimeStamps,n,i),t.watch&&(e.mutateMapSkippingNewValues(t.allWatchedConfigFiles,n,{onDeleteValue:e.closeFileWatcher}),t.allWatchedExtendedConfigFiles.forEach((function(e){e.projects.forEach((function(t){n.has(t)||e.projects.delete(t)})),e.close()})),e.mutateMapSkippingNewValues(t.allWatchedWildcardDirectories,n,{onDeleteValue:function(t){return t.forEach(e.closeFileWatcherOf)}}),e.mutateMapSkippingNewValues(t.allWatchedInputFiles,n,{onDeleteValue:function(t){return t.forEach(e.closeFileWatcher)}}),e.mutateMapSkippingNewValues(t.allWatchedPackageJsonFiles,n,{onDeleteValue:function(t){return t.forEach(e.closeFileWatcher)}}));return t.buildOrder=r}(t)}function D(t,r,n){var i=r&&h(t,r),a=x(t);if(u(a))return a;if(i){var o=g(t,i);if(-1===e.findIndex(a,(function(e){return g(t,e)===o})))return}var s=i?b(t,[i]):a;return e.Debug.assert(!u(s)),e.Debug.assert(!n||void 0!==i),e.Debug.assert(!n||s[s.length-1]===i),n?s.slice(0,s.length-1):s}function S(t){t.cache&&T(t);var r=t.compilerHost,n=t.host,i=t.readFileWithCache,o=r.getSourceFile,s=e.changeCompilerHostLikeToUseCache(n,(function(e){return f(t,e)}),(function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return o.call.apply(o,a([r],e,!1))})),c=s.originalReadFile,u=s.originalFileExists,l=s.originalDirectoryExists,_=s.originalCreateDirectory,d=s.originalWriteFile,p=s.getSourceFileWithCache,g=s.readFileWithCache;t.readFileWithCache=g,r.getSourceFile=p,t.cache={originalReadFile:c,originalFileExists:u,originalDirectoryExists:l,originalCreateDirectory:_,originalWriteFile:d,originalReadFileWithCache:i,originalGetSourceFile:o}}function T(e){if(e.cache){var t=e.cache,r=e.host,n=e.compilerHost,i=e.extendedConfigCache,a=e.moduleResolutionCache,o=e.typeReferenceDirectiveResolutionCache;r.readFile=t.originalReadFile,r.fileExists=t.originalFileExists,r.directoryExists=t.originalDirectoryExists,r.createDirectory=t.originalCreateDirectory,r.writeFile=t.originalWriteFile,n.getSourceFile=t.originalGetSourceFile,e.readFileWithCache=t.originalReadFileWithCache,i.clear(),null==a||a.clear(),null==o||o.clear(),e.cache=void 0}}function C(e,t){e.projectStatus.delete(t),e.diagnostics.delete(t)}function E(e,t,r){var n=e.projectPendingBuild,i=n.get(t);(void 0===i||i<r)&&n.set(t,r)}function k(t,r){t.allProjectBuildPending&&(t.allProjectBuildPending=!1,t.options.watch&&_e(t,e.Diagnostics.Starting_compilation_in_watch_mode),S(t),l(x(t)).forEach((function(r){return t.projectPendingBuild.set(g(t,r),e.ConfigFileProgramReloadLevel.None)})),r&&r.throwIfCancellationRequested())}function N(t,r){return t.projectPendingBuild.delete(r),t.diagnostics.has(r)?e.ExitStatus.DiagnosticsPresent_OutputsSkipped:e.ExitStatus.Success}function A(i,o,s,u,l,_,d){var p,m,y,b=i===r.Build?n.CreateProgram:n.EmitBundle;return i===r.Build?{kind:i,project:s,projectPath:u,buildOrder:d,getCompilerOptions:function(){return _.options},getCurrentDirectory:function(){return o.currentDirectory},getBuilderProgram:function(){return D(e.identity)},getProgram:function(){return D((function(e){return e.getProgramOrUndefined()}))},getSourceFile:function(e){return D((function(t){return t.getSourceFile(e)}))},getSourceFiles:function(){return S((function(e){return e.getSourceFiles()}))},getOptionsDiagnostics:function(e){return S((function(t){return t.getOptionsDiagnostics(e)}))},getGlobalDiagnostics:function(e){return S((function(t){return t.getGlobalDiagnostics(e)}))},getConfigFileParsingDiagnostics:function(){return S((function(e){return e.getConfigFileParsingDiagnostics()}))},getSyntacticDiagnostics:function(e,t){return S((function(r){return r.getSyntacticDiagnostics(e,t)}))},getAllDependencies:function(e){return S((function(t){return t.getAllDependencies(e)}))},getSemanticDiagnostics:function(e,t){return S((function(r){return r.getSemanticDiagnostics(e,t)}))},getSemanticDiagnosticsOfNextAffectedFile:function(e,t){return D((function(r){return r.getSemanticDiagnosticsOfNextAffectedFile&&r.getSemanticDiagnosticsOfNextAffectedFile(e,t)}))},emit:function(e,t,r,i,a){return e||i?D((function(n){var c,u;return n.emit(e,t,r,i,a||(null===(u=(c=o.host).getCustomTransformers)||void 0===u?void 0:u.call(c,s)))})):(R(n.SemanticDiagnostics,r),b===n.EmitBuildInfo?P(t,r):b===n.Emit?F(t,r,a):void 0)},done:x}:{kind:i,project:s,projectPath:u,buildOrder:d,getCompilerOptions:function(){return _.options},getCurrentDirectory:function(){return o.currentDirectory},emit:function(e,t){return b!==n.EmitBundle?y:I(e,t)},done:x};function x(t,a,s){return R(n.Done,t,a,s),i===r.Build?e.performance.mark("SolutionBuilder::Projects built"):e.performance.mark("SolutionBuilder::Bundles updated"),N(o,u)}function D(e){return R(n.CreateProgram),p&&e(p)}function S(t){return D(t)||e.emptyArray}function T(){var r,i;if(e.Debug.assert(void 0===p),o.options.dry)return le(o,e.Diagnostics.A_non_dry_build_would_build_project_0,s),m=t.Success,void(b=n.QueueReferencingProjects);if(o.options.verbose&&le(o,e.Diagnostics.Building_project_0,s),0===_.fileNames.length)return pe(o,u,e.getConfigFileParsingDiagnostics(_)),m=t.None,void(b=n.QueueReferencingProjects);var a=o.host,c=o.compilerHost;o.projectCompilerOptions=_.options,null===(r=o.moduleResolutionCache)||void 0===r||r.update(_.options),null===(i=o.typeReferenceDirectiveResolutionCache)||void 0===i||i.update(_.options),p=a.createProgram(_.fileNames,_.options,c,function(t,r,n){var i=t.options,a=t.builderPrograms,o=t.compilerHost;if(i.force)return;var s=a.get(r);return s||e.readBuilderProgram(n.options,o)}(o,u,_),e.getConfigFileParsingDiagnostics(_),_.projectReferences),o.watch&&(o.lastCachedPackageJsonLookups.set(u,o.moduleResolutionCache&&e.map(o.moduleResolutionCache.getPackageJsonInfoCache().entries(),(function(e){var t=e[0],r=e[1];return[o.host.realpath&&r?f(o,o.host.realpath(t)):t,r]}))),o.builderPrograms.set(u,p)),b++}function C(e,t,r){var n;e.length?(n=L(o,u,p,_,e,t,r),m=n.buildResult,b=n.step):b++}function E(r){e.Debug.assertIsDefined(p),C(a(a(a(a([],p.getConfigFileParsingDiagnostics(),!0),p.getOptionsDiagnostics(r),!0),p.getGlobalDiagnostics(r),!0),p.getSyntacticDiagnostics(void 0,r),!0),t.SyntaxErrors,"Syntactic")}function k(r){C(e.Debug.checkDefined(p).getSemanticDiagnostics(void 0,r),t.TypeErrors,"Semantic")}function F(r,i,a){var l,d,g,y;e.Debug.assertIsDefined(p),e.Debug.assert(b===n.Emit);var v,h=p.saveEmitState(),x=[],D=e.emitFilesAndReportErrors(p,(function(e){return(v||(v=[])).push(e)}),void 0,void 0,(function(e,t,r,n,i,a){return x.push({name:e,text:t,writeByteOrderMark:r,buildInfo:null==a?void 0:a.buildInfo})}),i,!1,a||(null===(g=(d=o.host).getCustomTransformers)||void 0===g?void 0:g.call(d,s))).emitResult;if(v)return p.restoreEmitState(h),l=L(o,u,p,_,v,t.DeclarationEmitErrors,"Declaration file"),m=l.buildResult,b=l.step,{emitSkipped:!0,diagnostics:D.diagnostics};var S,T,C=o.host,E=o.compilerHost,k=(null===(y=p.hasChangedEmitSignature)||void 0===y?void 0:y.call(p))?t.None:t.DeclarationOutputUnchanged,N=e.createDiagnosticCollection(),A=new e.Map,F=p.getCompilerOptions(),P=e.isIncrementalCompilation(F);return x.forEach((function(t){var n=t.name,i=t.text,a=t.writeByteOrderMark,s=t.buildInfo,l=f(o,n);A.set(f(o,n),n),s&&z(o,s,u,F,k),e.writeFile(r?{writeFile:r}:E,N,n,i,a),!P&&o.watch&&(S||(S=J(o,u))).set(l,T||(T=c(o.host)))})),w(N,A,x.length?x[0].name:e.getFirstProjectOutput(_,!C.useCaseSensitiveFileNames()),k),D}function P(r,i){e.Debug.assertIsDefined(p),e.Debug.assert(b===n.EmitBuildInfo);var s=p.emitBuildInfo((function(e,n,i,a,s,c){(null==c?void 0:c.buildInfo)&&z(o,c.buildInfo,u,p.getCompilerOptions(),t.DeclarationOutputUnchanged),r?r(e,n,i,a,s,c):o.compilerHost.writeFile(e,n,i,a,s,c)}),i);return s.diagnostics.length&&(de(o,s.diagnostics),o.diagnostics.set(u,a(a([],o.diagnostics.get(u),!0),s.diagnostics,!0)),m=t.EmitErrors&m),s.emittedFiles&&o.write&&s.emittedFiles.forEach((function(e){return O(o,_,e)})),M(o,p,_),b=n.QueueReferencingProjects,s}function w(r,i,a,s){var c,l=r.getDiagnostics();return l.length?(c=L(o,u,p,_,l,t.EmitErrors,"Emit"),m=c.buildResult,b=c.step,l):(o.write&&i.forEach((function(e){return O(o,_,e)})),H(o,_,u,e.Diagnostics.Updating_unchanged_output_timestamps_of_project_0,i),o.diagnostics.delete(u),o.projectStatus.set(u,{type:e.UpToDateStatusType.UpToDate,oldestOutputFileName:a}),M(o,p,_),b=n.QueueReferencingProjects,m=s,l)}function I(a,c){var p,x;if(e.Debug.assert(i===r.UpdateBundle),o.options.dry)return le(o,e.Diagnostics.A_non_dry_build_would_update_output_of_project_0,s),m=t.Success,void(b=n.QueueReferencingProjects);o.options.verbose&&le(o,e.Diagnostics.Updating_output_of_project_0,s);var D=o.compilerHost;o.projectCompilerOptions=_.options;var S=e.emitUsingBuildInfo(_,D,(function(e){var t=h(o,e.path);return v(o,t,g(o,t))}),c||(null===(x=(p=o.host).getCustomTransformers)||void 0===x?void 0:x.call(p,s)));if(e.isString(S))return le(o,e.Diagnostics.Cannot_update_output_of_project_0_because_there_was_error_reading_file_1,s,ue(o,S)),b=n.BuildInvalidatedProjectOfBundle,y=A(r.Build,o,s,u,l,_,d);e.Debug.assert(!!S.length);var T=e.createDiagnosticCollection(),C=new e.Map,E=t.DeclarationOutputUnchanged,k=o.buildInfoCache.get(u).buildInfo||void 0;return S.forEach((function(r){var n,i,s=r.name,c=r.text,l=r.writeByteOrderMark,d=r.buildInfo;C.set(f(o,s),s),d&&((null===(n=d.program)||void 0===n?void 0:n.outSignature)!==(null===(i=null==k?void 0:k.program)||void 0===i?void 0:i.outSignature)&&(E&=~t.DeclarationOutputUnchanged),z(o,d,u,_.options,E)),e.writeFile(a?{writeFile:a}:D,T,s,c,l)})),{emitSkipped:!1,diagnostics:w(T,C,S[0].name,E)}}function R(t,r,i,a){for(;b<=t&&b<n.Done;){var c=b;switch(b){case n.CreateProgram:T();break;case n.SyntaxDiagnostics:E(r);break;case n.SemanticDiagnostics:k(r);break;case n.Emit:F(i,r,a);break;case n.EmitBuildInfo:P(i,r);break;case n.EmitBundle:I(i,a);break;case n.BuildInvalidatedProjectOfBundle:e.Debug.checkDefined(y).done(r,i,a),b=n.Done;break;case n.QueueReferencingProjects:X(o,s,u,l,_,d,e.Debug.checkDefined(m)),b++;break;case n.Done:default:e.assertType(b)}e.Debug.assert(b>c)}}}function F(t,r,n){var i=t.options;return!(r.type===e.UpToDateStatusType.OutOfDateWithPrepend&&!i.force)||(0===n.fileNames.length||!!e.getConfigFileParsingDiagnostics(n).length||!e.isIncrementalCompilation(n.options))}function P(t,n,i){if(t.projectPendingBuild.size&&!u(n))for(var a=t.options,o=t.projectPendingBuild,s=0;s<n.length;s++){var c=n[s],l=g(t,c),_=t.projectPendingBuild.get(l);if(void 0!==_){i&&(i=!1,me(t,n));var d=v(t,c,l);if(d){_===e.ConfigFileProgramReloadLevel.Full?(ne(t,c,l,d),ie(t,l,d),ae(t,c,l,d),oe(t,c,l,d),se(t,c,l,d)):_===e.ConfigFileProgramReloadLevel.Partial&&(d.fileNames=e.getFileNamesFromConfigSpecs(d.options.configFile.configFileSpecs,e.getDirectoryPath(c),d.options,t.parseConfigFileHost),e.updateErrorForNoInputFiles(d.fileNames,c,d.options.configFile.configFileSpecs,d.errors,e.canJsonReportNoInputFiles(d.raw)),oe(t,c,l,d),se(t,c,l,d));var p=W(t,d,l);if(!a.force){if(p.type===e.UpToDateStatusType.UpToDate){ye(t,c,p),pe(t,l,e.getConfigFileParsingDiagnostics(d)),o.delete(l),a.dry&&le(t,e.Diagnostics.Project_0_is_up_to_date,c);continue}if(p.type===e.UpToDateStatusType.UpToDateWithUpstreamTypes||p.type===e.UpToDateStatusType.UpToDateWithInputFileText)return pe(t,l,e.getConfigFileParsingDiagnostics(d)),{kind:r.UpdateOutputFileStamps,status:p,project:c,projectPath:l,projectIndex:s,config:d}}if(p.type!==e.UpToDateStatusType.UpstreamBlocked){if(p.type!==e.UpToDateStatusType.ContainerOnly)return{kind:F(t,p,d)?r.Build:r.UpdateBundle,status:p,project:c,projectPath:l,projectIndex:s,config:d};ye(t,c,p),pe(t,l,e.getConfigFileParsingDiagnostics(d)),o.delete(l)}else ye(t,c,p),pe(t,l,e.getConfigFileParsingDiagnostics(d)),o.delete(l),a.verbose&&le(t,p.upstreamProjectBlocked?e.Diagnostics.Skipping_build_of_project_0_because_its_dependency_1_was_not_built:e.Diagnostics.Skipping_build_of_project_0_because_its_dependency_1_has_errors,c,p.upstreamProjectName)}else fe(t,l),o.delete(l)}}}function w(t,n,i){return ye(t,n.project,n.status),n.kind!==r.UpdateOutputFileStamps?A(n.kind,t,n.project,n.projectPath,n.projectIndex,n.config,i):function(t,n,i,a,o){var s=!0;return{kind:r.UpdateOutputFileStamps,project:n,projectPath:i,buildOrder:o,getCompilerOptions:function(){return a.options},getCurrentDirectory:function(){return t.currentDirectory},updateOutputFileStatmps:function(){Q(t,a,i),s=!1},done:function(){return s&&Q(t,a,i),e.performance.mark("SolutionBuilder::Timestamps only updates"),N(t,i)}}}(t,n.project,n.projectPath,n.config,i)}function I(e,t,r){var n=P(e,t,r);return n?w(e,n,t):n}function O(e,t,r){var n=e.write;n&&t.options.listEmittedFiles&&n("TSFILE: ".concat(r))}function M(t,r,n){r?(t.write&&e.listFiles(r,t.write),t.host.afterProgramEmitAndDiagnostics&&t.host.afterProgramEmitAndDiagnostics(r),r.releaseProgram()):t.host.afterEmitBundle&&t.host.afterEmitBundle(n),t.projectCompilerOptions=t.baseCompilerOptions}function L(t,r,i,a,o,s,c){var u=i&&!e.outFile(i.getCompilerOptions());return pe(t,r,o),t.projectStatus.set(r,{type:e.UpToDateStatusType.Unbuildable,reason:"".concat(c," errors")}),u?{buildResult:s,step:n.EmitBuildInfo}:(M(t,i,a),{buildResult:s,step:n.QueueReferencingProjects})}function R(e){return!!e.watcher}function B(t,r){var n=f(t,r),i=t.filesWatched.get(n);if(t.watch&&i){if(!R(i))return i;if(i.modifiedTime)return i.modifiedTime}var a=e.getModifiedTime(t.host,r);return t.watch&&(i?i.modifiedTime=a:t.filesWatched.set(n,a)),a}function j(t,r,n,i,a,o,s){var c=f(t,r),u=t.filesWatched.get(c);if(u&&R(u))u.callbacks.push(n);else{var l=t.watchFile(r,(function(r,n,i){var a=e.Debug.checkDefined(t.filesWatched.get(c));e.Debug.assert(R(a)),a.modifiedTime=i,a.callbacks.forEach((function(e){return e(r,n,i)}))}),i,a,o,s);t.filesWatched.set(c,{callbacks:[n],watcher:l,modifiedTime:u})}return{close:function(){var r=e.Debug.checkDefined(t.filesWatched.get(c));e.Debug.assert(R(r)),1===r.callbacks.length?(t.filesWatched.delete(c),e.closeFileWatcherOf(r)):e.unorderedRemoveItem(r.callbacks,n)}}}function J(t,r){if(t.watch){var n=t.outputTimeStamps.get(r);return n||t.outputTimeStamps.set(r,n=new e.Map),n}}function z(r,n,i,a,o){var s=e.getTsBuildInfoEmitOutputFilePath(a),u=U(r,s,i),l=c(r.host);u?(u.buildInfo=n,u.modifiedTime=l,o&t.DeclarationOutputUnchanged||(u.latestChangedDtsTime=l)):r.buildInfoCache.set(i,{path:f(r,s),buildInfo:n,modifiedTime:l,latestChangedDtsTime:o&t.DeclarationOutputUnchanged?void 0:l})}function U(e,t,r){var n=f(e,t),i=e.buildInfoCache.get(r);return(null==i?void 0:i.path)===n?i:void 0}function K(t,r,n,i){var a=f(t,r),o=t.buildInfoCache.get(n);if(void 0!==o&&o.path===a)return o.buildInfo||void 0;var s=t.readFileWithCache(r),c=s?e.getBuildInfo(r,s):void 0;return t.buildInfoCache.set(n,{path:a,buildInfo:c||!1,modifiedTime:i||e.missingFileModifiedTime}),c}function V(t,r,n,i){if(n<B(t,r))return{type:e.UpToDateStatusType.OutOfDateWithSelf,outOfDateOutputFileName:i,newerInputFileName:r}}function q(e,t,r){return e.buildInfoCache.get(r).path===t.path}function W(t,r,n){if(void 0===r)return{type:e.UpToDateStatusType.Unbuildable,reason:"File deleted mid-build"};var a=t.projectStatus.get(n);if(void 0!==a)return a;e.performance.mark("SolutionBuilder::beforeUpToDateCheck");var s=function(t,r,n){var a,s,c;if(!r.fileNames.length&&!e.canJsonReportNoInputFiles(r.raw))return{type:e.UpToDateStatusType.ContainerOnly};var u=!!t.options.force;if(r.projectReferences){t.projectStatus.set(n,{type:e.UpToDateStatusType.ComputingUpstream});for(var l=0,_=r.projectReferences;l<_.length;l++){var d=_[l],p=e.resolveProjectReferencePath(d),m=g(t,p),y=v(t,p,m);if((oe=W(t,y,m)).type!==e.UpToDateStatusType.ComputingUpstream&&oe.type!==e.UpToDateStatusType.ContainerOnly){if(oe.type===e.UpToDateStatusType.Unbuildable||oe.type===e.UpToDateStatusType.UpstreamBlocked)return{type:e.UpToDateStatusType.UpstreamBlocked,upstreamProjectName:d.path,upstreamProjectBlocked:oe.type===e.UpToDateStatusType.UpstreamBlocked};if(oe.type!==e.UpToDateStatusType.UpToDate)return{type:e.UpToDateStatusType.UpstreamOutOfDate,upstreamProjectName:d.path};u||(c||(c=[])).push({ref:d,refStatus:oe,resolvedRefPath:m,resolvedConfig:y})}}}if(u)return{type:e.UpToDateStatusType.ForceBuild};var h,b,x,D,S=t.host,T=e.getTsBuildInfoEmitOutputFilePath(r.options),C=o;if(T){var E=U(t,T,n);if((b=(null==E?void 0:E.modifiedTime)||e.getModifiedTime(S,T))===e.missingFileModifiedTime)return E||t.buildInfoCache.set(n,{path:f(t,T),buildInfo:!1,modifiedTime:b}),{type:e.UpToDateStatusType.OutputMissing,missingOutputFileName:T};var k=K(t,T,n,b);if(!k)return{type:e.UpToDateStatusType.ErrorReadingFile,fileName:T};if((k.bundle||k.program)&&k.version!==e.version)return{type:e.UpToDateStatusType.TsVersionOutputOfDate,version:k.version};if(k.program){if((null===(a=k.program.changeFileSet)||void 0===a?void 0:a.length)||(r.options.noEmit?e.some(k.program.semanticDiagnosticsPerFile,e.isArray):null===(s=k.program.affectedFilesPendingEmit)||void 0===s?void 0:s.length))return{type:e.UpToDateStatusType.OutOfDateBuildInfo,buildInfoFile:T};x=k.program}C=b,h=T}for(var N=void 0,A=i,F=!1,P=0,w=r.fileNames;P<w.length;P++){var I=w[P],O=B(t,I);if(O===e.missingFileModifiedTime)return{type:e.UpToDateStatusType.Unbuildable,reason:"".concat(I," does not exist")};if(b&&b<O){var M=void 0,L=void 0;if(x){D||(D=e.getBuildInfoFileVersionMap(x,T,S));var R=(M=D.get(f(t,I)))?t.readFileWithCache(I):void 0;L=void 0!==R?(S.createHash||e.generateDjb2Hash)(R):void 0,M&&M===L&&(F=!0)}if(!M||M!==L)return{type:e.UpToDateStatusType.OutOfDateWithSelf,outOfDateOutputFileName:T,newerInputFileName:I}}O>A&&(N=I,A=O)}if(!T)for(var j=e.getAllProjectOutputs(r,!S.useCaseSensitiveFileNames()),z=J(t,n),H=0,Q=j;H<Q.length;H++){var X=Q[H],Y=f(t,X),Z=null==z?void 0:z.get(Y);if(Z||(Z=e.getModifiedTime(t.host,X),null==z||z.set(Y,Z)),Z===e.missingFileModifiedTime)return{type:e.UpToDateStatusType.OutputMissing,missingOutputFileName:X};if(Z<A)return{type:e.UpToDateStatusType.OutOfDateWithSelf,outOfDateOutputFileName:X,newerInputFileName:N};Z<C&&(C=Z,h=X)}var $,ee=t.buildInfoCache.get(n),te=!1,re=!1;if(c)for(var ne=0,ie=c;ne<ie.length;ne++){var ae=ie[ne],oe=(d=ae.ref,ae.refStatus);if(y=ae.resolvedConfig,m=ae.resolvedRefPath,re=re||!!d.prepend,!(oe.newestInputFileTime&&oe.newestInputFileTime<=C)){if(ee&&q(t,ee,m))return{type:e.UpToDateStatusType.OutOfDateWithUpstream,outOfDateOutputFileName:T,newerProjectName:d.path};var se=G(t,y.options,m);if(!(se&&se<=C))return e.Debug.assert(void 0!==h,"Should have an oldest output filename here"),{type:e.UpToDateStatusType.OutOfDateWithUpstream,outOfDateOutputFileName:h,newerProjectName:d.path};te=!0,$=d.path}}var ce=V(t,r.options.configFilePath,C,h);if(ce)return ce;var ue=e.forEach(r.options.configFile.extendedSourceFiles||e.emptyArray,(function(e){return V(t,e,C,h)}));if(ue)return ue;var le=e.forEach(t.lastCachedPackageJsonLookups.get(n)||e.emptyArray,(function(e){var r=e[0];return V(t,r,C,h)}));return le||(re&&te?{type:e.UpToDateStatusType.OutOfDateWithPrepend,outOfDateOutputFileName:h,newerProjectName:$}:{type:te?e.UpToDateStatusType.UpToDateWithUpstreamTypes:F?e.UpToDateStatusType.UpToDateWithInputFileText:e.UpToDateStatusType.UpToDate,newestInputFileTime:A,newestInputFileName:N,oldestOutputFileName:h})}(t,r,n);return e.performance.mark("SolutionBuilder::afterUpToDateCheck"),e.performance.measure("SolutionBuilder::Up-to-date check","SolutionBuilder::beforeUpToDateCheck","SolutionBuilder::afterUpToDateCheck"),t.projectStatus.set(n,s),s}function H(t,r,n,i,a){if(!r.options.noEmit){var o,s=e.getTsBuildInfoEmitOutputFilePath(r.options);if(s)return(null==a?void 0:a.has(f(t,s)))||(t.options.verbose&&le(t,i,r.options.configFilePath),t.host.setModifiedTime(s,o=c(t.host)),U(t,s,n).modifiedTime=o),void t.outputTimeStamps.delete(n);var u=t.host,l=e.getAllProjectOutputs(r,!u.useCaseSensitiveFileNames()),_=J(t,n),d=_?new e.Set:void 0;if(!a||l.length!==a.size)for(var p=!!t.options.verbose,g=0,m=l;g<m.length;g++){var y=m[g],v=f(t,y);(null==a?void 0:a.has(v))||(p&&(p=!1,le(t,i,r.options.configFilePath)),u.setModifiedTime(y,o||(o=c(t.host))),_&&(_.set(v,o),d.add(v)))}null==_||_.forEach((function(e,t){(null==a?void 0:a.has(t))||d.has(t)||_.delete(t)}))}}function G(t,r,n){if(r.composite){var i=e.Debug.checkDefined(t.buildInfoCache.get(n));if(void 0!==i.latestChangedDtsTime)return i.latestChangedDtsTime||void 0;var a=i.buildInfo&&i.buildInfo.program&&i.buildInfo.program.latestChangedDtsFile?t.host.getModifiedTime(e.getNormalizedAbsolutePath(i.buildInfo.program.latestChangedDtsFile,e.getDirectoryPath(i.path))):void 0;return i.latestChangedDtsTime=a||!1,a}}function Q(t,r,n){if(t.options.dry)return le(t,e.Diagnostics.A_non_dry_build_would_update_timestamps_for_output_of_project_0,r.options.configFilePath);H(t,r,n,e.Diagnostics.Updating_output_timestamps_of_project_0),t.projectStatus.set(n,{type:e.UpToDateStatusType.UpToDate,oldestOutputFileName:e.getFirstProjectOutput(r,!t.host.useCaseSensitiveFileNames())})}function X(r,n,i,a,o,s,c){if(!(c&t.AnyErrors)&&o.options.composite)for(var u=a+1;u<s.length;u++){var l=s[u],_=g(r,l);if(!r.projectPendingBuild.has(_)){var d=v(r,l,_);if(d&&d.projectReferences)for(var p=0,f=d.projectReferences;p<f.length;p++){var m=f[p];if(g(r,h(r,m.path))===i){var y=r.projectStatus.get(_);if(y)switch(y.type){case e.UpToDateStatusType.UpToDate:if(c&t.DeclarationOutputUnchanged){m.prepend?r.projectStatus.set(_,{type:e.UpToDateStatusType.OutOfDateWithPrepend,outOfDateOutputFileName:y.oldestOutputFileName,newerProjectName:n}):y.type=e.UpToDateStatusType.UpToDateWithUpstreamTypes;break}case e.UpToDateStatusType.UpToDateWithInputFileText:case e.UpToDateStatusType.UpToDateWithUpstreamTypes:case e.UpToDateStatusType.OutOfDateWithPrepend:c&t.DeclarationOutputUnchanged||r.projectStatus.set(_,{type:e.UpToDateStatusType.OutOfDateWithUpstream,outOfDateOutputFileName:y.type===e.UpToDateStatusType.OutOfDateWithPrepend?y.outOfDateOutputFileName:y.oldestOutputFileName,newerProjectName:n});break;case e.UpToDateStatusType.UpstreamBlocked:g(r,h(r,y.upstreamProjectName))===i&&C(r,_)}E(r,_,e.ConfigFileProgramReloadLevel.None);break}}}}}function Y(t,r,n,i,a,o){e.performance.mark("SolutionBuilder::beforeBuild");var s=function(t,r,n,i,a,o){var s=D(t,r,o);if(!s)return e.ExitStatus.InvalidProject_OutputsSkipped;k(t,n);var c=!0,_=0;for(;;){var d=I(t,s,c);if(!d)break;c=!1,d.done(n,i,null==a?void 0:a(d.project)),t.diagnostics.has(d.projectPath)||_++}return T(t),ge(t,s),function(t,r){if(!t.watchAllProjectsPending)return;e.performance.mark("SolutionBuilder::beforeWatcherCreation"),t.watchAllProjectsPending=!1;for(var n=0,i=l(r);n<i.length;n++){var a=i[n],o=g(t,a),s=v(t,a,o);ne(t,a,o,s),ie(t,o,s),s&&(ae(t,a,o,s),oe(t,a,o,s),se(t,a,o,s))}e.performance.mark("SolutionBuilder::afterWatcherCreation"),e.performance.measure("SolutionBuilder::Watcher creation","SolutionBuilder::beforeWatcherCreation","SolutionBuilder::afterWatcherCreation")}(t,s),u(s)?e.ExitStatus.ProjectReferenceCycle_OutputsSkipped:s.some((function(e){return t.diagnostics.has(g(t,e))}))?_?e.ExitStatus.DiagnosticsPresent_OutputsGenerated:e.ExitStatus.DiagnosticsPresent_OutputsSkipped:e.ExitStatus.Success}(t,r,n,i,a,o);return e.performance.mark("SolutionBuilder::afterBuild"),e.performance.measure("SolutionBuilder::Build","SolutionBuilder::beforeBuild","SolutionBuilder::afterBuild"),s}function Z(t,r,n){e.performance.mark("SolutionBuilder::beforeClean");var i=function(t,r,n){var i=D(t,r,n);if(!i)return e.ExitStatus.InvalidProject_OutputsSkipped;if(u(i))return de(t,i.circularDiagnostics),e.ExitStatus.ProjectReferenceCycle_OutputsSkipped;for(var a=t.options,o=t.host,s=a.dry?[]:void 0,c=0,l=i;c<l.length;c++){var _=l[c],d=g(t,_),p=v(t,_,d);if(void 0!==p){var m=e.getAllProjectOutputs(p,!o.useCaseSensitiveFileNames());if(m.length)for(var y=new e.Set(p.fileNames.map((function(e){return f(t,e)}))),h=0,b=m;h<b.length;h++){var x=b[h];y.has(f(t,x))||o.fileExists(x)&&(s?s.push(x):(o.deleteFile(x),$(t,d,e.ConfigFileProgramReloadLevel.None)))}}else fe(t,d)}s&&le(t,e.Diagnostics.A_non_dry_build_would_delete_the_following_files_Colon_0,s.map((function(e){return"\r\n * ".concat(e)})).join(""));return e.ExitStatus.Success}(t,r,n);return e.performance.mark("SolutionBuilder::afterClean"),e.performance.measure("SolutionBuilder::Clean","SolutionBuilder::beforeClean","SolutionBuilder::afterClean"),i}function $(t,r,n){t.host.getParsedCommandLine&&n===e.ConfigFileProgramReloadLevel.Partial&&(n=e.ConfigFileProgramReloadLevel.Full),n===e.ConfigFileProgramReloadLevel.Full&&(t.configFileCache.delete(r),t.buildOrder=void 0),t.needsSummary=!0,C(t,r),E(t,r,n),S(t)}function ee(e,t,r){e.reportFileChangeDetected=!0,$(e,t,r),te(e,250,!0)}function te(e,t,r){var n=e.hostWithWatch;n.setTimeout&&n.clearTimeout&&(e.timerToBuildInvalidatedProject&&n.clearTimeout(e.timerToBuildInvalidatedProject),e.timerToBuildInvalidatedProject=n.setTimeout(re,t,e,r))}function re(t,n){e.performance.mark("SolutionBuilder::beforeBuild");var i=function(t,n){t.timerToBuildInvalidatedProject=void 0,t.reportFileChangeDetected&&(t.reportFileChangeDetected=!1,t.projectErrorsReported.clear(),_e(t,e.Diagnostics.File_change_detected_Starting_incremental_compilation));var i=0,a=x(t),o=I(t,a,!1);if(o)for(o.done(),i++;t.projectPendingBuild.size;){if(t.timerToBuildInvalidatedProject)return;var s=P(t,a,!1);if(!s)break;if(s.kind!==r.UpdateOutputFileStamps&&(n||5===i))return void te(t,100,!1);w(t,s,a).done(),s.kind!==r.UpdateOutputFileStamps&&i++}return T(t),a}(t,n);e.performance.mark("SolutionBuilder::afterBuild"),e.performance.measure("SolutionBuilder::Build","SolutionBuilder::beforeBuild","SolutionBuilder::afterBuild"),i&&ge(t,i)}function ne(t,r,n,i){t.watch&&!t.allWatchedConfigFiles.has(n)&&t.allWatchedConfigFiles.set(n,j(t,r,(function(){return ee(t,n,e.ConfigFileProgramReloadLevel.Full)}),e.PollingInterval.High,null==i?void 0:i.watchOptions,e.WatchType.ConfigFile,r))}function ie(t,r,n){e.updateSharedExtendedConfigFileWatcher(r,null==n?void 0:n.options,t.allWatchedExtendedConfigFiles,(function(r,i){return j(t,r,(function(){var r;return null===(r=t.allWatchedExtendedConfigFiles.get(i))||void 0===r?void 0:r.projects.forEach((function(r){return ee(t,r,e.ConfigFileProgramReloadLevel.Full)}))}),e.PollingInterval.High,null==n?void 0:n.watchOptions,e.WatchType.ExtendedConfigFile)}),(function(e){return f(t,e)}))}function ae(t,r,n,i){t.watch&&e.updateWatchingWildcardDirectories(s(t.allWatchedWildcardDirectories,n),new e.Map(e.getEntries(i.wildcardDirectories)),(function(a,o){return t.watchDirectory(a,(function(o){var s;e.isIgnoredFileFromWildCardWatching({watchedDirPath:f(t,a),fileOrDirectory:o,fileOrDirectoryPath:f(t,o),configFileName:r,currentDirectory:t.currentDirectory,options:i.options,program:t.builderPrograms.get(n)||(null===(s=y(t,n))||void 0===s?void 0:s.fileNames),useCaseSensitiveFileNames:t.parseConfigFileHost.useCaseSensitiveFileNames,writeLog:function(e){return t.writeLog(e)},toPath:function(e){return f(t,e)}})||ee(t,n,e.ConfigFileProgramReloadLevel.Partial)}),o,null==i?void 0:i.watchOptions,e.WatchType.WildcardDirectory,r)}))}function oe(t,r,n,i){t.watch&&e.mutateMap(s(t.allWatchedInputFiles,n),e.arrayToMap(i.fileNames,(function(e){return f(t,e)})),{createNewValue:function(a,o){return j(t,o,(function(){return ee(t,n,e.ConfigFileProgramReloadLevel.None)}),e.PollingInterval.Low,null==i?void 0:i.watchOptions,e.WatchType.SourceFile,r)},onDeleteValue:e.closeFileWatcher})}function se(t,r,n,i){t.watch&&t.lastCachedPackageJsonLookups&&e.mutateMap(s(t.allWatchedPackageJsonFiles,n),new e.Map(t.lastCachedPackageJsonLookups.get(n)),{createNewValue:function(a,o){return j(t,a,(function(){return ee(t,n,e.ConfigFileProgramReloadLevel.None)}),e.PollingInterval.High,null==i?void 0:i.watchOptions,e.WatchType.PackageJson,r)},onDeleteValue:e.closeFileWatcher})}function ce(t,r,n,i,a){var o=p(t,r,n,i,a);return{build:function(e,t,r,n){return Y(o,e,t,r,n)},clean:function(e){return Z(o,e)},buildReferences:function(e,t,r,n){return Y(o,e,t,r,n,!0)},cleanReferences:function(e){return Z(o,e,!0)},getNextInvalidatedProject:function(e){return k(o,e),I(o,x(o),!1)},getBuildOrder:function(){return x(o)},getUpToDateStatusOfProject:function(e){var t=h(o,e),r=g(o,t);return W(o,v(o,t,r),r)},invalidateProject:function(t,r){return $(o,t,r||e.ConfigFileProgramReloadLevel.None)},close:function(){return function(t){e.clearMap(t.allWatchedConfigFiles,e.closeFileWatcher),e.clearMap(t.allWatchedExtendedConfigFiles,e.closeFileWatcherOf),e.clearMap(t.allWatchedWildcardDirectories,(function(t){return e.clearMap(t,e.closeFileWatcherOf)})),e.clearMap(t.allWatchedInputFiles,(function(t){return e.clearMap(t,e.closeFileWatcher)})),e.clearMap(t.allWatchedPackageJsonFiles,(function(t){return e.clearMap(t,e.closeFileWatcher)}))}(o)}}}function ue(t,r){return e.convertToRelativePath(r,t.currentDirectory,(function(e){return t.getCanonicalFileName(e)}))}function le(t,r){for(var n=[],i=2;i<arguments.length;i++)n[i-2]=arguments[i];t.host.reportSolutionBuilderStatus(e.createCompilerDiagnostic.apply(void 0,a([r],n,!1)))}function _e(t,r){for(var n,i,o=[],s=2;s<arguments.length;s++)o[s-2]=arguments[s];null===(i=(n=t.hostWithWatch).onWatchStatusChange)||void 0===i||i.call(n,e.createCompilerDiagnostic.apply(void 0,a([r],o,!1)),t.host.getNewLine(),t.baseCompilerOptions)}function de(e,t){var r=e.host;t.forEach((function(e){return r.reportDiagnostic(e)}))}function pe(e,t,r){de(e,r),e.projectErrorsReported.set(t,!0),r.length&&e.diagnostics.set(t,r)}function fe(e,t){pe(e,t,[e.configFileCache.get(t)])}function ge(t,r){if(t.needsSummary){t.needsSummary=!1;var n=t.watch||!!t.host.reportErrorSummary,i=t.diagnostics,o=0,s=[];u(r)?(me(t,r.buildOrder),de(t,r.circularDiagnostics),n&&(o+=e.getErrorCountForSummary(r.circularDiagnostics)),n&&(s=a(a([],s,!0),e.getFilesInErrorForSummary(r.circularDiagnostics),!0))):(r.forEach((function(r){var n=g(t,r);t.projectErrorsReported.has(n)||de(t,i.get(n)||e.emptyArray)})),n&&i.forEach((function(t){return o+=e.getErrorCountForSummary(t)})),n&&i.forEach((function(t){return a(a([],s,!0),e.getFilesInErrorForSummary(t),!0)}))),t.watch?_e(t,e.getWatchErrorSummaryDiagnosticMessage(o),o):t.host.reportErrorSummary&&t.host.reportErrorSummary(o,s)}}function me(t,r){t.options.verbose&&le(t,e.Diagnostics.Projects_in_this_build_Colon_0,r.map((function(e){return"\r\n    * "+ue(t,e)})).join(""))}function ye(t,r,n){t.options.verbose&&function(t,r,n){switch(n.type){case e.UpToDateStatusType.OutOfDateWithSelf:return le(t,e.Diagnostics.Project_0_is_out_of_date_because_output_1_is_older_than_input_2,ue(t,r),ue(t,n.outOfDateOutputFileName),ue(t,n.newerInputFileName));case e.UpToDateStatusType.OutOfDateWithUpstream:return le(t,e.Diagnostics.Project_0_is_out_of_date_because_output_1_is_older_than_input_2,ue(t,r),ue(t,n.outOfDateOutputFileName),ue(t,n.newerProjectName));case e.UpToDateStatusType.OutputMissing:return le(t,e.Diagnostics.Project_0_is_out_of_date_because_output_file_1_does_not_exist,ue(t,r),ue(t,n.missingOutputFileName));case e.UpToDateStatusType.ErrorReadingFile:return le(t,e.Diagnostics.Project_0_is_out_of_date_because_there_was_error_reading_file_1,ue(t,r),ue(t,n.fileName));case e.UpToDateStatusType.OutOfDateBuildInfo:return le(t,e.Diagnostics.Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitted,ue(t,r),ue(t,n.buildInfoFile));case e.UpToDateStatusType.UpToDate:if(void 0!==n.newestInputFileTime)return le(t,e.Diagnostics.Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2,ue(t,r),ue(t,n.newestInputFileName||""),ue(t,n.oldestOutputFileName||""));break;case e.UpToDateStatusType.OutOfDateWithPrepend:return le(t,e.Diagnostics.Project_0_is_out_of_date_because_output_of_its_dependency_1_has_changed,ue(t,r),ue(t,n.newerProjectName));case e.UpToDateStatusType.UpToDateWithUpstreamTypes:return le(t,e.Diagnostics.Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies,ue(t,r));case e.UpToDateStatusType.UpToDateWithInputFileText:return le(t,e.Diagnostics.Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_files,ue(t,r));case e.UpToDateStatusType.UpstreamOutOfDate:return le(t,e.Diagnostics.Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date,ue(t,r),ue(t,n.upstreamProjectName));case e.UpToDateStatusType.UpstreamBlocked:return le(t,n.upstreamProjectBlocked?e.Diagnostics.Project_0_can_t_be_built_because_its_dependency_1_was_not_built:e.Diagnostics.Project_0_can_t_be_built_because_its_dependency_1_has_errors,ue(t,r),ue(t,n.upstreamProjectName));case e.UpToDateStatusType.Unbuildable:return le(t,e.Diagnostics.Failed_to_parse_file_0_Colon_1,ue(t,r),n.reason);case e.UpToDateStatusType.TsVersionOutputOfDate:return le(t,e.Diagnostics.Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_current_version_2,ue(t,r),n.version,e.version);case e.UpToDateStatusType.ForceBuild:return le(t,e.Diagnostics.Project_0_is_being_forcibly_rebuilt,ue(t,r));case e.UpToDateStatusType.ContainerOnly:case e.UpToDateStatusType.ComputingUpstream:break;default:e.assertType(n)}}(t,r,n)}!function(e){e[e.None=0]="None",e[e.Success=1]="Success",e[e.DeclarationOutputUnchanged=2]="DeclarationOutputUnchanged",e[e.ConfigFileErrors=4]="ConfigFileErrors",e[e.SyntaxErrors=8]="SyntaxErrors",e[e.TypeErrors=16]="TypeErrors",e[e.DeclarationEmitErrors=32]="DeclarationEmitErrors",e[e.EmitErrors=64]="EmitErrors",e[e.AnyErrors=124]="AnyErrors"}(t||(t={})),e.getCurrentTime=c,e.isCircularBuildOrder=u,e.getBuildOrderFromAnyBuildOrder=l,e.createBuilderStatusReporter=_,e.createSolutionBuilderHost=function(t,r,n,i,a){void 0===t&&(t=e.sys);var o=d(t,r,n,i);return o.reportErrorSummary=a,o},e.createSolutionBuilderWithWatchHost=function(t,r,n,i,a){void 0===t&&(t=e.sys);var o=d(t,r,n,i),s=e.createWatchHost(t,a);return e.copyProperties(o,s),o},e.createSolutionBuilder=function(e,t,r){return ce(!1,e,t,r)},e.createSolutionBuilderWithWatch=function(e,t,r,n){return ce(!0,e,t,r,n)},function(e){e[e.Build=0]="Build",e[e.UpdateBundle=1]="UpdateBundle",e[e.UpdateOutputFileStamps=2]="UpdateOutputFileStamps"}(r=e.InvalidatedProjectKind||(e.InvalidatedProjectKind={})),function(e){e[e.CreateProgram=0]="CreateProgram",e[e.SyntaxDiagnostics=1]="SyntaxDiagnostics",e[e.SemanticDiagnostics=2]="SemanticDiagnostics",e[e.Emit=3]="Emit",e[e.EmitBundle=4]="EmitBundle",e[e.EmitBuildInfo=5]="EmitBuildInfo",e[e.BuildInvalidatedProjectOfBundle=6]="BuildInvalidatedProjectOfBundle",e[e.QueueReferencingProjects=7]="QueueReferencingProjects",e[e.Done=8]="Done"}(n||(n={}))}(_||(_={})),function(e){!function(t){t.ActionSet="action::set",t.ActionInvalidate="action::invalidate",t.ActionPackageInstalled="action::packageInstalled",t.EventTypesRegistry="event::typesRegistry",t.EventBeginInstallTypes="event::beginInstallTypes",t.EventEndInstallTypes="event::endInstallTypes",t.EventInitializationFailed="event::initializationFailed",function(e){e.GlobalCacheLocation="--globalTypingsCacheLocation",e.LogFile="--logFile",e.EnableTelemetry="--enableTelemetry",e.TypingSafeListLocation="--typingSafeListLocation",e.TypesMapLocation="--typesMapLocation",e.NpmLocation="--npmLocation",e.ValidateDefaultNpmLocation="--validateDefaultNpmLocation"}(t.Arguments||(t.Arguments={})),t.hasArgument=function(t){return e.sys.args.indexOf(t)>=0},t.findArgument=function(t){var r=e.sys.args.indexOf(t);return r>=0&&r<e.sys.args.length-1?e.sys.args[r+1]:void 0},t.nowString=function(){var t=new Date;return"".concat(e.padLeft(t.getHours().toString(),2,"0"),":").concat(e.padLeft(t.getMinutes().toString(),2,"0"),":").concat(e.padLeft(t.getSeconds().toString(),2,"0"),".").concat(e.padLeft(t.getMilliseconds().toString(),3,"0"))}}(e.server||(e.server={}))}(_||(_={})),function(e){!function(t){function r(t,r){return new e.Version(e.getProperty(r,"ts".concat(e.versionMajorMinor))||e.getProperty(r,"latest")).compareTo(t.version)<=0}t.isTypingUpToDate=r;var n=["assert","assert/strict","async_hooks","buffer","child_process","cluster","console","constants","crypto","dgram","diagnostics_channel","dns","dns/promises","domain","events","fs","fs/promises","http","https","http2","inspector","module","net","os","path","perf_hooks","process","punycode","querystring","readline","repl","stream","stream/promises","string_decoder","timers","timers/promises","tls","trace_events","tty","url","util","util/types","v8","vm","wasi","worker_threads","zlib"];function i(e){return t.nodeCoreModules.has(e)?"node":e}t.prefixedNodeCoreModuleList=n.map((function(e){return"node:".concat(e)})),t.nodeCoreModuleList=a(a([],n,!0),t.prefixedNodeCoreModuleList,!0),t.nodeCoreModules=new e.Set(t.nodeCoreModuleList),t.nonRelativeModuleNameForTypingCache=i,t.loadSafeList=function(t,r){var n=e.readConfigFile(r,(function(e){return t.readFile(e)}));return new e.Map(e.getEntries(n.config))},t.loadTypesMap=function(t,r){var n=e.readConfigFile(r,(function(e){return t.readFile(e)}));if(n.config)return new e.Map(e.getEntries(n.config.simpleMap))},t.discoverTypings=function(t,n,a,o,s,c,u,l,_,d){if(!u||!u.enable)return{cachedTypingPaths:[],newTypingNames:[],filesToWatch:[]};var p=new e.Map;a=e.mapDefined(a,(function(t){var r=e.normalizePath(t);if(e.hasJSFileExtension(r))return r}));var f=[];u.include&&T(u.include,"Explicitly included types");var g=u.exclude||[];if(!d.types){var m=new e.Set(a.map(e.getDirectoryPath));m.add(o),m.forEach((function(e){C(e,"bower.json","bower_components",f),C(e,"package.json","node_modules",f)}))}u.disableFilenameBasedTypeAcquisition||function(t){var r=e.mapDefined(t,(function(t){if(e.hasJSFileExtension(t)){var r=e.removeFileExtension(e.getBaseFileName(t.toLowerCase())),n=e.removeMinAndVersionNumbers(r);return s.get(n)}}));r.length&&T(r,"Inferred typings from file names");var i=e.some(t,(function(t){return e.fileExtensionIs(t,".jsx")}));i&&(n&&n("Inferred 'react' typings due to presence of '.jsx' extension"),S("react"))}(a),l&&T(e.deduplicate(l.map(i),e.equateStringsCaseSensitive,e.compareStringsCaseSensitive),"Inferred typings from unresolved imports"),c.forEach((function(e,t){var n=_.get(t);p.has(t)&&void 0===p.get(t)&&void 0!==n&&r(e,n)&&p.set(t,e.typingLocation)}));for(var y=0,v=g;y<v.length;y++){var h=v[y];p.delete(h)&&n&&n("Typing for ".concat(h," is in exclude list, will be ignored."))}var b=[],x=[];p.forEach((function(e,t){void 0!==e?x.push(e):b.push(t)}));var D={cachedTypingPaths:x,newTypingNames:b,filesToWatch:f};return n&&n("Result: ".concat(JSON.stringify(D))),D;function S(e){p.has(e)||p.set(e,void 0)}function T(t,r){n&&n("".concat(r,": ").concat(JSON.stringify(t))),e.forEach(t,S)}function C(r,i,a,o){var s,c,u=e.combinePaths(r,i);t.fileExists(u)&&(o.push(u),s=e.readConfigFile(u,(function(e){return t.readFile(e)})).config,T(c=e.flatMap([s.dependencies,s.devDependencies,s.optionalDependencies,s.peerDependencies],e.getOwnKeys),"Typing names in '".concat(u,"' dependencies")));var l=e.combinePaths(r,a);if(o.push(l),t.directoryExists(l)){var _=[],d=c?c.map((function(t){return e.combinePaths(l,t,i)})):t.readDirectory(l,[".json"],void 0,void 0,3).filter((function(t){if(e.getBaseFileName(t)!==i)return!1;var r=e.getPathComponents(e.normalizePath(t)),n="@"===r[r.length-3][0];return n&&r[r.length-4].toLowerCase()===a||!n&&r[r.length-3].toLowerCase()===a}));n&&n("Searching for typing names in ".concat(l,"; all files: ").concat(JSON.stringify(d)));for(var f=0,g=d;f<g.length;f++){var m=g[f],y=e.normalizePath(m),v=e.readConfigFile(y,(function(e){return t.readFile(e)})).config;if(v.name){var h=v.types||v.typings;if(h){var b=e.getNormalizedAbsolutePath(h,e.getDirectoryPath(y));t.fileExists(b)?(n&&n("    Package '".concat(v.name,"' provides its own types.")),p.set(v.name,b)):n&&n("    Package '".concat(v.name,"' provides its own types but they are missing."))}else _.push(v.name)}}T(_,"    Found package names")}}},function(e){e[e.Ok=0]="Ok",e[e.EmptyName=1]="EmptyName",e[e.NameTooLong=2]="NameTooLong",e[e.NameStartsWithDot=3]="NameStartsWithDot",e[e.NameStartsWithUnderscore=4]="NameStartsWithUnderscore",e[e.NameContainsNonURISafeCharacters=5]="NameContainsNonURISafeCharacters"}(t.NameValidationResult||(t.NameValidationResult={}));function o(e,t){if(!e)return 1;if(e.length>214)return 2;if(46===e.charCodeAt(0))return 3;if(95===e.charCodeAt(0))return 4;if(t){var r=/^@([^/]+)\/([^/]+)$/.exec(e);if(r){var n=o(r[1],!1);if(0!==n)return{name:r[1],isScopeName:!0,result:n};var i=o(r[2],!1);return 0!==i?{name:r[2],isScopeName:!1,result:i}:0}}return encodeURIComponent(e)!==e?5:0}function s(t,r,n,i){var a=i?"Scope":"Package";switch(r){case 1:return"'".concat(t,"':: ").concat(a," name '").concat(n,"' cannot be empty");case 2:return"'".concat(t,"':: ").concat(a," name '").concat(n,"' should be less than ").concat(214," characters");case 3:return"'".concat(t,"':: ").concat(a," name '").concat(n,"' cannot start with '.'");case 4:return"'".concat(t,"':: ").concat(a," name '").concat(n,"' cannot start with '_'");case 5:return"'".concat(t,"':: ").concat(a," name '").concat(n,"' contains non URI safe characters");case 0:return e.Debug.fail();default:throw e.Debug.assertNever(r)}}t.validatePackageName=function(e){return o(e,!0)},t.renderPackageNameValidationFailure=function(e,t){return"object"==typeof e?s(t,e.result,e.name,e.isScopeName):s(t,e,t,!1)}}(e.JsTyping||(e.JsTyping={}))}(_||(_={})),function(e){var t,r;function n(e){return{indentSize:4,tabSize:4,newLineCharacter:e||"\n",convertTabsToSpaces:!0,indentStyle:t.Smart,insertSpaceAfterConstructor:!1,insertSpaceAfterCommaDelimiter:!0,insertSpaceAfterSemicolonInForStatements:!0,insertSpaceBeforeAndAfterBinaryOperators:!0,insertSpaceAfterKeywordsInControlFlowStatements:!0,insertSpaceAfterFunctionKeywordForAnonymousFunctions:!1,insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis:!1,insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets:!1,insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces:!0,insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces:!1,insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces:!1,insertSpaceBeforeFunctionParenthesis:!1,placeOpenBraceOnNewLineForFunctions:!1,placeOpenBraceOnNewLineForControlBlocks:!1,semicolons:r.Ignore,trimTrailingWhitespace:!0}}!function(e){var t=function(){function e(e){this.text=e}return e.prototype.getText=function(e,t){return 0===e&&t===this.text.length?this.text:this.text.substring(e,t)},e.prototype.getLength=function(){return this.text.length},e.prototype.getChangeRange=function(){},e}();e.fromString=function(e){return new t(e)}}(e.ScriptSnapshot||(e.ScriptSnapshot={})),function(e){e[e.Dependencies=1]="Dependencies",e[e.DevDependencies=2]="DevDependencies",e[e.PeerDependencies=4]="PeerDependencies",e[e.OptionalDependencies=8]="OptionalDependencies",e[e.All=15]="All"}(e.PackageJsonDependencyGroup||(e.PackageJsonDependencyGroup={})),function(e){e[e.Off=0]="Off",e[e.On=1]="On",e[e.Auto=2]="Auto"}(e.PackageJsonAutoImportPreference||(e.PackageJsonAutoImportPreference={})),function(e){e[e.Semantic=0]="Semantic",e[e.PartialSemantic=1]="PartialSemantic",e[e.Syntactic=2]="Syntactic"}(e.LanguageServiceMode||(e.LanguageServiceMode={})),e.emptyOptions={},function(e){e.Original="original",e.TwentyTwenty="2020"}(e.SemanticClassificationFormat||(e.SemanticClassificationFormat={})),function(e){e.All="All",e.SortAndCombine="SortAndCombine",e.RemoveUnused="RemoveUnused"}(e.OrganizeImportsMode||(e.OrganizeImportsMode={})),function(e){e[e.Invoked=1]="Invoked",e[e.TriggerCharacter=2]="TriggerCharacter",e[e.TriggerForIncompleteCompletions=3]="TriggerForIncompleteCompletions"}(e.CompletionTriggerKind||(e.CompletionTriggerKind={})),function(e){e.Type="Type",e.Parameter="Parameter",e.Enum="Enum"}(e.InlayHintKind||(e.InlayHintKind={})),function(e){e.none="none",e.definition="definition",e.reference="reference",e.writtenReference="writtenReference"}(e.HighlightSpanKind||(e.HighlightSpanKind={})),function(e){e[e.None=0]="None",e[e.Block=1]="Block",e[e.Smart=2]="Smart"}(t=e.IndentStyle||(e.IndentStyle={})),function(e){e.Ignore="ignore",e.Insert="insert",e.Remove="remove"}(r=e.SemicolonPreference||(e.SemicolonPreference={})),e.getDefaultFormatCodeSettings=n,e.testFormatSettings=n("\n"),function(e){e[e.aliasName=0]="aliasName",e[e.className=1]="className",e[e.enumName=2]="enumName",e[e.fieldName=3]="fieldName",e[e.interfaceName=4]="interfaceName",e[e.keyword=5]="keyword",e[e.lineBreak=6]="lineBreak",e[e.numericLiteral=7]="numericLiteral",e[e.stringLiteral=8]="stringLiteral",e[e.localName=9]="localName",e[e.methodName=10]="methodName",e[e.moduleName=11]="moduleName",e[e.operator=12]="operator",e[e.parameterName=13]="parameterName",e[e.propertyName=14]="propertyName",e[e.punctuation=15]="punctuation",e[e.space=16]="space",e[e.text=17]="text",e[e.typeParameterName=18]="typeParameterName",e[e.enumMemberName=19]="enumMemberName",e[e.functionName=20]="functionName",e[e.regularExpressionLiteral=21]="regularExpressionLiteral",e[e.link=22]="link",e[e.linkName=23]="linkName",e[e.linkText=24]="linkText"}(e.SymbolDisplayPartKind||(e.SymbolDisplayPartKind={})),function(e){e[e.None=0]="None",e[e.MayIncludeAutoImports=1]="MayIncludeAutoImports",e[e.IsImportStatementCompletion=2]="IsImportStatementCompletion",e[e.IsContinuation=4]="IsContinuation",e[e.ResolvedModuleSpecifiers=8]="ResolvedModuleSpecifiers",e[e.ResolvedModuleSpecifiersBeyondLimit=16]="ResolvedModuleSpecifiersBeyondLimit",e[e.MayIncludeMethodSnippets=32]="MayIncludeMethodSnippets"}(e.CompletionInfoFlags||(e.CompletionInfoFlags={})),function(e){e.Comment="comment",e.Region="region",e.Code="code",e.Imports="imports"}(e.OutliningSpanKind||(e.OutliningSpanKind={})),function(e){e[e.JavaScript=0]="JavaScript",e[e.SourceMap=1]="SourceMap",e[e.Declaration=2]="Declaration"}(e.OutputFileType||(e.OutputFileType={})),function(e){e[e.None=0]="None",e[e.InMultiLineCommentTrivia=1]="InMultiLineCommentTrivia",e[e.InSingleQuoteStringLiteral=2]="InSingleQuoteStringLiteral",e[e.InDoubleQuoteStringLiteral=3]="InDoubleQuoteStringLiteral",e[e.InTemplateHeadOrNoSubstitutionTemplate=4]="InTemplateHeadOrNoSubstitutionTemplate",e[e.InTemplateMiddleOrTail=5]="InTemplateMiddleOrTail",e[e.InTemplateSubstitutionPosition=6]="InTemplateSubstitutionPosition"}(e.EndOfLineState||(e.EndOfLineState={})),function(e){e[e.Punctuation=0]="Punctuation",e[e.Keyword=1]="Keyword",e[e.Operator=2]="Operator",e[e.Comment=3]="Comment",e[e.Whitespace=4]="Whitespace",e[e.Identifier=5]="Identifier",e[e.NumberLiteral=6]="NumberLiteral",e[e.BigIntLiteral=7]="BigIntLiteral",e[e.StringLiteral=8]="StringLiteral",e[e.RegExpLiteral=9]="RegExpLiteral"}(e.TokenClass||(e.TokenClass={})),function(e){e.unknown="",e.warning="warning",e.keyword="keyword",e.scriptElement="script",e.moduleElement="module",e.classElement="class",e.localClassElement="local class",e.interfaceElement="interface",e.typeElement="type",e.enumElement="enum",e.enumMemberElement="enum member",e.variableElement="var",e.localVariableElement="local var",e.functionElement="function",e.localFunctionElement="local function",e.memberFunctionElement="method",e.memberGetAccessorElement="getter",e.memberSetAccessorElement="setter",e.memberVariableElement="property",e.memberAccessorVariableElement="accessor",e.constructorImplementationElement="constructor",e.callSignatureElement="call",e.indexSignatureElement="index",e.constructSignatureElement="construct",e.parameterElement="parameter",e.typeParameterElement="type parameter",e.primitiveType="primitive type",e.label="label",e.alias="alias",e.constElement="const",e.letElement="let",e.directory="directory",e.externalModuleName="external module name",e.jsxAttribute="JSX attribute",e.string="string",e.link="link",e.linkName="link name",e.linkText="link text"}(e.ScriptElementKind||(e.ScriptElementKind={})),function(e){e.none="",e.publicMemberModifier="public",e.privateMemberModifier="private",e.protectedMemberModifier="protected",e.exportedModifier="export",e.ambientModifier="declare",e.staticModifier="static",e.abstractModifier="abstract",e.optionalModifier="optional",e.deprecatedModifier="deprecated",e.dtsModifier=".d.ts",e.tsModifier=".ts",e.tsxModifier=".tsx",e.jsModifier=".js",e.jsxModifier=".jsx",e.jsonModifier=".json",e.dmtsModifier=".d.mts",e.mtsModifier=".mts",e.mjsModifier=".mjs",e.dctsModifier=".d.cts",e.ctsModifier=".cts",e.cjsModifier=".cjs"}(e.ScriptElementKindModifier||(e.ScriptElementKindModifier={})),function(e){e.comment="comment",e.identifier="identifier",e.keyword="keyword",e.numericLiteral="number",e.bigintLiteral="bigint",e.operator="operator",e.stringLiteral="string",e.whiteSpace="whitespace",e.text="text",e.punctuation="punctuation",e.className="class name",e.enumName="enum name",e.interfaceName="interface name",e.moduleName="module name",e.typeParameterName="type parameter name",e.typeAliasName="type alias name",e.parameterName="parameter name",e.docCommentTagName="doc comment tag name",e.jsxOpenTagName="jsx open tag name",e.jsxCloseTagName="jsx close tag name",e.jsxSelfClosingTagName="jsx self closing tag name",e.jsxAttribute="jsx attribute",e.jsxText="jsx text",e.jsxAttributeStringLiteralValue="jsx attribute string literal value"}(e.ClassificationTypeNames||(e.ClassificationTypeNames={})),function(e){e[e.comment=1]="comment",e[e.identifier=2]="identifier",e[e.keyword=3]="keyword",e[e.numericLiteral=4]="numericLiteral",e[e.operator=5]="operator",e[e.stringLiteral=6]="stringLiteral",e[e.regularExpressionLiteral=7]="regularExpressionLiteral",e[e.whiteSpace=8]="whiteSpace",e[e.text=9]="text",e[e.punctuation=10]="punctuation",e[e.className=11]="className",e[e.enumName=12]="enumName",e[e.interfaceName=13]="interfaceName",e[e.moduleName=14]="moduleName",e[e.typeParameterName=15]="typeParameterName",e[e.typeAliasName=16]="typeAliasName",e[e.parameterName=17]="parameterName",e[e.docCommentTagName=18]="docCommentTagName",e[e.jsxOpenTagName=19]="jsxOpenTagName",e[e.jsxCloseTagName=20]="jsxCloseTagName",e[e.jsxSelfClosingTagName=21]="jsxSelfClosingTagName",e[e.jsxAttribute=22]="jsxAttribute",e[e.jsxText=23]="jsxText",e[e.jsxAttributeStringLiteralValue=24]="jsxAttributeStringLiteralValue",e[e.bigintLiteral=25]="bigintLiteral"}(e.ClassificationType||(e.ClassificationType={}))}(_||(_={})),function(e){function t(t){switch(t.kind){case 257:return e.isInJSFile(t)&&e.getJSDocEnumTag(t)?7:1;case 166:case 205:case 169:case 168:case 299:case 300:case 171:case 170:case 173:case 174:case 175:case 259:case 215:case 216:case 295:case 288:return 1;case 165:case 261:case 262:case 184:return 2;case 348:return void 0===t.name?3:2;case 302:case 260:return 3;case 264:return e.isAmbientModule(t)||1===e.getModuleInstanceState(t)?5:4;case 263:case 272:case 273:case 268:case 269:case 274:case 275:return 7;case 308:return 5}return 7}function r(t){for(;163===t.parent.kind;)t=t.parent;return e.isInternalModuleImportEqualsDeclaration(t.parent)&&t.parent.moduleReference===t}function n(e){return e.expression}function i(e){return e.tag}function a(e){return e.tagName}function s(t,r,n,i,a){var o=i?u(t):c(t);return a&&(o=e.skipOuterExpressions(o)),!!o&&!!o.parent&&r(o.parent)&&n(o.parent)===o}function c(e){return d(e)?e.parent:e}function u(e){return d(e)||p(e)?e.parent:e}function l(t){var r;return e.isIdentifier(t)&&(null===(r=e.tryCast(t.parent,e.isBreakOrContinueStatement))||void 0===r?void 0:r.label)===t}function _(t){var r;return e.isIdentifier(t)&&(null===(r=e.tryCast(t.parent,e.isLabeledStatement))||void 0===r?void 0:r.label)===t}function d(t){var r;return(null===(r=e.tryCast(t.parent,e.isPropertyAccessExpression))||void 0===r?void 0:r.name)===t}function p(t){var r;return(null===(r=e.tryCast(t.parent,e.isElementAccessExpression))||void 0===r?void 0:r.argumentExpression)===t}e.scanner=e.createScanner(99,!0),function(e){e[e.None=0]="None",e[e.Value=1]="Value",e[e.Type=2]="Type",e[e.Namespace=4]="Namespace",e[e.All=7]="All"}(e.SemanticMeaning||(e.SemanticMeaning={})),e.getMeaningFromDeclaration=t,e.getMeaningFromLocation=function(n){var i=(n=P(n)).parent;return 308===n.kind?1:e.isExportAssignment(i)||e.isExportSpecifier(i)||e.isExternalModuleReference(i)||e.isImportSpecifier(i)||e.isImportClause(i)||e.isImportEqualsDeclaration(i)&&n===i.name?7:r(n)?function(t){var r=163===t.kind?t:e.isQualifiedName(t.parent)&&t.parent.right===t?t.parent:void 0;return r&&268===r.parent.kind?7:4}(n):e.isDeclarationName(n)?t(i):e.isEntityName(n)&&e.findAncestor(n,e.or(e.isJSDocNameReference,e.isJSDocLinkLike,e.isJSDocMemberName))?7:function(t){e.isRightSideOfQualifiedNameOrPropertyAccess(t)&&(t=t.parent);switch(t.kind){case 108:return!e.isExpressionNode(t);case 194:return!0}switch(t.parent.kind){case 180:return!0;case 202:return!t.parent.isTypeOf;case 230:return e.isPartOfTypeNode(t.parent)}return!1}(n)?2:function(e){return function(e){var t=e,r=!0;if(163===t.parent.kind){for(;t.parent&&163===t.parent.kind;)t=t.parent;r=t.right===e}return 180===t.parent.kind&&!r}(e)||function(e){var t=e,r=!0;if(208===t.parent.kind){for(;t.parent&&208===t.parent.kind;)t=t.parent;r=t.name===e}if(!r&&230===t.parent.kind&&294===t.parent.parent.kind){var n=t.parent.parent.parent;return 260===n.kind&&117===t.parent.parent.token||261===n.kind&&94===t.parent.parent.token}return!1}(e)}(n)?4:e.isTypeParameterDeclaration(i)?(e.Debug.assert(e.isJSDocTemplateTag(i.parent)),2):e.isLiteralTypeNode(i)?3:1},e.isInRightSideOfInternalImportEqualsDeclaration=r,e.isCallExpressionTarget=function(t,r,i){return void 0===r&&(r=!1),void 0===i&&(i=!1),s(t,e.isCallExpression,n,r,i)},e.isNewExpressionTarget=function(t,r,i){return void 0===r&&(r=!1),void 0===i&&(i=!1),s(t,e.isNewExpression,n,r,i)},e.isCallOrNewExpressionTarget=function(t,r,i){return void 0===r&&(r=!1),void 0===i&&(i=!1),s(t,e.isCallOrNewExpression,n,r,i)},e.isTaggedTemplateTag=function(t,r,n){return void 0===r&&(r=!1),void 0===n&&(n=!1),s(t,e.isTaggedTemplateExpression,i,r,n)},e.isDecoratorTarget=function(t,r,i){return void 0===r&&(r=!1),void 0===i&&(i=!1),s(t,e.isDecorator,n,r,i)},e.isJsxOpeningLikeElementTagName=function(t,r,n){return void 0===r&&(r=!1),void 0===n&&(n=!1),s(t,e.isJsxOpeningLikeElement,a,r,n)},e.climbPastPropertyAccess=c,e.climbPastPropertyOrElementAccess=u,e.getTargetLabel=function(e,t){for(;e;){if(253===e.kind&&e.label.escapedText===t)return e.label;e=e.parent}},e.hasPropertyAccessExpressionWithName=function(t,r){return!!e.isPropertyAccessExpression(t.expression)&&t.expression.name.text===r},e.isJumpStatementTarget=l,e.isLabelOfLabeledStatement=_,e.isLabelName=function(e){return _(e)||l(e)},e.isTagName=function(t){var r;return(null===(r=e.tryCast(t.parent,e.isJSDocTag))||void 0===r?void 0:r.tagName)===t},e.isRightSideOfQualifiedName=function(t){var r;return(null===(r=e.tryCast(t.parent,e.isQualifiedName))||void 0===r?void 0:r.right)===t},e.isRightSideOfPropertyAccess=d,e.isArgumentExpressionOfElementAccess=p,e.isNameOfModuleDeclaration=function(t){var r;return(null===(r=e.tryCast(t.parent,e.isModuleDeclaration))||void 0===r?void 0:r.name)===t},e.isNameOfFunctionDeclaration=function(t){var r;return e.isIdentifier(t)&&(null===(r=e.tryCast(t.parent,e.isFunctionLike))||void 0===r?void 0:r.name)===t},e.isLiteralNameOfPropertyDeclarationOrIndexAccess=function(t){switch(t.parent.kind){case 169:case 168:case 299:case 302:case 171:case 170:case 174:case 175:case 264:return e.getNameOfDeclaration(t.parent)===t;case 209:return t.parent.argumentExpression===t;case 164:return!0;case 198:return 196===t.parent.parent.kind;default:return!1}},e.isExpressionOfExternalModuleImportEqualsDeclaration=function(t){return e.isExternalModuleImportEqualsDeclaration(t.parent.parent)&&e.getExternalModuleImportEqualsDeclarationExpression(t.parent.parent)===t},e.getContainerNode=function(t){for(e.isJSDocTypeAlias(t)&&(t=t.parent.parent);;){if(!(t=t.parent))return;switch(t.kind){case 308:case 171:case 170:case 259:case 215:case 174:case 175:case 260:case 261:case 263:case 264:return t}}},e.getNodeKind=function t(r){switch(r.kind){case 308:return e.isExternalModule(r)?"module":"script";case 264:return"module";case 260:case 228:return"class";case 261:return"interface";case 262:case 341:case 348:return"type";case 263:return"enum";case 257:return c(r);case 205:return c(e.getRootDeclaration(r));case 216:case 259:case 215:return"function";case 174:return"getter";case 175:return"setter";case 171:case 170:return"method";case 299:var n=r.initializer;return e.isFunctionLike(n)?"method":"property";case 169:case 168:case 300:case 301:return"property";case 178:return"index";case 177:return"construct";case 176:return"call";case 173:case 172:return"constructor";case 165:return"type parameter";case 302:return"enum member";case 166:return e.hasSyntacticModifier(r,16476)?"property":"parameter";case 268:case 273:case 278:case 271:case 277:return"alias";case 223:var i=e.getAssignmentDeclarationKind(r),a=r.right;switch(i){case 7:case 8:case 9:case 0:return"";case 1:case 2:var o=t(a);return""===o?"const":o;case 3:case 5:return e.isFunctionExpression(a)?"method":"property";case 4:return"property";case 6:return"local class";default:return e.assertType(i),""}case 79:return e.isImportClause(r.parent)?"alias":"";case 274:var s=t(r.expression);return""===s?"const":s;default:return""}function c(t){return e.isVarConst(t)?"const":e.isLet(t)?"let":"var"}},e.isThis=function(t){switch(t.kind){case 108:return!0;case 79:return e.identifierIsThisKeyword(t)&&166===t.parent.kind;default:return!1}};var f=/^\/\/\/\s*</;function g(e,t){return y(e.pos,e.end,t)}function m(e,t){return e.pos<t&&t<e.end}function y(e,t,r){return e<=r.pos&&t>=r.end}function v(e,t,r,n){return Math.max(e,r)<Math.min(t,n)}function h(t,r){if(void 0===t||e.nodeIsMissing(t))return!1;switch(t.kind){case 260:case 261:case 263:case 207:case 203:case 184:case 238:case 265:case 266:case 272:case 276:return b(t,19,r);case 295:return h(t.block,r);case 211:if(!t.arguments)return!0;case 210:case 214:case 193:return b(t,21,r);case 181:case 182:return h(t.type,r);case 173:case 174:case 175:case 259:case 215:case 171:case 170:case 177:case 176:case 216:return t.body?h(t.body,r):t.type?h(t.type,r):x(t,21,r);case 264:return!!t.body&&h(t.body,r);case 242:return t.elseStatement?h(t.elseStatement,r):h(t.thenStatement,r);case 241:return h(t.expression,r)||x(t,26,r);case 206:case 204:case 209:case 164:case 186:return b(t,23,r);case 178:return t.type?h(t.type,r):x(t,23,r);case 292:case 293:return!1;case 245:case 246:case 247:case 244:return h(t.statement,r);case 243:return x(t,115,r)?b(t,21,r):h(t.statement,r);case 183:return h(t.exprName,r);case 218:case 217:case 219:case 226:case 227:return h(t.expression,r);case 212:return h(t.template,r);case 225:return h(e.lastOrUndefined(t.templateSpans),r);case 236:return e.nodeIsPresent(t.literal);case 275:case 269:return e.nodeIsPresent(t.moduleSpecifier);case 221:return h(t.operand,r);case 223:return h(t.right,r);case 224:return h(t.whenFalse,r);default:return!0}}function b(t,r,n){var i=t.getChildren(n);if(i.length){var a=e.last(i);if(a.kind===r)return!0;if(26===a.kind&&1!==i.length)return i[i.length-2].kind===r}return!1}function x(e,t,r){return!!D(e,t,r)}function D(t,r,n){return e.find(t.getChildren(n),(function(e){return e.kind===r}))}function S(t){var r=e.find(t.parent.getChildren(),(function(r){return e.isSyntaxList(r)&&g(r,t)}));return e.Debug.assert(!r||e.contains(r.getChildren(),t)),r}function T(e){return 88===e.kind}function C(e){return 84===e.kind}function E(e){return 98===e.kind}function k(t,r){if(!r)switch(t.kind){case 260:case 228:return function(t){if(e.isNamedDeclaration(t))return t.name;if(e.isClassDeclaration(t)){var r=t.modifiers&&e.find(t.modifiers,T);if(r)return r}if(e.isClassExpression(t)){var n=e.find(t.getChildren(),C);if(n)return n}}(t);case 259:case 215:return function(t){if(e.isNamedDeclaration(t))return t.name;if(e.isFunctionDeclaration(t)){var r=e.find(t.modifiers,T);if(r)return r}if(e.isFunctionExpression(t)){var n=e.find(t.getChildren(),E);if(n)return n}}(t);case 173:return t}if(e.isNamedDeclaration(t))return t.name}function N(t,r){if(t.importClause){if(t.importClause.name&&t.importClause.namedBindings)return;if(t.importClause.name)return t.importClause.name;if(t.importClause.namedBindings){if(e.isNamedImports(t.importClause.namedBindings)){var n=e.singleOrUndefined(t.importClause.namedBindings.elements);if(!n)return;return n.name}if(e.isNamespaceImport(t.importClause.namedBindings))return t.importClause.namedBindings.name}}if(!r)return t.moduleSpecifier}function A(t,r){if(t.exportClause){if(e.isNamedExports(t.exportClause)){if(!e.singleOrUndefined(t.exportClause.elements))return;return t.exportClause.elements[0].name}if(e.isNamespaceExport(t.exportClause))return t.exportClause.name}if(!r)return t.moduleSpecifier}function F(t,r){var n=t.parent;if((e.isModifier(t)&&(r||88!==t.kind)?e.canHaveModifiers(n)&&e.contains(n.modifiers,t):84===t.kind?e.isClassDeclaration(n)||e.isClassExpression(t):98===t.kind?e.isFunctionDeclaration(n)||e.isFunctionExpression(t):118===t.kind?e.isInterfaceDeclaration(n):92===t.kind?e.isEnumDeclaration(n):154===t.kind?e.isTypeAliasDeclaration(n):143===t.kind||142===t.kind?e.isModuleDeclaration(n):100===t.kind?e.isImportEqualsDeclaration(n):137===t.kind?e.isGetAccessorDeclaration(n):151===t.kind&&e.isSetAccessorDeclaration(n))&&(a=k(n,r)))return a;if((113===t.kind||85===t.kind||119===t.kind)&&e.isVariableDeclarationList(n)&&1===n.declarations.length){var i=n.declarations[0];if(e.isIdentifier(i.name))return i.name}if(154===t.kind){if(e.isImportClause(n)&&n.isTypeOnly)if(a=N(n.parent,r))return a;if(e.isExportDeclaration(n)&&n.isTypeOnly)if(a=A(n,r))return a}if(128===t.kind){if(e.isImportSpecifier(n)&&n.propertyName||e.isExportSpecifier(n)&&n.propertyName||e.isNamespaceImport(n)||e.isNamespaceExport(n))return n.name;if(e.isExportDeclaration(n)&&n.exportClause&&e.isNamespaceExport(n.exportClause))return n.exportClause.name}if(100===t.kind&&e.isImportDeclaration(n)&&(a=N(n,r)))return a;if(93===t.kind){if(e.isExportDeclaration(n))if(a=A(n,r))return a;if(e.isExportAssignment(n))return e.skipOuterExpressions(n.expression)}if(147===t.kind&&e.isExternalModuleReference(n))return n.expression;if(158===t.kind&&(e.isImportDeclaration(n)||e.isExportDeclaration(n))&&n.moduleSpecifier)return n.moduleSpecifier;if((94===t.kind||117===t.kind)&&e.isHeritageClause(n)&&n.token===t.kind){var a=function(e){if(1===e.types.length)return e.types[0].expression}(n);if(a)return a}if(94===t.kind){if(e.isTypeParameterDeclaration(n)&&n.constraint&&e.isTypeReferenceNode(n.constraint))return n.constraint.typeName;if(e.isConditionalTypeNode(n)&&e.isTypeReferenceNode(n.extendsType))return n.extendsType.typeName}if(138===t.kind&&e.isInferTypeNode(n))return n.typeParameter.name;if(101===t.kind&&e.isTypeParameterDeclaration(n)&&e.isMappedTypeNode(n.parent))return n.name;if(141===t.kind&&e.isTypeOperatorNode(n)&&141===n.operator&&e.isTypeReferenceNode(n.type))return n.type.typeName;if(146===t.kind&&e.isTypeOperatorNode(n)&&146===n.operator&&e.isArrayTypeNode(n.type)&&e.isTypeReferenceNode(n.type.elementType))return n.type.elementType.typeName;if(!r){if((103===t.kind&&e.isNewExpression(n)||114===t.kind&&e.isVoidExpression(n)||112===t.kind&&e.isTypeOfExpression(n)||133===t.kind&&e.isAwaitExpression(n)||125===t.kind&&e.isYieldExpression(n)||89===t.kind&&e.isDeleteExpression(n))&&n.expression)return e.skipOuterExpressions(n.expression);if((101===t.kind||102===t.kind)&&e.isBinaryExpression(n)&&n.operatorToken===t)return e.skipOuterExpressions(n.right);if(128===t.kind&&e.isAsExpression(n)&&e.isTypeReferenceNode(n.type))return n.type.typeName;if(101===t.kind&&e.isForInStatement(n)||162===t.kind&&e.isForOfStatement(n))return e.skipOuterExpressions(n.expression)}return t}function P(e){return F(e,!1)}function w(e,t,r){return O(e,t,!1,r,!1)}function I(e,t){return O(e,t,!0,void 0,!1)}function O(t,r,n,i,a){for(var o,s=t,c=function(){var a=s.getChildren(t),c=e.binarySearchKey(a,r,(function(e,t){return t}),(function(e,o){var s=a[e].getEnd();if(s<r)return-1;var c=n?a[e].getFullStart():a[e].getStart(t,!0);return c>r?1:l(a[e],c,s)?a[e-1]&&l(a[e-1])?1:0:i&&c===r&&a[e-1]&&a[e-1].getEnd()===r&&l(a[e-1])?1:-1}));return o?{value:o}:c>=0&&a[c]?(s=a[c],"continue-outer"):{value:s}};;){var u=c();if("object"==typeof u)return u.value}function l(e,s,c){if(null!=c||(c=e.getEnd()),c<r)return!1;if(null!=s||(s=n?e.getFullStart():e.getStart(t,!0)),s>r)return!1;if(r<c||r===c&&(1===e.kind||a))return!0;if(i&&c===r){var u=L(r,t,e);if(u&&i(u))return o=u,!0}return!1}}function M(t,r,n){return function r(i){if(e.isToken(i)&&i.pos===t.end)return i;return e.firstDefined(i.getChildren(n),(function(e){return(e.pos<=t.pos&&e.end>t.end||e.pos===t.end)&&W(e,n)?r(e):void 0}))}(r)}function L(t,r,n,i){var a=function a(o){if(R(o)&&1!==o.kind)return o;var s=o.getChildren(r),c=e.binarySearchKey(s,t,(function(e,t){return t}),(function(e,r){return t<s[e].end?!s[e-1]||t>=s[e-1].end?0:1:-1}));if(c>=0&&s[c]){var u=s[c];if(t<u.end){if(u.getStart(r,!i)>=t||!W(u,r)||J(u)){var l=j(s,c,r,o.kind);return l&&B(l,r)}return a(u)}}e.Debug.assert(void 0!==n||308===o.kind||1===o.kind||e.isJSDocCommentContainingNode(o));var _=j(s,s.length,r,o.kind);return _&&B(_,r)}(n||r);return e.Debug.assert(!(a&&J(a))),a}function R(t){return e.isToken(t)&&!J(t)}function B(e,t){if(R(e))return e;var r=e.getChildren(t);if(0===r.length)return e;var n=j(r,r.length,t,e.kind);return n&&B(n,t)}function j(t,r,n,i){for(var a=r-1;a>=0;a--){if(J(t[a]))0!==a||11!==i&&282!==i||e.Debug.fail("`JsxText` tokens should not be the first child of `JsxElement | JsxSelfClosingElement`");else if(W(t[a],n))return t[a]}}function J(t){return e.isJsxText(t)&&t.containsOnlyTriviaWhiteSpaces}function z(t,r,n){var i=e.tokenToString(t.kind),a=e.tokenToString(r),o=t.getFullStart(),s=n.text.lastIndexOf(a,o);if(-1!==s){if(n.text.lastIndexOf(i,o-1)<s){var c=L(s+1,n);if(c&&c.kind===r)return c}for(var u=t.kind,l=0;;){var _=L(t.getFullStart(),n);if(!_)return;if((t=_).kind===r){if(0===l)return t;l--}else t.kind===u&&l++}}}function U(e,t,r){return t?e.getNonNullableType():r?e.getNonOptionalType():e}function K(t,r,n){var i=n.getTypeAtLocation(t);return e.isOptionalChain(t.parent)&&(i=U(i,e.isOptionalChainRoot(t.parent),!0)),(e.isNewExpression(t.parent)?i.getConstructSignatures():i.getCallSignatures()).filter((function(e){return!!e.typeParameters&&e.typeParameters.length>=r}))}function V(t,r){if(-1!==r.text.lastIndexOf("<",t?t.pos:r.text.length))for(var n=t,i=0,a=0;n;){switch(n.kind){case 29:if((n=L(n.getFullStart(),r))&&28===n.kind&&(n=L(n.getFullStart(),r)),!n||!e.isIdentifier(n))return;if(!i)return e.isDeclarationName(n)?void 0:{called:n,nTypeArguments:a};i--;break;case 49:i=3;break;case 48:i=2;break;case 31:i++;break;case 19:if(!(n=z(n,18,r)))return;break;case 21:if(!(n=z(n,20,r)))return;break;case 23:if(!(n=z(n,22,r)))return;break;case 27:a++;break;case 38:case 79:case 10:case 8:case 9:case 110:case 95:case 112:case 94:case 141:case 24:case 51:case 57:case 58:break;default:if(e.isTypeNode(n))break;return}n=L(n.getFullStart(),r)}}function q(t,r,n){return e.formatting.getRangeOfEnclosingComment(t,r,void 0,n)}function W(e,t){return 1===e.kind?!!e.jsDoc:0!==e.getWidth(t)}function H(e,t,r){var n=q(e,t,void 0);return!!n&&r===f.test(e.text.substring(n.pos,n.end))}function G(t,r,n){return e.createTextSpanFromBounds(t.getStart(r),(n||t).getEnd())}function Q(t){if(!t.isUnterminated)return e.createTextSpanFromBounds(t.getStart()+1,t.getEnd()-1)}function X(e,t){return{span:e,newText:t}}function Y(e){return 154===e.kind}function Z(t,r){return{fileExists:function(e){return t.fileExists(e)},getCurrentDirectory:function(){return r.getCurrentDirectory()},readFile:e.maybeBind(r,r.readFile),useCaseSensitiveFileNames:e.maybeBind(r,r.useCaseSensitiveFileNames),getSymlinkCache:e.maybeBind(r,r.getSymlinkCache)||t.getSymlinkCache,getModuleSpecifierCache:e.maybeBind(r,r.getModuleSpecifierCache),getPackageJsonInfoCache:function(){var e;return null===(e=t.getModuleResolutionCache())||void 0===e?void 0:e.getPackageJsonInfoCache()},getGlobalTypingsCacheLocation:e.maybeBind(r,r.getGlobalTypingsCacheLocation),redirectTargetsMap:t.redirectTargetsMap,getProjectReferenceRedirect:function(e){return t.getProjectReferenceRedirect(e)},isSourceOfProjectReferenceRedirect:function(e){return t.isSourceOfProjectReferenceRedirect(e)},getNearestAncestorDirectoryWithPackageJson:e.maybeBind(r,r.getNearestAncestorDirectoryWithPackageJson),getFileIncludeReasons:function(){return t.getFileIncludeReasons()}}}function $(e,t){return o(o({},Z(e,t)),{getCommonSourceDirectory:function(){return e.getCommonSourceDirectory()}})}function ee(t,r,n,i,a){return e.factory.createImportDeclaration(void 0,t||r?e.factory.createImportClause(!!a,t,r&&r.length?e.factory.createNamedImports(r):void 0):void 0,"string"==typeof n?te(n,i):n,void 0)}function te(t,r){return e.factory.createStringLiteral(t,0===r)}function re(t,r){return e.isStringDoubleQuoted(t,r)?1:0}function ne(t,r){if(r.quotePreference&&"auto"!==r.quotePreference)return"single"===r.quotePreference?0:1;var n=t.imports&&e.find(t.imports,(function(t){return e.isStringLiteral(t)&&!e.nodeIsSynthesized(t.parent)}));return n?re(n,t):1}function ie(t){return"default"!==t.escapedName?t.escapedName:e.firstDefined(t.declarations,(function(t){var r=e.getNameOfDeclaration(t);return r&&79===r.kind?r.escapedText:void 0}))}function ae(t,r,n){return e.textSpanContainsPosition(t,r.getStart(n))&&r.getEnd()<=e.textSpanEnd(t)}function oe(e,t){return!!e&&!!t&&e.start===t.start&&e.length===t.length}function se(t,r,n){var i=r.tryGetSourcePosition(t);return i&&(!n||n(e.normalizePath(i.fileName))?i:void 0)}function ce(e,t,r){var n=e.contextSpan&&se({fileName:e.fileName,pos:e.contextSpan.start},t,r),i=e.contextSpan&&se({fileName:e.fileName,pos:e.contextSpan.start+e.contextSpan.length},t,r);return n&&i?{start:n.pos,length:i.pos-n.pos}:void 0}function ue(t){var r=t.declarations?e.firstOrUndefined(t.declarations):void 0;return!!e.findAncestor(r,(function(t){return!!e.isParameter(t)||!(e.isBindingElement(t)||e.isObjectBindingPattern(t)||e.isArrayBindingPattern(t))&&"quit"}))}e.getLineStartPositionForPosition=function(t,r){return e.getLineStarts(r)[r.getLineAndCharacterOfPosition(t).line]},e.rangeContainsRange=g,e.rangeContainsRangeExclusive=function(e,t){return m(e,t.pos)&&m(e,t.end)},e.rangeContainsPosition=function(e,t){return e.pos<=t&&t<=e.end},e.rangeContainsPositionExclusive=m,e.startEndContainsRange=y,e.rangeContainsStartEnd=function(e,t,r){return e.pos<=t&&e.end>=r},e.rangeOverlapsWithStartEnd=function(e,t,r){return v(e.pos,e.end,t,r)},e.nodeOverlapsWithStartEnd=function(e,t,r,n){return v(e.getStart(t),e.end,r,n)},e.startEndOverlapsWithStartEnd=v,e.positionBelongsToNode=function(t,r,n){return e.Debug.assert(t.pos<=r),r<t.end||!h(t,n)},e.findListItemInfo=function(t){var r=S(t);if(r){var n=r.getChildren();return{listItemIndex:e.indexOfNode(n,t),list:r}}},e.hasChildOfKind=x,e.findChildOfKind=D,e.findContainingList=S,e.getContextualTypeFromParentOrAncestorTypeNode=function(t,r){if(!(8388608&t.flags)){var n=Re(t,r);if(n)return n;var i=function(t){var r;return e.findAncestor(t,(function(t){return e.isTypeNode(t)&&(r=t),!e.isQualifiedName(t.parent)&&!e.isTypeNode(t.parent)&&!e.isTypeElement(t.parent)})),r}(t);return i&&r.getTypeAtLocation(i)}},e.getAdjustedReferenceLocation=P,e.getAdjustedRenameLocation=function(e){return F(e,!0)},e.getTouchingPropertyName=function(t,r){return w(t,r,(function(t){return e.isPropertyNameLiteral(t)||e.isKeyword(t.kind)||e.isPrivateIdentifier(t)}))},e.getTouchingToken=w,e.getTokenAtPosition=I,e.findFirstNonJsxWhitespaceToken=function(e,t){for(var r=I(e,t);J(r);){var n=M(r,r.parent,e);if(!n)return;r=n}return r},e.findTokenOnLeftOfPosition=function(t,r){var n=I(t,r);return e.isToken(n)&&r>n.getStart(t)&&r<n.getEnd()?n:L(r,t)},e.findNextToken=M,e.findPrecedingToken=L,e.isInString=function(t,r,n){if(void 0===n&&(n=L(r,t)),n&&e.isStringTextContainingNode(n)){var i=n.getStart(t),a=n.getEnd();if(i<r&&r<a)return!0;if(r===a)return!!n.isUnterminated}return!1},e.isInsideJsxElementOrAttribute=function(e,t){var r=I(e,t);return!!r&&(11===r.kind||(29===r.kind&&11===r.parent.kind||(29===r.kind&&291===r.parent.kind||(!(!r||19!==r.kind||291!==r.parent.kind)||29===r.kind&&284===r.parent.kind))))},e.isInTemplateString=function(t,r){var n=I(t,r);return e.isTemplateLiteralKind(n.kind)&&r>n.getStart(t)},e.isInJSXText=function(t,r){var n=I(t,r);return!!e.isJsxText(n)||(!(18!==n.kind||!e.isJsxExpression(n.parent)||!e.isJsxElement(n.parent.parent))||!(29!==n.kind||!e.isJsxOpeningLikeElement(n.parent)||!e.isJsxElement(n.parent.parent)))},e.isInsideJsxElement=function(e,t){return function(r){for(;r;)if(r.kind>=282&&r.kind<=291||11===r.kind||29===r.kind||31===r.kind||79===r.kind||19===r.kind||18===r.kind||43===r.kind)r=r.parent;else{if(281!==r.kind)return!1;if(t>r.getStart(e))return!0;r=r.parent}return!1}(I(e,t))},e.findPrecedingMatchingToken=z,e.removeOptionality=U,e.isPossiblyTypeArgumentPosition=function t(r,n,i){var a=V(r,n);return void 0!==a&&(e.isPartOfTypeNode(a.called)||0!==K(a.called,a.nTypeArguments,i).length||t(a.called,n,i))},e.getPossibleGenericSignatures=K,e.getPossibleTypeArgumentsInfo=V,e.isInComment=q,e.hasDocComment=function(t,r){var n=I(t,r);return!!e.findAncestor(n,e.isJSDoc)},e.getNodeModifiers=function(t,r){void 0===r&&(r=0);var n=[],i=e.isDeclaration(t)?e.getCombinedNodeFlagsAlwaysIncludeJSDoc(t)&~r:0;return 8&i&&n.push("private"),16&i&&n.push("protected"),4&i&&n.push("public"),(32&i||e.isClassStaticBlockDeclaration(t))&&n.push("static"),256&i&&n.push("abstract"),1&i&&n.push("export"),8192&i&&n.push("deprecated"),16777216&t.flags&&n.push("declare"),274===t.kind&&n.push("export"),n.length>0?n.join(","):""},e.getTypeArgumentOrTypeParameterList=function(t){return 180===t.kind||210===t.kind?t.typeArguments:e.isFunctionLike(t)||260===t.kind||261===t.kind?t.typeParameters:void 0},e.isComment=function(e){return 2===e||3===e},e.isStringOrRegularExpressionOrTemplateLiteral=function(t){return!(10!==t&&13!==t&&!e.isTemplateLiteralKind(t))},e.isPunctuation=function(e){return 18<=e&&e<=78},e.isInsideTemplateLiteral=function(t,r,n){return e.isTemplateLiteralKind(t.kind)&&t.getStart(n)<r&&r<t.end||!!t.isUnterminated&&r===t.end},e.isAccessibilityModifier=function(e){switch(e){case 123:case 121:case 122:return!0}return!1},e.cloneCompilerOptions=function(t){var r=e.clone(t);return e.setConfigFileInOptions(r,t&&t.configFile),r},e.isArrayLiteralOrObjectLiteralDestructuringPattern=function e(t){if(206===t.kind||207===t.kind){if(223===t.parent.kind&&t.parent.left===t&&63===t.parent.operatorToken.kind)return!0;if(247===t.parent.kind&&t.parent.initializer===t)return!0;if(e(299===t.parent.kind?t.parent.parent:t.parent))return!0}return!1},e.isInReferenceComment=function(e,t){return H(e,t,!0)},e.isInNonReferenceComment=function(e,t){return H(e,t,!1)},e.getReplacementSpanForContextToken=function(e){if(e)switch(e.kind){case 10:case 14:return Q(e);default:return G(e)}},e.createTextSpanFromNode=G,e.createTextSpanFromStringLiteralLikeContent=Q,e.createTextRangeFromNode=function(t,r){return e.createRange(t.getStart(r),t.end)},e.createTextSpanFromRange=function(t){return e.createTextSpanFromBounds(t.pos,t.end)},e.createTextRangeFromSpan=function(t){return e.createRange(t.start,t.start+t.length)},e.createTextChangeFromStartLength=function(t,r,n){return X(e.createTextSpan(t,r),n)},e.createTextChange=X,e.typeKeywords=[131,129,160,134,95,138,141,144,104,148,149,146,152,153,110,114,155,156,157],e.isTypeKeyword=function(t){return e.contains(e.typeKeywords,t)},e.isTypeKeywordToken=Y,e.isTypeKeywordTokenOrIdentifier=function(t){return Y(t)||e.isIdentifier(t)&&"type"===t.text},e.isExternalModuleSymbol=function(e){return!!(1536&e.flags)&&34===e.name.charCodeAt(0)},e.nodeSeenTracker=function(){var t=[];return function(r){var n=e.getNodeId(r);return!t[n]&&(t[n]=!0)}},e.getSnapshotText=function(e){return e.getText(0,e.getLength())},e.repeatString=function(e,t){for(var r="",n=0;n<t;n++)r+=e;return r},e.skipConstraint=function(e){return e.isTypeParameter()&&e.getConstraint()||e},e.getNameFromPropertyName=function(t){return 164===t.kind?e.isStringOrNumericLiteralLike(t.expression)?t.expression.text:void 0:e.isPrivateIdentifier(t)?e.idText(t):e.getTextOfIdentifierOrLiteral(t)},e.programContainsModules=function(e){return e.getSourceFiles().some((function(t){return!(t.isDeclarationFile||e.isSourceFileFromExternalLibrary(t)||!t.externalModuleIndicator&&!t.commonJsModuleIndicator)}))},e.programContainsEsModules=function(e){return e.getSourceFiles().some((function(t){return!t.isDeclarationFile&&!e.isSourceFileFromExternalLibrary(t)&&!!t.externalModuleIndicator}))},e.compilerOptionsIndicateEsModules=function(t){return!!t.module||e.getEmitScriptTarget(t)>=2||!!t.noEmit},e.createModuleSpecifierResolutionHost=Z,e.getModuleSpecifierResolverHost=$,e.moduleResolutionRespectsExports=function(t){return t>=e.ModuleResolutionKind.Node16&&t<=e.ModuleResolutionKind.NodeNext},e.moduleResolutionUsesNodeModules=function(t){return t===e.ModuleResolutionKind.NodeJs||t>=e.ModuleResolutionKind.Node16&&t<=e.ModuleResolutionKind.NodeNext},e.makeImportIfNecessary=function(e,t,r,n){return e||t&&t.length?ee(e,t,r,n):void 0},e.makeImport=ee,e.makeStringLiteral=te,function(e){e[e.Single=0]="Single",e[e.Double=1]="Double"}(e.QuotePreference||(e.QuotePreference={})),e.quotePreferenceFromString=re,e.getQuotePreference=ne,e.getQuoteFromPreference=function(t){switch(t){case 0:return"'";case 1:return'"';default:return e.Debug.assertNever(t)}},e.symbolNameNoDefault=function(t){var r=ie(t);return void 0===r?void 0:e.unescapeLeadingUnderscores(r)},e.symbolEscapedNameNoDefault=ie,e.isModuleSpecifierLike=function(t){return e.isStringLiteralLike(t)&&(e.isExternalModuleReference(t.parent)||e.isImportDeclaration(t.parent)||e.isRequireCall(t.parent,!1)&&t.parent.arguments[0]===t||e.isImportCall(t.parent)&&t.parent.arguments[0]===t)},e.isObjectBindingElementWithoutPropertyName=function(t){return e.isBindingElement(t)&&e.isObjectBindingPattern(t.parent)&&e.isIdentifier(t.name)&&!t.propertyName},e.getPropertySymbolFromBindingElement=function(e,t){var r=e.getTypeAtLocation(t.parent);return r&&e.getPropertyOfType(r,t.name.text)},e.getParentNodeInSpan=function(t,r,n){if(t)for(;t.parent;){if(e.isSourceFile(t.parent)||!ae(n,t.parent,r))return t;t=t.parent}},e.findModifier=function(t,r){return e.canHaveModifiers(t)?e.find(t.modifiers,(function(e){return e.kind===r})):void 0},e.insertImports=function(t,r,n,i){var a=240===(e.isArray(n)?n[0]:n).kind?e.isRequireVariableStatement:e.isAnyImportSyntax,o=e.filter(r.statements,a),s=e.isArray(n)?e.stableSort(n,e.OrganizeImports.compareImportsOrRequireStatements):[n];if(o.length)if(o&&e.OrganizeImports.importsAreSorted(o))for(var c=0,u=s;c<u.length;c++){var l=u[c],_=e.OrganizeImports.getImportDeclarationInsertionIndex(o,l);if(0===_){var d=o[0]===r.statements[0]?{leadingTriviaOption:e.textChanges.LeadingTriviaOption.Exclude}:{};t.insertNodeBefore(r,o[0],l,!1,d)}else{var p=o[_-1];t.insertNodeAfter(r,p,l)}}else{var f=e.lastOrUndefined(o);f?t.insertNodesAfter(r,f,s):t.insertNodesAtTopOfFile(r,s,i)}else t.insertNodesAtTopOfFile(r,s,i)},e.getTypeKeywordOfTypeOnlyImport=function(t,r){return e.Debug.assert(t.isTypeOnly),e.cast(t.getChildAt(0,r),Y)},e.textSpansEqual=oe,e.documentSpansEqual=function(e,t){return e.fileName===t.fileName&&oe(e.textSpan,t.textSpan)},e.forEachUnique=function(e,t){if(e)for(var r=0;r<e.length;r++)if(e.indexOf(e[r])===r){var n=t(e[r],r);if(n)return n}},e.isTextWhiteSpaceLike=function(t,r,n){for(var i=r;i<n;i++)if(!e.isWhiteSpaceLike(t.charCodeAt(i)))return!1;return!0},e.getMappedLocation=se,e.getMappedDocumentSpan=function(e,t,r){var n=e.fileName,i=e.textSpan,a=se({fileName:n,pos:i.start},t,r);if(a){var o=se({fileName:n,pos:i.start+i.length},t,r),s=o?o.pos-a.pos:i.length;return{fileName:a.fileName,textSpan:{start:a.pos,length:s},originalFileName:e.fileName,originalTextSpan:e.textSpan,contextSpan:ce(e,t,r),originalContextSpan:e.contextSpan}}},e.getMappedContextSpan=ce,e.isFirstDeclarationOfSymbolParameter=ue;var le=function(){var t,r,n,i,a=10*e.defaultMaximumTruncationLength;u();var o=function(t){return c(t,e.SymbolDisplayPartKind.text)};return{displayParts:function(){var r=t.length&&t[t.length-1].text;return i>a&&r&&"..."!==r&&(e.isWhiteSpaceLike(r.charCodeAt(r.length-1))||t.push(de(" ",e.SymbolDisplayPartKind.space)),t.push(de("...",e.SymbolDisplayPartKind.punctuation))),t},writeKeyword:function(t){return c(t,e.SymbolDisplayPartKind.keyword)},writeOperator:function(t){return c(t,e.SymbolDisplayPartKind.operator)},writePunctuation:function(t){return c(t,e.SymbolDisplayPartKind.punctuation)},writeTrailingSemicolon:function(t){return c(t,e.SymbolDisplayPartKind.punctuation)},writeSpace:function(t){return c(t,e.SymbolDisplayPartKind.space)},writeStringLiteral:function(t){return c(t,e.SymbolDisplayPartKind.stringLiteral)},writeParameter:function(t){return c(t,e.SymbolDisplayPartKind.parameterName)},writeProperty:function(t){return c(t,e.SymbolDisplayPartKind.propertyName)},writeLiteral:function(t){return c(t,e.SymbolDisplayPartKind.stringLiteral)},writeSymbol:function(e,r){if(i>a)return;s(),i+=e.length,t.push(_e(e,r))},writeLine:function(){if(i>a)return;i+=1,t.push(ve()),r=!0},write:o,writeComment:o,getText:function(){return""},getTextPos:function(){return 0},getColumn:function(){return 0},getLine:function(){return 0},isAtStartOfLine:function(){return!1},hasTrailingWhitespace:function(){return!1},hasTrailingComment:function(){return!1},rawWrite:e.notImplemented,getIndent:function(){return n},increaseIndent:function(){n++},decreaseIndent:function(){n--},clear:u,trackSymbol:function(){return!1},reportInaccessibleThisError:e.noop,reportInaccessibleUniqueSymbolError:e.noop,reportPrivateInBaseOfClassExpression:e.noop};function s(){if(!(i>a)&&r){var o=e.getIndentString(n);o&&(i+=o.length,t.push(de(o,e.SymbolDisplayPartKind.space))),r=!1}}function c(e,r){i>a||(s(),i+=e.length,t.push(de(e,r)))}function u(){t=[],r=!0,n=0,i=0}}();function _e(t,r){return de(t,function(t){var r=t.flags;if(3&r)return ue(t)?e.SymbolDisplayPartKind.parameterName:e.SymbolDisplayPartKind.localName;return 4&r||32768&r||65536&r?e.SymbolDisplayPartKind.propertyName:8&r?e.SymbolDisplayPartKind.enumMemberName:16&r?e.SymbolDisplayPartKind.functionName:32&r?e.SymbolDisplayPartKind.className:64&r?e.SymbolDisplayPartKind.interfaceName:384&r?e.SymbolDisplayPartKind.enumName:1536&r?e.SymbolDisplayPartKind.moduleName:8192&r?e.SymbolDisplayPartKind.methodName:262144&r?e.SymbolDisplayPartKind.typeParameterName:524288&r||2097152&r?e.SymbolDisplayPartKind.aliasName:e.SymbolDisplayPartKind.text}(r))}function de(t,r){return{text:t,kind:e.SymbolDisplayPartKind[r]}}function pe(t){return de(e.tokenToString(t),e.SymbolDisplayPartKind.keyword)}function fe(t){return de(t,e.SymbolDisplayPartKind.text)}function ge(t){return de(t,e.SymbolDisplayPartKind.linkText)}function me(t,r){return{text:t,kind:e.SymbolDisplayPartKind[e.SymbolDisplayPartKind.linkName],target:{fileName:e.getSourceFileOfNode(r).fileName,textSpan:G(r)}}}function ye(t){return de(t,e.SymbolDisplayPartKind.link)}e.symbolPart=_e,e.displayPart=de,e.spacePart=function(){return de(" ",e.SymbolDisplayPartKind.space)},e.keywordPart=pe,e.punctuationPart=function(t){return de(e.tokenToString(t),e.SymbolDisplayPartKind.punctuation)},e.operatorPart=function(t){return de(e.tokenToString(t),e.SymbolDisplayPartKind.operator)},e.parameterNamePart=function(t){return de(t,e.SymbolDisplayPartKind.parameterName)},e.propertyNamePart=function(t){return de(t,e.SymbolDisplayPartKind.propertyName)},e.textOrKeywordPart=function(t){var r=e.stringToToken(t);return void 0===r?fe(t):pe(r)},e.textPart=fe,e.typeAliasNamePart=function(t){return de(t,e.SymbolDisplayPartKind.aliasName)},e.typeParameterNamePart=function(t){return de(t,e.SymbolDisplayPartKind.typeParameterName)},e.linkTextPart=ge,e.linkNamePart=me,e.linkPart=ye,e.buildLinkParts=function(t,r){var n,i=e.isJSDocLink(t)?"link":e.isJSDocLinkCode(t)?"linkcode":"linkplain",a=[ye("{@".concat(i," "))];if(t.name){var o=null==r?void 0:r.getSymbolAtLocation(t.name),s=function(e){if(0===e.indexOf("()"))return 2;if("<"!==e[0])return 0;var t=0,r=0;for(;r<e.length;)if("<"===e[r]&&t++,">"===e[r]&&t--,r++,!t)return r;return 0}(t.text),c=e.getTextOfNode(t.name)+t.text.slice(0,s),u=function(e){var t=0;if(124===e.charCodeAt(t++)){for(;t<e.length&&32===e.charCodeAt(t);)t++;return e.slice(t)}return e}(t.text.slice(s)),l=(null==o?void 0:o.valueDeclaration)||(null===(n=null==o?void 0:o.declarations)||void 0===n?void 0:n[0]);l?(a.push(me(c,l)),u&&a.push(ge(u))):a.push(ge(c+(s||0===u.indexOf("://")?"":" ")+u))}else t.text&&a.push(ge(t.text));return a.push(ye("}")),a};function ve(){return de("\n",e.SymbolDisplayPartKind.lineBreak)}function he(e){try{return e(le),le.displayParts()}finally{le.clear()}}function be(e){return 0!=(33554432&e.flags)}function xe(e){return 0!=(2097152&e.flags)}function De(e,t){void 0===t&&(t=!0);var r=e&&Te(e);return r&&!t&&ke(r),r}function Se(t,r,n){var i=n(t);return i?e.setOriginalNode(i,t):i=Te(t,n),i&&!r&&ke(i),i}function Te(t,r){var n=r?function(e){return Se(e,!0,r)}:De,i=r?function(e){return e&&Ee(e,!0,r)}:function(e){return e&&Ce(e)},a=e.visitEachChild(t,n,e.nullTransformationContext,i,n);if(a===t){var o=e.isStringLiteral(t)?e.setOriginalNode(e.factory.createStringLiteralFromNode(t),t):e.isNumericLiteral(t)?e.setOriginalNode(e.factory.createNumericLiteral(t.text,t.numericLiteralFlags),t):e.factory.cloneNode(t);return e.setTextRange(o,t)}return a.parent=void 0,a}function Ce(t,r){return void 0===r&&(r=!0),t&&e.factory.createNodeArray(t.map((function(e){return De(e,r)})),t.hasTrailingComma)}function Ee(t,r,n){return e.factory.createNodeArray(t.map((function(e){return Se(e,r,n)})),t.hasTrailingComma)}function ke(e){Ne(e),Ae(e)}function Ne(e){Fe(e,512,Pe)}function Ae(t){Fe(t,1024,e.getLastChild)}function Fe(t,r,n){e.addEmitFlags(t,r);var i=n(t);i&&Fe(i,r,n)}function Pe(e){return e.forEachChild((function(e){return e}))}function we(t,r,n,i,a){e.forEachLeadingCommentRange(n.text,t.pos,Me(r,n,i,a,e.addSyntheticLeadingComment))}function Ie(t,r,n,i,a){e.forEachTrailingCommentRange(n.text,t.end,Me(r,n,i,a,e.addSyntheticTrailingComment))}function Oe(t,r,n,i,a){e.forEachTrailingCommentRange(n.text,t.pos,Me(r,n,i,a,e.addSyntheticLeadingComment))}function Me(e,t,r,n,i){return function(a,o,s,c){3===s?(a+=2,o-=2):a+=2,i(e,r||s,t.text.slice(a,o),void 0!==n?n:c)}}function Le(t,r){if(e.startsWith(t,r))return 0;var n=t.indexOf(" "+r);return-1===n&&(n=t.indexOf("."+r)),-1===n&&(n=t.indexOf('"'+r)),-1===n?-1:n+1}function Re(e,t){var r=e.parent;switch(r.kind){case 211:return t.getContextualType(r);case 223:var n=r,i=n.left,a=n.operatorToken,o=n.right;return Be(a.kind)?t.getTypeAtLocation(e===o?i:o):t.getContextualType(e);case 292:return r.expression===e?je(r,t):void 0;default:return t.getContextualType(e)}}function Be(e){switch(e){case 36:case 34:case 37:case 35:return!0;default:return!1}}function je(e,t){return t.getTypeAtLocation(e.parent.parent.expression)}function Je(e){return 176===e||177===e||178===e||168===e||170===e}function ze(e){return 259===e||173===e||171===e||174===e||175===e}function Ue(e){return 264===e}function Ke(e){return 240===e||241===e||243===e||248===e||249===e||250===e||254===e||256===e||169===e||262===e||269===e||268===e||275===e||267===e||274===e}function Ve(t){var r=0,n=0;return e.forEachChild(t,(function i(a){if(Ke(a.kind))26===(null==(o=a.getLastToken(t))?void 0:o.kind)?r++:n++;else if(Je(a.kind)){var o;if(26===(null==(o=a.getLastToken(t))?void 0:o.kind))r++;else if(o&&27!==o.kind){e.getLineAndCharacterOfPosition(t,o.getStart(t)).line!==e.getLineAndCharacterOfPosition(t,e.getSpanOfTokenAtPosition(t,o.end).start).line&&n++}}return r+n>=5||e.forEachChild(a,i)})),0===r&&n<=1||r/n>.2}function qe(e,t){return He(e,e.fileExists,t)}function We(e){try{return e()}catch(t){return}}function He(e,t){for(var r=[],n=2;n<arguments.length;n++)r[n-2]=arguments[n];return We((function(){return t&&t.apply(e,r)}))}function Ge(t,r){if(!r.fileExists)return[];var n=[];return e.forEachAncestorDirectory(e.getDirectoryPath(t),(function(t){var i=e.combinePaths(t,"package.json");if(r.fileExists(i)){var a=Qe(i,r);a&&n.push(a)}})),n}function Qe(t,r){if(r.readFile){var n=function(e){try{return JSON.parse(e)}catch(t){return}}(r.readFile(t)||""),i={};if(n)for(var a=0,s=["dependencies","devDependencies","optionalDependencies","peerDependencies"];a<s.length;a++){var c=s[a],u=n[c];if(u){var l=new e.Map;for(var _ in u)l.set(_,u[_]);i[c]=l}}var d=[[1,i.dependencies],[2,i.devDependencies],[8,i.optionalDependencies],[4,i.peerDependencies]];return o(o({},i),{parseable:!!n,fileName:t,get:p,has:function(e,t){return!!p(e,t)}})}function p(e,t){void 0===t&&(t=15);for(var r=0,n=d;r<n.length;r++){var i=n[r],a=i[0],o=i[1];if(o&&t&a){var s=o.get(e);if(void 0!==s)return s}}}}function Xe(t){return e.some(t.imports,(function(t){var r=t.text;return e.JsTyping.nodeCoreModules.has(r)}))}function Ye(e){return void 0!==e.file&&void 0!==e.start&&void 0!==e.length}function Ze(e){return!(33554432&e.flags||"export="!==e.escapedName&&"default"!==e.escapedName)}function $e(t){return e.firstDefined(t.declarations,(function(t){var r;return e.isExportAssignment(t)?null===(r=e.tryCast(e.skipOuterExpressions(t.expression),e.isIdentifier))||void 0===r?void 0:r.text:void 0}))}function et(t){var r;return e.Debug.checkDefined(t.parent,"Symbol parent was undefined. Flags: ".concat(e.Debug.formatSymbolFlags(t.flags),". ")+"Declarations: ".concat(null===(r=t.declarations)||void 0===r?void 0:r.map((function(t){var r=e.Debug.formatSyntaxKind(t.kind),n=e.isInJSFile(t),i=t.expression;return(n?"[JS]":"")+r+(i?" (expression: ".concat(e.Debug.formatSyntaxKind(i.kind),")"):"")})).join(", "),"."))}function tt(t){var r=t.getSourceFile();return!(!r.externalModuleIndicator&&!r.commonJsModuleIndicator)&&(e.isInJSFile(t)||!e.findAncestor(t,e.isGlobalScopeAugmentation))}e.getNewLineOrDefaultFromHost=function(e,t){var r;return(null==t?void 0:t.newLineCharacter)||(null===(r=e.getNewLine)||void 0===r?void 0:r.call(e))||"\r\n"},e.lineBreakPart=ve,e.mapToDisplayParts=he,e.typeToDisplayParts=function(e,t,r,n){return void 0===n&&(n=0),he((function(i){e.writeType(t,r,17408|n,i)}))},e.symbolToDisplayParts=function(e,t,r,n,i){return void 0===i&&(i=0),he((function(a){e.writeSymbol(t,r,n,8|i,a)}))},e.signatureToDisplayParts=function(e,t,r,n){return void 0===n&&(n=0),n|=25632,he((function(i){e.writeSignature(t,r,n,void 0,i)}))},e.nodeToDisplayParts=function(t,r){var n=r.getSourceFile();return he((function(r){e.createPrinter({removeComments:!0,omitTrailingSemicolon:!0}).writeNode(4,t,n,r)}))},e.isImportOrExportSpecifierName=function(t){return!!t.parent&&e.isImportOrExportSpecifier(t.parent)&&t.parent.propertyName===t},e.getScriptKind=function(t,r){return e.ensureScriptKind(t,r.getScriptKind&&r.getScriptKind(t))},e.getSymbolTarget=function(t,r){for(var n=t;xe(n)||be(n)&&n.target;)n=be(n)&&n.target?n.target:e.skipAlias(n,r);return n},e.getUniqueSymbolId=function(t,r){return e.getSymbolId(e.skipAlias(t,r))},e.getFirstNonSpaceCharacterPosition=function(t,r){for(;e.isWhiteSpaceLike(t.charCodeAt(r));)r+=1;return r},e.getPrecedingNonSpaceCharacterPosition=function(t,r){for(;r>-1&&e.isWhiteSpaceSingleLine(t.charCodeAt(r));)r-=1;return r+1},e.getSynthesizedDeepClone=De,e.getSynthesizedDeepCloneWithReplacements=Se,e.getSynthesizedDeepClones=Ce,e.getSynthesizedDeepClonesWithReplacements=Ee,e.suppressLeadingAndTrailingTrivia=ke,e.suppressLeadingTrivia=Ne,e.suppressTrailingTrivia=Ae,e.copyComments=function(e,t){var r=e.getSourceFile();!function(e,t){for(var r=e.getFullStart(),n=e.getStart(),i=r;i<n;i++)if(10===t.charCodeAt(i))return!0;return!1}(e,r.text)?Oe(e,t,r):we(e,t,r),Ie(e,t,r)},e.getUniqueName=function(t,r){for(var n=t,i=1;!e.isFileLevelUniqueName(r,n);i++)n="".concat(t,"_").concat(i);return n},e.getRenameLocation=function(t,r,n,i){for(var a=0,o=-1,s=0,c=t;s<c.length;s++){var u=c[s],l=u.fileName,_=u.textChanges;e.Debug.assert(l===r);for(var d=0,p=_;d<p.length;d++){var f=p[d],g=f.span,m=f.newText,y=Le(m,e.escapeString(n));if(-1!==y&&(o=g.start+a+y,!i))return o;a+=m.length-g.length}}return e.Debug.assert(i),e.Debug.assert(o>=0),o},e.copyLeadingComments=we,e.copyTrailingComments=Ie,e.copyTrailingAsLeadingComments=Oe,e.needsParentheses=function(t){return e.isBinaryExpression(t)&&27===t.operatorToken.kind||e.isObjectLiteralExpression(t)||e.isAsExpression(t)&&e.isObjectLiteralExpression(t.expression)},e.getContextualTypeFromParent=Re,e.quote=function(t,r,n){var i=ne(t,r),a=JSON.stringify(n);return 0===i?"'".concat(e.stripQuotes(a).replace(/'/g,"\\'").replace(/\\"/g,'"'),"'"):a},e.isEqualityOperatorKind=Be,e.isStringLiteralOrTemplate=function(e){switch(e.kind){case 10:case 14:case 225:case 212:return!0;default:return!1}},e.hasIndexSignature=function(e){return!!e.getStringIndexType()||!!e.getNumberIndexType()},e.getSwitchedType=je,e.ANONYMOUS="anonymous function",e.getTypeNodeIfAccessible=function(e,t,r,n){var i=r.getTypeChecker(),a=!0,o=function(){return a=!1},s=i.typeToTypeNode(e,t,1,{trackSymbol:function(e,t,r){return!(a=a&&0===i.isSymbolAccessible(e,t,r,!1).accessibility)},reportInaccessibleThisError:o,reportPrivateInBaseOfClassExpression:o,reportInaccessibleUniqueSymbolError:o,moduleResolverHost:$(r,n)});return a?s:void 0},e.syntaxRequiresTrailingSemicolonOrASI=Ke,e.syntaxMayBeASICandidate=e.or(Je,ze,Ue,Ke),e.positionIsASICandidate=function(t,r,n){var i=e.findAncestor(r,(function(r){return r.end!==t?"quit":e.syntaxMayBeASICandidate(r.kind)}));return!!i&&function(t,r){var n=t.getLastToken(r);if(n&&26===n.kind)return!1;if(Je(t.kind)){if(n&&27===n.kind)return!1}else if(Ue(t.kind)){if((i=e.last(t.getChildren(r)))&&e.isModuleBlock(i))return!1}else if(ze(t.kind)){var i;if((i=e.last(t.getChildren(r)))&&e.isFunctionBlock(i))return!1}else if(!Ke(t.kind))return!1;if(243===t.kind)return!0;var a=M(t,e.findAncestor(t,(function(e){return!e.parent})),r);return!a||19===a.kind||r.getLineAndCharacterOfPosition(t.getEnd()).line!==r.getLineAndCharacterOfPosition(a.getStart(r)).line}(i,n)},e.probablyUsesSemicolons=Ve,e.tryGetDirectories=function(e,t){return He(e,e.getDirectories,t)||[]},e.tryReadDirectory=function(t,r,n,i,a){return He(t,t.readDirectory,r,n,i,a)||e.emptyArray},e.tryFileExists=qe,e.tryDirectoryExists=function(t,r){return We((function(){return e.directoryProbablyExists(r,t)}))||!1},e.tryAndIgnoreErrors=We,e.tryIOAndConsumeErrors=He,e.findPackageJsons=function(t,r,n){var i=[];return e.forEachAncestorDirectory(t,(function(t){if(t===n)return!0;var a=e.combinePaths(t,"package.json");qe(r,a)&&i.push(a)})),i},e.findPackageJson=function(t,r){var n;return e.forEachAncestorDirectory(t,(function(t){return"node_modules"===t||(!!(n=e.findConfigFile(t,(function(e){return qe(r,e)}),"package.json"))||void 0)})),n},e.getPackageJsonsVisibleToFile=Ge,e.createPackageJsonInfo=Qe,e.createPackageJsonImportFilter=function(t,r,n){var i,a=(n.getPackageJsonsVisibleToFile&&n.getPackageJsonsVisibleToFile(t.fileName)||Ge(t.fileName,n)).filter((function(e){return e.parseable}));return{allowsImportingAmbientModule:function(t,r){if(!a.length||!t.valueDeclaration)return!0;var n=c(t.valueDeclaration.getSourceFile().fileName,r);if(void 0===n)return!0;var i=e.stripQuotes(t.getName());if(s(i))return!0;return o(n)||o(i)},allowsImportingSourceFile:function(e,t){if(!a.length)return!0;var r=c(e.fileName,t);if(!r)return!0;return o(r)},allowsImportingSpecifier:function(t){if(!a.length||s(t))return!0;if(e.pathIsRelative(t)||e.isRootedDiskPath(t))return!0;return o(t)}};function o(t){for(var r=u(t),n=0,i=a;n<i.length;n++){var o=i[n];if(o.has(r)||o.has(e.getTypesPackageName(r)))return!0}return!1}function s(r){return!!(e.isSourceFileJS(t)&&e.JsTyping.nodeCoreModules.has(r)&&(void 0===i&&(i=Xe(t)),i))}function c(i,a){if(e.stringContains(i,"node_modules")){var o=e.moduleSpecifiers.getNodeModulesPackageName(n.getCompilationSettings(),t,i,a,r);if(o)return e.pathIsRelative(o)||e.isRootedDiskPath(o)?void 0:u(o)}}function u(t){var r=e.getPathComponents(e.getPackageNameFromTypesPackageName(t)).slice(1);return e.startsWith(r[0],"@")?"".concat(r[0],"/").concat(r[1]):r[0]}},e.consumesNodeCoreModules=Xe,e.isInsideNodeModules=function(t){return e.contains(e.getPathComponents(t),"node_modules")},e.isDiagnosticWithLocation=Ye,e.findDiagnosticForNode=function(t,r){var n=G(t),i=e.binarySearchKey(r,n,e.identity,e.compareTextSpans);if(i>=0){var a=r[i];return e.Debug.assertEqual(a.file,t.getSourceFile(),"Diagnostics proided to 'findDiagnosticForNode' must be from a single SourceFile"),e.cast(a,Ye)}},e.getDiagnosticsWithinSpan=function(t,r){var n,i=e.binarySearchKey(r,t.start,(function(e){return e.start}),e.compareValues);for(i<0&&(i=~i);(null===(n=r[i-1])||void 0===n?void 0:n.start)===t.start;)i--;for(var a=[],o=e.textSpanEnd(t);;){var s=e.tryCast(r[i],Ye);if(!s||s.start>o)break;e.textSpanContainsTextSpan(t,s)&&a.push(s),i++}return a},e.getRefactorContextSpan=function(t){var r=t.startPosition,n=t.endPosition;return e.createTextSpanFromBounds(r,void 0===n?r:n)},e.getFixableErrorSpanExpression=function(t,r){var n=I(t,r.start);return e.findAncestor(n,(function(n){return n.getStart(t)<r.start||n.getEnd()>e.textSpanEnd(r)?"quit":e.isExpression(n)&&oe(r,G(n,t))}))},e.mapOneOrMany=function(t,r,n){return void 0===n&&(n=e.identity),t?e.isArray(t)?n(e.map(t,r)):r(t,0):void 0},e.firstOrOnly=function(t){return e.isArray(t)?e.first(t):t},e.getNamesForExportedSymbol=function(t,r){if(Ze(t)){var n=$e(t);if(n)return n;var i=e.codefix.moduleSymbolToValidIdentifier(et(t),r,!1),a=e.codefix.moduleSymbolToValidIdentifier(et(t),r,!0);return i===a?i:[i,a]}return t.name},e.getNameForExportedSymbol=function(t,r,n){return Ze(t)?$e(t)||e.codefix.moduleSymbolToValidIdentifier(et(t),r,!!n):t.name},e.stringContainsAt=function(e,t,r){var n=t.length;if(n+r>e.length)return!1;for(var i=0;i<n;i++)if(t.charCodeAt(i)!==e.charCodeAt(i+r))return!1;return!0},e.startsWithUnderscore=function(e){return 95===e.charCodeAt(0)},e.isGlobalDeclaration=function(e){return!tt(e)},e.isNonGlobalDeclaration=tt,e.isDeprecatedDeclaration=function(t){return!!(8192&e.getCombinedNodeFlagsAlwaysIncludeJSDoc(t))},e.shouldUseUriStyleNodeCoreModules=function(t,r){var n=e.firstDefined(t.imports,(function(t){if(e.JsTyping.nodeCoreModules.has(t.text))return e.startsWith(t.text,"node:")}));return null!=n?n:r.usesUriStyleNodeCoreModules},e.getNewLineKind=function(e){return"\n"===e?1:0},e.diagnosticToString=function(t){return e.isArray(t)?e.formatStringFromArgs(e.getLocaleSpecificMessage(t[0]),t.slice(1)):e.getLocaleSpecificMessage(t)},e.getFormatCodeSettingsForWriting=function(t,r){var n=t.options,i=!n.semicolons||n.semicolons===e.SemicolonPreference.Ignore,a=n.semicolons===e.SemicolonPreference.Remove||i&&!Ve(r);return o(o({},n),{semicolons:a?e.SemicolonPreference.Remove:e.SemicolonPreference.Ignore})},e.jsxModeNeedsExplicitImport=function(e){return 2===e||3===e},e.isSourceFileFromLibrary=function(e,t){return e.isSourceFileFromExternalLibrary(t)||e.isSourceFileDefaultLibrary(t)}}(_||(_={})),function(e){function t(t){var r,n=1,i=e.createMultiMap(),a=new e.Map,o=new e.Map,s={isUsableByFile:function(e){return e===r},isEmpty:function(){return!i.size},clear:function(){i.clear(),a.clear(),r=void 0},add:function(t,c,u,l,_,d,p,f){var g;if(t!==r&&(s.clear(),r=t),_){var m=e.getNodeModulePathParts(_.fileName);if(m){var y=m.topLevelNodeModulesIndex,v=m.topLevelPackageNameIndex,h=m.packageRootIndex;if(g=e.unmangleScopedPackageName(e.getPackageNameFromTypesPackageName(_.fileName.substring(v+1,h))),e.startsWith(t,_.path.substring(0,y))){var b=o.get(g),x=_.fileName.substring(0,v+1);if(b)y>b.indexOf(e.nodeModulesPathPart)&&o.set(g,x);else o.set(g,x)}}}var D=1===d&&e.getLocalSymbolForExportDefault(c)||c,S=0===d||e.isExternalModuleSymbol(D)?e.unescapeLeadingUnderscores(u):e.getNamesForExportedSymbol(D,void 0),T="string"==typeof S?S:S[0],C="string"==typeof S?void 0:S[1],E=e.stripQuotes(l.name),k=n++,N=e.skipAlias(c,f),A=33554432&c.flags?void 0:c,F=33554432&l.flags?void 0:l;A&&F||a.set(k,[c,l]),i.add(function(t,r,n,i){var a=n||"";return"".concat(t,"|").concat(e.getSymbolId(e.skipAlias(r,i)),"|").concat(a)}(T,c,e.isExternalModuleNameRelative(E)?void 0:E,f),{id:k,symbolTableKey:u,symbolName:T,capitalizedSymbolName:C,moduleName:E,moduleFile:_,moduleFileName:null==_?void 0:_.fileName,packageName:g,exportKind:d,targetFlags:N.flags,isFromPackageJson:p,symbol:A,moduleSymbol:F})},get:function(e,t){if(e===r){var n=i.get(t);return null==n?void 0:n.map(c)}},search:function(n,a,s,u){if(n===r)return e.forEachEntry(i,(function(r,n){var i=function(e){var t=e.substring(0,e.indexOf("|")),r=e.substring(e.lastIndexOf("|")+1),n=""===r?void 0:r;return{symbolName:t,ambientModuleName:n}}(n),l=i.symbolName,_=i.ambientModuleName,d=a&&r[0].capitalizedSymbolName||l;if(s(d,r[0].targetFlags)){var p=r.map(c).filter((function(n,i){return function(r,n){if(!n||!r.moduleFileName)return!0;var i=t.getGlobalTypingsCacheLocation();if(i&&e.startsWith(r.moduleFileName,i))return!0;var a=o.get(n);return!a||e.startsWith(r.moduleFileName,a)}(n,r[i].packageName)}));if(p.length){var f=u(p,d,!!_,n);if(void 0!==f)return f}}}))},releaseSymbols:function(){a.clear()},onFileChanged:function(t,n,i){return(!u(t)||!u(n))&&(r&&r!==n.path||i&&e.consumesNodeCoreModules(t)!==e.consumesNodeCoreModules(n)||!e.arrayIsEqualTo(t.moduleAugmentations,n.moduleAugmentations)||!function(t,r){if(!e.arrayIsEqualTo(t.ambientModuleNames,r.ambientModuleNames))return!1;for(var n=-1,i=-1,a=function(a){var o=function(t){return e.isNonGlobalAmbientModule(t)&&t.name.text===a};if(n=e.findIndex(t.statements,o,n+1),i=e.findIndex(r.statements,o,i+1),t.statements[n]!==r.statements[i])return{value:!1}},o=0,s=r.ambientModuleNames;o<s.length;o++){var c=a(s[o]);if("object"==typeof c)return c.value}return!0}(t,n)?(s.clear(),!0):(r=n.path,!1))}};return e.Debug.isDebugging&&Object.defineProperty(s,"__cache",{get:function(){return i}}),s;function c(r){if(r.symbol&&r.moduleSymbol)return r;var n=r.id,i=r.exportKind,o=r.targetFlags,s=r.isFromPackageJson,c=r.moduleFileName,u=a.get(n)||e.emptyArray,l=u[0],_=u[1];if(l&&_)return{symbol:l,moduleSymbol:_,moduleFileName:c,exportKind:i,targetFlags:o,isFromPackageJson:s};var d=(s?t.getPackageJsonAutoImportProvider():t.getCurrentProgram()).getTypeChecker(),p=r.moduleSymbol||_||e.Debug.checkDefined(r.moduleFile?d.getMergedSymbol(r.moduleFile.symbol):d.tryFindAmbientModule(r.moduleName)),f=r.symbol||l||e.Debug.checkDefined(2===i?d.resolveExternalModuleSymbol(p):d.tryGetMemberInModuleExportsAndProperties(e.unescapeLeadingUnderscores(r.symbolTableKey),p),"Could not find symbol '".concat(r.symbolName,"' by key '").concat(r.symbolTableKey,"' in module ").concat(p.name));return a.set(n,[f,p]),{symbol:f,moduleSymbol:p,moduleFileName:c,exportKind:i,targetFlags:o,isFromPackageJson:s}}function u(e){return!(e.commonJsModuleIndicator||e.externalModuleIndicator||e.moduleAugmentations||e.ambientModuleNames)}}function r(t,r,i,a,o){var s,c,u=e.hostUsesCaseSensitiveFileNames(r),l=i.autoImportFileExcludePatterns&&e.mapDefined(i.autoImportFileExcludePatterns,(function(t){var r=e.getPatternFromSpec(t,"","exclude");return r?e.getRegexFromPattern(r,u):void 0}));n(t.getTypeChecker(),t.getSourceFiles(),l,(function(e,r){return o(e,r,t,!1)}));var _=a&&(null===(s=r.getPackageJsonAutoImportProvider)||void 0===s?void 0:s.call(r));if(_){var d=e.timestamp();n(_.getTypeChecker(),_.getSourceFiles(),l,(function(e,t){return o(e,t,_,!0)})),null===(c=r.log)||void 0===c||c.call(r,"forEachExternalModuleToImportFrom autoImportProvider: ".concat(e.timestamp()-d))}}function n(t,r,n,i){for(var a,o=function(e){return null==n?void 0:n.some((function(t){return t.test(e)}))},s=0,c=t.getAmbientModules();s<c.length;s++){var u=c[s];e.stringContains(u.name,"*")||n&&(null===(a=u.declarations)||void 0===a?void 0:a.every((function(e){return o(e.getSourceFile().fileName)})))||i(u,void 0)}for(var l=0,_=r;l<_.length;l++){var d=_[l];e.isExternalOrCommonJsModule(d)&&!o(d.fileName)&&i(t.getMergedSymbol(d.symbol),d)}}function i(e,t,r){var n=function(e,t){var r=t.resolveExternalModuleSymbol(e);if(r!==e)return{symbol:r,exportKind:2};var n=t.tryGetMemberInModuleExports("default",e);if(n)return{symbol:n,exportKind:1}}(e,t);if(n){var i=n.symbol,a=n.exportKind,c=s(i,t,r);return c&&o({symbol:i,exportKind:a},c)}}function a(t,r){return!(r.isUndefinedSymbol(t)||r.isUnknownSymbol(t)||e.isKnownSymbol(t)||e.isPrivateIdentifierSymbol(t))}function s(t,r,n){var i=e.getLocalSymbolForExportDefault(t);if(i)return{symbolForMeaning:i,name:i.name};var a,o=(a=t).declarations&&e.firstDefined(a.declarations,(function(t){var r;return e.isExportAssignment(t)?null===(r=e.tryCast(e.skipOuterExpressions(t.expression),e.isIdentifier))||void 0===r?void 0:r.text:e.isExportSpecifier(t)?(e.Debug.assert("default"===t.name.text,"Expected the specifier to be a default export"),t.propertyName&&t.propertyName.text):void 0}));if(void 0!==o)return{symbolForMeaning:t,name:o};if(2097152&t.flags){var c=r.getImmediateAliasedSymbol(t);if(c&&c.parent)return s(c,r,n)}return"default"!==t.escapedName&&"export="!==t.escapedName?{symbolForMeaning:t,name:t.getName()}:{symbolForMeaning:t,name:e.getNameForExportedSymbol(t,n.target)}}!function(e){e[e.Named=0]="Named",e[e.Default=1]="Default",e[e.Namespace=2]="Namespace",e[e.CommonJS=3]="CommonJS"}(e.ImportKind||(e.ImportKind={})),function(e){e[e.Named=0]="Named",e[e.Default=1]="Default",e[e.ExportEquals=2]="ExportEquals",e[e.UMD=3]="UMD"}(e.ExportKind||(e.ExportKind={})),e.createCacheableExportInfoMap=t,e.isImportableFile=function(t,r,n,i,a,o,s){var c;if(r===n)return!1;var u=null==s?void 0:s.get(r.path,n.path,i,{});if(void 0!==(null==u?void 0:u.isBlockedByPackageJsonDependencies))return!u.isBlockedByPackageJsonDependencies;var l=e.hostGetCanonicalFileName(o),_=null===(c=o.getGlobalTypingsCacheLocation)||void 0===c?void 0:c.call(o),d=!!e.moduleSpecifiers.forEachFileNameOfModule(r.fileName,n.fileName,o,!1,(function(i){var a=t.getSourceFile(i);return(a===n||!a)&&function(t,r,n,i){var a=e.forEachAncestorDirectory(r,(function(t){return"node_modules"===e.getBaseFileName(t)?t:void 0})),o=a&&e.getDirectoryPath(n(a));return void 0===o||e.startsWith(n(t),o)||!!i&&e.startsWith(n(i),o)}(r.fileName,i,l,_)}));if(a){var p=d&&a.allowsImportingSourceFile(n,o);return null==s||s.setBlockedByPackageJsonDependencies(r.path,n.path,i,{},!p),p}return d},e.forEachExternalModuleToImportFrom=r,e.getExportInfoMap=function(n,o,s,c,u){var l,_,d,p,f,g=e.timestamp();null===(l=o.getPackageJsonAutoImportProvider)||void 0===l||l.call(o);var m=(null===(_=o.getCachedExportInfoMap)||void 0===_?void 0:_.call(o))||t({getCurrentProgram:function(){return s},getPackageJsonAutoImportProvider:function(){var e;return null===(e=o.getPackageJsonAutoImportProvider)||void 0===e?void 0:e.call(o)},getGlobalTypingsCacheLocation:function(){var e;return null===(e=o.getGlobalTypingsCacheLocation)||void 0===e?void 0:e.call(o)}});if(m.isUsableByFile(n.path))return null===(d=o.log)||void 0===d||d.call(o,"getExportInfoMap: cache hit"),m;null===(p=o.log)||void 0===p||p.call(o,"getExportInfoMap: cache miss or empty; calculating new results");var y=s.getCompilerOptions(),v=0;try{r(s,o,c,!0,(function(t,r,o,s){++v%100==0&&(null==u||u.throwIfCancellationRequested());var c=new e.Map,l=o.getTypeChecker(),_=i(t,l,y);_&&a(_.symbol,l)&&m.add(n.path,_.symbol,1===_.exportKind?"default":"export=",t,r,_.exportKind,s,l),l.forEachExportAndPropertyOfModule(t,(function(i,o){i!==(null==_?void 0:_.symbol)&&a(i,l)&&e.addToSeen(c,o)&&m.add(n.path,i,o,t,r,0,s,l)}))}))}catch(h){throw m.clear(),h}return null===(f=o.log)||void 0===f||f.call(o,"getExportInfoMap: done in ".concat(e.timestamp()-g," ms")),m},e.getDefaultLikeExportInfo=i}(_||(_={})),function(e){e.createClassifier=function(){var o=e.createScanner(99,!1);function s(i,s,c){var u=0,l=0,_=[],d=function(t){switch(t){case 3:return{prefix:'"\\\n'};case 2:return{prefix:"'\\\n"};case 1:return{prefix:"/*\n"};case 4:return{prefix:"`\n"};case 5:return{prefix:"}\n",pushTemplate:!0};case 6:return{prefix:"",pushTemplate:!0};case 0:return{prefix:""};default:return e.Debug.assertNever(t)}}(s),p=d.prefix,f=d.pushTemplate;i=p+i;var g=p.length;f&&_.push(15),o.setText(i);var m=0,y=[],v=0;do{u=o.scan(),e.isTrivia(u)||(x(),l=u);var h=o.getTextPos();if(n(o.getTokenPos(),h,g,a(u),y),h>=i.length){var b=r(o,u,e.lastOrUndefined(_));void 0!==b&&(m=b)}}while(1!==u);function x(){switch(u){case 43:case 68:t[l]||13!==o.reScanSlashToken()||(u=13);break;case 29:79===l&&v++;break;case 31:v>0&&v--;break;case 131:case 152:case 148:case 134:case 153:v>0&&!c&&(u=79);break;case 15:_.push(u);break;case 18:_.length>0&&_.push(u);break;case 19:if(_.length>0){var r=e.lastOrUndefined(_);15===r?17===(u=o.reScanTemplateToken(!1))?_.pop():e.Debug.assertEqual(u,16,"Should have been a template middle."):(e.Debug.assertEqual(r,18,"Should have been an open brace"),_.pop())}break;default:if(!e.isKeyword(u))break;(24===l||e.isKeyword(l)&&e.isKeyword(u)&&!function(t,r){if(!e.isAccessibilityModifier(t))return!0;switch(r){case 137:case 151:case 135:case 124:case 127:return!0;default:return!1}}(l,u))&&(u=79)}}return{endOfLineState:m,spans:y}}return{getClassificationsForLine:function(t,r,n){return function(t,r){for(var n=[],a=t.spans,o=0,s=0;s<a.length;s+=3){var c=a[s],u=a[s+1],l=a[s+2];if(o>=0){var _=c-o;_>0&&n.push({length:_,classification:e.TokenClass.Whitespace})}n.push({length:u,classification:i(l)}),o=c+u}var d=r.length-o;d>0&&n.push({length:d,classification:e.TokenClass.Whitespace});return{entries:n,finalLexState:t.endOfLineState}}(s(t,r,n),t)},getEncodedLexicalClassifications:s}};var t=e.arrayToNumericMap([79,10,8,9,13,108,45,46,21,23,19,110,95],(function(e){return e}),(function(){return!0}));function r(t,r,n){switch(r){case 10:if(!t.isUnterminated())return;for(var i=t.getTokenText(),a=i.length-1,o=0;92===i.charCodeAt(a-o);)o++;if(0==(1&o))return;return 34===i.charCodeAt(0)?3:2;case 3:return t.isUnterminated()?1:void 0;default:if(e.isTemplateLiteralKind(r)){if(!t.isUnterminated())return;switch(r){case 17:return 5;case 14:return 4;default:return e.Debug.fail("Only 'NoSubstitutionTemplateLiteral's and 'TemplateTail's can be unterminated; got SyntaxKind #"+r)}}return 15===n?6:void 0}}function n(e,t,r,n,i){if(8!==n){0===e&&r>0&&(e+=r);var a=t-e;a>0&&i.push(e-r,a,n)}}function i(t){switch(t){case 1:return e.TokenClass.Comment;case 3:return e.TokenClass.Keyword;case 4:return e.TokenClass.NumberLiteral;case 25:return e.TokenClass.BigIntLiteral;case 5:return e.TokenClass.Operator;case 6:return e.TokenClass.StringLiteral;case 8:return e.TokenClass.Whitespace;case 10:return e.TokenClass.Punctuation;case 2:case 11:case 12:case 13:case 14:case 15:case 16:case 9:case 17:return e.TokenClass.Identifier;default:return}}function a(t){if(e.isKeyword(t))return 3;if(function(e){switch(e){case 41:case 43:case 44:case 39:case 40:case 47:case 48:case 49:case 29:case 31:case 32:case 33:case 102:case 101:case 128:case 150:case 34:case 35:case 36:case 37:case 50:case 52:case 51:case 55:case 56:case 74:case 73:case 78:case 70:case 71:case 72:case 64:case 65:case 66:case 68:case 69:case 63:case 27:case 60:case 75:case 76:case 77:return!0;default:return!1}}(t)||function(e){switch(e){case 39:case 40:case 54:case 53:case 45:case 46:return!0;default:return!1}}(t))return 5;if(t>=18&&t<=78)return 10;switch(t){case 8:return 4;case 9:return 25;case 10:return 6;case 13:return 7;case 7:case 3:case 2:return 1;case 5:case 4:return 8;default:return e.isTemplateLiteralKind(t)?6:2}}function o(e,t){switch(t){case 264:case 260:case 261:case 259:case 228:case 215:case 216:e.throwIfCancellationRequested()}}function s(t,r,n,i,a){var s=[];return n.forEachChild((function u(l){if(l&&e.textSpanIntersectsWith(a,l.pos,l.getFullWidth())){if(o(r,l.kind),e.isIdentifier(l)&&!e.nodeIsMissing(l)&&i.has(l.escapedText)){var _=t.getSymbolAtLocation(l),d=_&&c(_,e.getMeaningFromLocation(l),t);d&&function(t,r,n){var i=r-t;e.Debug.assert(i>0,"Classification had non-positive length of ".concat(i)),s.push(t),s.push(i),s.push(n)}(l.getStart(n),l.getEnd(),d)}l.forEachChild(u)}})),{spans:s,endOfLineState:0}}function c(t,r,n){var i=t.getFlags();return 0==(2885600&i)?void 0:32&i?11:384&i?12:524288&i?16:1536&i?4&r||1&r&&function(t){return e.some(t.declarations,(function(t){return e.isModuleDeclaration(t)&&1===e.getModuleInstanceState(t)}))}(t)?14:void 0:2097152&i?c(n.getAliasedSymbol(t),r,n):2&r?64&i?13:262144&i?15:void 0:void 0}function u(e){switch(e){case 1:return"comment";case 2:return"identifier";case 3:return"keyword";case 4:return"number";case 25:return"bigint";case 5:return"operator";case 6:return"string";case 8:return"whitespace";case 9:return"text";case 10:return"punctuation";case 11:return"class name";case 12:return"enum name";case 13:return"interface name";case 14:return"module name";case 15:return"type parameter name";case 16:return"type alias name";case 17:return"parameter name";case 18:return"doc comment tag name";case 19:return"jsx open tag name";case 20:return"jsx close tag name";case 21:return"jsx self closing tag name";case 22:return"jsx attribute";case 23:return"jsx text";case 24:return"jsx attribute string literal value";default:return}}function l(t){e.Debug.assert(t.spans.length%3==0);for(var r=t.spans,n=[],i=0;i<r.length;i+=3)n.push({textSpan:e.createTextSpan(r[i],r[i+1]),classificationType:u(r[i+2])});return n}function _(t,r,n){var i=n.start,a=n.length,s=e.createScanner(99,!1,r.languageVariant,r.text),c=e.createScanner(99,!1,r.languageVariant,r.text),u=[];return v(r),{spans:u,endOfLineState:0};function l(e,t,r){u.push(e),u.push(t),u.push(r)}function _(t,n,i,a){if(3===n){var o=e.parseIsolatedJSDocComment(r.text,i,a);if(o&&o.jsDoc)return e.setParent(o.jsDoc,t),void function(e){var t,r,n,i,a,o,s,c=e.pos;if(e.tags)for(var u=0,_=e.tags;u<_.length;u++){var f=_[u];f.pos!==c&&d(c,f.pos-c),l(f.pos,1,10),l(f.tagName.pos,f.tagName.end-f.tagName.pos,18),c=f.tagName.end;var g=f.tagName.end;switch(f.kind){case 343:var m=f;b(m),g=m.isNameFirst&&(null===(t=m.typeExpression)||void 0===t?void 0:t.end)||m.name.end;break;case 350:var y=f;g=y.isNameFirst&&(null===(r=y.typeExpression)||void 0===r?void 0:r.end)||y.name.end;break;case 347:p(f),c=f.end,g=f.typeParameters.end;break;case 348:var h=f;g=312===(null===(n=h.typeExpression)||void 0===n?void 0:n.kind)&&(null===(i=h.fullName)||void 0===i?void 0:i.end)||(null===(a=h.typeExpression)||void 0===a?void 0:a.end)||g;break;case 341:case 345:case 342:g=f.typeExpression.end;break;case 346:v(f.typeExpression),c=f.end,g=f.typeExpression.end;break;case 344:v(f.typeExpression),c=f.end,g=(null===(o=f.typeExpression)||void 0===o?void 0:o.end)||g;break;case 349:g=(null===(s=f.name)||void 0===s?void 0:s.end)||g;break;case 331:case 332:g=f.class.end}"object"==typeof f.comment?d(f.comment.pos,f.comment.end-f.comment.pos):"string"==typeof f.comment&&d(g,f.end-g)}c!==e.end&&d(c,e.end-c);return;function b(e){e.isNameFirst&&(d(c,e.name.pos-c),l(e.name.pos,e.name.end-e.name.pos,17),c=e.name.end),e.typeExpression&&(d(c,e.typeExpression.pos-c),v(e.typeExpression),c=e.typeExpression.end),e.isNameFirst||(d(c,e.name.pos-c),l(e.name.pos,e.name.end-e.name.pos,17),c=e.name.end)}}(o.jsDoc)}else if(2===n&&function(t,n){var i=/^(\/\/\/\s*)(<)(?:(\S+)((?:[^/]|\/[^>])*)(\/>)?)?/im,a=/(\s)(\S+)(\s*)(=)(\s*)('[^']+'|"[^"]+")/gim,o=r.text.substr(t,n),s=i.exec(o);if(!s)return!1;if(!s[3]||!(s[3]in e.commentPragmas))return!1;var c=t;d(c,s[1].length),l(c+=s[1].length,s[2].length,10),l(c+=s[2].length,s[3].length,21),c+=s[3].length;var u=s[4],_=c;for(;;){var p=a.exec(u);if(!p)break;var f=c+p.index+p[1].length;f>_&&(d(_,f-_),_=f),l(_,p[2].length,22),_+=p[2].length,p[3].length&&(d(_,p[3].length),_+=p[3].length),l(_,p[4].length,5),_+=p[4].length,p[5].length&&(d(_,p[5].length),_+=p[5].length),l(_,p[6].length,24),_+=p[6].length}(c+=s[4].length)>_&&d(_,c-_);s[5]&&(l(c,s[5].length,10),c+=s[5].length);var g=t+n;c<g&&d(c,g-c);return!0}(i,a))return;d(i,a)}function d(e,t){l(e,t,1)}function p(e){for(var t=0,r=e.getChildren();t<r.length;t++){v(r[t])}}function f(t,r,n){var i;for(i=r;i<n&&!e.isLineBreak(t.charCodeAt(i));i++);for(l(r,i-r,1),c.setTextPos(i);c.getTextPos()<n;)g()}function g(){var e=c.getTextPos(),t=c.scan(),r=c.getTextPos(),n=y(t);n&&l(e,r-e,n)}function m(t){if(e.isJSDoc(t))return!0;if(e.nodeIsMissing(t))return!0;var n=function(e){switch(e.parent&&e.parent.kind){case 283:if(e.parent.tagName===e)return 19;break;case 284:if(e.parent.tagName===e)return 20;break;case 282:if(e.parent.tagName===e)return 21;break;case 288:if(e.parent.name===e)return 22}return}(t);if(!e.isToken(t)&&11!==t.kind&&void 0===n)return!1;var i=11===t.kind?t.pos:function(t){for(s.setTextPos(t.pos);;){var n=s.getTextPos();if(!e.couldStartTrivia(r.text,n))return n;var i=s.scan(),a=s.getTextPos(),o=a-n;if(!e.isTrivia(i))return n;switch(i){case 4:case 5:continue;case 2:case 3:_(t,i,n,o),s.setTextPos(a);continue;case 7:var c=r.text,u=c.charCodeAt(n);if(60===u||62===u){l(n,o,1);continue}e.Debug.assert(124===u||61===u),f(c,n,a);break;case 6:break;default:e.Debug.assertNever(i)}}}(t),a=t.end-i;if(e.Debug.assert(a>=0),a>0){var o=n||y(t.kind,t);o&&l(i,a,o)}return!0}function y(t,r){if(e.isKeyword(t))return 3;if((29===t||31===t)&&r&&e.getTypeArgumentOrTypeParameterList(r.parent))return 10;if(e.isPunctuation(t)){if(r){var n=r.parent;if(63===t&&(257===n.kind||169===n.kind||166===n.kind||288===n.kind))return 5;if(223===n.kind||221===n.kind||222===n.kind||224===n.kind)return 5}return 10}if(8===t)return 4;if(9===t)return 25;if(10===t)return r&&288===r.parent.kind?24:6;if(13===t)return 6;if(e.isTemplateLiteralKind(t))return 6;if(11===t)return 23;if(79===t){if(r){switch(r.parent.kind){case 260:return r.parent.name===r?11:void 0;case 165:return r.parent.name===r?15:void 0;case 261:return r.parent.name===r?13:void 0;case 263:return r.parent.name===r?12:void 0;case 264:return r.parent.name===r?14:void 0;case 166:return r.parent.name===r?e.isThisIdentifier(r)?3:17:void 0}if(e.isConstTypeReference(r.parent))return 3}return 2}}function v(n){if(n&&e.decodedTextSpanIntersectsWith(i,a,n.pos,n.getFullWidth())){o(t,n.kind);for(var s=0,c=n.getChildren(r);s<c.length;s++){var u=c[s];m(u)||v(u)}}}}e.getSemanticClassifications=function(e,t,r,n,i){return l(s(e,t,r,n,i))},e.getEncodedSemanticClassifications=s,e.getSyntacticClassifications=function(e,t,r){return l(_(e,t,r))},e.getEncodedSyntacticClassifications=_}(_||(_={})),function(e){!function(t){!function(t){function r(e,t,r,i){return{spans:n(e,r,i,t),endOfLineState:0}}function n(t,r,n,s){var c=[];return t&&r&&function(t,r,n,s,c){var u=t.getTypeChecker(),l=!1;function _(d){switch(d.kind){case 264:case 260:case 261:case 259:case 228:case 215:case 216:c.throwIfCancellationRequested()}if(d&&e.textSpanIntersectsWith(n,d.pos,d.getFullWidth())&&0!==d.getFullWidth()){var p=l;if((e.isJsxElement(d)||e.isJsxSelfClosingElement(d))&&(l=!0),e.isJsxExpression(d)&&(l=!1),e.isIdentifier(d)&&!l&&!function(t){var r=t.parent;return r&&(e.isImportClause(r)||e.isImportSpecifier(r)||e.isNamespaceImport(r))}(d)&&!e.isInfinityOrNaNString(d.escapedText)){var f=u.getSymbolAtLocation(d);if(f){2097152&f.flags&&(f=u.getAliasedSymbol(f));var g=function(t,r){var n=t.getFlags();if(32&n)return 0;if(384&n)return 1;if(524288&n)return 5;if(64&n){if(2&r)return 2}else if(262144&n)return 4;var a=t.valueDeclaration||t.declarations&&t.declarations[0];a&&e.isBindingElement(a)&&(a=i(a));return a&&o.get(a.kind)}(f,e.getMeaningFromLocation(d));if(void 0!==g){var m=0;if(d.parent)(e.isBindingElement(d.parent)||o.get(d.parent.kind)===g)&&d.parent.name===d&&(m=1);6===g&&a(d)&&(g=9),g=function(t,r,n){if(7===n||9===n||6===n){var i=t.getTypeAtLocation(r);if(i){var o=function(e){return e(i)||i.isUnion()&&i.types.some(e)};if(6!==n&&o((function(e){return e.getConstructSignatures().length>0})))return 0;if(o((function(e){return e.getCallSignatures().length>0}))&&!o((function(e){return e.getProperties().length>0}))||function(t){for(;a(t);)t=t.parent;return e.isCallExpression(t.parent)&&t.parent.expression===t}(r))return 9===n?11:10}}return n}(u,d,g);var y=f.valueDeclaration;if(y){var v=e.getCombinedModifierFlags(y),h=e.getCombinedNodeFlags(y);32&v&&(m|=2),512&v&&(m|=4),0!==g&&2!==g&&(64&v||2&h||8&f.getFlags())&&(m|=8),7!==g&&10!==g||!function(t,r){e.isBindingElement(t)&&(t=i(t));if(e.isVariableDeclaration(t))return(!e.isSourceFile(t.parent.parent.parent)||e.isCatchClause(t.parent))&&t.getSourceFile()===r;if(e.isFunctionDeclaration(t))return!e.isSourceFile(t.parent)&&t.getSourceFile()===r;return!1}(y,r)||(m|=32),t.isSourceFileDefaultLibrary(y.getSourceFile())&&(m|=16)}else f.declarations&&f.declarations.some((function(e){return t.isSourceFileDefaultLibrary(e.getSourceFile())}))&&(m|=16);s(d,g,m)}}}e.forEachChild(d,_),l=p}}_(r)}(t,r,n,(function(e,t,n){c.push(e.getStart(r),e.getWidth(r),(t+1<<8)+n)}),s),c}function i(t){for(;;){if(!e.isBindingElement(t.parent.parent))return t.parent.parent;t=t.parent.parent}}function a(t){return e.isQualifiedName(t.parent)&&t.parent.right===t||e.isPropertyAccessExpression(t.parent)&&t.parent.name===t}!function(e){e[e.typeOffset=8]="typeOffset",e[e.modifierMask=255]="modifierMask"}(t.TokenEncodingConsts||(t.TokenEncodingConsts={})),function(e){e[e.class=0]="class",e[e.enum=1]="enum",e[e.interface=2]="interface",e[e.namespace=3]="namespace",e[e.typeParameter=4]="typeParameter",e[e.type=5]="type",e[e.parameter=6]="parameter",e[e.variable=7]="variable",e[e.enumMember=8]="enumMember",e[e.property=9]="property",e[e.function=10]="function",e[e.member=11]="member"}(t.TokenType||(t.TokenType={})),function(e){e[e.declaration=0]="declaration",e[e.static=1]="static",e[e.async=2]="async",e[e.readonly=3]="readonly",e[e.defaultLibrary=4]="defaultLibrary",e[e.local=5]="local"}(t.TokenModifier||(t.TokenModifier={})),t.getSemanticClassifications=function(t,n,i,a){var o=r(t,n,i,a);e.Debug.assert(o.spans.length%3==0);for(var s=o.spans,c=[],u=0;u<s.length;u+=3)c.push({textSpan:e.createTextSpan(s[u],s[u+1]),classificationType:s[u+2]});return c},t.getEncodedSemanticClassifications=r;var o=new e.Map([[257,7],[166,6],[169,9],[264,3],[263,1],[302,8],[260,0],[171,11],[259,10],[215,10],[170,11],[174,9],[175,9],[168,9],[261,2],[262,5],[165,4],[299,9],[300,9]])}(t.v2020||(t.v2020={}))}(e.classifier||(e.classifier={}))}(_||(_={})),function(e){!function(t){!function(r){var n,i,s,c=((n={}).directory=0,n.script=1,n["external module name"]=2,n);function l(){var t=new e.Map;return{add:function(e){var r=t.get(e.name);(!r||c[r.kind]<c[e.kind])&&t.set(e.name,e)},has:t.has.bind(t),values:t.values.bind(t)}}function _(e){var r=e.map((function(e){var r=e.name,n=e.kind,i=e.span;return{name:r,kind:n,kindModifiers:d(e.extension),sortText:t.SortText.LocationPriority,replacementSpan:i}}));return{isGlobalCompletion:!1,isMemberCompletion:!1,isNewIdentifierLocation:!0,entries:r}}function d(t){switch(t){case".d.ts":return".d.ts";case".js":return".js";case".json":return".json";case".jsx":return".jsx";case".ts":return".ts";case".tsx":return".tsx";case".d.mts":return".d.mts";case".mjs":return".mjs";case".mts":return".mts";case".d.cts":return".d.cts";case".cjs":return".cjs";case".cts":return".cts";case".tsbuildinfo":return e.Debug.fail("Extension ".concat(".tsbuildinfo"," is unsupported."));case void 0:return"";default:return e.Debug.assertNever(t)}}function p(r,n,i,a,o,s,c){var u,l,_=f(n.parent);switch(_.kind){case 198:var d=f(_.parent);switch(d.kind){case 230:case 180:var p=e.findAncestor(_,(function(e){return e.parent===d}));return p?{kind:2,types:m(a.getTypeArgumentConstraint(p)),isNewIdentifier:!1}:void 0;case 196:var y=d,v=y.indexType,h=y.objectType;if(!e.rangeContainsPosition(v,i))return;return g(a.getTypeFromTypeNode(h));case 202:return{kind:0,paths:b(r,n,o,s,a,c)};case 189:if(!e.isTypeReferenceNode(d.parent))return;var x=(u=d,l=_,e.mapDefined(u.types,(function(t){return t!==l&&e.isLiteralTypeNode(t)&&e.isStringLiteral(t.literal)?t.literal.text:void 0})));return{kind:2,types:m(a.getTypeArgumentConstraint(d)).filter((function(t){return!e.contains(x,t.value)})),isNewIdentifier:!1};default:return}case 299:return e.isObjectLiteralExpression(_.parent)&&_.name===n?function(r,n){var i=r.getContextualType(n);if(!i)return;var a=r.getContextualType(n,4);return{kind:1,symbols:t.getPropertiesForObjectExpression(i,a,n,r),hasIndexSignature:e.hasIndexSignature(i)}}(a,_.parent):E();case 209:var D=_,S=D.expression,T=D.argumentExpression;return n===e.skipParentheses(T)?g(a.getTypeAtLocation(S)):void 0;case 210:case 211:case 288:if(!function(t){return e.isCallExpression(t.parent)&&e.firstOrUndefined(t.parent.arguments)===t&&e.isIdentifier(t.parent.expression)&&"require"===t.parent.expression.escapedText}(n)&&!e.isImportCall(_)){var C=e.SignatureHelp.getArgumentInfoForCompletions(288===_.kind?_.parent:n,i,r);return C&&function(t,r,n,i){var a=!1,o=new e.Map,s=[],c=e.isJsxOpeningLikeElement(t)?e.Debug.checkDefined(e.findAncestor(r.parent,e.isJsxAttribute)):r;i.getResolvedSignatureForStringLiteralCompletions(t,c,s);var u=e.flatMap(s,(function(r){if(e.signatureHasRestParameter(r)||!(n.argumentCount>r.parameters.length)){var s=r.getTypeParameterAtPosition(n.argumentIndex);if(e.isJsxOpeningLikeElement(t)){var u=i.getTypeOfPropertyOfType(s,c.name.text);u&&(s=u)}return a=a||!!(4&s.flags),m(s,o)}}));return e.length(u)?{kind:2,types:u,isNewIdentifier:a}:void 0}(C.invocation,n,C,a)||E()}case 269:case 275:case 280:return{kind:0,paths:b(r,n,o,s,a,c)};default:return E()}function E(){return{kind:2,types:m(e.getContextualTypeFromParent(n,a)),isNewIdentifier:!1}}}function f(t){switch(t.kind){case 193:return e.walkUpParenthesizedTypes(t);case 214:return e.walkUpParenthesizedExpressions(t);default:return t}}function g(t){return t&&{kind:1,symbols:e.filter(t.getApparentProperties(),(function(t){return!(t.valueDeclaration&&e.isPrivateIdentifierClassElementDeclaration(t.valueDeclaration))})),hasIndexSignature:e.hasIndexSignature(t)}}function m(t,r){return void 0===r&&(r=new e.Map),t?(t=e.skipConstraint(t)).isUnion()?e.flatMap(t.types,(function(e){return m(e,r)})):!t.isStringLiteral()||1024&t.flags||!e.addToSeen(r,t.value)?e.emptyArray:[t]:e.emptyArray}function y(e,t,r){return{name:e,kind:t,extension:r}}function v(e){return y(e,"directory",void 0)}function h(t,r,n){var i=function(t,r){var n=Math.max(t.lastIndexOf(e.directorySeparator),t.lastIndexOf(e.altDirectorySeparator)),i=-1!==n?n+1:0,a=t.length-i;return 0===a||e.isIdentifierText(t.substr(i,a),99)?void 0:e.createTextSpan(r+i,a)}(t,r),a=0===t.length?void 0:e.createTextSpan(r,t.length);return n.map((function(t){var r=t.name,n=t.kind,o=t.extension;return-1!==Math.max(r.indexOf(e.directorySeparator),r.indexOf(e.altDirectorySeparator))?{name:r,kind:n,extension:o,span:a}:{name:r,kind:n,extension:o,span:i}}))}function b(t,r,n,i,o,s){return h(r.text,r.getStart(t)+1,function(t,r,n,i,o,s){var c=e.normalizeSlashes(r.text),u=e.isStringLiteralLike(r)?e.getModeForUsageLocation(t,r):void 0,_=t.path,d=e.getDirectoryPath(_);return function(e){if(e&&e.length>=2&&46===e.charCodeAt(0)){var t=e.length>=3&&46===e.charCodeAt(1)?2:1,r=e.charCodeAt(t);return 47===r||92===r}return!1}(c)||!n.baseUrl&&(e.isRootedDiskPath(c)||e.isUrl(c))?function(t,r,n,i,o,s){var c=x(n,s);return n.rootDirs?function(t,r,n,i,o,s,c){var u=o.project||s.getCurrentDirectory(),l=!(s.useCaseSensitiveFileNames&&s.useCaseSensitiveFileNames()),_=function(t,r,n,i){t=t.map((function(t){return e.normalizePath(e.isRootedDiskPath(t)?t:e.combinePaths(r,t))}));var o=e.firstDefined(t,(function(t){return e.containsPath(t,n,r,i)?n.substr(t.length):void 0}));return e.deduplicate(a(a([],t.map((function(t){return e.combinePaths(t,o)})),!0),[n],!1),e.equateStringsCaseSensitive,e.compareStringsCaseSensitive)}(t,u,n,l);return e.flatMap(_,(function(t){return e.arrayFrom(T(r,t,i,s,c).values())}))}(n.rootDirs,t,r,c,n,i,o):e.arrayFrom(T(t,r,c,i,o).values())}(c,d,n,i,_,p()):function(t,r,n,i,a,o,s){var c=i.baseUrl,u=i.paths,_=l(),d=x(i,o);if(c){var p=i.project||a.getCurrentDirectory(),f=e.normalizePath(e.combinePaths(p,c));T(t,f,d,a,void 0,_),u&&E(_,t,f,d,a,u)}for(var g=A(t),m=0,v=function(t,r,n){var i=n.getAmbientModules().map((function(t){return e.stripQuotes(t.name)})).filter((function(r){return e.startsWith(r,t)}));if(void 0!==r){var a=e.ensureTrailingDirectorySeparator(r);return i.map((function(t){return e.removePrefix(t,a)}))}return i}(t,g,s);m<v.length;m++){var h=v[m];_.add(y(h,"external module name",void 0))}if(I(a,i,r,g,d,_),D(i)){var b=!1;if(void 0===g)for(var S=0,C=function(t,r){if(!t.readFile||!t.fileExists)return e.emptyArray;for(var n=[],i=0,a=e.findPackageJsons(r,t);i<a.length;i++)for(var o=a[i],s=e.readJson(o,t),c=0,u=M;c<u.length;c++){var l=s[u[c]];if(l)for(var _ in l)e.hasProperty(l,_)&&!e.startsWith(_,"@types/")&&n.push(_)}return n}(a,r);S<C.length;S++){var F=y(C[S],"external module name",void 0);_.has(F.name)||(b=!0,_.add(F))}if(!b){var P=function(r){var n=e.combinePaths(r,"node_modules");e.tryDirectoryExists(a,n)&&T(t,n,d,a,void 0,_)};if(g&&function(t){return e.getEmitModuleResolutionKind(t)===e.ModuleResolutionKind.Node16||e.getEmitModuleResolutionKind(t)===e.ModuleResolutionKind.NodeNext}(i)){var w=P;P=function(r){var i=e.getPathComponents(t);i.shift();var o=i.shift();if(!o)return w(r);if(e.startsWith(o,"@")){var s=i.shift();if(!s)return w(r);o=e.combinePaths(o,s)}var c=e.combinePaths(r,"node_modules",o),u=e.combinePaths(c,"package.json");if(e.tryFileExists(a,u)){var l=e.readJson(u,a).exports;if(l){if("object"!=typeof l||null===l)return;var p=e.getOwnKeys(l),f=i.join("/")+(i.length&&e.hasTrailingDirectorySeparator(t)?"/":""),g=n===e.ModuleKind.ESNext?["node","import","types"]:["node","require","types"];return void k(_,f,c,d,a,p,(function(t){return e.singleElementArray(N(l[t],g))}),e.comparePatternKeys)}}return w(r)}}e.forEachAncestorDirectory(r,P)}}return e.arrayFrom(_.values())}(c,d,u,n,i,p(),o);function p(){var n=e.isStringLiteralLike(r)?e.getModeForUsageLocation(t,r):void 0;return"js"===s.importModuleSpecifierEnding||n===e.ModuleKind.ESNext?2:0}}(t,r,n,i,o,s))}function x(t,r){return void 0===r&&(r=0),{extensions:e.flatten(S(t)),includeExtensionsOption:r}}function D(t){return e.getEmitModuleResolutionKind(t)===e.ModuleResolutionKind.NodeJs||e.getEmitModuleResolutionKind(t)===e.ModuleResolutionKind.Node16||e.getEmitModuleResolutionKind(t)===e.ModuleResolutionKind.NodeNext}function S(t){var r=e.getSupportedExtensions(t);return D(t)?e.getSupportedExtensionsWithJsonIfResolveJsonModule(t,r):r}function T(t,r,n,i,a,o){var s;void 0===o&&(o=l()),void 0===t&&(t=""),t=e.normalizeSlashes(t),e.hasTrailingDirectorySeparator(t)||(t=e.getDirectoryPath(t)),""===t&&(t="."+e.directorySeparator),t=e.ensureTrailingDirectorySeparator(t);var c=e.resolvePath(r,t),u=e.hasTrailingDirectorySeparator(c)?c:e.getDirectoryPath(c),_=e.findPackageJson(u,i);if(_){var d=e.readJson(_,i).typesVersions;if("object"==typeof d){var p=null===(s=e.getPackageJsonTypesVersionsPaths(d))||void 0===s?void 0:s.paths;if(p){var f=e.getDirectoryPath(_);if(E(o,c.slice(e.ensureTrailingDirectorySeparator(f).length),f,n,i,p))return o}}}var g=!(i.useCaseSensitiveFileNames&&i.useCaseSensitiveFileNames());if(!e.tryDirectoryExists(i,u))return o;var m=e.tryReadDirectory(i,u,n.extensions,void 0,["./*"]);if(m)for(var h=0,b=m;h<b.length;h++){var x=b[h];if(x=e.normalizePath(x),!a||0!==e.comparePaths(x,a,r,g)){var D=C(e.getBaseFileName(x),i.getCompilationSettings(),n.includeExtensionsOption),S=D.name,T=D.extension;o.add(y(S,"script",T))}}var k=e.tryGetDirectories(i,u);if(k)for(var N=0,A=k;N<A.length;N++){var F=A[N],P=e.getBaseFileName(e.normalizePath(F));"@types"!==P&&o.add(v(P))}return o}function C(t,r,n){var i=e.moduleSpecifiers.tryGetJSExtensionForFile(t,r);return 0!==n||e.fileExtensionIsOneOf(t,[".json",".mts",".cts",".d.mts",".d.cts",".mjs",".cjs"])?(e.fileExtensionIsOneOf(t,[".mts",".cts",".d.mts",".d.cts",".mjs",".cjs"])||2===n)&&i?{name:e.changeExtension(t,i),extension:i}:{name:t,extension:e.tryGetExtensionFromPath(t)}:{name:e.removeFileExtension(t),extension:e.tryGetExtensionFromPath(t)}}function E(t,r,n,i,a,o){return k(t,r,n,i,a,e.getOwnKeys(o),(function(e){return o[e]}),(function(t,r){var n=e.tryParsePattern(t),i=e.tryParsePattern(r),a="object"==typeof n?n.prefix.length:t.length,o="object"==typeof i?i.prefix.length:r.length;return e.compareValues(o,a)}))}function k(t,r,n,i,a,o,s,c){for(var u,l=[],_=0,d=o;_<d.length;_++){var p=d[_];if("."!==p){var f=p.replace(/^\.\//,""),g=s(p);if(g){var m=e.tryParsePattern(f);if(!m)continue;var v="object"==typeof m&&e.isPatternMatch(m,r);v&&(void 0===u||-1===c(p,u))&&(u=p,l=l.filter((function(e){return!e.matchedPattern}))),"string"!=typeof m&&void 0!==u&&1===c(p,u)||l.push({matchedPattern:v,results:F(f,g,r,n,i,a).map((function(e){return y(e.name,e.kind,e.extension)}))})}}}return l.forEach((function(e){return e.results.forEach((function(e){return t.add(e)}))})),void 0!==u}function N(t,r){if("string"==typeof t)return t;if(t&&"object"==typeof t&&!e.isArray(t))for(var n in t){if("default"===n||r.indexOf(n)>-1||e.isApplicableVersionedTypesKey(r,n))return N(t[n],r)}}function A(t){return L(t)?e.hasTrailingDirectorySeparator(t)?t:e.getDirectoryPath(t):void 0}function F(t,r,n,i,a,s){if(!e.endsWith(t,"*"))return e.stringContains(t,"*")?e.emptyArray:_(t,"script");var c=t.slice(0,t.length-1),l=e.tryRemovePrefix(n,c);return void 0===l?"/"===t[t.length-2]?_(c,"directory"):e.flatMap(r,(function(e){var t;return null===(t=P("",i,e,a,s))||void 0===t?void 0:t.map((function(e){var t=e.name,r=u(e,["name"]);return o({name:c+t},r)}))})):e.flatMap(r,(function(e){return P(l,i,e,a,s)}));function _(t,r){return e.startsWith(t,n)?[{name:e.removeTrailingDirectorySeparator(t),kind:r,extension:void 0}]:e.emptyArray}}function P(t,r,n,i,o){if(o.readDirectory){var s=e.tryParsePattern(n);if(void 0!==s&&!e.isString(s)){var c=e.resolvePath(s.prefix),u=e.hasTrailingDirectorySeparator(s.prefix)?c:e.getDirectoryPath(c),l=e.hasTrailingDirectorySeparator(s.prefix)?"":e.getBaseFileName(c),_=L(t),d=_?e.hasTrailingDirectorySeparator(t)?t:e.getDirectoryPath(t):void 0,p=_?e.combinePaths(u,l+d):u,f=e.normalizePath(s.suffix),g=e.normalizePath(e.combinePaths(r,p)),m=_?g:e.ensureTrailingDirectorySeparator(g)+l,h=f?"**/*"+f:"./*",b=e.mapDefined(e.tryReadDirectory(o,g,i.extensions,void 0,[h]),(function(t){var r,n,a,s,c,u=(r=t,a=e.normalizePath(r),s=m,c=f,void 0===(n=e.startsWith(a,s)&&e.endsWith(a,c)?a.slice(s.length,a.length-c.length):void 0)?void 0:w(n));if(u){if(L(u))return v(e.getPathComponents(w(u))[1]);var l=C(u,o.getCompilationSettings(),i.includeExtensionsOption);return y(l.name,"script",l.extension)}})),x=f?e.emptyArray:e.mapDefined(e.tryGetDirectories(o,g),(function(e){return"node_modules"===e?void 0:v(e)}));return a(a([],b,!0),x,!0)}}}function w(t){return t[0]===e.directorySeparator?t.slice(1):t}function I(t,r,n,i,a,o){void 0===o&&(o=l());for(var s=new e.Map,c=0,u=e.tryAndIgnoreErrors((function(){return e.getEffectiveTypeRoots(r,t)}))||e.emptyArray;c<u.length;c++){f(u[c])}for(var _=0,d=e.findPackageJsons(n,t);_<d.length;_++){var p=d[_];f(e.combinePaths(e.getDirectoryPath(p),"node_modules/@types"))}return o;function f(n){if(e.tryDirectoryExists(t,n))for(var c=0,u=e.tryGetDirectories(t,n);c<u.length;c++){var l=u[c],_=e.unmangleScopedPackageName(l);if(!r.types||e.contains(r.types,_))if(void 0===i)s.has(_)||(o.add(y(_,"external module name",void 0)),s.set(_,!0));else{var d=e.combinePaths(n,l),p=e.tryRemoveDirectoryPrefix(i,_,e.hostGetCanonicalFileName(t));void 0!==p&&T(p,d,a,t,void 0,o)}}}}r.getStringLiteralCompletions=function(r,n,i,a,o,s,c,u){if(e.isInReferenceComment(r,n)){var l=function(t,r,n,i){var a=e.getTokenAtPosition(t,r),o=e.getLeadingCommentRanges(t.text,a.pos),s=o&&e.find(o,(function(e){return r>=e.pos&&r<=e.end}));if(!s)return;var c=t.text.slice(s.pos,r),u=O.exec(c);if(!u)return;var l=u[1],_=u[2],d=u[3],p=e.getDirectoryPath(t.path),f="path"===_?T(d,p,x(n,1),i,t.path):"types"===_?I(i,n,p,A(d),x(n)):e.Debug.fail();return h(d,s.pos+l.length,e.arrayFrom(f.values()))}(r,n,a,o);return l&&_(l)}if(e.isInString(r,n,i)){if(!i||!e.isStringLiteralLike(i))return;return function(r,n,i,a,o,s,c,u){if(void 0===r)return;var l=e.createTextSpanFromStringLiteralLikeContent(n);switch(r.kind){case 0:return _(r.paths);case 1:var d=e.createSortedArray();return t.getCompletionEntriesFromSymbols(r.symbols,d,n,n,i,i,a,o,99,s,4,u,c,void 0),{isGlobalCompletion:!1,isMemberCompletion:!0,isNewIdentifierLocation:r.hasIndexSignature,optionalReplacementSpan:l,entries:d};case 2:d=r.types.map((function(r){return{name:r.value,kindModifiers:"",kind:"string",sortText:t.SortText.LocationPriority,replacementSpan:e.getReplacementSpanForContextToken(n)}}));return{isGlobalCompletion:!1,isMemberCompletion:!1,isNewIdentifierLocation:r.isNewIdentifier,optionalReplacementSpan:l,entries:d};default:return e.Debug.assertNever(r)}}(l=p(r,i,n,s.getTypeChecker(),a,o,u),i,r,o,s,c,a,u)}},r.getStringLiteralCompletionDetails=function(r,n,i,a,o,s,c,u,l){if(a&&e.isStringLiteralLike(a)){var _=p(n,a,i,o,s,c,l);return _&&function(r,n,i,a,o,s){switch(i.kind){case 0:return(c=e.find(i.paths,(function(e){return e.name===r})))&&t.createCompletionDetails(r,d(c.extension),c.kind,[e.textPart(r)]);case 1:var c;return(c=e.find(i.symbols,(function(e){return e.name===r})))&&t.createCompletionDetailsForSymbol(c,o,a,n,s);case 2:return e.find(i.types,(function(e){return e.value===r}))?t.createCompletionDetails(r,"","type",[e.textPart(r)]):void 0;default:return e.Debug.assertNever(i)}}(r,a,_,n,o,u)}},function(e){e[e.Paths=0]="Paths",e[e.Properties=1]="Properties",e[e.Types=2]="Types"}(i||(i={})),function(e){e[e.Exclude=0]="Exclude",e[e.Include=1]="Include",e[e.ModuleSpecifierCompletion=2]="ModuleSpecifierCompletion"}(s||(s={}));var O=/^(\/\/\/\s*<reference\s+(path|types)\s*=\s*(?:'|"))([^\3"]*)$/,M=["dependencies","devDependencies","peerDependencies","optionalDependencies"];function L(t){return e.stringContains(t,e.directorySeparator)}}(t.StringCompletions||(t.StringCompletions={}))}(e.Completions||(e.Completions={}))}(_||(_={})),function(e){!function(t){var r,n,i,a,s;function c(e){return!!(e&&4&e.kind)}function u(e){return!(!e||32!==e.kind)}function l(e){return(c(e)||u(e))&&!!e.isFromPackageJson}function _(e){return!!(e&&64&e.kind)}function d(e){return!!(e&&128&e.kind)}function p(r,n,i,a,o,s,c,u,l){var _,d,p,f=e.timestamp(),g=c||e.moduleResolutionRespectsExports(e.getEmitModuleResolutionKind(a.getCompilerOptions())),m=!1,y=0,v=0,h=0,b=0,x=l({tryResolve:function(e,r,n){if(n){var a=i.getModuleSpecifierForBestExportInfo(e,r,o,u);return a&&y++,a||"failed"}var c=g||s.allowIncompleteCompletions&&v<t.moduleSpecifierResolutionLimit,l=!c&&s.allowIncompleteCompletions&&b<t.moduleSpecifierResolutionCacheAttemptLimit,_=c||l?i.getModuleSpecifierForBestExportInfo(e,r,o,u,l):void 0;(!c&&!l||l&&!_)&&(m=!0);v+=(null==_?void 0:_.computedWithoutCacheCount)||0,h+=e.length-((null==_?void 0:_.computedWithoutCacheCount)||0),l&&b++;return _||(g?"failed":"skipped")},skippedAny:function(){return m},resolvedAny:function(){return v>0},resolvedBeyondLimit:function(){return v>t.moduleSpecifierResolutionLimit}}),D=b?" (".concat((h/b*100).toFixed(1),"% hit rate)"):"";return null===(_=n.log)||void 0===_||_.call(n,"".concat(r,": resolved ").concat(v," module specifiers, plus ").concat(y," ambient and ").concat(h," from cache").concat(D)),null===(d=n.log)||void 0===d||d.call(n,"".concat(r,": response is ").concat(m?"incomplete":"complete")),null===(p=n.log)||void 0===p||p.call(n,"".concat(r,": ").concat(e.timestamp()-f)),x}function f(t,r){var n,i,a=e.compareStringsCaseSensitiveUI(t.sortText,r.sortText);return 0===a&&(a=e.compareStringsCaseSensitiveUI(t.name,r.name)),0===a&&(null===(n=t.data)||void 0===n?void 0:n.moduleSpecifier)&&(null===(i=r.data)||void 0===i?void 0:i.moduleSpecifier)&&(a=e.compareNumberOfDirectorySeparators(t.data.moduleSpecifier,r.data.moduleSpecifier)),0===a?-1:a}function g(e){return!!(null==e?void 0:e.moduleSpecifier)}function m(e){return{isGlobalCompletion:!1,isMemberCompletion:!1,isNewIdentifierLocation:!1,entries:e}}function y(e,t,r){return{kind:4,keywordCompletions:V(e,t),isNewIdentifierLocation:r}}function v(t){return 79===(null==t?void 0:t.kind)?e.createTextSpanFromNode(t):void 0}function h(t,r){return!e.isSourceFileJS(t)||!!e.isCheckJsEnabledForFile(t,r)}function b(e){switch(e){case 0:case 3:case 2:return!0;default:return!1}}function x(t,r,n){return"object"==typeof n?e.pseudoBigIntToString(n)+"n":e.isString(n)?e.quote(t,r,n):JSON.stringify(n)}function D(e,r,n){return{name:x(e,r,n),kind:"string",kindModifiers:"",sortText:t.SortText.LocationPriority}}function S(n,i,a,o,s,_,p,f,g,m,y,v,h,b,x,D,S,C,E,N,w,I){var O,M,L,R,B,j,J,z,U=e.getReplacementSpanForContextToken(a),K=P(y),V=f.getTypeChecker(),q=y&&function(e){return!!(16&e.kind)}(y),W=y&&function(e){return!!(2&e.kind)}(y)||m;if(y&&function(e){return!!(1&e.kind)}(y))L=m?"this".concat(q?"?.":"","[").concat(A(_,C,g),"]"):"this".concat(q?"?.":".").concat(g);else if((W||q)&&h){L=W?"[".concat(m?A(_,C,g):g,"]"):g,(q||h.questionDotToken)&&(L="?.".concat(L));var H=e.findChildOfKind(h,24,_)||e.findChildOfKind(h,28,_);if(!H)return;var G=e.startsWith(g,h.name.text)?h.name.end:H.end;U=e.createTextSpanFromBounds(H.getStart(_),G)}if(b&&(void 0===L&&(L=g),L="{".concat(L,"}"),"boolean"!=typeof b&&(U=e.createTextSpanFromNode(b,_))),y&&function(e){return!!(8&e.kind)}(y)&&h){void 0===L&&(L=g);var Q=e.findPrecedingToken(h.pos,_),X="";Q&&e.positionIsASICandidate(Q.end,Q.parent,_)&&(X=";"),X+="(await ".concat(h.expression.getText(),")"),L=m?"".concat(X).concat(L):"".concat(X).concat(q?"?.":".").concat(L),U=e.createTextSpanFromBounds(h.getStart(_),h.end)}if(u(y)&&(j=[e.textPart(y.moduleSpecifier)],x&&(O=function(t,r,n,i,a,o,s){var c=r.replacementSpan,u=e.quote(a,s,n.moduleSpecifier),l=n.isDefaultExport?1:"export="===n.exportName?2:0,_=s.includeCompletionsWithSnippetText?"$1":"",d=e.codefix.getImportKind(a,l,o,!0),p=r.couldBeTypeOnlyImportSpecifier,f=r.isTopLevelTypeOnly?" ".concat(e.tokenToString(154)," "):" ",g=p?"".concat(e.tokenToString(154)," "):"",m=i?";":"";switch(d){case 3:return{replacementSpan:c,insertText:"import".concat(f).concat(e.escapeSnippetText(t)).concat(_," = require(").concat(u,")").concat(m)};case 1:return{replacementSpan:c,insertText:"import".concat(f).concat(e.escapeSnippetText(t)).concat(_," from ").concat(u).concat(m)};case 2:return{replacementSpan:c,insertText:"import".concat(f,"* as ").concat(e.escapeSnippetText(t)," from ").concat(u).concat(m)};case 0:return{replacementSpan:c,insertText:"import".concat(f,"{ ").concat(g).concat(e.escapeSnippetText(t)).concat(_," } from ").concat(u).concat(m)}}}(g,x,y,D,_,S,C),L=O.insertText,U=O.replacementSpan,B=!!C.includeCompletionsWithSnippetText||void 0)),64===(null==y?void 0:y.kind)&&(J=!0),C.includeCompletionsWithClassMemberSnippets&&C.includeCompletionsWithInsertText&&3===E&&function(t,r,n){if(e.isInJSFile(r))return!1;var i=106500;return!!(t.flags&i)&&(e.isClassLike(r)||r.parent&&r.parent.parent&&e.isClassElement(r.parent)&&r===r.parent.name&&r.parent.getLastToken(n)===r.parent.name&&e.isClassLike(r.parent.parent)||r.parent&&e.isSyntaxList(r)&&e.isClassLike(r.parent))}(n,s,_)){var Y=void 0;L=(M=T(p,f,S,C,g,n,s,o,N)).insertText,B=M.isSnippet,Y=M.importAdder,U=M.replacementSpan,i=t.SortText.ClassMemberSnippets,(null==Y?void 0:Y.hasFixes())&&(J=!0,K=r.ClassMemberSnippet)}if(y&&d(y)&&(L=y.insertText,B=y.isSnippet,z=y.labelDetails,C.useLabelDetailsInCompletionEntries||(g+=z.detail,z=void 0),K=r.ObjectLiteralMethodSnippet,i=t.SortText.SortBelow(i)),w&&!I&&C.includeCompletionsWithSnippetText&&C.jsxAttributeCompletionStyle&&"none"!==C.jsxAttributeCompletionStyle){var Z="braces"===C.jsxAttributeCompletionStyle,$=V.getTypeOfSymbolAtLocation(n,s);"auto"!==C.jsxAttributeCompletionStyle||528&$.flags||1048576&$.flags&&e.find($.types,(function(e){return!!(528&e.flags)}))||(402653316&$.flags||1048576&$.flags&&e.every($.types,(function(e){return!!(402686084&e.flags)}))?(L="".concat(e.escapeSnippetText(g),"=").concat(e.quote(_,C,"$1")),B=!0):Z=!0),Z&&(L="".concat(e.escapeSnippetText(g),"={$1}"),B=!0)}if(void 0===L||C.includeCompletionsWithInsertText)return(c(y)||u(y))&&(R=k(y),J=!x),{name:g,kind:e.SymbolDisplay.getSymbolKind(V,n,s),kindModifiers:e.SymbolDisplay.getSymbolModifiers(V,n),sortText:i,source:K,hasAction:!!J||void 0,isRecommended:F(n,v,V)||void 0,insertText:L,replacementSpan:U,sourceDisplay:j,labelDetails:z,isSnippet:B,isPackageJsonImport:l(y)||void 0,isImportStatementCompletion:!!x||void 0,data:R}}function T(t,r,n,i,a,o,s,c,u){var l,_,d=e.findAncestor(s,e.isClassLike);if(!d)return{insertText:a};var p,f=a,g=r.getTypeChecker(),m=s.getSourceFile(),y=E({removeComments:!0,module:n.module,target:n.target,omitTrailingSemicolon:!1,newLine:e.getNewLineKind(e.getNewLineCharacter(n,e.maybeBind(t,t.getNewLine)))}),v=e.codefix.createImportAdder(m,r,i,t);if(i.includeCompletionsWithSnippetText){l=!0;var h=e.factory.createEmptyStatement();p=e.factory.createBlock([h],!0),e.setSnippetElement(h,{kind:0,order:0})}else p=e.factory.createBlock([],!0);var b=0,x=function(t){if(!t)return{modifiers:0};var r,n,i=0;(n=function(t){if(e.isModifier(t))return t.kind;if(e.isIdentifier(t)&&t.originalKeywordKind&&e.isModifierKind(t.originalKeywordKind))return t.originalKeywordKind;return}(t))&&(i|=e.modifierToFlag(n),r=e.createTextSpanFromNode(t));e.isPropertyDeclaration(t.parent)&&(i|=126975&e.modifiersToFlags(t.parent.modifiers),r=e.createTextSpanFromNode(t.parent));return{modifiers:i,span:r}}(c),D=x.modifiers,S=x.span,T=!!(256&D),C=[];if(e.codefix.addNewNodeForMemberSymbol(o,d,m,{program:r,host:t},i,v,(function(t){var r=0;T&&(r|=256),e.isClassElement(t)&&1===g.getMemberOverrideModifierStatus(d,t)&&(r|=16384),C.length||(b=t.modifierFlagsCache|r|D),t=e.factory.updateModifiers(t,b),C.push(t)}),p,2,T),C.length){var k=131073;_=S,f=u?y.printAndFormatSnippetList(k,e.factory.createNodeArray(C),m,u):y.printSnippetList(k,e.factory.createNodeArray(C),m)}return{insertText:f,isSnippet:l,importAdder:v,replacementSpan:_}}function C(t,r,n,i,a,o,s,c){var u=s.includeCompletionsWithSnippetText||void 0,l=r,_=n.getSourceFile(),d=function(t,r,n,i,a,o){var s=t.getDeclarations();if(!s||!s.length)return;var c=i.getTypeChecker(),u=s[0],l=e.getSynthesizedDeepClone(e.getNameOfDeclaration(u),!1),_=c.getWidenedType(c.getTypeOfSymbolAtLocation(t,r)),d=e.getQuotePreference(n,o),p=33554432|(0===d?268435456:0);switch(u.kind){case 168:case 169:case 170:case 171:var f=1048576&_.flags&&_.types.length<10?c.getUnionType(_.types,2):_;if(1048576&f.flags){var g=e.filter(f.types,(function(e){return c.getSignaturesOfType(e,0).length>0}));if(1!==g.length)return;f=g[0]}if(1!==c.getSignaturesOfType(f,0).length)return;var m=c.typeToTypeNode(f,r,p,e.codefix.getNoopSymbolTrackerWithResolver({program:i,host:a}));if(!m||!e.isFunctionTypeNode(m))return;var y=void 0;if(o.includeCompletionsWithSnippetText){var v=e.factory.createEmptyStatement();y=e.factory.createBlock([v],!0),e.setSnippetElement(v,{kind:0,order:0})}else y=e.factory.createBlock([],!0);var h=m.parameters.map((function(t){return e.factory.createParameterDeclaration(void 0,t.dotDotDotToken,t.name,void 0,void 0,t.initializer)}));return e.factory.createMethodDeclaration(void 0,void 0,l,void 0,void 0,h,void 0,y);default:return}}(t,n,_,i,a,s);if(d){var p=E({removeComments:!0,module:o.module,target:o.target,omitTrailingSemicolon:!1,newLine:e.getNewLineKind(e.getNewLineCharacter(o,e.maybeBind(a,a.getNewLine)))});l=c?p.printAndFormatSnippetList(80,e.factory.createNodeArray([d],!0),_,c):p.printSnippetList(80,e.factory.createNodeArray([d],!0),_);var f=e.createPrinter({removeComments:!0,module:o.module,target:o.target,omitTrailingSemicolon:!0}),g=e.factory.createMethodSignature(void 0,"",d.questionToken,d.typeParameters,d.parameters,d.type);return{isSnippet:u,insertText:l,labelDetails:{detail:f.printNode(4,g,_)}}}}function E(t){var r,n=e.textChanges.createWriter(e.getNewLineCharacter(t)),i=e.createPrinter(t,n),a=o(o({},n),{write:function(e){return s(e,(function(){return n.write(e)}))},nonEscapingWrite:n.write,writeLiteral:function(e){return s(e,(function(){return n.writeLiteral(e)}))},writeStringLiteral:function(e){return s(e,(function(){return n.writeStringLiteral(e)}))},writeSymbol:function(e,t){return s(e,(function(){return n.writeSymbol(e,t)}))},writeParameter:function(e){return s(e,(function(){return n.writeParameter(e)}))},writeComment:function(e){return s(e,(function(){return n.writeComment(e)}))},writeProperty:function(e){return s(e,(function(){return n.writeProperty(e)}))}});return{printSnippetList:function(t,n,i){var a=c(t,n,i);return r?e.textChanges.applyChanges(a,r):a},printAndFormatSnippetList:function(t,n,i,a){var s={text:c(t,n,i),getLineAndCharacterOfPosition:function(t){return e.getLineAndCharacterOfPosition(this,t)}},u=e.getFormatCodeSettingsForWriting(a,i),l=e.flatMap(n,(function(t){var r=e.textChanges.assignPositionsToNode(t);return e.formatting.formatNodeGivenIndentation(r,s,i.languageVariant,0,0,o(o({},a),{options:u}))})),_=r?e.stableSort(e.concatenate(l,r),(function(t,r){return e.compareTextSpans(t.span,r.span)})):l;return e.textChanges.applyChanges(s.text,_)}};function s(t,i){var a=e.escapeSnippetText(t);if(a!==t){var o=n.getTextPos();i();var s=n.getTextPos();r=e.append(r||(r=[]),{newText:a,span:{start:o,length:s-o}})}else i()}function c(e,t,n){return r=void 0,a.clear(),i.writeList(e,t,n,a),a.getText()}}function k(t){var r=t.fileName?void 0:e.stripQuotes(t.moduleSymbol.name),n=!!t.isFromPackageJson||void 0;return u(t)?{exportName:t.exportName,moduleSpecifier:t.moduleSpecifier,ambientModuleName:r,fileName:t.fileName,isPackageJsonImport:n}:{exportName:t.exportName,exportMapKey:t.exportMapKey,fileName:t.fileName,ambientModuleName:t.fileName?void 0:e.stripQuotes(t.moduleSymbol.name),isPackageJsonImport:!!t.isFromPackageJson||void 0}}function N(e,t,r){var n="default"===e.exportName,i=!!e.isPackageJsonImport;return g(e)?{kind:32,exportName:e.exportName,moduleSpecifier:e.moduleSpecifier,symbolName:t,fileName:e.fileName,moduleSymbol:r,isDefaultExport:n,isFromPackageJson:i}:{kind:4,exportName:e.exportName,exportMapKey:e.exportMapKey,symbolName:t,fileName:e.fileName,moduleSymbol:r,isDefaultExport:n,isFromPackageJson:i}}function A(t,r,n){return/^\d+$/.test(n)?n:e.quote(t,r,n)}function F(e,t,r){return e===t||!!(1048576&e.flags)&&r.getExportSymbolOfSymbol(e)===t}function P(t){return c(t)?e.stripQuotes(t.moduleSymbol.name):u(t)?t.moduleSpecifier:1===(null==t?void 0:t.kind)?r.ThisProperty:64===(null==t?void 0:t.kind)?r.TypeOnlyAlias:void 0}function w(r,n,i,a,o,s,c,u,l,p,g,m,y,v,h,b,x,D,T,C,E,k,N,A){for(var F,P=e.timestamp(),w=function(t){var r=e.findAncestor(t,(function(t){return e.isFunctionBlock(t)||function(t){return t.parent&&e.isArrowFunction(t.parent)&&t.parent.body===t}(t)||e.isBindingPattern(t)?"quit":e.isVariableDeclaration(t)}));return r}(o),I=e.probablyUsesSemicolons(s),O=u.getTypeChecker(),M=new e.Map,L=0;L<r.length;L++){var R=r[L],B=null==E?void 0:E[L],j=z(R,l,B,g,!!x);if(j&&(!M.get(j.name)||B&&d(B))&&(1!==g||!k||W(R,k))){var J=j.name,U=j.needsConvertPropertyAccess,K=null!==(F=null==k?void 0:k[e.getSymbolId(R)])&&void 0!==F?F:t.SortText.LocationPriority,V=S(R,ue(R,O)?t.SortText.Deprecated(K):K,i,a,o,s,c,u,J,U,B,C,b,D,T,I,y,m,g,v,N,A);if(V){var q=(!B||_(B))&&!(void 0===R.parent&&!e.some(R.declarations,(function(e){return e.getSourceFile()===o.getSourceFile()})));M.set(J,q),e.insertSorted(n,V,f,!0)}}}return p("getCompletionsAtPosition: getCompletionEntriesFromSymbols: "+(e.timestamp()-P)),{has:function(e){return M.has(e)},add:function(e){return M.set(e,!0)}};function W(r,n){var i=r.flags;if(!e.isSourceFile(o)){if(e.isExportAssignment(o.parent))return!0;if(w&&r.valueDeclaration===w)return!1;var a=e.skipAlias(r,O);if(s.externalModuleIndicator&&!y.allowUmdGlobalAccess&&n[e.getSymbolId(r)]===t.SortText.GlobalsOrKeywords&&(n[e.getSymbolId(a)]===t.SortText.AutoImportSuggestions||n[e.getSymbolId(a)]===t.SortText.LocationPriority))return!1;if(i|=e.getCombinedLocalAndExportSymbolFlags(a),e.isInRightSideOfInternalImportEqualsDeclaration(o))return!!(1920&i);if(h)return ce(r,O)}return!!(111551&i)}}function I(t,n,i,a,o,s,c){if(o.data){var u=J(o.name,o.data,t,s);if(u){var l=j(a,i),_=l.contextToken,d=l.previousToken;return{type:"symbol",symbol:u.symbol,location:e.getTouchingPropertyName(i,a),previousToken:d,contextToken:_,isJsxInitializer:!1,isTypeOnlyLocation:!1,origin:u.origin}}}var p=t.getCompilerOptions(),f=B(t,n,i,p,a,{includeCompletionsForModuleExports:!0,includeCompletionsWithInsertText:!0},o,s,void 0);if(!f)return{type:"none"};if(0!==f.kind)return{type:"request",request:f};var g=f.symbols,m=f.literals,y=f.location,v=f.completionKind,h=f.symbolToOriginInfoMap,b=f.contextToken,D=f.previousToken,S=f.isJsxInitializer,T=f.isTypeOnlyLocation,C=e.find(m,(function(e){return x(i,c,e)===o.name}));return void 0!==C?{type:"literal",literal:C}:e.firstDefined(g,(function(t,n){var i=h[n],a=z(t,e.getEmitScriptTarget(p),i,v,f.isJsxIdentifierExpected);return a&&a.name===o.name&&(o.source===r.ClassMemberSnippet&&106500&t.flags||o.source===r.ObjectLiteralMethodSnippet&&8196&t.flags||P(i)===o.source)?{type:"symbol",symbol:t,location:y,origin:i,contextToken:b,previousToken:D,isJsxInitializer:S,isTypeOnlyLocation:T}:void 0}))||{type:"none"}}function O(t,r,n){return L(t,"",r,[e.displayPart(t,n)])}function M(t,r,n,i,a,o,s){var c=r.runWithCancellationToken(a,(function(r){return e.SymbolDisplay.getSymbolDisplayPartsDocumentationAndSymbolKind(r,t,n,i,i,7)})),u=c.displayParts,l=c.documentation,_=c.symbolKind,d=c.tags;return L(t.name,e.SymbolDisplay.getSymbolModifiers(r,t),_,u,l,d,o,s)}function L(e,t,r,n,i,a,o,s){return{name:e,kindModifiers:t,kind:r,displayParts:n,documentation:i,tags:a,codeActions:o,source:s,sourceDisplay:s}}function R(t,r,n){var i=n.getAccessibleSymbolChain(t,r,67108863,!1);return i?e.first(i):t.parent&&(function(e){var t;return!!(null===(t=e.declarations)||void 0===t?void 0:t.some((function(e){return 308===e.kind})))}(t.parent)?t:R(t.parent,r,n))}function B(r,n,i,a,s,c,u,l,_,d){var f=r.getTypeChecker(),g=h(i,a),m=e.timestamp(),v=e.getTokenAtPosition(i,s);n("getCompletionData: Get current token: "+(e.timestamp()-m)),m=e.timestamp();var b=e.isInComment(i,s,v);n("getCompletionData: Is inside comment: "+(e.timestamp()-m));var x=!1,D=!1;if(b){if(e.hasDocComment(i,s)){if(64===i.text.charCodeAt(s-1))return{kind:1};var S=e.getLineStartPositionForPosition(s,i);if(!/[^\*|\s(/)]/.test(i.text.substring(S,s)))return{kind:2}}var T=function(t,r){return e.findAncestor(t,(function(t){return!(!e.isJSDocTag(t)||!e.rangeContainsPosition(t,r))||!!e.isJSDoc(t)&&"quit"}))}(v,s);if(T){if(T.tagName.pos<=s&&s<=T.tagName.end)return{kind:1};var E=function(t){if(function(e){switch(e.kind){case 343:case 350:case 344:case 346:case 348:return!0;case 347:return!!e.constraint;default:return!1}}(t)){var r=e.isJSDocTemplateTag(t)?t.constraint:t.typeExpression;return r&&312===r.kind?r:void 0}return}(T);if(E&&((v=e.getTokenAtPosition(i,s))&&(e.isDeclarationName(v)||350===v.parent.kind&&v.parent.name===v)||(x=Le(E))),!x&&e.isJSDocParameterTag(T)&&(e.nodeIsMissing(T.name)||T.name.pos<=s&&s<=T.name.end))return{kind:3,tag:T}}if(!x)return void n("Returning an empty list because completion was inside a regular comment or plain text part of a JsDoc comment.")}m=e.timestamp();var k=!x&&e.isSourceFileJS(i),N=j(s,i),A=N.previousToken,F=N.contextToken;n("getCompletionData: Get previous token: "+(e.timestamp()-m));var P,w,I,O=v,M=!1,L=!1,B=!1,J=!1,U=!1,K=!1,V=e.getTouchingPropertyName(i,s),q=0,G=!1,Y=0;if(F){var ne=re(F);if(ne.keywordCompletion){if(ne.isKeywordOnlyCompletion)return{kind:4,keywordCompletions:[(I=ne.keywordCompletion,{name:e.tokenToString(I),kind:"keyword",kindModifiers:"",sortText:t.SortText.GlobalsOrKeywords})],isNewIdentifierLocation:ne.isNewIdentifierLocation};q=function(t){if(154===t)return 8;e.Debug.fail("Unknown mapping from SyntaxKind to KeywordCompletionFilters")}(ne.keywordCompletion)}if(ne.replacementSpan&&c.includeCompletionsForImportStatements&&c.includeCompletionsWithInsertText&&(Y|=2,w=ne,G=ne.isNewIdentifierLocation),!ne.replacementSpan&&function(t){var r=e.timestamp(),a=function(t){return(e.isRegularExpressionLiteral(t)||e.isStringTextContainingNode(t))&&(e.rangeContainsPositionExclusive(e.createTextRangeFromSpan(e.createTextSpanFromNode(t)),s)||s===t.end&&(!!t.isUnterminated||e.isRegularExpressionLiteral(t)))}(t)||function(t){var r=t.parent,n=r.kind;switch(t.kind){case 27:return 257===n||function(t){return 258===t.parent.kind&&!e.isPossiblyTypeArgumentPosition(t,i,f)}(t)||240===n||263===n||we(n)||261===n||204===n||262===n||e.isClassLike(r)&&!!r.typeParameters&&r.typeParameters.end>=t.pos;case 24:case 22:return 204===n;case 58:return 205===n;case 20:return 295===n||we(n);case 18:return 263===n;case 29:return 260===n||228===n||261===n||262===n||e.isFunctionLikeKind(n);case 124:return 169===n&&!e.isClassLike(r.parent);case 25:return 166===n||!!r.parent&&204===r.parent.kind;case 123:case 121:case 122:return 166===n&&!e.isConstructorDeclaration(r.parent);case 128:return 273===n||278===n||271===n;case 137:case 151:return!ee(t);case 79:if(273===n&&t===r.name&&"type"===t.text)return!1;break;case 84:case 92:case 118:case 98:case 113:case 100:case 119:case 85:case 138:return!0;case 154:return 273!==n;case 41:return e.isFunctionLike(t.parent)&&!e.isMethodDeclaration(t.parent)}if(H(Q(t))&&ee(t))return!1;if(Fe(t)&&(!e.isIdentifier(t)||e.isParameterPropertyModifier(Q(t))||Le(t)))return!1;switch(Q(t)){case 126:case 84:case 85:case 136:case 92:case 98:case 118:case 119:case 121:case 122:case 123:case 124:case 113:return!0;case 132:return e.isPropertyDeclaration(t.parent)}var a=e.findAncestor(t.parent,e.isClassLike);if(a&&t===A&&Pe(t,s))return!1;var o=e.getAncestor(t.parent,169);if(o&&t!==A&&e.isClassLike(A.parent.parent)&&s<=A.end){if(Pe(t,A.end))return!1;if(63!==t.kind&&(e.isInitializedProperty(o)||e.hasType(o)))return!0}return e.isDeclarationName(t)&&!e.isShorthandPropertyAssignment(t.parent)&&!e.isJsxAttribute(t.parent)&&!(e.isClassLike(t.parent)&&(t!==A||s>A.end))}(t)||function(e){if(8===e.kind){var t=e.getFullText();return"."===t.charAt(t.length-1)}return!1}(t)||function(e){if(11===e.kind)return!0;if(31===e.kind&&e.parent){if(V===e.parent&&(283===V.kind||282===V.kind))return!1;if(283===e.parent.kind)return 283!==V.parent.kind;if(284===e.parent.kind||282===e.parent.kind)return!!e.parent.parent&&281===e.parent.parent.kind}return!1}(t)||e.isBigIntLiteral(t);return n("getCompletionsAtPosition: isCompletionListBlocker: "+(e.timestamp()-r)),a}(F))return n("Returning an empty list because completion was requested in an invalid position."),q?y(q,k,Ae()):void 0;var ie=F.parent;if(24===F.kind||28===F.kind)switch(M=24===F.kind,L=28===F.kind,ie.kind){case 208:O=(P=ie).expression;var ae=e.getLeftmostAccessExpression(P);if(e.nodeIsMissing(ae)||(e.isCallExpression(O)||e.isFunctionLike(O))&&O.end===F.pos&&O.getChildCount(i)&&21!==e.last(O.getChildren(i)).kind)return;break;case 163:O=ie.left;break;case 264:O=ie.name;break;case 202:O=ie;break;case 233:O=ie.getFirstToken(i),e.Debug.assert(100===O.kind||103===O.kind);break;default:return}else if(!w){if(ie&&208===ie.kind&&(F=ie,ie=ie.parent),v.parent===V)switch(v.kind){case 31:281!==v.parent.kind&&283!==v.parent.kind||(V=v);break;case 43:282===v.parent.kind&&(V=v)}switch(ie.kind){case 284:43===F.kind&&(J=!0,V=F);break;case 223:if(!te(ie))break;case 282:case 281:case 283:K=!0,29===F.kind&&(B=!0,V=F);break;case 291:case 290:19===A.kind&&31===v.kind&&(K=!0);break;case 288:if(ie.initializer===A&&A.end<s){K=!0;break}switch(A.kind){case 63:U=!0;break;case 79:K=!0,ie!==A.parent&&!ie.initializer&&e.findChildOfKind(ie,63,i)&&(U=A)}}}}var oe,se=e.timestamp(),ue=5,_e=!1,de=!1,pe=[],fe=[],ge=[],me=new e.Map,ye=x||!!w&&e.isTypeOnlyImportOrExportDeclaration(V.parent)||!function(t){return t&&(112===t.kind&&(183===t.parent.kind||e.isTypeOfExpression(t.parent))||129===t.kind&&179===t.parent.kind)}(F)&&(e.isPossiblyTypeArgumentPosition(F,i,f)||e.isPartOfTypeNode(V)||function(t){if(t){var r=t.parent.kind;switch(t.kind){case 58:return 169===r||168===r||166===r||257===r||e.isFunctionLikeKind(r);case 63:return 262===r;case 128:return 231===r;case 29:return 180===r||213===r;case 94:return 165===r;case 150:return 235===r}}return!1}(F)),ve=e.memoizeOne((function(t){return e.createModuleSpecifierResolutionHost(t?l.getPackageJsonAutoImportProvider():r,l)}));if(M||L)!function(){ue=2;var t=e.isLiteralImportTypeNode(O),r=x||t&&!O.isTypeOf||e.isPartOfTypeNode(O.parent)||e.isPossiblyTypeArgumentPosition(F,i,f),n=e.isInRightSideOfInternalImportEqualsDeclaration(O);if(e.isEntityName(O)||t||e.isPropertyAccessExpression(O)){var a=e.isModuleDeclaration(O.parent);a&&(G=!0);var o=f.getSymbolAtLocation(O);if(o&&1920&(o=e.skipAlias(o,f)).flags){var s=f.getExportsOfModule(o);e.Debug.assertEachIsDefined(s,"getExportsOfModule() should all be defined");for(var u=function(e){return f.isValidPropertyAccess(t?O:O.parent,e.name)},l=function(e){return ce(e,f)},_=a?function(e){var t;return!!(1920&e.flags)&&!(null===(t=e.declarations)||void 0===t?void 0:t.every((function(e){return e.parent===O.parent})))}:n?function(e){return l(e)||u(e)}:r?l:u,d=0,p=s;d<p.length;d++){var g=p[d];_(g)&&pe.push(g)}if(!r&&o.declarations&&o.declarations.some((function(e){return 308!==e.kind&&264!==e.kind&&263!==e.kind}))){var m=!1;if((y=f.getTypeOfSymbolAtLocation(o,O).getNonOptionalType()).isNullableType())((v=M&&!L&&!1!==c.includeAutomaticOptionalChainCompletions)||L)&&(y=y.getNonNullableType(),v&&(m=!0));Te(y,!!(32768&O.flags),m)}return}}if(!r){f.tryGetThisTypeAt(O,!1);var y,v;m=!1;if((y=f.getTypeAtLocation(O).getNonOptionalType()).isNullableType())((v=M&&!L&&!1!==c.includeAutomaticOptionalChainCompletions)||L)&&(y=y.getNonNullableType(),v&&(m=!0));Te(y,!!(32768&O.flags),m)}}();else if(B)pe=f.getJsxIntrinsicTagNamesAt(V),e.Debug.assertEachIsDefined(pe,"getJsxIntrinsicTagNames() should all be defined"),ke(),ue=1,q=0;else if(J){var he=F.parent.parent.openingElement.tagName,be=f.getSymbolAtLocation(he);be&&(pe=[be]),ue=1,q=0}else if(!ke())return q?y(q,k,G):void 0;n("getCompletionData: Semantic work: "+(e.timestamp()-se));var xe=A&&function(t,r,n,i){var a=t.parent;switch(t.kind){case 79:return e.getContextualTypeFromParent(t,i);case 63:switch(a.kind){case 257:return i.getContextualType(a.initializer);case 223:return i.getTypeAtLocation(a.left);case 288:return i.getContextualTypeForJsxAttribute(a);default:return}case 103:return i.getContextualType(a);case 82:var o=e.tryCast(a,e.isCaseClause);return o?e.getSwitchedType(o,i):void 0;case 18:return!e.isJsxExpression(a)||e.isJsxElement(a.parent)||e.isJsxFragment(a.parent)?void 0:i.getContextualTypeForJsxAttribute(a.parent);default:var s=e.SignatureHelp.getArgumentInfoForCompletions(t,r,n);return s?i.getContextualTypeForArgumentAtIndex(s.invocation,s.argumentIndex+(27===t.kind?1:0)):e.isEqualityOperatorKind(t.kind)&&e.isBinaryExpression(a)&&e.isEqualityOperatorKind(a.operatorToken.kind)?i.getTypeAtLocation(a.left):i.getContextualType(t)}}(A,s,i,f),De=e.mapDefined(xe&&(xe.isUnion()?xe.types:[xe]),(function(e){return!e.isLiteral()||1024&e.flags?void 0:e.value})),Se=A&&xe&&function(t,r,n){return e.firstDefined(r&&(r.isUnion()?r.types:[r]),(function(r){var i=r&&r.symbol;return i&&424&i.flags&&!e.isAbstractConstructorSymbol(i)?R(i,t,n):void 0}))}(A,xe,f);return{kind:0,symbols:pe,completionKind:ue,isInSnippetScope:D,propertyAccessToConvert:P,isNewIdentifierLocation:G,location:V,keywordFilters:q,literals:De,symbolToOriginInfoMap:fe,recommendedCompletion:Se,previousToken:A,contextToken:F,isJsxInitializer:U,insideJsDocTagTypeExpression:x,symbolToSortTextMap:ge,isTypeOnlyLocation:ye,isJsxIdentifierExpected:K,isRightOfOpenTag:B,importStatementCompletion:w,hasUnresolvedAutoImports:de,flags:Y};function Te(t,r,n){G=!!t.getStringIndexType(),L&&e.some(t.getCallSignatures())&&(G=!0);var i=202===O.kind?O:O.parent;if(g)for(var a=0,o=t.getApparentProperties();a<o.length;a++){var s=o[a];f.isValidPropertyAccessForCompletions(i,t,s)&&Ce(s,!1,n)}else pe.push.apply(pe,e.filter(Z(t,f),(function(e){return f.isValidPropertyAccessForCompletions(i,t,e)})));if(r&&c.includeCompletionsWithInsertText){var u=f.getPromisedTypeOfPromise(t);if(u)for(var l=0,_=u.getApparentProperties();l<_.length;l++){s=_[l];f.isValidPropertyAccessForCompletions(i,u,s)&&Ce(s,!0,n)}}}function Ce(n,a,o){var u,_=e.firstDefined(n.declarations,(function(t){return e.tryCast(e.getNameOfDeclaration(t),e.isComputedPropertyName)}));if(_){var d=Ee(_.expression),p=d&&f.getSymbolAtLocation(d),g=p&&R(p,F,f);if(g&&e.addToSeen(me,e.getSymbolId(g))){var m=pe.length;pe.push(g);var y=g.parent;if(y&&e.isExternalModuleSymbol(y)&&f.tryGetMemberInModuleExportsAndProperties(g.name,y)===g){var v=e.isExternalModuleNameRelative(e.stripQuotes(y.name))?null===(u=e.getSourceFileOfModule(y))||void 0===u?void 0:u.fileName:void 0,h=((oe||(oe=e.codefix.createImportSpecifierResolver(i,r,l,c))).getModuleSpecifierForBestExportInfo([{exportKind:0,moduleFileName:v,isFromPackageJson:!1,moduleSymbol:y,symbol:g,targetFlags:e.skipAlias(g,f).flags}],g.name,s,e.isValidTypeOnlyAliasUseSite(V))||{}).moduleSpecifier;if(h){var b={kind:S(6),moduleSymbol:y,isDefaultExport:!1,symbolName:g.name,exportName:g.name,fileName:v,moduleSpecifier:h};fe[m]=b}}else fe[m]={kind:S(2)}}else c.includeCompletionsWithInsertText&&(D(n),x(n),pe.push(n))}else D(n),x(n),pe.push(n);function x(r){(function(t){return!!(t.valueDeclaration&&32&e.getEffectiveModifierFlags(t.valueDeclaration)&&e.isClassLike(t.valueDeclaration.parent))})(r)&&(ge[e.getSymbolId(r)]=t.SortText.LocalDeclarationPriority)}function D(t){c.includeCompletionsWithInsertText&&(a&&e.addToSeen(me,e.getSymbolId(t))?fe[pe.length]={kind:S(8)}:o&&(fe[pe.length]={kind:16}))}function S(e){return o?16|e:e}}function Ee(t){return e.isIdentifier(t)?t:e.isPropertyAccessExpression(t)?Ee(t.expression):void 0}function ke(){var n=function(){var t=function(t){if(!t)return;var r=t.parent;switch(t.kind){case 18:if(e.isTypeLiteralNode(r))return r;break;case 26:case 27:case 79:if(168===r.kind&&e.isTypeLiteralNode(r.parent))return r.parent}return}(F);if(!t)return 0;var r=(e.isIntersectionTypeNode(t.parent)?t.parent:void 0)||t,n=$(r,f);if(!n)return 0;var i=f.getTypeFromTypeNode(r),a=Z(n,f),o=Z(i,f),s=new e.Set;return o.forEach((function(e){return s.add(e.escapedName)})),pe=e.concatenate(pe,e.filter(a,(function(e){return!s.has(e.escapedName)}))),ue=0,G=!0,1}()||function(){var n,i,s=pe.length,u=function(t){if(t){var r=t.parent;switch(t.kind){case 18:case 27:if(e.isObjectLiteralExpression(r)||e.isObjectBindingPattern(r))return r;break;case 41:return e.isMethodDeclaration(r)?e.tryCast(r.parent,e.isObjectLiteralExpression):void 0;case 79:return"async"===t.text&&e.isShorthandPropertyAssignment(t.parent)?t.parent.parent:void 0}}return}(F);if(!u)return 0;if(ue=0,207===u.kind){var d=function(t,r){var n=r.getContextualType(t);if(n)return n;var i=e.walkUpParenthesizedExpressions(t.parent);if(e.isBinaryExpression(i)&&63===i.operatorToken.kind&&t===i.left)return r.getTypeAtLocation(i);if(e.isExpression(i))return r.getContextualType(i);return}(u,f);if(void 0===d)return 33554432&u.flags?2:(_e=!0,0);var p=f.getContextualType(u,4),g=(p||d).getStringIndexType(),m=(p||d).getNumberIndexType();if(G=!!g||!!m,n=X(d,p,u,f),i=u.properties,0===n.length&&!m)return _e=!0,0}else{e.Debug.assert(203===u.kind),G=!1;var y=e.getRootDeclaration(u.parent);if(!e.isVariableLike(y))return e.Debug.fail("Root declaration is not variable-like.");var v=e.hasInitializer(y)||!!e.getEffectiveTypeAnnotationNode(y)||247===y.parent.parent.kind;if(v||166!==y.kind||(e.isExpression(y.parent)?v=!!f.getContextualType(y.parent):171!==y.parent.kind&&175!==y.parent.kind||(v=e.isExpression(y.parent.parent)&&!!f.getContextualType(y.parent.parent))),v){var h=f.getTypeAtLocation(u);if(!h)return 2;n=f.getPropertiesOfType(h).filter((function(e){return f.isPropertyAccessible(u,!1,!1,h,e)})),i=u.elements}}if(n&&n.length>0){var b=function(t,r){if(0===r.length)return t;for(var n=new e.Set,i=new e.Set,a=0,o=r;a<o.length;a++){var s=o[a];if((299===s.kind||300===s.kind||205===s.kind||171===s.kind||174===s.kind||175===s.kind||301===s.kind)&&!Le(s)){var c=void 0;if(e.isSpreadAssignment(s))Ie(s,n);else if(e.isBindingElement(s)&&s.propertyName)79===s.propertyName.kind&&(c=s.propertyName.escapedText);else{var u=e.getNameOfDeclaration(s);c=u&&e.isPropertyNameLiteral(u)?e.getEscapedTextOfIdentifierOrLiteral(u):void 0}void 0!==c&&i.add(c)}}var l=t.filter((function(e){return!i.has(e.escapedName)}));return Me(n,l),l}(n,e.Debug.checkDefined(i));pe=e.concatenate(pe,b),Oe(),207===u.kind&&c.includeCompletionsWithObjectLiteralMethodSnippets&&c.includeCompletionsWithInsertText&&(function(r){for(var n,i=r;i<pe.length;i++){var o=pe[i],s=e.getSymbolId(o),c=null==fe?void 0:fe[i],u=z(o,e.getEmitScriptTarget(a),c,0,!1);if(u){var l=null!==(n=ge[s])&&void 0!==n?n:t.SortText.LocationPriority,_=u.name;ge[s]=t.SortText.ObjectLiteralProperty(l,_)}}}(s),function(t,n){if(e.isInJSFile(V))return;t.forEach((function(t){if(function(e){if(!(8196&e.flags))return!1;return!0}(t)){var i=z(t,e.getEmitScriptTarget(a),void 0,0,!1);if(i){var s=C(t,i.name,n,r,l,a,c,_);if(s){var u=o({kind:128},s);Y|=32,fe[pe.length]=u,pe.push(t)}}}}))}(b,u))}return 1}()||(w?(G=!0,Ne(),1):0)||function(){if(!F)return 0;var t=18===F.kind||27===F.kind?e.tryCast(F.parent,e.isNamedImportsOrExports):e.isTypeKeywordTokenOrIdentifier(F)?e.tryCast(F.parent.parent,e.isNamedImportsOrExports):void 0;if(!t)return 0;e.isTypeKeywordTokenOrIdentifier(F)||(q=8);var r=(272===t.kind?t.parent.parent:t.parent).moduleSpecifier;if(!r)return G=!0,272===t.kind?2:0;var n=f.getSymbolAtLocation(r);if(!n)return G=!0,2;ue=3,G=!1;var i=f.getExportsAndPropertiesOfModule(n),a=new e.Set(t.elements.filter((function(e){return!Le(e)})).map((function(e){return(e.propertyName||e.name).escapedText}))),o=i.filter((function(e){return"default"!==e.escapedName&&!a.has(e.escapedName)}));pe=e.concatenate(pe,o),o.length||(q=0);return 1}()||function(){var r,n=!F||18!==F.kind&&27!==F.kind?void 0:e.tryCast(F.parent,e.isNamedExports);if(!n)return 0;var i=e.findAncestor(n,e.or(e.isSourceFile,e.isModuleDeclaration));return ue=5,G=!1,null===(r=i.locals)||void 0===r||r.forEach((function(r,n){var a,o;pe.push(r),(null===(o=null===(a=i.symbol)||void 0===a?void 0:a.exports)||void 0===o?void 0:o.has(n))&&(ge[e.getSymbolId(r)]=t.SortText.OptionalMember)})),1}()||(function(t){if(t){var r=t.parent;switch(t.kind){case 20:case 27:return e.isConstructorDeclaration(t.parent)?t.parent:void 0;default:if(Fe(t))return r.parent}}}(F)?(ue=5,G=!0,q=4,1):0)||function(){var t=function(t,r,n,i){switch(n.kind){case 351:return e.tryCast(n.parent,e.isObjectTypeDeclaration);case 1:var a=e.tryCast(e.lastOrUndefined(e.cast(n.parent,e.isSourceFile).statements),e.isObjectTypeDeclaration);if(a&&!e.findChildOfKind(a,19,t))return a;break;case 79:var o=n.originalKeywordKind;if(o&&e.isKeyword(o))return;if(e.isPropertyDeclaration(n.parent)&&n.parent.initializer===n)return;if(ee(n))return e.findAncestor(n,e.isObjectTypeDeclaration)}if(!r)return;if(135===n.kind||e.isIdentifier(r)&&e.isPropertyDeclaration(r.parent)&&e.isClassLike(n))return e.findAncestor(r,e.isClassLike);switch(r.kind){case 63:return;case 26:case 19:return ee(n)&&n.parent.name===n?n.parent.parent:e.tryCast(n,e.isObjectTypeDeclaration);case 18:case 27:return e.tryCast(r.parent,e.isObjectTypeDeclaration);default:if(!ee(r))return e.getLineAndCharacterOfPosition(t,r.getEnd()).line!==e.getLineAndCharacterOfPosition(t,i).line&&e.isObjectTypeDeclaration(n)?n:void 0;var s=e.isClassLike(r.parent.parent)?H:W;return s(r.kind)||41===r.kind||e.isIdentifier(r)&&s(e.stringToToken(r.text))?r.parent.parent:void 0}}(i,F,V,s);if(!t)return 0;if(ue=3,G=!0,q=41===F.kind?0:e.isClassLike(t)?2:3,!e.isClassLike(t))return 1;var r=26===F.kind?F.parent.parent:F.parent,n=e.isClassElement(r)?e.getEffectiveModifierFlags(r):0;if(79===F.kind&&!Le(F))switch(F.getText()){case"private":n|=8;break;case"static":n|=32;break;case"override":n|=16384}e.isClassStaticBlockDeclaration(r)&&(n|=32);if(!(8&n)){var a=e.isClassLike(t)&&16384&n?e.singleElementArray(e.getEffectiveBaseTypeNode(t)):e.getAllSuperTypeNodes(t),o=e.flatMap(a,(function(e){var r=f.getTypeAtLocation(e);return 32&n?(null==r?void 0:r.symbol)&&f.getPropertiesOfType(f.getTypeOfSymbolAtLocation(r.symbol,t)):r&&f.getPropertiesOfType(r)}));pe=e.concatenate(pe,function(t,r,n){for(var i=new e.Set,a=0,o=r;a<o.length;a++){var s=o[a];if((169===s.kind||171===s.kind||174===s.kind||175===s.kind)&&(!Le(s)&&!e.hasEffectiveModifier(s,8)&&e.isStatic(s)===!!(32&n))){var c=e.getPropertyNameForPropertyNameNode(s.name);c&&i.add(c)}}return t.filter((function(t){return!(i.has(t.escapedName)||!t.declarations||8&e.getDeclarationModifierFlagsFromSymbol(t)||t.valueDeclaration&&e.isPrivateIdentifierClassElementDeclaration(t.valueDeclaration))}))}(o,t.members,n))}return 1}()||function(){var t=function(t){if(t){var r=t.parent;switch(t.kind){case 31:case 30:case 43:case 79:case 208:case 289:case 288:case 290:if(r&&(282===r.kind||283===r.kind)){if(31===t.kind){var n=e.findPrecedingToken(t.pos,i,void 0);if(!r.typeArguments||n&&43===n.kind)break}return r}if(288===r.kind)return r.parent.parent;break;case 10:if(r&&(288===r.kind||290===r.kind))return r.parent.parent;break;case 19:if(r&&291===r.kind&&r.parent&&288===r.parent.kind)return r.parent.parent.parent;if(r&&290===r.kind)return r.parent.parent}}return}(F),r=t&&f.getContextualType(t.attributes);if(!r)return 0;var n=t&&f.getContextualType(t.attributes,4);return pe=e.concatenate(pe,function(t,r){for(var n=new e.Set,i=new e.Set,a=0,o=r;a<o.length;a++){var s=o[a];Le(s)||(288===s.kind?n.add(s.name.escapedText):e.isJsxSpreadAttribute(s)&&Ie(s,i))}var c=t.filter((function(e){return!n.has(e.escapedName)}));return Me(i,c),c}(X(r,n,t.attributes,f),t.attributes.properties)),Oe(),ue=3,G=!1,1}()||(function(){q=function(t){if(t){var r,n=e.findAncestor(t.parent,(function(t){return e.isClassLike(t)?"quit":!(!e.isFunctionLikeDeclaration(t)||r!==t.body)||(r=t,!1)}));return n&&n}}(F)?5:1,ue=1,G=Ae(),A!==F&&e.Debug.assert(!!A,"Expected 'contextToken' to be defined when different from 'previousToken'.");var r=A!==F?A.getStart():s,n=function(t,r,n){var i=t;for(;i&&!e.positionBelongsToNode(i,r,n);)i=i.parent;return i}(F,r,i)||i;D=function(t){switch(t.kind){case 308:case 225:case 291:case 238:return!0;default:return e.isStatement(t)}}(n);var a=2887656|(ye?0:111551),o=A&&!e.isValidTypeOnlyAliasUseSite(A);pe=e.concatenate(pe,f.getSymbolsInScope(n,a)),e.Debug.assertEachIsDefined(pe,"getSymbolsInScope() should all be defined");for(var u=0;u<pe.length;u++){var l=pe[u];if(f.isArgumentsSymbol(l)||e.some(l.declarations,(function(e){return e.getSourceFile()===i}))||(ge[e.getSymbolId(l)]=t.SortText.GlobalsOrKeywords),o&&!(111551&l.flags)){var _=l.declarations&&e.find(l.declarations,e.isTypeOnlyImportOrExportDeclaration);if(_){var d={kind:64,declaration:_};fe[u]=d}}}if(c.includeCompletionsWithInsertText&&308!==n.kind){var p=f.tryGetThisTypeAt(n,!1,e.isClassLike(n.parent)?n:void 0);if(p&&!function(e,t,r){var n=r.resolveName("self",void 0,111551,!1);if(n&&r.getTypeOfSymbolAtLocation(n,t)===e)return!0;var i=r.resolveName("global",void 0,111551,!1);if(i&&r.getTypeOfSymbolAtLocation(i,t)===e)return!0;var a=r.resolveName("globalThis",void 0,111551,!1);if(a&&r.getTypeOfSymbolAtLocation(a,t)===e)return!0;return!1}(p,i,f))for(var g=0,m=Z(p,f);g<m.length;g++){l=m[g];fe[pe.length]={kind:1},pe.push(l),ge[e.getSymbolId(l)]=t.SortText.SuggestedClassMembers}}Ne(),ye&&(q=F&&e.isAssertionExpression(F.parent)?6:7)}(),1);return 1===n}function Ne(){var n,a;if((w||!_e&&c.includeCompletionsForModuleExports&&(i.externalModuleIndicator||i.commonJsModuleIndicator||e.compilerOptionsIndicateEsModules(r.getCompilerOptions())||e.programContainsModules(r)))&&(e.Debug.assert(!(null==u?void 0:u.data),"Should not run 'collectAutoImports' when faster path is available via `data`"),!u||u.source)){Y|=1;var o=A===F&&w?"":A&&e.isIdentifier(A)?A.text.toLowerCase():"",_=null===(n=l.getModuleSpecifierCache)||void 0===n?void 0:n.call(l),f=e.getExportInfoMap(i,l,r,c,d),g=null===(a=l.getPackageJsonAutoImportProvider)||void 0===a?void 0:a.call(l),m=u?void 0:e.createPackageJsonImportFilter(i,c,l);p("collectAutoImports",l,oe||(oe=e.codefix.createImportSpecifierResolver(i,r,l,c)),r,s,c,!!w,e.isValidTypeOnlyAliasUseSite(V),(function(r){f.search(i.path,B,(function(t,r){if(!e.isIdentifierText(t,e.getEmitScriptTarget(l.getCompilationSettings())))return!1;if(!u&&e.isStringANonContextualKeyword(t))return!1;if(!(ye||w||111551&r))return!1;if(ye&&!(790504&r))return!1;var n=t.charCodeAt(0);return(!B||!(n<65||n>90))&&(!!u||le(t,o))}),(function(n,i,a,o){var s;if(!u||e.some(n,(function(t){return u.source===e.stripQuotes(t.moduleSymbol.name)}))){var c=e.find(n,y);if(c){var l=r.tryResolve(n,i,a)||{};if("failed"!==l){var _,d=c;"skipped"!==l&&(d=void 0===(s=l.exportInfo)?c:s,_=l.moduleSpecifier);var p=1===d.exportKind;!function(r,n){var i=e.getSymbolId(r);if(ge[i]===t.SortText.GlobalsOrKeywords)return;fe[pe.length]=n,ge[i]=w?t.SortText.LocationPriority:t.SortText.AutoImportSuggestions,pe.push(r)}(p&&e.getLocalSymbolForExportDefault(d.symbol)||d.symbol,{kind:_?32:4,moduleSpecifier:_,symbolName:i,exportMapKey:o,exportName:2===d.exportKind?"export=":d.symbol.name,fileName:d.moduleFileName,isDefaultExport:p,moduleSymbol:d.moduleSymbol,isFromPackageJson:d.isFromPackageJson})}}}})),de=r.skippedAny(),Y|=r.resolvedAny()?8:0,Y|=r.resolvedBeyondLimit()?16:0}))}function y(t){var n=e.tryCast(t.moduleSymbol.valueDeclaration,e.isSourceFile);if(!n){var a=e.stripQuotes(t.moduleSymbol.name);return(!e.JsTyping.nodeCoreModules.has(a)||e.startsWith(a,"node:")===e.shouldUseUriStyleNodeCoreModules(i,r))&&(!m||m.allowsImportingAmbientModule(t.moduleSymbol,ve(t.isFromPackageJson)))}return e.isImportableFile(t.isFromPackageJson?g:r,i,n,c,m,ve(t.isFromPackageJson),_)}}function Ae(){if(F){var e=F.parent.kind,t=Q(F);switch(t){case 27:return 210===e||173===e||211===e||206===e||223===e||181===e||207===e;case 20:return 210===e||173===e||211===e||214===e||193===e;case 22:return 206===e||178===e||164===e;case 142:case 143:case 100:return!0;case 24:return 264===e;case 18:return 260===e||207===e;case 63:return 257===e||223===e;case 15:return 225===e;case 16:return 236===e;case 132:return 171===e||300===e;case 41:return 171===e}if(H(t))return!0}return!1}function Fe(t){return!!t.parent&&e.isParameter(t.parent)&&e.isConstructorDeclaration(t.parent.parent)&&(e.isParameterPropertyModifier(t.kind)||e.isDeclarationName(t))}function Pe(t,r){return 63!==t.kind&&(26===t.kind||!e.positionsAreOnSameLine(t.end,r,i))}function we(t){return e.isFunctionLikeKind(t)&&173!==t}function Ie(e,t){var r=e.expression,n=f.getSymbolAtLocation(r),i=n&&f.getTypeOfSymbolAtLocation(n,r),a=i&&i.properties;a&&a.forEach((function(e){t.add(e.name)}))}function Oe(){pe.forEach((function(r){var n;if(16777216&r.flags){var i=e.getSymbolId(r);ge[i]=null!==(n=ge[i])&&void 0!==n?n:t.SortText.OptionalMember}}))}function Me(r,n){if(0!==r.size)for(var i=0,a=n;i<a.length;i++){var o=a[i];r.has(o.name)&&(ge[e.getSymbolId(o)]=t.SortText.MemberDeclaredBySpreadAssignment)}}function Le(e){return e.getStart(i)<=s&&s<=e.getEnd()}}function j(t,r){var n=e.findPrecedingToken(t,r);return n&&t<=n.end&&(e.isMemberName(n)||e.isKeyword(n.kind))?{contextToken:e.findPrecedingToken(n.getFullStart(),r,void 0),previousToken:n}:{contextToken:n,previousToken:n}}function J(t,r,n,i){var a=r.isPackageJsonImport?i.getPackageJsonAutoImportProvider():n,o=a.getTypeChecker(),s=r.ambientModuleName?o.tryFindAmbientModule(r.ambientModuleName):r.fileName?o.getMergedSymbol(e.Debug.checkDefined(a.getSourceFile(r.fileName)).symbol):void 0;if(s){var c="export="===r.exportName?o.resolveExternalModuleSymbol(s):o.tryGetMemberInModuleExportsAndProperties(r.exportName,s);if(c)return{symbol:c="default"===r.exportName&&e.getLocalSymbolForExportDefault(c)||c,origin:N(r,t,s)}}}function z(t,r,n,i,a){var o=function(e){return c(e)||u(e)}(n)?n.symbolName:t.name;if(!(void 0===o||1536&t.flags&&e.isSingleOrDoubleQuote(o.charCodeAt(0))||e.isKnownSymbol(t))){var s={name:o,needsConvertPropertyAccess:!1};if(e.isIdentifierText(o,r,a?1:0)||t.valueDeclaration&&e.isPrivateIdentifierClassElementDeclaration(t.valueDeclaration))return s;switch(i){case 3:return;case 0:return{name:JSON.stringify(o),needsConvertPropertyAccess:!1};case 2:case 1:return 32===o.charCodeAt(0)?void 0:{name:o,needsConvertPropertyAccess:!0};case 5:case 4:return s;default:e.Debug.assertNever(i)}}}t.moduleSpecifierResolutionLimit=100,t.moduleSpecifierResolutionCacheAttemptLimit=1e3,t.SortText={LocalDeclarationPriority:"10",LocationPriority:"11",OptionalMember:"12",MemberDeclaredBySpreadAssignment:"13",SuggestedClassMembers:"14",GlobalsOrKeywords:"15",AutoImportSuggestions:"16",ClassMemberSnippets:"17",JavascriptIdentifiers:"18",Deprecated:function(e){return"z"+e},ObjectLiteralProperty:function(e,t){return"".concat(e,"\0").concat(t,"\0")},SortBelow:function(e){return e+"1"}},function(e){e.ThisProperty="ThisProperty/",e.ClassMemberSnippet="ClassMemberSnippet/",e.TypeOnlyAlias="TypeOnlyAlias/",e.ObjectLiteralMethodSnippet="ObjectLiteralMethodSnippet/"}(r=t.CompletionSource||(t.CompletionSource={})),function(e){e[e.ThisType=1]="ThisType",e[e.SymbolMember=2]="SymbolMember",e[e.Export=4]="Export",e[e.Promise=8]="Promise",e[e.Nullable=16]="Nullable",e[e.ResolvedExport=32]="ResolvedExport",e[e.TypeOnlyAlias=64]="TypeOnlyAlias",e[e.ObjectLiteralMethod=128]="ObjectLiteralMethod",e[e.SymbolMemberNoExport=2]="SymbolMemberNoExport",e[e.SymbolMemberExport=6]="SymbolMemberExport"}(n||(n={})),function(e){e[e.None=0]="None",e[e.All=1]="All",e[e.ClassElementKeywords=2]="ClassElementKeywords",e[e.InterfaceElementKeywords=3]="InterfaceElementKeywords",e[e.ConstructorParameterKeywords=4]="ConstructorParameterKeywords",e[e.FunctionLikeBodyKeywords=5]="FunctionLikeBodyKeywords",e[e.TypeAssertionKeywords=6]="TypeAssertionKeywords",e[e.TypeKeywords=7]="TypeKeywords",e[e.TypeKeyword=8]="TypeKeyword",e[e.Last=8]="Last"}(i||(i={})),function(e){e[e.Continue=0]="Continue",e[e.Success=1]="Success",e[e.Fail=2]="Fail"}(a||(a={})),t.getCompletionsAtPosition=function(r,n,i,a,s,c,u,l,_,d){var y,x=j(s,a).previousToken;if(!u||e.isInString(a,s,x)||function(t,r,n,i){switch(r){case".":case"@":return!0;case'"':case"'":case"`":return!!n&&e.isStringLiteralOrTemplate(n)&&i===n.getStart(t)+1;case"#":return!!n&&e.isPrivateIdentifier(n)&&!!e.getContainingClass(n);case"<":return!!n&&29===n.kind&&(!e.isBinaryExpression(n.parent)||te(n.parent));case"/":return!!n&&(e.isStringLiteralLike(n)?!!e.tryGetImportFromModuleSpecifier(n):43===n.kind&&e.isJsxClosingElement(n.parent));case" ":return!!n&&e.isImportKeyword(n)&&308===n.parent.kind;default:return e.Debug.assertNever(r)}}(a,u,x,s)){if(" "===u)return c.includeCompletionsForImportStatements&&c.includeCompletionsWithInsertText?{isGlobalCompletion:!0,isMemberCompletion:!1,isNewIdentifierLocation:!0,isIncomplete:!0,entries:[]}:void 0;var S=n.getCompilerOptions(),T=c.allowIncompleteCompletions?null===(y=r.getIncompleteCompletionsCache)||void 0===y?void 0:y.call(r):void 0;if(T&&3===l&&x&&e.isIdentifier(x)){var C=function(t,r,n,i,a,s,c){var u=t.get();if(!u)return;var l=n.text.toLowerCase(),_=e.getExportInfoMap(r,a,i,s,c),d=p("continuePreviousIncompleteResponse",a,e.codefix.createImportSpecifierResolver(r,i,a,s),i,n.getStart(),s,!1,e.isValidTypeOnlyAliasUseSite(n),(function(t){var n=e.mapDefined(u.entries,(function(n){var s;if(!n.hasAction||!n.source||!n.data||g(n.data))return n;if(le(n.name,l)){var c=e.Debug.checkDefined(J(n.name,n.data,i,a)).origin,u=_.get(r.path,n.data.exportMapKey),d=u&&t.tryResolve(u,n.name,!e.isExternalModuleNameRelative(e.stripQuotes(c.moduleSymbol.name)));if("skipped"===d)return n;if(d&&"failed"!==d){var p=o(o({},c),{kind:32,moduleSpecifier:d.moduleSpecifier});return n.data=k(p),n.source=P(p),n.sourceDisplay=[e.textPart(p.moduleSpecifier)],n}null===(s=a.log)||void 0===s||s.call(a,"Unexpected failure resolving auto import for '".concat(n.name,"' from '").concat(n.source,"'"))}}));return t.skippedAny()||(u.isIncomplete=void 0),n}));return u.entries=d,u.flags=4|(u.flags||0),u}(T,a,x,n,r,c,_);if(C)return C}else null==T||T.clear();var E=t.StringCompletions.getStringLiteralCompletions(a,s,x,S,r,n,i,c);if(E)return E;if(x&&e.isBreakOrContinueStatement(x.parent)&&(81===x.kind||86===x.kind||79===x.kind))return function(r){var n=function(r){var n=[],i=new e.Map,a=r;for(;a&&!e.isFunctionLike(a);){if(e.isLabeledStatement(a)){var o=a.label.text;i.has(o)||(i.set(o,!0),n.push({name:o,kindModifiers:"",kind:"label",sortText:t.SortText.LocationPriority}))}a=a.parent}return n}(r);if(n.length)return{isGlobalCompletion:!1,isMemberCompletion:!1,isNewIdentifierLocation:!1,entries:n}}(x.parent);var N,A=B(n,i,a,S,s,c,void 0,r,d,_);if(A)switch(A.kind){case 0:var F=function(r,n,i,a,o,s,c,u,l){var _=s.symbols,d=s.contextToken,p=s.completionKind,g=s.isInSnippetScope,m=s.isNewIdentifierLocation,y=s.location,x=s.propertyAccessToConvert,S=s.keywordFilters,T=s.literals,C=s.symbolToOriginInfoMap,E=s.recommendedCompletion,k=s.isJsxInitializer,N=s.isTypeOnlyLocation,A=s.isJsxIdentifierExpected,F=s.isRightOfOpenTag,P=s.importStatementCompletion,I=s.insideJsDocTagTypeExpression,O=s.symbolToSortTextMap,M=s.hasUnresolvedAutoImports;if(1===e.getLanguageVariant(r.scriptKind)){var L=function(r,n){var i=e.findAncestor(r,(function(e){switch(e.kind){case 284:return!0;case 43:case 31:case 79:case 208:return!1;default:return"quit"}}));if(i){var a=!!e.findChildOfKind(i,31,n),o=i.parent.openingElement.tagName.getText(n)+(a?"":">");return{isGlobalCompletion:!1,isMemberCompletion:!0,isNewIdentifierLocation:!1,optionalReplacementSpan:e.createTextSpanFromNode(i.tagName),entries:[{name:o,kind:"class",kindModifiers:void 0,sortText:t.SortText.LocationPriority}]}}return}(y,r);if(L)return L}var R=e.createSortedArray(),B=h(r,a);if(B&&!m&&(!_||0===_.length)&&0===S)return;var j=w(_,R,void 0,d,y,r,n,i,e.getEmitScriptTarget(a),o,p,c,a,u,N,x,A,k,P,E,C,O,A,F);if(0!==S)for(var J=0,z=V(S,!I&&e.isSourceFileJS(r));J<z.length;J++){var U=z[J];(N&&e.isTypeKeyword(e.stringToToken(U.name))||!j.has(U.name))&&(j.add(U.name),e.insertSorted(R,U,f,!0))}for(var K=0,q=function(r,n){var i=[];if(r){var a=r.getSourceFile(),o=r.parent,s=a.getLineAndCharacterOfPosition(r.end).line,c=a.getLineAndCharacterOfPosition(n).line;(e.isImportDeclaration(o)||e.isExportDeclaration(o)&&o.moduleSpecifier)&&r===o.moduleSpecifier&&s===c&&i.push({name:e.tokenToString(130),kind:"keyword",kindModifiers:"",sortText:t.SortText.GlobalsOrKeywords})}return i}(d,l);K<q.length;K++){U=q[K];j.has(U.name)||(j.add(U.name),e.insertSorted(R,U,f,!0))}for(var W=0,H=T;W<H.length;W++){var G=D(r,c,H[W]);j.add(G.name),e.insertSorted(R,G,f,!0)}B||function(r,n,i,a,o){e.getNameTable(r).forEach((function(r,s){if(r!==n){var c=e.unescapeLeadingUnderscores(s);!i.has(c)&&e.isIdentifierText(c,a)&&(i.add(c),e.insertSorted(o,{name:c,kind:"warning",kindModifiers:"",sortText:t.SortText.JavascriptIdentifiers,isFromUncheckedFile:!0},f))}}))}(r,y.pos,j,e.getEmitScriptTarget(a),R);return{flags:s.flags,isGlobalCompletion:g,isIncomplete:!(!c.allowIncompleteCompletions||!M)||void 0,isMemberCompletion:b(p),isNewIdentifierLocation:m,optionalReplacementSpan:v(y),entries:R}}(a,r,n,S,i,A,c,d,s);return(null==F?void 0:F.isIncomplete)&&(null==T||T.set(F)),F;case 1:return m(e.JsDoc.getJSDocTagNameCompletions());case 2:return m(e.JsDoc.getJSDocTagCompletions());case 3:return m(e.JsDoc.getJSDocParameterNameCompletions(A.tag));case 4:return N=A.keywordCompletions,{isGlobalCompletion:!1,isMemberCompletion:!1,isNewIdentifierLocation:A.isNewIdentifierLocation,entries:N.slice()};default:return e.Debug.assertNever(A)}}},t.getCompletionEntriesFromSymbols=w,t.getCompletionEntryDetails=function(n,i,a,o,s,l,d,p,f){var g=n.getTypeChecker(),m=n.getCompilerOptions(),y=s.name,v=s.source,h=s.data,b=e.findPrecedingToken(o,a);if(e.isInString(a,o,b))return t.StringCompletions.getStringLiteralCompletionDetails(y,a,o,b,g,m,l,f,p);var D=I(n,i,a,o,s,l,p);switch(D.type){case"request":var S=D.request;switch(S.kind){case 1:return e.JsDoc.getJSDocTagNameCompletionDetails(y);case 2:return e.JsDoc.getJSDocTagCompletionDetails(y);case 3:return e.JsDoc.getJSDocParameterNameCompletionDetails(y);case 4:return e.some(S.keywordCompletions,(function(e){return e.name===y}))?O(y,"keyword",e.SymbolDisplayPartKind.keyword):void 0;default:return e.Debug.assertNever(S)}case"symbol":var C=D.symbol,E=D.location,k=D.contextToken,N=D.origin,A=D.previousToken,F=function(t,n,i,a,o,s,l,d,p,f,g,m,y,v,h,b){if((null==v?void 0:v.moduleSpecifier)&&g&&re(i||g).replacementSpan)return{codeActions:void 0,sourceDisplay:[e.textPart(v.moduleSpecifier)]};if(h===r.ClassMemberSnippet){var x=T(l,s,d,y,t,o,n,i,m).importAdder;if(x)return{sourceDisplay:void 0,codeActions:[{changes:e.textChanges.ChangeTracker.with({host:l,formatContext:m,preferences:y},x.writeFixes),description:e.diagnosticToString([e.Diagnostics.Includes_imports_of_types_referenced_by_0,t])}]}}if(_(a)){var D=e.codefix.getPromoteTypeOnlyCompletionAction(p,a.declaration.name,s,l,m,y);return e.Debug.assertIsDefined(D,"Expected to have a code action for promoting type-only alias"),{codeActions:[D],sourceDisplay:void 0}}if(!a||!c(a)&&!u(a))return{codeActions:void 0,sourceDisplay:void 0};var S=a.isFromPackageJson?l.getPackageJsonAutoImportProvider().getTypeChecker():s.getTypeChecker(),C=a.moduleSymbol,E=S.getMergedSymbol(e.skipAlias(o.exportSymbol||o,S)),k=29===(null==i?void 0:i.kind)&&e.isJsxOpeningLikeElement(i.parent),N=e.codefix.getImportCompletionAction(E,C,p,e.getNameForExportedSymbol(o,e.getEmitScriptTarget(d),k),k,l,s,m,g&&e.isIdentifier(g)?g.getStart(p):f,y,b),A=N.moduleSpecifier,F=N.codeAction;return e.Debug.assert(!(null==v?void 0:v.moduleSpecifier)||A===v.moduleSpecifier),{sourceDisplay:[e.textPart(A)],codeActions:[F]}}(y,E,k,N,C,n,l,m,a,o,A,d,p,h,v,f);return M(C,g,a,E,f,F.codeActions,F.sourceDisplay);case"literal":var P=D.literal;return O(x(a,p,P),"string","string"==typeof P?e.SymbolDisplayPartKind.stringLiteral:e.SymbolDisplayPartKind.numericLiteral);case"none":return K().some((function(e){return e.name===y}))?O(y,"keyword",e.SymbolDisplayPartKind.keyword):void 0;default:e.Debug.assertNever(D)}},t.createCompletionDetailsForSymbol=M,t.createCompletionDetails=L,t.getCompletionEntrySymbol=function(e,t,r,n,i,a,o){var s=I(e,t,r,n,i,a,o);return"symbol"===s.type?s.symbol:void 0},function(e){e[e.Data=0]="Data",e[e.JsDocTagName=1]="JsDocTagName",e[e.JsDocTag=2]="JsDocTag",e[e.JsDocParameterName=3]="JsDocParameterName",e[e.Keywords=4]="Keywords"}(s||(s={})),function(e){e[e.ObjectPropertyDeclaration=0]="ObjectPropertyDeclaration",e[e.Global=1]="Global",e[e.PropertyAccess=2]="PropertyAccess",e[e.MemberLike=3]="MemberLike",e[e.String=4]="String",e[e.None=5]="None"}(t.CompletionKind||(t.CompletionKind={}));var U=[],K=e.memoize((function(){for(var r=[],n=81;n<=162;n++)r.push({name:e.tokenToString(n),kind:"keyword",kindModifiers:"",sortText:t.SortText.GlobalsOrKeywords});return r}));function V(t,r){if(!r)return q(t);var n=t+8+1;return U[n]||(U[n]=q(t).filter((function(t){return!function(e){switch(e){case 126:case 131:case 160:case 134:case 136:case 92:case 159:case 117:case 138:case 118:case 140:case 141:case 142:case 143:case 144:case 148:case 149:case 161:case 121:case 122:case 123:case 146:case 152:case 153:case 154:case 156:case 157:return!0;default:return!1}}(e.stringToToken(t.name))})))}function q(t){return U[t]||(U[t]=K().filter((function(r){var n=e.stringToToken(r.name);switch(t){case 0:return!1;case 1:return G(n)||136===n||142===n||154===n||143===n||126===n||e.isTypeKeyword(n)&&155!==n;case 5:return G(n);case 2:return H(n);case 3:return W(n);case 4:return e.isParameterPropertyModifier(n);case 6:return e.isTypeKeyword(n)||85===n;case 7:return e.isTypeKeyword(n);case 8:return 154===n;default:return e.Debug.assertNever(t)}})))}function W(e){return 146===e}function H(t){switch(t){case 126:case 127:case 135:case 137:case 151:case 132:case 136:case 161:return!0;default:return e.isClassMemberModifier(t)}}function G(t){return 132===t||133===t||128===t||150===t||154===t||!e.isContextualKeyword(t)&&!H(t)}function Q(t){return e.isIdentifier(t)?t.originalKeywordKind||0:t.kind}function X(t,r,n,i){var a=r&&r!==t,o=!a||3&r.flags?t:i.getUnionType([t,r]),s=function(t,r,n){return t.isUnion()?n.getAllPossiblePropertiesOfTypes(e.filter(t.types,(function(t){return!(131068&t.flags||n.isArrayLikeType(t)||n.isTypeInvalidDueToUnionDiscriminant(t,r)||e.typeHasCallOrConstructSignatures(t,n)||t.isClass()&&Y(t.getApparentProperties()))}))):t.getApparentProperties()}(o,n,i);return o.isClass()&&Y(s)?[]:a?e.filter(s,(function(t){return!e.length(t.declarations)||e.some(t.declarations,(function(e){return e.parent!==n}))})):s}function Y(t){return e.some(t,(function(t){return!!(24&e.getDeclarationModifierFlagsFromSymbol(t))}))}function Z(t,r){return t.isUnion()?e.Debug.checkEachDefined(r.getAllPossiblePropertiesOfTypes(t.types),"getAllPossiblePropertiesOfTypes() should all be defined"):e.Debug.checkEachDefined(t.getApparentProperties(),"getApparentProperties() should all be defined")}function $(t,r){if(t){if(e.isTypeNode(t)&&e.isTypeReferenceType(t.parent))return r.getTypeArgumentConstraint(t);var n=$(t.parent,r);if(n)switch(t.kind){case 168:return r.getTypeOfPropertyOfContextualType(n,t.symbol.escapedName);case 190:case 184:case 189:return n}}}function ee(t){return t.parent&&e.isClassOrTypeElement(t.parent)&&e.isObjectTypeDeclaration(t.parent.parent)}function te(t){var r=t.left;return e.nodeIsMissing(r)}function re(t){var r,n,i,a,o=!1,s=function(){var r=t.parent;if(e.isImportEqualsDeclaration(r))return a=154===t.kind?void 0:154,se(r.moduleReference)?r:void 0;if(ae(r,t)&&oe(r.parent))return r;if(e.isNamedImports(r)||e.isNamespaceImport(r)){if(r.parent.isTypeOnly||18!==t.kind&&100!==t.kind&&27!==t.kind||(a=154),oe(r)){if(19!==t.kind&&79!==t.kind)return r.parent.parent;o=!0,a=158}return}if(e.isImportKeyword(t)&&e.isSourceFile(r))return a=154,t;if(e.isImportKeyword(t)&&e.isImportDeclaration(r))return a=154,se(r.moduleSpecifier)?r:void 0;return}();return{isKeywordOnlyCompletion:o,keywordCompletion:a,isNewIdentifierLocation:!(!s&&154!==a),isTopLevelTypeOnly:!!(null===(n=null===(r=e.tryCast(s,e.isImportDeclaration))||void 0===r?void 0:r.importClause)||void 0===n?void 0:n.isTypeOnly)||!!(null===(i=e.tryCast(s,e.isImportEqualsDeclaration))||void 0===i?void 0:i.isTypeOnly),couldBeTypeOnlyImportSpecifier:!!s&&ae(s,t),replacementSpan:ne(s)}}function ne(t){var r,n,i;if(t){var a=null!==(r=e.findAncestor(t,e.or(e.isImportDeclaration,e.isImportEqualsDeclaration)))&&void 0!==r?r:t,o=a.getSourceFile();if(e.rangeIsOnSingleLine(a,o))return e.createTextSpanFromNode(a,o);e.Debug.assert(100!==a.kind&&273!==a.kind);var s=269===a.kind?null!==(i=ie(null===(n=a.importClause)||void 0===n?void 0:n.namedBindings))&&void 0!==i?i:a.moduleSpecifier:a.moduleReference,c={pos:a.getFirstToken().getStart(),end:s.pos};return e.rangeIsOnSingleLine(c,o)?e.createTextSpanFromRange(c):void 0}}function ie(t){var r;return e.find(null===(r=e.tryCast(t,e.isNamedImports))||void 0===r?void 0:r.elements,(function(r){var n;return!r.propertyName&&e.isStringANonContextualKeyword(r.name.text)&&27!==(null===(n=e.findPrecedingToken(r.name.pos,t.getSourceFile(),t))||void 0===n?void 0:n.kind)}))}function ae(t,r){return e.isImportSpecifier(t)&&(t.isTypeOnly||r===t.name&&e.isTypeKeywordTokenOrIdentifier(r))}function oe(t){if(!se(t.parent.parent.moduleSpecifier)||t.parent.name)return!1;if(e.isNamedImports(t)){var r=ie(t);return(r?t.elements.indexOf(r):t.elements.length)<2}return!0}function se(t){var r;return!!e.nodeIsMissing(t)||!(null===(r=e.tryCast(e.isExternalModuleReference(t)?t.expression:t,e.isStringLiteralLike))||void 0===r?void 0:r.text)}function ce(t,r,n){return void 0===n&&(n=new e.Map),i(t)||i(e.skipAlias(t.exportSymbol||t,r));function i(t){return!!(788968&t.flags)||r.isUnknownSymbol(t)||!!(1536&t.flags)&&e.addToSeen(n,e.getSymbolId(t))&&r.getExportsOfModule(t).some((function(e){return ce(e,r,n)}))}}function ue(t,r){var n=e.skipAlias(t,r).declarations;return!!e.length(n)&&e.every(n,e.isDeprecatedDeclaration)}function le(e,t){if(0===t.length)return!0;for(var r,n=!1,i=0,a=e.length,o=0;o<a;o++){var s=e.charCodeAt(o),c=t.charCodeAt(i);if((s===c||s===_e(c))&&(n||(n=void 0===r||97<=r&&r<=122&&65<=s&&s<=90||95===r&&95!==s),n&&i++,i===t.length))return!0;r=s}return!1}function _e(e){return 97<=e&&e<=122?e-32:e}t.getPropertiesForObjectExpression=X}(e.Completions||(e.Completions={}))}(_||(_={})),function(e){!function(t){function r(t,r){return{fileName:r.fileName,textSpan:e.createTextSpanFromNode(t,r),kind:"none"}}function n(t){return e.isThrowStatement(t)?[t]:e.isTryStatement(t)?e.concatenate(t.catchClause?n(t.catchClause):t.tryBlock&&n(t.tryBlock),t.finallyBlock&&n(t.finallyBlock)):e.isFunctionLike(t)?void 0:o(t,n)}function i(t){return e.isBreakOrContinueStatement(t)?[t]:e.isFunctionLike(t)?void 0:o(t,i)}function o(t,r){var n=[];return t.forEachChild((function(t){var i=r(t);void 0!==i&&n.push.apply(n,e.toArray(i))})),n}function s(e,t){var r=c(t);return!!r&&r===e}function c(t){return e.findAncestor(t,(function(r){switch(r.kind){case 252:if(248===t.kind)return!1;case 245:case 246:case 247:case 244:case 243:return!t.label||function(t,r){return!!e.findAncestor(t.parent,(function(t){return e.isLabeledStatement(t)?t.label.escapedText===r:"quit"}))}(r,t.label.escapedText);default:return e.isFunctionLike(r)&&"quit"}}))}function u(t,r){for(var n=[],i=2;i<arguments.length;i++)n[i-2]=arguments[i];return!(!r||!e.contains(n,r.kind))&&(t.push(r),!0)}function l(t){var r=[];if(u(r,t.getFirstToken(),97,115,90)&&243===t.kind)for(var n=t.getChildren(),a=n.length-1;a>=0&&!u(r,n[a],115);a--);return e.forEach(i(t.statement),(function(e){s(t,e)&&u(r,e.getFirstToken(),81,86)})),r}function _(e){var t=c(e);if(t)switch(t.kind){case 245:case 246:case 247:case 243:case 244:return l(t);case 252:return d(t)}}function d(t){var r=[];return u(r,t.getFirstToken(),107),e.forEach(t.caseBlock.clauses,(function(n){u(r,n.getFirstToken(),82,88),e.forEach(i(n),(function(e){s(t,e)&&u(r,e.getFirstToken(),81)}))})),r}function p(t,r){var n=[];(u(n,t.getFirstToken(),111),t.catchClause&&u(n,t.catchClause.getFirstToken(),83),t.finallyBlock)&&u(n,e.findChildOfKind(t,96,r),96);return n}function f(t,r){var i=function(t){for(var r=t;r.parent;){var n=r.parent;if(e.isFunctionBlock(n)||308===n.kind)return n;if(e.isTryStatement(n)&&n.tryBlock===r&&n.catchClause)return r;r=n}}(t);if(i){var a=[];return e.forEach(n(i),(function(t){a.push(e.findChildOfKind(t,109,r))})),e.isFunctionBlock(i)&&e.forEachReturnStatement(i,(function(t){a.push(e.findChildOfKind(t,105,r))})),a}}function g(t,r){var i=e.getContainingFunction(t);if(i){var a=[];return e.forEachReturnStatement(e.cast(i.body,e.isBlock),(function(t){a.push(e.findChildOfKind(t,105,r))})),e.forEach(n(i.body),(function(t){a.push(e.findChildOfKind(t,109,r))})),a}}function m(t){var r=e.getContainingFunction(t);if(r){var n=[];return r.modifiers&&r.modifiers.forEach((function(e){u(n,e,132)})),e.forEachChild(r,(function(t){y(t,(function(t){e.isAwaitExpression(t)&&u(n,t.getFirstToken(),133)}))})),n}}function y(t,r){r(t),e.isFunctionLike(t)||e.isClassLike(t)||e.isInterfaceDeclaration(t)||e.isModuleDeclaration(t)||e.isTypeAliasDeclaration(t)||e.isTypeNode(t)||e.forEachChild(t,(function(e){return y(e,r)}))}t.getDocumentHighlights=function(t,n,i,o,s){var c=e.getTouchingPropertyName(i,o);if(c.parent&&(e.isJsxOpeningElement(c.parent)&&c.parent.tagName===c||e.isJsxClosingElement(c.parent))){var v=c.parent.parent,h=[v.openingElement,v.closingElement].map((function(e){return r(e.tagName,i)}));return[{fileName:i.fileName,highlightSpans:h}]}return function(t,r,n,i,a){var o=new e.Set(a.map((function(e){return e.fileName}))),s=e.FindAllReferences.getReferenceEntriesForNode(t,r,n,a,i,void 0,o);if(!s)return;var c=e.arrayToMultiMap(s.map(e.FindAllReferences.toHighlightSpan),(function(e){return e.fileName}),(function(e){return e.span})),u=e.createGetCanonicalFileName(n.useCaseSensitiveFileNames());return e.mapDefined(e.arrayFrom(c.entries()),(function(t){var r=t[0],i=t[1];if(!o.has(r)){if(!n.redirectTargetsMap.has(e.toPath(r,n.getCurrentDirectory(),u)))return;var s=n.getSourceFile(r);r=e.find(a,(function(e){return!!e.redirectInfo&&e.redirectInfo.redirectTarget===s})).fileName,e.Debug.assert(o.has(r))}return{fileName:r,highlightSpans:i}}))}(o,c,t,n,s)||function(t,n){var i=function(t,n){switch(t.kind){case 99:case 91:return e.isIfStatement(t.parent)?function(t,n){for(var i=function(t,r){var n=[];for(;e.isIfStatement(t.parent)&&t.parent.elseStatement===t;)t=t.parent;for(;;){var i=t.getChildren(r);u(n,i[0],99);for(var a=i.length-1;a>=0&&!u(n,i[a],91);a--);if(!t.elseStatement||!e.isIfStatement(t.elseStatement))break;t=t.elseStatement}return n}(t,n),a=[],o=0;o<i.length;o++){if(91===i[o].kind&&o<i.length-1){for(var s=i[o],c=i[o+1],l=!0,_=c.getStart(n)-1;_>=s.end;_--)if(!e.isWhiteSpaceSingleLine(n.text.charCodeAt(_))){l=!1;break}if(l){a.push({fileName:n.fileName,textSpan:e.createTextSpanFromBounds(s.getStart(),c.end),kind:"reference"}),o++;continue}}a.push(r(i[o],n))}return a}(t.parent,n):void 0;case 105:return c(t.parent,e.isReturnStatement,g);case 109:return c(t.parent,e.isThrowStatement,f);case 111:case 83:case 96:return c(83===t.kind?t.parent.parent:t.parent,e.isTryStatement,p);case 107:return c(t.parent,e.isSwitchStatement,d);case 82:case 88:return e.isDefaultClause(t.parent)||e.isCaseClause(t.parent)?c(t.parent.parent.parent,e.isSwitchStatement,d):void 0;case 81:case 86:return c(t.parent,e.isBreakOrContinueStatement,_);case 97:case 115:case 90:return c(t.parent,(function(t){return e.isIterationStatement(t,!0)}),l);case 135:return s(e.isConstructorDeclaration,[135]);case 137:case 151:return s(e.isAccessor,[137,151]);case 133:return c(t.parent,e.isAwaitExpression,m);case 132:return v(m(t));case 125:return v(function(t){var r=e.getContainingFunction(t);if(!r)return;var n=[];return e.forEachChild(r,(function(t){y(t,(function(t){e.isYieldExpression(t)&&u(n,t.getFirstToken(),125)}))})),n}(t));case 101:return;default:return e.isModifierKind(t.kind)&&(e.isDeclaration(t.parent)||e.isVariableStatement(t.parent))?v((i=t.kind,o=t.parent,e.mapDefined(function(t,r){var n=t.parent;switch(n.kind){case 265:case 308:case 238:case 292:case 293:return 256&r&&e.isClassDeclaration(t)?a(a([],t.members,!0),[t],!1):n.statements;case 173:case 171:case 259:return a(a([],n.parameters,!0),e.isClassLike(n.parent)?n.parent.members:[],!0);case 260:case 228:case 261:case 184:var i=n.members;if(92&r){var o=e.find(n.members,e.isConstructorDeclaration);if(o)return a(a([],i,!0),o.parameters,!0)}else if(256&r)return a(a([],i,!0),[n],!1);return i;case 207:return;default:e.Debug.assertNever(n,"Invalid container kind.")}}(o,e.modifierToFlag(i)),(function(t){return e.findModifier(t,i)})))):void 0}var i,o;function s(r,i){return c(t.parent,r,(function(t){return e.mapDefined(t.symbol.declarations,(function(t){return r(t)?e.find(t.getChildren(n),(function(t){return e.contains(i,t.kind)})):void 0}))}))}function c(e,t,r){return t(e)?v(r(e,n)):void 0}function v(e){return e&&e.map((function(e){return r(e,n)}))}}(t,n);return i&&[{fileName:n.fileName,highlightSpans:i}]}(c,i)}}(e.DocumentHighlights||(e.DocumentHighlights={}))}(_||(_={})),function(e){function t(e){return!!e.sourceFile}function r(r,n,o){void 0===n&&(n="");var s=new e.Map,c=e.createGetCanonicalFileName(!!r);function u(e){return"function"==typeof e.getCompilationSettings?e.getCompilationSettings():e}function l(e,t,r,n,i,a,o,s){return p(e,t,r,n,i,a,!0,o,s)}function _(e,t,r,n,i,a,o,s){return p(e,t,u(r),n,i,a,!1,o,s)}function d(r,n){var i=t(r)?r:r.get(e.Debug.checkDefined(n,"If there are more than one scriptKind's for same document the scriptKind should be provided"));return e.Debug.assert(void 0===n||!i||i.sourceFile.scriptKind===n,"Script kind should match provided ScriptKind:".concat(n," and sourceFile.scriptKind: ").concat(null==i?void 0:i.sourceFile.scriptKind,", !entry: ").concat(!i)),i}function p(r,n,i,c,l,_,p,f,g){var m,y,v,h;f=e.ensureScriptKind(r,f);var b=u(i),x=i===b?void 0:i,D=6===f?100:e.getEmitScriptTarget(b),S="object"==typeof g?g:{languageVersion:D,impliedNodeFormat:x&&e.getImpliedNodeFormatForFile(n,null===(h=null===(v=null===(y=null===(m=x.getCompilerHost)||void 0===m?void 0:m.call(x))||void 0===y?void 0:y.getModuleResolutionCache)||void 0===v?void 0:v.call(y))||void 0===h?void 0:h.getPackageJsonInfoCache(),x,b),setExternalModuleIndicator:e.getSetExternalModuleIndicator(b)};S.languageVersion=D;var T=s.size,C=a(c,S.impliedNodeFormat),E=e.getOrUpdate(s,C,(function(){return new e.Map}));if(e.tracing){s.size>T&&e.tracing.instant("session","createdDocumentRegistryBucket",{configFilePath:b.configFilePath,key:C});var k=!e.isDeclarationFileName(n)&&e.forEachEntry(s,(function(e,t){return t!==C&&e.has(n)&&t}));k&&e.tracing.instant("session","documentRegistryBucketOverlap",{path:n,key1:k,key2:C})}var N=E.get(n),A=N&&d(N,f);!A&&o&&((F=o.getDocument(C,n))&&(e.Debug.assert(p),A={sourceFile:F,languageServiceRefCount:0},P()));if(A)A.sourceFile.version!==_&&(A.sourceFile=e.updateLanguageServiceSourceFile(A.sourceFile,l,_,l.getChangeRange(A.sourceFile.scriptSnapshot)),o&&o.setDocument(C,n,A.sourceFile)),p&&A.languageServiceRefCount++;else{var F=e.createLanguageServiceSourceFile(r,l,S,_,!1,f);o&&o.setDocument(C,n,F),A={sourceFile:F,languageServiceRefCount:1},P()}return e.Debug.assert(0!==A.languageServiceRefCount),A.sourceFile;function P(){if(N)if(t(N)){var r=new e.Map;r.set(N.sourceFile.scriptKind,N),r.set(f,A),E.set(n,r)}else N.set(f,A);else E.set(n,A)}}function f(r,n,i,o){var c=e.Debug.checkDefined(s.get(a(n,o))),u=c.get(r),l=d(u,i);l.languageServiceRefCount--,e.Debug.assert(l.languageServiceRefCount>=0),0===l.languageServiceRefCount&&(t(u)?c.delete(r):(u.delete(i),1===u.size&&c.set(r,e.firstDefinedIterator(u.values(),e.identity))))}return{acquireDocument:function(t,r,a,o,s,_){return l(t,e.toPath(t,n,c),r,i(u(r)),a,o,s,_)},acquireDocumentWithKey:l,updateDocument:function(t,r,a,o,s,l){return _(t,e.toPath(t,n,c),r,i(u(r)),a,o,s,l)},updateDocumentWithKey:_,releaseDocument:function(t,r,a,o){return f(e.toPath(t,n,c),i(r),a,o)},releaseDocumentWithKey:f,getLanguageServiceRefCounts:function(t,r){return e.arrayFrom(s.entries(),(function(e){var n=e[0],i=e[1].get(t),a=i&&d(i,r);return[n,a&&a.languageServiceRefCount]}))},reportStats:function(){var r=e.arrayFrom(s.keys()).filter((function(e){return e&&"_"===e.charAt(0)})).map((function(e){var r=s.get(e),n=[];return r.forEach((function(e,r){t(e)?n.push({name:r,scriptKind:e.sourceFile.scriptKind,refCount:e.languageServiceRefCount}):e.forEach((function(e,t){return n.push({name:r,scriptKind:t,refCount:e.languageServiceRefCount})}))})),n.sort((function(e,t){return t.refCount-e.refCount})),{bucket:e,sourceFiles:n}}));return JSON.stringify(r,void 0,2)},getKeyForCompilationSettings:i}}function n(t){var r;if(null===t||"object"!=typeof t)return""+t;if(e.isArray(t))return"[".concat(null===(r=e.map(t,(function(e){return n(e)})))||void 0===r?void 0:r.join(","),"]");var i="{";for(var a in t)e.hasProperty(t,a)&&(i+="".concat(a,": ").concat(n(t[a])));return i+"}"}function i(t){return e.sourceFileAffectingCompilerOptions.map((function(r){return n(e.getCompilerOptionValue(t,r))})).join("|")+(t.pathsBasePath?"|".concat(t.pathsBasePath):void 0)}function a(e,t){return t?"".concat(e,"|").concat(t):e}e.createDocumentRegistry=function(e,t){return r(e,t)},e.createDocumentRegistryInternal=r}(_||(_={})),function(e){!function(t){function r(t,r){return e.forEach(308===t.kind?t.statements:t.body.statements,(function(t){return r(t)||c(t)&&e.forEach(t.body&&t.body.statements,r)}))}function n(t,n){if(t.externalModuleIndicator||void 0!==t.imports)for(var i=0,a=t.imports;i<a.length;i++){var o=a[i];n(e.importFromModuleSpecifier(o),o)}else r(t,(function(t){switch(t.kind){case 275:case 269:(r=t).moduleSpecifier&&e.isStringLiteral(r.moduleSpecifier)&&n(r,r.moduleSpecifier);break;case 268:var r;u(r=t)&&n(r,r.moduleReference.expression)}}))}function i(t,r,n){var i=t.parent;if(i){var a=n.getMergedSymbol(i);return e.isExternalModuleSymbol(a)?{exportingModuleSymbol:a,exportKind:r}:void 0}}function a(e,t){return t.getMergedSymbol(s(e).symbol)}function s(t){if(210===t.kind)return t.getSourceFile();var r=t.parent;return 308===r.kind?r:(e.Debug.assert(265===r.kind),e.cast(r.parent,c))}function c(e){return 264===e.kind&&10===e.name.kind}function u(e){return 280===e.moduleReference.kind&&10===e.moduleReference.expression.kind}t.createImportTracker=function(t,i,l,_){var d=function(t,r,i){for(var a=new e.Map,o=0,s=t;o<s.length;o++){var c=s[o];i&&i.throwIfCancellationRequested(),n(c,(function(t,n){var i=r.getSymbolAtLocation(n);if(i){var o=e.getSymbolId(i).toString(),s=a.get(o);s||a.set(o,s=[]),s.push(t)}}))}return a}(t,l,_);return function(n,p,f){var g=function(t,n,i,o,u,l){var _=o.exportingModuleSymbol,d=o.exportKind,p=e.nodeSeenTracker(),f=e.nodeSeenTracker(),g=[],m=!!_.globalExports,y=m?void 0:[];return h(_),{directImports:g,indirectUsers:v()};function v(){if(m)return t;if(_.declarations)for(var r=0,i=_.declarations;r<i.length;r++){var a=i[r];e.isExternalModuleAugmentation(a)&&n.has(a.getSourceFile().fileName)&&S(a)}return y.map(e.getSourceFileOfNode)}function h(t){var r=T(t);if(r)for(var n=0,i=r;n<i.length;n++){var o=i[n];if(p(o))switch(l&&l.throwIfCancellationRequested(),o.kind){case 210:if(e.isImportCall(o)){b(o);break}if(!m){var c=o.parent;if(2===d&&257===c.kind){var _=c.name;if(79===_.kind){g.push(_);break}}}break;case 79:break;case 268:D(o,o.name,e.hasSyntacticModifier(o,1),!1);break;case 269:g.push(o);var f=o.importClause&&o.importClause.namedBindings;f&&271===f.kind?D(o,f.name,!1,!0):!m&&e.isDefaultImport(o)&&S(s(o));break;case 275:o.exportClause?277===o.exportClause.kind?S(s(o),!0):g.push(o):h(a(o,u));break;case 202:!m&&o.isTypeOf&&!o.qualifier&&x(o)&&S(o.getSourceFile(),!0),g.push(o);break;default:e.Debug.failBadSyntaxKind(o,"Unexpected import kind.")}}}function b(t){S(e.findAncestor(t,c)||t.getSourceFile(),!!x(t,!0))}function x(t,r){return void 0===r&&(r=!1),e.findAncestor(t,(function(t){return r&&c(t)?"quit":e.canHaveModifiers(t)&&e.some(t.modifiers,e.isExportModifier)}))}function D(t,n,i,a){if(2===d)a||g.push(t);else if(!m){var o=s(t);e.Debug.assert(308===o.kind||264===o.kind),i||function(t,n,i){var a=i.getSymbolAtLocation(n);return!!r(t,(function(t){if(e.isExportDeclaration(t)){var r=t.exportClause;return!t.moduleSpecifier&&r&&e.isNamedExports(r)&&r.elements.some((function(e){return i.getExportSpecifierLocalTargetSymbol(e)===a}))}}))}(o,n,u)?S(o,!0):S(o)}}function S(t,r){if(void 0===r&&(r=!1),e.Debug.assert(!m),f(t)&&(y.push(t),r)){var n=u.getMergedSymbol(t.symbol);if(n){e.Debug.assert(!!(1536&n.flags));var i=T(n);if(i)for(var a=0,o=i;a<o.length;a++){var c=o[a];e.isImportTypeNode(c)||S(s(c),!0)}}}}function T(t){return i.get(e.getSymbolId(t).toString())}}(t,i,d,p,l,_),m=g.directImports,y=g.indirectUsers;return o({indirectUsers:y},function(t,r,n,i,a){var o=[],s=[];function c(e,t){o.push([e,t])}if(t)for(var l=0,_=t;l<_.length;l++){d(_[l])}return{importSearches:o,singleReferences:s};function d(t){if(268!==t.kind)if(79!==t.kind)if(202!==t.kind){if(10===t.moduleSpecifier.kind)if(275!==t.kind){var o=t.importClause||{name:void 0,namedBindings:void 0},l=o.name,_=o.namedBindings;if(_)switch(_.kind){case 271:p(_.name);break;case 272:0!==n&&1!==n||f(_);break;default:e.Debug.assertNever(_)}if(l&&(1===n||2===n)&&(!a||l.escapedText===e.symbolEscapedNameNoDefault(r)))c(l,i.getSymbolAtLocation(l))}else t.exportClause&&e.isNamedExports(t.exportClause)&&f(t.exportClause)}else if(t.qualifier){var d=e.getFirstIdentifier(t.qualifier);d.escapedText===e.symbolName(r)&&s.push(d)}else 2===n&&s.push(t.argument.literal);else p(t);else u(t)&&p(t.name)}function p(e){2!==n||a&&!g(e.escapedText)||c(e,i.getSymbolAtLocation(e))}function f(e){if(e)for(var t=0,n=e.elements;t<n.length;t++){var o=n[t],u=o.name,l=o.propertyName;if(g((l||u).escapedText))if(l)s.push(l),a&&u.escapedText!==r.escapedName||c(u,i.getSymbolAtLocation(u));else c(u,278===o.kind&&o.propertyName?i.getExportSpecifierLocalTargetSymbol(o):i.getSymbolAtLocation(u))}}function g(e){return e===r.escapedName||0!==n&&"default"===e}}(m,n,p.exportKind,l,f))}},function(e){e[e.Named=0]="Named",e[e.Default=1]="Default",e[e.ExportEquals=2]="ExportEquals"}(t.ExportKind||(t.ExportKind={})),function(e){e[e.Import=0]="Import",e[e.Export=1]="Export"}(t.ImportExport||(t.ImportExport={})),t.findModuleReferences=function(e,t,r){for(var i=[],a=e.getTypeChecker(),o=0,s=t;o<s.length;o++){var c=s[o],u=r.valueDeclaration;if(308===(null==u?void 0:u.kind)){for(var l=0,_=c.referencedFiles;l<_.length;l++){var d=_[l];e.getSourceFileFromReference(c,d)===u&&i.push({kind:"reference",referencingFile:c,ref:d})}for(var p=0,f=c.typeReferenceDirectives;p<f.length;p++){d=f[p];var g=e.getResolvedTypeReferenceDirectives().get(d.fileName,d.resolutionMode||c.impliedNodeFormat);void 0!==g&&g.resolvedFileName===u.fileName&&i.push({kind:"reference",referencingFile:c,ref:d})}}n(c,(function(e,t){a.getSymbolAtLocation(t)===r&&i.push({kind:"import",literal:t})}))}return i},t.getImportOrExportSymbol=function(t,r,n,a){return a?o():o()||function(){if(!function(t){var r=t.parent;switch(r.kind){case 268:return r.name===t&&u(r);case 273:return!r.propertyName;case 270:case 271:return e.Debug.assert(r.name===t),!0;case 205:return e.isInJSFile(t)&&e.isVariableDeclarationInitializedToBareOrAccessedRequire(r.parent.parent);default:return!1}}(t))return;var i=n.getImmediateAliasedSymbol(r);if(!i)return;if(i=function(t,r){if(t.declarations)for(var n=0,i=t.declarations;n<i.length;n++){var a=i[n];if(e.isExportSpecifier(a)&&!a.propertyName&&!a.parent.parent.moduleSpecifier)return r.getExportSpecifierLocalTargetSymbol(a);if(e.isPropertyAccessExpression(a)&&e.isModuleExportsAccessExpression(a.expression)&&!e.isPrivateIdentifier(a.name))return r.getSymbolAtLocation(a);if(e.isShorthandPropertyAssignment(a)&&e.isBinaryExpression(a.parent.parent)&&2===e.getAssignmentDeclarationKind(a.parent.parent))return r.getExportSpecifierLocalTargetSymbol(a.name)}return t}(i,n),"export="===i.escapedName&&(i=function(t,r){if(2097152&t.flags)return r.getImmediateAliasedSymbol(t);var n=e.Debug.checkDefined(t.valueDeclaration);if(e.isExportAssignment(n))return n.expression.symbol;if(e.isBinaryExpression(n))return n.right.symbol;if(e.isSourceFile(n))return n.symbol;return}(i,n),void 0===i))return;var a=e.symbolEscapedNameNoDefault(i);if(void 0===a||"default"===a||a===r.escapedName)return{kind:0,symbol:i}}();function o(){var i,o=t.parent,u=o.parent;if(r.exportSymbol)return 208===o.kind?(null===(i=r.declarations)||void 0===i?void 0:i.some((function(e){return e===o})))&&e.isBinaryExpression(u)?d(u,!1):void 0:s(r.exportSymbol,c(o));var l=function(t,r){var n=e.isVariableDeclaration(t)?t:e.isBindingElement(t)?e.walkUpBindingElementsAndPatterns(t):void 0;return n?t.name!==r||e.isCatchClause(n.parent)?void 0:e.isVariableStatement(n.parent.parent)?n.parent.parent:void 0:t}(o,t);if(l&&e.hasSyntacticModifier(l,1)){if(e.isImportEqualsDeclaration(l)&&l.moduleReference===t){if(a)return;return{kind:0,symbol:n.getSymbolAtLocation(l.name)}}return s(r,c(l))}if(e.isNamespaceExport(o))return s(r,0);if(e.isExportAssignment(o))return _(o);if(e.isExportAssignment(u))return _(u);if(e.isBinaryExpression(o))return d(o,!0);if(e.isBinaryExpression(u))return d(u,!0);if(e.isJSDocTypedefTag(o))return s(r,0);function _(e){if(e.symbol.parent){var t=e.isExportEquals?2:1;return{kind:1,symbol:r,exportInfo:{exportingModuleSymbol:e.symbol.parent,exportKind:t}}}}function d(t,i){var a;switch(e.getAssignmentDeclarationKind(t)){case 1:a=0;break;case 2:a=2;break;default:return}var o=i?n.getSymbolAtLocation(e.getNameOfAccessExpression(e.cast(t.left,e.isAccessExpression))):r;return o&&s(o,a)}}function s(e,t){var r=i(e,t,n);return r&&{kind:1,symbol:e,exportInfo:r}}function c(t){return e.hasSyntacticModifier(t,1024)?1:0}},t.getExportInfo=i}(e.FindAllReferences||(e.FindAllReferences={}))}(_||(_={})),function(e){!function(t){var r;function n(e,t){return void 0===t&&(t=1),{kind:t,node:e.name||e,context:s(e)}}function i(e){return e&&void 0===e.kind}function s(t){if(e.isDeclaration(t))return c(t);if(t.parent){if(!e.isDeclaration(t.parent)&&!e.isExportAssignment(t.parent)){if(e.isInJSFile(t)){var r=e.isBinaryExpression(t.parent)?t.parent:e.isAccessExpression(t.parent)&&e.isBinaryExpression(t.parent.parent)&&t.parent.parent.left===t.parent?t.parent.parent:void 0;if(r&&0!==e.getAssignmentDeclarationKind(r))return c(r)}if(e.isJsxOpeningElement(t.parent)||e.isJsxClosingElement(t.parent))return t.parent.parent;if(e.isJsxSelfClosingElement(t.parent)||e.isLabeledStatement(t.parent)||e.isBreakOrContinueStatement(t.parent))return t.parent;if(e.isStringLiteralLike(t)){var n=e.tryGetImportFromModuleSpecifier(t);if(n){var i=e.findAncestor(n,(function(t){return e.isDeclaration(t)||e.isStatement(t)||e.isJSDocTag(t)}));return e.isDeclaration(i)?c(i):i}}var a=e.findAncestor(t,e.isComputedPropertyName);return a?c(a.parent):void 0}return t.parent.name===t||e.isConstructorDeclaration(t.parent)||e.isExportAssignment(t.parent)||(e.isImportOrExportSpecifier(t.parent)||e.isBindingElement(t.parent))&&t.parent.propertyName===t||88===t.kind&&e.hasSyntacticModifier(t.parent,1025)?c(t.parent):void 0}}function c(t){if(t)switch(t.kind){case 257:return e.isVariableDeclarationList(t.parent)&&1===t.parent.declarations.length?e.isVariableStatement(t.parent.parent)?t.parent.parent:e.isForInOrOfStatement(t.parent.parent)?c(t.parent.parent):t.parent:t;case 205:return c(t.parent.parent);case 273:return t.parent.parent.parent;case 278:case 271:return t.parent.parent;case 270:case 277:return t.parent;case 223:return e.isExpressionStatement(t.parent)?t.parent:t;case 247:case 246:return{start:t.initializer,end:t.expression};case 299:case 300:return e.isArrayLiteralOrObjectLiteralDestructuringPattern(t.parent)?c(e.findAncestor(t.parent,(function(t){return e.isBinaryExpression(t)||e.isForInOrOfStatement(t)}))):t;default:return t}}function u(e,t,r){if(r){var n=i(r)?y(r.start,t,r.end):y(r,t);return n.start!==e.start||n.length!==e.length?{contextSpan:n}:void 0}}function l(t,i,a,o,s){if(308!==o.kind){var c=t.getTypeChecker();if(300===o.parent.kind){var u=[];return r.getReferenceEntriesForShorthandPropertyAssignment(o,c,(function(e){return u.push(n(e))})),u}if(106===o.kind||e.isSuperProperty(o.parent)){var l=c.getSymbolAtLocation(o);return l.valueDeclaration&&[n(l.valueDeclaration)]}return _(s,o,t,a,i,{implementations:!0,use:1})}}function _(t,n,i,a,o,s,c){return void 0===s&&(s={}),void 0===c&&(c=new e.Set(a.map((function(e){return e.fileName})))),d(r.getReferencedSymbolsForNode(t,n,i,a,o,s,c))}function d(t){return t&&e.flatMap(t,(function(e){return e.references}))}function p(t){var r=t.getSourceFile();return{sourceFile:r,textSpan:y(e.isComputedPropertyName(t)?t.expression:t,r)}}function f(t,n,i){var a=r.getIntersectingMeaningFromDeclarations(i,t),o=t.declarations&&e.firstOrUndefined(t.declarations)||i,s=e.SymbolDisplay.getSymbolDisplayPartsDocumentationAndSymbolKind(n,t,o.getSourceFile(),o,o,a);return{displayParts:s.displayParts,kind:s.symbolKind}}function g(e){var t=m(e);if(0===e.kind)return o(o({},t),{isWriteAccess:!1});var r=e.kind,n=e.node;return o(o({},t),{isWriteAccess:h(n),isInString:2===r||void 0})}function m(e){if(0===e.kind)return{textSpan:e.textSpan,fileName:e.fileName};var t=e.node.getSourceFile(),r=y(e.node,t);return o({textSpan:r,fileName:t.fileName},u(r,t,e.context))}function y(t,r,n){var i=t.getStart(r),a=(n||t).getEnd();return e.isStringLiteralLike(t)&&a-i>2&&(e.Debug.assert(void 0===n),i+=1,a-=1),e.createTextSpanFromBounds(i,a)}function v(e){return 0===e.kind?e.textSpan:y(e.node,e.node.getSourceFile())}function h(t){var r=e.getDeclarationFromName(t);return!!r&&function(t){if(16777216&t.flags)return!0;switch(t.kind){case 223:case 205:case 260:case 228:case 88:case 263:case 302:case 278:case 270:case 268:case 273:case 261:case 341:case 348:case 288:case 264:case 267:case 271:case 277:case 166:case 300:case 262:case 165:return!0;case 299:return!e.isArrayLiteralOrObjectLiteralDestructuringPattern(t.parent);case 259:case 215:case 173:case 171:case 174:case 175:return!!t.body;case 257:case 169:return!!t.initializer||e.isCatchClause(t.parent);case 170:case 168:case 350:case 343:return!1;default:return e.Debug.failBadSyntaxKind(t)}}(r)||88===t.kind||e.isWriteAccess(t)}function b(t,r){var n;if(!r)return!1;var i=e.getDeclarationFromName(t)||(88===t.kind?t.parent:e.isLiteralComputedPropertyDeclarationName(t)||135===t.kind&&e.isConstructorDeclaration(t.parent)?t.parent.parent:void 0),a=i&&e.isBinaryExpression(i)?i.left:void 0;return!(!i||!(null===(n=r.declarations)||void 0===n?void 0:n.some((function(e){return e===i||e===a}))))}!function(e){e[e.Symbol=0]="Symbol",e[e.Label=1]="Label",e[e.Keyword=2]="Keyword",e[e.This=3]="This",e[e.String=4]="String",e[e.TripleSlashReference=5]="TripleSlashReference"}(t.DefinitionKind||(t.DefinitionKind={})),function(e){e[e.Span=0]="Span",e[e.Node=1]="Node",e[e.StringLiteral=2]="StringLiteral",e[e.SearchedLocalFoundProperty=3]="SearchedLocalFoundProperty",e[e.SearchedPropertyFoundLocal=4]="SearchedPropertyFoundLocal"}(t.EntryKind||(t.EntryKind={})),t.nodeEntry=n,t.isContextWithStartAndEndNode=i,t.getContextNode=c,t.toContextSpan=u,function(e){e[e.Other=0]="Other",e[e.References=1]="References",e[e.Rename=2]="Rename"}(t.FindReferencesUse||(t.FindReferencesUse={})),t.findReferencedSymbols=function(t,n,i,a,s){var l=e.getTouchingPropertyName(a,s),_={use:1},d=r.getReferencedSymbolsForNode(s,l,t,i,n,_),m=t.getTypeChecker(),y=r.getAdjustedNode(l,_),v=function(t){return 88===t.kind||!!e.getDeclarationFromName(t)||e.isLiteralComputedPropertyDeclarationName(t)||135===t.kind&&e.isConstructorDeclaration(t.parent)}(y)?m.getSymbolAtLocation(y):void 0;return d&&d.length?e.mapDefined(d,(function(t){var r=t.definition,i=t.references;return r&&{definition:m.runWithCancellationToken(n,(function(t){return function(t,r,n){var i=function(){switch(t.type){case 0:var i=f(g=t.symbol,r,n),a=i.displayParts,s=i.kind,u=a.map((function(e){return e.text})).join(""),l=g.declarations&&e.firstOrUndefined(g.declarations),_=l?e.getNameOfDeclaration(l)||l:n;return o(o({},p(_)),{name:u,kind:s,displayParts:a,context:c(l)});case 1:_=t.node;return o(o({},p(_)),{name:_.text,kind:"label",displayParts:[e.displayPart(_.text,e.SymbolDisplayPartKind.text)]});case 2:_=t.node;var d=e.tokenToString(_.kind);return o(o({},p(_)),{name:d,kind:"keyword",displayParts:[{text:d,kind:"keyword"}]});case 3:_=t.node;var g,m=(g=r.getSymbolAtLocation(_))&&e.SymbolDisplay.getSymbolDisplayPartsDocumentationAndSymbolKind(r,g,_.getSourceFile(),e.getContainerNode(_),_).displayParts||[e.textPart("this")];return o(o({},p(_)),{name:"this",kind:"var",displayParts:m});case 4:_=t.node;return o(o({},p(_)),{name:_.text,kind:"var",displayParts:[e.displayPart(e.getTextOfNode(_),e.SymbolDisplayPartKind.stringLiteral)]});case 5:return{textSpan:e.createTextSpanFromRange(t.reference),sourceFile:t.file,name:t.reference.fileName,kind:"string",displayParts:[e.displayPart('"'.concat(t.reference.fileName,'"'),e.SymbolDisplayPartKind.stringLiteral)]};default:return e.Debug.assertNever(t)}}(),a=i.sourceFile,s=i.textSpan,l=i.name,_=i.kind,d=i.displayParts,g=i.context;return o({containerKind:"",containerName:"",fileName:a.fileName,kind:_,name:l,textSpan:s,displayParts:d},u(s,a,g))}(r,t,l)})),references:i.map((function(e){return function(e,t){var r=g(e);return t?o(o({},r),{isDefinition:0!==e.kind&&b(e.node,t)}):r}(e,v)}))}})):void 0},t.getImplementationsAtPosition=function(t,r,n,i,s){var c,u=e.getTouchingPropertyName(i,s),_=l(t,r,n,u,s);if(208===u.parent.kind||205===u.parent.kind||209===u.parent.kind||106===u.kind)c=_&&a([],_,!0);else if(_)for(var d=e.createQueue(_),p=new e.Map;!d.isEmpty();){var g=d.dequeue();if(e.addToSeen(p,e.getNodeId(g.node))){c=e.append(c,g);var y=l(t,r,n,g.node,g.node.pos);y&&d.enqueue.apply(d,y)}}var v=t.getTypeChecker();return e.map(c,(function(t){return function(t,r){var n=m(t);if(0!==t.kind){var i=t.node;return o(o({},n),function(t,r){var n=r.getSymbolAtLocation(e.isDeclaration(t)&&t.name?t.name:t);return n?f(n,r,t):207===t.kind?{kind:"interface",displayParts:[e.punctuationPart(20),e.textPart("object literal"),e.punctuationPart(21)]}:228===t.kind?{kind:"local class",displayParts:[e.punctuationPart(20),e.textPart("anonymous local class"),e.punctuationPart(21)]}:{kind:e.getNodeKind(t),displayParts:[]}}(i,r))}return o(o({},n),{kind:"",displayParts:[]})}(t,v)}))},t.findReferenceOrRenameEntries=function(t,n,i,a,o,s,c){return e.map(d(r.getReferencedSymbolsForNode(o,a,t,i,n,s)),(function(e){return c(e,a,t.getTypeChecker())}))},t.getReferenceEntriesForNode=_,t.toRenameLocation=function(t,r,n,i){return o(o({},m(t)),i&&function(t,r,n){if(0!==t.kind&&e.isIdentifier(r)){var i=t.node,a=t.kind,o=i.parent,s=r.text,c=e.isShorthandPropertyAssignment(o);if(c||e.isObjectBindingElementWithoutPropertyName(o)&&o.name===i&&void 0===o.dotDotDotToken){var u={prefixText:s+": "},l={suffixText:": "+s};if(3===a)return u;if(4===a)return l;if(c){var _=o.parent;return e.isObjectLiteralExpression(_)&&e.isBinaryExpression(_.parent)&&e.isModuleExportsAccessExpression(_.parent.left)?u:l}return u}if(e.isImportSpecifier(o)&&!o.propertyName){var d=e.isExportSpecifier(r.parent)?n.getExportSpecifierLocalTargetSymbol(r.parent):n.getSymbolAtLocation(r);return e.contains(d.declarations,o)?{prefixText:s+" as "}:e.emptyOptions}if(e.isExportSpecifier(o)&&!o.propertyName)return r===t.node||n.getSymbolAtLocation(r)===n.getSymbolAtLocation(t.node)?{prefixText:s+" as "}:{suffixText:" as "+s}}return e.emptyOptions}(t,r,n))},t.toReferenceEntry=g,t.toHighlightSpan=function(e){var t=m(e);if(0===e.kind)return{fileName:t.fileName,span:{textSpan:t.textSpan,kind:"reference"}};var r=h(e.node),n=o({textSpan:t.textSpan,kind:r?"writtenReference":"reference",isInString:2===e.kind||void 0},t.contextSpan&&{contextSpan:t.contextSpan});return{fileName:t.fileName,span:n}},t.getTextSpanOfEntry=v,t.isDeclarationOfSymbol=b,function(r){function i(t,r){return 1===r.use?t=e.getAdjustedReferenceLocation(t):2===r.use&&(t=e.getAdjustedRenameLocation(t)),t}function a(t,r,n){for(var i,a=0,o=r.get(t.path)||e.emptyArray;a<o.length;a++){var s=o[a];if(e.isReferencedFile(s)){var c=n.getSourceFileByPath(s.file),u=e.getReferencedFileLocation(n.getSourceFileByPath,s);e.isReferenceFileLocation(u)&&(i=e.append(i,{kind:0,fileName:c.fileName,textSpan:e.createTextSpanFromRange(u)}))}}return i}function o(t,r,n){if(t.parent&&e.isNamespaceExportDeclaration(t.parent)){var i=n.getAliasedSymbol(r),a=n.getMergedSymbol(i);if(i!==a)return a}}function s(t,r,n,i,a,o){var s=1536&t.flags&&t.declarations&&e.find(t.declarations,e.isSourceFile);if(s){var u=t.exports.get("export="),_=l(r,t,!!u,n,o);if(!u||!o.has(s.fileName))return _;var p=r.getTypeChecker();return c(r,_,d(t=e.skipAlias(u,p),void 0,n,o,p,i,a))}}function c(t){for(var r,n=[],i=1;i<arguments.length;i++)n[i-1]=arguments[i];for(var a=0,o=n;a<o.length;a++){var s=o[a];if(s&&s.length)if(r)for(var c=function(n){if(!n.definition||0!==n.definition.type)return r.push(n),"continue";var i=n.definition.symbol,a=e.findIndex(r,(function(e){return!!e.definition&&0===e.definition.type&&e.definition.symbol===i}));if(-1===a)return r.push(n),"continue";var o=r[a];r[a]={definition:o.definition,references:o.references.concat(n.references).sort((function(r,n){var i=u(t,r),a=u(t,n);if(i!==a)return e.compareValues(i,a);var o=v(r),s=v(n);return o.start!==s.start?e.compareValues(o.start,s.start):e.compareValues(o.length,s.length)}))}},l=0,_=s;l<_.length;l++){var d=_[l];c(d)}else r=s}return r}function u(e,t){var r=0===t.kind?e.getSourceFile(t.fileName):t.node.getSourceFile();return e.getSourceFiles().indexOf(r)}function l(r,i,a,o,s){e.Debug.assert(!!i.valueDeclaration);var c=e.mapDefined(t.findModuleReferences(r,o,i),(function(t){if("import"===t.kind){var r=t.literal.parent;if(e.isLiteralTypeNode(r)){var i=e.cast(r.parent,e.isImportTypeNode);if(a&&!i.qualifier)return}return n(t.literal)}return{kind:0,fileName:t.referencingFile.fileName,textSpan:e.createTextSpanFromRange(t.ref)}}));if(i.declarations)for(var u=0,l=i.declarations;u<l.length;u++){switch((f=l[u]).kind){case 308:break;case 264:s.has(f.getSourceFile().fileName)&&c.push(n(f.name));break;default:e.Debug.assert(!!(33554432&i.flags),"Expected a module symbol to be declared by a SourceFile or ModuleDeclaration.")}}var _=i.exports.get("export=");if(null==_?void 0:_.declarations)for(var d=0,p=_.declarations;d<p.length;d++){var f,g=(f=p[d]).getSourceFile();if(s.has(g.fileName)){var m=e.isBinaryExpression(f)&&e.isPropertyAccessExpression(f.left)?f.left.expression:e.isExportAssignment(f)?e.Debug.checkDefined(e.findChildOfKind(f,93,g)):e.getNameOfDeclaration(f)||f;c.push(n(m))}}return c.length?[{definition:{type:0,symbol:i},references:c}]:e.emptyArray}function _(t){return 146===t.kind&&e.isTypeOperatorNode(t.parent)&&146===t.parent.operator}function d(t,r,n,i,a,o,s){var c=r&&function(t,r,n,i){var a=r.parent;if(e.isExportSpecifier(a)&&i)return F(r,t,a,n);return e.firstDefined(t.declarations,(function(i){if(!i.parent){if(33554432&t.flags)return;e.Debug.fail("Unexpected symbol at ".concat(e.Debug.formatSyntaxKind(r.kind),": ").concat(e.Debug.formatSymbol(t)))}return e.isTypeLiteralNode(i.parent)&&e.isUnionTypeNode(i.parent.parent)?n.getPropertyOfType(n.getTypeFromTypeNode(i.parent.parent),t.name):void 0}))}(t,r,a,!K(s))||t,u=r?J(r,c):7,l=[],_=new g(n,i,r?function(t){switch(t.kind){case 173:case 135:return 1;case 79:if(e.isClassLike(t.parent))return e.Debug.assert(t.parent.name===t),2;default:return 0}}(r):0,a,o,u,s,l),d=K(s)&&c.declarations?e.find(c.declarations,e.isExportSpecifier):void 0;if(d)A(d.name,c,d,_.createSearch(r,t,void 0),_,!0,!0);else if(r&&88===r.kind&&"default"===c.escapedName&&c.parent)P(r,c,_),m(r,c,{exportingModuleSymbol:c.parent,exportKind:1},_);else{var f=_.createSearch(r,c,void 0,{allSearchSymbols:r?R(c,r,a,2===s.use,!!s.providePrefixAndSuffixTextForRename,!!s.implementations):[c]});p(c,_,f)}return l}function p(t,r,n){var i=function(t){var r=t.declarations,n=t.flags,i=t.parent,a=t.valueDeclaration;if(a&&(215===a.kind||228===a.kind))return a;if(!r)return;if(8196&n){var o=e.find(r,(function(t){return e.hasEffectiveModifier(t,8)||e.isPrivateIdentifierClassElementDeclaration(t)}));return o?e.getAncestor(o,260):void 0}if(r.some(e.isObjectBindingElementWithoutPropertyName))return;var s,c=i&&!(262144&t.flags);if(c&&(!e.isExternalModuleSymbol(i)||i.globalExports))return;for(var u=0,l=r;u<l.length;u++){var _=l[u],d=e.getContainerNode(_);if(s&&s!==d)return;if(!d||308===d.kind&&!e.isExternalOrCommonJsModule(d))return;if(s=d,e.isFunctionExpression(s))for(var p=void 0;p=e.getNextJSDocCommentLocation(s);)s=p}return c?s.getSourceFile():s}(t);if(i)E(i,i.getSourceFile(),n,r,!(e.isSourceFile(i)&&!e.contains(r.sourceFiles,i)));else for(var a=0,o=r.sourceFiles;a<o.length;a++){var s=o[a];r.cancellationToken.throwIfCancellationRequested(),b(s,n,r)}}var f;r.getReferencedSymbolsForNode=function(t,r,u,p,f,g,m){var y,v;if(void 0===g&&(g={}),void 0===m&&(m=new e.Set(p.map((function(e){return e.fileName})))),r=i(r,g),e.isSourceFile(r)){var h=e.GoToDefinition.getReferenceAtPosition(r,t,u);if(!(null==h?void 0:h.file))return;var b=u.getTypeChecker().getMergedSymbol(h.file.symbol);if(b)return l(u,b,!1,p,m);if(!(A=u.getFileIncludeReasons()))return;return[{definition:{type:5,reference:h.reference,file:r},references:a(h.file,A,u)||e.emptyArray}]}if(!g.implementations){var x=function(t,r,i){if(e.isTypeKeyword(t.kind)){if(114===t.kind&&e.isVoidExpression(t.parent))return;if(146===t.kind&&!_(t))return;return function(t,r,i,a){var o=e.flatMap(t,(function(t){return i.throwIfCancellationRequested(),e.mapDefined(D(t,e.tokenToString(r),t),(function(e){if(e.kind===r&&(!a||a(e)))return n(e)}))}));return o.length?[{definition:{type:2,node:o[0].node},references:o}]:void 0}(r,t.kind,i,146===t.kind?_:void 0)}if(e.isImportMeta(t.parent)&&t.parent.name===t)return function(t,r){var i=e.flatMap(t,(function(t){return r.throwIfCancellationRequested(),e.mapDefined(D(t,"meta",t),(function(t){var r=t.parent;if(e.isImportMeta(r))return n(r)}))}));return i.length?[{definition:{type:2,node:i[0].node},references:i}]:void 0}(r,i);if(e.isStaticModifier(t)&&e.isClassStaticBlockDeclaration(t.parent))return[{definition:{type:2,node:t},references:[n(t)]}];if(e.isJumpStatementTarget(t)){var a=e.getTargetLabel(t.parent,t.text);return a&&T(a.parent,a)}if(e.isLabelOfLabeledStatement(t))return T(t.parent,t);if(e.isThis(t))return function(t,r,i){var a=e.getThisContainer(t,!1),o=32;switch(a.kind){case 171:case 170:if(e.isObjectLiteralMethod(a)){o&=e.getSyntacticModifierFlags(a),a=a.parent;break}case 169:case 168:case 173:case 174:case 175:o&=e.getSyntacticModifierFlags(a),a=a.parent;break;case 308:if(e.isExternalModule(a)||L(t))return;case 259:case 215:break;default:return}var s=e.flatMap(308===a.kind?r:[a.getSourceFile()],(function(t){return i.throwIfCancellationRequested(),D(t,"this",e.isSourceFile(a)?t:a).filter((function(t){if(!e.isThis(t))return!1;var r=e.getThisContainer(t,!1);switch(a.kind){case 215:case 259:return a.symbol===r.symbol;case 171:case 170:return e.isObjectLiteralMethod(a)&&a.symbol===r.symbol;case 228:case 260:case 207:return r.parent&&a.symbol===r.parent.symbol&&e.isStatic(r)===!!o;case 308:return 308===r.kind&&!e.isExternalModule(r)&&!L(t)}}))})).map((function(e){return n(e)})),c=e.firstDefined(s,(function(t){return e.isParameter(t.node.parent)?t.node:void 0}));return[{definition:{type:3,node:c||t},references:s}]}(t,r,i);if(106===t.kind)return function(t){var r=e.getSuperContainer(t,!1);if(!r)return;var i=32;switch(r.kind){case 169:case 168:case 171:case 170:case 173:case 174:case 175:i&=e.getSyntacticModifierFlags(r),r=r.parent;break;default:return}var a=r.getSourceFile(),o=e.mapDefined(D(a,"super",r),(function(t){if(106===t.kind){var a=e.getSuperContainer(t,!1);return a&&e.isStatic(a)===!!i&&a.parent.symbol===r.symbol?n(t):void 0}}));return[{definition:{type:0,symbol:r.symbol},references:o}]}(t);return}(r,p,f);if(x)return x}var S=u.getTypeChecker(),C=S.getSymbolAtLocation(e.isConstructorDeclaration(r)&&r.parent.name||r);if(C){if("export="===C.escapedName)return l(u,C.parent,!1,p,m);var E=s(C,u,p,f,g,m);if(E&&!(33554432&C.flags))return E;var k=o(r,C,S),N=k&&s(k,u,p,f,g,m);return c(u,E,d(C,r,p,m,S,f,g),N)}if(!g.implementations&&e.isStringLiteralLike(r)){if(e.isModuleSpecifierLike(r)){var A=u.getFileIncludeReasons(),F=null===(v=null===(y=r.getSourceFile().resolvedModules)||void 0===y?void 0:y.get(r.text,e.getModeForUsageLocation(r.getSourceFile(),r)))||void 0===v?void 0:v.resolvedFileName,P=F?u.getSourceFile(F):void 0;if(P)return[{definition:{type:4,node:r},references:a(P,A,u)||e.emptyArray}]}return function(t,r,i,a){var o=e.getContextualTypeFromParentOrAncestorTypeNode(t,i),s=e.flatMap(r,(function(r){return a.throwIfCancellationRequested(),e.mapDefined(D(r,t.text),(function(a){if(e.isStringLiteralLike(a)&&a.text===t.text){if(!o)return e.isNoSubstitutionTemplateLiteral(a)&&!e.rangeIsOnSingleLine(a,r)?void 0:n(a,2);var s=e.getContextualTypeFromParentOrAncestorTypeNode(a,i);if(o!==i.getStringType()&&o===s)return n(a,2)}}))}));return[{definition:{type:4,node:t},references:s}]}(r,p,S,f)}},r.getAdjustedNode=i,r.getReferencesForFileName=function(t,r,n,i){var o,s;void 0===i&&(i=new e.Set(n.map((function(e){return e.fileName}))));var c=null===(o=r.getSourceFile(t))||void 0===o?void 0:o.symbol;if(c)return(null===(s=l(r,c,!1,n,i)[0])||void 0===s?void 0:s.references)||e.emptyArray;var u=r.getFileIncludeReasons(),_=r.getSourceFile(t);return _&&u&&a(_,u,r)||e.emptyArray},function(e){e[e.None=0]="None",e[e.Constructor=1]="Constructor",e[e.Class=2]="Class"}(f||(f={}));var g=function(){function r(t,r,n,i,a,o,s,c){this.sourceFiles=t,this.sourceFilesSet=r,this.specialSearchKind=n,this.checker=i,this.cancellationToken=a,this.searchMeaning=o,this.options=s,this.result=c,this.inheritsFromCache=new e.Map,this.markSeenContainingTypeReference=e.nodeSeenTracker(),this.markSeenReExportRHS=e.nodeSeenTracker(),this.symbolIdToReferences=[],this.sourceFileToSeenSymbols=[]}return r.prototype.includesSourceFile=function(e){return this.sourceFilesSet.has(e.fileName)},r.prototype.getImportSearches=function(e,r){return this.importTracker||(this.importTracker=t.createImportTracker(this.sourceFiles,this.sourceFilesSet,this.checker,this.cancellationToken)),this.importTracker(e,r,2===this.options.use)},r.prototype.createSearch=function(t,r,n,i){void 0===i&&(i={});var a=i.text,o=void 0===a?e.stripQuotes(e.symbolName(e.getLocalSymbolForExportDefault(r)||function(t){if(33555968&t.flags){var r=t.declarations&&e.find(t.declarations,(function(t){return!e.isSourceFile(t)&&!e.isModuleDeclaration(t)}));return r&&r.symbol}}(r)||r)):a,s=i.allSearchSymbols,c=void 0===s?[r]:s,u=e.escapeLeadingUnderscores(o),l=this.options.implementations&&t?function(t,r,n){var i=e.isRightSideOfPropertyAccess(t)?t.parent:void 0,a=i&&n.getTypeAtLocation(i.expression),o=e.mapDefined(a&&(a.isUnionOrIntersection()?a.types:a.symbol===r.parent?void 0:[a]),(function(e){return e.symbol&&96&e.symbol.flags?e.symbol:void 0}));return 0===o.length?void 0:o}(t,r,this.checker):void 0;return{symbol:r,comingFrom:n,text:o,escapedText:u,parents:l,allSearchSymbols:c,includes:function(t){return e.contains(c,t)}}},r.prototype.referenceAdder=function(t){var r=e.getSymbolId(t),i=this.symbolIdToReferences[r];return i||(i=this.symbolIdToReferences[r]=[],this.result.push({definition:{type:0,symbol:t},references:i})),function(e,t){return i.push(n(e,t))}},r.prototype.addStringOrCommentReference=function(e,t){this.result.push({definition:void 0,references:[{kind:0,fileName:e,textSpan:t}]})},r.prototype.markSearchedSymbols=function(t,r){for(var n=e.getNodeId(t),i=this.sourceFileToSeenSymbols[n]||(this.sourceFileToSeenSymbols[n]=new e.Set),a=!1,o=0,s=r;o<s.length;o++){var c=s[o];a=e.tryAddToSet(i,e.getSymbolId(c))||a}return a},r}();function m(e,t,r,n){var i=n.getImportSearches(t,r),a=i.importSearches,o=i.singleReferences,s=i.indirectUsers;if(o.length)for(var c=n.referenceAdder(t),u=0,l=o;u<l.length;u++){var _=l[u];y(_,n)&&c(_)}for(var d=0,p=a;d<p.length;d++){var f=p[d],g=f[0],m=f[1];C(g.getSourceFile(),n.createSearch(g,m,1),n)}if(s.length){var v=void 0;switch(r.exportKind){case 0:v=n.createSearch(e,t,1);break;case 1:v=2===n.options.use?void 0:n.createSearch(e,t,1,{text:"default"})}if(v)for(var h=0,x=s;h<x.length;h++){b(x[h],v,n)}}}function y(t,r){return!!k(t,r)&&(2!==r.options.use||!!e.isIdentifier(t)&&!(e.isImportOrExportSpecifier(t.parent)&&"default"===t.escapedText))}function h(e,t){if(e.declarations)for(var r=0,n=e.declarations;r<n.length;r++){var i=n[r],a=i.getSourceFile();C(a,t.createSearch(i,e,0),t,t.includesSourceFile(a))}}function b(t,r,n){void 0!==e.getNameTable(t).get(r.escapedText)&&C(t,r,n)}function x(t,r,n,i,a){void 0===a&&(a=n);var o=e.isParameterPropertyDeclaration(t.parent,t.parent.parent)?e.first(r.getSymbolsOfParameterPropertyDeclaration(t.parent,t.text)):r.getSymbolAtLocation(t);if(o)for(var s=0,c=D(n,o.name,a);s<c.length;s++){var u=c[s];if(e.isIdentifier(u)&&u!==t&&u.escapedText===t.escapedText){var l=r.getSymbolAtLocation(u);if(l===o||r.getShorthandAssignmentValueSymbol(u.parent)===o||e.isExportSpecifier(u.parent)&&F(u,l,u.parent,r)===o){var _=i(u);if(_)return _}}}}function D(t,r,n){return void 0===n&&(n=t),S(t,r,n).map((function(r){return e.getTouchingPropertyName(t,r)}))}function S(t,r,n){void 0===n&&(n=t);var i=[];if(!r||!r.length)return i;for(var a=t.text,o=a.length,s=r.length,c=a.indexOf(r,n.pos);c>=0&&!(c>n.end);){var u=c+s;0!==c&&e.isIdentifierPart(a.charCodeAt(c-1),99)||u!==o&&e.isIdentifierPart(a.charCodeAt(u),99)||i.push(c),c=a.indexOf(r,c+s+1)}return i}function T(t,r){var i=t.getSourceFile(),a=r.text,o=e.mapDefined(D(i,a,t),(function(t){return t===r||e.isJumpStatementTarget(t)&&e.getTargetLabel(t,a)===r?n(t):void 0}));return[{definition:{type:1,node:r},references:o}]}function C(e,t,r,n){return void 0===n&&(n=!0),r.cancellationToken.throwIfCancellationRequested(),E(e,e,t,r,n)}function E(e,t,r,n,i){if(n.markSearchedSymbols(t,r.allSearchSymbols))for(var a=0,o=S(t,r.text,e);a<o.length;a++){N(t,o[a],r,n,i)}}function k(t,r){return!!(e.getMeaningFromLocation(t)&r.searchMeaning)}function N(r,n,i,a,o){var s=e.getTouchingPropertyName(r,n);if(function(t,r){switch(t.kind){case 80:if(e.isJSDocMemberName(t.parent))return!0;case 79:return t.text.length===r.length;case 14:case 10:var n=t;return(e.isLiteralNameOfPropertyDeclarationOrIndexAccess(n)||e.isNameOfModuleDeclaration(t)||e.isExpressionOfExternalModuleImportEqualsDeclaration(t)||e.isCallExpression(t.parent)&&e.isBindableObjectDefinePropertyCall(t.parent)&&t.parent.arguments[1]===t)&&n.text.length===r.length;case 8:return e.isLiteralNameOfPropertyDeclarationOrIndexAccess(t)&&t.text.length===r.length;case 88:return"default".length===r.length;default:return!1}}(s,i.text)){if(k(s,a)){var c=a.checker.getSymbolAtLocation(s);if(c){var u=s.parent;if(!e.isImportSpecifier(u)||u.propertyName!==s){if(e.isExportSpecifier(u))return e.Debug.assert(79===s.kind),void A(s,c,u,i,a,o);var l=function(t,r,n,i){var a=i.checker;return B(r,n,a,!1,2!==i.options.use||!!i.options.providePrefixAndSuffixTextForRename,(function(n,i,a,o){return a&&j(r)!==j(a)&&(a=void 0),t.includes(a||i||n)?{symbol:!i||6&e.getCheckFlags(n)?n:i,kind:o}:void 0}),(function(e){return!(t.parents&&!t.parents.some((function(t){return M(e.parent,t,i.inheritsFromCache,a)})))}))}(i,c,s,a);if(l){switch(a.specialSearchKind){case 0:o&&P(s,l,a);break;case 1:!function(t,r,n,i){e.isNewExpressionTarget(t)&&P(t,n.symbol,i);var a=function(){return i.referenceAdder(n.symbol)};if(e.isClassLike(t.parent))e.Debug.assert(88===t.kind||t.parent.name===t),function(t,r,n){var i=w(t);if(i&&i.declarations)for(var a=0,o=i.declarations;a<o.length;a++){var s=o[a],c=e.findChildOfKind(s,135,r);e.Debug.assert(173===s.kind&&!!c),n(c)}t.exports&&t.exports.forEach((function(t){var r=t.valueDeclaration;if(r&&171===r.kind){var i=r.body;i&&U(i,108,(function(t){e.isNewExpressionTarget(t)&&n(t)}))}}))}(n.symbol,r,a());else{var o=(s=t,e.tryGetClassExtendingExpressionWithTypeArguments(e.climbPastPropertyAccess(s).parent));o&&(function(t,r){var n=w(t.symbol);if(!n||!n.declarations)return;for(var i=0,a=n.declarations;i<a.length;i++){var o=a[i];e.Debug.assert(173===o.kind);var s=o.body;s&&U(s,106,(function(t){e.isCallExpressionTarget(t)&&r(t)}))}}(o,a()),function(e,t){if(function(e){return!!w(e.symbol)}(e))return;var r=e.symbol,n=t.createSearch(void 0,r,void 0);p(r,t,n)}(o,i))}var s}(s,r,i,a);break;case 2:!function(t,r,n){P(t,r.symbol,n);var i=t.parent;if(2===n.options.use||!e.isClassLike(i))return;e.Debug.assert(i.name===t);for(var a=n.referenceAdder(r.symbol),o=0,s=i.members;o<s.length;o++){var c=s[o];e.isMethodOrAccessor(c)&&e.isStatic(c)&&(c.body&&c.body.forEachChild((function t(r){108===r.kind?a(r):e.isFunctionLike(r)||e.isClassLike(r)||r.forEachChild(t)})))}}(s,i,a);break;default:e.Debug.assertNever(a.specialSearchKind)}e.isInJSFile(s)&&205===s.parent.kind&&e.isVariableDeclarationInitializedToBareOrAccessedRequire(s.parent.parent.parent)&&!(c=s.parent.symbol)||function(e,r,n,i){var a=t.getImportOrExportSymbol(e,r,i.checker,1===n.comingFrom);if(!a)return;var o=a.symbol;0===a.kind?K(i.options)||h(o,i):m(e,o,a.exportInfo,i)}(s,c,i,a)}else!function(t,r,n){var i=t.flags,a=t.valueDeclaration,o=n.checker.getShorthandAssignmentValueSymbol(a),s=a&&e.getNameOfDeclaration(a);33554432&i||!s||!r.includes(o)||P(s,o,n)}(c,i,a)}}}}else!a.options.implementations&&(a.options.findInStrings&&e.isInString(r,n)||a.options.findInComments&&e.isInNonReferenceComment(r,n))&&a.addStringOrCommentReference(r.fileName,e.createTextSpan(n,i.text.length))}function A(r,n,i,a,o,s,c){e.Debug.assert(!c||!!o.options.providePrefixAndSuffixTextForRename,"If alwaysGetReferences is true, then prefix/suffix text must be enabled");var u=i.parent,l=i.propertyName,_=i.name,d=u.parent,p=F(r,n,i,o.checker);if(c||a.includes(p)){if(l?r===l?(d.moduleSpecifier||b(),s&&2!==o.options.use&&o.markSeenReExportRHS(_)&&P(_,e.Debug.checkDefined(i.symbol),o)):o.markSeenReExportRHS(r)&&b():2===o.options.use&&"default"===_.escapedText||b(),!K(o.options)||c){var f=88===r.originalKeywordKind||88===i.name.originalKeywordKind?1:0,g=e.Debug.checkDefined(i.symbol),y=t.getExportInfo(g,f,o.checker);y&&m(r,g,y,o)}if(1!==a.comingFrom&&d.moduleSpecifier&&!l&&!K(o.options)){var v=o.checker.getExportSpecifierLocalTargetSymbol(i);v&&h(v,o)}}function b(){s&&P(r,p,o)}}function F(t,r,n,i){return function(t,r){var n=r.parent,i=r.propertyName,a=r.name;return e.Debug.assert(i===t||a===t),i?i===t:!n.parent.moduleSpecifier}(t,n)&&i.getExportSpecifierLocalTargetSymbol(n)||r}function P(t,r,n){var i="kind"in r?r:{kind:void 0,symbol:r},a=i.kind,o=i.symbol;if(2!==n.options.use||88!==t.kind){var s=n.referenceAdder(o);n.options.implementations?function(t,r,n){if(e.isDeclarationName(t)&&(i=t.parent,16777216&i.flags?!e.isInterfaceDeclaration(i)&&!e.isTypeAliasDeclaration(i):e.isVariableLike(i)?e.hasInitializer(i):e.isFunctionLikeDeclaration(i)?i.body:e.isClassLike(i)||e.isModuleOrEnumDeclaration(i)))return void r(t);var i;if(79!==t.kind)return;300===t.parent.kind&&z(t,n.checker,r);var a=I(t);if(a)return void r(a);var o=e.findAncestor(t,(function(t){return!e.isQualifiedName(t.parent)&&!e.isTypeNode(t.parent)&&!e.isTypeElement(t.parent)})),s=o.parent;if(e.hasType(s)&&s.type===o&&n.markSeenContainingTypeReference(s))if(e.hasInitializer(s))u(s.initializer);else if(e.isFunctionLike(s)&&s.body){var c=s.body;238===c.kind?e.forEachReturnStatement(c,(function(e){e.expression&&u(e.expression)})):u(c)}else e.isAssertionExpression(s)&&u(s.expression);function u(e){O(e)&&r(e)}}(t,s,n):s(t,a)}}function w(e){return e.members&&e.members.get("__constructor")}function I(t){return e.isIdentifier(t)||e.isPropertyAccessExpression(t)?I(t.parent):e.isExpressionWithTypeArguments(t)?e.tryCast(t.parent.parent,e.isClassLike):void 0}function O(e){switch(e.kind){case 214:return O(e.expression);case 216:case 215:case 207:case 228:case 206:return!0;default:return!1}}function M(t,r,n,i){if(t===r)return!0;var a=e.getSymbolId(t)+","+e.getSymbolId(r),o=n.get(a);if(void 0!==o)return o;n.set(a,!1);var s=!!t.declarations&&t.declarations.some((function(t){return e.getAllSuperTypeNodes(t).some((function(e){var t=i.getTypeAtLocation(e);return!!t&&!!t.symbol&&M(t.symbol,r,n,i)}))}));return n.set(a,s),s}function L(e){return 79===e.kind&&166===e.parent.kind&&e.parent.name===e}function R(e,t,r,n,i,a){var o=[];return B(e,t,r,n,!(n&&i),(function(t,r,n){n&&j(e)!==j(n)&&(n=void 0),o.push(n||r||t)}),(function(){return!a})),o}function B(t,r,n,i,a,s,c){var u=e.getContainingObjectLiteralElement(r);if(u){var l=n.getShorthandAssignmentValueSymbol(r.parent);if(l&&i)return s(l,void 0,void 0,3);var _=n.getContextualType(u.parent),d=_&&e.firstDefined(e.getPropertySymbolsFromContextualType(u,n,_,!0),(function(e){return T(e,4)}));if(d)return d;var p=function(t,r){return e.isArrayLiteralOrObjectLiteralDestructuringPattern(t.parent.parent)?r.getPropertySymbolOfDestructuringAssignment(t):void 0}(r,n),f=p&&s(p,void 0,void 0,4);if(f)return f;var g=l&&s(l,void 0,void 0,3);if(g)return g}var m=o(r,t,n);if(m){var y=s(m,void 0,void 0,1);if(y)return y}var v=T(t);if(v)return v;if(t.valueDeclaration&&e.isParameterPropertyDeclaration(t.valueDeclaration,t.valueDeclaration.parent)){var h=n.getSymbolsOfParameterPropertyDeclaration(e.cast(t.valueDeclaration,e.isParameter),t.name);return e.Debug.assert(2===h.length&&!!(1&h[0].flags)&&!!(4&h[1].flags)),T(1&t.flags?h[1]:h[0])}var b=e.getDeclarationOfKind(t,278);if(!i||b&&!b.propertyName){var x=b&&n.getExportSpecifierLocalTargetSymbol(b);if(x){var D=s(x,void 0,void 0,1);if(D)return D}}if(!i){var S=void 0;return(S=a?e.isObjectBindingElementWithoutPropertyName(r.parent)?e.getPropertySymbolFromBindingElement(n,r.parent):void 0:C(t,n))&&T(S,4)}if(e.Debug.assert(i),a)return(S=C(t,n))&&T(S,4);function T(t,r){return e.firstDefined(n.getRootSymbols(t),(function(i){return s(t,i,void 0,r)||(i.parent&&96&i.parent.flags&&c(i)?function(t,r,n,i){var a=new e.Map;return o(t);function o(t){if(96&t.flags&&e.addToSeen(a,e.getSymbolId(t)))return e.firstDefined(t.declarations,(function(t){return e.firstDefined(e.getAllSuperTypeNodes(t),(function(t){var a=n.getTypeAtLocation(t),s=a&&a.symbol&&n.getPropertyOfType(a,r);return a&&s&&(e.firstDefined(n.getRootSymbols(s),i)||o(a.symbol))}))}))}}(i.parent,i.name,n,(function(e){return s(t,i,e,r)})):void 0)}))}function C(t,r){var n=e.getDeclarationOfKind(t,205);if(n&&e.isObjectBindingElementWithoutPropertyName(n))return e.getPropertySymbolFromBindingElement(r,n)}}function j(t){return!!t.valueDeclaration&&!!(32&e.getEffectiveModifierFlags(t.valueDeclaration))}function J(t,r){var n=e.getMeaningFromLocation(t),i=r.declarations;if(i){var a=void 0;do{a=n;for(var o=0,s=i;o<s.length;o++){var c=s[o],u=e.getMeaningFromDeclaration(c);u&n&&(n|=u)}}while(n!==a)}return n}function z(t,r,n){var i=r.getSymbolAtLocation(t),a=r.getShorthandAssignmentValueSymbol(i.valueDeclaration);if(a)for(var o=0,s=a.getDeclarations();o<s.length;o++){var c=s[o];1&e.getMeaningFromDeclaration(c)&&n(c)}}function U(t,r,n){e.forEachChild(t,(function(e){e.kind===r&&n(e),U(e,r,n)}))}function K(e){return 2===e.use&&e.providePrefixAndSuffixTextForRename}r.eachExportReference=function(r,n,i,a,o,s,c,u){for(var l=t.createImportTracker(r,new e.Set(r.map((function(e){return e.fileName}))),n,i)(a,{exportKind:c?1:0,exportingModuleSymbol:o},!1),_=l.importSearches,d=l.indirectUsers,p=l.singleReferences,f=0,g=_;f<g.length;f++){u(g[f][0])}for(var m=0,y=p;m<y.length;m++){var v=y[m];e.isIdentifier(v)&&e.isImportTypeNode(v.parent)&&u(v)}for(var h=0,b=d;h<b.length;h++)for(var x=0,S=D(b[h],c?"default":s);x<S.length;x++){var T=S[x],C=n.getSymbolAtLocation(T),E=e.some(null==C?void 0:C.declarations,(function(t){return!!e.tryCast(t,e.isExportAssignment)}));!e.isIdentifier(T)||e.isImportOrExportSpecifier(T.parent)||C!==a&&!E||u(T)}},r.isSymbolReferencedInFile=function(e,t,r,n){return void 0===n&&(n=r),x(e,t,r,(function(){return!0}),n)||!1},r.eachSymbolReferenceInFile=x,r.getTopMostDeclarationNamesInFile=function(t,r){return e.filter(D(r,t),(function(t){return!!e.getDeclarationFromName(t)})).reduce((function(t,r){var n=function(t){var r=0;for(;t;)t=e.getContainerNode(t),r++;return r}(r);return e.some(t.declarationNames)&&n!==t.depth?n<t.depth&&(t.declarationNames=[r],t.depth=n):(t.declarationNames.push(r),t.depth=n),t}),{depth:1/0,declarationNames:[]}).declarationNames},r.someSignatureUsage=function(t,r,n,i){if(!t.name||!e.isIdentifier(t.name))return!1;for(var a=e.Debug.checkDefined(n.getSymbolAtLocation(t.name)),o=0,s=r;o<s.length;o++)for(var c=0,u=D(s[o],a.name);c<u.length;c++){var l=u[c];if(e.isIdentifier(l)&&l!==t.name&&l.escapedText===t.name.escapedText){var _=e.climbPastPropertyAccess(l),d=e.isCallExpression(_.parent)&&_.parent.expression===_?_.parent:void 0,p=n.getSymbolAtLocation(l);if(p&&n.getRootSymbols(p).some((function(e){return e===a}))&&i(l,d))return!0}}return!1},r.getIntersectingMeaningFromDeclarations=J,r.getReferenceEntriesForShorthandPropertyAssignment=z}(r=t.Core||(t.Core={}))}(e.FindAllReferences||(e.FindAllReferences={}))}(_||(_={})),function(e){!function(t){function r(t){return(e.isFunctionExpression(t)||e.isArrowFunction(t)||e.isClassExpression(t))&&e.isVariableDeclaration(t.parent)&&t===t.parent.initializer&&e.isIdentifier(t.parent.name)&&!!(2&e.getCombinedNodeFlags(t.parent))}function n(t){return e.isSourceFile(t)||e.isModuleDeclaration(t)||e.isFunctionDeclaration(t)||e.isFunctionExpression(t)||e.isClassDeclaration(t)||e.isClassExpression(t)||e.isClassStaticBlockDeclaration(t)||e.isMethodDeclaration(t)||e.isMethodSignature(t)||e.isGetAccessorDeclaration(t)||e.isSetAccessorDeclaration(t)}function i(t){return e.isSourceFile(t)||e.isModuleDeclaration(t)&&e.isIdentifier(t.name)||e.isFunctionDeclaration(t)||e.isClassDeclaration(t)||e.isClassStaticBlockDeclaration(t)||e.isMethodDeclaration(t)||e.isMethodSignature(t)||e.isGetAccessorDeclaration(t)||e.isSetAccessorDeclaration(t)||function(t){return(e.isFunctionExpression(t)||e.isClassExpression(t))&&e.isNamedDeclaration(t)}(t)||r(t)}function a(t){return e.isSourceFile(t)?t:e.isNamedDeclaration(t)?t.name:r(t)?t.parent.name:e.Debug.checkDefined(t.modifiers&&e.find(t.modifiers,o))}function o(e){return 88===e.kind}function s(e,t){var r=a(t);return r&&e.getSymbolAtLocation(r)}function c(t,r){if(r.body)return r;if(e.isConstructorDeclaration(r))return e.getFirstConstructorWithBody(r.parent);if(e.isFunctionDeclaration(r)||e.isMethodDeclaration(r)){var n=s(t,r);return n&&n.valueDeclaration&&e.isFunctionLikeDeclaration(n.valueDeclaration)&&n.valueDeclaration.body?n.valueDeclaration:void 0}return r}function u(t,r){var n,a=s(t,r);if(a&&a.declarations){var o=e.indicesOf(a.declarations),c=e.map(a.declarations,(function(e){return{file:e.getSourceFile().fileName,pos:e.pos}}));o.sort((function(t,r){return e.compareStringsCaseSensitive(c[t].file,c[r].file)||c[t].pos-c[r].pos}));for(var u=void 0,l=0,_=e.map(o,(function(e){return a.declarations[e]}));l<_.length;l++){var d=_[l];i(d)&&(u&&u.parent===d.parent&&u.end===d.pos||(n=e.append(n,d)),u=d)}}return n}function l(t,r){var n,i,a;return e.isClassStaticBlockDeclaration(r)?r:e.isFunctionLikeDeclaration(r)?null!==(i=null!==(n=c(t,r))&&void 0!==n?n:u(t,r))&&void 0!==i?i:r:null!==(a=u(t,r))&&void 0!==a?a:r}function _(t,a){for(var o=t.getTypeChecker(),s=!1;;){if(i(a))return l(o,a);var c;if(n(a))return(c=e.findAncestor(a,i))&&l(o,c);if(e.isDeclarationName(a))return i(a.parent)?l(o,a.parent):n(a.parent)?(c=e.findAncestor(a.parent,i))&&l(o,c):e.isVariableDeclaration(a.parent)&&a.parent.initializer&&r(a.parent.initializer)?a.parent.initializer:void 0;if(e.isConstructorDeclaration(a))return i(a.parent)?a.parent:void 0;if(124!==a.kind||!e.isClassStaticBlockDeclaration(a.parent)){if(e.isVariableDeclaration(a)&&a.initializer&&r(a.initializer))return a.initializer;if(!s){var u=o.getSymbolAtLocation(a);if(u&&(2097152&u.flags&&(u=o.getAliasedSymbol(u)),u.valueDeclaration)){s=!0,a=u.valueDeclaration;continue}}return}a=a.parent}}function d(t,n){var i=n.getSourceFile(),a=function(t,n){if(e.isSourceFile(n))return{text:n.fileName,pos:0,end:0};if((e.isFunctionDeclaration(n)||e.isClassDeclaration(n))&&!e.isNamedDeclaration(n)){var i=n.modifiers&&e.find(n.modifiers,o);if(i)return{text:"default",pos:i.getStart(),end:i.getEnd()}}if(e.isClassStaticBlockDeclaration(n)){var a=n.getSourceFile(),s=e.skipTrivia(a.text,e.moveRangePastModifiers(n).pos),c=s+6,u=(_=(l=t.getTypeChecker()).getSymbolAtLocation(n.parent))?"".concat(l.symbolToString(_,n.parent)," "):"";return{text:"".concat(u,"static {}"),pos:s,end:c}}var l,_,d=r(n)?n.parent.name:e.Debug.checkDefined(e.getNameOfDeclaration(n),"Expected call hierarchy item to have a name"),p=e.isIdentifier(d)?e.idText(d):e.isStringOrNumericLiteralLike(d)?d.text:e.isComputedPropertyName(d)&&e.isStringOrNumericLiteralLike(d.expression)?d.expression.text:void 0;if(void 0===p&&(_=(l=t.getTypeChecker()).getSymbolAtLocation(d))&&(p=l.symbolToString(_,n)),void 0===p){var f=e.createPrinter({removeComments:!0,omitTrailingSemicolon:!0});p=e.usingSingleLineStringWriter((function(e){return f.writeNode(4,n,n.getSourceFile(),e)}))}return{text:p,pos:d.getStart(),end:d.getEnd()}}(t,n),s=function(t){var n,i;if(r(t))return e.isModuleBlock(t.parent.parent.parent.parent)&&e.isIdentifier(t.parent.parent.parent.parent.parent.name)?t.parent.parent.parent.parent.parent.name.getText():void 0;switch(t.kind){case 174:case 175:case 171:return 207===t.parent.kind?null===(n=e.getAssignedName(t.parent))||void 0===n?void 0:n.getText():null===(i=e.getNameOfDeclaration(t.parent))||void 0===i?void 0:i.getText();case 259:case 260:case 264:if(e.isModuleBlock(t.parent)&&e.isIdentifier(t.parent.parent.name))return t.parent.parent.name.getText()}}(n),c=e.getNodeKind(n),u=e.getNodeModifiers(n),l=e.createTextSpanFromBounds(e.skipTrivia(i.text,n.getFullStart(),!1,!0),n.getEnd()),_=e.createTextSpanFromBounds(a.pos,a.end);return{file:i.fileName,kind:c,kindModifiers:u,name:a.text,containerName:s,span:l,selectionSpan:_}}function p(e){return void 0!==e}function f(t){if(1===t.kind){var r=t.node;if(e.isCallOrNewExpressionTarget(r,!0,!0)||e.isTaggedTemplateTag(r,!0,!0)||e.isDecoratorTarget(r,!0,!0)||e.isJsxOpeningLikeElementTagName(r,!0,!0)||e.isRightSideOfPropertyAccess(r)||e.isArgumentExpressionOfElementAccess(r)){var n=r.getSourceFile();return{declaration:e.findAncestor(r,i)||n,range:e.createTextRangeFromNode(r,n)}}}}function g(t){return e.getNodeId(t.declaration)}function m(t,r){var n=[],a=function(t,r){function n(n){var i=e.isTaggedTemplateExpression(n)?n.tag:e.isJsxOpeningLikeElement(n)?n.tagName:e.isAccessExpression(n)||e.isClassStaticBlockDeclaration(n)?n:n.expression,a=_(t,i);if(a){var o=e.createTextRangeFromNode(i,n.getSourceFile());if(e.isArray(a))for(var s=0,c=a;s<c.length;s++){var u=c[s];r.push({declaration:u,range:o})}else r.push({declaration:a,range:o})}}return function t(r){if(r&&!(16777216&r.flags))if(i(r)){if(e.isClassLike(r))for(var a=0,o=r.members;a<o.length;a++){var s=o[a];s.name&&e.isComputedPropertyName(s.name)&&t(s.name.expression)}}else{switch(r.kind){case 79:case 268:case 269:case 275:case 261:case 262:return;case 172:return void n(r);case 213:case 231:case 235:return void t(r.expression);case 257:case 166:return t(r.name),void t(r.initializer);case 210:case 211:return n(r),t(r.expression),void e.forEach(r.arguments,t);case 212:return n(r),t(r.tag),void t(r.template);case 283:case 282:return n(r),t(r.tagName),void t(r.attributes);case 167:return n(r),void t(r.expression);case 208:case 209:n(r),e.forEachChild(r,t)}e.isPartOfTypeNode(r)||e.forEachChild(r,t)}}}(t,n);switch(r.kind){case 308:!function(t,r){e.forEach(t.statements,r)}(r,a);break;case 264:!function(t,r){!e.hasSyntacticModifier(t,2)&&t.body&&e.isModuleBlock(t.body)&&e.forEach(t.body.statements,r)}(r,a);break;case 259:case 215:case 216:case 171:case 174:case 175:!function(t,r,n){var i=c(t,r);i&&(e.forEach(i.parameters,n),n(i.body))}(t.getTypeChecker(),r,a);break;case 260:case 228:!function(t,r){e.forEach(t.modifiers,r);var n=e.getClassExtendsHeritageElement(t);n&&r(n.expression);for(var i=0,a=t.members;i<a.length;i++){var o=a[i];e.canHaveModifiers(o)&&e.forEach(o.modifiers,r),e.isPropertyDeclaration(o)?r(o.initializer):e.isConstructorDeclaration(o)&&o.body?(e.forEach(o.parameters,r),r(o.body)):e.isClassStaticBlockDeclaration(o)&&r(o)}}(r,a);break;case 172:!function(e,t){t(e.body)}(r,a);break;default:e.Debug.assertNever(r)}return n}t.resolveCallHierarchyDeclaration=_,t.createCallHierarchyItem=d,t.getIncomingCalls=function(t,r,n){if(e.isSourceFile(r)||e.isModuleDeclaration(r)||e.isClassStaticBlockDeclaration(r))return[];var i=a(r),o=e.filter(e.FindAllReferences.findReferenceOrRenameEntries(t,n,t.getSourceFiles(),i,0,{use:1},f),p);return o?e.group(o,g,(function(r){return function(t,r){return n=d(t,r[0].declaration),i=e.map(r,(function(t){return e.createTextSpanFromRange(t.range)})),{from:n,fromSpans:i};var n,i}(t,r)})):[]},t.getOutgoingCalls=function(t,r){return 16777216&r.flags||e.isMethodSignature(r)?[]:e.group(m(t,r),g,(function(r){return function(t,r){return n=d(t,r[0].declaration),i=e.map(r,(function(t){return e.createTextSpanFromRange(t.range)})),{to:n,fromSpans:i};var n,i}(t,r)}))}}(e.CallHierarchy||(e.CallHierarchy={}))}(_||(_={})),function(e){function t(t,n,i,a){var o=i(t);return function(t){var s=a&&a.tryGetSourcePosition({fileName:t,pos:0}),c=function(t){if(i(t)===o)return n;var r=e.tryRemoveDirectoryPrefix(t,o,i);return void 0===r?void 0:n+"/"+r}(s?s.fileName:t);return s?void 0===c?void 0:function(t,n,i,a){var o=e.getRelativePathFromFile(t,n,a);return r(e.getDirectoryPath(i),o)}(s.fileName,c,t,i):c}}function r(t,r){return e.ensurePathIsNonModuleName(function(t,r){return e.normalizePath(e.combinePaths(t,r))}(t,r))}function n(t,r,n,i){if(r){if(r.resolvedModule){var a=c(r.resolvedModule.resolvedFileName);if(a)return a}var o=e.forEach(r.failedLookupLocations,(function(t){var r=n(t);return r&&e.find(i,(function(e){return e.fileName===r}))?s(t):void 0}))||e.pathIsRelative(t.text)&&e.forEach(r.failedLookupLocations,s);return o||r.resolvedModule&&{newFileName:r.resolvedModule.resolvedFileName,updated:!1}}function s(t){return e.endsWith(t,"/package.json")?void 0:c(t)}function c(e){var t=n(e);return t&&{newFileName:t,updated:!0}}}function i(t,r){return e.createRange(t.getStart(r)+1,t.end-1)}function a(t,r){if(e.isObjectLiteralExpression(t))for(var n=0,i=t.properties;n<i.length;n++){var a=i[n];e.isPropertyAssignment(a)&&e.isStringLiteral(a.name)&&r(a,a.name.text)}}e.getEditsForFileRename=function(o,s,c,u,l,_,d){var p=e.hostUsesCaseSensitiveFileNames(u),f=e.createGetCanonicalFileName(p),g=t(s,c,f,d),m=t(c,s,f,d);return e.textChanges.ChangeTracker.with({host:u,formatContext:l,preferences:_},(function(t){!function(t,n,o,s,c,u,l){var _=t.getCompilerOptions().configFile;if(!_)return;var d=e.getDirectoryPath(_.fileName),p=e.getTsConfigObjectLiteralExpression(_);if(!p)return;function f(t){for(var r=!1,n=0,i=e.isArrayLiteralExpression(t.initializer)?t.initializer.elements:[t.initializer];n<i.length;n++){r=g(i[n])||r}return r}function g(t){if(!e.isStringLiteral(t))return!1;var a=r(d,t.text),s=o(a);return void 0!==s&&(n.replaceRangeWithText(_,i(t,_),m(s)),!0)}function m(t){return e.getRelativePathFromDirectory(d,t,!l)}a(p,(function(t,r){switch(r){case"files":case"include":case"exclude":if(f(t)||"include"!==r||!e.isArrayLiteralExpression(t.initializer))return;var i=e.mapDefined(t.initializer.elements,(function(t){return e.isStringLiteral(t)?t.text:void 0}));if(0===i.length)return;var o=e.getFileMatcherPatterns(d,[],i,l,u);return void(e.getRegexFromPattern(e.Debug.checkDefined(o.includeFilePattern),l).test(s)&&!e.getRegexFromPattern(e.Debug.checkDefined(o.includeFilePattern),l).test(c)&&n.insertNodeAfter(_,e.last(t.initializer.elements),e.factory.createStringLiteral(m(c))));case"compilerOptions":return void a(t.initializer,(function(t,r){var n=e.getOptionFromName(r);n&&(n.isFilePath||"list"===n.type&&n.element.isFilePath)?f(t):"paths"===r&&a(t.initializer,(function(t){if(e.isArrayLiteralExpression(t.initializer))for(var r=0,n=t.initializer.elements;r<n.length;r++){g(n[r])}}))}))}}))}(o,t,g,s,c,u.getCurrentDirectory(),p),function(t,a,o,s,c,u){for(var l=t.getSourceFiles(),_=function(_){var d=o(_.fileName),p=null!=d?d:_.fileName,f=e.getDirectoryPath(p),g=s(_.fileName),m=g||_.fileName,y=e.getDirectoryPath(m),v=void 0!==d||void 0!==g;!function(t,r,n,a){for(var o=0,s=t.referencedFiles||e.emptyArray;o<s.length;o++){var c=s[o];void 0!==(_=n(c.fileName))&&_!==t.text.slice(c.pos,c.end)&&r.replaceRangeWithText(t,c,_)}for(var u=0,l=t.imports;u<l.length;u++){var _,d=l[u];void 0!==(_=a(d))&&_!==d.text&&r.replaceRangeWithText(t,i(d,t),_)}}(_,a,(function(t){if(e.pathIsRelative(t)){var n=r(y,t),i=o(n);return void 0===i?void 0:e.ensurePathIsNonModuleName(e.getRelativePathFromDirectory(f,i,u))}}),(function(r){var i=t.getTypeChecker().getSymbolAtLocation(r);if(!(null==i?void 0:i.declarations)||!i.declarations.some((function(t){return e.isAmbientModule(t)}))){var a=void 0!==g?n(r,e.resolveModuleName(r.text,m,t.getCompilerOptions(),c),o,l):function(t,r,i,a,o,s){if(t){var c=e.find(t.declarations,e.isSourceFile).fileName,u=s(c);return void 0===u?{newFileName:c,updated:!1}:{newFileName:u,updated:!0}}var l=e.getModeForUsageLocation(i,r);return n(r,o.resolveModuleNames?o.getResolvedModuleWithFailedLookupLocationsFromCache&&o.getResolvedModuleWithFailedLookupLocationsFromCache(r.text,i.fileName,l):a.getResolvedModuleWithFailedLookupLocationsFromCache(r.text,i.fileName,l),s,a.getSourceFiles())}(i,r,_,t,c,o);return void 0!==a&&(a.updated||v&&e.pathIsRelative(r.text))?e.moduleSpecifiers.updateModuleSpecifier(t.getCompilerOptions(),_,u(p),a.newFileName,e.createModuleSpecifierResolutionHost(t,c),r.text):void 0}}))},d=0,p=l;d<p.length;d++){_(p[d])}}(o,t,g,m,u,f)}))},e.getPathUpdater=t}(_||(_={})),function(e){!function(t){function r(t,r,o,s,d){var f,g,m,y,v,h=i(r,o,t),b=h&&[(m=h.reference.fileName,y=h.fileName,v=h.unverified,{fileName:y,textSpan:e.createTextSpanFromBounds(0,0),kind:"script",name:m,containerName:void 0,containerKind:void 0,unverified:v})]||e.emptyArray;if(null==h?void 0:h.file)return b;var x=e.getTouchingPropertyName(r,o);if(x!==r){var D=x.parent,S=t.getTypeChecker();if(161===x.kind||e.isIdentifier(x)&&e.isJSDocOverrideTag(D)&&D.tagName===x)return function(t,r){var n=e.findAncestor(r,e.isClassElement);if(!n||!n.name)return;var i=e.findAncestor(n,e.isClassLike);if(!i)return;var a=e.getEffectiveBaseTypeNode(i);if(!a)return;var o=e.skipParentheses(a.expression),s=e.isClassExpression(o)?o.symbol:t.getSymbolAtLocation(o);if(!s)return;var c=e.unescapeLeadingUnderscores(e.getTextOfPropertyName(n.name)),l=e.hasStaticModifier(n)?t.getPropertyOfType(t.getTypeOfSymbol(s),c):t.getPropertyOfType(t.getDeclaredTypeOfSymbol(s),c);if(!l)return;return u(t,l,r)}(S,x)||e.emptyArray;if(e.isJumpStatementTarget(x)){var T=e.getTargetLabel(x.parent,x.text);return T?[_(S,T,"label",x.text,void 0)]:void 0}if(105===x.kind){var C=e.findAncestor(x.parent,(function(t){return e.isClassStaticBlockDeclaration(t)?"quit":e.isFunctionLikeDeclaration(t)}));return C?[p(S,C)]:void 0}if(e.isStaticModifier(x)&&e.isClassStaticBlockDeclaration(x.parent)){var E=x.parent.parent,k=c(E,S,d),N=k.symbol,A=k.failedAliasResolution,F=e.filter(E.members,e.isClassStaticBlockDeclaration),P=N?S.symbolToString(N,E):"",w=x.getSourceFile();return e.map(F,(function(t){var r=e.moveRangePastModifiers(t).pos;return r=e.skipTrivia(w.text,r),_(S,t,"constructor","static {}",P,!1,A,{start:r,length:"static".length})}))}var I=c(x,S,d),O=I.symbol,M=I.failedAliasResolution,L=x;if(s&&M){var R=e.forEach(a([x],(null==O?void 0:O.declarations)||e.emptyArray,!0),(function(t){return e.findAncestor(t,e.isAnyImportOrBareOrAccessedRequire)})),B=R&&e.tryGetModuleSpecifierFromDeclaration(R);B&&(O=(f=c(B,S,d)).symbol,M=f.failedAliasResolution,L=B)}if(!O&&e.isModuleSpecifierLike(L)){var j=null===(g=r.resolvedModules)||void 0===g?void 0:g.get(L.text,e.getModeForUsageLocation(r,L));if(j)return[{name:L.text,fileName:j.resolvedFileName,containerName:void 0,containerKind:void 0,kind:"script",textSpan:e.createTextSpan(0,0),failedAliasResolution:M,isAmbient:e.isDeclarationFileName(j.resolvedFileName),unverified:L!==x}]}if(!O)return e.concatenate(b,function(t,r){return e.mapDefined(r.getIndexInfosAtLocation(t),(function(e){return e.declaration&&p(r,e.declaration)}))}(x,S));if(!s||!e.every(O.declarations,(function(e){return e.getSourceFile().fileName===r.fileName}))){var J=function(t,r){var n=function(t){var r=e.findAncestor(t,(function(t){return!e.isRightSideOfPropertyAccess(t)})),n=null==r?void 0:r.parent;return n&&e.isCallLikeExpression(n)&&e.getInvokedExpression(n)===r?n:void 0}(r),i=n&&t.getResolvedSignature(n);return e.tryCast(i&&i.declaration,(function(t){return e.isFunctionLike(t)&&!e.isFunctionTypeNode(t)}))}(S,x);if(J&&(!e.isJsxOpeningLikeElement(x.parent)||!function(e){switch(e.kind){case 173:case 182:case 177:return!0;default:return!1}}(J))){var z=p(S,J,M);if(S.getRootSymbols(O).some((function(t){return function(t,r){return t===r.symbol||t===r.symbol.parent||e.isAssignmentExpression(r.parent)||!e.isCallLikeExpression(r.parent)&&t===r.parent.symbol}(t,J)})))return[z];var U=u(S,O,x,M,J)||e.emptyArray;return 106===x.kind?a([z],U,!0):a(a([],U,!0),[z],!1)}if(300===x.parent.kind){var K=S.getShorthandAssignmentValueSymbol(O.valueDeclaration),V=(null==K?void 0:K.declarations)?K.declarations.map((function(e){return l(e,S,K,x,!1,M)})):e.emptyArray;return e.concatenate(V,n(S,x)||e.emptyArray)}if(e.isPropertyName(x)&&e.isBindingElement(D)&&e.isObjectBindingPattern(D.parent)&&x===(D.propertyName||D.name)){var q=e.getNameFromPropertyName(x),W=S.getTypeAtLocation(D.parent);return void 0===q?e.emptyArray:e.flatMap(W.isUnion()?W.types:[W],(function(e){var t=e.getProperty(q);return t&&u(S,t,x)}))}return e.concatenate(b,n(S,x)||u(S,O,x,M))}}}function n(t,r){var n=e.getContainingObjectLiteralElement(r);if(n){var i=n&&t.getContextualType(n.parent);if(i)return e.flatMap(e.getPropertySymbolsFromContextualType(n,t,i,!1),(function(e){return u(t,e,r)}))}}function i(t,r,n){var i,a,o=f(t.referencedFiles,r);if(o)return(u=n.getSourceFileFromReference(t,o))&&{reference:o,fileName:u.fileName,file:u,unverified:!1};var s=f(t.typeReferenceDirectives,r);if(s){var c=n.getResolvedTypeReferenceDirectives().get(s.fileName,s.resolutionMode||t.impliedNodeFormat);return(u=c&&n.getSourceFile(c.resolvedFileName))&&{reference:s,fileName:u.fileName,file:u,unverified:!1}}var u,l=f(t.libReferenceDirectives,r);if(l)return(u=n.getLibFileFromReference(l))&&{reference:l,fileName:u.fileName,file:u,unverified:!1};if(null===(i=t.resolvedModules)||void 0===i?void 0:i.size()){var _=e.getTouchingToken(t,r);if(e.isModuleSpecifierLike(_)&&e.isExternalModuleNameRelative(_.text)&&t.resolvedModules.has(_.text,e.getModeForUsageLocation(t,_))){var d=null===(a=t.resolvedModules.get(_.text,e.getModeForUsageLocation(t,_)))||void 0===a?void 0:a.resolvedFileName,p=d||e.resolvePath(e.getDirectoryPath(t.fileName),_.text);return{file:n.getSourceFile(p),fileName:p,reference:{pos:_.getStart(),end:_.getEnd(),fileName:_.text},unverified:!d}}}}function s(t,r,n,i){return e.flatMap(!t.isUnion()||32&t.flags?[t]:t.types,(function(e){return e.symbol&&u(r,e.symbol,n,i)}))}function c(e,t,r){var n=t.getSymbolAtLocation(e),i=!1;if((null==n?void 0:n.declarations)&&2097152&n.flags&&!r&&function(e,t){if(79!==e.kind)return!1;if(e.parent===t)return!0;if(271===t.kind)return!1;return!0}(e,n.declarations[0])){var a=t.getAliasedSymbol(n);if(a.declarations)return{symbol:a};i=!0}return{symbol:n,failedAliasResolution:i}}function u(t,r,n,i,a){var o=e.filter(r.declarations,(function(e){return e!==a})),s=e.filter(o,(function(t){return!function(t){if(!e.isAssignmentDeclaration(t))return!1;var r=e.findAncestor(t,(function(t){return!!e.isAssignmentExpression(t)||!e.isAssignmentDeclaration(t)&&"quit"}));return!!r&&5===e.getAssignmentDeclarationKind(r)}(t)})),c=e.some(s)?s:o;return function(){if(32&r.flags&&!(19&r.flags)&&(e.isNewExpressionTarget(n)||135===n.kind)){return u((e.find(o,e.isClassLike)||e.Debug.fail("Expected declaration to have at least one class-like declaration")).members,!0)}}()||(e.isCallOrNewExpressionTarget(n)||e.isNameOfFunctionDeclaration(n)?u(o,!1):void 0)||e.map(c,(function(e){return l(e,t,r,n,!1,i)}));function u(a,o){if(a){var s=a.filter(o?e.isConstructorDeclaration:e.isFunctionLike),c=s.filter((function(e){return!!e.body}));return s.length?0!==c.length?c.map((function(e){return l(e,t,r,n)})):[l(e.last(s),t,r,n,!1,i)]:void 0}}}function l(t,r,n,i,a,o){var s=r.symbolToString(n),c=e.SymbolDisplay.getSymbolKind(r,n,i),u=n.parent?r.symbolToString(n.parent,i):"";return _(r,t,c,s,u,a,o)}function _(t,r,n,i,a,s,c,u){var l=r.getSourceFile();if(!u){var _=e.getNameOfDeclaration(r)||r;u=e.createTextSpanFromNode(_,l)}return o(o({fileName:l.fileName,textSpan:u,kind:n,name:i,containerKind:void 0,containerName:a},e.FindAllReferences.toContextSpan(u,l,e.FindAllReferences.getContextNode(r))),{isLocal:!d(t,r),isAmbient:!!(16777216&r.flags),unverified:s,failedAliasResolution:c})}function d(t,r){if(t.isDeclarationVisible(r))return!0;if(!r.parent)return!1;if(e.hasInitializer(r.parent)&&r.parent.initializer===r)return d(t,r.parent);switch(r.kind){case 169:case 174:case 175:case 171:if(e.hasEffectiveModifier(r,8))return!1;case 173:case 299:case 300:case 207:case 228:case 216:case 215:return d(t,r.parent);default:return!1}}function p(e,t,r){return l(t,e,t.symbol,t,!1,r)}function f(t,r){return e.find(t,(function(t){return e.textRangeContainsPositionInclusive(t,r)}))}t.getDefinitionAtPosition=r,t.getReferenceAtPosition=i,t.getTypeDefinitionAtPosition=function(t,r,n){var i=e.getTouchingPropertyName(r,n);if(i!==r){if(e.isImportMeta(i.parent)&&i.parent.name===i)return s(t.getTypeAtLocation(i.parent),t,i.parent,!1);var a=c(i,t,!1),o=a.symbol,l=a.failedAliasResolution;if(o){var _=t.getTypeOfSymbolAtLocation(o,i),d=function(t,r,n){if(r.symbol===t||t.valueDeclaration&&r.symbol&&e.isVariableDeclaration(t.valueDeclaration)&&t.valueDeclaration.initializer===r.symbol.valueDeclaration){var i=r.getCallSignatures();if(1===i.length)return n.getReturnTypeOfSignature(e.first(i))}return}(o,_,t),p=d&&s(d,t,i,l),f=p&&0!==p.length?p:s(_,t,i,l);return f.length?f:!(111551&o.flags)&&788968&o.flags?u(t,e.skipAlias(o,t),i,l):void 0}}},t.getDefinitionAndBoundSpan=function(t,n,i){var a=r(t,n,i);if(a&&0!==a.length){var o=f(n.referencedFiles,i)||f(n.typeReferenceDirectives,i)||f(n.libReferenceDirectives,i);if(o)return{definitions:a,textSpan:e.createTextSpanFromRange(o)};var s=e.getTouchingPropertyName(n,i);return{definitions:a,textSpan:e.createTextSpan(s.getStart(),s.getWidth())}}},t.createDefinitionInfo=l,t.findReferenceInPosition=f}(e.GoToDefinition||(e.GoToDefinition={}))}(_||(_={})),function(e){!function(t){var r,n,i=["abstract","access","alias","argument","async","augments","author","borrows","callback","class","classdesc","constant","constructor","constructs","copyright","default","deprecated","description","emits","enum","event","example","exports","extends","external","field","file","fileoverview","fires","function","generator","global","hideconstructor","host","ignore","implements","inheritdoc","inner","instance","interface","kind","lends","license","link","listens","member","memberof","method","mixes","module","name","namespace","override","package","param","private","property","protected","public","readonly","requires","returns","see","since","static","summary","template","this","throws","todo","tutorial","type","typedef","var","variation","version","virtual","yields"];function o(t,r){return e.arraysEqual(t,r,(function(e,t){return e.kind===t.kind&&e.text===t.text}))}function s(t,r){return"string"==typeof t?[e.textPart(t)]:e.flatMap(t,(function(t){return 324===t.kind?[e.textPart(t.text)]:e.buildLinkParts(t,r)}))}function c(t,r){var n=t.comment,i=t.kind,o=function(t){switch(t){case 343:return e.parameterNamePart;case 350:return e.propertyNamePart;case 347:return e.typeParameterNamePart;case 348:case 341:return e.typeAliasNamePart;default:return e.textPart}}(i);switch(i){case 332:case 331:return d(t.class);case 347:var c=t,u=[];if(c.constraint&&u.push(e.textPart(c.constraint.getText())),e.length(c.typeParameters)){e.length(u)&&u.push(e.spacePart());var l=c.typeParameters[c.typeParameters.length-1];e.forEach(c.typeParameters,(function(t){u.push(o(t.getText())),l!==t&&u.push.apply(u,[e.punctuationPart(27),e.spacePart()])}))}return n&&u.push.apply(u,a([e.spacePart()],s(n,r),!0)),u;case 346:return d(t.typeExpression);case 348:case 341:case 350:case 343:case 349:var _=t.name;return _?d(_):void 0===n?void 0:s(n,r);default:return void 0===n?void 0:s(n,r)}function d(t){return i=t.getText(),n?i.match(/^https?$/)?a([e.textPart(i)],s(n,r),!0):a([o(i),e.spacePart()],s(n,r),!0):[e.textPart(i)];var i}}function u(t){return{name:t,kind:"",kindModifiers:"",displayParts:[e.textPart(t)],documentation:e.emptyArray,tags:void 0,codeActions:void 0}}function l(t,r){switch(t.kind){case 259:case 215:case 171:case 173:case 170:case 216:var n=t;return{commentOwner:t,parameters:n.parameters,hasReturn:_(n,r)};case 299:return l(t.initializer,r);case 260:case 261:case 263:case 302:case 262:return{commentOwner:t};case 168:var i=t;return i.type&&e.isFunctionTypeNode(i.type)?{commentOwner:t,parameters:i.type.parameters,hasReturn:_(i.type,r)}:{commentOwner:t};case 240:var a=t.declarationList.declarations,o=1===a.length&&a[0].initializer?function(t){for(;214===t.kind;)t=t.expression;switch(t.kind){case 215:case 216:return t;case 228:return e.find(t.members,e.isConstructorDeclaration)}}(a[0].initializer):void 0;return o?{commentOwner:t,parameters:o.parameters,hasReturn:_(o,r)}:{commentOwner:t};case 308:return"quit";case 264:return 264===t.parent.kind?void 0:{commentOwner:t};case 241:return l(t.expression,r);case 223:var s=t;return 0===e.getAssignmentDeclarationKind(s)?"quit":e.isFunctionLike(s.right)?{commentOwner:t,parameters:s.right.parameters,hasReturn:_(s.right,r)}:{commentOwner:t};case 169:var c=t.initializer;if(c&&(e.isFunctionExpression(c)||e.isArrowFunction(c)))return{commentOwner:t,parameters:c.parameters,hasReturn:_(c,r)}}}function _(t,r){return!!(null==r?void 0:r.generateReturnInDocTemplate)&&(e.isFunctionTypeNode(t)||e.isArrowFunction(t)&&e.isExpression(t.body)||e.isFunctionLikeDeclaration(t)&&t.body&&e.isBlock(t.body)&&!!e.forEachReturnStatement(t.body,(function(e){return e})))}t.getJsDocCommentsFromDeclarations=function(t,r){var n=[];return e.forEachUnique(t,(function(t){for(var i=0,a=function(t){switch(t.kind){case 343:case 350:return[t];case 341:case 348:return[t,t.parent];default:return e.getJSDocCommentsAndTags(t)}}(t);i<a.length;i++){var c=a[i],u=e.isJSDoc(c)&&c.tags&&e.find(c.tags,(function(e){return 330===e.kind&&("inheritDoc"===e.tagName.escapedText||"inheritdoc"===e.tagName.escapedText)}));if(!(void 0===c.comment&&!u||e.isJSDoc(c)&&348!==t.kind&&341!==t.kind&&c.tags&&c.tags.some((function(e){return 348===e.kind||341===e.kind}))&&!c.tags.some((function(e){return 343===e.kind||344===e.kind})))){var l=c.comment?s(c.comment,r):[];u&&u.comment&&(l=l.concat(s(u.comment,r))),e.contains(n,l,o)||n.push(l)}}})),e.flatten(e.intersperse(n,[e.lineBreakPart()]))},t.getJsDocTagsFromDeclarations=function(t,r){var n=[];return e.forEachUnique(t,(function(t){var i=e.getJSDocTags(t);if(!i.some((function(e){return 348===e.kind||341===e.kind}))||i.some((function(e){return 343===e.kind||344===e.kind})))for(var a=0,o=i;a<o.length;a++){var s=o[a];n.push({name:s.tagName.text,text:c(s,r)})}})),n},t.getJSDocTagNameCompletions=function(){return r||(r=e.map(i,(function(t){return{name:t,kind:"keyword",kindModifiers:"",sortText:e.Completions.SortText.LocationPriority}})))},t.getJSDocTagNameCompletionDetails=u,t.getJSDocTagCompletions=function(){return n||(n=e.map(i,(function(t){return{name:"@".concat(t),kind:"keyword",kindModifiers:"",sortText:e.Completions.SortText.LocationPriority}})))},t.getJSDocTagCompletionDetails=u,t.getJSDocParameterNameCompletions=function(t){if(!e.isIdentifier(t.name))return e.emptyArray;var r=t.name.text,n=t.parent,i=n.parent;return e.isFunctionLike(i)?e.mapDefined(i.parameters,(function(i){if(e.isIdentifier(i.name)){var a=i.name.text;if(!n.tags.some((function(r){return r!==t&&e.isJSDocParameterTag(r)&&e.isIdentifier(r.name)&&r.name.escapedText===a}))&&(void 0===r||e.startsWith(a,r)))return{name:a,kind:"parameter",kindModifiers:"",sortText:e.Completions.SortText.LocationPriority}}})):[]},t.getJSDocParameterNameCompletionDetails=function(t){return{name:t,kind:"parameter",kindModifiers:"",displayParts:[e.textPart(t)],documentation:e.emptyArray,tags:void 0,codeActions:void 0}},t.getDocCommentTemplateAtPosition=function(t,r,n,i){var a=e.getTokenAtPosition(r,n),o=e.findAncestor(a,e.isJSDoc);if(!o||void 0===o.comment&&!e.length(o.tags)){var s=a.getStart(r);if(o||!(s<n)){var c=function(t,r){return e.forEachAncestor(t,(function(e){return l(e,r)}))}(a,i);if(c){var u=c.commentOwner,_=c.parameters,d=c.hasReturn,p=e.hasJSDocNodes(u)&&u.jsDoc?u.jsDoc:void 0,f=e.lastOrUndefined(p);if(!(u.getStart(r)<n||f&&o&&f!==o)){var g=function(t,r){for(var n=t.text,i=e.getLineStartPositionForPosition(r,t),a=i;a<=r&&e.isWhiteSpaceSingleLine(n.charCodeAt(a));a++);return n.slice(i,a)}(r,n),m=e.hasJSFileExtension(r.fileName),y=(_?function(e,t,r,n){return e.map((function(e,i){var a=e.name,o=e.dotDotDotToken,s=79===a.kind?a.text:"param"+i,c=t?o?"{...any} ":"{any} ":"";return"".concat(r," * @param ").concat(c).concat(s).concat(n)})).join("")}(_||[],m,g,t):"")+(d?function(e,t){return"".concat(e," * @returns").concat(t)}(g,t):""),v=(p||[]).some((function(e){return!!e.tags}));if(y&&!v){var h="/**"+t+g+" * ";return{newText:h+t+y+g+" */"+(s===n?t+g:""),caretOffset:h.length}}return{newText:"/** */",caretOffset:3}}}}}}}(e.JsDoc||(e.JsDoc={}))}(_||(_={})),function(e){!function(t){function r(e,t){switch(e.kind){case 270:case 273:case 268:var r=t.getSymbolAtLocation(e.name),n=t.getAliasedSymbol(r);return r.escapedName!==n.escapedName;default:return!0}}function n(t,r){var n=e.getNameOfDeclaration(t);return!!n&&(a(n,r)||164===n.kind&&i(n.expression,r))}function i(t,r){return a(t,r)||e.isPropertyAccessExpression(t)&&(r.push(t.name.text),!0)&&i(t.expression,r)}function a(t,r){return e.isPropertyNameLiteral(t)&&(r.push(e.getTextOfIdentifierOrLiteral(t)),!0)}function o(t){var r=[],a=e.getNameOfDeclaration(t);if(a&&164===a.kind&&!i(a.expression,r))return e.emptyArray;r.shift();for(var o=e.getContainerNode(t);o;){if(!n(o,r))return e.emptyArray;o=e.getContainerNode(o)}return r.reverse()}function s(t,r){return e.compareValues(t.matchKind,r.matchKind)||e.compareStringsCaseSensitiveUI(t.name,r.name)}function c(t){var r=t.declaration,n=e.getContainerNode(r),i=n&&e.getNameOfDeclaration(n);return{name:t.name,kind:e.getNodeKind(r),kindModifiers:e.getNodeModifiers(r),matchKind:e.PatternMatchKind[t.matchKind],isCaseSensitive:t.isCaseSensitive,fileName:t.fileName,textSpan:e.createTextSpanFromNode(r),containerName:i?i.text:"",containerKind:i?e.getNodeKind(n):""}}t.getNavigateToItems=function(t,n,i,a,u,l){var _=e.createPatternMatcher(a);if(!_)return e.emptyArray;for(var d=[],p=function(e){if(i.throwIfCancellationRequested(),l&&e.isDeclarationFile)return"continue";e.getNamedDeclarations().forEach((function(t,i){!function(e,t,n,i,a,s){var c=e.getMatchForLastSegmentOfPattern(t);if(!c)return;for(var u=0,l=n;u<l.length;u++){var _=l[u];if(r(_,i))if(e.patternContainsDots){var d=e.getFullMatch(o(_),t);d&&s.push({name:t,fileName:a,matchKind:d.kind,isCaseSensitive:d.isCaseSensitive,declaration:_})}else s.push({name:t,fileName:a,matchKind:c.kind,isCaseSensitive:c.isCaseSensitive,declaration:_})}}(_,i,t,n,e.fileName,d)}))},f=0,g=t;f<g.length;f++){p(g[f])}return d.sort(s),(void 0===u?d:d.slice(0,u)).map(c)}}(e.NavigateTo||(e.NavigateTo={}))}(_||(_={})),function(e){!function(t){var r,n,i,a,s,c=/\s+/g,u=[],l=[],_=[];function d(){i=void 0,n=void 0,u=[],a=void 0,_=[]}function p(e){return Q(e.getText(i))}function f(e){return e.node.kind}function g(e,t){e.children?e.children.push(t):e.children=[t]}function m(t){e.Debug.assert(!u.length);var r={node:t,name:void 0,additionalNodes:void 0,parent:void 0,children:void 0,indent:0};a=r;for(var n=0,i=t.statements;n<i.length;n++){k(i[n])}return S(),e.Debug.assert(!a&&!u.length),r}function y(e,t){g(a,v(e,t))}function v(t,r){return{node:t,name:r||(e.isDeclaration(t)||e.isExpression(t)?e.getNameOfDeclaration(t):void 0),additionalNodes:void 0,parent:a,children:void 0,indent:a.indent+1}}function h(t){s||(s=new e.Map),s.set(t,!0)}function b(e){for(var t=0;t<e;t++)S()}function x(t,r){for(var n=[];!e.isPropertyNameLiteral(r);){var i=e.getNameOrArgument(r),a=e.getElementOrPropertyAccessName(r);r=r.expression,"prototype"===a||e.isPrivateIdentifier(i)||n.push(i)}n.push(r);for(var o=n.length-1;o>0;o--){D(t,i=n[o])}return[n.length-1,n[0]]}function D(e,t){var r=v(e,t);g(a,r),u.push(a),l.push(s),s=void 0,a=r}function S(){a.children&&(N(a.children,a),O(a.children)),a=u.pop(),s=l.pop()}function T(e,t,r){D(e,r),k(t),S()}function C(t){t.initializer&&function(e){switch(e.kind){case 216:case 215:case 228:return!0;default:return!1}}(t.initializer)?(D(t),e.forEachChild(t.initializer,k),S()):T(t,t.initializer)}function E(t){return!e.hasDynamicName(t)||223!==t.kind&&e.isPropertyAccessExpression(t.name.expression)&&e.isIdentifier(t.name.expression.expression)&&"Symbol"===e.idText(t.name.expression.expression)}function k(t){var r;if(n.throwIfCancellationRequested(),t&&!e.isToken(t))switch(t.kind){case 173:var i=t;T(i,i.body);for(var a=0,o=i.parameters;a<o.length;a++){var c=o[a];e.isParameterPropertyDeclaration(c,i)&&y(c)}break;case 171:case 174:case 175:case 170:E(t)&&T(t,t.body);break;case 169:E(t)&&C(t);break;case 168:E(t)&&y(t);break;case 270:var u=t;u.name&&y(u.name);var l=u.namedBindings;if(l)if(271===l.kind)y(l);else for(var _=0,d=l.elements;_<d.length;_++){y(d[_])}break;case 300:T(t,t.name);break;case 301:var p=t.expression;e.isIdentifier(p)?y(t,p):y(t);break;case 205:case 299:case 257:var f=t;e.isBindingPattern(f.name)?k(f.name):C(f);break;case 259:var g=t.name;g&&e.isIdentifier(g)&&h(g.text),T(t,t.body);break;case 216:case 215:T(t,t.body);break;case 263:D(t);for(var m=0,v=t.members;m<v.length;m++){V(F=v[m])||y(F)}S();break;case 260:case 228:case 261:D(t);for(var N=0,A=t.members;N<A.length;N++){var F;k(F=A[N])}S();break;case 264:T(t,K(t).body);break;case 274:var P=t.expression;(f=e.isObjectLiteralExpression(P)||e.isCallExpression(P)?P:e.isArrowFunction(P)||e.isFunctionExpression(P)?P.body:void 0)?(D(t),k(f),S()):y(t);break;case 278:case 268:case 178:case 176:case 177:case 262:y(t);break;case 210:case 223:var w=e.getAssignmentDeclarationKind(t);switch(w){case 1:case 2:return void T(t,t.right);case 6:case 3:var I=(J=t).left,O=3===w?I.expression:I,M=0,L=void 0;return e.isIdentifier(O.expression)?(h(O.expression.text),L=O.expression):(M=(r=x(J,O.expression))[0],L=r[1]),6===w?e.isObjectLiteralExpression(J.right)&&J.right.properties.length>0&&(D(J,L),e.forEachChild(J.right,k),S()):e.isFunctionExpression(J.right)||e.isArrowFunction(J.right)?T(t,J.right,L):(D(J,L),T(t,J.right,I.name),S()),void b(M);case 7:case 9:var R=t,B=(L=7===w?R.arguments[0]:R.arguments[0].expression,R.arguments[1]),j=x(t,L);M=j[0];return D(t,j[1]),D(t,e.setTextRange(e.factory.createIdentifier(B.text),B)),k(t.arguments[2]),S(),S(),void b(M);case 5:var J,z=(I=(J=t).left).expression;if(e.isIdentifier(z)&&"prototype"!==e.getElementOrPropertyAccessName(I)&&s&&s.has(z.text))return void(e.isFunctionExpression(J.right)||e.isArrowFunction(J.right)?T(t,J.right,z):e.isBindableStaticAccessExpression(I)&&(D(J,z),T(J.left,J.right,e.getNameOrArgument(I)),S()));break;case 4:case 0:case 8:break;default:e.Debug.assertNever(w)}default:e.hasJSDocNodes(t)&&e.forEach(t.jsDoc,(function(t){e.forEach(t.tags,(function(t){e.isJSDocTypeAlias(t)&&y(t)}))})),e.forEachChild(t,k)}}function N(t,r){var n=new e.Map;e.filterMutate(t,(function(t,i){var a=t.name||e.getNameOfDeclaration(t.node),o=a&&p(a);if(!o)return!0;var s=n.get(o);if(!s)return n.set(o,t),!0;if(s instanceof Array){for(var c=0,u=s;c<u.length;c++){var l;if(F(l=u[c],t,i,r))return!1}return s.push(t),!0}return!F(l=s,t,i,r)&&(n.set(o,[l,t]),!0)}))}t.getNavigationBarItems=function(t,r){n=r,i=t;try{return e.map(function(e){var t=[];function r(e){if(n(e)&&(t.push(e),e.children))for(var i=0,a=e.children;i<a.length;i++){r(a[i])}}return r(e),t;function n(e){if(e.children)return!0;switch(f(e)){case 260:case 228:case 263:case 261:case 264:case 308:case 262:case 348:case 341:return!0;case 216:case 259:case 215:return t(e);default:return!1}function t(e){if(!e.node.body)return!1;switch(f(e.parent)){case 265:case 308:case 171:case 173:return!0;default:return!1}}}}(m(t)),j)}finally{d()}},t.getNavigationTree=function(e,t){n=t,i=e;try{return B(m(e))}finally{d()}};var A=((r={})[5]=!0,r[3]=!0,r[7]=!0,r[9]=!0,r[0]=!1,r[1]=!1,r[2]=!1,r[8]=!1,r[6]=!0,r[4]=!1,r);function F(t,r,n,i){return!!function(t,r,n,i){function a(t){return e.isFunctionExpression(t)||e.isFunctionDeclaration(t)||e.isVariableDeclaration(t)}var s=e.isBinaryExpression(r.node)||e.isCallExpression(r.node)?e.getAssignmentDeclarationKind(r.node):0,c=e.isBinaryExpression(t.node)||e.isCallExpression(t.node)?e.getAssignmentDeclarationKind(t.node):0;if(A[s]&&A[c]||a(t.node)&&A[s]||a(r.node)&&A[c]||e.isClassDeclaration(t.node)&&P(t.node)&&A[s]||e.isClassDeclaration(r.node)&&A[c]||e.isClassDeclaration(t.node)&&P(t.node)&&a(r.node)||e.isClassDeclaration(r.node)&&a(t.node)&&P(t.node)){var u=t.additionalNodes&&e.lastOrUndefined(t.additionalNodes)||t.node;if(!e.isClassDeclaration(t.node)&&!e.isClassDeclaration(r.node)||a(t.node)||a(r.node)){var l=a(t.node)?t.node:a(r.node)?r.node:void 0;if(void 0!==l){var _=v(e.setTextRange(e.factory.createConstructorDeclaration(void 0,[],void 0),l));_.indent=t.indent+1,_.children=t.node===l?t.children:r.children,t.children=t.node===l?e.concatenate([_],r.children||[r]):e.concatenate(t.children||[o({},t)],[_])}else(t.children||r.children)&&(t.children=e.concatenate(t.children||[o({},t)],r.children||[r]),t.children&&(N(t.children,t),O(t.children)));u=t.node=e.setTextRange(e.factory.createClassDeclaration(void 0,t.name||e.factory.createIdentifier("__class__"),void 0,void 0,[]),t.node)}else t.children=e.concatenate(t.children,r.children),t.children&&N(t.children,t);var d=r.node;return i.children[n-1].node.end===u.end?e.setTextRange(u,{pos:u.pos,end:d.end}):(t.additionalNodes||(t.additionalNodes=[]),t.additionalNodes.push(e.setTextRange(e.factory.createClassDeclaration(void 0,t.name||e.factory.createIdentifier("__class__"),void 0,void 0,[]),r.node))),!0}return 0!==s}(t,r,n,i)||!!function(t,r,n){if(t.kind!==r.kind||t.parent!==r.parent&&(!w(t,n)||!w(r,n)))return!1;switch(t.kind){case 169:case 171:case 174:case 175:return e.isStatic(t)===e.isStatic(r);case 264:return I(t,r)&&U(t)===U(r);default:return!0}}(t.node,r.node,i)&&(function(t,r){var n;t.additionalNodes=t.additionalNodes||[],t.additionalNodes.push(r.node),r.additionalNodes&&(n=t.additionalNodes).push.apply(n,r.additionalNodes);t.children=e.concatenate(t.children,r.children),t.children&&(N(t.children,t),O(t.children))}(t,r),!0)}function P(e){return!!(8&e.flags)}function w(t,r){var n=e.isModuleBlock(t.parent)?t.parent.parent:t.parent;return n===r.node||e.contains(r.additionalNodes,n)}function I(e,t){return e.body&&t.body?e.body.kind===t.body.kind&&(264!==e.body.kind||I(e.body,t.body)):e.body===t.body}function O(e){e.sort(M)}function M(t,r){return e.compareStringsCaseSensitiveUI(L(t.node),L(r.node))||e.compareValues(f(t),f(r))}function L(t){if(264===t.kind)return z(t);var r=e.getNameOfDeclaration(t);if(r&&e.isPropertyName(r)){var n=e.getPropertyNameForPropertyNameNode(r);return n&&e.unescapeLeadingUnderscores(n)}switch(t.kind){case 215:case 216:case 228:return H(t);default:return}}function R(t,r){if(264===t.kind)return Q(z(t));if(r){var n=e.isIdentifier(r)?r.text:e.isElementAccessExpression(r)?"[".concat(p(r.argumentExpression),"]"):p(r);if(n.length>0)return Q(n)}switch(t.kind){case 308:var i=t;return e.isExternalModule(i)?'"'.concat(e.escapeString(e.getBaseFileName(e.removeFileExtension(e.normalizePath(i.fileName)))),'"'):"<global>";case 274:return e.isExportAssignment(t)&&t.isExportEquals?"export=":"default";case 216:case 259:case 215:case 260:case 228:return 1024&e.getSyntacticModifierFlags(t)?"default":H(t);case 173:return"constructor";case 177:return"new()";case 176:return"()";case 178:return"[]";default:return"<unknown>"}}function B(t){return{text:R(t.node,t.name),kind:e.getNodeKind(t.node),kindModifiers:W(t.node),spans:J(t),nameSpan:t.name&&q(t.name),childItems:e.map(t.children,B)}}function j(t){return{text:R(t.node,t.name),kind:e.getNodeKind(t.node),kindModifiers:W(t.node),spans:J(t),childItems:e.map(t.children,(function(t){return{text:R(t.node,t.name),kind:e.getNodeKind(t.node),kindModifiers:e.getNodeModifiers(t.node),spans:J(t),childItems:_,indent:0,bolded:!1,grayed:!1}}))||_,indent:t.indent,bolded:!1,grayed:!1}}function J(e){var t=[q(e.node)];if(e.additionalNodes)for(var r=0,n=e.additionalNodes;r<n.length;r++){var i=n[r];t.push(q(i))}return t}function z(t){return e.isAmbientModule(t)?e.getTextOfNode(t.name):U(t)}function U(t){for(var r=[e.getTextOfIdentifierOrLiteral(t.name)];t.body&&264===t.body.kind;)t=t.body,r.push(e.getTextOfIdentifierOrLiteral(t.name));return r.join(".")}function K(t){return t.body&&e.isModuleDeclaration(t.body)?K(t.body):t}function V(e){return!e.name||164===e.name.kind}function q(t){return 308===t.kind?e.createTextSpanFromRange(t):e.createTextSpanFromNode(t,i)}function W(t){return t.parent&&257===t.parent.kind&&(t=t.parent),e.getNodeModifiers(t)}function H(t){var r=t.parent;if(t.name&&e.getFullWidth(t.name)>0)return Q(e.declarationNameToString(t.name));if(e.isVariableDeclaration(r))return Q(e.declarationNameToString(r.name));if(e.isBinaryExpression(r)&&63===r.operatorToken.kind)return p(r.left).replace(c,"");if(e.isPropertyAssignment(r))return p(r.name);if(1024&e.getSyntacticModifierFlags(t))return"default";if(e.isClassLike(t))return"<class>";if(e.isCallExpression(r)){var n=G(r.expression);if(void 0!==n){if((n=Q(n)).length>150)return"".concat(n," callback");var a=Q(e.mapDefined(r.arguments,(function(t){return e.isStringLiteralLike(t)?t.getText(i):void 0})).join(", "));return"".concat(n,"(").concat(a,") callback")}}return"<function>"}function G(t){if(e.isIdentifier(t))return t.text;if(e.isPropertyAccessExpression(t)){var r=G(t.expression),n=t.name.text;return void 0===r?n:"".concat(r,".").concat(n)}}function Q(e){return(e=e.length>150?e.substring(0,150)+"...":e).replace(/\\?(\r?\n|\r|\u2028|\u2029)/g,"")}}(e.NavigationBar||(e.NavigationBar={}))}(_||(_={})),function(e){!function(t){function r(t,r){for(var i=e.createScanner(t.languageVersion,!1,t.languageVariant),a=[],o=0,s=0,c=r;s<c.length;s++){var u=c[s];n(t,u,i)&&o++,a[o]||(a[o]=[]),a[o].push(u)}return a}function n(e,t,r){var n=t.getFullStart(),i=t.getStart();r.setText(e.text,n,i-n);for(var a=0;r.getTokenPos()<i;){if(4===r.scan()&&++a>=2)return!0}return!1}function i(t,r,n){for(var i=n.getTypeChecker(),o=n.getCompilerOptions(),s=i.getJsxNamespace(r),c=i.getJsxFragmentFactory(r),l=!!(2&r.transformFlags),_=[],d=0,p=t;d<p.length;d++){var f=p[d],g=f.importClause,m=f.moduleSpecifier;if(g){var y=g.name,v=g.namedBindings;if(y&&!b(y)&&(y=void 0),v)if(e.isNamespaceImport(v))b(v.name)||(v=void 0);else{var h=v.elements.filter((function(e){return b(e.name)}));h.length<v.elements.length&&(v=h.length?e.factory.updateNamedImports(v,h):void 0)}y||v?_.push(u(f,y,v)):a(r,m)&&(r.isDeclarationFile?_.push(e.factory.createImportDeclaration(f.modifiers,void 0,m,void 0)):_.push(f))}else _.push(f)}return _;function b(t){return l&&(t.text===s||c&&t.text===c)&&e.jsxModeNeedsExplicitImport(o.jsx)||e.FindAllReferences.Core.isSymbolReferencedInFile(t,i,r)}}function a(t,r){var n=e.isStringLiteral(r)&&r.text;return e.isString(n)&&e.some(t.moduleAugmentations,(function(t){return e.isStringLiteral(t)&&t.text===n}))}function o(t){return void 0!==t&&e.isStringLiteralLike(t)?t.text:void 0}function s(t){var r;if(0===t.length)return t;var n=function(t){for(var r,n={defaultImports:[],namespaceImports:[],namedImports:[]},i={defaultImports:[],namespaceImports:[],namedImports:[]},a=0,o=t;a<o.length;a++){var s=o[a];if(void 0!==s.importClause){var c=s.importClause.isTypeOnly?n:i,u=s.importClause,l=u.name,_=u.namedBindings;l&&c.defaultImports.push(s),_&&(e.isNamespaceImport(_)?c.namespaceImports.push(s):c.namedImports.push(s))}else r=r||s}return{importWithoutClause:r,typeOnlyImports:n,regularImports:i}}(t),i=n.importWithoutClause,a=n.typeOnlyImports,o=n.regularImports,s=[];i&&s.push(i);for(var c=0,_=[o,a];c<_.length;c++){var d=_[c],f=d===a,g=d.defaultImports,m=d.namespaceImports,v=d.namedImports;if(f||1!==g.length||1!==m.length||0!==v.length){for(var h=0,b=e.stableSort(m,(function(e,t){return p(e.importClause.namedBindings.name,t.importClause.namedBindings.name)}));h<b.length;h++){var x=b[h];s.push(u(x,void 0,x.importClause.namedBindings))}if(0!==g.length||0!==v.length){var D=void 0,S=[];if(1===g.length)D=g[0].importClause.name;else for(var T=0,C=g;T<C.length;T++){A=C[T];S.push(e.factory.createImportSpecifier(!1,e.factory.createIdentifier("default"),A.importClause.name))}S.push.apply(S,y(v));var E=l(S),k=g.length>0?g[0]:v[0],N=0===E.length?D?void 0:e.factory.createNamedImports(e.emptyArray):0===v.length?e.factory.createNamedImports(E):e.factory.updateNamedImports(v[0].importClause.namedBindings,E);f&&D&&N?(s.push(u(k,D,void 0)),s.push(u(null!==(r=v[0])&&void 0!==r?r:k,void 0,N))):s.push(u(k,D,N))}}else{var A=g[0];s.push(u(A,A.importClause.name,m[0].importClause.namedBindings))}}return s}function c(t){if(0===t.length)return t;var r=function(e){for(var t,r=[],n=[],i=0,a=e;i<a.length;i++){var o=a[i];void 0===o.exportClause?t=t||o:o.isTypeOnly?n.push(o):r.push(o)}return{exportWithoutClause:t,namedExports:r,typeOnlyExports:n}}(t),n=r.exportWithoutClause,i=r.namedExports,a=r.typeOnlyExports,o=[];n&&o.push(n);for(var s=0,c=[i,a];s<c.length;s++){var u=c[s];if(0!==u.length){var _=[];_.push.apply(_,e.flatMap(u,(function(t){return t.exportClause&&e.isNamedExports(t.exportClause)?t.exportClause.elements:e.emptyArray})));var d=l(_),p=u[0];o.push(e.factory.updateExportDeclaration(p,p.modifiers,p.isTypeOnly,p.exportClause&&(e.isNamedExports(p.exportClause)?e.factory.updateNamedExports(p.exportClause,d):e.factory.updateNamespaceExport(p.exportClause,p.exportClause.name)),p.moduleSpecifier,p.assertClause))}}return o}function u(t,r,n){return e.factory.updateImportDeclaration(t,t.modifiers,e.factory.updateImportClause(t.importClause,t.importClause.isTypeOnly,r,n),t.moduleSpecifier,t.assertClause)}function l(t){return e.stableSort(t,_)}function _(t,r){return e.compareBooleans(t.isTypeOnly,r.isTypeOnly)||p(t.propertyName||t.name,r.propertyName||r.name)||p(t.name,r.name)}function d(t,r){var n=void 0===t?void 0:o(t),i=void 0===r?void 0:o(r);return e.compareBooleans(void 0===n,void 0===i)||e.compareBooleans(e.isExternalModuleNameRelative(n),e.isExternalModuleNameRelative(i))||e.compareStringsCaseInsensitive(n,i)}function p(t,r){return e.compareStringsCaseInsensitive(t.text,r.text)}function f(t){var r;switch(t.kind){case 268:return null===(r=e.tryCast(t.moduleReference,e.isExternalModuleReference))||void 0===r?void 0:r.expression;case 269:return t.moduleSpecifier;case 240:return t.declarationList.declarations[0].initializer.arguments[0]}}function g(t,r){return d(f(t),f(r))||function(t,r){return e.compareValues(m(t),m(r))}(t,r)}function m(e){var t;switch(e.kind){case 269:return e.importClause?e.importClause.isTypeOnly?1:271===(null===(t=e.importClause.namedBindings)||void 0===t?void 0:t.kind)?2:e.importClause.name?3:4:0;case 268:return 5;case 240:return 6}}function y(t){return e.flatMap(t,(function(t){return e.map(function(t){var r;return(null===(r=t.importClause)||void 0===r?void 0:r.namedBindings)&&e.isNamedImports(t.importClause.namedBindings)?t.importClause.namedBindings.elements:void 0}(t),(function(t){return t.name&&t.propertyName&&t.name.escapedText===t.propertyName.escapedText?e.factory.updateImportSpecifier(t,t.isTypeOnly,void 0,t.name):t}))}))}t.organizeImports=function(t,n,a,u,l,_){var p=e.textChanges.ChangeTracker.fromContext({host:a,formatContext:n,preferences:l}),f="SortAndCombine"===_||"All"===_,m=f,y="RemoveUnused"===_||"All"===_?i:e.identity,v=m?s:e.identity,h=function(r){var n=v(y(r,t,u));return f?e.stableSort(n,(function(e,t){return g(e,t)})):n};r(t,t.statements.filter(e.isImportDeclaration)).forEach((function(e){return S(e,h)})),"RemoveUnused"!==_&&S(t.statements.filter(e.isExportDeclaration),c);for(var b=0,x=t.statements.filter(e.isAmbientModule);b<x.length;b++){var D=x[b];if(D.body)if(r(t,D.body.statements.filter(e.isImportDeclaration)).forEach((function(e){return S(e,h)})),"RemoveUnused"!==_)S(D.body.statements.filter(e.isExportDeclaration),c)}return p.getChanges();function S(r,i){if(0!==e.length(r)){e.suppressLeadingTrivia(r[0]);var s=m?e.group(r,(function(e){return o(e.moduleSpecifier)})):[r],c=f?e.stableSort(s,(function(e,t){return d(e[0].moduleSpecifier,t[0].moduleSpecifier)})):s,u=e.flatMap(c,(function(e){return o(e[0].moduleSpecifier)?i(e):e}));if(0===u.length)p.deleteNodes(t,r,{trailingTriviaOption:e.textChanges.TrailingTriviaOption.Include},!0);else{var l={leadingTriviaOption:e.textChanges.LeadingTriviaOption.Exclude,trailingTriviaOption:e.textChanges.TrailingTriviaOption.Include,suffix:e.getNewLineOrDefaultFromHost(a,n.options)};p.replaceNodeWithNodes(t,r[0],u,l);var _=p.nodeHasTrailingComment(t,r[0],l);p.deleteNodes(t,r.slice(1),{trailingTriviaOption:e.textChanges.TrailingTriviaOption.Include},_)}}}},t.coalesceImports=s,t.coalesceExports=c,t.compareImportOrExportSpecifiers=_,t.compareModuleSpecifiers=d,t.importsAreSorted=function(t){return e.arrayIsSorted(t,g)},t.importSpecifiersAreSorted=function(t){return e.arrayIsSorted(t,_)},t.getImportDeclarationInsertionIndex=function(t,r){var n=e.binarySearch(t,r,e.identity,g);return n<0?~n:n},t.getImportSpecifierInsertionIndex=function(t,r){var n=e.binarySearch(t,r,e.identity,_);return n<0?~n:n},t.compareImportsOrRequireStatements=g}(e.OrganizeImports||(e.OrganizeImports={}))}(_||(_={})),function(e){!function(t){t.collectElements=function(t,r){var l=[];return function(t,r,n){var l=40,_=0,d=a(a([],t.statements,!0),[t.endOfFileToken],!1),p=d.length;for(;_<p;){for(;_<p&&!e.isAnyImportSyntax(d[_]);)m(d[_]),_++;if(_===p)break;for(var f=_;_<p&&e.isAnyImportSyntax(d[_]);)o(d[_],t,r,n),_++;var g=_-1;g!==f&&n.push(s(e.findChildOfKind(d[f],100,t).getStart(t),d[g].getEnd(),"imports"))}function m(a){var _;if(0!==l){r.throwIfCancellationRequested(),(e.isDeclaration(a)||e.isVariableStatement(a)||e.isReturnStatement(a)||e.isCallOrNewExpression(a)||1===a.kind)&&o(a,t,r,n),e.isFunctionLike(a)&&e.isBinaryExpression(a.parent)&&e.isPropertyAccessExpression(a.parent.left)&&o(a.parent.left,t,r,n),(e.isBlock(a)||e.isModuleBlock(a))&&i(a.statements.end,t,r,n),(e.isClassLike(a)||e.isInterfaceDeclaration(a))&&i(a.members.end,t,r,n);var d=function(t,r){switch(t.kind){case 238:if(e.isFunctionLike(t.parent))return function(t,r,n){var i=function(t,r,n){if(e.isNodeArrayMultiLine(t.parameters,n)){var i=e.findChildOfKind(t,20,n);if(i)return i}return e.findChildOfKind(r,18,n)}(t,r,n),a=e.findChildOfKind(r,19,n);return i&&a&&c(i,a,t,n,216!==t.kind)}(t.parent,t,r);switch(t.parent.kind){case 243:case 246:case 247:case 245:case 242:case 244:case 251:case 295:return g(t.parent);case 255:var n=t.parent;if(n.tryBlock===t)return g(t.parent);if(n.finallyBlock===t){var i=e.findChildOfKind(n,96,r);if(i)return g(i)}default:return u(e.createTextSpanFromNode(t,r),"code")}case 265:return g(t.parent);case 260:case 228:case 261:case 263:case 266:case 184:case 203:return g(t);case 186:return g(t,!1,!e.isTupleTypeNode(t.parent),22);case 292:case 293:return m(t.statements);case 207:return f(t);case 206:return f(t,22);case 281:return l(t);case 285:return _(t);case 282:case 283:return d(t.attributes);case 225:case 14:return p(t);case 204:return g(t,!1,!e.isBindingElement(t.parent),22);case 216:return o(t);case 210:return a(t);case 214:return y(t)}function a(t){if(t.arguments.length){var n=e.findChildOfKind(t,20,r),i=e.findChildOfKind(t,21,r);if(n&&i&&!e.positionsAreOnSameLine(n.pos,i.pos,r))return c(n,i,t,r,!1,!0)}}function o(t){if(!(e.isBlock(t.body)||e.isParenthesizedExpression(t.body)||e.positionsAreOnSameLine(t.body.getFullStart(),t.body.getEnd(),r)))return u(e.createTextSpanFromBounds(t.body.getFullStart(),t.body.getEnd()),"code",e.createTextSpanFromNode(t))}function l(t){var n=e.createTextSpanFromBounds(t.openingElement.getStart(r),t.closingElement.getEnd()),i=t.openingElement.tagName.getText(r);return u(n,"code",n,!1,"<"+i+">...</"+i+">")}function _(t){var n=e.createTextSpanFromBounds(t.openingFragment.getStart(r),t.closingFragment.getEnd());return u(n,"code",n,!1,"<>...</>")}function d(e){if(0!==e.properties.length)return s(e.getStart(r),e.getEnd(),"code")}function p(e){if(14!==e.kind||0!==e.text.length)return s(e.getStart(r),e.getEnd(),"code")}function f(t,r){return void 0===r&&(r=18),g(t,!1,!e.isArrayLiteralExpression(t.parent)&&!e.isCallExpression(t.parent),r)}function g(n,i,a,o,s){void 0===i&&(i=!1),void 0===a&&(a=!0),void 0===o&&(o=18),void 0===s&&(s=18===o?19:23);var u=e.findChildOfKind(t,o,r),l=e.findChildOfKind(t,s,r);return u&&l&&c(u,l,n,r,i,a)}function m(t){return t.length?u(e.createTextSpanFromRange(t),"code"):void 0}function y(t){if(!e.positionsAreOnSameLine(t.getStart(),t.getEnd(),r))return u(e.createTextSpanFromBounds(t.getStart(),t.getEnd()),"code",e.createTextSpanFromNode(t))}}(a,t);d&&n.push(d),l--,e.isCallExpression(a)?(l++,m(a.expression),l--,a.arguments.forEach(m),null===(_=a.typeArguments)||void 0===_||_.forEach(m)):e.isIfStatement(a)&&a.elseStatement&&e.isIfStatement(a.elseStatement)?(m(a.expression),m(a.thenStatement),l++,m(a.elseStatement),l--):a.forEachChild(m),l++}}}(t,r,l),function(t,r){for(var i=[],a=t.getLineStarts(),o=0,s=a;o<s.length;o++){var c=s[o],l=t.getLineEndOfPosition(c),_=n(t.text.substring(c,l));if(_&&!e.isInComment(t,c))if(_[1]){var d=i.pop();d&&(d.textSpan.length=l-d.textSpan.start,d.hintSpan.length=l-d.textSpan.start,r.push(d))}else{var p=e.createTextSpanFromBounds(t.text.indexOf("//",c),l);i.push(u(p,"region",p,!1,_[2]||"#region"))}}}(t,l),l.sort((function(e,t){return e.textSpan.start-t.textSpan.start}))};var r=/^#(end)?region(?:\s+(.*))?(?:\r)?$/;function n(t){return t=e.trimStringStart(t),e.startsWith(t,"//")?(t=e.trimString(t.slice(2)),r.exec(t)):null}function i(t,r,i,a){var o=e.getLeadingCommentRanges(r.text,t);if(o){for(var c=-1,u=-1,l=0,_=r.getFullText(),d=0,p=o;d<p.length;d++){var f=p[d],g=f.kind,m=f.pos,y=f.end;switch(i.throwIfCancellationRequested(),g){case 2:if(n(_.slice(m,y))){v(),l=0;break}0===l&&(c=m),u=y,l++;break;case 3:v(),a.push(s(m,y,"comment")),l=0;break;default:e.Debug.assertNever(g)}}v()}function v(){l>1&&a.push(s(c,u,"comment"))}}function o(t,r,n,a){e.isJsxText(t)||i(t.pos,r,n,a)}function s(t,r,n){return u(e.createTextSpanFromBounds(t,r),n)}function c(t,r,n,i,a,o){return void 0===a&&(a=!1),void 0===o&&(o=!0),u(e.createTextSpanFromBounds(o?t.getFullStart():t.getStart(i),r.getEnd()),"code",e.createTextSpanFromNode(n,i),a)}function u(e,t,r,n,i){return void 0===r&&(r=e),void 0===n&&(n=!1),void 0===i&&(i="..."),{textSpan:e,kind:t,hintSpan:r,bannerText:i,autoCollapse:n}}}(e.OutliningElementsCollector||(e.OutliningElementsCollector={}))}(_||(_={})),function(e){var t;function r(e,t){return{kind:e,isCaseSensitive:t}}function n(e,t){var r=t.get(e);return r||t.set(e,r=v(e)),r}function i(i,a,o){var s=function(e,t){for(var r=e.length-t.length,n=function(r){if(C(t,(function(t,n){return d(e.charCodeAt(n+r))===t})))return{value:r}},i=0;i<=r;i++){var a=n(i);if("object"==typeof a)return a.value}return-1}(i,a.textLowerCase);if(0===s)return r(a.text.length===i.length?t.exact:t.prefix,e.startsWith(i,a.text));if(a.isLowerCase){if(-1===s)return;for(var _=0,p=n(i,o);_<p.length;_++){var f=p[_];if(c(i,f,a.text,!0))return r(t.substring,c(i,f,a.text,!1))}if(a.text.length<i.length&&l(i.charCodeAt(s)))return r(t.substring,!1)}else{if(i.indexOf(a.text)>0)return r(t.substring,!0);if(a.characterSpans.length>0){var g=n(i,o),m=!!u(i,g,a,!1)||!u(i,g,a,!0)&&void 0;if(void 0!==m)return r(t.camelCase,m)}}}function a(e,t,r){if(C(t.totalTextChunk.text,(function(e){return 32!==e&&42!==e}))){var n=i(e,t.totalTextChunk,r);if(n)return n}for(var a,s=0,c=t.subWordTextChunks;s<c.length;s++){a=o(a,i(e,c[s],r))}return a}function o(t,r){return e.min([t,r],s)}function s(t,r){return void 0===t?1:void 0===r?-1:e.compareValues(t.kind,r.kind)||e.compareBooleans(!t.isCaseSensitive,!r.isCaseSensitive)}function c(e,t,r,n,i){return void 0===i&&(i={start:0,length:r.length}),i.length<=t.length&&T(0,i.length,(function(a){return function(e,t,r){return r?d(e)===d(t):e===t}(r.charCodeAt(i.start+a),e.charCodeAt(t.start+a),n)}))}function u(t,r,n,i){for(var a,o,s=n.characterSpans,u=0,_=0;;){if(_===s.length)return!0;if(u===r.length)return!1;for(var d=r[u],p=!1;_<s.length;_++){var f=s[_];if(p&&(!l(n.text.charCodeAt(s[_-1].start))||!l(n.text.charCodeAt(s[_].start))))break;if(!c(t,d,n.text,i,f))break;p=!0,a=void 0===a?u:a,o=void 0===o||o,d=e.createTextSpan(d.start+f.length,d.length-f.length)}p||void 0===o||(o=!1),u++}}function l(t){if(t>=65&&t<=90)return!0;if(t<127||!e.isUnicodeIdentifierStart(t,99))return!1;var r=String.fromCharCode(t);return r===r.toUpperCase()}function _(t){if(t>=97&&t<=122)return!0;if(t<127||!e.isUnicodeIdentifierStart(t,99))return!1;var r=String.fromCharCode(t);return r===r.toLowerCase()}function d(e){return e>=65&&e<=90?e-65+97:e<127?e:String.fromCharCode(e).toLowerCase().charCodeAt(0)}function p(e){return e>=48&&e<=57}function f(e){return l(e)||_(e)||p(e)||95===e||36===e}function g(e){for(var t=[],r=0,n=0,i=0;i<e.length;i++){f(e.charCodeAt(i))?(0===n&&(r=i),n++):n>0&&(t.push(m(e.substr(r,n))),n=0)}return n>0&&t.push(m(e.substr(r,n))),t}function m(e){var t=e.toLowerCase();return{text:e,textLowerCase:t,isLowerCase:e===t,characterSpans:y(e)}}function y(e){return h(e,!1)}function v(e){return h(e,!0)}function h(t,r){for(var n=[],i=0,a=1;a<t.length;a++){var o=p(t.charCodeAt(a-1)),s=p(t.charCodeAt(a)),c=S(t,r,a),u=r&&D(t,a,i);(b(t.charCodeAt(a-1))||b(t.charCodeAt(a))||o!==s||c||u)&&(x(t,i,a)||n.push(e.createTextSpan(i,a-i)),i=a)}return x(t,i,t.length)||n.push(e.createTextSpan(i,t.length-i)),n}function b(e){switch(e){case 33:case 34:case 35:case 37:case 38:case 39:case 40:case 41:case 42:case 44:case 45:case 46:case 47:case 58:case 59:case 63:case 64:case 91:case 92:case 93:case 95:case 123:case 125:return!0}return!1}function x(e,t,r){return C(e,(function(e){return b(e)&&95!==e}),t,r)}function D(e,t,r){return t!==r&&t+1<e.length&&l(e.charCodeAt(t))&&_(e.charCodeAt(t+1))&&C(e,l,r,t)}function S(e,t,r){var n=l(e.charCodeAt(r-1));return l(e.charCodeAt(r))&&(!t||!n)}function T(e,t,r){for(var n=e;n<t;n++)if(!r(n))return!1;return!0}function C(e,t,r,n){return void 0===r&&(r=0),void 0===n&&(n=e.length),T(r,n,(function(r){return t(e.charCodeAt(r),r)}))}!function(e){e[e.exact=0]="exact",e[e.prefix=1]="prefix",e[e.substring=2]="substring",e[e.camelCase=3]="camelCase"}(t=e.PatternMatchKind||(e.PatternMatchKind={})),e.createPatternMatcher=function(t){var r=new e.Map,n=t.trim().split(".").map((function(e){return{totalTextChunk:m(t=e.trim()),subWordTextChunks:g(t)};var t}));if(!n.some((function(e){return!e.subWordTextChunks.length})))return{getFullMatch:function(t,i){return function(t,r,n,i){var s,c=a(r,e.last(n),i);if(!c)return;if(n.length-1>t.length)return;for(var u=n.length-2,l=t.length-1;u>=0;u-=1,l-=1)s=o(s,a(t[l],n[u],i));return s}(t,i,n,r)},getMatchForLastSegmentOfPattern:function(t){return a(t,e.last(n),r)},patternContainsDots:n.length>1}},e.breakIntoCharacterSpans=y,e.breakIntoWordSpans=v}(_||(_={})),function(e){e.preProcessFile=function(t,r,n){void 0===r&&(r=!0),void 0===n&&(n=!1);var i,a,o,s={languageVersion:1,pragmas:void 0,checkJsDirective:void 0,referencedFiles:[],typeReferenceDirectives:[],libReferenceDirectives:[],amdDependencies:[],hasNoDefaultLib:void 0,moduleName:void 0},c=[],u=0,l=!1;function _(){return a=o,18===(o=e.scanner.scan())?u++:19===o&&u--,o}function d(){var t=e.scanner.getTokenValue(),r=e.scanner.getTokenPos();return{fileName:t,pos:r,end:r+t.length}}function p(){c.push(d()),f()}function f(){0===u&&(l=!0)}function g(){var t=e.scanner.getToken();return 136===t&&(142===(t=_())&&10===(t=_())&&(i||(i=[]),i.push({ref:d(),depth:u})),!0)}function m(){if(24===a)return!1;var t=e.scanner.getToken();if(100===t){if(20===(t=_())){if(10===(t=_())||14===t)return p(),!0}else{if(10===t)return p(),!0;if(154===t){var r=e.scanner.lookAhead((function(){var t=e.scanner.scan();return 158!==t&&(41===t||18===t||79===t||e.isKeyword(t))}));r&&(t=_())}if(79===t||e.isKeyword(t))if(158===(t=_())){if(10===(t=_()))return p(),!0}else if(63===t){if(v(!0))return!0}else{if(27!==t)return!0;t=_()}if(18===t){for(t=_();19!==t&&1!==t;)t=_();19===t&&158===(t=_())&&10===(t=_())&&p()}else 41===t&&128===(t=_())&&(79===(t=_())||e.isKeyword(t))&&158===(t=_())&&10===(t=_())&&p()}return!0}return!1}function y(){var t=e.scanner.getToken();if(93===t){if(f(),154===(t=_())){var r=e.scanner.lookAhead((function(){var t=e.scanner.scan();return 41===t||18===t}));r&&(t=_())}if(18===t){for(t=_();19!==t&&1!==t;)t=_();19===t&&158===(t=_())&&10===(t=_())&&p()}else if(41===t)158===(t=_())&&10===(t=_())&&p();else if(100===t){if(154===(t=_())){r=e.scanner.lookAhead((function(){var t=e.scanner.scan();return 79===t||e.isKeyword(t)}));r&&(t=_())}if((79===t||e.isKeyword(t))&&63===(t=_())&&v(!0))return!0}return!0}return!1}function v(t,r){void 0===r&&(r=!1);var n=t?_():e.scanner.getToken();return 147===n&&(20===(n=_())&&(10===(n=_())||r&&14===n)&&p(),!0)}function h(){var t=e.scanner.getToken();if(79===t&&"define"===e.scanner.getTokenValue()){if(20!==(t=_()))return!0;if(10===(t=_())||14===t){if(27!==(t=_()))return!0;t=_()}if(22!==t)return!0;for(t=_();23!==t&&1!==t;)10!==t&&14!==t||p(),t=_();return!0}return!1}if(r&&function(){for(e.scanner.setText(t),_();1!==e.scanner.getToken();){if(15===e.scanner.getToken()){var r=[e.scanner.getToken()];e:for(;e.length(r);){var i=e.scanner.scan();switch(i){case 1:break e;case 100:m();break;case 15:r.push(i);break;case 18:e.length(r)&&r.push(i);break;case 19:e.length(r)&&(15===e.lastOrUndefined(r)?17===e.scanner.reScanTemplateToken(!1)&&r.pop():r.pop())}}_()}g()||m()||y()||n&&(v(!1,!0)||h())||_()}e.scanner.setText(void 0)}(),e.processCommentPragmas(s,t),e.processPragmasIntoFields(s,e.noop),l){if(i)for(var b=0,x=i;b<x.length;b++){var D=x[b];c.push(D.ref)}return{referencedFiles:s.referencedFiles,typeReferenceDirectives:s.typeReferenceDirectives,libReferenceDirectives:s.libReferenceDirectives,importedFiles:c,isLibFile:!!s.hasNoDefaultLib,ambientExternalModules:void 0}}var S=void 0;if(i)for(var T=0,C=i;T<C.length;T++){0===(D=C[T]).depth?(S||(S=[]),S.push(D.ref.fileName)):c.push(D.ref)}return{referencedFiles:s.referencedFiles,typeReferenceDirectives:s.typeReferenceDirectives,libReferenceDirectives:s.libReferenceDirectives,importedFiles:c,isLibFile:!!s.hasNoDefaultLib,ambientExternalModules:S}}}(_||(_={})),function(e){!function(t){function r(t){var r=e.getPathComponents(t),n=r.lastIndexOf("node_modules");if(-1!==n)return r.slice(0,n+2)}function n(e,t,r,n,i,o){return{canRename:!0,fileToRename:void 0,kind:r,displayName:e,fullDisplayName:t,kindModifiers:n,triggerSpan:a(i,o)}}function i(t){return{canRename:!1,localizedErrorMessage:e.getLocaleSpecificMessage(t)}}function a(t,r){var n=t.getStart(r),i=t.getWidth(r);return e.isStringLiteralLike(t)&&(n+=1,i-=2),e.createTextSpan(n,i)}function o(t){switch(t.kind){case 79:case 80:case 10:case 14:case 108:return!0;case 8:return e.isLiteralNameOfPropertyDeclarationOrIndexAccess(t);default:return!1}}t.getRenameInfo=function(t,a,s,c){var u=e.getAdjustedRenameLocation(e.getTouchingPropertyName(a,s));if(o(u)){var l=function(t,a,o,s,c){var u=a.getSymbolAtLocation(t);if(!u){if(e.isStringLiteralLike(t)){var l=e.getContextualTypeFromParentOrAncestorTypeNode(t,a);if(l&&(128&l.flags||1048576&l.flags&&e.every(l.types,(function(e){return!!(128&e.flags)}))))return n(t.text,t.text,"string","",t,o)}else if(e.isLabelName(t)){var _=e.getTextOfNode(t);return n(_,_,"label","",t,o)}return}var d=u.declarations;if(!d||0===d.length)return;if(d.some((function(t){return function(t,r){var n=r.getSourceFile();return t.isSourceFileDefaultLibrary(n)&&e.fileExtensionIs(n.fileName,".d.ts")}(s,t)})))return i(e.Diagnostics.You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library);if(e.isIdentifier(t)&&88===t.originalKeywordKind&&u.parent&&1536&u.parent.flags)return;if(e.isStringLiteralLike(t)&&e.tryGetImportFromModuleSpecifier(t))return c.allowRenameOfImportPath?function(t,r,n){if(!e.isExternalModuleNameRelative(t.text))return i(e.Diagnostics.You_cannot_rename_a_module_via_a_global_import);var a=n.declarations&&e.find(n.declarations,e.isSourceFile);if(!a)return;var o=e.endsWith(t.text,"/index")||e.endsWith(t.text,"/index.js")?void 0:e.tryRemoveSuffix(e.removeFileExtension(a.fileName),"/index"),s=void 0===o?a.fileName:o,c=void 0===o?"module":"directory",u=t.text.lastIndexOf("/")+1,l=e.createTextSpan(t.getStart(r)+1+u,t.text.length-u);return{canRename:!0,fileToRename:s,kind:c,displayName:s,fullDisplayName:s,kindModifiers:"",triggerSpan:l}}(t,o,u):void 0;var p=function(t,n,i,a){if(!a.providePrefixAndSuffixTextForRename&&2097152&n.flags){var o=n.declarations&&e.find(n.declarations,(function(t){return e.isImportSpecifier(t)}));o&&!o.propertyName&&(n=i.getAliasedSymbol(n))}var s=n.declarations;if(!s)return;var c=r(t.path);if(void 0===c)return e.some(s,(function(t){return e.isInsideNodeModules(t.getSourceFile().path)}))?e.Diagnostics.You_cannot_rename_elements_that_are_defined_in_a_node_modules_folder:void 0;for(var u=0,l=s;u<l.length;u++){var _=r(l[u].getSourceFile().path);if(_)for(var d=Math.min(c.length,_.length),p=0;p<=d;p++)if(0!==e.compareStringsCaseSensitive(c[p],_[p]))return e.Diagnostics.You_cannot_rename_elements_that_are_defined_in_another_node_modules_folder}return}(o,u,a,c);if(p)return i(p);var f=e.SymbolDisplay.getSymbolKind(a,u,t),g=e.isImportOrExportSpecifierName(t)||e.isStringOrNumericLiteralLike(t)&&164===t.parent.kind?e.stripQuotes(e.getTextOfIdentifierOrLiteral(t)):void 0,m=g||a.symbolToString(u),y=g||a.getFullyQualifiedName(u);return n(m,y,f,e.SymbolDisplay.getSymbolModifiers(a,u),t,o)}(u,t.getTypeChecker(),a,t,c);if(l)return l}return i(e.Diagnostics.You_cannot_rename_this_element)},t.nodeIsEligibleForRename=o}(e.Rename||(e.Rename={}))}(_||(_={})),function(e){!function(t){function r(t,r,n){return e.Debug.assert(n.pos<=r),r<n.end||n.getEnd()===r&&e.getTouchingPropertyName(t,r).pos<n.end}t.getSmartSelectionRange=function(t,n){var a,s,c,_,d={textSpan:e.createTextSpanFromBounds(n.getFullStart(),n.getEnd())},p=n;e:for(;;){var f=i(p);if(!f.length)break;for(var g=0;g<f.length;g++){var m=f[g-1],y=f[g],v=f[g+1];if(e.getTokenPosOfNode(y,n,!0)>t)break e;var h=e.singleOrUndefined(e.getTrailingCommentRanges(n.text,y.end));if(h&&2===h.kind&&C(h.pos,h.end),r(n,t,y)){if(e.isFunctionBody(y)&&e.isFunctionLikeDeclaration(p)&&!e.positionsAreOnSameLine(y.getStart(n),y.getEnd(),n)&&T(y.getStart(n),y.getEnd()),e.isBlock(y)||e.isTemplateSpan(y)||e.isTemplateHead(y)||e.isTemplateTail(y)||m&&e.isTemplateHead(m)||e.isVariableDeclarationList(y)&&e.isVariableStatement(p)||e.isSyntaxList(y)&&e.isVariableDeclarationList(p)||e.isVariableDeclaration(y)&&e.isSyntaxList(p)&&1===f.length||e.isJSDocTypeExpression(y)||e.isJSDocSignature(y)||e.isJSDocTypeLiteral(y)){p=y;break}if(e.isTemplateSpan(p)&&v&&e.isTemplateMiddleOrTemplateTail(v))T(y.getFullStart()-"${".length,v.getStart()+"}".length);var b=e.isSyntaxList(y)&&(_=void 0,18===(_=(c=m)&&c.kind)||22===_||20===_||283===_)&&u(v)&&!e.positionsAreOnSameLine(m.getStart(),v.getStart(),n),x=b?m.getEnd():y.getStart(),D=b?v.getStart():l(n,y);if(e.hasJSDocNodes(y)&&(null===(a=y.jsDoc)||void 0===a?void 0:a.length)&&T(e.first(y.jsDoc).getStart(),D),e.isSyntaxList(y)){var S=y.getChildren()[0];S&&e.hasJSDocNodes(S)&&(null===(s=S.jsDoc)||void 0===s?void 0:s.length)&&S.getStart()!==y.pos&&(x=Math.min(x,e.first(S.jsDoc).getStart()))}T(x,D),(e.isStringLiteral(y)||e.isTemplateLiteral(y))&&T(x+1,D-1),p=y;break}if(g===f.length-1)break e}}return d;function T(r,n){if(r!==n){var i=e.createTextSpanFromBounds(r,n);(!d||!e.textSpansEqual(i,d.textSpan)&&e.textSpanIntersectsWithPosition(i,t))&&(d=o({textSpan:i},d&&{parent:d}))}}function C(e,t){T(e,t);for(var r=e;47===n.text.charCodeAt(r);)r++;T(r,t)}};var n=e.or(e.isImportDeclaration,e.isImportEqualsDeclaration);function i(t){var r;if(e.isSourceFile(t))return a(t.getChildAt(0).getChildren(),n);if(e.isMappedTypeNode(t)){var i=t.getChildren(),o=i[0],u=i.slice(1),l=e.Debug.checkDefined(u.pop());e.Debug.assertEqual(o.kind,18),e.Debug.assertEqual(l.kind,19);var _=a(u,(function(e){return e===t.readonlyToken||146===e.kind||e===t.questionToken||57===e.kind})),d=a(_,(function(e){var t=e.kind;return 22===t||165===t||23===t}));return[o,c(s(d,(function(e){return 58===e.kind}))),l]}if(e.isPropertySignature(t)){var p=323===(null===(r=(u=a(t.getChildren(),(function(r){return r===t.name||e.contains(t.modifiers,r)})))[0])||void 0===r?void 0:r.kind)?u[0]:void 0,f=s(p?u.slice(1):u,(function(e){return 58===e.kind}));return p?[p,c(f)]:f}if(e.isParameter(t)){var g=a(t.getChildren(),(function(e){return e===t.dotDotDotToken||e===t.name}));return s(a(g,(function(e){return e===g[0]||e===t.questionToken})),(function(e){return 63===e.kind}))}return e.isBindingElement(t)?s(t.getChildren(),(function(e){return 63===e.kind})):t.getChildren()}function a(e,t){for(var r,n=[],i=0,a=e;i<a.length;i++){var o=a[i];t(o)?(r=r||[]).push(o):(r&&(n.push(c(r)),r=void 0),n.push(o))}return r&&n.push(c(r)),n}function s(t,r,n){if(void 0===n&&(n=!0),t.length<2)return t;var i=e.findIndex(t,r);if(-1===i)return t;var a=t.slice(0,i),o=t[i],s=e.last(t),u=n&&26===s.kind,l=t.slice(i+1,u?t.length-1:void 0),_=e.compact([a.length?c(a):void 0,o,l.length?c(l):void 0]);return u?_.concat(s):_}function c(t){return e.Debug.assertGreaterThanOrEqual(t.length,1),e.setTextRangePosEnd(e.parseNodeFactory.createSyntaxList(t),t[0].pos,e.last(t).end)}function u(e){var t=e&&e.kind;return 19===t||23===t||21===t||284===t}function l(e,t){switch(t.kind){case 343:case 341:case 350:case 348:case 345:return e.getLineEndOfPosition(t.getStart());default:return t.getEnd()}}}(e.SmartSelectionRange||(e.SmartSelectionRange={}))}(_||(_={})),function(e){!function(t){var r,n;function i(t,r,n){for(var i=t.getFullStart(),a=t.parent;a;){var o=e.findPrecedingToken(i,r,a,!0);if(o)return e.rangeContainsRange(n,o);a=a.parent}return e.Debug.fail("Could not find preceding token")}function o(t,r,n){var i=function(t,r){if(29===t.kind||20===t.kind)return{list:f(t.parent,t,r),argumentIndex:0};var n=e.findContainingList(t);return n&&{list:n,argumentIndex:_(n,t)}}(t,n);if(i){var a=i.list,o=i.argumentIndex,s=function(t,r){var n=t.getChildren(),i=e.countWhere(n,(function(e){return 27!==e.kind}));!r&&n.length>0&&27===e.last(n).kind&&i++;return i}(a,e.isInString(n,r,t));0!==o&&e.Debug.assertLessThan(o,s);var c=function(t,r){var n=t.getFullStart(),i=e.skipTrivia(r.text,t.getEnd(),!1);return e.createTextSpan(n,i-n)}(a,n);return{list:a,argumentIndex:o,argumentCount:s,argumentsSpan:c}}}function s(t,r,n){var i=t.parent;if(e.isCallOrNewExpression(i)){var a=i,s=o(t,r,n);if(!s)return;var c=s.list,u=s.argumentIndex,l=s.argumentCount,_=s.argumentsSpan;return{isTypeParameterList:!!i.typeArguments&&i.typeArguments.pos===c.pos,invocation:{kind:0,node:a},argumentsSpan:_,argumentIndex:u,argumentCount:l}}if(e.isNoSubstitutionTemplateLiteral(t)&&e.isTaggedTemplateExpression(i))return e.isInsideTemplateLiteral(t,r,n)?d(i,0,n):void 0;if(e.isTemplateHead(t)&&212===i.parent.kind){var p=i,f=p.parent;return e.Debug.assert(225===p.kind),d(f,u=e.isInsideTemplateLiteral(t,r,n)?0:1,n)}if(e.isTemplateSpan(i)&&e.isTaggedTemplateExpression(i.parent.parent)){var g=i;f=i.parent.parent;if(e.isTemplateTail(t)&&!e.isInsideTemplateLiteral(t,r,n))return;u=function(t,r,n,i){if(e.Debug.assert(n>=r.getStart(),"Assumed 'position' could not occur before node."),e.isTemplateLiteralToken(r))return e.isInsideTemplateLiteral(r,n,i)?0:t+2;return t+1}(g.parent.templateSpans.indexOf(g),t,r,n);return d(f,u,n)}if(e.isJsxOpeningLikeElement(i)){var m=i.attributes.pos,y=e.skipTrivia(n.text,i.attributes.end,!1);return{isTypeParameterList:!1,invocation:{kind:0,node:i},argumentsSpan:e.createTextSpan(m,y-m),argumentIndex:0,argumentCount:1}}var v=e.getPossibleTypeArgumentsInfo(t,n);if(v){var h=v.called,b=v.nTypeArguments;return{isTypeParameterList:!0,invocation:a={kind:1,called:h},argumentsSpan:_=e.createTextSpanFromBounds(h.getStart(n),t.end),argumentIndex:b,argumentCount:b+1}}}function c(t){return e.isBinaryExpression(t.parent)?c(t.parent):t}function u(t){return e.isBinaryExpression(t.left)?u(t.left)+1:2}function l(t){return"__type"===t.name&&e.firstDefined(t.declarations,(function(t){return e.isFunctionTypeNode(t)?t.parent.symbol:void 0}))||t}function _(e,t){for(var r=0,n=0,i=e.getChildren();n<i.length;n++){var a=i[n];if(a===t)break;27!==a.kind&&r++}return r}function d(t,r,n){var i=e.isNoSubstitutionTemplateLiteral(t.template)?1:t.template.templateSpans.length+1;return 0!==r&&e.Debug.assertLessThan(r,i),{isTypeParameterList:!1,invocation:{kind:0,node:t},argumentsSpan:p(t,n),argumentIndex:r,argumentCount:i}}function p(t,r){var n=t.template,i=n.getStart(),a=n.getEnd();225===n.kind&&(0===e.last(n.templateSpans).literal.getFullWidth()&&(a=e.skipTrivia(r.text,a,!1)));return e.createTextSpan(i,a-i)}function f(t,r,n){var i=t.getChildren(n),a=i.indexOf(r);return e.Debug.assert(a>=0&&i.length>a+1),i[a+1]}function g(t){return 0===t.kind?e.getInvokedExpression(t.node):t.called}function m(e){return 0===e.kind?e.node:1===e.kind?e.called:e.node}!function(e){e[e.Call=0]="Call",e[e.TypeArgs=1]="TypeArgs",e[e.Contextual=2]="Contextual"}(r||(r={})),t.getSignatureHelpItems=function(t,r,n,a,_){var d=t.getTypeChecker(),p=e.findTokenOnLeftOfPosition(r,n);if(p){var f=!!a&&"characterTyped"===a.kind;if(!f||!e.isInString(r,n,p)&&!e.isInComment(r,n)){var y=!!a&&"invoked"===a.kind,b=function(t,r,n,i,a){for(var _=function(t){e.Debug.assert(e.rangeContainsRange(t.parent,t),"Not a subspan",(function(){return"Child: ".concat(e.Debug.formatSyntaxKind(t.kind),", parent: ").concat(e.Debug.formatSyntaxKind(t.parent.kind))}));var a=function(t,r,n,i){return function(t,r,n,i){var a=function(t,r,n,i){if(20!==t.kind&&27!==t.kind)return;var a=t.parent;switch(a.kind){case 214:case 171:case 215:case 216:var s=o(t,n,r);if(!s)return;var l=s.argumentIndex,_=s.argumentCount,d=s.argumentsSpan,p=e.isMethodDeclaration(a)?i.getContextualTypeForObjectLiteralElement(a):i.getContextualType(a);return p&&{contextualType:p,argumentIndex:l,argumentCount:_,argumentsSpan:d};case 223:var f=c(a),g=i.getContextualType(f),m=20===t.kind?0:u(a)-1,y=u(f);return g&&{contextualType:g,argumentIndex:m,argumentCount:y,argumentsSpan:e.createTextSpanFromNode(a)};default:return}}(t,n,r,i);if(!a)return;var s=a.contextualType,_=a.argumentIndex,d=a.argumentCount,p=a.argumentsSpan,f=s.getNonNullableType(),g=f.symbol;if(void 0===g)return;var m=e.lastOrUndefined(f.getCallSignatures());if(void 0===m)return;var y={kind:2,signature:m,node:t,symbol:l(g)};return{isTypeParameterList:!1,invocation:y,argumentsSpan:p,argumentIndex:_,argumentCount:d}}(t,r,n,i)||s(t,r,n)}(t,r,n,i);if(a)return{value:a}},d=t;!e.isSourceFile(d)&&(a||!e.isBlock(d));d=d.parent){var p=_(d);if("object"==typeof p)return p.value}return}(p,n,r,d,y);if(b){_.throwIfCancellationRequested();var x=function(t,r,n,a,o){var s=t.invocation,c=t.argumentCount;switch(s.kind){case 0:if(o&&!function(t,r,n){if(!e.isCallOrNewExpression(r))return!1;var a=r.getChildren(n);switch(t.kind){case 20:return e.contains(a,t);case 27:var o=e.findContainingList(t);return!!o&&e.contains(a,o);case 29:return i(t,n,r.expression);default:return!1}}(a,s.node,n))return;var u=[],l=r.getResolvedSignatureForSignatureHelp(s.node,u,c);return 0===u.length?void 0:{kind:0,candidates:u,resolvedSignature:l};case 1:var _=s.called;if(o&&!i(a,n,e.isIdentifier(_)?_.parent:_))return;if(0!==(u=e.getPossibleGenericSignatures(_,c,r)).length)return{kind:0,candidates:u,resolvedSignature:e.first(u)};var d=r.getSymbolAtLocation(_);return d&&{kind:1,symbol:d};case 2:return{kind:0,candidates:[s.signature],resolvedSignature:s.signature};default:return e.Debug.assertNever(s)}}(b,d,r,p,f);return _.throwIfCancellationRequested(),x?d.runWithCancellationToken(_,(function(e){return 0===x.kind?v(x.candidates,x.resolvedSignature,b,r,e):function(e,t,r,n){var i=t.argumentCount,a=t.argumentsSpan,o=t.invocation,s=t.argumentIndex,c=n.getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(e);if(!c)return;var u=[h(e,c,n,m(o),r)];return{items:u,applicableSpan:a,selectedItemIndex:0,argumentIndex:s,argumentCount:i}}(x.symbol,b,r,e)})):e.isSourceFileJS(r)?function(t,r,n){if(2===t.invocation.kind)return;var i=g(t.invocation),a=e.isPropertyAccessExpression(i)?i.name.text:void 0,o=r.getTypeChecker();return void 0===a?void 0:e.firstDefined(r.getSourceFiles(),(function(r){return e.firstDefined(r.getNamedDeclarations().get(a),(function(e){var i=e.symbol&&o.getTypeOfSymbolAtLocation(e.symbol,e),a=i&&i.getCallSignatures();if(a&&a.length)return o.runWithCancellationToken(n,(function(e){return v(a,a[0],t,r,e,!0)}))}))}))}(b,t,_):void 0}}}},function(e){e[e.Candidate=0]="Candidate",e[e.Type=1]="Type"}(n||(n={})),t.getArgumentInfoForCompletions=function(e,t,r){var n=s(e,t,r);return!n||n.isTypeParameterList||0!==n.invocation.kind?void 0:{invocation:n.invocation.node,argumentCount:n.argumentCount,argumentIndex:n.argumentIndex}};var y=70246400;function v(t,r,n,i,o,s){var c,u=n.isTypeParameterList,l=n.argumentCount,_=n.argumentsSpan,d=n.invocation,p=n.argumentIndex,f=m(d),y=2===d.kind?d.symbol:o.getSymbolAtLocation(g(d))||s&&(null===(c=r.declaration)||void 0===c?void 0:c.symbol),v=y?e.symbolToDisplayParts(o,y,s?i:void 0,void 0):e.emptyArray,h=e.map(t,(function(t){return function(t,r,n,i,o,s){var c=(n?x:D)(t,i,o,s);return e.map(c,(function(n){var s=n.isVariadic,c=n.parameters,u=n.prefix,l=n.suffix,_=a(a([],r,!0),u,!0),d=a(a([],l,!0),function(t,r,n){return e.mapToDisplayParts((function(e){e.writePunctuation(":"),e.writeSpace(" ");var i=n.getTypePredicateOfSignature(t);i?n.writeTypePredicate(i,r,void 0,e):n.writeType(n.getReturnTypeOfSignature(t),r,void 0,e)}))}(t,o,i),!0),p=t.getDocumentationComment(i),f=t.getJsDocTags();return{isVariadic:s,prefixDisplayParts:_,suffixDisplayParts:d,separatorDisplayParts:b,parameters:c,documentation:p,tags:f}}))}(t,v,u,o,f,i)}));0!==p&&e.Debug.assertLessThan(p,l);for(var S=0,T=0,C=0;C<h.length;C++){var E=h[C];if(t[C]===r&&(S=T,E.length>1))for(var k=0,N=0,A=E;N<A.length;N++){var F=A[N];if(F.isVariadic||F.parameters.length>=l){S=T+k;break}k++}T+=E.length}e.Debug.assert(-1!==S);var P={items:e.flatMapToMutable(h,e.identity),applicableSpan:_,selectedItemIndex:S,argumentIndex:p,argumentCount:l},w=P.items[S];if(w.isVariadic){var I=e.findIndex(w.parameters,(function(e){return!!e.isRest}));-1<I&&I<w.parameters.length-1?P.argumentIndex=w.parameters.length:P.argumentIndex=Math.min(P.argumentIndex,w.parameters.length-1)}return P}function h(t,r,n,i,o){var s=e.symbolToDisplayParts(n,t),c=e.createPrinter({removeComments:!0}),u=r.map((function(e){return S(e,n,i,o,c)})),l=t.getDocumentationComment(n),_=t.getJsDocTags(n);return{isVariadic:!1,prefixDisplayParts:a(a([],s,!0),[e.punctuationPart(29)],!1),suffixDisplayParts:[e.punctuationPart(31)],separatorDisplayParts:b,parameters:u,documentation:l,tags:_}}var b=[e.punctuationPart(27),e.spacePart()];function x(t,r,n,i){var o=(t.target||t).typeParameters,s=e.createPrinter({removeComments:!0}),c=(o||e.emptyArray).map((function(e){return S(e,r,n,i,s)})),u=t.thisParameter?[r.symbolToParameterDeclaration(t.thisParameter,n,y)]:[];return r.getExpandedParameters(t).map((function(t){var o=e.factory.createNodeArray(a(a([],u,!0),e.map(t,(function(e){return r.symbolToParameterDeclaration(e,n,y)})),!0)),l=e.mapToDisplayParts((function(e){s.writeList(2576,o,i,e)}));return{isVariadic:!1,parameters:c,prefix:[e.punctuationPart(29)],suffix:a([e.punctuationPart(31)],l,!0)}}))}function D(t,r,n,i){var o=e.createPrinter({removeComments:!0}),s=e.mapToDisplayParts((function(a){if(t.typeParameters&&t.typeParameters.length){var s=e.factory.createNodeArray(t.typeParameters.map((function(e){return r.typeParameterToDeclaration(e,n,y)})));o.writeList(53776,s,i,a)}})),c=r.getExpandedParameters(t),u=r.hasEffectiveRestParameter(t)?1===c.length?function(e){return!0}:function(e){return!!(e.length&&32768&e[e.length-1].checkFlags)}:function(e){return!1};return c.map((function(t){return{isVariadic:u(t),parameters:t.map((function(t){return function(t,r,n,i,a){var o=e.mapToDisplayParts((function(e){var o=r.symbolToParameterDeclaration(t,n,y);a.writeNode(4,o,i,e)})),s=r.isOptionalParameter(t.valueDeclaration),c=!!(32768&t.checkFlags);return{name:t.name,documentation:t.getDocumentationComment(r),displayParts:o,isOptional:s,isRest:c}}(t,r,n,i,o)})),prefix:a(a([],s,!0),[e.punctuationPart(20)],!1),suffix:[e.punctuationPart(21)]}}))}function S(t,r,n,i,a){var o=e.mapToDisplayParts((function(e){var o=r.typeParameterToDeclaration(t,n,y);a.writeNode(4,o,i,e)}));return{name:t.symbol.name,documentation:t.symbol.getDocumentationComment(r),displayParts:o,isOptional:!1,isRest:!1}}}(e.SignatureHelp||(e.SignatureHelp={}))}(_||(_={})),function(e){!function(t){function r(e){return"literals"===e.includeInlayParameterNameHints}t.provideInlayHints=function(t){var n=t.file,i=t.program,a=t.span,o=t.cancellationToken,s=t.preferences,c=n.text,u=i.getCompilerOptions(),l=i.getTypeChecker(),_=[];return function t(i){if(!i||0===i.getFullWidth())return;switch(i.kind){case 264:case 260:case 261:case 259:case 228:case 215:case 171:case 216:o.throwIfCancellationRequested()}if(!e.textSpanIntersectsWith(a,i.pos,i.getFullWidth()))return;if(e.isTypeNode(i)&&!e.isExpressionWithTypeArguments(i))return;s.includeInlayVariableTypeHints&&e.isVariableDeclaration(i)||s.includeInlayPropertyDeclarationTypeHints&&e.isPropertyDeclaration(i)?g(i):s.includeInlayEnumMemberValueHints&&e.isEnumMember(i)?function(e){if(e.initializer)return;var t=l.getConstantValue(e);void 0!==t&&(r=t.toString(),n=e.end,_.push({text:"= ".concat(b(r,30)),position:n,kind:"Enum",whitespaceBefore:!0}));var r,n}(i):function(e){return"literals"===e.includeInlayParameterNameHints||"all"===e.includeInlayParameterNameHints}(s)&&(e.isCallExpression(i)||e.isNewExpression(i))?function(t){var n=t.arguments;if(!n||!n.length)return;var i=[],a=l.getResolvedSignatureForSignatureHelp(t,i);if(!a||!i.length)return;for(var o=0;o<n.length;++o){var c=n[o],u=e.skipParentheses(c);if(!r(s)||v(u)){var _=l.getParameterIdentifierNameAtPosition(a,o);if(_){var p=_[0],f=_[1];if(!(s.includeInlayParameterNameHintsWhenArgumentMatchesName||!m(u,p))&&!f)continue;var g=e.unescapeLeadingUnderscores(p);if(y(u,g))continue;d(g,c.getStart(),f)}}}}(i):(s.includeInlayFunctionParameterTypeHints&&e.isFunctionLikeDeclaration(i)&&e.hasContextSensitiveParameters(i)&&function(t){var r=l.getSignatureFromDeclaration(t);if(!r)return;for(var n=0;n<t.parameters.length&&n<r.parameters.length;++n){var i=t.parameters[n];if(D(i))if(!e.getEffectiveTypeAnnotationNode(i)){var a=h(r.parameters[n]);a&&p(a,i.questionToken?i.questionToken.end:i.name.end)}}}(i),s.includeInlayFunctionLikeReturnTypeHints&&function(t){return e.isArrowFunction(t)||e.isFunctionExpression(t)||e.isFunctionDeclaration(t)||e.isMethodDeclaration(t)||e.isGetAccessorDeclaration(t)}(i)&&function(t){if(e.isArrowFunction(t)&&!e.findChildOfKind(t,20,n))return;if(e.getEffectiveReturnTypeNode(t)||!t.body)return;var r=l.getSignatureFromDeclaration(t);if(!r)return;var i=l.getReturnTypeOfSignature(r);if(f(i))return;var a=x(i);if(!a)return;p(a,function(t){var r=e.findChildOfKind(t,21,n);if(r)return r.end;return t.parameters.end}(t))}(i));return e.forEachChild(i,t)}(n),_;function d(e,t,r){_.push({text:"".concat(r?"...":"").concat(b(e,30),":"),position:t,kind:"Parameter",whitespaceAfter:!0})}function p(e,t){_.push({text:": ".concat(b(e,30)),position:t,kind:"Type",whitespaceBefore:!0})}function f(e){return e.symbol&&1536&e.symbol.flags}function g(t){if(t.initializer&&!e.isBindingPattern(t.name)&&(!e.isVariableDeclaration(t)||D(t))&&!e.getEffectiveTypeAnnotationNode(t)){var r=l.getTypeAtLocation(t);if(!f(r)){var n=x(r);if(n){if(!1===s.includeInlayVariableTypeHintsWhenTypeMatchesName&&e.equateStringsCaseInsensitive(t.name.getText(),n))return;p(n,t.name.end)}}}}function m(t,r){return e.isIdentifier(t)?t.text===r:!!e.isPropertyAccessExpression(t)&&t.name.text===r}function y(t,r){if(!e.isIdentifierText(r,u.target,e.getLanguageVariant(n.scriptKind)))return!1;var i=e.getLeadingCommentRanges(c,t.pos);if(!(null==i?void 0:i.length))return!1;var a=function(e){return new RegExp("^\\s?/\\*\\*?\\s?".concat(e,"\\s?\\*\\/\\s?$"))}(r);return e.some(i,(function(e){return a.test(c.substring(e.pos,e.end))}))}function v(t){switch(t.kind){case 221:var r=t.operand;return e.isLiteralExpression(r)||e.isIdentifier(r)&&e.isInfinityOrNaNString(r.escapedText);case 110:case 95:case 104:case 14:case 225:return!0;case 79:var n=t.escapedText;return function(e){return"undefined"===e}(n)||e.isInfinityOrNaNString(n)}return e.isLiteralExpression(t)}function h(t){var r=t.valueDeclaration;if(r&&e.isParameter(r)){var n=l.getTypeOfSymbolAtLocation(t,r);if(!f(n))return x(n)}}function b(e,t){return e.length>t?e.substr(0,t-"...".length)+"...":e}function x(t){var r=e.createPrinter({removeComments:!0});return e.usingSingleLineStringWriter((function(i){var a=l.typeToTypeNode(t,void 0,71286784,i);e.Debug.assertIsDefined(a,"should always get typenode"),r.writeNode(4,a,n,i)}))}function D(t){if((e.isParameterDeclaration(t)||e.isVariableDeclaration(t)&&e.isVarConst(t))&&t.initializer){var r=e.skipParentheses(t.initializer);return!(v(r)||e.isNewExpression(r)||e.isObjectLiteralExpression(r)||e.isAssertionExpression(r))}return!0}}}(e.InlayHints||(e.InlayHints={}))}(_||(_={})),function(e){var t=/^data:(?:application\/json(?:;charset=[uU][tT][fF]-8);base64,([A-Za-z0-9+\/=]+)$)?/;function r(t,r,n){var i=e.tryParseRawSourceMap(r);if(i&&i.sources&&i.file&&i.mappings&&(!i.sourcesContent||!i.sourcesContent.some(e.isString)))return e.createDocumentPositionMapper(t,i,n)}e.getSourceMapper=function(t){var r=e.createGetCanonicalFileName(t.useCaseSensitiveFileNames()),n=t.getCurrentDirectory(),i=new e.Map,a=new e.Map;return{tryGetSourcePosition:function t(r){if(!e.isDeclarationFileName(r.fileName))return;if(!c(r.fileName))return;var n=s(r.fileName).getSourcePosition(r);return n&&n!==r?t(n)||n:void 0},tryGetGeneratedPosition:function(i){if(e.isDeclarationFileName(i.fileName))return;var a=c(i.fileName);if(!a)return;var o=t.getProgram();if(o.isSourceOfProjectReferenceRedirect(a.fileName))return;var u=o.getCompilerOptions(),l=e.outFile(u),_=l?e.removeFileExtension(l)+".d.ts":e.getDeclarationEmitOutputFilePathWorker(i.fileName,o.getCompilerOptions(),n,o.getCommonSourceDirectory(),r);if(void 0===_)return;var d=s(_,i.fileName).getGeneratedPosition(i);return d===i?void 0:d},toLineColumnOffset:function(e,t){return l(e).getLineAndCharacterOfPosition(t)},clearCache:function(){i.clear(),a.clear()}};function o(t){return e.toPath(t,n,r)}function s(n,i){var s,c=o(n),u=a.get(c);if(u)return u;if(t.getDocumentPositionMapper)s=t.getDocumentPositionMapper(n,i);else if(t.readFile){var _=l(n);s=_&&e.getDocumentPositionMapper({getSourceFileLike:l,getCanonicalFileName:r,log:function(e){return t.log(e)}},n,e.getLineInfo(_.text,e.getLineStarts(_)),(function(e){return!t.fileExists||t.fileExists(e)?t.readFile(e):void 0}))}return a.set(c,s||e.identitySourceMapConsumer),s||e.identitySourceMapConsumer}function c(e){var r=t.getProgram();if(r){var n=o(e),i=r.getSourceFileByPath(n);return i&&i.resolvedPath===n?i:void 0}}function u(r){var n=o(r),a=i.get(n);if(void 0!==a)return a||void 0;if(t.readFile&&(!t.fileExists||t.fileExists(n))){var s=t.readFile(n),c=!!s&&function(t,r){return{text:t,lineMap:r,getLineAndCharacterOfPosition:function(t){return e.computeLineAndCharacterOfPosition(e.getLineStarts(this),t)}}}(s);return i.set(n,c),c||void 0}i.set(n,!1)}function l(e){return t.getSourceFileLike?t.getSourceFileLike(e):c(e)||u(e)}},e.getDocumentPositionMapper=function(n,i,a,o){var s=e.tryGetSourceMappingURL(a);if(s){var c=t.exec(s);if(c){if(c[1]){var u=c[1];return r(n,e.base64decode(e.sys,u),i)}s=void 0}}var l=[];s&&l.push(s),l.push(i+".map");for(var _=s&&e.getNormalizedAbsolutePath(s,e.getDirectoryPath(i)),d=0,p=l;d<p.length;d++){var f=p[d],g=e.getNormalizedAbsolutePath(f,e.getDirectoryPath(i)),m=o(g,_);if(e.isString(m))return r(n,m,g);if(void 0!==m)return m||void 0}}}(_||(_={})),function(e){var t=new e.Map;function r(t){return e.isPropertyAccessExpression(t)?r(t.expression):t}function n(t){switch(t.kind){case 269:var r=t.importClause,n=t.moduleSpecifier;return r&&!r.name&&r.namedBindings&&271===r.namedBindings.kind&&e.isStringLiteral(n)?r.namedBindings.name:void 0;case 268:return t.name;default:return}}function i(e,t){var r=t.getSignatureFromDeclaration(e),n=r?t.getReturnTypeOfSignature(r):void 0;return!!n&&!!t.getPromisedTypeOfPromise(n)}function a(t,r){return e.isReturnStatement(t)&&!!t.expression&&o(t.expression,r)}function o(t,r){if(!s(t)||!c(t)||!t.arguments.every((function(e){return u(e,r)})))return!1;for(var n=t.expression.expression;s(n)||e.isPropertyAccessExpression(n);)if(e.isCallExpression(n)){if(!c(n)||!n.arguments.every((function(e){return u(e,r)})))return!1;n=n.expression.expression}else n=n.expression;return!0}function s(t){return e.isCallExpression(t)&&(e.hasPropertyAccessExpressionWithName(t,"then")||e.hasPropertyAccessExpressionWithName(t,"catch")||e.hasPropertyAccessExpressionWithName(t,"finally"))}function c(t){var r=t.expression.name.text,n="then"===r?2:"catch"===r||"finally"===r?1:0;return!(t.arguments.length>n)&&(t.arguments.length<n||(1===n||e.some(t.arguments,(function(t){return 104===t.kind||e.isIdentifier(t)&&"undefined"===t.text}))))}function u(r,n){switch(r.kind){case 259:case 215:if(1&e.getFunctionFlags(r))return!1;case 216:t.set(l(r),!0);case 104:return!0;case 79:case 208:var i=n.getSymbolAtLocation(r);return!!i&&(n.isUndefinedSymbol(i)||e.some(e.skipAlias(i,n).declarations,(function(t){return e.isFunctionLike(t)||e.hasInitializer(t)&&!!t.initializer&&e.isFunctionLike(t.initializer)})));default:return!1}}function l(e){return"".concat(e.pos.toString(),":").concat(e.end.toString())}function _(e){switch(e.kind){case 259:case 171:case 215:case 216:return!0;default:return!1}}e.computeSuggestionDiagnostics=function(o,s,c){s.getSemanticDiagnostics(o,c);var u,d=[],p=s.getTypeChecker();!(o.impliedNodeFormat===e.ModuleKind.CommonJS||e.fileExtensionIsOneOf(o.fileName,[".cts",".cjs"]))&&o.commonJsModuleIndicator&&(e.programContainsEsModules(s)||e.compilerOptionsIndicateEsModules(s.getCompilerOptions()))&&function(t){return t.statements.some((function(t){switch(t.kind){case 240:return t.declarationList.declarations.some((function(t){return!!t.initializer&&e.isRequireCall(r(t.initializer),!0)}));case 241:var n=t.expression;if(!e.isBinaryExpression(n))return e.isRequireCall(n,!0);var i=e.getAssignmentDeclarationKind(n);return 1===i||2===i;default:return!1}}))}(o)&&d.push(e.createDiagnosticForNode((u=o.commonJsModuleIndicator,e.isBinaryExpression(u)?u.left:u),e.Diagnostics.File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module));var f=e.isSourceFileJS(o);if(t.clear(),function r(n){if(f)(function(t,r){var n,i,a,o;if(215===t.kind){if(e.isVariableDeclaration(t.parent)&&(null===(n=t.symbol.members)||void 0===n?void 0:n.size))return!0;var s=r.getSymbolOfExpando(t,!1);return!(!s||!(null===(i=s.exports)||void 0===i?void 0:i.size)&&!(null===(a=s.members)||void 0===a?void 0:a.size))}if(259===t.kind)return!!(null===(o=t.symbol.members)||void 0===o?void 0:o.size);return!1})(n,p)&&d.push(e.createDiagnosticForNode(e.isVariableDeclaration(n.parent)?n.parent.name:n,e.Diagnostics.This_constructor_function_may_be_converted_to_a_class_declaration));else{if(e.isVariableStatement(n)&&n.parent===o&&2&n.declarationList.flags&&1===n.declarationList.declarations.length){var s=n.declarationList.declarations[0].initializer;s&&e.isRequireCall(s,!0)&&d.push(e.createDiagnosticForNode(s,e.Diagnostics.require_call_may_be_converted_to_an_import))}e.codefix.parameterShouldGetTypeFromJSDoc(n)&&d.push(e.createDiagnosticForNode(n.name||n,e.Diagnostics.JSDoc_types_may_be_moved_to_TypeScript_types))}_(n)&&function(r,n,o){(function(t,r){return!e.isAsyncFunction(t)&&t.body&&e.isBlock(t.body)&&function(t,r){return!!e.forEachReturnStatement(t,(function(e){return a(e,r)}))}(t.body,r)&&i(t,r)})(r,n)&&!t.has(l(r))&&o.push(e.createDiagnosticForNode(!r.name&&e.isVariableDeclaration(r.parent)&&e.isIdentifier(r.parent.name)?r.parent.name:r,e.Diagnostics.This_may_be_converted_to_an_async_function))}(n,p,d);n.forEachChild(r)}(o),e.getAllowSyntheticDefaultImports(s.getCompilerOptions()))for(var g=0,m=o.imports;g<m.length;g++){var y=m[g],v=n(e.importFromModuleSpecifier(y));if(v){var h=e.getResolvedModule(o,y.text,e.getModeForUsageLocation(o,y)),b=h&&s.getSourceFile(h.resolvedFileName);b&&b.externalModuleIndicator&&!0!==b.externalModuleIndicator&&e.isExportAssignment(b.externalModuleIndicator)&&b.externalModuleIndicator.isExportEquals&&d.push(e.createDiagnosticForNode(v,e.Diagnostics.Import_may_be_converted_to_a_default_import))}}return e.addRange(d,o.bindSuggestionDiagnostics),e.addRange(d,s.getSuggestionDiagnostics(o,c)),d.sort((function(e,t){return e.start-t.start}))},e.returnsPromise=i,e.isReturnStatementWithFixablePromiseHandler=a,e.isFixablePromiseHandler=o,e.canBeConvertedToAsync=_}(_||(_={})),function(e){!function(t){var r=70246400;function n(t,r,n){var a=i(t,r,n);if(""!==a)return a;var o=e.getCombinedLocalAndExportSymbolFlags(r);return 32&o?e.getDeclarationOfKind(r,228)?"local class":"class":384&o?"enum":524288&o?"type":64&o?"interface":262144&o?"type parameter":8&o?"enum member":2097152&o?"alias":1536&o?"module":a}function i(t,r,n){var i=t.getRootSymbols(r);if(1===i.length&&8192&e.first(i).flags&&0!==t.getTypeOfSymbolAtLocation(r,n).getNonNullableType().getCallSignatures().length)return"method";if(t.isUndefinedSymbol(r))return"var";if(t.isArgumentsSymbol(r))return"local var";if(108===n.kind&&e.isExpression(n)||e.isThisInTypeQuery(n))return"parameter";var a=e.getCombinedLocalAndExportSymbolFlags(r);if(3&a)return e.isFirstDeclarationOfSymbolParameter(r)?"parameter":r.valueDeclaration&&e.isVarConst(r.valueDeclaration)?"const":e.forEach(r.declarations,e.isLet)?"let":o(r)?"local var":"var";if(16&a)return o(r)?"local function":"function";if(32768&a)return"getter";if(65536&a)return"setter";if(8192&a)return"method";if(16384&a)return"constructor";if(131072&a)return"index";if(4&a){if(33554432&a&&6&r.checkFlags){var s=e.forEach(t.getRootSymbols(r),(function(e){if(98311&e.getFlags())return"property"}));return s||(t.getTypeOfSymbolAtLocation(r,n).getCallSignatures().length?"method":"property")}return"property"}return""}function a(t){if(t.declarations&&t.declarations.length){var r=t.declarations,n=r[0],i=r.slice(1),a=e.length(i)&&e.isDeprecatedDeclaration(n)&&e.some(i,(function(t){return!e.isDeprecatedDeclaration(t)}))?8192:0,o=e.getNodeModifiers(n,a);if(o)return o.split(",")}return[]}function o(t){return!t.parent&&e.forEach(t.declarations,(function(t){if(215===t.kind)return!0;if(257!==t.kind&&259!==t.kind)return!1;for(var r=t.parent;!e.isFunctionBlock(r);r=r.parent)if(308===r.kind||265===r.kind)return!1;return!0}))}t.getSymbolKind=n,t.getSymbolModifiers=function(t,r){if(!r)return"";var n=new e.Set(a(r));if(2097152&r.flags){var i=t.getAliasedSymbol(r);i!==r&&e.forEach(a(i),(function(e){n.add(e)}))}return 16777216&r.flags&&n.add("optional"),n.size>0?e.arrayFrom(n.values()).join(","):""},t.getSymbolDisplayPartsDocumentationAndSymbolKind=function t(a,o,s,c,u,l,_){var d;void 0===l&&(l=e.getMeaningFromLocation(u));var p,f,g,m,y=[],v=[],h=[],b=e.getCombinedLocalAndExportSymbolFlags(o),x=1&l?i(a,o,u):"",D=!1,S=108===u.kind&&e.isInExpressionContext(u)||e.isThisInTypeQuery(u),T=!1;if(108===u.kind&&!S)return{displayParts:[e.keywordPart(108)],documentation:[],symbolKind:"primitive type",tags:void 0};if(""!==x||32&b||2097152&b){if("getter"===x||"setter"===x)if(W=e.find(o.declarations,(function(e){return e.name===u})))switch(W.kind){case 174:x="getter";break;case 175:x="setter";break;case 169:x="accessor";break;default:e.Debug.assertNever(W)}else x="property";var C=void 0;if(p=S?a.getTypeAtLocation(u):a.getTypeOfSymbolAtLocation(o,u),u.parent&&208===u.parent.kind){var E=u.parent.name;(E===u||E&&0===E.getFullWidth())&&(u=u.parent)}var k=void 0;if(e.isCallOrNewExpression(u)?k=u:(e.isCallExpressionTarget(u)||e.isNewExpressionTarget(u)||u.parent&&(e.isJsxOpeningLikeElement(u.parent)||e.isTaggedTemplateExpression(u.parent))&&e.isFunctionLike(o.valueDeclaration))&&(k=u.parent),k){C=a.getResolvedSignature(k);var N=211===k.kind||e.isCallExpression(k)&&106===k.expression.kind,A=N?p.getConstructSignatures():p.getCallSignatures();if(!C||e.contains(A,C.target)||e.contains(A,C)||(C=A.length?A[0]:void 0),C){switch(N&&32&b?(x="constructor",te(p.symbol,x)):2097152&b?(re(x="alias"),y.push(e.spacePart()),N&&(4&C.flags&&(y.push(e.keywordPart(126)),y.push(e.spacePart())),y.push(e.keywordPart(103)),y.push(e.spacePart())),ee(o)):te(o,x),x){case"JSX attribute":case"property":case"var":case"const":case"let":case"parameter":case"local var":y.push(e.punctuationPart(58)),y.push(e.spacePart()),16&e.getObjectFlags(p)||!p.symbol||(e.addRange(y,e.symbolToDisplayParts(a,p.symbol,c,void 0,5)),y.push(e.lineBreakPart())),N&&(4&C.flags&&(y.push(e.keywordPart(126)),y.push(e.spacePart())),y.push(e.keywordPart(103)),y.push(e.spacePart())),ne(C,A,262144);break;default:ne(C,A)}D=!0,T=A.length>1}}else if(e.isNameOfFunctionDeclaration(u)&&!(98304&b)||135===u.kind&&173===u.parent.kind){var F=u.parent,P=o.declarations&&e.find(o.declarations,(function(e){return e===(135===u.kind?F.parent:F)}));if(P){A=173===F.kind?p.getNonNullableType().getConstructSignatures():p.getNonNullableType().getCallSignatures();C=a.isImplementationOfOverload(F)?A[0]:a.getSignatureFromDeclaration(F),173===F.kind?(x="constructor",te(p.symbol,x)):te(176!==F.kind||2048&p.symbol.flags||4096&p.symbol.flags?o:p.symbol,x),C&&ne(C,A),D=!0,T=A.length>1}}}if(32&b&&!D&&!S&&(Z(),e.getDeclarationOfKind(o,228)?re("local class"):y.push(e.keywordPart(84)),y.push(e.spacePart()),ee(o),ie(o,s)),64&b&&2&l&&(Y(),y.push(e.keywordPart(118)),y.push(e.spacePart()),ee(o),ie(o,s)),524288&b&&2&l&&(Y(),y.push(e.keywordPart(154)),y.push(e.spacePart()),ee(o),ie(o,s),y.push(e.spacePart()),y.push(e.operatorPart(63)),y.push(e.spacePart()),e.addRange(y,e.typeToDisplayParts(a,e.isConstTypeReference(u.parent)?a.getTypeAtLocation(u.parent):a.getDeclaredTypeOfSymbol(o),c,8388608))),384&b&&(Y(),e.some(o.declarations,(function(t){return e.isEnumDeclaration(t)&&e.isEnumConst(t)}))&&(y.push(e.keywordPart(85)),y.push(e.spacePart())),y.push(e.keywordPart(92)),y.push(e.spacePart()),ee(o)),1536&b&&!S){Y();var w=(W=e.getDeclarationOfKind(o,264))&&W.name&&79===W.name.kind;y.push(e.keywordPart(w?143:142)),y.push(e.spacePart()),ee(o)}if(262144&b&&2&l)if(Y(),y.push(e.punctuationPart(20)),y.push(e.textPart("type parameter")),y.push(e.punctuationPart(21)),y.push(e.spacePart()),ee(o),o.parent)$(),ee(o.parent,c),ie(o.parent,c);else{var I=e.getDeclarationOfKind(o,165);if(void 0===I)return e.Debug.fail();if(W=I.parent)if(e.isFunctionLikeKind(W.kind)){$();C=a.getSignatureFromDeclaration(W);177===W.kind?(y.push(e.keywordPart(103)),y.push(e.spacePart())):176!==W.kind&&W.name&&ee(W.symbol),e.addRange(y,e.signatureToDisplayParts(a,C,s,32))}else 262===W.kind&&($(),y.push(e.keywordPart(154)),y.push(e.spacePart()),ee(W.symbol),ie(W.symbol,s))}if(8&b&&(x="enum member",te(o,"enum member"),302===(null==(W=null===(d=o.declarations)||void 0===d?void 0:d[0])?void 0:W.kind))){var O=a.getConstantValue(W);void 0!==O&&(y.push(e.spacePart()),y.push(e.operatorPart(63)),y.push(e.spacePart()),y.push(e.displayPart(e.getTextOfConstantValue(O),"number"==typeof O?e.SymbolDisplayPartKind.numericLiteral:e.SymbolDisplayPartKind.stringLiteral)))}if(2097152&o.flags){if(Y(),!D){var M=a.getAliasedSymbol(o);if(M!==o&&M.declarations&&M.declarations.length>0){var L=M.declarations[0],R=e.getNameOfDeclaration(L);if(R){var B=e.isModuleWithStringLiteralName(L)&&e.hasSyntacticModifier(L,2),j="default"!==o.name&&!B,J=t(a,M,e.getSourceFileOfNode(L),L,R,l,j?o:M);y.push.apply(y,J.displayParts),y.push(e.lineBreakPart()),g=J.documentation,m=J.tags}else g=M.getContextualDocumentationComment(L,a),m=M.getJsDocTags(a)}}if(o.declarations)switch(o.declarations[0].kind){case 267:y.push(e.keywordPart(93)),y.push(e.spacePart()),y.push(e.keywordPart(143));break;case 274:y.push(e.keywordPart(93)),y.push(e.spacePart()),y.push(e.keywordPart(o.declarations[0].isExportEquals?63:88));break;case 278:y.push(e.keywordPart(93));break;default:y.push(e.keywordPart(100))}y.push(e.spacePart()),ee(o),e.forEach(o.declarations,(function(t){if(268===t.kind){var r=t;if(e.isExternalModuleImportEqualsDeclaration(r))y.push(e.spacePart()),y.push(e.operatorPart(63)),y.push(e.spacePart()),y.push(e.keywordPart(147)),y.push(e.punctuationPart(20)),y.push(e.displayPart(e.getTextOfNode(e.getExternalModuleImportEqualsDeclarationExpression(r)),e.SymbolDisplayPartKind.stringLiteral)),y.push(e.punctuationPart(21));else{var n=a.getSymbolAtLocation(r.moduleReference);n&&(y.push(e.spacePart()),y.push(e.operatorPart(63)),y.push(e.spacePart()),ee(n,c))}return!0}}))}if(!D)if(""!==x){if(p)if(S?(Y(),y.push(e.keywordPart(108))):te(o,x),"property"===x||"accessor"===x||"getter"===x||"setter"===x||"JSX attribute"===x||3&b||"local var"===x||"index"===x||S){if(y.push(e.punctuationPart(58)),y.push(e.spacePart()),p.symbol&&262144&p.symbol.flags&&"index"!==x){var z=e.mapToDisplayParts((function(t){var n=a.typeParameterToDeclaration(p,c,r);X().writeNode(4,n,e.getSourceFileOfNode(e.getParseTreeNode(c)),t)}));e.addRange(y,z)}else e.addRange(y,e.typeToDisplayParts(a,p,c));if(o.target&&o.target.tupleLabelDeclaration){var U=o.target.tupleLabelDeclaration;e.Debug.assertNode(U.name,e.isIdentifier),y.push(e.spacePart()),y.push(e.punctuationPart(20)),y.push(e.textPart(e.idText(U.name))),y.push(e.punctuationPart(21))}}else if(16&b||8192&b||16384&b||131072&b||98304&b||"method"===x){(A=p.getNonNullableType().getCallSignatures()).length&&(ne(A[0],A),T=A.length>1)}}else x=n(a,o,u);if(0!==v.length||T||(v=o.getContextualDocumentationComment(c,a)),0===v.length&&4&b&&o.parent&&o.declarations&&e.forEach(o.parent.declarations,(function(e){return 308===e.kind})))for(var K=0,V=o.declarations;K<V.length;K++){if((W=V[K]).parent&&223===W.parent.kind){var q=a.getSymbolAtLocation(W.parent.right);if(q&&(v=q.getDocumentationComment(a),h=q.getJsDocTags(a),v.length>0))break}}if(0===v.length&&e.isIdentifier(u)&&o.valueDeclaration&&e.isBindingElement(o.valueDeclaration)){var W,H=(W=o.valueDeclaration).parent;if(e.isIdentifier(W.name)&&e.isObjectBindingPattern(H)){var G=e.getTextOfIdentifierOrLiteral(W.name),Q=a.getTypeAtLocation(H);v=e.firstDefined(Q.isUnion()?Q.types:[Q],(function(e){var t=e.getProperty(G);return t?t.getDocumentationComment(a):void 0}))||e.emptyArray}}return 0!==h.length||T||(h=o.getContextualJsDocTags(c,a)),0===v.length&&g&&(v=g),0===h.length&&m&&(h=m),{displayParts:y,documentation:v,symbolKind:x,tags:0===h.length?void 0:h};function X(){return f||(f=e.createPrinter({removeComments:!0})),f}function Y(){y.length&&y.push(e.lineBreakPart()),Z()}function Z(){_&&(re("alias"),y.push(e.spacePart()))}function $(){y.push(e.spacePart()),y.push(e.keywordPart(101)),y.push(e.spacePart())}function ee(t,r){var n;_&&t===o&&(t=_),"index"===x&&(n=a.getIndexInfosOfIndexSymbol(t));var i=[];131072&t.flags&&n?(t.parent&&(i=e.symbolToDisplayParts(a,t.parent)),i.push(e.punctuationPart(22)),n.forEach((function(t,r){i.push.apply(i,e.typeToDisplayParts(a,t.keyType)),r!==n.length-1&&(i.push(e.spacePart()),i.push(e.punctuationPart(51)),i.push(e.spacePart()))})),i.push(e.punctuationPart(23))):i=e.symbolToDisplayParts(a,t,r||s,void 0,7),e.addRange(y,i),16777216&o.flags&&y.push(e.punctuationPart(57))}function te(t,r){Y(),r&&(re(r),t&&!e.some(t.declarations,(function(t){return e.isArrowFunction(t)||(e.isFunctionExpression(t)||e.isClassExpression(t))&&!t.name}))&&(y.push(e.spacePart()),ee(t)))}function re(t){switch(t){case"var":case"function":case"let":case"const":case"constructor":return void y.push(e.textOrKeywordPart(t));default:return y.push(e.punctuationPart(20)),y.push(e.textOrKeywordPart(t)),void y.push(e.punctuationPart(21))}}function ne(t,r,n){void 0===n&&(n=0),e.addRange(y,e.signatureToDisplayParts(a,t,c,32|n)),r.length>1&&(y.push(e.spacePart()),y.push(e.punctuationPart(20)),y.push(e.operatorPart(39)),y.push(e.displayPart((r.length-1).toString(),e.SymbolDisplayPartKind.numericLiteral)),y.push(e.spacePart()),y.push(e.textPart(2===r.length?"overload":"overloads")),y.push(e.punctuationPart(21))),v=t.getDocumentationComment(a),h=t.getJsDocTags(),r.length>1&&0===v.length&&0===h.length&&(v=r[0].getDocumentationComment(a),h=r[0].getJsDocTags().filter((function(e){return"deprecated"!==e.name})))}function ie(t,n){var i=e.mapToDisplayParts((function(i){var o=a.symbolToTypeParameterDeclarations(t,n,r);X().writeList(53776,o,e.getSourceFileOfNode(e.getParseTreeNode(n)),i)}));e.addRange(y,i)}}}(e.SymbolDisplay||(e.SymbolDisplay={}))}(_||(_={})),function(e){function t(t,r){var i=[],a=r.compilerOptions?n(r.compilerOptions,i):{},o=e.getDefaultCompilerOptions();for(var s in o)e.hasProperty(o,s)&&void 0===a[s]&&(a[s]=o[s]);for(var c=0,u=e.transpileOptionValueCompilerOptions;c<u.length;c++){var l=u[c];a[l.name]=l.transpileOptionValue}a.suppressOutputPathCheck=!0,a.allowNonTsExtensions=!0;var _,d,p=e.getNewLineCharacter(a),f={getSourceFile:function(t){return t===e.normalizePath(g)?m:void 0},writeFile:function(t,r){e.fileExtensionIs(t,".map")?(e.Debug.assertEqual(d,void 0,"Unexpected multiple source map outputs, file:",t),d=r):(e.Debug.assertEqual(_,void 0,"Unexpected multiple outputs, file:",t),_=r)},getDefaultLibFileName:function(){return"lib.d.ts"},useCaseSensitiveFileNames:function(){return!1},getCanonicalFileName:function(e){return e},getCurrentDirectory:function(){return""},getNewLine:function(){return p},fileExists:function(e){return e===g},readFile:function(){return""},directoryExists:function(){return!0},getDirectories:function(){return[]}},g=r.fileName||(r.compilerOptions&&r.compilerOptions.jsx?"module.tsx":"module.ts"),m=e.createSourceFile(g,t,{languageVersion:e.getEmitScriptTarget(a),impliedNodeFormat:e.getImpliedNodeFormatForFile(e.toPath(g,"",f.getCanonicalFileName),void 0,f,a),setExternalModuleIndicator:e.getSetExternalModuleIndicator(a)});r.moduleName&&(m.moduleName=r.moduleName),r.renamedDependencies&&(m.renamedDependencies=new e.Map(e.getEntries(r.renamedDependencies)));var y=e.createProgram([g],a,f);return r.reportDiagnostics&&(e.addRange(i,y.getSyntacticDiagnostics(m)),e.addRange(i,y.getOptionsDiagnostics())),y.emit(void 0,void 0,void 0,void 0,r.transformers),void 0===_?e.Debug.fail("Output generation failed"):{outputText:_,diagnostics:i,sourceMapText:d}}var r;function n(t,n){r=r||e.filter(e.optionDeclarations,(function(t){return"object"==typeof t.type&&!e.forEachEntry(t.type,(function(e){return"number"!=typeof e}))})),t=e.cloneCompilerOptions(t);for(var i=function(r){if(!e.hasProperty(t,r.name))return"continue";var i=t[r.name];e.isString(i)?t[r.name]=e.parseCustomTypeOption(r,i,n):e.forEachEntry(r.type,(function(e){return e===i}))||n.push(e.createCompilerDiagnosticForInvalidCustomType(r))},a=0,o=r;a<o.length;a++){i(o[a])}return t}e.transpileModule=t,e.transpile=function(r,n,i,a,o){var s=t(r,{compilerOptions:n,fileName:i,reportDiagnostics:!!a,moduleName:o});return e.addRange(a,s.diagnostics),s.outputText},e.fixupCompilerOptions=n}(_||(_={})),function(e){!function(t){!function(e){e[e.FormatDocument=0]="FormatDocument",e[e.FormatSelection=1]="FormatSelection",e[e.FormatOnEnter=2]="FormatOnEnter",e[e.FormatOnSemicolon=3]="FormatOnSemicolon",e[e.FormatOnOpeningCurlyBrace=4]="FormatOnOpeningCurlyBrace",e[e.FormatOnClosingCurlyBrace=5]="FormatOnClosingCurlyBrace"}(t.FormattingRequestKind||(t.FormattingRequestKind={}));var r=function(){function t(e,t,r){this.sourceFile=e,this.formattingRequestKind=t,this.options=r}return t.prototype.updateContext=function(t,r,n,i,a){this.currentTokenSpan=e.Debug.checkDefined(t),this.currentTokenParent=e.Debug.checkDefined(r),this.nextTokenSpan=e.Debug.checkDefined(n),this.nextTokenParent=e.Debug.checkDefined(i),this.contextNode=e.Debug.checkDefined(a),this.contextNodeAllOnSameLine=void 0,this.nextNodeAllOnSameLine=void 0,this.tokensAreOnSameLine=void 0,this.contextNodeBlockIsOnOneLine=void 0,this.nextNodeBlockIsOnOneLine=void 0},t.prototype.ContextNodeAllOnSameLine=function(){return void 0===this.contextNodeAllOnSameLine&&(this.contextNodeAllOnSameLine=this.NodeIsOnOneLine(this.contextNode)),this.contextNodeAllOnSameLine},t.prototype.NextNodeAllOnSameLine=function(){return void 0===this.nextNodeAllOnSameLine&&(this.nextNodeAllOnSameLine=this.NodeIsOnOneLine(this.nextTokenParent)),this.nextNodeAllOnSameLine},t.prototype.TokensAreOnSameLine=function(){if(void 0===this.tokensAreOnSameLine){var e=this.sourceFile.getLineAndCharacterOfPosition(this.currentTokenSpan.pos).line,t=this.sourceFile.getLineAndCharacterOfPosition(this.nextTokenSpan.pos).line;this.tokensAreOnSameLine=e===t}return this.tokensAreOnSameLine},t.prototype.ContextNodeBlockIsOnOneLine=function(){return void 0===this.contextNodeBlockIsOnOneLine&&(this.contextNodeBlockIsOnOneLine=this.BlockIsOnOneLine(this.contextNode)),this.contextNodeBlockIsOnOneLine},t.prototype.NextNodeBlockIsOnOneLine=function(){return void 0===this.nextNodeBlockIsOnOneLine&&(this.nextNodeBlockIsOnOneLine=this.BlockIsOnOneLine(this.nextTokenParent)),this.nextNodeBlockIsOnOneLine},t.prototype.NodeIsOnOneLine=function(e){return this.sourceFile.getLineAndCharacterOfPosition(e.getStart(this.sourceFile)).line===this.sourceFile.getLineAndCharacterOfPosition(e.getEnd()).line},t.prototype.BlockIsOnOneLine=function(t){var r=e.findChildOfKind(t,18,this.sourceFile),n=e.findChildOfKind(t,19,this.sourceFile);return!(!r||!n)&&this.sourceFile.getLineAndCharacterOfPosition(r.getEnd()).line===this.sourceFile.getLineAndCharacterOfPosition(n.getStart(this.sourceFile)).line},t}();t.FormattingContext=r}(e.formatting||(e.formatting={}))}(_||(_={})),function(e){!function(t){var r,n=e.createScanner(99,!1,0),i=e.createScanner(99,!1,1);!function(e){e[e.Scan=0]="Scan",e[e.RescanGreaterThanToken=1]="RescanGreaterThanToken",e[e.RescanSlashToken=2]="RescanSlashToken",e[e.RescanTemplateToken=3]="RescanTemplateToken",e[e.RescanJsxIdentifier=4]="RescanJsxIdentifier",e[e.RescanJsxText=5]="RescanJsxText",e[e.RescanJsxAttributeValue=6]="RescanJsxAttributeValue"}(r||(r={})),t.getFormattingScanner=function(r,a,o,s,c){var u=1===a?i:n;u.setText(r),u.setTextPos(o);var l,_,d,p,f,g=!0,m=c({advance:function(){f=void 0,u.getStartPos()!==o?g=!!_&&4===e.last(_).kind:u.scan();l=void 0,_=void 0;var t=u.getStartPos();for(;t<s;){var r=u.getToken();if(!e.isTrivia(r))break;u.scan();var n={pos:t,end:u.getStartPos(),kind:r};t=u.getStartPos(),l=e.append(l,n)}d=u.getStartPos()},readTokenInfo:function(r){e.Debug.assert(y());var n=function(e){switch(e.kind){case 33:case 71:case 72:case 49:case 48:return!0}return!1}(r)?1:(a=r,13===a.kind?2:function(e){return 16===e.kind||17===e.kind}(r)?3:function(t){if(t.parent)switch(t.parent.kind){case 288:case 283:case 284:case 282:return e.isKeyword(t.kind)||79===t.kind}return!1}(r)?4:(i=r,e.isJsxText(i)||e.isJsxElement(i)&&11===(null==f?void 0:f.token.kind)?5:function(t){return t.parent&&e.isJsxAttribute(t.parent)&&t.parent.initializer===t}(r)?6:0));var i;var a;if(f&&n===p)return h(f,r);u.getStartPos()!==d&&(e.Debug.assert(void 0!==f),u.setTextPos(d),u.scan());var o=function(t,r){var n=u.getToken();switch(p=0,r){case 1:if(31===n){p=1;var i=u.reScanGreaterToken();return e.Debug.assert(t.kind===i),i}break;case 2:if(43===(a=n)||68===a){p=2;i=u.reScanSlashToken();return e.Debug.assert(t.kind===i),i}break;case 3:if(19===n)return p=3,u.reScanTemplateToken(!1);break;case 4:return p=4,u.scanJsxIdentifier();case 5:return p=5,u.reScanJsxToken(!1);case 6:return p=6,u.reScanJsxAttributeValue();case 0:break;default:e.Debug.assertNever(r)}var a;return n}(r,n),c=t.createTextRangeWithKind(u.getStartPos(),u.getTextPos(),o);_&&(_=void 0);for(;u.getStartPos()<s&&(o=u.scan(),e.isTrivia(o));){var g=t.createTextRangeWithKind(u.getStartPos(),u.getTextPos(),o);if(_||(_=[]),_.push(g),4===o){u.scan();break}}return h(f={leadingTrivia:l,trailingTrivia:_,token:c},r)},readEOFTokenRange:function(){return e.Debug.assert(v()),t.createTextRangeWithKind(u.getStartPos(),u.getTextPos(),1)},isOnToken:y,isOnEOF:v,getCurrentLeadingTrivia:function(){return l},lastTrailingTriviaWasNewLine:function(){return g},skipToEndOf:function(e){u.setTextPos(e.end),d=u.getStartPos(),p=void 0,f=void 0,g=!1,l=void 0,_=void 0},skipToStartOf:function(e){u.setTextPos(e.pos),d=u.getStartPos(),p=void 0,f=void 0,g=!1,l=void 0,_=void 0},getStartPos:function(){var e;return null!==(e=null==f?void 0:f.token.pos)&&void 0!==e?e:u.getTokenPos()}});return f=void 0,u.setText(void 0),m;function y(){var t=f?f.token.kind:u.getToken();return 1!==t&&!e.isTrivia(t)}function v(){return 1===(f?f.token.kind:u.getToken())}function h(t,r){return e.isToken(r)&&t.token.kind!==r.kind&&(t.token.kind=r.kind),t}}}(e.formatting||(e.formatting={}))}(_||(_={})),function(e){!function(t){t.anyContext=e.emptyArray,function(e){e[e.StopProcessingSpaceActions=1]="StopProcessingSpaceActions",e[e.StopProcessingTokenActions=2]="StopProcessingTokenActions",e[e.InsertSpace=4]="InsertSpace",e[e.InsertNewLine=8]="InsertNewLine",e[e.DeleteSpace=16]="DeleteSpace",e[e.DeleteToken=32]="DeleteToken",e[e.InsertTrailingSemicolon=64]="InsertTrailingSemicolon",e[e.StopAction=3]="StopAction",e[e.ModifySpaceAction=28]="ModifySpaceAction",e[e.ModifyTokenAction=96]="ModifyTokenAction"}(t.RuleAction||(t.RuleAction={})),function(e){e[e.None=0]="None",e[e.CanDeleteNewLines=1]="CanDeleteNewLines"}(t.RuleFlags||(t.RuleFlags={}))}(e.formatting||(e.formatting={}))}(_||(_={})),function(e){!function(t){function r(e,t,r,n,a,o){return void 0===o&&(o=0),{leftTokenRange:i(t),rightTokenRange:i(r),rule:{debugName:e,context:n,action:a,flags:o}}}function n(e){return{tokens:e,isSpecific:!0}}function i(t){return"number"==typeof t?n([t]):e.isArray(t)?n(t):t}function o(t,r,i){void 0===i&&(i=[]);for(var a=[],o=t;o<=r;o++)e.contains(i,o)||a.push(o);return n(a)}function s(e,t){return function(r){return r.options&&r.options[e]===t}}function c(t){return function(r){return r.options&&e.hasProperty(r.options,t)&&!!r.options[t]}}function u(t){return function(r){return r.options&&e.hasProperty(r.options,t)&&!r.options[t]}}function l(t){return function(r){return!r.options||!e.hasProperty(r.options,t)||!r.options[t]}}function _(t){return function(r){return!r.options||!e.hasProperty(r.options,t)||!r.options[t]||r.TokensAreOnSameLine()}}function d(t){return function(r){return!r.options||!e.hasProperty(r.options,t)||!!r.options[t]}}function p(e){return 245===e.contextNode.kind}function f(e){return!p(e)}function g(e){switch(e.contextNode.kind){case 223:return 27!==e.contextNode.operatorToken.kind;case 224:case 191:case 231:case 278:case 273:case 179:case 189:case 190:case 235:return!0;case 205:case 262:case 268:case 274:case 257:case 166:case 302:case 169:case 168:return 63===e.currentTokenSpan.kind||63===e.nextTokenSpan.kind;case 246:case 165:return 101===e.currentTokenSpan.kind||101===e.nextTokenSpan.kind||63===e.currentTokenSpan.kind||63===e.nextTokenSpan.kind;case 247:return 162===e.currentTokenSpan.kind||162===e.nextTokenSpan.kind}return!1}function m(e){return!g(e)}function y(e){return!v(e)}function v(t){var r=t.contextNode.kind;return 169===r||168===r||166===r||257===r||e.isFunctionLikeKind(r)}function h(e){return 224===e.contextNode.kind||191===e.contextNode.kind}function b(e){return e.TokensAreOnSameLine()||C(e)}function x(e){return 203===e.contextNode.kind||197===e.contextNode.kind||function(e){return T(e)&&(e.ContextNodeAllOnSameLine()||e.ContextNodeBlockIsOnOneLine())}(e)}function D(e){return C(e)&&!(e.NextNodeAllOnSameLine()||e.NextNodeBlockIsOnOneLine())}function S(e){return T(e)&&!(e.ContextNodeAllOnSameLine()||e.ContextNodeBlockIsOnOneLine())}function T(e){return E(e.contextNode)}function C(e){return E(e.nextTokenParent)}function E(e){if(P(e))return!0;switch(e.kind){case 238:case 266:case 207:case 265:return!0}return!1}function k(e){switch(e.contextNode.kind){case 259:case 171:case 170:case 174:case 175:case 176:case 215:case 173:case 216:case 261:return!0}return!1}function N(e){return!k(e)}function A(e){return 259===e.contextNode.kind||215===e.contextNode.kind}function F(e){return P(e.contextNode)}function P(e){switch(e.kind){case 260:case 228:case 261:case 263:case 184:case 264:case 275:case 276:case 269:case 272:return!0}return!1}function w(e){switch(e.currentTokenParent.kind){case 260:case 264:case 263:case 295:case 265:case 252:return!0;case 238:var t=e.currentTokenParent.parent;if(!t||216!==t.kind&&215!==t.kind)return!0}return!1}function I(e){switch(e.contextNode.kind){case 242:case 252:case 245:case 246:case 247:case 244:case 255:case 243:case 251:case 295:return!0;default:return!1}}function O(e){return 207===e.contextNode.kind}function M(e){return function(e){return 210===e.contextNode.kind}(e)||function(e){return 211===e.contextNode.kind}(e)}function L(e){return 27!==e.currentTokenSpan.kind}function R(e){return 23!==e.nextTokenSpan.kind}function B(e){return 21!==e.nextTokenSpan.kind}function j(e){return 216===e.contextNode.kind}function J(e){return 202===e.contextNode.kind}function z(e){return e.TokensAreOnSameLine()&&11!==e.contextNode.kind}function U(e){return 11!==e.contextNode.kind}function K(e){return 281!==e.contextNode.kind&&285!==e.contextNode.kind}function V(e){return 291===e.contextNode.kind||290===e.contextNode.kind}function q(e){return 288===e.nextTokenParent.kind}function W(e){return 288===e.contextNode.kind}function H(e){return 282===e.contextNode.kind}function G(e){return!k(e)&&!C(e)}function Q(t){return t.TokensAreOnSameLine()&&e.hasDecorators(t.contextNode)&&X(t.currentTokenParent)&&!X(t.nextTokenParent)}function X(t){for(;t&&e.isExpression(t);)t=t.parent;return t&&167===t.kind}function Y(e){return 258===e.currentTokenParent.kind&&e.currentTokenParent.getStart(e.sourceFile)===e.currentTokenSpan.pos}function Z(e){return 2!==e.formattingRequestKind}function $(e){return 264===e.contextNode.kind}function ee(e){return 184===e.contextNode.kind}function te(e){return 177===e.contextNode.kind}function re(e,t){if(29!==e.kind&&31!==e.kind)return!1;switch(t.kind){case 180:case 213:case 262:case 260:case 228:case 261:case 259:case 215:case 216:case 171:case 170:case 176:case 177:case 210:case 211:case 230:return!0;default:return!1}}function ne(e){return re(e.currentTokenSpan,e.currentTokenParent)||re(e.nextTokenSpan,e.nextTokenParent)}function ie(e){return 213===e.contextNode.kind}function ae(e){return 114===e.currentTokenSpan.kind&&219===e.currentTokenParent.kind}function oe(e){return 226===e.contextNode.kind&&void 0!==e.contextNode.expression}function se(e){return 232===e.contextNode.kind}function ce(e){return!function(e){switch(e.contextNode.kind){case 242:case 245:case 246:case 247:case 243:case 244:return!0;default:return!1}}(e)}function ue(t){var r=t.nextTokenSpan.kind,n=t.nextTokenSpan.pos;if(e.isTrivia(r)){var i=t.nextTokenParent===t.currentTokenParent?e.findNextToken(t.currentTokenParent,e.findAncestor(t.currentTokenParent,(function(e){return!e.parent})),t.sourceFile):t.nextTokenParent.getFirstToken(t.sourceFile);if(!i)return!0;r=i.kind,n=i.getStart(t.sourceFile)}return t.sourceFile.getLineAndCharacterOfPosition(t.currentTokenSpan.pos).line===t.sourceFile.getLineAndCharacterOfPosition(n).line?19===r||1===r:237!==r&&26!==r&&(261===t.contextNode.kind||262===t.contextNode.kind?!e.isPropertySignature(t.currentTokenParent)||!!t.currentTokenParent.type||20!==r:e.isPropertyDeclaration(t.currentTokenParent)?!t.currentTokenParent.initializer:245!==t.currentTokenParent.kind&&239!==t.currentTokenParent.kind&&237!==t.currentTokenParent.kind&&22!==r&&20!==r&&39!==r&&40!==r&&43!==r&&13!==r&&27!==r&&225!==r&&15!==r&&14!==r&&24!==r)}function le(t){return e.positionIsASICandidate(t.currentTokenSpan.end,t.currentTokenParent,t.sourceFile)}function _e(t){return!e.isPropertyAccessExpression(t.contextNode)||!e.isNumericLiteral(t.contextNode.expression)||-1!==t.contextNode.expression.getText().indexOf(".")}t.getAllRules=function(){for(var i=[],T=0;T<=162;T++)1!==T&&i.push(T);function E(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return{tokens:i.filter((function(t){return!e.some((function(e){return e===t}))})),isSpecific:!1}}var P={tokens:i,isSpecific:!1},X=n(a(a([],i,!0),[3],!1)),re=n(a(a([],i,!0),[1],!1)),de=o(81,162),pe=o(29,78),fe=[101,102,162,128,140],ge=a([79],e.typeKeywords,!0),me=X,ye=n([79,3,84,93,100]),ve=n([21,3,90,111,96,91]),he=[r("IgnoreBeforeComment",P,[2,3],t.anyContext,1),r("IgnoreAfterLineComment",2,P,t.anyContext,1),r("NotSpaceBeforeColon",P,58,[z,m,y],16),r("SpaceAfterColon",58,P,[z,m],4),r("NoSpaceBeforeQuestionMark",P,57,[z,m,y],16),r("SpaceAfterQuestionMarkInConditionalOperator",57,P,[z,h],4),r("NoSpaceAfterQuestionMark",57,P,[z],16),r("NoSpaceBeforeDot",P,[24,28],[z,_e],16),r("NoSpaceAfterDot",[24,28],P,[z],16),r("NoSpaceBetweenImportParenInImportType",100,20,[z,J],16),r("NoSpaceAfterUnaryPrefixOperator",[45,46,54,53],[8,9,79,20,22,18,108,103],[z,m],16),r("NoSpaceAfterUnaryPreincrementOperator",45,[79,20,108,103],[z],16),r("NoSpaceAfterUnaryPredecrementOperator",46,[79,20,108,103],[z],16),r("NoSpaceBeforeUnaryPostincrementOperator",[79,21,23,103],45,[z,ce],16),r("NoSpaceBeforeUnaryPostdecrementOperator",[79,21,23,103],46,[z,ce],16),r("SpaceAfterPostincrementWhenFollowedByAdd",45,39,[z,g],4),r("SpaceAfterAddWhenFollowedByUnaryPlus",39,39,[z,g],4),r("SpaceAfterAddWhenFollowedByPreincrement",39,45,[z,g],4),r("SpaceAfterPostdecrementWhenFollowedBySubtract",46,40,[z,g],4),r("SpaceAfterSubtractWhenFollowedByUnaryMinus",40,40,[z,g],4),r("SpaceAfterSubtractWhenFollowedByPredecrement",40,46,[z,g],4),r("NoSpaceAfterCloseBrace",19,[27,26],[z],16),r("NewLineBeforeCloseBraceInBlockContext",X,19,[S],8),r("SpaceAfterCloseBrace",19,E(21),[z,w],4),r("SpaceBetweenCloseBraceAndElse",19,91,[z],4),r("SpaceBetweenCloseBraceAndWhile",19,115,[z],4),r("NoSpaceBetweenEmptyBraceBrackets",18,19,[z,O],16),r("SpaceAfterConditionalClosingParen",21,22,[I],4),r("NoSpaceBetweenFunctionKeywordAndStar",98,41,[A],16),r("SpaceAfterStarInGeneratorDeclaration",41,79,[A],4),r("SpaceAfterFunctionInFuncDecl",98,P,[k],4),r("NewLineAfterOpenBraceInBlockContext",18,P,[S],8),r("SpaceAfterGetSetInMember",[137,151],79,[k],4),r("NoSpaceBetweenYieldKeywordAndStar",125,41,[z,oe],16),r("SpaceBetweenYieldOrYieldStarAndOperand",[125,41],P,[z,oe],4),r("NoSpaceBetweenReturnAndSemicolon",105,26,[z],16),r("SpaceAfterCertainKeywords",[113,109,103,89,105,112,133],P,[z],4),r("SpaceAfterLetConstInVariableDeclaration",[119,85],P,[z,Y],4),r("NoSpaceBeforeOpenParenInFuncCall",P,20,[z,M,L],16),r("SpaceBeforeBinaryKeywordOperator",P,fe,[z,g],4),r("SpaceAfterBinaryKeywordOperator",fe,P,[z,g],4),r("SpaceAfterVoidOperator",114,P,[z,ae],4),r("SpaceBetweenAsyncAndOpenParen",132,20,[j,z],4),r("SpaceBetweenAsyncAndFunctionKeyword",132,[98,79],[z],4),r("NoSpaceBetweenTagAndTemplateString",[79,21],[14,15],[z],16),r("SpaceBeforeJsxAttribute",P,79,[q,z],4),r("SpaceBeforeSlashInJsxOpeningElement",P,43,[H,z],4),r("NoSpaceBeforeGreaterThanTokenInJsxOpeningElement",43,31,[H,z],16),r("NoSpaceBeforeEqualInJsxAttribute",P,63,[W,z],16),r("NoSpaceAfterEqualInJsxAttribute",63,P,[W,z],16),r("NoSpaceAfterModuleImport",[142,147],20,[z],16),r("SpaceAfterCertainTypeScriptKeywords",[126,127,84,136,88,92,93,94,137,117,100,118,142,143,121,123,122,146,151,124,154,158,141,138],P,[z],4),r("SpaceBeforeCertainTypeScriptKeywords",P,[94,117,158],[z],4),r("SpaceAfterModuleName",10,18,[$],4),r("SpaceBeforeArrow",P,38,[z],4),r("SpaceAfterArrow",38,P,[z],4),r("NoSpaceAfterEllipsis",25,79,[z],16),r("NoSpaceAfterOptionalParameters",57,[21,27],[z,m],16),r("NoSpaceBetweenEmptyInterfaceBraceBrackets",18,19,[z,ee],16),r("NoSpaceBeforeOpenAngularBracket",ge,29,[z,ne],16),r("NoSpaceBetweenCloseParenAndAngularBracket",21,29,[z,ne],16),r("NoSpaceAfterOpenAngularBracket",29,P,[z,ne],16),r("NoSpaceBeforeCloseAngularBracket",P,31,[z,ne],16),r("NoSpaceAfterCloseAngularBracket",31,[20,22,31,27],[z,ne,N],16),r("SpaceBeforeAt",[21,79],59,[z],4),r("NoSpaceAfterAt",59,P,[z],16),r("SpaceAfterDecorator",P,[126,79,93,88,84,124,123,121,122,137,151,22,41],[Q],4),r("NoSpaceBeforeNonNullAssertionOperator",P,53,[z,se],16),r("NoSpaceAfterNewKeywordOnConstructorSignature",103,20,[z,te],16),r("SpaceLessThanAndNonJSXTypeAnnotation",29,29,[z],4)],be=[r("SpaceAfterConstructor",135,20,[c("insertSpaceAfterConstructor"),z],4),r("NoSpaceAfterConstructor",135,20,[l("insertSpaceAfterConstructor"),z],16),r("SpaceAfterComma",27,P,[c("insertSpaceAfterCommaDelimiter"),z,K,R,B],4),r("NoSpaceAfterComma",27,P,[l("insertSpaceAfterCommaDelimiter"),z,K],16),r("SpaceAfterAnonymousFunctionKeyword",[98,41],20,[c("insertSpaceAfterFunctionKeywordForAnonymousFunctions"),k],4),r("NoSpaceAfterAnonymousFunctionKeyword",[98,41],20,[l("insertSpaceAfterFunctionKeywordForAnonymousFunctions"),k],16),r("SpaceAfterKeywordInControl",de,20,[c("insertSpaceAfterKeywordsInControlFlowStatements"),I],4),r("NoSpaceAfterKeywordInControl",de,20,[l("insertSpaceAfterKeywordsInControlFlowStatements"),I],16),r("SpaceAfterOpenParen",20,P,[c("insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis"),z],4),r("SpaceBeforeCloseParen",P,21,[c("insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis"),z],4),r("SpaceBetweenOpenParens",20,20,[c("insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis"),z],4),r("NoSpaceBetweenParens",20,21,[z],16),r("NoSpaceAfterOpenParen",20,P,[l("insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis"),z],16),r("NoSpaceBeforeCloseParen",P,21,[l("insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis"),z],16),r("SpaceAfterOpenBracket",22,P,[c("insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets"),z],4),r("SpaceBeforeCloseBracket",P,23,[c("insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets"),z],4),r("NoSpaceBetweenBrackets",22,23,[z],16),r("NoSpaceAfterOpenBracket",22,P,[l("insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets"),z],16),r("NoSpaceBeforeCloseBracket",P,23,[l("insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets"),z],16),r("SpaceAfterOpenBrace",18,P,[d("insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces"),x],4),r("SpaceBeforeCloseBrace",P,19,[d("insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces"),x],4),r("NoSpaceBetweenEmptyBraceBrackets",18,19,[z,O],16),r("NoSpaceAfterOpenBrace",18,P,[u("insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces"),z],16),r("NoSpaceBeforeCloseBrace",P,19,[u("insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces"),z],16),r("SpaceBetweenEmptyBraceBrackets",18,19,[c("insertSpaceAfterOpeningAndBeforeClosingEmptyBraces")],4),r("NoSpaceBetweenEmptyBraceBrackets",18,19,[u("insertSpaceAfterOpeningAndBeforeClosingEmptyBraces"),z],16),r("SpaceAfterTemplateHeadAndMiddle",[15,16],P,[c("insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces"),U],4,1),r("SpaceBeforeTemplateMiddleAndTail",P,[16,17],[c("insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces"),z],4),r("NoSpaceAfterTemplateHeadAndMiddle",[15,16],P,[l("insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces"),U],16,1),r("NoSpaceBeforeTemplateMiddleAndTail",P,[16,17],[l("insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces"),z],16),r("SpaceAfterOpenBraceInJsxExpression",18,P,[c("insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces"),z,V],4),r("SpaceBeforeCloseBraceInJsxExpression",P,19,[c("insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces"),z,V],4),r("NoSpaceAfterOpenBraceInJsxExpression",18,P,[l("insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces"),z,V],16),r("NoSpaceBeforeCloseBraceInJsxExpression",P,19,[l("insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces"),z,V],16),r("SpaceAfterSemicolonInFor",26,P,[c("insertSpaceAfterSemicolonInForStatements"),z,p],4),r("NoSpaceAfterSemicolonInFor",26,P,[l("insertSpaceAfterSemicolonInForStatements"),z,p],16),r("SpaceBeforeBinaryOperator",P,pe,[c("insertSpaceBeforeAndAfterBinaryOperators"),z,g],4),r("SpaceAfterBinaryOperator",pe,P,[c("insertSpaceBeforeAndAfterBinaryOperators"),z,g],4),r("NoSpaceBeforeBinaryOperator",P,pe,[l("insertSpaceBeforeAndAfterBinaryOperators"),z,g],16),r("NoSpaceAfterBinaryOperator",pe,P,[l("insertSpaceBeforeAndAfterBinaryOperators"),z,g],16),r("SpaceBeforeOpenParenInFuncDecl",P,20,[c("insertSpaceBeforeFunctionParenthesis"),z,k],4),r("NoSpaceBeforeOpenParenInFuncDecl",P,20,[l("insertSpaceBeforeFunctionParenthesis"),z,k],16),r("NewLineBeforeOpenBraceInControl",ve,18,[c("placeOpenBraceOnNewLineForControlBlocks"),I,D],8,1),r("NewLineBeforeOpenBraceInFunction",me,18,[c("placeOpenBraceOnNewLineForFunctions"),k,D],8,1),r("NewLineBeforeOpenBraceInTypeScriptDeclWithBlock",ye,18,[c("placeOpenBraceOnNewLineForFunctions"),F,D],8,1),r("SpaceAfterTypeAssertion",31,P,[c("insertSpaceAfterTypeAssertion"),z,ie],4),r("NoSpaceAfterTypeAssertion",31,P,[l("insertSpaceAfterTypeAssertion"),z,ie],16),r("SpaceBeforeTypeAnnotation",P,[57,58],[c("insertSpaceBeforeTypeAnnotation"),z,v],4),r("NoSpaceBeforeTypeAnnotation",P,[57,58],[l("insertSpaceBeforeTypeAnnotation"),z,v],16),r("NoOptionalSemicolon",26,re,[s("semicolons",e.SemicolonPreference.Remove),ue],32),r("OptionalSemicolon",P,re,[s("semicolons",e.SemicolonPreference.Insert),le],64)],xe=[r("NoSpaceBeforeSemicolon",P,26,[z],16),r("SpaceBeforeOpenBraceInControl",ve,18,[_("placeOpenBraceOnNewLineForControlBlocks"),I,Z,b],4,1),r("SpaceBeforeOpenBraceInFunction",me,18,[_("placeOpenBraceOnNewLineForFunctions"),k,C,Z,b],4,1),r("SpaceBeforeOpenBraceInTypeScriptDeclWithBlock",ye,18,[_("placeOpenBraceOnNewLineForFunctions"),F,Z,b],4,1),r("NoSpaceBeforeComma",P,27,[z],16),r("NoSpaceBeforeOpenBracket",E(132,82),22,[z],16),r("NoSpaceAfterCloseBracket",23,P,[z,G],16),r("SpaceAfterSemicolon",26,P,[z],4),r("SpaceBetweenForAndAwaitKeyword",97,133,[z],4),r("SpaceBetweenStatements",[21,90,91,82],P,[z,K,f],4),r("SpaceAfterTryCatchFinally",[111,83,96],18,[z],4)];return a(a(a([],he,!0),be,!0),xe,!0)}}(e.formatting||(e.formatting={}))}(_||(_={})),function(e){!function(t){var r;function n(){var n,o;return void 0===r&&(n=t.getAllRules(),o=function(e){for(var t=new Array(c*c),r=new Array(t.length),n=0,i=e;n<i.length;n++)for(var o=i[n],s=o.leftTokenRange.isSpecific&&o.rightTokenRange.isSpecific,l=0,_=o.leftTokenRange.tokens;l<_.length;l++)for(var d=_[l],p=0,f=o.rightTokenRange.tokens;p<f.length;p++){var g=a(d,f[p]),m=t[g];void 0===m&&(m=t[g]=[]),u(m,o.rule,s,r,g)}return t}(n),r=function(t){var r=o[a(t.currentTokenSpan.kind,t.nextTokenSpan.kind)];if(r){for(var n=[],s=0,c=0,u=r;c<u.length;c++){var l=u[c],_=~i(s);l.action&_&&e.every(l.context,(function(e){return e(t)}))&&(n.push(l),s|=l.action)}if(n.length)return n}}),r}function i(e){var t=0;return 1&e&&(t|=28),2&e&&(t|=96),28&e&&(t|=28),96&e&&(t|=96),t}function a(t,r){return e.Debug.assert(t<=162&&r<=162,"Must compute formatting context from tokens"),t*c+r}t.getFormatContext=function(e,t){return{options:e,getRules:n(),host:t}};var o,s=31,c=163;function u(r,n,i,a,c){var u,l,_,d=3&n.action?i?o.StopRulesSpecific:o.StopRulesAny:n.context!==t.anyContext?i?o.ContextRulesSpecific:o.ContextRulesAny:i?o.NoContextRulesSpecific:o.NoContextRulesAny,p=a[c]||0;r.splice(function(e,t){for(var r=0,n=0;n<=t;n+=5)r+=31&e,e>>=5;return r}(p,d),0,n),a[c]=(_=1+((u=p)>>(l=d)&s),e.Debug.assert((_&s)===_,"Adding more rules into the sub-bucket than allowed. Maximum allowed is 32 rules."),u&~(s<<l)|_<<l)}!function(e){e[e.StopRulesSpecific=0]="StopRulesSpecific",e[e.StopRulesAny=5]="StopRulesAny",e[e.ContextRulesSpecific=10]="ContextRulesSpecific",e[e.ContextRulesAny=15]="ContextRulesAny",e[e.NoContextRulesSpecific=20]="NoContextRulesSpecific",e[e.NoContextRulesAny=25]="NoContextRulesAny"}(o||(o={}))}(e.formatting||(e.formatting={}))}(_||(_={})),function(e){!function(t){var r,n,i,a,o;function s(t,r,n){var i=e.findPrecedingToken(t,n);return i&&i.kind===r&&t===i.getEnd()?i:void 0}function c(e){for(var t=e;t&&t.parent&&t.parent.end===e.end&&!u(t.parent,t);)t=t.parent;return t}function u(t,r){switch(t.kind){case 260:case 261:return e.rangeContainsRange(t.members,r);case 264:var n=t.body;return!!n&&265===n.kind&&e.rangeContainsRange(n.statements,r);case 308:case 238:case 265:return e.rangeContainsRange(t.statements,r);case 295:return e.rangeContainsRange(t.block.statements,r)}return!1}function l(t,r,n,i){return t?_({pos:e.getLineStartPositionForPosition(t.getStart(r),r),end:t.end},r,n,i):[]}function _(r,n,i,a){var o=function(t,r){return function n(i){var a=e.forEachChild(i,(function(n){return e.startEndContainsRange(n.getStart(r),n.end,t)&&n}));if(a){var o=n(a);if(o)return o}return i}(r)}(r,n);return t.getFormattingScanner(n.text,n.languageVariant,function(t,r,n){var i=t.getStart(n);if(i===r.pos&&t.end===r.end)return i;var a=e.findPrecedingToken(r.pos,n);return a?a.end>=r.pos?t.pos:a.end:t.pos}(o,r,n),r.end,(function(s){return d(r,o,t.SmartIndenter.getIndentationForNode(o,r,n,i.options),function(e,r,n){for(var i,a=-1;e;){var o=n.getLineAndCharacterOfPosition(e.getStart(n)).line;if(-1!==a&&o!==a)break;if(t.SmartIndenter.shouldIndentChildNode(r,e,i,n))return r.indentSize;a=o,i=e,e=e.parent}return 0}(o,i.options,n),s,i,a,function(t,r){if(!t.length)return a;var n=t.filter((function(t){return e.rangeOverlapsWithStartEnd(r,t.start,t.start+t.length)})).sort((function(e,t){return e.start-t.start}));if(!n.length)return a;var i=0;return function(t){for(;;){if(i>=n.length)return!1;var r=n[i];if(t.end<=r.start)return!1;if(e.startEndOverlapsWithStartEnd(t.pos,t.end,r.start,r.start+r.length))return!0;i++}};function a(){return!1}}(n.parseDiagnostics,r),n)}))}function d(r,n,i,a,o,s,c,u,l){var _,d,f,g,m,y,v=s.options,h=s.getRules,b=s.host,x=new t.FormattingContext(l,c,v),D=-1,S=[];if(o.advance(),o.isOnToken()){var T=l.getLineAndCharacterOfPosition(n.getStart(l)).line,C=T;e.hasDecorators(n)&&(C=l.getLineAndCharacterOfPosition(e.getNonDecoratorTokenPosOfNode(n,l)).line),function n(i,a,s,c,_,p){if(!e.rangeOverlapsWithStartEnd(r,i.getStart(l),i.getEnd()))return;var g=F(i,s,_,p),m=a;e.forEachChild(i,(function(e){b(e,-1,i,g,s,c,!1)}),(function(e){x(e,i,s,g)}));for(;o.isOnToken()&&o.getStartPos()<r.end;){var h=o.readTokenInfo(i);if(h.token.end>Math.min(i.end,r.end))break;S(h,i,g,i)}function b(a,s,c,u,_,d,p,f){if(e.Debug.assert(!e.nodeIsSynthesized(a)),e.nodeIsMissing(a))return s;var g=a.getStart(l),h=l.getLineAndCharacterOfPosition(g).line,b=h;e.hasDecorators(a)&&(b=l.getLineAndCharacterOfPosition(e.getNonDecoratorTokenPosOfNode(a,l)).line);var x=-1;if(p&&e.rangeContainsRange(r,c)&&(x=function(r,n,i,a,o){if(e.rangeOverlapsWithStartEnd(a,r,n)||e.rangeContainsStartEnd(a,r,n)){if(-1!==o)return o}else{var s=l.getLineAndCharacterOfPosition(r).line,c=e.getLineStartPositionForPosition(r,l),u=t.SmartIndenter.findFirstNonWhitespaceColumn(c,r,l,v);if(s!==i||r===u){var _=t.SmartIndenter.getBaseIndentation(v);return _>u?_:u}}return-1}(g,a.end,_,r,s),-1!==x&&(s=x)),!e.rangeOverlapsWithStartEnd(r,a.pos,a.end))return a.end<r.pos&&o.skipToEndOf(a),s;if(0===a.getFullWidth())return s;for(;o.isOnToken()&&o.getStartPos()<r.end;){if((T=o.readTokenInfo(i)).token.end>r.end)return s;if(T.token.end>g){T.token.pos>g&&o.skipToStartOf(a);break}S(T,i,u,i)}if(!o.isOnToken()||o.getStartPos()>=r.end)return s;if(e.isToken(a)){var T=o.readTokenInfo(a);if(11!==a.kind)return e.Debug.assert(T.token.end===a.end,"Token end is child end"),S(T,i,u,a),s}var C=167===a.kind?h:d,E=function(e,r,n,i,a,o){var s=t.SmartIndenter.shouldIndentChildNode(v,e)?v.indentSize:0;return o===r?{indentation:r===y?D:a.getIndentation(),delta:Math.min(v.indentSize,a.getDelta(e)+s)}:-1===n?20===e.kind&&r===y?{indentation:D,delta:a.getDelta(e)}:t.SmartIndenter.childStartsOnTheSameLineWithElseInIfStatement(i,e,r,l)||t.SmartIndenter.childIsUnindentedBranchOfConditionalExpression(i,e,r,l)||t.SmartIndenter.argumentStartsOnSameLineAsPreviousArgument(i,e,r,l)?{indentation:a.getIndentation(),delta:s}:{indentation:a.getIndentation()+a.getDelta(e),delta:s}:{indentation:n,delta:s}}(a,h,x,i,u,C);return n(a,m,h,b,E.indentation,E.delta),m=i,f&&206===c.kind&&-1===s&&(s=E.indentation),s}function x(n,a,s,c){e.Debug.assert(e.isNodeArray(n)),e.Debug.assert(!e.nodeIsSynthesized(n));var u=function(e,t){switch(e.kind){case 173:case 259:case 215:case 171:case 170:case 216:case 176:case 177:case 181:case 182:case 174:case 175:if(e.typeParameters===t)return 29;if(e.parameters===t)return 20;break;case 210:case 211:if(e.typeArguments===t)return 29;if(e.arguments===t)return 20;break;case 260:case 228:case 261:case 262:if(e.typeParameters===t)return 29;break;case 180:case 212:case 183:case 230:case 202:if(e.typeArguments===t)return 29;break;case 184:return 18}return 0}(a,n),_=c,d=s;if(e.rangeOverlapsWithStartEnd(r,n.pos,n.end)){if(0!==u)for(;o.isOnToken()&&o.getStartPos()<r.end;){if((y=o.readTokenInfo(a)).token.end>n.pos)break;if(y.token.kind===u){d=l.getLineAndCharacterOfPosition(y.token.pos).line,S(y,a,c,a);var p=void 0;if(-1!==D)p=D;else{var f=e.getLineStartPositionForPosition(y.token.pos,l);p=t.SmartIndenter.findFirstNonWhitespaceColumn(f,y.token.pos,l,v)}_=F(a,s,p,v.indentSize)}else S(y,a,c,a)}for(var g=-1,m=0;m<n.length;m++){g=b(n[m],g,i,_,d,d,!0,0===m)}var y,h=function(e){switch(e){case 20:return 21;case 29:return 31;case 18:return 19}return 0}(u);if(0!==h&&o.isOnToken()&&o.getStartPos()<r.end)27===(y=o.readTokenInfo(a)).token.kind&&(S(y,a,_,a),y=o.isOnToken()?o.readTokenInfo(a):void 0),y&&y.token.kind===h&&e.rangeContainsRange(a,y.token)&&S(y,a,_,a,!0)}else n.end<r.pos&&o.skipToEndOf(n)}function S(t,n,i,a,s){e.Debug.assert(e.rangeContainsRange(n,t.token));var c=o.lastTrailingTriviaWasNewLine(),_=!1;t.leadingTrivia&&w(t.leadingTrivia,n,m,i);var p=0,g=e.rangeContainsRange(r,t.token),v=l.getLineAndCharacterOfPosition(t.token.pos);if(g){var h=u(t.token),b=f;if(p=I(t.token,v,n,m,i),!h)if(0===p){var x=b&&l.getLineAndCharacterOfPosition(b.end).line;_=c&&v.line!==x}else _=1===p}if(t.trailingTrivia&&(d=e.last(t.trailingTrivia).end,w(t.trailingTrivia,n,m,i)),_){var S=g&&!u(t.token)?i.getIndentationForToken(v.line,t.token.kind,a,!!s):-1,T=!0;if(t.leadingTrivia){var C=i.getIndentationForComment(t.token.kind,S,a);T=P(t.leadingTrivia,C,T,(function(e){return M(e.pos,C,!1)}))}-1!==S&&T&&(M(t.token.pos,S,1===p),y=v.line,D=S)}o.advance(),m=n}}(n,n,T,C,i,a)}if(!o.isOnToken()){var E=t.SmartIndenter.nodeWillIndentChild(v,n,void 0,l,!1)?i+v.indentSize:i,k=o.getCurrentLeadingTrivia();k&&(P(k,E,!1,(function(e){return I(e,l.getLineAndCharacterOfPosition(e.pos),n,n,void 0)})),!1!==v.trimTrailingWhitespace&&function(t){for(var n=f?f.end:r.pos,i=0,a=t;i<a.length;i++){var o=a[i];e.isComment(o.kind)&&(n<o.pos&&j(n,o.pos-1,f),n=o.end+1)}n<r.end&&j(n,r.end,f)}(k))}if(f&&o.getStartPos()>=r.end){var N=o.isOnEOF()?o.readEOFTokenRange():o.isOnToken()?o.readTokenInfo(n).token:void 0;if(N&&N.pos===d){var A=(null===(_=e.findPrecedingToken(N.end,l,n))||void 0===_?void 0:_.parent)||g;O(N,l.getLineAndCharacterOfPosition(N.pos).line,A,f,m,g,A,void 0)}}return S;function F(r,n,i,a){return{getIndentationForComment:function(e,t,r){switch(e){case 19:case 23:case 21:return i+o(r)}return-1!==t?t:i},getIndentationForToken:function(t,a,s,c){return!c&&function(t,i,a){switch(i){case 18:case 19:case 21:case 91:case 115:case 59:return!1;case 43:case 31:switch(a.kind){case 283:case 284:case 282:return!1}break;case 22:case 23:if(197!==a.kind)return!1}return n!==t&&!(e.hasDecorators(r)&&i===function(t){if(e.canHaveModifiers(t)){var r=e.find(t.modifiers,e.isModifier,e.findIndex(t.modifiers,e.isDecorator));if(r)return r.kind}switch(t.kind){case 260:return 84;case 261:return 118;case 259:return 98;case 263:return 263;case 174:return 137;case 175:return 151;case 171:if(t.asteriskToken)return 41;case 169:case 166:var n=e.getNameOfDeclaration(t);if(n)return n.kind}}(r))}(t,a,s)?i+o(s):i},getIndentation:function(){return i},getDelta:o,recomputeIndentation:function(e,n){t.SmartIndenter.shouldIndentChildNode(v,n,r,l)&&(i+=e?v.indentSize:-v.indentSize,a=t.SmartIndenter.shouldIndentChildNode(v,r)?v.indentSize:0)}};function o(e){return t.SmartIndenter.nodeWillIndentChild(v,r,e,l,!0)?a:0}}function P(t,n,i,a){for(var o=0,s=t;o<s.length;o++){var c=s[o],u=e.rangeContainsRange(r,c);switch(c.kind){case 3:u&&L(c,n,!i),i=!1;break;case 2:i&&u&&a(c),i=!1;break;case 4:i=!0}}return i}function w(t,n,i,a){for(var o=0,s=t;o<s.length;o++){var c=s[o];if(e.isComment(c.kind)&&e.rangeContainsRange(r,c))I(c,l.getLineAndCharacterOfPosition(c.pos),n,i,a)}}function I(e,t,n,i,a){var o=0;u(e)||(f?o=O(e,t.line,n,f,m,g,i,a):R(l.getLineAndCharacterOfPosition(r.pos).line,t.line));return f=e,d=e.end,g=n,m=t.line,o}function O(t,r,n,i,a,o,s,c){x.updateContext(i,o,t,n,s);var u=h(x),_=!1!==x.options.trimTrailingWhitespace,d=0;return u?e.forEachRight(u,(function(o){if(d=function(t,r,n,i,a){var o=a!==n;switch(t.action){case 1:return 0;case 16:if(r.end!==i.pos)return J(r.end,i.pos-r.end),o?2:0;break;case 32:J(r.pos,r.end-r.pos);break;case 8:if(1!==t.flags&&n!==a)return 0;if(1!==a-n)return z(r.end,i.pos-r.end,e.getNewLineOrDefaultFromHost(b,v)),o?0:1;break;case 4:if(1!==t.flags&&n!==a)return 0;if(1!==i.pos-r.end||32!==l.text.charCodeAt(r.end))return z(r.end,i.pos-r.end," "),o?2:0;break;case 64:s=r.end,(c=";")&&S.push(e.createTextChangeFromStartLength(s,0,c))}var s,c;return 0}(o,i,a,t,r),c)switch(d){case 2:n.getStart(l)===t.pos&&c.recomputeIndentation(!1,s);break;case 1:n.getStart(l)===t.pos&&c.recomputeIndentation(!0,s);break;default:e.Debug.assert(0===d)}_=_&&!(16&o.action)&&1!==o.flags})):_=_&&1!==t.kind,r!==a&&_&&R(a,r,i),d}function M(t,r,n){var i=p(r,v);if(n)z(t,0,i);else{var a=l.getLineAndCharacterOfPosition(t),o=e.getStartPositionOfLine(a.line,l);(r!==function(e,t){for(var r=0,n=0;n<t;n++)9===l.text.charCodeAt(e+n)?r+=v.tabSize-r%v.tabSize:r++;return r}(o,a.character)||function(e,t){return e!==l.text.substr(t,e.length)}(i,o))&&z(o,a.character,i)}}function L(r,n,i,a){void 0===a&&(a=!0);var o=l.getLineAndCharacterOfPosition(r.pos).line,s=l.getLineAndCharacterOfPosition(r.end).line;if(o!==s){for(var c=[],u=r.pos,_=o;_<s;_++){var d=e.getEndLinePosition(_,l);c.push({pos:u,end:d}),u=e.getStartPositionOfLine(_+1,l)}if(a&&c.push({pos:u,end:r.end}),0!==c.length){var f=e.getStartPositionOfLine(o,l),g=t.SmartIndenter.findFirstNonWhitespaceCharacterAndColumn(f,c[0].pos,l,v),m=0;i&&(m=1,o++);for(var y=n-g.column,h=m;h<c.length;h++,o++){var b=e.getStartPositionOfLine(o,l),x=0===h?g:t.SmartIndenter.findFirstNonWhitespaceCharacterAndColumn(c[h].pos,c[h].end,l,v),D=x.column+y;if(D>0){var S=p(D,v);z(b,x.character,S)}else J(b,x.character)}}}else i||M(r.pos,n,!1)}function R(t,r,n){for(var i=t;i<r;i++){var a=e.getStartPositionOfLine(i,l),o=e.getEndLinePosition(i,l);if(!(n&&(e.isComment(n.kind)||e.isStringOrRegularExpressionOrTemplateLiteral(n.kind))&&n.pos<=o&&n.end>o)){var s=B(a,o);-1!==s&&(e.Debug.assert(s===a||!e.isWhiteSpaceSingleLine(l.text.charCodeAt(s-1))),J(s,o+1-s))}}}function B(t,r){for(var n=r;n>=t&&e.isWhiteSpaceSingleLine(l.text.charCodeAt(n));)n--;return n!==r?n+1:-1}function j(e,t,r){R(l.getLineAndCharacterOfPosition(e).line,l.getLineAndCharacterOfPosition(t).line+1,r)}function J(t,r){r&&S.push(e.createTextChangeFromStartLength(t,r,""))}function z(t,r,n){(r||n)&&S.push(e.createTextChangeFromStartLength(t,r,n))}}function p(t,r){if((!i||i.tabSize!==r.tabSize||i.indentSize!==r.indentSize)&&(i={tabSize:r.tabSize,indentSize:r.indentSize},a=o=void 0),r.convertTabsToSpaces){var n=void 0,s=Math.floor(t/r.indentSize),c=t%r.indentSize;return o||(o=[]),void 0===o[s]?(n=e.repeatString(" ",r.indentSize*s),o[s]=n):n=o[s],c?n+e.repeatString(" ",c):n}var u=Math.floor(t/r.tabSize),l=t-u*r.tabSize,_=void 0;return a||(a=[]),void 0===a[u]?a[u]=_=e.repeatString("\t",u):_=a[u],l?_+e.repeatString(" ",l):_}t.createTextRangeWithKind=function(t,r,n){var i={pos:t,end:r,kind:n};return e.Debug.isDebugging&&Object.defineProperty(i,"__debugKind",{get:function(){return e.Debug.formatSyntaxKind(n)}}),i},function(e){e[e.Unknown=-1]="Unknown"}(r||(r={})),t.formatOnEnter=function(t,r,n){var i=r.getLineAndCharacterOfPosition(t).line;if(0===i)return[];for(var a=e.getEndLinePosition(i,r);e.isWhiteSpaceSingleLine(r.text.charCodeAt(a));)a--;return e.isLineBreak(r.text.charCodeAt(a))&&a--,_({pos:e.getStartPositionOfLine(i-1,r),end:a+1},r,n,2)},t.formatOnSemicolon=function(e,t,r){return l(c(s(e,26,t)),t,r,3)},t.formatOnOpeningCurly=function(t,r,n){var i=s(t,18,r);if(!i)return[];var a=c(i.parent);return _({pos:e.getLineStartPositionForPosition(a.getStart(r),r),end:t},r,n,4)},t.formatOnClosingCurly=function(e,t,r){return l(c(s(e,19,t)),t,r,5)},t.formatDocument=function(e,t){return _({pos:0,end:e.text.length},e,t,0)},t.formatSelection=function(t,r,n,i){return _({pos:e.getLineStartPositionForPosition(t,n),end:r},n,i,1)},t.formatNodeGivenIndentation=function(e,r,n,i,a,o){var s={pos:e.pos,end:e.end};return t.getFormattingScanner(r.text,n,s.pos,s.end,(function(t){return d(s,e,i,a,t,o,1,(function(e){return!1}),r)}))},function(e){e[e.None=0]="None",e[e.LineAdded=1]="LineAdded",e[e.LineRemoved=2]="LineRemoved"}(n||(n={})),t.getRangeOfEnclosingComment=function(t,r,n,i){void 0===i&&(i=e.getTokenAtPosition(t,r));var a=e.findAncestor(i,e.isJSDoc);if(a&&(i=a.parent),!(i.getStart(t)<=r&&r<i.getEnd())){var o=(n=null===n?void 0:void 0===n?e.findPrecedingToken(r,t):n)&&e.getTrailingCommentRanges(t.text,n.end),s=e.getLeadingCommentRangesOfNode(i,t),c=e.concatenate(o,s);return c&&e.find(c,(function(n){return e.rangeContainsPositionExclusive(n,r)||r===n.end&&(2===n.kind||r===t.getFullWidth())}))}},t.getIndentationString=p}(e.formatting||(e.formatting={}))}(_||(_={})),function(e){!function(t){!function(r){var n,i;function a(e){return e.baseIndentSize||0}function o(e,t,r,n,i,o,u){for(var f,g=e.parent;g;){var y=!0;if(r){var v=e.getStart(i);y=v<r.pos||v>r.end}var h=s(g,e,i),b=h.line===t.line||d(g,e,t.line,i);if(y){var x=null===(f=p(e,i))||void 0===f?void 0:f[0],S=m(e,i,u,!!x&&l(x,i).line>h.line);if(-1!==S)return S+n;if(-1!==(S=c(e,g,t,b,i,u)))return S+n}D(u,g,e,i,o)&&!b&&(n+=u.indentSize);var T=_(g,e,t.line,i);g=(e=g).parent,t=T?i.getLineAndCharacterOfPosition(e.getStart(i)):h}return n+a(u)}function s(e,t,r){var n=p(t,r),i=n?n.pos:e.getStart(r);return r.getLineAndCharacterOfPosition(i)}function c(t,r,n,i,a,o){return(e.isDeclaration(t)||e.isStatementButNotDeclaration(t))&&(308===r.kind||!i)?v(n,a,o):-1}function u(t,r,n,i){var a=e.findNextToken(t,r,i);return a?18===a.kind?1:19===a.kind&&n===l(a,i).line?2:0:0}function l(e,t){return t.getLineAndCharacterOfPosition(e.getStart(t))}function _(t,r,n,i){if(!e.isCallExpression(t)||!e.contains(t.arguments,r))return!1;var a=t.expression.getEnd();return e.getLineAndCharacterOfPosition(i,a).line===n}function d(t,r,n,i){if(242===t.kind&&t.elseStatement===r){var a=e.findChildOfKind(t,91,i);return e.Debug.assert(void 0!==a),l(a,i).line===n}return!1}function p(e,t){return e.parent&&f(e.getStart(t),e.getEnd(),e.parent,t)}function f(t,r,n,i){switch(n.kind){case 180:return a(n.typeArguments);case 207:return a(n.properties);case 206:case 272:case 276:case 203:case 204:return a(n.elements);case 184:return a(n.members);case 259:case 215:case 216:case 171:case 170:case 176:case 173:case 182:case 177:return a(n.typeParameters)||a(n.parameters);case 174:return a(n.parameters);case 260:case 228:case 261:case 262:case 347:return a(n.typeParameters);case 211:case 210:return a(n.typeArguments)||a(n.arguments);case 258:return a(n.declarations)}function a(a){return a&&e.rangeContainsStartEnd(function(e,t,r){for(var n=e.getChildren(r),i=1;i<n.length-1;i++)if(n[i].pos===t.pos&&n[i].end===t.end)return{pos:n[i-1].end,end:n[i+1].getStart(r)};return t}(n,a,i),t,r)?a:void 0}}function g(e,t,r){return e?v(t.getLineAndCharacterOfPosition(e.pos),t,r):-1}function m(e,t,r,n){if(e.parent&&258===e.parent.kind)return-1;var i=p(e,t);if(i){var a=i.indexOf(e);if(-1!==a){var o=y(i,a,t,r);if(-1!==o)return o}return g(i,t,r)+(n?r.indentSize:0)}return-1}function y(t,r,n,i){e.Debug.assert(r>=0&&r<t.length);for(var a=l(t[r],n),o=r-1;o>=0;o--)if(27!==t[o].kind){if(n.getLineAndCharacterOfPosition(t[o].end).line!==a.line)return v(a,n,i);a=l(t[o],n)}return-1}function v(e,t,r){var n=t.getPositionOfLineAndCharacter(e.line,0);return b(n,n+e.character,t,r)}function h(t,r,n,i){for(var a=0,o=0,s=t;s<r;s++){var c=n.text.charCodeAt(s);if(!e.isWhiteSpaceSingleLine(c))break;9===c?o+=i.tabSize+o%i.tabSize:o++,a++}return{column:o,character:a}}function b(e,t,r,n){return h(e,t,r,n).column}function x(t,r,n,i,a){var o=n?n.kind:0;switch(r.kind){case 241:case 260:case 228:case 261:case 263:case 262:case 206:case 238:case 265:case 207:case 184:case 197:case 186:case 266:case 293:case 292:case 214:case 208:case 210:case 211:case 240:case 274:case 250:case 224:case 204:case 203:case 283:case 286:case 282:case 291:case 170:case 176:case 177:case 166:case 181:case 182:case 193:case 212:case 220:case 276:case 272:case 278:case 273:case 169:return!0;case 257:case 299:case 223:if(!t.indentMultiLineObjectLiteralBeginningOnBlankLine&&i&&207===o)return S(i,n);if(223===r.kind&&i&&n&&281===o)return i.getLineAndCharacterOfPosition(e.skipTrivia(i.text,r.pos)).line!==i.getLineAndCharacterOfPosition(e.skipTrivia(i.text,n.pos)).line;if(223!==r.kind)return!0;break;case 243:case 244:case 246:case 247:case 245:case 242:case 259:case 215:case 171:case 173:case 174:case 175:return 238!==o;case 216:return i&&214===o?S(i,n):238!==o;case 275:return 276!==o;case 269:return 270!==o||!!n.namedBindings&&272!==n.namedBindings.kind;case 281:return 284!==o;case 285:return 287!==o;case 190:case 189:if(184===o||186===o)return!1}return a}function D(e,t,r,n,i){return void 0===i&&(i=!1),x(e,t,r,n,!1)&&!(i&&r&&function(e,t){switch(e){case 250:case 254:case 248:case 249:return 238!==t.kind;default:return!1}}(r.kind,t))}function S(t,r){var n=e.skipTrivia(t.text,r.pos);return t.getLineAndCharacterOfPosition(n).line===t.getLineAndCharacterOfPosition(r.end).line}!function(e){e[e.Unknown=-1]="Unknown"}(n||(n={})),r.getIndentation=function(r,n,i,s){if(void 0===s&&(s=!1),r>n.text.length)return a(i);if(i.indentStyle===e.IndentStyle.None)return 0;var c=e.findPrecedingToken(r,n,void 0,!0),_=t.getRangeOfEnclosingComment(n,r,c||null);if(_&&3===_.kind)return function(t,r,n,i){var a=e.getLineAndCharacterOfPosition(t,r).line-1,o=e.getLineAndCharacterOfPosition(t,i.pos).line;if(e.Debug.assert(o>=0),a<=o)return b(e.getStartPositionOfLine(o,t),r,t,n);var s=e.getStartPositionOfLine(a,t),c=h(s,r,t,n),u=c.column,l=c.character;if(0===u)return u;var _=t.text.charCodeAt(s+l);return 42===_?u-1:u}(n,r,i,_);if(!c)return a(i);if(e.isStringOrRegularExpressionOrTemplateLiteral(c.kind)&&c.getStart(n)<=r&&r<c.end)return 0;var d=n.getLineAndCharacterOfPosition(r).line,p=e.getTokenAtPosition(n,r),v=18===p.kind&&207===p.parent.kind;if(i.indentStyle===e.IndentStyle.Block||v)return function(t,r,n){var i=r;for(;i>0;){var a=t.text.charCodeAt(i);if(!e.isWhiteSpaceLike(a))break;i--}var o=e.getLineStartPositionForPosition(i,t);return b(o,i,t,n)}(n,r,i);if(27===c.kind&&223!==c.parent.kind){var x=function(t,r,n){var i=e.findListItemInfo(t);return i&&i.listItemIndex>0?y(i.list.getChildren(),i.listItemIndex-1,r,n):-1}(c,n,i);if(-1!==x)return x}var S=function(e,t,r){return t&&f(e,e,t,r)}(r,c.parent,n);if(S&&!e.rangeContainsRange(S,c)){var T=-1!==[215,216].indexOf(p.parent.kind)?0:i.indentSize;return g(S,n,i)+T}return function(t,r,n,i,s,c){var _,d=n;for(;d;){if(e.positionBelongsToNode(d,r,t)&&D(c,d,_,t,!0)){var p=l(d,t),f=u(n,d,i,t);return o(d,p,void 0,0!==f?s&&2===f?c.indentSize:0:i!==p.line?c.indentSize:0,t,!0,c)}var g=m(d,t,c,!0);if(-1!==g)return g;_=d,d=d.parent}return a(c)}(n,r,c,d,s,i)},r.getIndentationForNode=function(e,t,r,n){var i=r.getLineAndCharacterOfPosition(e.getStart(r));return o(e,i,t,0,r,!1,n)},r.getBaseIndentation=a,function(e){e[e.Unknown=0]="Unknown",e[e.OpenBrace=1]="OpenBrace",e[e.CloseBrace=2]="CloseBrace"}(i||(i={})),r.isArgumentAndStartLineOverlapsExpressionBeingCalled=_,r.childStartsOnTheSameLineWithElseInIfStatement=d,r.childIsUnindentedBranchOfConditionalExpression=function(t,r,n,i){if(e.isConditionalExpression(t)&&(r===t.whenTrue||r===t.whenFalse)){var a=e.getLineAndCharacterOfPosition(i,t.condition.end).line;if(r===t.whenTrue)return n===a;var o=l(t.whenTrue,i).line,s=e.getLineAndCharacterOfPosition(i,t.whenTrue.end).line;return a===o&&s===n}return!1},r.argumentStartsOnSameLineAsPreviousArgument=function(t,r,n,i){if(e.isCallOrNewExpression(t)){if(!t.arguments)return!1;var a=e.find(t.arguments,(function(e){return e.pos===r.pos}));if(!a)return!1;var o=t.arguments.indexOf(a);if(0===o)return!1;var s=t.arguments[o-1];if(n===e.getLineAndCharacterOfPosition(i,s.getEnd()).line)return!0}return!1},r.getContainingList=p,r.findFirstNonWhitespaceCharacterAndColumn=h,r.findFirstNonWhitespaceColumn=b,r.nodeWillIndentChild=x,r.shouldIndentChildNode=D}(t.SmartIndenter||(t.SmartIndenter={}))}(e.formatting||(e.formatting={}))}(_||(_={})),function(e){!function(t){function r(t){var r=t.__pos;return e.Debug.assert("number"==typeof r),r}function n(t,r){e.Debug.assert("number"==typeof r),t.__pos=r}function i(t){var r=t.__end;return e.Debug.assert("number"==typeof r),r}function s(t,r){e.Debug.assert("number"==typeof r),t.__end=r}var c,u;function l(t,r){return e.skipTrivia(t,r,!1,!0)}!function(e){e[e.Exclude=0]="Exclude",e[e.IncludeAll=1]="IncludeAll",e[e.JSDoc=2]="JSDoc",e[e.StartLine=3]="StartLine"}(c=t.LeadingTriviaOption||(t.LeadingTriviaOption={})),function(e){e[e.Exclude=0]="Exclude",e[e.ExcludeWhitespace=1]="ExcludeWhitespace",e[e.Include=2]="Include"}(u=t.TrailingTriviaOption||(t.TrailingTriviaOption={}));var _,d={leadingTriviaOption:c.Exclude,trailingTriviaOption:u.Exclude};function p(e,t,r,n){return{pos:f(e,t,n),end:m(e,r,n)}}function f(t,r,n,i){var a,o;void 0===i&&(i=!1);var s=n.leadingTriviaOption;if(s===c.Exclude)return r.getStart(t);if(s===c.StartLine){var u=r.getStart(t),_=e.getLineStartPositionForPosition(u,t);return e.rangeContainsPosition(r,_)?_:u}if(s===c.JSDoc){var d=e.getJSDocCommentRanges(r,t.text);if(null==d?void 0:d.length)return e.getLineStartPositionForPosition(d[0].pos,t)}var p=r.getFullStart(),f=r.getStart(t);if(p===f)return f;var g=e.getLineStartPositionForPosition(p,t);if(e.getLineStartPositionForPosition(f,t)===g)return s===c.IncludeAll?p:f;if(i){var m=(null===(a=e.getLeadingCommentRanges(t.text,p))||void 0===a?void 0:a[0])||(null===(o=e.getTrailingCommentRanges(t.text,p))||void 0===o?void 0:o[0]);if(m)return e.skipTrivia(t.text,m.end,!0,!0)}var y=p>0?1:0,v=e.getStartPositionOfLine(e.getLineOfLocalPosition(t,g)+y,t);return v=l(t.text,v),e.getStartPositionOfLine(e.getLineOfLocalPosition(t,v),t)}function g(t,r,n){var i=r.end;if(n.trailingTriviaOption===u.Include){var a=e.getTrailingCommentRanges(t.text,i);if(a)for(var o=e.getLineOfLocalPosition(t,r.end),s=0,c=a;s<c.length;s++){var l=c[s];if(2===l.kind||e.getLineOfLocalPosition(t,l.pos)>o)break;if(e.getLineOfLocalPosition(t,l.end)>o)return e.skipTrivia(t.text,l.end,!0,!0)}}}function m(t,r,n){var i,a=r.end,o=n.trailingTriviaOption;if(o===u.Exclude)return a;if(o===u.ExcludeWhitespace){var s=e.concatenate(e.getTrailingCommentRanges(t.text,a),e.getLeadingCommentRanges(t.text,a)),c=null===(i=null==s?void 0:s[s.length-1])||void 0===i?void 0:i.end;return c||a}var l=g(t,r,n);if(l)return l;var _=e.skipTrivia(t.text,a,!0);return _===a||o!==u.Include&&!e.isLineBreak(t.text.charCodeAt(_-1))?a:_}function y(e,t){return!!t&&!!e.parent&&(27===t.kind||26===t.kind&&207===e.parent.kind)}!function(e){e[e.Remove=0]="Remove",e[e.ReplaceWithSingleNode=1]="ReplaceWithSingleNode",e[e.ReplaceWithMultipleNodes=2]="ReplaceWithMultipleNodes",e[e.Text=3]="Text"}(_||(_={})),t.isThisTypeAnnotatable=function(t){return e.isFunctionExpression(t)||e.isFunctionDeclaration(t)};var v,h=function(){function t(t,r){this.newLineCharacter=t,this.formatContext=r,this.changes=[],this.newFiles=[],this.classesWithNodesInsertedAtStart=new e.Map,this.deletedNodes=[]}return t.fromContext=function(r){return new t(e.getNewLineOrDefaultFromHost(r.host,r.formatContext.options),r.formatContext)},t.with=function(e,r){var n=t.fromContext(e);return r(n),n.getChanges()},t.prototype.pushRaw=function(t,r){e.Debug.assertEqual(t.fileName,r.fileName);for(var n=0,i=r.textChanges;n<i.length;n++){var a=i[n];this.changes.push({kind:_.Text,sourceFile:t,text:a.newText,range:e.createTextRangeFromSpan(a.span)})}},t.prototype.deleteRange=function(e,t){this.changes.push({kind:_.Remove,sourceFile:e,range:t})},t.prototype.delete=function(e,t){this.deletedNodes.push({sourceFile:e,node:t})},t.prototype.deleteNode=function(e,t,r){void 0===r&&(r={leadingTriviaOption:c.IncludeAll}),this.deleteRange(e,p(e,t,t,r))},t.prototype.deleteNodes=function(e,t,r,n){void 0===r&&(r={leadingTriviaOption:c.IncludeAll});for(var i=0,a=t;i<a.length;i++){var o=a[i],s=f(e,o,r,n),u=m(e,o,r);this.deleteRange(e,{pos:s,end:u}),n=!!g(e,o,r)}},t.prototype.deleteModifier=function(t,r){this.deleteRange(t,{pos:r.getStart(t),end:e.skipTrivia(t.text,r.end,!0)})},t.prototype.deleteNodeRange=function(e,t,r,n){void 0===n&&(n={leadingTriviaOption:c.IncludeAll});var i=f(e,t,n),a=m(e,r,n);this.deleteRange(e,{pos:i,end:a})},t.prototype.deleteNodeRangeExcludingEnd=function(e,t,r,n){void 0===n&&(n={leadingTriviaOption:c.IncludeAll});var i=f(e,t,n),a=void 0===r?e.text.length:f(e,r,n);this.deleteRange(e,{pos:i,end:a})},t.prototype.replaceRange=function(e,t,r,n){void 0===n&&(n={}),this.changes.push({kind:_.ReplaceWithSingleNode,sourceFile:e,range:t,options:n,node:r})},t.prototype.replaceNode=function(e,t,r,n){void 0===n&&(n=d),this.replaceRange(e,p(e,t,t,n),r,n)},t.prototype.replaceNodeRange=function(e,t,r,n,i){void 0===i&&(i=d),this.replaceRange(e,p(e,t,r,i),n,i)},t.prototype.replaceRangeWithNodes=function(e,t,r,n){void 0===n&&(n={}),this.changes.push({kind:_.ReplaceWithMultipleNodes,sourceFile:e,range:t,options:n,nodes:r})},t.prototype.replaceNodeWithNodes=function(e,t,r,n){void 0===n&&(n=d),this.replaceRangeWithNodes(e,p(e,t,t,n),r,n)},t.prototype.replaceNodeWithText=function(e,t,r){this.replaceRangeWithText(e,p(e,t,t,d),r)},t.prototype.replaceNodeRangeWithNodes=function(e,t,r,n,i){void 0===i&&(i=d),this.replaceRangeWithNodes(e,p(e,t,r,i),n,i)},t.prototype.nodeHasTrailingComment=function(e,t,r){return void 0===r&&(r=d),!!g(e,t,r)},t.prototype.nextCommaToken=function(t,r){var n=e.findNextToken(r,r.parent,t);return n&&27===n.kind?n:void 0},t.prototype.replacePropertyAssignment=function(e,t,r){var n=this.nextCommaToken(e,t)?"":","+this.newLineCharacter;this.replaceNode(e,t,r,{suffix:n})},t.prototype.insertNodeAt=function(t,r,n,i){void 0===i&&(i={}),this.replaceRange(t,e.createRange(r),n,i)},t.prototype.insertNodesAt=function(t,r,n,i){void 0===i&&(i={}),this.replaceRangeWithNodes(t,e.createRange(r),n,i)},t.prototype.insertNodeAtTopOfFile=function(e,t,r){this.insertAtTopOfFile(e,t,r)},t.prototype.insertNodesAtTopOfFile=function(e,t,r){this.insertAtTopOfFile(e,t,r)},t.prototype.insertAtTopOfFile=function(t,r,n){var i=function(t){for(var r,n=0,i=t.statements;n<i.length;n++){var a=i[n];if(!e.isPrologueDirective(a))break;r=a}var o=0,s=t.text;if(r)return o=r.end,g(),o;var c=e.getShebang(s);void 0!==c&&(o=c.length,g());var u,l,_=e.getLeadingCommentRanges(s,o);if(!_)return o;for(var d=0,p=_;d<p.length;d++){var f=p[d];if(3===f.kind){if(e.isPinnedComment(s,f.pos)){u={range:f,pinnedOrTripleSlash:!0};continue}}else if(e.isRecognizedTripleSlashComment(s,f.pos,f.end)){u={range:f,pinnedOrTripleSlash:!0};continue}if(u){if(u.pinnedOrTripleSlash)break;if(t.getLineAndCharacterOfPosition(f.pos).line>=t.getLineAndCharacterOfPosition(u.range.end).line+2)break}if(t.statements.length)if(void 0===l&&(l=t.getLineAndCharacterOfPosition(t.statements[0].getStart()).line),l<t.getLineAndCharacterOfPosition(f.end).line+2)break;u={range:f,pinnedOrTripleSlash:!1}}u&&(o=u.range.end,g());return o;function g(){if(o<s.length){var t=s.charCodeAt(o);e.isLineBreak(t)&&++o<s.length&&13===t&&10===s.charCodeAt(o)&&o++}}}(t),a={prefix:0===i?void 0:this.newLineCharacter,suffix:(e.isLineBreak(t.text.charCodeAt(i))?"":this.newLineCharacter)+(n?this.newLineCharacter:"")};e.isArray(r)?this.insertNodesAt(t,i,r,a):this.insertNodeAt(t,i,r,a)},t.prototype.insertFirstParameter=function(t,r,n){var i=e.firstOrUndefined(r);i?this.insertNodeBefore(t,i,n):this.insertNodeAt(t,r.pos,n)},t.prototype.insertNodeBefore=function(e,t,r,n,i){void 0===n&&(n=!1),void 0===i&&(i={}),this.insertNodeAt(e,f(e,t,i),r,this.getOptionsForInsertNodeBefore(t,r,n))},t.prototype.insertModifierAt=function(t,r,n,i){void 0===i&&(i={}),this.insertNodeAt(t,r,e.factory.createToken(n),i)},t.prototype.insertModifierBefore=function(e,t,r){return this.insertModifierAt(e,r.getStart(e),t,{suffix:" "})},t.prototype.insertCommentBeforeLine=function(t,r,n,i){var a=e.getStartPositionOfLine(r,t),o=e.getFirstNonSpaceCharacterPosition(t.text,a),s=A(t,o),c=e.getTouchingToken(t,s?o:n),u=t.text.slice(a,o),l="".concat(s?"":this.newLineCharacter,"//").concat(i).concat(this.newLineCharacter).concat(u);this.insertText(t,c.getStart(t),l)},t.prototype.insertJsdocCommentBefore=function(t,r,n){var i=r.getStart(t);if(r.jsDoc)for(var a=0,o=r.jsDoc;a<o.length;a++){var s=o[a];this.deleteRange(t,{pos:e.getLineStartPositionForPosition(s.getStart(t),t),end:m(t,s,{})})}var c=e.getPrecedingNonSpaceCharacterPosition(t.text,i-1),u=t.text.slice(c,i);this.insertNodeAt(t,i,n,{suffix:this.newLineCharacter+u})},t.prototype.createJSDocText=function(t,r){var n=e.flatMap(r.jsDoc,(function(t){return e.isString(t.comment)?e.factory.createJSDocText(t.comment):t.comment})),i=e.singleOrUndefined(r.jsDoc);return i&&e.positionsAreOnSameLine(i.pos,i.end,t)&&0===e.length(n)?void 0:e.factory.createNodeArray(e.intersperse(n,e.factory.createJSDocText("\n")))},t.prototype.replaceJSDocComment=function(t,r,n){this.insertJsdocCommentBefore(t,function(e){if(216!==e.kind)return e;var t=169===e.parent.kind?e.parent:e.parent.parent;return t.jsDoc=e.jsDoc,t.jsDocCache=e.jsDocCache,t}(r),e.factory.createJSDocComment(this.createJSDocText(t,r),e.factory.createNodeArray(n)))},t.prototype.addJSDocTags=function(t,r,n){var i=e.flatMapToMutable(r.jsDoc,(function(e){return e.tags})),o=n.filter((function(t){return!i.some((function(r,n){var a=function(t,r){if(t.kind!==r.kind)return;switch(t.kind){case 343:var n=t,i=r;return e.isIdentifier(n.name)&&e.isIdentifier(i.name)&&n.name.escapedText===i.name.escapedText?e.factory.createJSDocParameterTag(void 0,i.name,!1,i.typeExpression,i.isNameFirst,n.comment):void 0;case 344:return e.factory.createJSDocReturnTag(void 0,r.typeExpression,t.comment);case 346:return e.factory.createJSDocTypeTag(void 0,r.typeExpression,t.comment)}}(r,t);return a&&(i[n]=a),!!a}))}));this.replaceJSDocComment(t,r,a(a([],i,!0),o,!0))},t.prototype.filterJSDocTags=function(t,r,n){this.replaceJSDocComment(t,r,e.filter(e.flatMapToMutable(r.jsDoc,(function(e){return e.tags})),n))},t.prototype.replaceRangeWithText=function(e,t,r){this.changes.push({kind:_.Text,sourceFile:e,range:t,text:r})},t.prototype.insertText=function(t,r,n){this.replaceRangeWithText(t,e.createRange(r),n)},t.prototype.tryInsertTypeAnnotation=function(t,r,n){var i,a;if(e.isFunctionLike(r)){if(!(a=e.findChildOfKind(r,21,t))){if(!e.isArrowFunction(r))return!1;a=e.first(r.parameters)}}else a=null!==(i=257===r.kind?r.exclamationToken:r.questionToken)&&void 0!==i?i:r.name;return this.insertNodeAt(t,a.end,n,{prefix:": "}),!0},t.prototype.tryInsertThisTypeAnnotation=function(t,r,n){var i=e.findChildOfKind(r,20,t).getStart(t)+1,a=r.parameters.length?", ":"";this.insertNodeAt(t,i,n,{prefix:"this: ",suffix:a})},t.prototype.insertTypeParameters=function(t,r,n){var i=(e.findChildOfKind(r,20,t)||e.first(r.parameters)).getStart(t);this.insertNodesAt(t,i,n,{prefix:"<",suffix:">",joiner:", "})},t.prototype.getOptionsForInsertNodeBefore=function(t,r,n){return e.isStatement(t)||e.isClassElement(t)?{suffix:n?this.newLineCharacter+this.newLineCharacter:this.newLineCharacter}:e.isVariableDeclaration(t)?{suffix:", "}:e.isParameter(t)?e.isParameter(r)?{suffix:", "}:{}:e.isStringLiteral(t)&&e.isImportDeclaration(t.parent)||e.isNamedImports(t)?{suffix:", "}:e.isImportSpecifier(t)?{suffix:","+(n?this.newLineCharacter:" ")}:e.Debug.failBadSyntaxKind(t)},t.prototype.insertNodeAtConstructorStart=function(t,r,n){var i=e.firstOrUndefined(r.body.statements);i&&r.body.multiLine?this.insertNodeBefore(t,i,n):this.replaceConstructorBody(t,r,a([n],r.body.statements,!0))},t.prototype.insertNodeAtConstructorStartAfterSuperCall=function(t,r,n){var i=e.find(r.body.statements,(function(t){return e.isExpressionStatement(t)&&e.isSuperCall(t.expression)}));i&&r.body.multiLine?this.insertNodeAfter(t,i,n):this.replaceConstructorBody(t,r,a(a([],r.body.statements,!0),[n],!1))},t.prototype.insertNodeAtConstructorEnd=function(t,r,n){var i=e.lastOrUndefined(r.body.statements);i&&r.body.multiLine?this.insertNodeAfter(t,i,n):this.replaceConstructorBody(t,r,a(a([],r.body.statements,!0),[n],!1))},t.prototype.replaceConstructorBody=function(t,r,n){this.replaceNode(t,r.body,e.factory.createBlock(n,!0))},t.prototype.insertNodeAtEndOfScope=function(t,r,n){var i=f(t,r.getLastToken(),{});this.insertNodeAt(t,i,n,{prefix:e.isLineBreak(t.text.charCodeAt(r.getLastToken().pos))?this.newLineCharacter:this.newLineCharacter+this.newLineCharacter,suffix:this.newLineCharacter})},t.prototype.insertMemberAtStart=function(e,t,r){this.insertNodeAtStartWorker(e,t,r)},t.prototype.insertNodeAtObjectStart=function(e,t,r){this.insertNodeAtStartWorker(e,t,r)},t.prototype.insertNodeAtStartWorker=function(e,t,r){var n,i=null!==(n=this.guessIndentationFromExistingMembers(e,t))&&void 0!==n?n:this.computeIndentationForNewMember(e,t);this.insertNodeAt(e,D(t).pos,r,this.getInsertNodeAtStartInsertOptions(e,t,i))},t.prototype.guessIndentationFromExistingMembers=function(t,r){for(var n,i=r,a=0,o=D(r);a<o.length;a++){var s=o[a];if(e.rangeStartPositionsAreOnSameLine(i,s,t))return;var c=s.getStart(t),u=e.formatting.SmartIndenter.findFirstNonWhitespaceColumn(e.getLineStartPositionForPosition(c,t),c,t,this.formatContext.options);if(void 0===n)n=u;else if(u!==n)return;i=s}return n},t.prototype.computeIndentationForNewMember=function(t,r){var n,i=r.getStart(t);return e.formatting.SmartIndenter.findFirstNonWhitespaceColumn(e.getLineStartPositionForPosition(i,t),i,t,this.formatContext.options)+(null!==(n=this.formatContext.options.indentSize)&&void 0!==n?n:4)},t.prototype.getInsertNodeAtStartInsertOptions=function(t,r,n){var i=0===D(r).length,a=e.addToSeen(this.classesWithNodesInsertedAtStart,e.getNodeId(r),{node:r,sourceFile:t}),o=e.isObjectLiteralExpression(r)&&(!e.isJsonSourceFile(t)||!i);return{indentation:n,prefix:(e.isObjectLiteralExpression(r)&&e.isJsonSourceFile(t)&&i&&!a?",":"")+this.newLineCharacter,suffix:o?",":e.isInterfaceDeclaration(r)&&i?";":""}},t.prototype.insertNodeAfterComma=function(e,t,r){var n=this.insertNodeAfterWorker(e,this.nextCommaToken(e,t)||t,r);this.insertNodeAt(e,n,r,this.getInsertNodeAfterOptions(e,t))},t.prototype.insertNodeAfter=function(e,t,r){var n=this.insertNodeAfterWorker(e,t,r);this.insertNodeAt(e,n,r,this.getInsertNodeAfterOptions(e,t))},t.prototype.insertNodeAtEndOfList=function(e,t,r){this.insertNodeAt(e,t.end,r,{prefix:", "})},t.prototype.insertNodesAfter=function(t,r,n){var i=this.insertNodeAfterWorker(t,r,e.first(n));this.insertNodesAt(t,i,n,this.getInsertNodeAfterOptions(t,r))},t.prototype.insertNodeAfterWorker=function(t,r,n){var i,a;return i=r,a=n,((e.isPropertySignature(i)||e.isPropertyDeclaration(i))&&e.isClassOrTypeElement(a)&&164===a.name.kind||e.isStatementButNotDeclaration(i)&&e.isStatementButNotDeclaration(a))&&59!==t.text.charCodeAt(r.end-1)&&this.replaceRange(t,e.createRange(r.end),e.factory.createToken(26)),m(t,r,{})},t.prototype.getInsertNodeAfterOptions=function(t,r){var n=this.getInsertNodeAfterOptionsWorker(r);return o(o({},n),{prefix:r.end===t.end&&e.isStatement(r)?n.prefix?"\n".concat(n.prefix):"\n":n.prefix})},t.prototype.getInsertNodeAfterOptionsWorker=function(t){switch(t.kind){case 260:case 264:return{prefix:this.newLineCharacter,suffix:this.newLineCharacter};case 257:case 10:case 79:return{prefix:", "};case 299:return{suffix:","+this.newLineCharacter};case 93:return{prefix:" "};case 166:return{};default:return e.Debug.assert(e.isStatement(t)||e.isClassOrTypeElement(t)),{suffix:this.newLineCharacter}}},t.prototype.insertName=function(t,r,n){if(e.Debug.assert(!r.name),216===r.kind){var i=e.findChildOfKind(r,38,t),a=e.findChildOfKind(r,20,t);a?(this.insertNodesAt(t,a.getStart(t),[e.factory.createToken(98),e.factory.createIdentifier(n)],{joiner:" "}),F(this,t,i)):(this.insertText(t,e.first(r.parameters).getStart(t),"function ".concat(n,"(")),this.replaceRange(t,i,e.factory.createToken(21))),238!==r.body.kind&&(this.insertNodesAt(t,r.body.getStart(t),[e.factory.createToken(18),e.factory.createToken(105)],{joiner:" ",suffix:" "}),this.insertNodesAt(t,r.body.end,[e.factory.createToken(26),e.factory.createToken(19)],{joiner:" "}))}else{var o=e.findChildOfKind(r,215===r.kind?98:84,t).end;this.insertNodeAt(t,o,e.factory.createIdentifier(n),{prefix:" "})}},t.prototype.insertExportModifier=function(e,t){this.insertText(e,t.getStart(e),"export ")},t.prototype.insertImportSpecifierAtIndex=function(t,r,n,i){var a=n.elements[i-1];a?this.insertNodeInListAfter(t,a,r):this.insertNodeBefore(t,n.elements[0],r,!e.positionsAreOnSameLine(n.elements[0].getStart(),n.parent.parent.getStart(),t))},t.prototype.insertNodeInListAfter=function(t,r,n,i){if(void 0===i&&(i=e.formatting.SmartIndenter.getContainingList(r,t)),i){var a=e.indexOfNode(i,r);if(!(a<0)){var o=r.getEnd();if(a!==i.length-1){var s=e.getTokenAtPosition(t,r.end);if(s&&y(r,s)){var c=i[a+1],u=l(t.text,c.getFullStart()),_="".concat(e.tokenToString(s.kind)).concat(t.text.substring(s.end,u));this.insertNodesAt(t,u,[n],{suffix:_})}}else{var d=r.getStart(t),p=e.getLineStartPositionForPosition(d,t),f=void 0,g=!1;if(1===i.length)f=27;else{var m=e.findPrecedingToken(r.pos,t);f=y(r,m)?m.kind:27,g=e.getLineStartPositionForPosition(i[a-1].getStart(t),t)!==p}if(function(t,r){for(var n=r;n<t.length;){var i=t.charCodeAt(n);if(!e.isWhiteSpaceSingleLine(i))return 47===i;n++}return!1}(t.text,r.end)&&(g=!0),g){this.replaceRange(t,e.createRange(o),e.factory.createToken(f));for(var v=e.formatting.SmartIndenter.findFirstNonWhitespaceColumn(p,d,t,this.formatContext.options),h=e.skipTrivia(t.text,o,!0,!1);h!==o&&e.isLineBreak(t.text.charCodeAt(h-1));)h--;this.replaceRange(t,e.createRange(h),n,{indentation:v,prefix:this.newLineCharacter})}else this.replaceRange(t,e.createRange(o),n,{prefix:"".concat(e.tokenToString(f)," ")})}}}else e.Debug.fail("node is not a list element")},t.prototype.parenthesizeExpression=function(t,r){this.replaceRange(t,e.rangeOfNode(r),e.factory.createParenthesizedExpression(r))},t.prototype.finishClassesWithNodesInsertedAtStart=function(){var t=this;this.classesWithNodesInsertedAtStart.forEach((function(r){var n=r.node,i=r.sourceFile,a=function(t,r){var n=e.findChildOfKind(t,18,r),i=e.findChildOfKind(t,19,r);return[null==n?void 0:n.end,null==i?void 0:i.end]}(n,i),o=a[0],s=a[1];if(void 0!==o&&void 0!==s){var c=0===D(n).length,u=e.positionsAreOnSameLine(o,s,i);c&&u&&o!==s-1&&t.deleteRange(i,e.createRange(o,s-1)),u&&t.insertText(i,s-1,t.newLineCharacter)}}))},t.prototype.finishDeleteDeclarations=function(){for(var t=this,r=new e.Set,n=function(t,n){i.deletedNodes.some((function(r){return r.sourceFile===t&&e.rangeContainsRangeExclusive(r.node,n)}))||(e.isArray(n)?i.deleteRange(t,e.rangeOfTypeParameters(t,n)):T.deleteDeclaration(i,r,t,n))},i=this,a=0,o=this.deletedNodes;a<o.length;a++){var s=o[a];n(s.sourceFile,s.node)}r.forEach((function(n){var i=n.getSourceFile(),a=e.formatting.SmartIndenter.getContainingList(n,i);if(n===e.last(a)){var o=e.findLastIndex(a,(function(e){return!r.has(e)}),a.length-2);-1!==o&&t.deleteRange(i,{pos:a[o].end,end:b(i,a[o+1])})}}))},t.prototype.getChanges=function(e){this.finishDeleteDeclarations(),this.finishClassesWithNodesInsertedAtStart();for(var t=v.getTextChangesFromChanges(this.changes,this.newLineCharacter,this.formatContext,e),r=0,n=this.newFiles;r<n.length;r++){var i=n[r],a=i.oldFile,o=i.fileName,s=i.statements;t.push(v.newFileChanges(a,o,s,this.newLineCharacter,this.formatContext))}return t},t.prototype.createNewFile=function(e,t,r){this.newFiles.push({oldFile:e,fileName:t,statements:r})},t}();function b(t,r){return e.skipTrivia(t.text,f(t,r,{leadingTriviaOption:c.IncludeAll}),!1,!0)}function x(t,r,n,i){var a=b(t,i);if(void 0===n||e.positionsAreOnSameLine(m(t,r,{}),a,t))return a;var o=e.findPrecedingToken(i.getStart(t),t);if(y(r,o)){var s=e.findPrecedingToken(r.getStart(t),t);if(y(n,s)){var c=e.skipTrivia(t.text,o.getEnd(),!0,!0);if(e.positionsAreOnSameLine(s.getStart(t),o.getStart(t),t))return e.isLineBreak(t.text.charCodeAt(c-1))?c-1:c;if(e.isLineBreak(t.text.charCodeAt(c)))return c}}return a}function D(t){return e.isObjectLiteralExpression(t)?t.properties:t.members}function S(t,r){for(var n=r.length-1;n>=0;n--){var i=r[n],a=i.span,o=i.newText;t="".concat(t.substring(0,a.start)).concat(o).concat(t.substring(e.textSpanEnd(a)))}return t}t.ChangeTracker=h,t.getNewFileText=function(e,t,r,n){return v.newFileChangesWorker(void 0,t,e,r,n)},function(t){function r(t,r,i,a,o){var s=i.map((function(e){return 4===e?"":n(e,t,a).text})).join(a),c=e.createSourceFile("any file name",s,99,!0,r);return S(s,e.formatting.formatDocument(c,o))+a}function n(t,r,n){var i=N(n),a=e.getNewLineKind(n);return e.createPrinter({newLine:a,neverAsciiEscape:!0,preserveSourceNewlines:!0,terminateUnterminatedLiterals:!0},i).writeNode(4,t,r,i),{text:i.getText(),node:E(t)}}t.getTextChangesFromChanges=function(t,r,i,a){return e.mapDefined(e.group(t,(function(e){return e.sourceFile.path})),(function(t){for(var s=t[0].sourceFile,c=e.stableSort(t,(function(e,t){return e.range.pos-t.range.pos||e.range.end-t.range.end})),u=function(t){e.Debug.assert(c[t].range.end<=c[t+1].range.pos,"Changes overlap",(function(){return"".concat(JSON.stringify(c[t].range)," and ").concat(JSON.stringify(c[t+1].range))}))},l=0;l<c.length-1;l++)u(l);var d=e.mapDefined(c,(function(t){var c=e.createTextSpanFromRange(t.range),u=function(t,r,i,a,s){var c;if(t.kind===_.Remove)return"";if(t.kind===_.Text)return t.text;var u=t.options,l=void 0===u?{}:u,d=t.range.pos,p=function(t){return function(t,r,i,a,s,c,u){var l=a.indentation,_=a.prefix,d=a.delta,p=n(t,r,s),f=p.node,g=p.text;u&&u(f,g);var m=e.getFormatCodeSettingsForWriting(c,r),y=void 0!==l?l:e.formatting.SmartIndenter.getIndentation(i,r,m,_===s||e.getLineStartPositionForPosition(i,r)===i);void 0===d&&(d=e.formatting.SmartIndenter.shouldIndentChildNode(m,t)&&m.indentSize||0);var v={text:g,getLineAndCharacterOfPosition:function(t){return e.getLineAndCharacterOfPosition(this,t)}},h=e.formatting.formatNodeGivenIndentation(f,v,r.languageVariant,y,d,o(o({},c),{options:m}));return S(g,h)}(t,r,d,l,i,a,s)},f=t.kind===_.ReplaceWithMultipleNodes?t.nodes.map((function(t){return e.removeSuffix(p(t),i)})).join((null===(c=t.options)||void 0===c?void 0:c.joiner)||i):p(t.node),g=void 0!==l.indentation||e.getLineStartPositionForPosition(d,r)===d?f:f.replace(/^\s+/,"");return(l.prefix||"")+g+(!l.suffix||e.endsWith(g,l.suffix)?"":l.suffix)}(t,s,r,i,a);if(c.length!==u.length||!e.stringContainsAt(s.text,u,c.start))return e.createTextChange(c,u)}));return d.length>0?{fileName:s.fileName,textChanges:d}:void 0}))},t.newFileChanges=function(t,n,i,a,o){var s=r(t,e.getScriptKindFromFileName(n),i,a,o);return{fileName:n,textChanges:[e.createTextChange(e.createTextSpan(0,0),s)],isNewFile:!0}},t.newFileChangesWorker=r,t.getNonformattedText=n}(v||(v={})),t.applyChanges=S;var T,C=o(o({},e.nullTransformationContext),{factory:e.createNodeFactory(1|e.nullTransformationContext.factory.flags,e.nullTransformationContext.factory.baseFactory)});function E(t){var n=e.visitEachChild(t,E,C,k,E),a=e.nodeIsSynthesized(n)?n:Object.create(n);return e.setTextRangePosEnd(a,r(t),i(t)),a}function k(t,n,a,o,s){var c=e.visitNodes(t,n,a,o,s);if(!c)return c;var u=c===t?e.factory.createNodeArray(c.slice(0)):c;return e.setTextRangePosEnd(u,r(t),i(t)),u}function N(t){var r=0,i=e.createTextWriter(t);function a(t,n){if(n||!function(t){return e.skipTrivia(t,0)===t.length}(t)){r=i.getTextPos();for(var a=0;e.isWhiteSpaceLike(t.charCodeAt(t.length-a-1));)a++;r-=a}}return{onBeforeEmitNode:function(e){e&&n(e,r)},onAfterEmitNode:function(e){e&&s(e,r)},onBeforeEmitNodeArray:function(e){e&&n(e,r)},onAfterEmitNodeArray:function(e){e&&s(e,r)},onBeforeEmitToken:function(e){e&&n(e,r)},onAfterEmitToken:function(e){e&&s(e,r)},write:function(e){i.write(e),a(e,!1)},writeComment:function(e){i.writeComment(e)},writeKeyword:function(e){i.writeKeyword(e),a(e,!1)},writeOperator:function(e){i.writeOperator(e),a(e,!1)},writePunctuation:function(e){i.writePunctuation(e),a(e,!1)},writeTrailingSemicolon:function(e){i.writeTrailingSemicolon(e),a(e,!1)},writeParameter:function(e){i.writeParameter(e),a(e,!1)},writeProperty:function(e){i.writeProperty(e),a(e,!1)},writeSpace:function(e){i.writeSpace(e),a(e,!1)},writeStringLiteral:function(e){i.writeStringLiteral(e),a(e,!1)},writeSymbol:function(e,t){i.writeSymbol(e,t),a(e,!1)},writeLine:function(e){i.writeLine(e)},increaseIndent:function(){i.increaseIndent()},decreaseIndent:function(){i.decreaseIndent()},getText:function(){return i.getText()},rawWrite:function(e){i.rawWrite(e),a(e,!1)},writeLiteral:function(e){i.writeLiteral(e),a(e,!0)},getTextPos:function(){return i.getTextPos()},getLine:function(){return i.getLine()},getColumn:function(){return i.getColumn()},getIndent:function(){return i.getIndent()},isAtStartOfLine:function(){return i.isAtStartOfLine()},hasTrailingComment:function(){return i.hasTrailingComment()},hasTrailingWhitespace:function(){return i.hasTrailingWhitespace()},clear:function(){i.clear(),r=0}}}function A(t,r){return!(e.isInComment(t,r)||e.isInString(t,r)||e.isInTemplateString(t,r)||e.isInJSXText(t,r))}function F(e,t,r,n){void 0===n&&(n={leadingTriviaOption:c.IncludeAll});var i=f(t,r,n),a=m(t,r,n);e.deleteRange(t,{pos:i,end:a})}function P(t,r,n,i){var a=e.Debug.checkDefined(e.formatting.SmartIndenter.getContainingList(i,n)),o=e.indexOfNode(a,i);e.Debug.assert(-1!==o),1!==a.length?(e.Debug.assert(!r.has(i),"Deleting a node twice"),r.add(i),t.deleteRange(n,{pos:b(n,i),end:o===a.length-1?m(n,i,{}):x(n,i,a[o-1],a[o+1])})):F(t,n,i)}t.assignPositionsToNode=E,t.createWriter=N,t.isValidLocationToAddComment=A,function(t){function r(t,r,n){if(n.parent.name){var i=e.Debug.checkDefined(e.getTokenAtPosition(r,n.pos-1));t.deleteRange(r,{pos:i.getStart(r),end:n.end})}else{F(t,r,e.getAncestor(n,269))}}t.deleteDeclaration=function(t,n,i,a){switch(a.kind){case 166:var o=a.parent;e.isArrowFunction(o)&&1===o.parameters.length&&!e.findChildOfKind(o,20,i)?t.replaceNodeWithText(i,a,"()"):P(t,n,i,a);break;case 269:case 268:F(t,i,a,{leadingTriviaOption:i.imports.length&&a===e.first(i.imports).parent||a===e.find(i.statements,e.isAnyImportSyntax)?c.Exclude:e.hasJSDocNodes(a)?c.JSDoc:c.StartLine});break;case 205:var s=a.parent;204===s.kind&&a!==e.last(s.elements)?F(t,i,a):P(t,n,i,a);break;case 257:!function(t,r,n,i){var a=i.parent;if(295===a.kind)return void t.deleteNodeRange(n,e.findChildOfKind(a,20,n),e.findChildOfKind(a,21,n));if(1!==a.declarations.length)return void P(t,r,n,i);var o=a.parent;switch(o.kind){case 247:case 246:t.replaceNode(n,i,e.factory.createObjectLiteralExpression());break;case 245:F(t,n,a);break;case 240:F(t,n,o,{leadingTriviaOption:e.hasJSDocNodes(o)?c.JSDoc:c.StartLine});break;default:e.Debug.assertNever(o)}}(t,n,i,a);break;case 165:P(t,n,i,a);break;case 273:var l=a.parent;1===l.elements.length?r(t,i,l):P(t,n,i,a);break;case 271:r(t,i,a);break;case 26:F(t,i,a,{trailingTriviaOption:u.Exclude});break;case 98:F(t,i,a,{leadingTriviaOption:c.Exclude});break;case 260:case 259:F(t,i,a,{leadingTriviaOption:e.hasJSDocNodes(a)?c.JSDoc:c.StartLine});break;default:a.parent?e.isImportClause(a.parent)&&a.parent.name===a?function(t,r,n){if(n.namedBindings){var i=n.name.getStart(r),a=e.getTokenAtPosition(r,n.name.end);if(a&&27===a.kind){var o=e.skipTrivia(r.text,a.end,!1,!0);t.deleteRange(r,{pos:i,end:o})}else F(t,r,n.name)}else F(t,r,n.parent)}(t,i,a.parent):e.isCallExpression(a.parent)&&e.contains(a.parent.arguments,a)?P(t,n,i,a):F(t,i,a):F(t,i,a)}}}(T||(T={})),t.deleteNode=F}(e.textChanges||(e.textChanges={}))}(_||(_={})),function(e){!function(t){var r=e.createMultiMap(),n=new e.Map;function i(e,t,r,n,i,a){return{fixName:e,description:t,changes:r,fixId:n,fixAllDescription:i,commands:a?[a]:void 0}}function s(e,t){return{changes:e,commands:t}}function c(t,r,n){for(var i=0,a=l(t);i<a.length;i++){var o=a[i];e.contains(r,o.code)&&n(o)}}function l(t){var r=t.program,n=t.sourceFile,i=t.cancellationToken;return a(a(a([],r.getSemanticDiagnostics(n,i),!0),r.getSyntacticDiagnostics(n,i),!0),e.computeSuggestionDiagnostics(n,r,i),!0)}t.createCodeFixActionWithoutFixAll=function(t,r,n){return i(t,e.diagnosticToString(n),r,void 0,void 0)},t.createCodeFixAction=function(t,r,n,a,o,s){return i(t,e.diagnosticToString(n),r,a,e.diagnosticToString(o),s)},t.createCodeFixActionMaybeFixAll=function(t,r,n,a,o,s){return i(t,e.diagnosticToString(n),r,a,o&&e.diagnosticToString(o),s)},t.registerCodeFix=function(t){for(var i=0,a=t.errorCodes;i<a.length;i++){var o=a[i];r.add(String(o),t)}if(t.fixIds)for(var s=0,c=t.fixIds;s<c.length;s++){var u=c[s];e.Debug.assert(!n.has(u)),n.set(u,t)}},t.getSupportedErrorCodes=function(){return e.arrayFrom(r.keys())},t.getFixes=function(t){var n=l(t),i=r.get(String(t.errorCode));return e.flatMap(i,(function(r){return e.map(r.getCodeActions(t),function(t,r){for(var n=t.errorCodes,i=0,a=0,s=r;a<s.length;a++){var c=s[a];if(e.contains(n,c.code)&&i++,i>1)break}var l=i<2;return function(e){var t=e.fixId,r=e.fixAllDescription,n=u(e,["fixId","fixAllDescription"]);return l?n:o(o({},n),{fixId:t,fixAllDescription:r})}}(r,n))}))},t.getAllFixes=function(t){return n.get(e.cast(t.fixId,e.isString)).getAllCodeActions(t)},t.createCombinedCodeActions=s,t.createFileTextChanges=function(e,t){return{fileName:e,textChanges:t}},t.codeFixAll=function(t,r,n){var i=[];return s(e.textChanges.ChangeTracker.with(t,(function(e){return c(t,r,(function(t){return n(e,t,i)}))})),0===i.length?void 0:i)},t.eachDiagnostic=c}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){var t,r;t=e.refactor||(e.refactor={}),r=new e.Map,t.registerRefactor=function(e,t){r.set(e,t)},t.getApplicableRefactors=function(n){return e.arrayFrom(e.flatMapIterator(r.values(),(function(e){var r;return n.cancellationToken&&n.cancellationToken.isCancellationRequested()||!(null===(r=e.kinds)||void 0===r?void 0:r.some((function(e){return t.refactorKindBeginsWith(e,n.kind)})))?void 0:e.getAvailableActions(n)})))},t.getEditsForRefactor=function(e,t,n){var i=r.get(t);return i&&i.getEditsForAction(e,n)}}(_||(_={})),function(e){!function(t){var r="addConvertToUnknownForNonOverlappingTypes",n=[e.Diagnostics.Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the_other_If_this_was_intentional_convert_the_expression_to_unknown_first.code];function i(t,r,n){var i=e.isAsExpression(n)?e.factory.createAsExpression(n.expression,e.factory.createKeywordTypeNode(157)):e.factory.createTypeAssertion(e.factory.createKeywordTypeNode(157),n.expression);t.replaceNode(r,n.expression,i)}function a(t,r){if(!e.isInJSFile(t))return e.findAncestor(e.getTokenAtPosition(t,r),(function(t){return e.isAsExpression(t)||e.isTypeAssertionExpression(t)}))}t.registerCodeFix({errorCodes:n,getCodeActions:function(n){var o=a(n.sourceFile,n.span.start);if(void 0!==o){var s=e.textChanges.ChangeTracker.with(n,(function(e){return i(e,n.sourceFile,o)}));return[t.createCodeFixAction(r,s,e.Diagnostics.Add_unknown_conversion_for_non_overlapping_types,r,e.Diagnostics.Add_unknown_to_all_conversions_of_non_overlapping_types)]}},fixIds:[r],getAllCodeActions:function(e){return t.codeFixAll(e,n,(function(e,t){var r=a(t.file,t.start);r&&i(e,t.file,r)}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){t.registerCodeFix({errorCodes:[e.Diagnostics.await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_has_no_imports_or_exports_Consider_adding_an_empty_export_to_make_this_file_a_module.code,e.Diagnostics.for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_has_no_imports_or_exports_Consider_adding_an_empty_export_to_make_this_file_a_module.code],getCodeActions:function(r){var n=r.sourceFile,i=e.textChanges.ChangeTracker.with(r,(function(t){var r=e.factory.createExportDeclaration(void 0,!1,e.factory.createNamedExports([]),void 0);t.insertNodeAtEndOfScope(n,n,r)}));return[t.createCodeFixActionWithoutFixAll("addEmptyExportDeclaration",i,e.Diagnostics.Add_export_to_make_this_file_into_a_module)]}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="addMissingAsync",n=[e.Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1.code,e.Diagnostics.Type_0_is_not_assignable_to_type_1.code,e.Diagnostics.Type_0_is_not_comparable_to_type_1.code];function i(n,i,a,o){var s=a((function(t){return function(t,r,n,i){if(i&&i.has(e.getNodeId(n)))return;null==i||i.add(e.getNodeId(n));var a=e.factory.updateModifiers(e.getSynthesizedDeepClone(n,!0),e.factory.createNodeArray(e.factory.createModifiersFromModifierFlags(512|e.getSyntacticModifierFlags(n))));t.replaceNode(r,n,a)}(t,n.sourceFile,i,o)}));return t.createCodeFixAction(r,s,e.Diagnostics.Add_async_modifier_to_containing_function,r,e.Diagnostics.Add_all_missing_async_modifiers)}function a(t,r){if(r){var n=e.getTokenAtPosition(t,r.start);return e.findAncestor(n,(function(n){return n.getStart(t)<r.start||n.getEnd()>e.textSpanEnd(r)?"quit":(e.isArrowFunction(n)||e.isMethodDeclaration(n)||e.isFunctionExpression(n)||e.isFunctionDeclaration(n))&&e.textSpansEqual(r,e.createTextSpanFromNode(n,t))}))}}t.registerCodeFix({fixIds:[r],errorCodes:n,getCodeActions:function(t){var r=t.sourceFile,n=t.errorCode,o=t.cancellationToken,s=t.program,c=t.span,u=e.find(s.getTypeChecker().getDiagnostics(r,o),function(t,r){return function(n){var i=n.start,a=n.length,o=n.relatedInformation,s=n.code;return e.isNumber(i)&&e.isNumber(a)&&e.textSpansEqual({start:i,length:a},t)&&s===r&&!!o&&e.some(o,(function(t){return t.code===e.Diagnostics.Did_you_mean_to_mark_this_function_as_async.code}))}}(c,n)),l=a(r,u&&u.relatedInformation&&e.find(u.relatedInformation,(function(t){return t.code===e.Diagnostics.Did_you_mean_to_mark_this_function_as_async.code})));if(l){return[i(t,l,(function(r){return e.textChanges.ChangeTracker.with(t,r)}))]}},getAllCodeActions:function(r){var o=r.sourceFile,s=new e.Set;return t.codeFixAll(r,n,(function(t,n){var c=n.relatedInformation&&e.find(n.relatedInformation,(function(t){return t.code===e.Diagnostics.Did_you_mean_to_mark_this_function_as_async.code})),u=a(o,c);if(u){return i(r,u,(function(e){return e(t),[]}),s)}}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="addMissingAwait",n=e.Diagnostics.Property_0_does_not_exist_on_type_1.code,i=[e.Diagnostics.This_expression_is_not_callable.code,e.Diagnostics.This_expression_is_not_constructable.code],o=a([e.Diagnostics.An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type.code,e.Diagnostics.The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type.code,e.Diagnostics.The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type.code,e.Diagnostics.Operator_0_cannot_be_applied_to_type_1.code,e.Diagnostics.Operator_0_cannot_be_applied_to_types_1_and_2.code,e.Diagnostics.This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap.code,e.Diagnostics.This_condition_will_always_return_true_since_this_0_is_always_defined.code,e.Diagnostics.Type_0_is_not_an_array_type.code,e.Diagnostics.Type_0_is_not_an_array_type_or_a_string_type.code,e.Diagnostics.Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es2015_or_higher.code,e.Diagnostics.Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator.code,e.Diagnostics.Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator.code,e.Diagnostics.Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator.code,e.Diagnostics.Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator.code,e.Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1.code,n],i,!0);function s(t,r,n,i,a){var o=e.getFixableErrorSpanExpression(t,n);return o&&function(t,r,n,i,a){var o=a.getTypeChecker(),s=o.getDiagnostics(t,i);return e.some(s,(function(t){var i=t.start,a=t.length,o=t.relatedInformation,s=t.code;return e.isNumber(i)&&e.isNumber(a)&&e.textSpansEqual({start:i,length:a},n)&&s===r&&!!o&&e.some(o,(function(t){return t.code===e.Diagnostics.Did_you_forget_to_use_await.code}))}))}(t,r,n,i,a)&&l(o)?o:void 0}function c(r,n,i,a,s,c){var u=r.sourceFile,d=r.program,p=r.cancellationToken,f=function(t,r,n,i,a){var s=function(t,r){if(e.isPropertyAccessExpression(t.parent)&&e.isIdentifier(t.parent.expression))return{identifiers:[t.parent.expression],isCompleteFix:!0};if(e.isIdentifier(t))return{identifiers:[t],isCompleteFix:!0};if(e.isBinaryExpression(t)){for(var n=void 0,i=!0,a=0,o=[t.left,t.right];a<o.length;a++){var s=o[a],c=r.getTypeAtLocation(s);if(r.getPromisedTypeOfPromise(c)){if(!e.isIdentifier(s)){i=!1;continue}(n||(n=[])).push(s)}}return n&&{identifiers:n,isCompleteFix:i}}}(t,a);if(!s)return;for(var c,u=s.isCompleteFix,_=function(t){var s=a.getSymbolAtLocation(t);if(!s)return"continue";var _=e.tryCast(s.valueDeclaration,e.isVariableDeclaration),d=_&&e.tryCast(_.name,e.isIdentifier),p=e.getAncestor(_,240);if(!_||!p||_.type||!_.initializer||p.getSourceFile()!==r||e.hasSyntacticModifier(p,1)||!d||!l(_.initializer))return u=!1,"continue";var f=i.getSemanticDiagnostics(r,n),g=e.FindAllReferences.Core.eachSymbolReferenceInFile(d,a,r,(function(n){return t!==n&&!function(t,r,n,i){var a=e.isPropertyAccessExpression(t.parent)?t.parent.name:e.isBinaryExpression(t.parent)?t.parent:t,s=e.find(r,(function(e){return e.start===a.getStart(n)&&e.start+e.length===a.getEnd()}));return s&&e.contains(o,s.code)||1&i.getTypeAtLocation(a).flags}(n,f,r,a)}));if(g)return u=!1,"continue";(c||(c=[])).push({expression:_.initializer,declarationSymbol:s})},d=0,p=s.identifiers;d<p.length;d++){_(p[d])}return c&&{initializers:c,needsSecondPassForFixAll:!u}}(n,u,p,d,a);if(f){var g=s((function(t){e.forEach(f.initializers,(function(e){var r=e.expression;return _(t,i,u,a,r,c)})),c&&f.needsSecondPassForFixAll&&_(t,i,u,a,n,c)}));return t.createCodeFixActionWithoutFixAll("addMissingAwaitToInitializer",g,1===f.initializers.length?[e.Diagnostics.Add_await_to_initializer_for_0,f.initializers[0].declarationSymbol.name]:e.Diagnostics.Add_await_to_initializers)}}function u(n,i,a,o,s,c){var u=s((function(e){return _(e,a,n.sourceFile,o,i,c)}));return t.createCodeFixAction(r,u,e.Diagnostics.Add_await,r,e.Diagnostics.Fix_all_expressions_possibly_missing_await)}function l(t){return 32768&t.kind||!!e.findAncestor(t,(function(t){return t.parent&&e.isArrowFunction(t.parent)&&t.parent.body===t||e.isBlock(t)&&(259===t.parent.kind||215===t.parent.kind||216===t.parent.kind||171===t.parent.kind)}))}function _(t,r,a,o,s,c){if(e.isForOfStatement(s.parent)&&!s.parent.awaitModifier){var u=o.getTypeAtLocation(s),l=o.getAsyncIterableType();if(l&&o.isTypeAssignableTo(u,l)){var _=s.parent;return void t.replaceNode(a,_,e.factory.updateForOfStatement(_,e.factory.createToken(133),_.initializer,_.expression,_.statement))}}if(e.isBinaryExpression(s))for(var p=0,f=[s.left,s.right];p<f.length;p++){var g=f[p];if(c&&e.isIdentifier(g))if((v=o.getSymbolAtLocation(g))&&c.has(e.getSymbolId(v)))continue;var m=o.getTypeAtLocation(g),y=o.getPromisedTypeOfPromise(m)?e.factory.createAwaitExpression(g):g;t.replaceNode(a,g,y)}else if(r===n&&e.isPropertyAccessExpression(s.parent)){if(c&&e.isIdentifier(s.parent.expression))if((v=o.getSymbolAtLocation(s.parent.expression))&&c.has(e.getSymbolId(v)))return;t.replaceNode(a,s.parent.expression,e.factory.createParenthesizedExpression(e.factory.createAwaitExpression(s.parent.expression))),d(t,s.parent.expression,a)}else if(e.contains(i,r)&&e.isCallOrNewExpression(s.parent)){if(c&&e.isIdentifier(s))if((v=o.getSymbolAtLocation(s))&&c.has(e.getSymbolId(v)))return;t.replaceNode(a,s,e.factory.createParenthesizedExpression(e.factory.createAwaitExpression(s))),d(t,s,a)}else{var v;if(c&&e.isVariableDeclaration(s.parent)&&e.isIdentifier(s.parent.name))if((v=o.getSymbolAtLocation(s.parent.name))&&!e.tryAddToSet(c,e.getSymbolId(v)))return;t.replaceNode(a,s,e.factory.createAwaitExpression(s))}}function d(t,r,n){var i=e.findPrecedingToken(r.pos,n);i&&e.positionIsASICandidate(i.end,i.parent,n)&&t.insertText(n,r.getStart(n),";")}t.registerCodeFix({fixIds:[r],errorCodes:o,getCodeActions:function(t){var r=t.sourceFile,n=t.errorCode,i=s(r,n,t.span,t.cancellationToken,t.program);if(i){var a=t.program.getTypeChecker(),o=function(r){return e.textChanges.ChangeTracker.with(t,r)};return e.compact([c(t,i,n,a,o),u(t,i,n,a,o)])}},getAllCodeActions:function(r){var n=r.sourceFile,i=r.program,a=r.cancellationToken,l=r.program.getTypeChecker(),_=new e.Set;return t.codeFixAll(r,o,(function(e,t){var o=s(n,t.code,t,a,i);if(o){var d=function(t){return t(e),[]};return c(r,o,t.code,l,d,_)||u(r,o,t.code,l,d,_)}}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="addMissingConst",n=[e.Diagnostics.Cannot_find_name_0.code,e.Diagnostics.No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer.code];function i(t,r,n,i,s){var c=e.getTokenAtPosition(r,n),u=e.findAncestor(c,(function(t){return e.isForInOrOfStatement(t.parent)?t.parent.initializer===t:!function(e){switch(e.kind){case 79:case 206:case 207:case 299:case 300:return!0;default:return!1}}(t)&&"quit"}));if(u)return a(t,u,r,s);var l=c.parent;if(e.isBinaryExpression(l)&&63===l.operatorToken.kind&&e.isExpressionStatement(l.parent))return a(t,c,r,s);if(e.isArrayLiteralExpression(l)){var _=i.getTypeChecker();if(!e.every(l.elements,(function(t){return function(t,r){var n=e.isIdentifier(t)?t:e.isAssignmentExpression(t,!0)&&e.isIdentifier(t.left)?t.left:void 0;return!!n&&!r.getSymbolAtLocation(n)}(t,_)})))return;return a(t,l,r,s)}var d=e.findAncestor(c,(function(t){return!!e.isExpressionStatement(t.parent)||!function(e){switch(e.kind){case 79:case 223:case 27:return!0;default:return!1}}(t)&&"quit"}));if(d){if(!o(d,i.getTypeChecker()))return;return a(t,d,r,s)}}function a(t,r,n,i){i&&!e.tryAddToSet(i,r)||t.insertModifierBefore(n,85,r)}function o(t,r){return!!e.isBinaryExpression(t)&&(27===t.operatorToken.kind?e.every([t.left,t.right],(function(e){return o(e,r)})):63===t.operatorToken.kind&&e.isIdentifier(t.left)&&!r.getSymbolAtLocation(t.left))}t.registerCodeFix({errorCodes:n,getCodeActions:function(n){var a=e.textChanges.ChangeTracker.with(n,(function(e){return i(e,n.sourceFile,n.span.start,n.program)}));if(a.length>0)return[t.createCodeFixAction(r,a,e.Diagnostics.Add_const_to_unresolved_variable,r,e.Diagnostics.Add_const_to_all_unresolved_variables)]},fixIds:[r],getAllCodeActions:function(r){var a=new e.Set;return t.codeFixAll(r,n,(function(e,t){return i(e,t.file,t.start,r.program,a)}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="addMissingDeclareProperty",n=[e.Diagnostics.Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_add_a_declare_modifier_or_remove_the_redundant_declaration.code];function i(t,r,n,i){var a=e.getTokenAtPosition(r,n);if(e.isIdentifier(a)){var o=a.parent;169!==o.kind||i&&!e.tryAddToSet(i,o)||t.insertModifierBefore(r,136,o)}}t.registerCodeFix({errorCodes:n,getCodeActions:function(n){var a=e.textChanges.ChangeTracker.with(n,(function(e){return i(e,n.sourceFile,n.span.start)}));if(a.length>0)return[t.createCodeFixAction(r,a,e.Diagnostics.Prefix_with_declare,r,e.Diagnostics.Prefix_all_incorrect_property_declarations_with_declare)]},fixIds:[r],getAllCodeActions:function(r){var a=new e.Set;return t.codeFixAll(r,n,(function(e,t){return i(e,t.file,t.start,a)}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="addMissingInvocationForDecorator",n=[e.Diagnostics._0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write_0.code];function i(t,r,n){var i=e.getTokenAtPosition(r,n),a=e.findAncestor(i,e.isDecorator);e.Debug.assert(!!a,"Expected position to be owned by a decorator.");var o=e.factory.createCallExpression(a.expression,void 0,void 0);t.replaceNode(r,a.expression,o)}t.registerCodeFix({errorCodes:n,getCodeActions:function(n){var a=e.textChanges.ChangeTracker.with(n,(function(e){return i(e,n.sourceFile,n.span.start)}));return[t.createCodeFixAction(r,a,e.Diagnostics.Call_decorator_expression,r,e.Diagnostics.Add_to_all_uncalled_decorators)]},fixIds:[r],getAllCodeActions:function(e){return t.codeFixAll(e,n,(function(e,t){return i(e,t.file,t.start)}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="addNameToNamelessParameter",n=[e.Diagnostics.Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1.code];function i(t,r,n){var i=e.getTokenAtPosition(r,n),a=i.parent;if(!e.isParameter(a))return e.Debug.fail("Tried to add a parameter name to a non-parameter: "+e.Debug.formatSyntaxKind(i.kind));var o=a.parent.parameters.indexOf(a);e.Debug.assert(!a.type,"Tried to add a parameter name to a parameter that already had one."),e.Debug.assert(o>-1,"Parameter not found in parent parameter list.");var s=e.factory.createTypeReferenceNode(a.name,void 0),c=e.factory.createParameterDeclaration(a.modifiers,a.dotDotDotToken,"arg"+o,a.questionToken,a.dotDotDotToken?e.factory.createArrayTypeNode(s):s,a.initializer);t.replaceNode(r,a,c)}t.registerCodeFix({errorCodes:n,getCodeActions:function(n){var a=e.textChanges.ChangeTracker.with(n,(function(e){return i(e,n.sourceFile,n.span.start)}));return[t.createCodeFixAction(r,a,e.Diagnostics.Add_parameter_name,r,e.Diagnostics.Add_names_to_all_parameters_without_names)]},fixIds:[r],getAllCodeActions:function(e){return t.codeFixAll(e,n,(function(e,t){return i(e,t.file,t.start)}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="addOptionalPropertyUndefined",n=[e.Diagnostics.Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_type_of_the_target.code,e.Diagnostics.Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_types_of_the_target_s_properties.code,e.Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_types_of_the_target_s_properties.code];function i(t,r){var n;if(t){if(e.isBinaryExpression(t.parent)&&63===t.parent.operatorToken.kind)return{source:t.parent.right,target:t.parent.left};if(e.isVariableDeclaration(t.parent)&&t.parent.initializer)return{source:t.parent.initializer,target:t.parent.name};if(e.isCallExpression(t.parent)){var a=r.getSymbolAtLocation(t.parent.expression);if(!(null==a?void 0:a.valueDeclaration)||!e.isFunctionLikeKind(a.valueDeclaration.kind))return;if(!e.isExpression(t))return;var o=t.parent.arguments.indexOf(t);if(-1===o)return;var s=a.valueDeclaration.parameters[o].name;if(e.isIdentifier(s))return{source:t,target:s}}else if(e.isPropertyAssignment(t.parent)&&e.isIdentifier(t.parent.name)||e.isShorthandPropertyAssignment(t.parent)){var c=i(t.parent.parent,r);if(!c)return;var u=r.getPropertyOfType(r.getTypeAtLocation(c.target),t.parent.name.text),l=null===(n=null==u?void 0:u.declarations)||void 0===n?void 0:n[0];if(!l)return;return{source:e.isPropertyAssignment(t.parent)?t.parent.initializer:t.parent.name,target:l}}}}t.registerCodeFix({errorCodes:n,getCodeActions:function(n){var o=n.program.getTypeChecker(),s=function(t,r,n){var a,o,s=i(e.getFixableErrorSpanExpression(t,r),n);if(!s)return e.emptyArray;var c=s.source,u=s.target,l=function(t,r,n){return e.isPropertyAccessExpression(r)&&!!n.getExactOptionalProperties(n.getTypeAtLocation(r.expression)).length&&n.getTypeAtLocation(t)===n.getUndefinedType()}(c,u,n)?n.getTypeAtLocation(u.expression):n.getTypeAtLocation(u);if(null===(o=null===(a=l.symbol)||void 0===a?void 0:a.declarations)||void 0===o?void 0:o.some((function(t){return e.getSourceFileOfNode(t).fileName.match(/\.d\.ts$/)})))return e.emptyArray;return n.getExactOptionalProperties(l)}(n.sourceFile,n.span,o);if(s.length){var c=e.textChanges.ChangeTracker.with(n,(function(t){return function(t,r){for(var n=0,i=r;n<i.length;n++){var o=i[n].valueDeclaration;if(o&&(e.isPropertySignature(o)||e.isPropertyDeclaration(o))&&o.type){var s=e.factory.createUnionTypeNode(a(a([],189===o.type.kind?o.type.types:[o.type],!0),[e.factory.createTypeReferenceNode("undefined")],!1));t.replaceNode(o.getSourceFile(),o.type,s)}}}(t,s)}));return[t.createCodeFixActionWithoutFixAll(r,c,e.Diagnostics.Add_undefined_to_optional_property_type)]}},fixIds:[r]})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="annotateWithTypeFromJSDoc",n=[e.Diagnostics.JSDoc_types_may_be_moved_to_TypeScript_types.code];function i(t,r){var n=e.getTokenAtPosition(t,r);return e.tryCast(e.isParameter(n.parent)?n.parent.parent:n.parent,a)}function a(t){return function(t){return e.isFunctionLikeDeclaration(t)||257===t.kind||168===t.kind||169===t.kind}(t)&&o(t)}function o(t){return e.isFunctionLikeDeclaration(t)?t.parameters.some(o)||!t.type&&!!e.getJSDocReturnType(t):!t.type&&!!e.getJSDocType(t)}function s(t,r,n){if(e.isFunctionLikeDeclaration(n)&&(e.getJSDocReturnType(n)||n.parameters.some((function(t){return!!e.getJSDocType(t)})))){if(!n.typeParameters){var i=e.getJSDocTypeParameterDeclarations(n);i.length&&t.insertTypeParameters(r,n,i)}var a=e.isArrowFunction(n)&&!e.findChildOfKind(n,20,r);a&&t.insertNodeBefore(r,e.first(n.parameters),e.factory.createToken(20));for(var o=0,s=n.parameters;o<s.length;o++){var u=s[o];if(!u.type){var l=e.getJSDocType(u);l&&t.tryInsertTypeAnnotation(r,u,c(l))}}if(a&&t.insertNodeAfter(r,e.last(n.parameters),e.factory.createToken(21)),!n.type){var _=e.getJSDocReturnType(n);_&&t.tryInsertTypeAnnotation(r,n,c(_))}}else{var d=e.Debug.checkDefined(e.getJSDocType(n),"A JSDocType for this declaration should exist");e.Debug.assert(!n.type,"The JSDocType decl should have a type"),t.tryInsertTypeAnnotation(r,n,c(d))}}function c(t){switch(t.kind){case 315:case 316:return e.factory.createTypeReferenceNode("any",e.emptyArray);case 319:return function(t){return e.factory.createUnionTypeNode([e.visitNode(t.type,c),e.factory.createTypeReferenceNode("undefined",e.emptyArray)])}(t);case 318:return c(t.type);case 317:return function(t){return e.factory.createUnionTypeNode([e.visitNode(t.type,c),e.factory.createTypeReferenceNode("null",e.emptyArray)])}(t);case 321:return function(t){return e.factory.createArrayTypeNode(e.visitNode(t.type,c))}(t);case 320:return function(t){var r;return e.factory.createFunctionTypeNode(e.emptyArray,t.parameters.map(u),null!==(r=t.type)&&void 0!==r?r:e.factory.createKeywordTypeNode(131))}(t);case 180:return function(t){var r=t.typeName,n=t.typeArguments;if(e.isIdentifier(t.typeName)){if(e.isJSDocIndexSignature(t))return function(t){var r=e.factory.createParameterDeclaration(void 0,void 0,148===t.typeArguments[0].kind?"n":"s",void 0,e.factory.createTypeReferenceNode(148===t.typeArguments[0].kind?"number":"string",[]),void 0),n=e.factory.createTypeLiteralNode([e.factory.createIndexSignature(void 0,[r],t.typeArguments[1])]);return e.setEmitFlags(n,1),n}(t);var i=t.typeName.text;switch(t.typeName.text){case"String":case"Boolean":case"Object":case"Number":i=i.toLowerCase();break;case"array":case"date":case"promise":i=i[0].toUpperCase()+i.slice(1)}r=e.factory.createIdentifier(i),n="Array"!==i&&"Promise"!==i||t.typeArguments?e.visitNodes(t.typeArguments,c):e.factory.createNodeArray([e.factory.createTypeReferenceNode("any",e.emptyArray)])}return e.factory.createTypeReferenceNode(r,n)}(t);default:var r=e.visitEachChild(t,c,e.nullTransformationContext);return e.setEmitFlags(r,1),r}}function u(t){var r=t.parent.parameters.indexOf(t),n=321===t.type.kind&&r===t.parent.parameters.length-1,i=t.name||(n?"rest":"arg"+r),a=n?e.factory.createToken(25):t.dotDotDotToken;return e.factory.createParameterDeclaration(t.modifiers,a,i,t.questionToken,e.visitNode(t.type,c),t.initializer)}t.registerCodeFix({errorCodes:n,getCodeActions:function(n){var a=i(n.sourceFile,n.span.start);if(a){var o=e.textChanges.ChangeTracker.with(n,(function(e){return s(e,n.sourceFile,a)}));return[t.createCodeFixAction(r,o,e.Diagnostics.Annotate_with_type_from_JSDoc,r,e.Diagnostics.Annotate_everything_with_types_from_JSDoc)]}},fixIds:[r],getAllCodeActions:function(e){return t.codeFixAll(e,n,(function(e,t){var r=i(t.file,t.start);r&&s(e,t.file,r)}))}}),t.parameterShouldGetTypeFromJSDoc=a}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="convertFunctionToEs6Class",n=[e.Diagnostics.This_constructor_function_may_be_converted_to_a_class_declaration.code];function i(t,r,n,i,s,c){var u=i.getSymbolAtLocation(e.getTokenAtPosition(r,n));if(u&&u.valueDeclaration&&19&u.flags){var l=u.valueDeclaration;if(e.isFunctionDeclaration(l)||e.isFunctionExpression(l))t.replaceNode(r,l,function(t){var r=p(u);t.body&&r.unshift(e.factory.createConstructorDeclaration(void 0,t.parameters,t.body));var n=a(t,93);return e.factory.createClassDeclaration(n,t.name,void 0,void 0,r)}(l));else if(e.isVariableDeclaration(l)){var _=function(t){var r=t.initializer;if(!r||!e.isFunctionExpression(r)||!e.isIdentifier(t.name))return;var n=p(t.symbol);r.body&&n.unshift(e.factory.createConstructorDeclaration(void 0,r.parameters,r.body));var i=a(t.parent.parent,93);return e.factory.createClassDeclaration(i,t.name,void 0,void 0,n)}(l);if(!_)return;var d=l.parent.parent;e.isVariableDeclarationList(l.parent)&&l.parent.declarations.length>1?(t.delete(r,l),t.insertNodeAfter(r,d,_)):t.replaceNode(r,d,_)}}function p(n){var i=[];return n.exports&&n.exports.forEach((function(t){if("prototype"===t.name&&t.declarations){var r=t.declarations[0];if(1===t.declarations.length&&e.isPropertyAccessExpression(r)&&e.isBinaryExpression(r.parent)&&63===r.parent.operatorToken.kind&&e.isObjectLiteralExpression(r.parent.right))u(r.parent.right.symbol,void 0,i)}else u(t,[e.factory.createToken(124)],i)})),n.members&&n.members.forEach((function(a,s){var c,l,_,d;if("constructor"===s&&a.valueDeclaration){var p=null===(d=null===(_=null===(l=null===(c=n.exports)||void 0===c?void 0:c.get("prototype"))||void 0===l?void 0:l.declarations)||void 0===_?void 0:_[0])||void 0===d?void 0:d.parent;p&&e.isBinaryExpression(p)&&e.isObjectLiteralExpression(p.right)&&e.some(p.right.properties,o)||t.delete(r,a.valueDeclaration.parent)}else u(a,void 0,i)})),i;function u(n,i,u){if(8192&n.flags||4096&n.flags){var l,_,d=n.valueDeclaration,p=d.parent,f=p.right;if(l=d,_=f,e.isAccessExpression(l)?e.isPropertyAccessExpression(l)&&o(l)||e.isFunctionLike(_):e.every(l.properties,(function(t){return!!(e.isMethodDeclaration(t)||e.isGetOrSetAccessorDeclaration(t)||e.isPropertyAssignment(t)&&e.isFunctionExpression(t.initializer)&&t.name||o(t))})))if(!e.some(u,(function(t){var r=e.getNameOfDeclaration(t);return!(!r||!e.isIdentifier(r)||e.idText(r)!==e.symbolName(n))}))){var g=p.parent&&241===p.parent.kind?p.parent:p;if(t.delete(r,g),f){if(e.isAccessExpression(d)&&(e.isFunctionExpression(f)||e.isArrowFunction(f))){var m=e.getQuotePreference(r,s),y=function(t,r,n){if(e.isPropertyAccessExpression(t))return t.name;var i=t.argumentExpression;if(e.isNumericLiteral(i))return i;if(e.isStringLiteralLike(i))return e.isIdentifierText(i.text,e.getEmitScriptTarget(r))?e.factory.createIdentifier(i.text):e.isNoSubstitutionTemplateLiteral(i)?e.factory.createStringLiteral(i.text,0===n):i;return}(d,c,m);y&&h(u,f,y)}else if(e.isObjectLiteralExpression(f))e.forEach(f.properties,(function(t){(e.isMethodDeclaration(t)||e.isGetOrSetAccessorDeclaration(t))&&u.push(t),e.isPropertyAssignment(t)&&e.isFunctionExpression(t.initializer)&&h(u,t.initializer,t.name),o(t)}));else if(!e.isSourceFileJS(r)&&e.isPropertyAccessExpression(d)){var v=e.factory.createPropertyDeclaration(i,d.name,void 0,void 0,f);return e.copyLeadingComments(p.parent,v,r),void u.push(v)}}else u.push(e.factory.createPropertyDeclaration(i,n.name,void 0,void 0,void 0))}}function h(t,n,o){return e.isFunctionExpression(n)?function(t,n,o){var s=e.concatenate(i,a(n,132)),c=e.factory.createMethodDeclaration(s,void 0,o,void 0,void 0,n.parameters,void 0,n.body);return e.copyLeadingComments(p,c,r),void t.push(c)}(t,n,o):function(t,n,o){var s,c=n.body;s=238===c.kind?c:e.factory.createBlock([e.factory.createReturnStatement(c)]);var u=e.concatenate(i,a(n,132)),l=e.factory.createMethodDeclaration(u,void 0,o,void 0,void 0,n.parameters,void 0,s);e.copyLeadingComments(p,l,r),t.push(l)}(t,n,o)}}}}function a(t,r){return e.canHaveModifiers(t)?e.filter(t.modifiers,(function(e){return e.kind===r})):void 0}function o(t){return!!t.name&&!(!e.isIdentifier(t.name)||"constructor"!==t.name.text)}t.registerCodeFix({errorCodes:n,getCodeActions:function(n){var a=e.textChanges.ChangeTracker.with(n,(function(e){return i(e,n.sourceFile,n.span.start,n.program.getTypeChecker(),n.preferences,n.program.getCompilerOptions())}));return[t.createCodeFixAction(r,a,e.Diagnostics.Convert_function_to_an_ES2015_class,r,e.Diagnostics.Convert_all_constructor_functions_to_classes)]},fixIds:[r],getAllCodeActions:function(e){return t.codeFixAll(e,n,(function(t,r){return i(t,r.file,r.start,e.program.getTypeChecker(),e.preferences,e.program.getCompilerOptions())}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r,n="convertToAsyncFunction",i=[e.Diagnostics.This_may_be_converted_to_an_async_function.code],o=!0;function s(t,r,n,i){var a,o=e.getTokenAtPosition(r,n);if(a=e.isIdentifier(o)&&e.isVariableDeclaration(o.parent)&&o.parent.initializer&&e.isFunctionLikeDeclaration(o.parent.initializer)?o.parent.initializer:e.tryCast(e.getContainingFunction(e.getTokenAtPosition(r,n)),e.canBeConvertedToAsync)){var s=new e.Map,u=e.isInJSFile(a),l=function(t,r){if(!t.body)return new e.Set;var n=new e.Set;return e.forEachChild(t.body,(function t(i){c(i,r,"then")?(n.add(e.getNodeId(i)),e.forEach(i.arguments,t)):c(i,r,"catch")||c(i,r,"finally")?(n.add(e.getNodeId(i)),e.forEachChild(i,t)):_(i,r)?n.add(e.getNodeId(i)):e.forEachChild(i,t)})),n}(a,i),f=function(t,r,n){var i=new e.Map,a=e.createMultiMap();return e.forEachChild(t,(function t(o){if(e.isIdentifier(o)){var s=r.getSymbolAtLocation(o);if(s){var c=T(r.getTypeAtLocation(o),r),u=e.getSymbolId(s).toString();if(!c||e.isParameter(o.parent)||e.isFunctionLikeDeclaration(o.parent)||n.has(u)){if(o.parent&&(e.isParameter(o.parent)||e.isVariableDeclaration(o.parent)||e.isBindingElement(o.parent))){var l=o.text,_=a.get(l);if(_&&_.some((function(e){return e!==s}))){var p=d(o,a);i.set(u,p.identifier),n.set(u,p),a.add(l,s)}else{var f=e.getSynthesizedDeepClone(o);n.set(u,N(f)),a.add(l,s)}}}else{var g=e.firstOrUndefined(c.parameters),m=(null==g?void 0:g.valueDeclaration)&&e.isParameter(g.valueDeclaration)&&e.tryCast(g.valueDeclaration.name,e.isIdentifier)||e.factory.createUniqueName("result",16),y=d(m,a);n.set(u,y),a.add(m.text,s)}}}else e.forEachChild(o,t)})),e.getSynthesizedDeepCloneWithReplacements(t,!0,(function(t){if(e.isBindingElement(t)&&e.isIdentifier(t.name)&&e.isObjectBindingPattern(t.parent)){if((a=(n=r.getSymbolAtLocation(t.name))&&i.get(String(e.getSymbolId(n))))&&a.text!==(t.name||t.propertyName).getText())return e.factory.createBindingElement(t.dotDotDotToken,t.propertyName||t.name,a,t.initializer)}else if(e.isIdentifier(t)){var n,a;if(a=(n=r.getSymbolAtLocation(t))&&i.get(String(e.getSymbolId(n))))return e.factory.createIdentifier(a.text)}}))}(a,i,s);if(e.returnsPromise(f,i)){var m=f.body&&e.isBlock(f.body)?function(t,r){var n=[];return e.forEachReturnStatement(t,(function(t){e.isReturnStatementWithFixablePromiseHandler(t,r)&&n.push(t)})),n}(f.body,i):e.emptyArray,y={checker:i,synthNamesMap:s,setOfExpressionsToReturn:l,isInJSFile:u};if(m.length){var v=e.skipTrivia(r.text,e.moveRangePastModifiers(a).pos);t.insertModifierAt(r,v,132,{suffix:" "});for(var h=function(n){if(e.forEachChild(n,(function i(a){if(e.isCallExpression(a)){var o=g(a,a,y,!1);if(p())return!0;t.replaceNodeWithNodes(r,n,o)}else if(!e.isFunctionLike(a)&&(e.forEachChild(a,i),p()))return!0})),p())return{value:void 0}},b=0,x=m;b<x.length;b++){var D=h(x[b]);if("object"==typeof D)return D.value}}}}}function c(t,r,n){if(!e.isCallExpression(t))return!1;var i=e.hasPropertyAccessExpressionWithName(t,n)&&r.getTypeAtLocation(t);return!(!i||!r.getPromisedTypeOfPromise(i))}function u(t,r){return 0!=(4&e.getObjectFlags(t))&&t.target===r}function l(t,r,n){if("finally"!==t.expression.name.escapedText){var i=n.getTypeAtLocation(t.expression.expression);if(u(i,n.getPromiseType())||u(i,n.getPromiseLikeType())){if("then"!==t.expression.name.escapedText)return e.elementAt(t.typeArguments,0);if(r===e.elementAt(t.arguments,0))return e.elementAt(t.typeArguments,0);if(r===e.elementAt(t.arguments,1))return e.elementAt(t.typeArguments,1)}}}function _(t,r){return!!e.isExpression(t)&&!!r.getPromisedTypeOfPromise(r.getTypeAtLocation(t))}function d(t,r){var n=(r.get(t.text)||e.emptyArray).length;return N(0===n?t:e.factory.createIdentifier(t.text+"_"+n))}function p(){return!o}function f(){return o=!1,e.emptyArray}function g(t,r,n,i,a){if(c(r,n.checker,"then"))return function(t,r,n,i,a,o){if(!r||m(i,r))return h(t,n,i,a,o);if(n&&!m(i,n))return f();var s=E(r,i),c=g(t.expression.expression,t.expression.expression,i,!0,s);if(p())return f();var u=D(r,a,o,s,t,i);return p()?f():e.concatenate(c,u)}(r,e.elementAt(r.arguments,0),e.elementAt(r.arguments,1),n,i,a);if(c(r,n.checker,"catch"))return h(r,e.elementAt(r.arguments,0),n,i,a);if(c(r,n.checker,"finally"))return function(t,r,n,i,a){if(!r||m(n,r))return g(t,t.expression.expression,n,i,a);var o=y(t,n,a),s=g(t,t.expression.expression,n,!0,o);if(p())return f();var c=D(r,i,void 0,void 0,t,n);if(p())return f();var u=e.factory.createBlock(s),l=e.factory.createBlock(c),_=e.factory.createTryStatement(u,void 0,l);return v(t,n,_,o,a)}(r,e.elementAt(r.arguments,0),n,i,a);if(e.isPropertyAccessExpression(r))return g(t,r.expression,n,i,a);var o=n.checker.getTypeAtLocation(r);return o&&n.checker.getPromisedTypeOfPromise(o)?(e.Debug.assertNode(e.getOriginalNode(r).parent,e.isPropertyAccessExpression),function(t,r,n,i,a){if(O(t,n)){var o=e.getSynthesizedDeepClone(r);return i&&(o=e.factory.createAwaitExpression(o)),[e.factory.createReturnStatement(o)]}return b(a,e.factory.createAwaitExpression(r),void 0)}(t,r,n,i,a)):f()}function m(t,r){var n=t.checker;if(104===r.kind)return!0;if(e.isIdentifier(r)&&!e.isGeneratedIdentifier(r)&&"undefined"===e.idText(r)){var i=n.getSymbolAtLocation(r);return!i||n.isUndefinedSymbol(i)}return!1}function y(t,r,n){var i;return n&&!O(t,r)&&(I(n)?(i=n,r.synthNamesMap.forEach((function(t,i){if(t.identifier.text===n.identifier.text){var a=(o=n,N(e.factory.createUniqueName(o.identifier.text,16)));r.synthNamesMap.set(i,a)}var o}))):i=N(e.factory.createUniqueName("result",16),n.types),w(i)),i}function v(t,r,n,i,a){var o,s=[];if(i&&!O(t,r)){o=e.getSynthesizedDeepClone(w(i));var c=i.types,u=r.checker.getUnionType(c,2),l=r.isInJSFile?void 0:r.checker.typeToTypeNode(u,void 0,void 0),_=[e.factory.createVariableDeclaration(o,void 0,l)],d=e.factory.createVariableStatement(void 0,e.factory.createVariableDeclarationList(_,1));s.push(d)}return s.push(n),a&&o&&1===a.kind&&s.push(e.factory.createVariableStatement(void 0,e.factory.createVariableDeclarationList([e.factory.createVariableDeclaration(e.getSynthesizedDeepClone(P(a)),void 0,void 0,o)],2))),s}function h(t,r,n,i,a){if(!r||m(n,r))return g(t,t.expression.expression,n,i,a);var o=E(r,n),s=y(t,n,a),c=g(t,t.expression.expression,n,!0,s);if(p())return f();var u=D(r,i,s,o,t,n);if(p())return f();var l=e.factory.createBlock(c),_=e.factory.createCatchClause(o&&e.getSynthesizedDeepClone(F(o)),e.factory.createBlock(u));return v(t,n,e.factory.createTryStatement(l,_,void 0),s,a)}function b(t,r,n){return!t||k(t)?[e.factory.createExpressionStatement(r)]:I(t)&&t.hasBeenDeclared?[e.factory.createExpressionStatement(e.factory.createAssignment(e.getSynthesizedDeepClone(A(t)),r))]:[e.factory.createVariableStatement(void 0,e.factory.createVariableDeclarationList([e.factory.createVariableDeclaration(e.getSynthesizedDeepClone(F(t)),void 0,n,r)],2))]}function x(t,r){if(r&&t){var n=e.factory.createUniqueName("result",16);return a(a([],b(N(n),t,r),!0),[e.factory.createReturnStatement(n)],!1)}return[e.factory.createReturnStatement(t)]}function D(t,r,n,i,a,o){var s;switch(t.kind){case 104:break;case 208:case 79:if(!i)break;var c=e.factory.createCallExpression(e.getSynthesizedDeepClone(t),void 0,I(i)?[A(i)]:[]);if(O(a,o))return x(c,l(a,t,o.checker));var u=o.checker.getTypeAtLocation(t),d=o.checker.getSignaturesOfType(u,0);if(!d.length)return f();var p=d[0].getReturnType(),g=b(n,e.factory.createAwaitExpression(c),l(a,t,o.checker));return n&&n.types.push(o.checker.getAwaitedType(p)||p),g;case 215:case 216:var m=t.body,y=null===(s=T(o.checker.getTypeAtLocation(t),o.checker))||void 0===s?void 0:s.getReturnType();if(e.isBlock(m)){for(var v=[],h=!1,D=0,E=m.statements;D<E.length;D++){var k=E[D];if(e.isReturnStatement(k))if(h=!0,e.isReturnStatementWithFixablePromiseHandler(k,o.checker))v=v.concat(C(o,k,r,n));else{var N=y&&k.expression?S(o.checker,y,k.expression):k.expression;v.push.apply(v,x(N,l(a,t,o.checker)))}else{if(r&&e.forEachReturnStatement(k,e.returnTrue))return f();v.push(k)}}return O(a,o)?v.map((function(t){return e.getSynthesizedDeepClone(t)})):function(t,r,n,i){for(var a=[],o=0,s=t;o<s.length;o++){var c=s[o];if(e.isReturnStatement(c)){if(c.expression){var u=_(c.expression,n.checker)?e.factory.createAwaitExpression(c.expression):c.expression;void 0===r?a.push(e.factory.createExpressionStatement(u)):I(r)&&r.hasBeenDeclared?a.push(e.factory.createExpressionStatement(e.factory.createAssignment(A(r),u))):a.push(e.factory.createVariableStatement(void 0,e.factory.createVariableDeclarationList([e.factory.createVariableDeclaration(F(r),void 0,void 0,u)],2)))}}else a.push(e.getSynthesizedDeepClone(c))}i||void 0===r||a.push(e.factory.createVariableStatement(void 0,e.factory.createVariableDeclarationList([e.factory.createVariableDeclaration(F(r),void 0,void 0,e.factory.createIdentifier("undefined"))],2)));return a}(v,n,o,h)}var P=e.isFixablePromiseHandler(m,o.checker)?C(o,e.factory.createReturnStatement(m),r,n):e.emptyArray;if(P.length>0)return P;if(y){N=S(o.checker,y,m);if(O(a,o))return x(N,l(a,t,o.checker));var w=b(n,N,void 0);return n&&n.types.push(o.checker.getAwaitedType(y)||y),w}return f();default:return f()}return e.emptyArray}function S(t,r,n){var i=e.getSynthesizedDeepClone(n);return t.getPromisedTypeOfPromise(r)?e.factory.createAwaitExpression(i):i}function T(t,r){var n=r.getSignaturesOfType(t,0);return e.lastOrUndefined(n)}function C(t,r,n,i){var a=[];return e.forEachChild(r,(function r(o){if(e.isCallExpression(o)){var s=g(o,o,t,n,i);if((a=a.concat(s)).length>0)return}else e.isFunctionLike(o)||e.forEachChild(o,r)})),a}function E(t,r){var n,i=[];e.isFunctionLikeDeclaration(t)?t.parameters.length>0&&(n=function t(r){if(e.isIdentifier(r))return a(r);var n=e.flatMap(r.elements,(function(r){return e.isOmittedExpression(r)?[]:[t(r.name)]}));return function(t,r,n){void 0===r&&(r=e.emptyArray);void 0===n&&(n=[]);return{kind:1,bindingPattern:t,elements:r,types:n}}(r,n)}(t.parameters[0].name)):e.isIdentifier(t)?n=a(t):e.isPropertyAccessExpression(t)&&e.isIdentifier(t.name)&&(n=a(t.name));if(n&&(!("identifier"in n)||"undefined"!==n.identifier.text))return n;function a(t){var n,a=function(e){return e.symbol?e.symbol:r.checker.getSymbolAtLocation(e)}((n=t).original?n.original:n);return a&&r.synthNamesMap.get(e.getSymbolId(a).toString())||N(t,i)}}function k(t){return!t||(I(t)?!t.identifier.text:e.every(t.elements,k))}function N(e,t){return void 0===t&&(t=[]),{kind:0,identifier:e,types:t,hasBeenDeclared:!1,hasBeenReferenced:!1}}function A(e){return e.hasBeenReferenced=!0,e.identifier}function F(e){return I(e)?w(e):P(e)}function P(e){for(var t=0,r=e.elements;t<r.length;t++){F(r[t])}return e.bindingPattern}function w(e){return e.hasBeenDeclared=!0,e.identifier}function I(e){return 0===e.kind}function O(t,r){return!!t.original&&r.setOfExpressionsToReturn.has(e.getNodeId(t.original))}t.registerCodeFix({errorCodes:i,getCodeActions:function(r){o=!0;var i=e.textChanges.ChangeTracker.with(r,(function(e){return s(e,r.sourceFile,r.span.start,r.program.getTypeChecker())}));return o?[t.createCodeFixAction(n,i,e.Diagnostics.Convert_to_async_function,n,e.Diagnostics.Convert_all_to_async_functions)]:[]},fixIds:[n],getAllCodeActions:function(e){return t.codeFixAll(e,i,(function(t,r){return s(t,r.file,r.start,e.program.getTypeChecker())}))}}),function(e){e[e.Identifier=0]="Identifier",e[e.BindingPattern=1]="BindingPattern"}(r||(r={}))}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){function r(t,r,n,i){for(var a=0,o=t.imports;a<o.length;a++){var s=o[a],c=e.getResolvedModule(t,s.text,e.getModeForUsageLocation(t,s));if(c&&c.resolvedFileName===r.fileName){var u=e.importFromModuleSpecifier(s);switch(u.kind){case 268:n.replaceNode(t,u,e.makeImport(u.name,void 0,s,i));break;case 210:e.isRequireCall(u,!1)&&n.replaceNode(t,u,e.factory.createPropertyAccessExpression(e.getSynthesizedDeepClone(u),"default"))}}}}function n(t,r){t.forEachChild((function n(i){if(e.isPropertyAccessExpression(i)&&e.isExportsOrModuleExportsOrAlias(t,i.expression)&&e.isIdentifier(i.name)){var a=i.parent;r(i,e.isBinaryExpression(a)&&a.left===i&&63===a.operatorToken.kind)}i.forEachChild(n)}))}function i(t,r,n,i,u,l,_,p,f){switch(r.kind){case 240:return a(t,r,i,n,u,l,f),!1;case 241:var y=r.expression;switch(y.kind){case 210:return e.isRequireCall(y,!0)&&i.replaceNode(t,r,e.makeImport(void 0,void 0,y.arguments[0],f)),!1;case 223:return 63===y.operatorToken.kind&&function(t,r,n,i,a,u){var l=n.left,_=n.right;if(!e.isPropertyAccessExpression(l))return!1;if(e.isExportsOrModuleExportsOrAlias(t,l)){if(!e.isExportsOrModuleExportsOrAlias(t,_)){var p=e.isObjectLiteralExpression(_)?function(t,r){var n=e.mapAllOrFail(t.properties,(function(t){switch(t.kind){case 174:case 175:case 300:case 301:return;case 299:return e.isIdentifier(t.name)?function(t,r,n){var i=[e.factory.createToken(93)];switch(r.kind){case 215:var a=r.name;if(a&&a.text!==t)return o();case 216:return d(t,i,r,n);case 228:return function(t,r,n,i){return e.factory.createClassDeclaration(e.concatenate(r,e.getSynthesizedDeepClones(n.modifiers)),t,e.getSynthesizedDeepClones(n.typeParameters),e.getSynthesizedDeepClones(n.heritageClauses),c(n.members,i))}(t,i,r,n);default:return o()}function o(){return g(i,e.factory.createIdentifier(t),c(r,n))}}(t.name.text,t.initializer,r):void 0;case 171:return e.isIdentifier(t.name)?d(t.name.text,[e.factory.createToken(93)],t,r):void 0;default:e.Debug.assertNever(t,"Convert to ES6 got invalid prop kind ".concat(t.kind))}}));return n&&[n,!1]}(_,u):e.isRequireCall(_,!0)?function(t,r){var n=t.text,i=r.getSymbolAtLocation(t),a=i?i.exports:e.emptyMap;return a.has("export=")?[[s(n)],!0]:a.has("default")?a.size>1?[[o(n),s(n)],!0]:[[s(n)],!0]:[[o(n)],!1]}(_.arguments[0],r):void 0;return p?(i.replaceNodeWithNodes(t,n.parent,p[0]),p[1]):(i.replaceRangeWithText(t,e.createRange(l.getStart(t),_.pos),"export default"),!0)}i.delete(t,n.parent)}else e.isExportsOrModuleExportsOrAlias(t,l.expression)&&function(t,r,n,i){var a=r.left.name.text,o=i.get(a);if(void 0!==o){var s=[g(void 0,o,r.right),m([e.factory.createExportSpecifier(!1,o,a)])];n.replaceNodeWithNodes(t,r.parent,s)}else!function(t,r,n){var i=t.left,a=t.right,o=t.parent,s=i.name.text;if(!(e.isFunctionExpression(a)||e.isArrowFunction(a)||e.isClassExpression(a))||a.name&&a.name.text!==s)n.replaceNodeRangeWithNodes(r,i.expression,e.findChildOfKind(i,24,r),[e.factory.createToken(93),e.factory.createToken(85)],{joiner:" ",suffix:" "});else{n.replaceRange(r,{pos:i.getStart(r),end:a.getStart(r)},e.factory.createToken(93),{suffix:" "}),a.name||n.insertName(r,a,s);var c=e.findChildOfKind(o,26,r);c&&n.delete(r,c)}}(r,t,n)}(t,n,i,a);return!1}(t,n,y,i,_,p)}default:return!1}}function a(r,n,i,a,o,s,c){var l,_=n.declarationList,d=!1,m=e.map(_.declarations,(function(n){var i=n.name,l=n.initializer;if(l){if(e.isExportsOrModuleExportsOrAlias(r,l))return d=!0,y([]);if(e.isRequireCall(l,!0))return d=!0,function(r,n,i,a,o,s){switch(r.kind){case 203:var c=e.mapAllOrFail(r.elements,(function(t){return t.dotDotDotToken||t.initializer||t.propertyName&&!e.isIdentifier(t.propertyName)||!e.isIdentifier(t.name)?void 0:f(t.propertyName&&t.propertyName.text,t.name.text)}));if(c)return y([e.makeImport(void 0,c,n,s)]);case 204:var l=u(t.moduleSpecifierToValidIdentifier(n.text,o),a);return y([e.makeImport(e.factory.createIdentifier(l),void 0,n,s),g(void 0,e.getSynthesizedDeepClone(r),e.factory.createIdentifier(l))]);case 79:return function(t,r,n,i,a){for(var o,s=n.getSymbolAtLocation(t),c=new e.Map,l=!1,_=0,d=i.original.get(t.text);_<d.length;_++){var p=d[_];if(n.getSymbolAtLocation(p)===s&&p!==t){var f=p.parent;if(e.isPropertyAccessExpression(f)){var g=f.name.text;if("default"===g){l=!0;var m=p.getText();(null!=o?o:o=new e.Map).set(f,e.factory.createIdentifier(m))}else{e.Debug.assert(f.expression===p,"Didn't expect expression === use");var v=c.get(g);void 0===v&&(v=u(g,i),c.set(g,v)),(null!=o?o:o=new e.Map).set(f,e.factory.createIdentifier(v))}}else l=!0}}var h=0===c.size?void 0:e.arrayFrom(e.mapIterator(c.entries(),(function(t){var r=t[0],n=t[1];return e.factory.createImportSpecifier(!1,r===n?void 0:e.factory.createIdentifier(r),e.factory.createIdentifier(n))})));h||(l=!0);return y([e.makeImport(l?e.getSynthesizedDeepClone(t):void 0,h,r,a)],o)}(r,n,i,a,s);default:return e.Debug.assertNever(r,"Convert to ES module got invalid name kind ".concat(r.kind))}}(i,l.arguments[0],a,o,s,c);if(e.isPropertyAccessExpression(l)&&e.isRequireCall(l.expression,!0))return d=!0,function(t,r,n,i,a){switch(t.kind){case 203:case 204:var o=u(r,i);return y([p(o,r,n,a),g(void 0,t,e.factory.createIdentifier(o))]);case 79:return y([p(t.text,r,n,a)]);default:return e.Debug.assertNever(t,"Convert to ES module got invalid syntax form ".concat(t.kind))}}(i,l.name.text,l.expression.arguments[0],o,c)}return y([e.factory.createVariableStatement(void 0,e.factory.createVariableDeclarationList([n],_.flags))])}));if(d)return i.replaceNodeWithNodes(r,n,e.flatMap(m,(function(e){return e.newImports}))),e.forEach(m,(function(t){t.useSitesToUnqualify&&e.copyEntries(t.useSitesToUnqualify,null!=l?l:l=new e.Map)})),l}function o(e){return m(void 0,e)}function s(t){return m([e.factory.createExportSpecifier(!1,void 0,"default")],t)}function c(t,r){return r&&e.some(e.arrayFrom(r.keys()),(function(r){return e.rangeContainsRange(t,r)}))?e.isArray(t)?e.getSynthesizedDeepClonesWithReplacements(t,!0,n):e.getSynthesizedDeepCloneWithReplacements(t,!0,n):t;function n(e){if(208===e.kind){var t=r.get(e);return r.delete(e),t}}}function u(e,t){for(;t.original.has(e)||t.additional.has(e);)e="_".concat(e);return t.additional.add(e),e}function l(t){var r=e.createMultiMap();return _(t,(function(e){return r.add(e.text,e)})),r}function _(t,r){e.isIdentifier(t)&&function(e){var t=e.parent;switch(t.kind){case 208:return t.name!==e;case 205:case 273:return t.propertyName!==e;default:return!0}}(t)&&r(t),t.forEachChild((function(e){return _(e,r)}))}function d(t,r,n,i){return e.factory.createFunctionDeclaration(e.concatenate(r,e.getSynthesizedDeepClones(n.modifiers)),e.getSynthesizedDeepClone(n.asteriskToken),t,e.getSynthesizedDeepClones(n.typeParameters),e.getSynthesizedDeepClones(n.parameters),e.getSynthesizedDeepClone(n.type),e.factory.converters.convertToFunctionBlock(c(n.body,i)))}function p(t,r,n,i){return"default"===r?e.makeImport(e.factory.createIdentifier(t),void 0,n,i):e.makeImport(void 0,[f(r,t)],n,i)}function f(t,r){return e.factory.createImportSpecifier(!1,void 0!==t&&t!==r?e.factory.createIdentifier(t):void 0,e.factory.createIdentifier(r))}function g(t,r,n){return e.factory.createVariableStatement(t,e.factory.createVariableDeclarationList([e.factory.createVariableDeclaration(r,void 0,void 0,n)],2))}function m(t,r){return e.factory.createExportDeclaration(void 0,!1,t&&e.factory.createNamedExports(t),void 0===r?void 0:e.factory.createStringLiteral(r))}function y(e,t){return{newImports:e,useSitesToUnqualify:t}}t.registerCodeFix({errorCodes:[e.Diagnostics.File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module.code],getCodeActions:function(o){var s=o.sourceFile,c=o.program,_=o.preferences,d=e.textChanges.ChangeTracker.with(o,(function(t){var o=function(t,r,o,s,c){var _={original:l(t),additional:new e.Set},d=function(t,r,i){var a=new e.Map;return n(t,(function(t){var n=t.name,o=n.text,s=n.originalKeywordKind;!a.has(o)&&(void 0!==s&&e.isNonContextualKeyword(s)||r.resolveName(o,t,111551,!0))&&a.set(o,u("_".concat(o),i))})),a}(t,r,_);!function(t,r,i){n(t,(function(n,a){if(!a){var o=n.name.text;i.replaceNode(t,n,e.factory.createIdentifier(r.get(o)||o))}}))}(t,d,o);for(var p,f=!1,g=0,m=e.filter(t.statements,e.isVariableStatement);g<m.length;g++){var y=m[g],v=a(t,y,o,r,_,s,c);v&&e.copyEntries(v,null!=p?p:p=new e.Map)}for(var h=0,b=e.filter(t.statements,(function(t){return!e.isVariableStatement(t)}));h<b.length;h++){y=b[h];var x=i(t,y,r,o,_,s,d,p,c);f=f||x}return null==p||p.forEach((function(e,r){o.replaceNode(t,r,e)})),f}(s,c.getTypeChecker(),t,e.getEmitScriptTarget(c.getCompilerOptions()),e.getQuotePreference(s,_));if(o)for(var d=0,p=c.getSourceFiles();d<p.length;d++){var f=p[d];r(f,s,t,e.getQuotePreference(f,_))}}));return[t.createCodeFixActionWithoutFixAll("convertToEsModule",d,e.Diagnostics.Convert_to_ES_module)]}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="correctQualifiedNameToIndexedAccessType",n=[e.Diagnostics.Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_property_1_in_0_with_0_1.code];function i(t,r){var n=e.findAncestor(e.getTokenAtPosition(t,r),e.isQualifiedName);return e.Debug.assert(!!n,"Expected position to be owned by a qualified name."),e.isIdentifier(n.left)?n:void 0}function a(t,r,n){var i=n.right.text,a=e.factory.createIndexedAccessTypeNode(e.factory.createTypeReferenceNode(n.left,void 0),e.factory.createLiteralTypeNode(e.factory.createStringLiteral(i)));t.replaceNode(r,n,a)}t.registerCodeFix({errorCodes:n,getCodeActions:function(n){var o=i(n.sourceFile,n.span.start);if(o){var s=e.textChanges.ChangeTracker.with(n,(function(e){return a(e,n.sourceFile,o)})),c="".concat(o.left.text,'["').concat(o.right.text,'"]');return[t.createCodeFixAction(r,s,[e.Diagnostics.Rewrite_as_the_indexed_access_type_0,c],r,e.Diagnostics.Rewrite_all_as_indexed_access_types)]}},fixIds:[r],getAllCodeActions:function(e){return t.codeFixAll(e,n,(function(e,t){var r=i(t.file,t.start);r&&a(e,t.file,r)}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r=[e.Diagnostics.Re_exporting_a_type_when_the_isolatedModules_flag_is_provided_requires_using_export_type.code],n="convertToTypeOnlyExport";function i(t,r){return e.tryCast(e.getTokenAtPosition(r,t.start).parent,e.isExportSpecifier)}function a(t,n,i){if(n){var a=n.parent,o=a.parent,s=function(t,n){var i=t.parent;if(1===i.elements.length)return i.elements;var a=e.getDiagnosticsWithinSpan(e.createTextSpanFromNode(i),n.program.getSemanticDiagnostics(n.sourceFile,n.cancellationToken));return e.filter(i.elements,(function(n){var i;return n===t||(null===(i=e.findDiagnosticForNode(n,a))||void 0===i?void 0:i.code)===r[0]}))}(n,i);if(s.length===a.elements.length)t.insertModifierBefore(i.sourceFile,154,a);else{var c=e.factory.updateExportDeclaration(o,o.modifiers,!1,e.factory.updateNamedExports(a,e.filter(a.elements,(function(t){return!e.contains(s,t)}))),o.moduleSpecifier,void 0),u=e.factory.createExportDeclaration(void 0,!0,e.factory.createNamedExports(s),o.moduleSpecifier,void 0);t.replaceNode(i.sourceFile,o,c,{leadingTriviaOption:e.textChanges.LeadingTriviaOption.IncludeAll,trailingTriviaOption:e.textChanges.TrailingTriviaOption.Exclude}),t.insertNodeAfter(i.sourceFile,o,u)}}}t.registerCodeFix({errorCodes:r,getCodeActions:function(r){var o=e.textChanges.ChangeTracker.with(r,(function(e){return a(e,i(r.span,r.sourceFile),r)}));if(o.length)return[t.createCodeFixAction(n,o,e.Diagnostics.Convert_to_type_only_export,n,e.Diagnostics.Convert_all_re_exported_types_to_type_only_exports)]},fixIds:[n],getAllCodeActions:function(n){var o=new e.Map;return t.codeFixAll(n,r,(function(t,r){var s=i(r,n.sourceFile);s&&e.addToSeen(o,e.getNodeId(s.parent.parent))&&a(t,s,n)}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r=[e.Diagnostics.This_import_is_never_used_as_a_value_and_must_use_import_type_because_importsNotUsedAsValues_is_set_to_error.code],n="convertToTypeOnlyImport";function i(t,r){return e.tryCast(e.getTokenAtPosition(r,t.start).parent,e.isImportDeclaration)}function a(t,r,n){if(null==r?void 0:r.importClause){var i=r.importClause;t.insertText(n.sourceFile,r.getStart()+"import".length," type"),i.name&&i.namedBindings&&(t.deleteNodeRangeExcludingEnd(n.sourceFile,i.name,r.importClause.namedBindings),t.insertNodeBefore(n.sourceFile,r,e.factory.updateImportDeclaration(r,void 0,e.factory.createImportClause(!0,i.name,void 0),r.moduleSpecifier,void 0)))}}t.registerCodeFix({errorCodes:r,getCodeActions:function(r){var o=e.textChanges.ChangeTracker.with(r,(function(e){a(e,i(r.span,r.sourceFile),r)}));if(o.length)return[t.createCodeFixAction(n,o,e.Diagnostics.Convert_to_type_only_import,n,e.Diagnostics.Convert_all_imports_not_used_as_a_value_to_type_only_imports)]},fixIds:[n],getAllCodeActions:function(e){return t.codeFixAll(e,r,(function(t,r){a(t,i(r,e.sourceFile),e)}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="convertLiteralTypeToMappedType",n=[e.Diagnostics._0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0.code];function i(t,r){var n=e.getTokenAtPosition(t,r);if(e.isIdentifier(n)){var i=e.cast(n.parent.parent,e.isPropertySignature),a=n.getText(t);return{container:e.cast(i.parent,e.isTypeLiteralNode),typeNode:i.type,constraint:a,name:"K"===a?"P":"K"}}}function a(t,r,n){var i=n.container,a=n.typeNode,o=n.constraint,s=n.name;t.replaceNode(r,i,e.factory.createMappedTypeNode(void 0,e.factory.createTypeParameterDeclaration(void 0,s,e.factory.createTypeReferenceNode(o)),void 0,void 0,a,void 0))}t.registerCodeFix({errorCodes:n,getCodeActions:function(n){var o=n.sourceFile,s=n.span,c=i(o,s.start);if(c){var u=c.name,l=c.constraint,_=e.textChanges.ChangeTracker.with(n,(function(e){return a(e,o,c)}));return[t.createCodeFixAction(r,_,[e.Diagnostics.Convert_0_to_1_in_0,l,u],r,e.Diagnostics.Convert_all_type_literals_to_mapped_type)]}},fixIds:[r],getAllCodeActions:function(e){return t.codeFixAll(e,n,(function(e,t){var r=i(t.file,t.start);r&&a(e,t.file,r)}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r=[e.Diagnostics.Class_0_incorrectly_implements_interface_1.code,e.Diagnostics.Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclass.code],n="fixClassIncorrectlyImplementsInterface";function i(t,r){return e.Debug.checkDefined(e.getContainingClass(e.getTokenAtPosition(t,r)),"There should be a containing class")}function a(t){return!(t.valueDeclaration&&8&e.getEffectiveModifierFlags(t.valueDeclaration))}function o(r,n,i,o,s,c){var u=r.program.getTypeChecker(),l=function(t,r){var n=e.getEffectiveBaseTypeNode(t);if(!n)return e.createSymbolTable();var i=r.getTypeAtLocation(n),o=r.getPropertiesOfType(i);return e.createSymbolTable(o.filter(a))}(o,u),_=u.getTypeAtLocation(n),d=u.getPropertiesOfType(_).filter(e.and(a,(function(e){return!l.has(e.escapedName)}))),p=u.getTypeAtLocation(o),f=e.find(o.members,(function(t){return e.isConstructorDeclaration(t)}));p.getNumberIndexType()||m(_,1),p.getStringIndexType()||m(_,0);var g=t.createImportAdder(i,r.program,c,r.host);function m(e,n){var a=u.getIndexInfoOfType(e,n);a&&y(i,o,u.indexInfoToIndexSignatureDeclaration(a,o,void 0,t.getNoopSymbolTrackerWithResolver(r)))}function y(e,t,r){f?s.insertNodeAfter(e,f,r):s.insertMemberAtStart(e,t,r)}t.createMissingMemberNodes(o,d,i,r,c,g,(function(e){return y(i,o,e)})),g.writeFixes(s)}t.registerCodeFix({errorCodes:r,getCodeActions:function(r){var a=r.sourceFile,s=r.span,c=i(a,s.start);return e.mapDefined(e.getEffectiveImplementsTypeNodes(c),(function(i){var s=e.textChanges.ChangeTracker.with(r,(function(e){return o(r,i,a,c,e,r.preferences)}));return 0===s.length?void 0:t.createCodeFixAction(n,s,[e.Diagnostics.Implement_interface_0,i.getText(a)],n,e.Diagnostics.Implement_all_unimplemented_interfaces)}))},fixIds:[n],getAllCodeActions:function(n){var a=new e.Map;return t.codeFixAll(n,r,(function(t,r){var s=i(r.file,r.start);if(e.addToSeen(a,e.getNodeId(s)))for(var c=0,u=e.getEffectiveImplementsTypeNodes(s);c<u.length;c++){var l=u[c];o(n,l,r.file,s,t,n.preferences)}}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){t.importFixName="import";var r,n,i="fixMissingImport",s=[e.Diagnostics.Cannot_find_name_0.code,e.Diagnostics.Cannot_find_name_0_Did_you_mean_1.code,e.Diagnostics.Cannot_find_name_0_Did_you_mean_the_instance_member_this_0.code,e.Diagnostics.Cannot_find_name_0_Did_you_mean_the_static_member_1_0.code,e.Diagnostics.Cannot_find_namespace_0.code,e.Diagnostics._0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead.code,e.Diagnostics._0_only_refers_to_a_type_but_is_being_used_as_a_value_here.code,e.Diagnostics.No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer.code,e.Diagnostics._0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type.code];function c(t,r,n,i,a,o){var s=r.getCompilerOptions(),c=[],l=[],d=new e.Map,p=new e.Map;return{addImportFromDiagnostic:function(t,r){var i=v(r,t.code,t.start,n);if(!i||!i.length)return;f(e.first(i))},addImportFromExportedSymbol:function(n,c){var l=e.Debug.checkDefined(n.parent),d=e.getNameForExportedSymbol(n,e.getEmitScriptTarget(s)),p=r.getTypeChecker(),g=p.getMergedSymbol(e.skipAlias(n,p)),y=_(t,g,d,!1,r,a,i,o),v=m(t,r),h=u(t,e.Debug.checkDefined(y),l,r,void 0,!!c,v,a,i);h&&f({fix:h,symbolName:d,errorIdentifierText:void 0})},writeFixes:function(r){for(var n,a=e.getQuotePreference(t,i),o=0,u=c;o<u.length;o++){var _=u[o];N(r,t,_)}for(var f=0,g=l;f<g.length;f++){_=g[f];A(r,t,_,a)}d.forEach((function(n){var i=n.importClauseOrBindingPattern,a=n.defaultImport,o=n.namedImports;k(r,t,i,a,e.arrayFrom(o.entries(),(function(e){var t=e[0];return{addAsTypeOnly:e[1],name:t}})),s)})),p.forEach((function(t,r){var i=t.useRequire,o=t.defaultImport,s=t.namedImports,c=t.namespaceLikeImport,u=(i?I:w)(r.slice(2),a,o,s&&e.arrayFrom(s.entries(),(function(e){var t=e[0];return{addAsTypeOnly:e[1],name:t}})),c);n=e.combine(n,u)})),n&&e.insertImports(r,t,n,!0)},hasFixes:function(){return c.length>0||l.length>0||d.size>0||p.size>0}};function f(t){var r,n,i=t.fix,a=t.symbolName;switch(i.kind){case 0:c.push(i);break;case 1:l.push(i);break;case 2:var o=i.importClauseOrBindingPattern,s=i.importKind,u=i.addAsTypeOnly,_=String(e.getNodeId(o));if((y=d.get(_))||d.set(_,y={importClauseOrBindingPattern:o,defaultImport:void 0,namedImports:new e.Map}),0===s){var f=null==y?void 0:y.namedImports.get(a);y.namedImports.set(a,v(f,u))}else e.Debug.assert(void 0===y.defaultImport||y.defaultImport.name===a,"(Add to Existing) Default import should be missing or match symbolName"),y.defaultImport={name:a,addAsTypeOnly:v(null===(r=y.defaultImport)||void 0===r?void 0:r.addAsTypeOnly,u)};break;case 3:var g=i.moduleSpecifier,m=(s=i.importKind,i.useRequire),y=function(e,t,r,n){var i=h(e,!0),a=h(e,!1),o=p.get(i),s=p.get(a),c={defaultImport:void 0,namedImports:void 0,namespaceLikeImport:void 0,useRequire:r};if(1===t&&2===n)return o||(p.set(i,c),c);if(1===n&&(o||s))return o||s;if(s)return s;return p.set(a,c),c}(g,s,m,u=i.addAsTypeOnly);switch(e.Debug.assert(y.useRequire===m,"(Add new) Tried to add an `import` and a `require` for the same module"),s){case 1:e.Debug.assert(void 0===y.defaultImport||y.defaultImport.name===a,"(Add new) Default import should be missing or match symbolName"),y.defaultImport={name:a,addAsTypeOnly:v(null===(n=y.defaultImport)||void 0===n?void 0:n.addAsTypeOnly,u)};break;case 0:f=(y.namedImports||(y.namedImports=new e.Map)).get(a);y.namedImports.set(a,v(f,u));break;case 3:case 2:e.Debug.assert(void 0===y.namespaceLikeImport||y.namespaceLikeImport.name===a,"Namespacelike import shoudl be missing or match symbolName"),y.namespaceLikeImport={importKind:s,name:a,addAsTypeOnly:u}}break;case 4:break;default:e.Debug.assertNever(i,"fix wasn't never - got kind ".concat(i.kind))}function v(e,t){return Math.max(null!=e?e:0,t)}function h(e,t){return"".concat(t?1:0,"|").concat(e)}}}function u(t,r,n,i,a,o,s,c,u){e.Debug.assert(r.some((function(e){return e.moduleSymbol===n||e.symbol.parent===n})),"Some exportInfo should match the specified moduleSymbol");var l=e.createPackageJsonImportFilter(t,u,c);return h(p(r,a,o,s,i,t,c,u).fixes,t,i,l,c)}function l(e){return{description:e.description,changes:e.changes,commands:e.commands}}function _(t,r,n,i,a,o,s,c){var u=y(a,o);return e.getExportInfoMap(t,o,a,s,c).search(t.path,i,(function(e){return e===n}),(function(t){if(e.skipAlias(t[0].symbol,u(t[0].isFromPackageJson))===r)return t}))}function d(t,r,n,i){var a,o,s=n.getCompilerOptions(),c=l(n.getTypeChecker(),!1);if(c)return c;var u=null===(o=null===(a=i.getPackageJsonAutoImportProvider)||void 0===a?void 0:a.call(i))||void 0===o?void 0:o.getTypeChecker();return e.Debug.checkDefined(u&&l(u,!0),"Could not find symbol in specified module for code actions");function l(n,i){var a=e.getDefaultLikeExportInfo(r,n,s);if(a&&e.skipAlias(a.symbol,n)===t)return{symbol:a.symbol,moduleSymbol:r,moduleFileName:void 0,exportKind:a.exportKind,targetFlags:e.skipAlias(t,n).flags,isFromPackageJson:i};var o=n.tryGetMemberInModuleExportsAndProperties(t.name,r);return o&&e.skipAlias(o,n)===t?{symbol:o,moduleSymbol:r,moduleFileName:void 0,exportKind:0,targetFlags:e.skipAlias(t,n).flags,isFromPackageJson:i}:void 0}}function p(t,r,n,i,o,s,c,u,l,_){void 0===l&&(l=g(o.getTypeChecker(),s,o.getCompilerOptions()));var d=o.getTypeChecker(),p=e.flatMap(t,l.getImportsForExportInfo),m=r&&function(t,r,n,i){return e.firstDefined(t,(function(t){var a,o=t.declaration,s=function(t){var r,n,i;switch(t.kind){case 257:return null===(r=e.tryCast(t.name,e.isIdentifier))||void 0===r?void 0:r.text;case 268:return t.name.text;case 269:return null===(i=e.tryCast(null===(n=t.importClause)||void 0===n?void 0:n.namedBindings,e.isNamespaceImport))||void 0===i?void 0:i.name.text;default:return e.Debug.assertNever(t)}}(o),c=null===(a=e.tryGetModuleSpecifierFromDeclaration(o))||void 0===a?void 0:a.text;if(s&&c){var u=function(t,r){var n;switch(t.kind){case 257:return r.resolveExternalModuleName(t.initializer.arguments[0]);case 268:return r.getAliasedSymbol(t.symbol);case 269:var i=e.tryCast(null===(n=t.importClause)||void 0===n?void 0:n.namedBindings,e.isNamespaceImport);return i&&r.getAliasedSymbol(i.symbol);default:return e.Debug.assertNever(t)}}(o,i);if(u&&u.exports.has(e.escapeLeadingUnderscores(r)))return{kind:0,namespacePrefix:s,position:n,moduleSpecifier:c}}}))}(p,r.symbolName,r.position,d),v=function(t,r,n,i){return e.firstDefined(t,(function(t){var a=t.declaration,o=t.importKind,s=t.symbol,c=t.targetFlags;if(3!==o&&2!==o&&268!==a.kind){if(257===a.kind)return 0!==o&&1!==o||203!==a.name.kind?void 0:{kind:2,importClauseOrBindingPattern:a.name,importKind:o,moduleSpecifier:a.initializer.arguments[0].text,addAsTypeOnly:4};var u=a.importClause;if(u&&e.isStringLiteralLike(a.moduleSpecifier)){var l=u.name,_=u.namedBindings;if(!u.isTypeOnly||0===o&&_){var d=f(r,!1,s,c,n,i);if(!(1===o&&(l||2===d&&_)||0===o&&271===(null==_?void 0:_.kind)))return{kind:2,importClauseOrBindingPattern:u,importKind:o,moduleSpecifier:a.moduleSpecifier.text,addAsTypeOnly:d}}}}}))}(p,n,d,o.getCompilerOptions());if(v)return{computedWithoutCacheCount:0,fixes:a(a([],m?[m]:e.emptyArray,!0),[v],!1)};var h=function(t,r,n,i,a,o,s,c,u,l){var _=e.firstDefined(r,(function(t){return function(t,r,n,i,a){var o,s=t.declaration,c=t.importKind,u=t.symbol,l=t.targetFlags,_=null===(o=e.tryGetModuleSpecifierFromDeclaration(s))||void 0===o?void 0:o.text;if(_){return{kind:3,moduleSpecifier:_,importKind:c,addAsTypeOnly:n?4:f(r,!0,u,l,i,a),useRequire:n}}}(t,o,s,n.getTypeChecker(),n.getCompilerOptions())}));return _?{fixes:[_]}:function(t,r,n,i,a,o,s,c,u){var l=e.isSourceFileJS(r),_=t.getCompilerOptions(),d=e.createModuleSpecifierResolutionHost(t,s),p=y(t,s),g=e.moduleResolutionUsesNodeModules(e.getEmitModuleResolutionKind(_)),m=u?function(t){return{moduleSpecifiers:e.moduleSpecifiers.tryGetModuleSpecifiersFromCache(t,r,d,c),computedWithoutCache:!1}}:function(t,n){return e.moduleSpecifiers.getModuleSpecifiersWithCacheInfo(t,n,_,r,d,c)},v=0,h=e.flatMap(o,(function(t,o){var s=p(t.isFromPackageJson),c=m(t.moduleSymbol,s),u=c.computedWithoutCache,d=c.moduleSpecifiers,y=!!(111551&t.targetFlags),h=f(i,!0,t.symbol,t.targetFlags,s,_);return v+=u?1:0,e.mapDefined(d,(function(i){return g&&e.pathContainsNodeModules(i)?void 0:!y&&l&&void 0!==n?{kind:1,moduleSpecifier:i,position:n,exportInfo:t,isReExport:o>0}:{kind:3,moduleSpecifier:i,importKind:D(r,t.exportKind,_),useRequire:a,addAsTypeOnly:h,exportInfo:t,isReExport:o>0}}))}));return{computedWithoutCacheCount:v,fixes:h}}(n,i,a,o,s,t,c,u,l)}(t,p,o,s,null==r?void 0:r.position,n,i,c,u,_),b=h.fixes,x=h.computedWithoutCacheCount;return{computedWithoutCacheCount:void 0===x?0:x,fixes:a(a([],m?[m]:e.emptyArray,!0),b,!0)}}function f(e,t,r,n,i,a){return e?t&&2===a.importsNotUsedAsValues?2:!a.isolatedModules||!a.preserveValueImports||111551&n&&!i.getTypeOnlyAliasDeclaration(r)?1:2:4}function g(t,r,n){for(var i,a=0,o=r.imports;a<o.length;a++){var s=o[a],c=e.importFromModuleSpecifier(s);if(e.isVariableDeclarationInitializedToRequire(c.parent))(u=t.resolveExternalModuleName(s))&&(i||(i=e.createMultiMap())).add(e.getSymbolId(u),c.parent);else if(269===c.kind||268===c.kind){var u;(u=t.getSymbolAtLocation(s))&&(i||(i=e.createMultiMap())).add(e.getSymbolId(u),c)}}return{getImportsForExportInfo:function(t){var a=t.moduleSymbol,o=t.exportKind,s=t.targetFlags,c=t.symbol;if(!(111551&s)&&e.isSourceFileJS(r))return e.emptyArray;var u=null==i?void 0:i.get(e.getSymbolId(a));if(!u)return e.emptyArray;var l=D(r,o,n);return u.map((function(e){return{declaration:e,importKind:l,symbol:c,targetFlags:s}}))}}}function m(t,r){if(!e.isSourceFileJS(t))return!1;if(t.commonJsModuleIndicator&&!t.externalModuleIndicator)return!0;if(t.externalModuleIndicator&&!t.commonJsModuleIndicator)return!1;var n=r.getCompilerOptions();if(n.configFile)return e.getEmitModuleKind(n)<e.ModuleKind.ES2015;for(var i=0,a=r.getSourceFiles();i<a.length;i++){var o=a[i];if(o!==t&&e.isSourceFileJS(o)&&!r.isSourceFileFromExternalLibrary(o)){if(o.commonJsModuleIndicator&&!o.externalModuleIndicator)return!0;if(o.externalModuleIndicator&&!o.commonJsModuleIndicator)return!1}}return!0}function y(t,r){return e.memoizeOne((function(e){return e?r.getPackageJsonAutoImportProvider().getTypeChecker():t.getTypeChecker()}))}function v(t,r,n,i){var a,o=e.getTokenAtPosition(t.sourceFile,n);if(r===e.Diagnostics._0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead.code)a=function(t,r){var n=t.sourceFile,i=t.program,a=t.host,o=t.preferences,s=i.getTypeChecker(),c=function(t,r){var n=e.isIdentifier(t)?r.getSymbolAtLocation(t):void 0;if(e.isUMDExportSymbol(n))return n;var i=t.parent;return e.isJsxOpeningLikeElement(i)&&i.tagName===t||e.isJsxOpeningFragment(i)?e.tryCast(r.resolveName(r.getJsxNamespace(i),e.isJsxOpeningLikeElement(i)?t:i,111551,!1),e.isUMDExportSymbol):void 0}(r,s);if(!c)return;var u=s.getAliasedSymbol(c),l=c.name,_=[{symbol:c,moduleSymbol:u,moduleFileName:void 0,exportKind:3,targetFlags:u.flags,isFromPackageJson:!1}],d=m(n,i),f=e.isIdentifier(r)?r.getStart(n):void 0;return p(_,f?{position:f,symbolName:l}:void 0,!1,d,i,n,a,o).fixes.map((function(t){var n;return{fix:t,symbolName:l,errorIdentifierText:null===(n=e.tryCast(r,e.isIdentifier))||void 0===n?void 0:n.text}}))}(t,o);else{if(!e.isIdentifier(o))return;if(r===e.Diagnostics._0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type.code){var s=e.single(T(t.sourceFile,t.program.getTypeChecker(),o,t.program.getCompilerOptions())),c=S(t.sourceFile,o,s,t.program);return c&&[{fix:c,symbolName:s,errorIdentifierText:o.text}]}a=function(t,r,n){var i=t.sourceFile,a=t.program,o=t.cancellationToken,s=t.host,c=t.preferences,u=a.getTypeChecker(),l=a.getCompilerOptions();return e.flatMap(T(i,u,r,l),(function(t){if("default"!==t){var u=e.isValidTypeOnlyAliasUseSite(r),l=m(i,a),_=function(t,r,n,i,a,o,s,c,u){var l,_=e.createMultiMap(),d=e.createPackageJsonImportFilter(a,u,c),p=null===(l=c.getModuleSpecifierCache)||void 0===l?void 0:l.call(c),f=e.memoizeOne((function(t){return e.createModuleSpecifierResolutionHost(t?c.getPackageJsonAutoImportProvider():o,c)}));function g(t,r,n,i,o,s){var c=f(s);if(r&&e.isImportableFile(o,a,r,u,d,c,p)||!r&&d.allowsImportingAmbientModule(t,c)){var l=o.getTypeChecker();_.add(e.getUniqueSymbolId(n,l).toString(),{symbol:n,moduleSymbol:t,moduleFileName:null==r?void 0:r.fileName,exportKind:i,targetFlags:e.skipAlias(n,l).flags,isFromPackageJson:s})}}return e.forEachExternalModuleToImportFrom(o,c,u,s,(function(a,o,s,c){var u=s.getTypeChecker();i.throwIfCancellationRequested();var l=s.getCompilerOptions(),_=e.getDefaultLikeExportInfo(a,u,l);_&&(_.name===t||L(a,e.getEmitScriptTarget(l),r)===t)&&M(_.symbolForMeaning,n)&&g(a,o,_.symbol,_.exportKind,s,c);var d=u.tryGetMemberInModuleExportsAndProperties(t,a);d&&M(d,n)&&g(a,o,d,0,s,c)})),_}(t,e.isJSXTagName(r),e.getMeaningFromLocation(r),o,i,a,n,s,c),d=e.arrayFrom(e.flatMapIterator(_.entries(),(function(e){e[0];return p(e[1],{symbolName:t,position:r.getStart(i)},u,l,a,i,s,c).fixes})));return d.map((function(e){return{fix:e,symbolName:t,errorIdentifierText:r.text,isJsxNamespaceFix:t!==r.text}}))}}))}(t,o,i)}var u=e.createPackageJsonImportFilter(t.sourceFile,t.preferences,t.host);return a&&function(t,r,n,i,a){var o=function(t){return e.toPath(t,a.getCurrentDirectory(),e.hostGetCanonicalFileName(a))};return e.sort(t,(function(t,a){return e.compareBooleans(!!t.isJsxNamespaceFix,!!a.isJsxNamespaceFix)||e.compareValues(t.fix.kind,a.fix.kind)||b(t.fix,a.fix,r,n,i.allowsImportingSpecifier,o)}))}(a,t.sourceFile,t.program,u,t.host)}function h(t,r,n,i,a){if(e.some(t))return 0===t[0].kind||2===t[0].kind?t[0]:t.reduce((function(t,o){return-1===b(o,t,r,n,i.allowsImportingSpecifier,(function(t){return e.toPath(t,a.getCurrentDirectory(),e.hostGetCanonicalFileName(a))}))?o:t}))}function b(t,r,n,i,a,o){return 0!==t.kind&&0!==r.kind?e.compareBooleans(a(r.moduleSpecifier),a(t.moduleSpecifier))||function(t,r,n,i){return e.startsWith(t,"node:")&&!e.startsWith(r,"node:")?e.shouldUseUriStyleNodeCoreModules(n,i)?-1:1:e.startsWith(r,"node:")&&!e.startsWith(t,"node:")?e.shouldUseUriStyleNodeCoreModules(n,i)?1:-1:0}(t.moduleSpecifier,r.moduleSpecifier,n,i)||e.compareBooleans(x(t,n,i.getCompilerOptions(),o),x(r,n,i.getCompilerOptions(),o))||e.compareNumberOfDirectorySeparators(t.moduleSpecifier,r.moduleSpecifier):0}function x(t,r,n,i){var a,o;if(t.isReExport&&(null===(a=t.exportInfo)||void 0===a?void 0:a.moduleFileName)&&e.getEmitModuleResolutionKind(n)===e.ModuleResolutionKind.NodeJs&&(o=t.exportInfo.moduleFileName,"index"===e.getBaseFileName(o,[".js",".jsx",".d.ts",".ts",".tsx"],!0))){var s=i(e.getDirectoryPath(t.exportInfo.moduleFileName));return e.startsWith(r.path,s)}return!1}function D(t,r,n,i){switch(r){case 0:return 0;case 1:return 1;case 2:return function(t,r,n){var i=e.getAllowSyntheticDefaultImports(r),a=e.isInJSFile(t);if(!a&&e.getEmitModuleKind(r)>=e.ModuleKind.ES2015)return i?1:2;if(a)return e.isExternalModule(t)||n?i?1:2:3;for(var o=0,s=t.statements;o<s.length;o++){var c=s[o];if(e.isImportEqualsDeclaration(c)&&!e.nodeIsMissing(c.moduleReference))return 3}return i?1:3}(t,n,!!i);case 3:return function(t,r,n){if(e.getAllowSyntheticDefaultImports(r))return 1;var i=e.getEmitModuleKind(r);switch(i){case e.ModuleKind.AMD:case e.ModuleKind.CommonJS:case e.ModuleKind.UMD:return e.isInJSFile(t)&&(e.isExternalModule(t)||n)?2:3;case e.ModuleKind.System:case e.ModuleKind.ES2015:case e.ModuleKind.ES2020:case e.ModuleKind.ES2022:case e.ModuleKind.ESNext:case e.ModuleKind.None:return 2;case e.ModuleKind.Node16:case e.ModuleKind.NodeNext:return t.impliedNodeFormat===e.ModuleKind.ESNext?2:3;default:return e.Debug.assertNever(i,"Unexpected moduleKind ".concat(i))}}(t,n,!!i);default:return e.Debug.assertNever(r)}}function S(t,r,n,i){var a=i.getTypeChecker(),o=a.resolveName(n,r,111551,!0);if(o){var s=a.getTypeOnlyAliasDeclaration(o);if(s&&e.getSourceFileOfNode(s)===t)return{kind:4,typeOnlyAliasDeclaration:s}}}function T(t,r,n,i){var a=n.parent;if((e.isJsxOpeningLikeElement(a)||e.isJsxClosingElement(a))&&a.tagName===n&&e.jsxModeNeedsExplicitImport(i.jsx)){var o=r.getJsxNamespace(t);if(function(t,r,n){if(e.isIntrinsicJsxName(r.text))return!0;var i=n.resolveName(t,r,111551,!0);return!i||e.some(i.declarations,e.isTypeOnlyImportOrExportDeclaration)&&!(111551&i.flags)}(o,n,r))return!e.isIntrinsicJsxName(n.text)&&!r.resolveName(n.text,n,111551,!1)?[n.text,o]:[o]}return[n.text]}function C(r,n,a,o,s,c,u){var l,_=e.textChanges.ChangeTracker.with(r,(function(t){l=function(t,r,n,i,a,o,s){switch(i.kind){case 0:return N(t,r,i),[e.Diagnostics.Change_0_to_1,n,"".concat(i.namespacePrefix,".").concat(n)];case 1:return A(t,r,i,o),[e.Diagnostics.Change_0_to_1,n,F(i.moduleSpecifier,o)+n];case 2:var c=i.importClauseOrBindingPattern,u=i.importKind,l=i.addAsTypeOnly,_=i.moduleSpecifier;k(t,r,c,1===u?{name:n,addAsTypeOnly:l}:void 0,0===u?[{name:n,addAsTypeOnly:l}]:e.emptyArray,s);var d=e.stripQuotes(_);return a?[e.Diagnostics.Import_0_from_1,n,d]:[e.Diagnostics.Update_import_from_0,d];case 3:u=i.importKind,_=i.moduleSpecifier,l=i.addAsTypeOnly;var p=i.useRequire?I:w,f=1===u?{name:n,addAsTypeOnly:l}:void 0,g=0===u?[{name:n,addAsTypeOnly:l}]:void 0,m=2===u||3===u?{importKind:u,name:n,addAsTypeOnly:l}:void 0;return e.insertImports(t,r,p(_,o,f,g,m),!0),a?[e.Diagnostics.Import_0_from_1,n,_]:[e.Diagnostics.Add_import_from_0,_];case 4:var y=function(t,r,n,i){var a=n.preserveValueImports&&n.isolatedModules;switch(r.kind){case 273:if(r.isTypeOnly){if(r.parent.elements.length>1&&e.OrganizeImports.importSpecifiersAreSorted(r.parent.elements)){t.delete(i,r);var o=e.factory.updateImportSpecifier(r,!1,r.propertyName,r.name),s=e.OrganizeImports.getImportSpecifierInsertionIndex(r.parent.elements,o);t.insertImportSpecifierAtIndex(i,o,r.parent,s)}else t.deleteRange(i,r.getFirstToken());return r}return e.Debug.assert(r.parent.parent.isTypeOnly),c(r.parent.parent),r.parent.parent;case 270:return c(r),r;case 271:return c(r.parent),r.parent;case 268:return t.deleteRange(i,r.getChildAt(1)),r;default:e.Debug.failBadSyntaxKind(r)}function c(n){if(t.delete(i,e.getTypeKeywordOfTypeOnlyImport(n,i)),a){var o=e.tryCast(n.namedBindings,e.isNamedImports);if(o&&o.elements.length>1){e.OrganizeImports.importSpecifiersAreSorted(o.elements)&&273===r.kind&&0!==o.elements.indexOf(r)&&(t.delete(i,r),t.insertImportSpecifierAtIndex(i,r,o,0));for(var s=0,c=o.elements;s<c.length;s++){var u=c[s];u===r||u.isTypeOnly||t.insertModifierBefore(i,154,u)}}}}}(t,i.typeOnlyAliasDeclaration,s,r);return 273===y.kind?[e.Diagnostics.Remove_type_from_import_of_0_from_1,n,E(y.parent.parent)]:[e.Diagnostics.Remove_type_from_import_declaration_from_0,E(y)];default:return e.Debug.assertNever(i,"Unexpected fix kind ".concat(i.kind))}}(t,n,a,o,s,c,u)}));return t.createCodeFixAction(t.importFixName,_,l,i,e.Diagnostics.Add_all_missing_imports)}function E(t){var r,n;return 268===t.kind?(null===(n=e.tryCast(null===(r=e.tryCast(t.moduleReference,e.isExternalModuleReference))||void 0===r?void 0:r.expression,e.isStringLiteralLike))||void 0===n?void 0:n.text)||t.moduleReference.getText():e.cast(t.parent.moduleSpecifier,e.isStringLiteral).text}function k(t,r,n,i,o,s){var c;if(203!==n.kind){var u=n.isTypeOnly&&e.some(a([i],o,!0),(function(e){return 4===(null==e?void 0:e.addAsTypeOnly)})),l=n.namedBindings&&(null===(c=e.tryCast(n.namedBindings,e.isNamedImports))||void 0===c?void 0:c.elements),_=u&&s.preserveValueImports&&s.isolatedModules;if(i&&(e.Debug.assert(!n.name,"Cannot add a default import to an import clause that already has one"),t.insertNodeAt(r,n.getStart(r),e.factory.createIdentifier(i.name),{suffix:", "})),o.length){var d=e.stableSort(o.map((function(t){return e.factory.createImportSpecifier((!n.isTypeOnly||u)&&P(t),void 0,e.factory.createIdentifier(t.name))})),e.OrganizeImports.compareImportOrExportSpecifiers);if((null==l?void 0:l.length)&&e.OrganizeImports.importSpecifiersAreSorted(l))for(var p=0,f=d;p<f.length;p++){var g=f[p],m=_&&!g.isTypeOnly?0:e.OrganizeImports.getImportSpecifierInsertionIndex(l,g);t.insertImportSpecifierAtIndex(r,g,n.namedBindings,m)}else if(null==l?void 0:l.length)for(var y=0,v=d;y<v.length;y++){g=v[y];t.insertNodeInListAfter(r,e.last(l),g,l)}else if(d.length){var h=e.factory.createNamedImports(d);n.namedBindings?t.replaceNode(r,n.namedBindings,h):t.insertNodeAfter(r,e.Debug.checkDefined(n.name,"Import clause must have either named imports or a default import"),h)}}if(u&&(t.delete(r,e.getTypeKeywordOfTypeOnlyImport(n,r)),_&&l))for(var b=0,x=l;b<x.length;b++){T=x[b];t.insertModifierBefore(r,154,T)}}else{i&&C(n,i.name,"default");for(var D=0,S=o;D<S.length;D++){var T=S[D];C(n,T.name,void 0)}}function C(n,i,a){var o=e.factory.createBindingElement(void 0,a,i);n.elements.length?t.insertNodeInListAfter(r,e.last(n.elements),o):t.replaceNode(r,n,e.factory.createObjectBindingPattern([o]))}}function N(e,t,r){var n=r.namespacePrefix,i=r.position;e.insertText(t,i,n+".")}function A(e,t,r,n){var i=r.moduleSpecifier,a=r.position;e.insertText(t,a,F(i,n))}function F(t,r){var n=e.getQuoteFromPreference(r);return"import(".concat(n).concat(t).concat(n,").")}function P(e){return 2===e.addAsTypeOnly}function w(t,r,n,i,a){var o,s=e.makeStringLiteral(t,r);if(void 0!==n||(null==i?void 0:i.length)){var c=(!n||P(n))&&e.every(i,P);o=e.combine(o,e.makeImport(n&&e.factory.createIdentifier(n.name),null==i?void 0:i.map((function(t){var r=t.addAsTypeOnly,n=t.name;return e.factory.createImportSpecifier(!c&&2===r,void 0,e.factory.createIdentifier(n))})),t,r,c))}if(a){var u=3===a.importKind?e.factory.createImportEqualsDeclaration(void 0,P(a),e.factory.createIdentifier(a.name),e.factory.createExternalModuleReference(s)):e.factory.createImportDeclaration(void 0,e.factory.createImportClause(P(a),void 0,e.factory.createNamespaceImport(e.factory.createIdentifier(a.name))),s,void 0);o=e.combine(o,u)}return e.Debug.checkDefined(o)}function I(t,r,n,i,a){var o,s=e.makeStringLiteral(t,r);if(n||(null==i?void 0:i.length)){var c=(null==i?void 0:i.map((function(t){var r=t.name;return e.factory.createBindingElement(void 0,void 0,r)})))||[];n&&c.unshift(e.factory.createBindingElement(void 0,"default",n.name));var u=O(e.factory.createObjectBindingPattern(c),s);o=e.combine(o,u)}if(a){u=O(a.name,s);o=e.combine(o,u)}return e.Debug.checkDefined(o)}function O(t,r){return e.factory.createVariableStatement(void 0,e.factory.createVariableDeclarationList([e.factory.createVariableDeclaration("string"==typeof t?e.factory.createIdentifier(t):t,void 0,void 0,e.factory.createCallExpression(e.factory.createIdentifier("require"),void 0,[r]))],2))}function M(t,r){var n=t.declarations;return e.some(n,(function(t){return!!(e.getMeaningFromDeclaration(t)&r)}))}function L(t,r,n){return R(e.removeFileExtension(e.stripQuotes(t.name)),r,n)}function R(t,r,n){var i=e.getBaseFileName(e.removeSuffix(t,"/index")),a="",o=!0,s=i.charCodeAt(0);e.isIdentifierStart(s,r)?(a+=String.fromCharCode(s),n&&(a=a.toUpperCase())):o=!1;for(var c=1;c<i.length;c++){var u=i.charCodeAt(c),l=e.isIdentifierPart(u,r);if(l){var _=String.fromCharCode(u);o||(_=_.toUpperCase()),a+=_}o=l}return e.isStringANonContextualKeyword(a)?"_".concat(a):a||"_"}t.registerCodeFix({errorCodes:s,getCodeActions:function(t){var r=t.errorCode,n=t.preferences,i=t.sourceFile,a=t.span,o=t.program,s=v(t,r,a.start,!0);if(s){var c=e.getQuotePreference(i,n);return s.map((function(e){var r=e.fix,n=e.symbolName,a=e.errorIdentifierText;return C(t,i,n,r,n!==a,c,o.getCompilerOptions())}))}},fixIds:[i],getAllCodeActions:function(r){var n=c(r.sourceFile,r.program,!0,r.preferences,r.host,r.cancellationToken);return t.eachDiagnostic(r,s,(function(e){return n.addImportFromDiagnostic(e,r)})),t.createCombinedCodeActions(e.textChanges.ChangeTracker.with(r,n.writeFixes))}}),t.createImportAdder=function(e,t,r,n,i){return c(e,t,!1,r,n,i)},t.createImportSpecifierResolver=function(t,r,n,i){var a=e.createPackageJsonImportFilter(t,i,n),s=g(r.getTypeChecker(),t,r.getCompilerOptions());return{getModuleSpecifierForBestExportInfo:function(e,c,u,l,_){var d=p(e,{symbolName:c,position:u},l,!1,r,t,n,i,s,_),f=d.fixes,g=d.computedWithoutCacheCount,m=h(f,t,r,a,n);return m&&o(o({},m),{computedWithoutCacheCount:g})}}},function(e){e[e.UseNamespace=0]="UseNamespace",e[e.JsdocTypeImport=1]="JsdocTypeImport",e[e.AddToExisting=2]="AddToExisting",e[e.AddNew=3]="AddNew",e[e.PromoteTypeOnly=4]="PromoteTypeOnly"}(r||(r={})),function(e){e[e.Allowed=1]="Allowed",e[e.Required=2]="Required",e[e.NotAllowed=4]="NotAllowed"}(n||(n={})),t.getImportCompletionAction=function(t,r,n,i,a,o,s,c,p,f,g){var y=s.getCompilerOptions(),v=e.pathIsBareSpecifier(e.stripQuotes(r.name))?[d(t,r,s,o)]:_(n,t,i,a,s,o,f,g);e.Debug.assertIsDefined(v);var h=m(n,s),b=e.isValidTypeOnlyAliasUseSite(e.getTokenAtPosition(n,p)),x=e.Debug.checkDefined(u(n,v,r,s,{symbolName:i,position:p},b,h,o,f));return{moduleSpecifier:x.moduleSpecifier,codeAction:l(C({host:o,formatContext:c,preferences:f},n,i,x,!1,e.getQuotePreference(n,f),y))}},t.getPromoteTypeOnlyCompletionAction=function(t,r,n,i,a,o){var s=n.getCompilerOptions(),c=e.single(T(t,n.getTypeChecker(),r,s)),u=S(t,r,c,n),_=c!==r.text;return u&&l(C({host:i,formatContext:a,preferences:o},t,c,u,_,1,s))},t.getImportKind=D,t.moduleSymbolToValidIdentifier=L,t.moduleSpecifierToValidIdentifier=R}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="addMissingConstraint",n=[e.Diagnostics.Type_0_is_not_comparable_to_type_1.code,e.Diagnostics.Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated.code,e.Diagnostics.Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_types_of_the_target_s_properties.code,e.Diagnostics.Type_0_is_not_assignable_to_type_1.code,e.Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_types_of_the_target_s_properties.code,e.Diagnostics.Property_0_is_incompatible_with_index_signature.code,e.Diagnostics.Property_0_in_type_1_is_not_assignable_to_type_2.code,e.Diagnostics.Type_0_does_not_satisfy_the_constraint_1.code];function i(r,n,i){var a=e.find(r.getSemanticDiagnostics(n),(function(e){return e.start===i.start&&e.length===i.length}));if(void 0!==a&&void 0!==a.relatedInformation){var o=e.find(a.relatedInformation,(function(t){return t.code===e.Diagnostics.This_type_parameter_might_need_an_extends_0_constraint.code}));if(void 0!==o&&void 0!==o.file&&void 0!==o.start&&void 0!==o.length){var s=t.findAncestorMatchingSpan(o.file,e.createTextSpan(o.start,o.length));if(void 0!==s&&(e.isIdentifier(s)&&e.isTypeParameterDeclaration(s.parent)&&(s=s.parent),e.isTypeParameterDeclaration(s))){if(e.isMappedTypeNode(s.parent))return;var c=e.getTokenAtPosition(n,i.start),u=function(t,r){if(e.isTypeNode(r.parent))return t.getTypeArgumentConstraint(r.parent);var n=e.isExpression(r)?t.getContextualType(r):void 0;return n||t.getTypeAtLocation(r)}(r.getTypeChecker(),c)||function(t){var r=e.flattenDiagnosticMessageText(t,"\n",0).match(/`extends (.*)`/)||[],n=(r[0],r[1]);return n}(o.messageText);return{constraint:u,declaration:s,token:c}}}}}function a(r,n,i,a,o,s){var c=s.declaration,u=s.constraint,l=n.getTypeChecker();if(e.isString(u))r.insertText(o,c.name.end," extends ".concat(u));else{var _=e.getEmitScriptTarget(n.getCompilerOptions()),d=t.getNoopSymbolTrackerWithResolver({program:n,host:a}),p=t.createImportAdder(o,n,i,a),f=t.typeToAutoImportableTypeNode(l,p,u,void 0,_,void 0,d);f&&(r.replaceNode(o,c,e.factory.updateTypeParameterDeclaration(c,void 0,c.name,f,c.default)),p.writeFixes(r))}}t.registerCodeFix({errorCodes:n,getCodeActions:function(n){var o=n.sourceFile,s=n.span,c=n.program,u=n.preferences,l=n.host,_=i(c,o,s);if(void 0!==_){var d=e.textChanges.ChangeTracker.with(n,(function(e){return a(e,c,u,l,o,_)}));return[t.createCodeFixAction(r,d,e.Diagnostics.Add_extends_constraint,r,e.Diagnostics.Add_extends_constraint_to_all_type_parameters)]}},fixIds:[r],getAllCodeActions:function(r){var o=r.program,s=r.preferences,c=r.host,u=new e.Map;return t.createCombinedCodeActions(e.textChanges.ChangeTracker.with(r,(function(l){t.eachDiagnostic(r,n,(function(t){var r=i(o,t.file,e.createTextSpan(t.start,t.length));if(r&&e.addToSeen(u,e.getNodeId(r.declaration)))return a(l,o,s,c,t.file,r)}))})))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r,n="fixOverrideModifier",i="fixAddOverrideModifier",a="fixRemoveOverrideModifier",o=[e.Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0.code,e.Diagnostics.This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another_class.code,e.Diagnostics.This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared_in_the_base_class_0.code,e.Diagnostics.This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0.code,e.Diagnostics.This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0.code,e.Diagnostics.This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0.code,e.Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_extend_another_class.code,e.Diagnostics.This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0.code,e.Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0.code],s=((r={})[e.Diagnostics.This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0.code]={descriptions:e.Diagnostics.Add_override_modifier,fixId:i,fixAllDescriptions:e.Diagnostics.Add_all_missing_override_modifiers},r[e.Diagnostics.This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0.code]={descriptions:e.Diagnostics.Add_override_modifier,fixId:i,fixAllDescriptions:e.Diagnostics.Add_all_missing_override_modifiers},r[e.Diagnostics.This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another_class.code]={descriptions:e.Diagnostics.Remove_override_modifier,fixId:a,fixAllDescriptions:e.Diagnostics.Remove_all_unnecessary_override_modifiers},r[e.Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_extend_another_class.code]={descriptions:e.Diagnostics.Remove_override_modifier,fixId:a,fixAllDescriptions:e.Diagnostics.Remove_override_modifier},r[e.Diagnostics.This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0.code]={descriptions:e.Diagnostics.Add_override_modifier,fixId:i,fixAllDescriptions:e.Diagnostics.Add_all_missing_override_modifiers},r[e.Diagnostics.This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0.code]={descriptions:e.Diagnostics.Add_override_modifier,fixId:i,fixAllDescriptions:e.Diagnostics.Add_all_missing_override_modifiers},r[e.Diagnostics.This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared_in_the_base_class_0.code]={descriptions:e.Diagnostics.Add_override_modifier,fixId:i,fixAllDescriptions:e.Diagnostics.Remove_all_unnecessary_override_modifiers},r[e.Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0.code]={descriptions:e.Diagnostics.Remove_override_modifier,fixId:a,fixAllDescriptions:e.Diagnostics.Remove_all_unnecessary_override_modifiers},r[e.Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0.code]={descriptions:e.Diagnostics.Remove_override_modifier,fixId:a,fixAllDescriptions:e.Diagnostics.Remove_all_unnecessary_override_modifiers},r);function c(t,r,n,i){switch(n){case e.Diagnostics.This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0.code:case e.Diagnostics.This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0.code:case e.Diagnostics.This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared_in_the_base_class_0.code:case e.Diagnostics.This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0.code:case e.Diagnostics.This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0.code:return function(t,r,n){var i=l(r,n);if(e.isSourceFileJS(r))return void t.addJSDocTags(r,i,[e.factory.createJSDocOverrideTag(e.factory.createIdentifier("override"))]);var a=i.modifiers||e.emptyArray,o=e.find(a,e.isStaticModifier),s=e.find(a,e.isAbstractModifier),c=e.find(a,(function(t){return e.isAccessibilityModifier(t.kind)})),u=e.findLast(a,e.isDecorator),_=s?s.end:o?o.end:c?c.end:u?e.skipTrivia(r.text,u.end):i.getStart(r),d=c||o||s?{prefix:" "}:{suffix:" "};t.insertModifierAt(r,_,161,d)}(t,r.sourceFile,i);case e.Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0.code:case e.Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0.code:case e.Diagnostics.This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another_class.code:case e.Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_extend_another_class.code:return function(t,r,n){var i=l(r,n);if(e.isSourceFileJS(r))return void t.filterJSDocTags(r,i,e.not(e.isJSDocOverrideTag));var a=e.find(i.modifiers,e.isOverrideModifier);e.Debug.assertIsDefined(a),t.deleteModifier(r,a)}(t,r.sourceFile,i);default:e.Debug.fail("Unexpected error code: "+n)}}function u(t){switch(t.kind){case 173:case 169:case 171:case 174:case 175:return!0;case 166:return e.isParameterPropertyDeclaration(t,t.parent);default:return!1}}function l(t,r){var n=e.getTokenAtPosition(t,r),i=e.findAncestor(n,(function(t){return e.isClassLike(t)?"quit":u(t)}));return e.Debug.assert(i&&u(i)),i}t.registerCodeFix({errorCodes:o,getCodeActions:function(r){var i=r.errorCode,a=r.span,o=s[i];if(!o)return e.emptyArray;var u=o.descriptions,l=o.fixId,_=o.fixAllDescriptions,d=e.textChanges.ChangeTracker.with(r,(function(e){return c(e,r,i,a.start)}));return[t.createCodeFixActionMaybeFixAll(n,d,u,l,_)]},fixIds:[n,i,a],getAllCodeActions:function(e){return t.codeFixAll(e,o,(function(t,r){var n=r.code,i=r.start,a=s[n];a&&a.fixId===e.fixId&&c(t,e,n,i)}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="fixNoPropertyAccessFromIndexSignature",n=[e.Diagnostics.Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0.code];function i(t,r,n,i){var a=e.getQuotePreference(r,i),o=e.factory.createStringLiteral(n.name.text,0===a);t.replaceNode(r,n,e.isPropertyAccessChain(n)?e.factory.createElementAccessChain(n.expression,n.questionDotToken,o):e.factory.createElementAccessExpression(n.expression,o))}function a(t,r){return e.cast(e.getTokenAtPosition(t,r).parent,e.isPropertyAccessExpression)}t.registerCodeFix({errorCodes:n,fixIds:[r],getCodeActions:function(n){var o=n.sourceFile,s=n.span,c=n.preferences,u=a(o,s.start),l=e.textChanges.ChangeTracker.with(n,(function(e){return i(e,n.sourceFile,u,c)}));return[t.createCodeFixAction(r,l,[e.Diagnostics.Use_element_access_for_0,u.name.text],r,e.Diagnostics.Use_element_access_for_all_undeclared_properties)]},getAllCodeActions:function(e){return t.codeFixAll(e,n,(function(t,r){return i(t,r.file,a(r.file,r.start),e.preferences)}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="fixImplicitThis",n=[e.Diagnostics.this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation.code];function i(t,r,n,i){var a=e.getTokenAtPosition(r,n);if(e.isThis(a)){var o=e.getThisContainer(a,!1);if((e.isFunctionDeclaration(o)||e.isFunctionExpression(o))&&!e.isSourceFile(e.getThisContainer(o,!1))){var s=e.Debug.checkDefined(e.findChildOfKind(o,98,r)),c=o.name,u=e.Debug.checkDefined(o.body);if(e.isFunctionExpression(o)){if(c&&e.FindAllReferences.Core.isSymbolReferencedInFile(c,i,r,u))return;return t.delete(r,s),c&&t.delete(r,c),t.insertText(r,u.pos," =>"),[e.Diagnostics.Convert_function_expression_0_to_arrow_function,c?c.text:e.ANONYMOUS]}return t.replaceNode(r,s,e.factory.createToken(85)),t.insertText(r,c.end," = "),t.insertText(r,u.pos," =>"),[e.Diagnostics.Convert_function_declaration_0_to_arrow_function,c.text]}}}t.registerCodeFix({errorCodes:n,getCodeActions:function(n){var a,o=n.sourceFile,s=n.program,c=n.span,u=e.textChanges.ChangeTracker.with(n,(function(e){a=i(e,o,c.start,s.getTypeChecker())}));return a?[t.createCodeFixAction(r,u,a,r,e.Diagnostics.Fix_all_implicit_this_errors)]:e.emptyArray},fixIds:[r],getAllCodeActions:function(e){return t.codeFixAll(e,n,(function(t,r){i(t,r.file,r.start,e.program.getTypeChecker())}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="fixImportNonExportedMember",n=[e.Diagnostics.Module_0_declares_1_locally_but_it_is_not_exported.code];function i(t,r,n){var i,a=e.getTokenAtPosition(t,r);if(e.isIdentifier(a)){var o=e.findAncestor(a,e.isImportDeclaration);if(void 0===o)return;var s=e.isStringLiteral(o.moduleSpecifier)?o.moduleSpecifier.text:void 0;if(void 0===s)return;var c=e.getResolvedModule(t,s,void 0);if(void 0===c)return;var u=n.getSourceFile(c.resolvedFileName);if(void 0===u||e.isSourceFileFromLibrary(n,u))return;var l=null===(i=u.symbol.valueDeclaration)||void 0===i?void 0:i.locals;if(void 0===l)return;var _=l.get(a.escapedText);if(void 0===_)return;var d=function(t){if(void 0===t.valueDeclaration)return e.firstOrUndefined(t.declarations);var r=t.valueDeclaration,n=e.isVariableDeclaration(r)?e.tryCast(r.parent.parent,e.isVariableStatement):void 0;return n&&1===e.length(n.declarationList.declarations)?n:r}(_);if(void 0===d)return;return{exportName:{node:a,isTypeOnly:e.isTypeDeclaration(d)},node:d,moduleSourceFile:u,moduleSpecifier:s}}}function o(t,r,n,i,a){e.length(i)&&(a?c(t,r,n,a,i):u(t,r,n,i))}function s(t,r){return e.findLast(t.statements,(function(t){return e.isExportDeclaration(t)&&(r&&t.isTypeOnly||!t.isTypeOnly)}))}function c(t,r,n,i,o){var s=i.exportClause&&e.isNamedExports(i.exportClause)?i.exportClause.elements:e.factory.createNodeArray([]),c=!(i.isTypeOnly||!r.getCompilerOptions().isolatedModules&&!e.find(s,(function(e){return e.isTypeOnly})));t.replaceNode(n,i,e.factory.updateExportDeclaration(i,i.modifiers,i.isTypeOnly,e.factory.createNamedExports(e.factory.createNodeArray(a(a([],s,!0),l(o,c),!0),s.hasTrailingComma)),i.moduleSpecifier,i.assertClause))}function u(t,r,n,i){t.insertNodeAtEndOfScope(n,n,e.factory.createExportDeclaration(void 0,!1,e.factory.createNamedExports(l(i,!!r.getCompilerOptions().isolatedModules)),void 0,void 0))}function l(t,r){return e.factory.createNodeArray(e.map(t,(function(t){return e.factory.createExportSpecifier(r&&t.isTypeOnly,void 0,t.node)})))}t.registerCodeFix({errorCodes:n,fixIds:[r],getCodeActions:function(n){var a=n.sourceFile,o=n.span,l=n.program,_=i(a,o.start,l);if(void 0!==_){var d=e.textChanges.ChangeTracker.with(n,(function(t){return function(t,r,n){var i=n.exportName,a=n.node,o=n.moduleSourceFile,l=s(o,i.isTypeOnly);l?c(t,r,o,l,[i]):e.canHaveExportModifier(a)?t.insertExportModifier(o,a):u(t,r,o,[i])}(t,l,_)}));return[t.createCodeFixAction(r,d,[e.Diagnostics.Export_0_from_module_1,_.exportName.node.text,_.moduleSpecifier],r,e.Diagnostics.Export_all_referenced_locals)]}},getAllCodeActions:function(r){var c=r.program;return t.createCombinedCodeActions(e.textChanges.ChangeTracker.with(r,(function(u){var l=new e.Map;t.eachDiagnostic(r,n,(function(t){var r=i(t.file,t.start,c);if(void 0!==r){var n=r.exportName,a=r.node,o=r.moduleSourceFile;if(void 0===s(o,n.isTypeOnly)&&e.canHaveExportModifier(a))u.insertExportModifier(o,a);else{var _=l.get(o)||{typeOnlyExports:[],exports:[]};n.isTypeOnly?_.typeOnlyExports.push(n):_.exports.push(n),l.set(o,_)}}})),l.forEach((function(e,t){var r=s(t,!0);r&&r.isTypeOnly?(o(u,c,t,e.typeOnlyExports,r),o(u,c,t,e.exports,s(t,!1))):o(u,c,t,a(a([],e.exports,!0),e.typeOnlyExports,!0),r)}))})))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="fixIncorrectNamedTupleSyntax",n=[e.Diagnostics.A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_colon_rather_than_after_the_type.code,e.Diagnostics.A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type.code];t.registerCodeFix({errorCodes:n,getCodeActions:function(n){var i=n.sourceFile,a=n.span,o=function(t,r){var n=e.getTokenAtPosition(t,r);return e.findAncestor(n,(function(e){return 199===e.kind}))}(i,a.start),s=e.textChanges.ChangeTracker.with(n,(function(t){return function(t,r,n){if(!n)return;var i=n.type,a=!1,o=!1;for(;187===i.kind||188===i.kind||193===i.kind;)187===i.kind?a=!0:188===i.kind&&(o=!0),i=i.type;var s=e.factory.updateNamedTupleMember(n,n.dotDotDotToken||(o?e.factory.createToken(25):void 0),n.name,n.questionToken||(a?e.factory.createToken(57):void 0),i);if(s===n)return;t.replaceNode(r,n,s)}(t,i,o)}));return[t.createCodeFixAction(r,s,e.Diagnostics.Move_labeled_tuple_element_modifiers_to_labels,r,e.Diagnostics.Move_labeled_tuple_element_modifiers_to_labels)]},fixIds:[r]})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="fixSpelling",n=[e.Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_2.code,e.Diagnostics.Property_0_may_not_exist_on_type_1_Did_you_mean_2.code,e.Diagnostics.Cannot_find_name_0_Did_you_mean_1.code,e.Diagnostics.Could_not_find_name_0_Did_you_mean_1.code,e.Diagnostics.Cannot_find_namespace_0_Did_you_mean_1.code,e.Diagnostics.Cannot_find_name_0_Did_you_mean_the_instance_member_this_0.code,e.Diagnostics.Cannot_find_name_0_Did_you_mean_the_static_member_1_0.code,e.Diagnostics._0_has_no_exported_member_named_1_Did_you_mean_2.code,e.Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1.code,e.Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1.code,e.Diagnostics.No_overload_matches_this_call.code,e.Diagnostics.Type_0_is_not_assignable_to_type_1.code];function i(t,r,n,i){var a=e.getTokenAtPosition(t,r),o=a.parent;if(i!==e.Diagnostics.No_overload_matches_this_call.code&&i!==e.Diagnostics.Type_0_is_not_assignable_to_type_1.code||e.isJsxAttribute(o)){var s,c=n.program.getTypeChecker();if(e.isPropertyAccessExpression(o)&&o.name===a){e.Debug.assert(e.isMemberName(a),"Expected an identifier for spelling (property access)");var u=c.getTypeAtLocation(o.expression);32&o.flags&&(u=c.getNonNullableType(u)),s=c.getSuggestedSymbolForNonexistentProperty(a,u)}else if(e.isBinaryExpression(o)&&101===o.operatorToken.kind&&o.left===a&&e.isPrivateIdentifier(a)){var l=c.getTypeAtLocation(o.right);s=c.getSuggestedSymbolForNonexistentProperty(a,l)}else if(e.isQualifiedName(o)&&o.right===a){var _=c.getSymbolAtLocation(o.left);_&&1536&_.flags&&(s=c.getSuggestedSymbolForNonexistentModule(o.right,_))}else if(e.isImportSpecifier(o)&&o.name===a){e.Debug.assertNode(a,e.isIdentifier,"Expected an identifier for spelling (import)");var d=function(t,r,n){if(!n||!e.isStringLiteralLike(n.moduleSpecifier))return;var i=e.getResolvedModule(t,n.moduleSpecifier.text,e.getModeForUsageLocation(t,n.moduleSpecifier));return i?r.program.getSourceFile(i.resolvedFileName):void 0}(t,n,e.findAncestor(a,e.isImportDeclaration));d&&d.symbol&&(s=c.getSuggestedSymbolForNonexistentModule(a,d.symbol))}else if(e.isJsxAttribute(o)&&o.name===a){e.Debug.assertNode(a,e.isIdentifier,"Expected an identifier for JSX attribute");var p=e.findAncestor(a,e.isJsxOpeningLikeElement),f=c.getContextualTypeForArgumentAtIndex(p,0);s=c.getSuggestedSymbolForNonexistentJSXAttribute(a,f)}else if(e.hasSyntacticModifier(o,16384)&&e.isClassElement(o)&&o.name===a){var g=e.findAncestor(a,e.isClassLike),m=g?e.getEffectiveBaseTypeNode(g):void 0,y=m?c.getTypeAtLocation(m):void 0;y&&(s=c.getSuggestedSymbolForNonexistentClassMember(e.getTextOfNode(a),y))}else{var v=e.getMeaningFromLocation(a),h=e.getTextOfNode(a);e.Debug.assert(void 0!==h,"name should be defined"),s=c.getSuggestedSymbolForNonexistentSymbol(a,h,function(e){var t=0;4&e&&(t|=1920);2&e&&(t|=788968);1&e&&(t|=111551);return t}(v))}return void 0===s?void 0:{node:a,suggestedSymbol:s}}}function a(t,r,n,i,a){var o=e.symbolName(i);if(!e.isIdentifierText(o,a)&&e.isPropertyAccessExpression(n.parent)){var s=i.valueDeclaration;s&&e.isNamedDeclaration(s)&&e.isPrivateIdentifier(s.name)?t.replaceNode(r,n,e.factory.createIdentifier(o)):t.replaceNode(r,n.parent,e.factory.createElementAccessExpression(n.parent.expression,e.factory.createStringLiteral(o)))}else t.replaceNode(r,n,e.factory.createIdentifier(o))}t.registerCodeFix({errorCodes:n,getCodeActions:function(n){var o=n.sourceFile,s=n.errorCode,c=i(o,n.span.start,n,s);if(c){var u=c.node,l=c.suggestedSymbol,_=e.getEmitScriptTarget(n.host.getCompilationSettings()),d=e.textChanges.ChangeTracker.with(n,(function(e){return a(e,o,u,l,_)}));return[t.createCodeFixAction("spelling",d,[e.Diagnostics.Change_spelling_to_0,e.symbolName(l)],r,e.Diagnostics.Fix_all_detected_spelling_errors)]}},fixIds:[r],getAllCodeActions:function(r){return t.codeFixAll(r,n,(function(t,n){var o=i(n.file,n.start,r,n.code),s=e.getEmitScriptTarget(r.host.getCompilationSettings());o&&a(t,r.sourceFile,o.node,o.suggestedSymbol,s)}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r,n="returnValueCorrect",i="fixAddReturnStatement",a="fixRemoveBracesFromArrowFunctionBody",o="fixWrapTheBlockWithParen",s=[e.Diagnostics.A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value.code,e.Diagnostics.Type_0_is_not_assignable_to_type_1.code,e.Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1.code];function c(t,r,n){var i=t.createSymbol(4,r.escapedText);i.type=t.getTypeAtLocation(n);var a=e.createSymbolTable([i]);return t.createAnonymousType(void 0,a,[],[],[])}function u(t,n,i,a){if(n.body&&e.isBlock(n.body)&&1===e.length(n.body.statements)){var o=e.first(n.body.statements);if(e.isExpressionStatement(o)&&l(t,n,t.getTypeAtLocation(o.expression),i,a))return{declaration:n,kind:r.MissingReturnStatement,expression:o.expression,statement:o,commentSource:o.expression};if(e.isLabeledStatement(o)&&e.isExpressionStatement(o.statement)){var s=e.factory.createObjectLiteralExpression([e.factory.createPropertyAssignment(o.label,o.statement.expression)]);if(l(t,n,c(t,o.label,o.statement.expression),i,a))return e.isArrowFunction(n)?{declaration:n,kind:r.MissingParentheses,expression:s,statement:o,commentSource:o.statement.expression}:{declaration:n,kind:r.MissingReturnStatement,expression:s,statement:o,commentSource:o.statement.expression}}else if(e.isBlock(o)&&1===e.length(o.statements)){var u=e.first(o.statements);if(e.isLabeledStatement(u)&&e.isExpressionStatement(u.statement)){s=e.factory.createObjectLiteralExpression([e.factory.createPropertyAssignment(u.label,u.statement.expression)]);if(l(t,n,c(t,u.label,u.statement.expression),i,a))return{declaration:n,kind:r.MissingReturnStatement,expression:s,statement:o,commentSource:u}}}}}function l(t,r,n,i,a){if(a){var o=t.getSignatureFromDeclaration(r);if(o){e.hasSyntacticModifier(r,512)&&(n=t.createPromiseType(n));var s=t.createSignature(r,o.typeParameters,o.thisParameter,o.parameters,n,void 0,o.minArgumentCount,o.flags);n=t.createAnonymousType(void 0,e.createSymbolTable(),[s],[],[])}else n=t.getAnyType()}return t.isTypeAssignableTo(n,i)}function _(t,r,n,i){var a=e.getTokenAtPosition(r,n);if(a.parent){var o=e.findAncestor(a.parent,e.isFunctionLikeDeclaration);switch(i){case e.Diagnostics.A_function_whose_declared_type_is_neither_void_nor_any_must_return_a_value.code:if(!(o&&o.body&&o.type&&e.rangeContainsRange(o.type,a)))return;return u(t,o,t.getTypeFromTypeNode(o.type),!1);case e.Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1.code:if(!o||!e.isCallExpression(o.parent)||!o.body)return;var s=o.parent.arguments.indexOf(o),c=t.getContextualTypeForArgumentAtIndex(o.parent,s);if(!c)return;return u(t,o,c,!0);case e.Diagnostics.Type_0_is_not_assignable_to_type_1.code:if(!e.isDeclarationName(a)||!e.isVariableLike(a.parent)&&!e.isJsxAttribute(a.parent))return;var l=function(t){switch(t.kind){case 257:case 166:case 205:case 169:case 299:return t.initializer;case 288:return t.initializer&&(e.isJsxExpression(t.initializer)?t.initializer.expression:void 0);case 300:case 168:case 302:case 350:case 343:return}}(a.parent);if(!l||!e.isFunctionLikeDeclaration(l)||!l.body)return;return u(t,l,t.getTypeAtLocation(a.parent),!0)}}}function d(t,r,n,i){e.suppressLeadingAndTrailingTrivia(n);var a=e.probablyUsesSemicolons(r);t.replaceNode(r,i,e.factory.createReturnStatement(n),{leadingTriviaOption:e.textChanges.LeadingTriviaOption.Exclude,trailingTriviaOption:e.textChanges.TrailingTriviaOption.Exclude,suffix:a?";":void 0})}function p(t,r,n,i,a,o){var s=o||e.needsParentheses(i)?e.factory.createParenthesizedExpression(i):i;e.suppressLeadingAndTrailingTrivia(a),e.copyComments(a,s),t.replaceNode(r,n.body,s)}function f(t,r,n,i){t.replaceNode(r,n.body,e.factory.createParenthesizedExpression(i))}function g(r,a,o){var s=e.textChanges.ChangeTracker.with(r,(function(e){return d(e,r.sourceFile,a,o)}));return t.createCodeFixAction(n,s,e.Diagnostics.Add_a_return_statement,i,e.Diagnostics.Add_all_missing_return_statement)}function m(r,i,a){var s=e.textChanges.ChangeTracker.with(r,(function(e){return f(e,r.sourceFile,i,a)}));return t.createCodeFixAction(n,s,e.Diagnostics.Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal,o,e.Diagnostics.Wrap_all_object_literal_with_parentheses)}!function(e){e[e.MissingReturnStatement=0]="MissingReturnStatement",e[e.MissingParentheses=1]="MissingParentheses"}(r||(r={})),t.registerCodeFix({errorCodes:s,fixIds:[i,a,o],getCodeActions:function(i){var o=i.program,s=i.sourceFile,c=i.span.start,u=i.errorCode,l=_(o.getTypeChecker(),s,c,u);if(l)return l.kind===r.MissingReturnStatement?e.append([g(i,l.expression,l.statement)],e.isArrowFunction(l.declaration)?function(r,i,o,s){var c=e.textChanges.ChangeTracker.with(r,(function(e){return p(e,r.sourceFile,i,o,s,!1)}));return t.createCodeFixAction(n,c,e.Diagnostics.Remove_braces_from_arrow_function_body,a,e.Diagnostics.Remove_braces_from_all_arrow_function_bodies_with_relevant_issues)}(i,l.declaration,l.expression,l.commentSource):void 0):[m(i,l.declaration,l.expression)]},getAllCodeActions:function(r){return t.codeFixAll(r,s,(function(t,n){var s=_(r.program.getTypeChecker(),n.file,n.start,n.code);if(s)switch(r.fixId){case i:d(t,n.file,s.expression,s.statement);break;case a:if(!e.isArrowFunction(s.declaration))return;p(t,n.file,s.declaration,s.expression,s.commentSource,!1);break;case o:if(!e.isArrowFunction(s.declaration))return;f(t,n.file,s.declaration,s.expression);break;default:e.Debug.fail(JSON.stringify(r.fixId))}}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r,n="fixMissingMember",i="fixMissingProperties",o="fixMissingAttributes",s="fixMissingFunctionDeclaration",c=[e.Diagnostics.Property_0_does_not_exist_on_type_1.code,e.Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_2.code,e.Diagnostics.Property_0_is_missing_in_type_1_but_required_in_type_2.code,e.Diagnostics.Type_0_is_missing_the_following_properties_from_type_1_Colon_2.code,e.Diagnostics.Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more.code,e.Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1.code,e.Diagnostics.Cannot_find_name_0.code];function u(t,n,i,a,o){var s=e.getTokenAtPosition(t,n),c=s.parent;if(i===e.Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1.code){if(18!==s.kind||!e.isObjectLiteralExpression(c)||!e.isCallExpression(c.parent))return;var u=e.findIndex(c.parent.arguments,(function(e){return e===c}));if(u<0)return;if(!((f=a.getResolvedSignature(c.parent))&&f.declaration&&f.parameters[u]))return;var l=f.parameters[u].valueDeclaration;if(!(l&&e.isParameter(l)&&e.isIdentifier(l.name)))return;var _=e.arrayFrom(a.getUnmatchedProperties(a.getTypeAtLocation(c),a.getParameterType(f,u),!1,!1));if(!e.length(_))return;return{kind:r.ObjectLiteral,token:l.name,properties:_,parentDeclaration:c}}if(e.isMemberName(s)){if(e.isIdentifier(s)&&e.hasInitializer(c)&&c.initializer&&e.isObjectLiteralExpression(c.initializer)){_=e.arrayFrom(a.getUnmatchedProperties(a.getTypeAtLocation(c.initializer),a.getTypeAtLocation(s),!1,!1));if(!e.length(_))return;return{kind:r.ObjectLiteral,token:s,properties:_,parentDeclaration:c.initializer}}if(e.isIdentifier(s)&&e.isJsxOpeningLikeElement(s.parent)){var d=function(t,r,n){var i=t.getContextualType(n.attributes);if(void 0===i)return e.emptyArray;var a=i.getProperties();if(!e.length(a))return e.emptyArray;for(var o=new e.Set,s=0,c=n.attributes.properties;s<c.length;s++){var u=c[s];if(e.isJsxAttribute(u)&&o.add(u.name.escapedText),e.isJsxSpreadAttribute(u))for(var l=0,_=t.getTypeAtLocation(u.expression).getProperties();l<_.length;l++){var d=_[l];o.add(d.escapedName)}}return e.filter(a,(function(t){return e.isIdentifierText(t.name,r,1)&&!(16777216&t.flags||48&e.getCheckFlags(t)||o.has(t.escapedName))}))}(a,e.getEmitScriptTarget(o.getCompilerOptions()),s.parent);if(!e.length(d))return;return{kind:r.JsxAttributes,token:s,attributes:d,parentDeclaration:s.parent}}if(e.isIdentifier(s)){var p=a.getContextualType(s);if(p&&16&e.getObjectFlags(p)){var f;if(void 0===(f=e.firstOrUndefined(a.getSignaturesOfType(p,0))))return;return{kind:r.Signature,token:s,signature:f,sourceFile:t,parentDeclaration:D(s)}}if(e.isCallExpression(c)&&c.expression===s)return{kind:r.Function,token:s,call:c,sourceFile:t,modifierFlags:0,parentDeclaration:D(s)}}if(e.isPropertyAccessExpression(c)){var g=e.skipConstraint(a.getTypeAtLocation(c.expression)),m=g.symbol;if(m&&m.declarations){if(e.isIdentifier(s)&&e.isCallExpression(c.parent)){var y=e.find(m.declarations,e.isModuleDeclaration),v=null==y?void 0:y.getSourceFile();if(y&&v&&!e.isSourceFileFromLibrary(o,v))return{kind:r.Function,token:s,call:c.parent,sourceFile:t,modifierFlags:1,parentDeclaration:y};var h=e.find(m.declarations,e.isSourceFile);if(t.commonJsModuleIndicator)return;if(h&&!e.isSourceFileFromLibrary(o,h))return{kind:r.Function,token:s,call:c.parent,sourceFile:h,modifierFlags:1,parentDeclaration:h}}var b=e.find(m.declarations,e.isClassLike);if(b||!e.isPrivateIdentifier(s)){var x=b||e.find(m.declarations,(function(t){return e.isInterfaceDeclaration(t)||e.isTypeLiteralNode(t)}));if(x&&!e.isSourceFileFromLibrary(o,x.getSourceFile())){var S=!e.isTypeLiteralNode(x)&&(g.target||g)!==a.getDeclaredTypeOfSymbol(m);if(S&&(e.isPrivateIdentifier(s)||e.isInterfaceDeclaration(x)))return;var T=x.getSourceFile(),C=e.isTypeLiteralNode(x)?0:(S?32:0)|(e.startsWithUnderscore(s.text)?8:0),E=e.isSourceFileJS(T),k=e.tryCast(c.parent,e.isCallExpression);return{kind:r.TypeLikeDeclaration,token:s,call:k,modifierFlags:C,parentDeclaration:x,declSourceFile:T,isJSFile:E}}var N=e.find(m.declarations,e.isEnumDeclaration);return!N||1056&g.flags||e.isPrivateIdentifier(s)||e.isSourceFileFromLibrary(o,N.getSourceFile())?void 0:{kind:r.Enum,token:s,parentDeclaration:N}}}}}}function l(t,r,n,i,a){var o=i.text;if(a){if(228===n.kind)return;var s=n.name.getText(),c=_(e.factory.createIdentifier(s),o);t.insertNodeAfter(r,n,c)}else if(e.isPrivateIdentifier(i)){var u=e.factory.createPropertyDeclaration(void 0,o,void 0,void 0,void 0),l=f(n);l?t.insertNodeAfter(r,l,u):t.insertMemberAtStart(r,n,u)}else{var d=e.getFirstConstructorWithBody(n);if(!d)return;var p=_(e.factory.createThis(),o);t.insertNodeAtConstructorEnd(r,d,p)}}function _(t,r){return e.factory.createExpressionStatement(e.factory.createAssignment(e.factory.createPropertyAccessExpression(t,r),x()))}function d(t,r,n){var i;if(223===n.parent.parent.kind){var a=n.parent.parent,o=n.parent===a.left?a.right:a.left,s=t.getWidenedType(t.getBaseTypeOfLiteralType(t.getTypeAtLocation(o)));i=t.typeToTypeNode(s,r,1)}else{var c=t.getContextualType(n.parent);i=c?t.typeToTypeNode(c,void 0,1):void 0}return i||e.factory.createKeywordTypeNode(131)}function p(t,r,n,i,a,o){var s=o?e.factory.createNodeArray(e.factory.createModifiersFromModifierFlags(o)):void 0,c=e.isClassLike(n)?e.factory.createPropertyDeclaration(s,i,void 0,a,void 0):e.factory.createPropertySignature(void 0,i,void 0,a),u=f(n);u?t.insertNodeAfter(r,u,c):t.insertMemberAtStart(r,n,c)}function f(t){for(var r,n=0,i=t.members;n<i.length;n++){var a=i[n];if(!e.isPropertyDeclaration(a))break;r=a}return r}function g(r,n,i,a,o,s,c){var u=t.createImportAdder(c,r.program,r.preferences,r.host),l=e.isClassLike(s)?171:170,_=t.createSignatureDeclarationFromCallExpression(l,r,u,i,a,o,s),d=function(t,r){if(e.isTypeLiteralNode(t))return;var n=e.findAncestor(r,(function(t){return e.isMethodDeclaration(t)||e.isConstructorDeclaration(t)}));return n&&n.parent===t?n:void 0}(s,i);d?n.insertNodeAfter(c,d,_):n.insertMemberAtStart(c,s,_),u.writeFixes(n)}function m(t,r,n){var i=n.token,a=n.parentDeclaration,o=e.some(a.members,(function(e){var t=r.getTypeAtLocation(e);return!!(t&&402653316&t.flags)})),s=e.factory.createEnumMember(i,o?e.factory.createStringLiteral(i.text):void 0);t.replaceNode(a.getSourceFile(),a,e.factory.updateEnumDeclaration(a,a.modifiers,a.name,e.concatenate(a.members,e.singleElementArray(s))),{leadingTriviaOption:e.textChanges.LeadingTriviaOption.IncludeAll,trailingTriviaOption:e.textChanges.TrailingTriviaOption.Exclude})}function y(n,i,a){var o=e.getQuotePreference(i.sourceFile,i.preferences),s=t.createImportAdder(i.sourceFile,i.program,i.preferences,i.host),c=a.kind===r.Function?t.createSignatureDeclarationFromCallExpression(259,i,s,a.call,e.idText(a.token),a.modifierFlags,a.parentDeclaration):t.createSignatureDeclarationFromSignature(259,i,o,a.signature,t.createStubbedBody(e.Diagnostics.Function_not_implemented.message,o),a.token,void 0,void 0,void 0,s);void 0===c&&e.Debug.fail("fixMissingFunctionDeclaration codefix got unexpected error."),e.isReturnStatement(a.parentDeclaration)?n.insertNodeBefore(a.sourceFile,a.parentDeclaration,c,!0):n.insertNodeAtEndOfScope(a.sourceFile,a.parentDeclaration,c),s.writeFixes(n)}function v(r,n,i){var o=t.createImportAdder(n.sourceFile,n.program,n.preferences,n.host),s=e.getQuotePreference(n.sourceFile,n.preferences),c=n.program.getTypeChecker(),u=i.parentDeclaration.attributes,l=e.some(u.properties,e.isJsxSpreadAttribute),_=e.map(i.attributes,(function(t){var r=b(n,c,o,s,c.getTypeOfSymbol(t),i.parentDeclaration),a=e.factory.createIdentifier(t.name),u=e.factory.createJsxAttribute(a,e.factory.createJsxExpression(void 0,r));return e.setParent(a,u),u})),d=e.factory.createJsxAttributes(l?a(a([],_,!0),u.properties,!0):a(a([],u.properties,!0),_,!0)),p={prefix:u.pos===u.end?" ":void 0};r.replaceNode(n.sourceFile,u,d,p),o.writeFixes(r)}function h(r,n,i){var o=t.createImportAdder(n.sourceFile,n.program,n.preferences,n.host),s=e.getQuotePreference(n.sourceFile,n.preferences),c=e.getEmitScriptTarget(n.program.getCompilerOptions()),u=n.program.getTypeChecker(),l=e.map(i.properties,(function(t){var r=b(n,u,o,s,u.getTypeOfSymbol(t),i.parentDeclaration);return e.factory.createPropertyAssignment(function(t,r,n,i){if(e.isTransientSymbol(t)){var a=i.symbolToNode(t,111551,void 0,1073741824);if(a&&e.isComputedPropertyName(a))return a}return e.createPropertyNameNodeForIdentifierOrLiteral(t.name,r,0===n)}(t,c,s,u),r)})),_={leadingTriviaOption:e.textChanges.LeadingTriviaOption.Exclude,trailingTriviaOption:e.textChanges.TrailingTriviaOption.Exclude,indentation:i.indentation};r.replaceNode(n.sourceFile,i.parentDeclaration,e.factory.createObjectLiteralExpression(a(a([],i.parentDeclaration.properties,!0),l,!0),!0),_),o.writeFixes(r)}function b(r,n,i,a,o,s){if(3&o.flags)return x();if(134217732&o.flags)return e.factory.createStringLiteral("",0===a);if(8&o.flags)return e.factory.createNumericLiteral(0);if(64&o.flags)return e.factory.createBigIntLiteral("0n");if(16&o.flags)return e.factory.createFalse();if(1056&o.flags){var c=o.symbol.exports?e.firstOrUndefined(e.arrayFrom(o.symbol.exports.values())):o.symbol,u=n.symbolToExpression(o.symbol.parent?o.symbol.parent:o.symbol,111551,void 0,void 0);return void 0===c||void 0===u?e.factory.createNumericLiteral(0):e.factory.createPropertyAccessExpression(u,n.symbolToString(c))}if(256&o.flags)return e.factory.createNumericLiteral(o.value);if(2048&o.flags)return e.factory.createBigIntLiteral(o.value);if(128&o.flags)return e.factory.createStringLiteral(o.value,0===a);if(512&o.flags)return o===n.getFalseType()||o===n.getFalseType(!0)?e.factory.createFalse():e.factory.createTrue();if(65536&o.flags)return e.factory.createNull();if(1048576&o.flags){var l=e.firstDefined(o.types,(function(e){return b(r,n,i,a,e,s)}));return null!=l?l:x()}if(n.isArrayLikeType(o))return e.factory.createArrayLiteralExpression();if(function(t){return 524288&t.flags&&(128&e.getObjectFlags(t)||t.symbol&&e.tryCast(e.singleOrUndefined(t.symbol.declarations),e.isTypeLiteralNode))}(o)){var _=e.map(n.getPropertiesOfType(o),(function(t){var o=t.valueDeclaration?b(r,n,i,a,n.getTypeAtLocation(t.valueDeclaration),s):x();return e.factory.createPropertyAssignment(t.name,o)}));return e.factory.createObjectLiteralExpression(_,!0)}if(16&e.getObjectFlags(o)){if(void 0===e.find(o.symbol.declarations||e.emptyArray,e.or(e.isFunctionTypeNode,e.isMethodSignature,e.isMethodDeclaration)))return x();var d=n.getSignaturesOfType(o,0);if(void 0===d)return x();var p=t.createSignatureDeclarationFromSignature(215,r,a,d[0],t.createStubbedBody(e.Diagnostics.Function_not_implemented.message,a),void 0,void 0,void 0,s,i);return null!=p?p:x()}if(1&e.getObjectFlags(o)){var f=e.getClassLikeDeclarationOfSymbol(o.symbol);if(void 0===f||e.hasAbstractModifier(f))return x();var g=e.getFirstConstructorWithBody(f);return g&&e.length(g.parameters)?x():e.factory.createNewExpression(e.factory.createIdentifier(o.symbol.name),void 0,void 0)}return x()}function x(){return e.factory.createIdentifier("undefined")}function D(t){if(e.findAncestor(t,e.isJsxExpression)){var r=e.findAncestor(t.parent,e.isReturnStatement);if(r)return r}return e.getSourceFileOfNode(t)}!function(e){e[e.TypeLikeDeclaration=0]="TypeLikeDeclaration",e[e.Enum=1]="Enum",e[e.Function=2]="Function",e[e.ObjectLiteral=3]="ObjectLiteral",e[e.JsxAttributes=4]="JsxAttributes",e[e.Signature=5]="Signature"}(r||(r={})),t.registerCodeFix({errorCodes:c,getCodeActions:function(a){var c=a.program.getTypeChecker(),_=u(a.sourceFile,a.span.start,a.errorCode,c,a.program);if(_){if(_.kind===r.ObjectLiteral){var f=e.textChanges.ChangeTracker.with(a,(function(e){return h(e,a,_)}));return[t.createCodeFixAction(i,f,e.Diagnostics.Add_missing_properties,i,e.Diagnostics.Add_all_missing_properties)]}if(_.kind===r.JsxAttributes){f=e.textChanges.ChangeTracker.with(a,(function(e){return v(e,a,_)}));return[t.createCodeFixAction(o,f,e.Diagnostics.Add_missing_attributes,o,e.Diagnostics.Add_all_missing_attributes)]}if(_.kind===r.Function||_.kind===r.Signature){f=e.textChanges.ChangeTracker.with(a,(function(e){return y(e,a,_)}));return[t.createCodeFixAction(s,f,[e.Diagnostics.Add_missing_function_declaration_0,_.token.text],s,e.Diagnostics.Add_all_missing_function_declarations)]}if(_.kind===r.Enum){f=e.textChanges.ChangeTracker.with(a,(function(e){return m(e,a.program.getTypeChecker(),_)}));return[t.createCodeFixAction(n,f,[e.Diagnostics.Add_missing_enum_member_0,_.token.text],n,e.Diagnostics.Add_all_missing_members)]}return e.concatenate(function(r,i){var a=i.parentDeclaration,o=i.declSourceFile,s=i.modifierFlags,c=i.token,u=i.call;if(void 0===u)return;if(e.isPrivateIdentifier(c))return;var l=c.text,_=function(t){return e.textChanges.ChangeTracker.with(r,(function(e){return g(r,e,u,c,t,a,o)}))},d=[t.createCodeFixAction(n,_(32&s),[32&s?e.Diagnostics.Declare_static_method_0:e.Diagnostics.Declare_method_0,l],n,e.Diagnostics.Add_all_missing_members)];8&s&&d.unshift(t.createCodeFixActionWithoutFixAll(n,_(8),[e.Diagnostics.Declare_private_method_0,l]));return d}(a,_),function(r,i){return i.isJSFile?e.singleElementArray(function(r,i){var a=i.parentDeclaration,o=i.declSourceFile,s=i.modifierFlags,c=i.token;if(e.isInterfaceDeclaration(a)||e.isTypeLiteralNode(a))return;var u=e.textChanges.ChangeTracker.with(r,(function(e){return l(e,o,a,c,!!(32&s))}));if(0===u.length)return;var _=32&s?e.Diagnostics.Initialize_static_property_0:e.isPrivateIdentifier(c)?e.Diagnostics.Declare_a_private_field_named_0:e.Diagnostics.Initialize_property_0_in_the_constructor;return t.createCodeFixAction(n,u,[_,c.text],n,e.Diagnostics.Add_all_missing_members)}(r,i)):function(r,i){var a=i.parentDeclaration,o=i.declSourceFile,s=i.modifierFlags,c=i.token,u=c.text,l=32&s,_=d(r.program.getTypeChecker(),a,c),f=function(t){return e.textChanges.ChangeTracker.with(r,(function(e){return p(e,o,a,u,_,t)}))},g=[t.createCodeFixAction(n,f(32&s),[l?e.Diagnostics.Declare_static_property_0:e.Diagnostics.Declare_property_0,u],n,e.Diagnostics.Add_all_missing_members)];if(l||e.isPrivateIdentifier(c))return g;8&s&&g.unshift(t.createCodeFixActionWithoutFixAll(n,f(8),[e.Diagnostics.Declare_private_property_0,u]));return g.push(function(r,i,a,o,s){var c=e.factory.createKeywordTypeNode(152),u=e.factory.createParameterDeclaration(void 0,void 0,"x",void 0,c,void 0),l=e.factory.createIndexSignature(void 0,[u],s),_=e.textChanges.ChangeTracker.with(r,(function(e){return e.insertMemberAtStart(i,a,l)}));return t.createCodeFixActionWithoutFixAll(n,_,[e.Diagnostics.Add_index_signature_for_property_0,o])}(r,o,a,c.text,_)),g}(r,i)}(a,_))}},fixIds:[n,s,i,o],getAllCodeActions:function(n){var a=n.program,_=n.fixId,f=a.getTypeChecker(),b=new e.Map,x=new e.Map;return t.createCombinedCodeActions(e.textChanges.ChangeTracker.with(n,(function(a){t.eachDiagnostic(n,c,(function(t){var c=u(t.file,t.start,t.code,f,n.program);if(c&&e.addToSeen(b,e.getNodeId(c.parentDeclaration)+"#"+c.token.text))if(_!==s||c.kind!==r.Function&&c.kind!==r.Signature){if(_===i&&c.kind===r.ObjectLiteral)h(a,n,c);else if(_===o&&c.kind===r.JsxAttributes)v(a,n,c);else if(c.kind===r.Enum&&m(a,f,c),c.kind===r.TypeLikeDeclaration){var l=c.parentDeclaration,d=c.token,p=e.getOrUpdate(x,l,(function(){return[]}));p.some((function(e){return e.token.text===d.text}))||p.push(c)}}else y(a,n,c)})),x.forEach((function(r,i){for(var o=e.isTypeLiteralNode(i)?void 0:t.getAllSupers(i,f),s=function(t){if(null==o?void 0:o.some((function(e){var r=x.get(e);return!!r&&r.some((function(e){return e.token.text===t.token.text}))})))return"continue";var r=t.parentDeclaration,i=t.declSourceFile,s=t.modifierFlags,c=t.token,u=t.call,_=t.isJSFile;if(u&&!e.isPrivateIdentifier(c))g(n,a,u,c,32&s,r,i);else if(!_||e.isInterfaceDeclaration(r)||e.isTypeLiteralNode(r)){var m=d(f,r,c);p(a,i,r,c.text,m,32&s)}else l(a,i,r,c,!!(32&s))},c=0,u=r;c<u.length;c++){s(u[c])}}))})))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="addMissingNewOperator",n=[e.Diagnostics.Value_of_type_0_is_not_callable_Did_you_mean_to_include_new.code];function i(t,r,n){var i=e.cast(function(t,r){var n=e.getTokenAtPosition(t,r.start),i=e.textSpanEnd(r);for(;n.end<i;)n=n.parent;return n}(r,n),e.isCallExpression),a=e.factory.createNewExpression(i.expression,i.typeArguments,i.arguments);t.replaceNode(r,i,a)}t.registerCodeFix({errorCodes:n,getCodeActions:function(n){var a=n.sourceFile,o=n.span,s=e.textChanges.ChangeTracker.with(n,(function(e){return i(e,a,o)}));return[t.createCodeFixAction(r,s,e.Diagnostics.Add_missing_new_operator_to_call,r,e.Diagnostics.Add_missing_new_operator_to_all_calls)]},fixIds:[r],getAllCodeActions:function(e){return t.codeFixAll(e,n,(function(t,r){return i(t,e.sourceFile,r)}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="installTypesPackage",n=e.Diagnostics.Cannot_find_module_0_or_its_corresponding_type_declarations.code,i=[n,e.Diagnostics.Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type.code];function a(e,t){return{type:"install package",file:e,packageName:t}}function o(t,r){var n=e.tryCast(e.getTokenAtPosition(t,r),e.isStringLiteral);if(n){var i=n.text,a=e.parsePackageName(i).packageName;return e.isExternalModuleNameRelative(a)?void 0:a}}function s(t,r,i){var a;return i===n?e.JsTyping.nodeCoreModules.has(t)?"@types/node":void 0:(null===(a=r.isKnownTypesPackageName)||void 0===a?void 0:a.call(r,t))?e.getTypesPackageName(t):void 0}t.registerCodeFix({errorCodes:i,getCodeActions:function(n){var i=n.host,c=n.sourceFile,u=o(c,n.span.start);if(void 0!==u){var l=s(u,i,n.errorCode);return void 0===l?[]:[t.createCodeFixAction("fixCannotFindModule",[],[e.Diagnostics.Install_0,l],r,e.Diagnostics.Install_all_missing_types_packages,a(c.fileName,l))]}},fixIds:[r],getAllCodeActions:function(n){return t.codeFixAll(n,i,(function(t,i,c){var u=o(i.file,i.start);if(void 0!==u)if(n.fixId===r){var l=s(u,n.host,i.code);l&&c.push(a(i.file.fileName,l))}else e.Debug.fail("Bad fixId: ".concat(n.fixId))}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r=[e.Diagnostics.Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2.code,e.Diagnostics.Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1.code],n="fixClassDoesntImplementInheritedAbstractMember";function i(t,r){var n=e.getTokenAtPosition(t,r);return e.cast(n.parent,e.isClassLike)}function a(r,n,i,a,s){var c=e.getEffectiveBaseTypeNode(r),u=i.program.getTypeChecker(),l=u.getTypeAtLocation(c),_=u.getPropertiesOfType(l).filter(o),d=t.createImportAdder(n,i.program,s,i.host);t.createMissingMemberNodes(r,_,n,i,s,d,(function(e){return a.insertMemberAtStart(n,r,e)})),d.writeFixes(a)}function o(t){var r=e.getSyntacticModifierFlags(e.first(t.getDeclarations()));return!(8&r||!(256&r))}t.registerCodeFix({errorCodes:r,getCodeActions:function(r){var o=r.sourceFile,s=r.span,c=e.textChanges.ChangeTracker.with(r,(function(e){return a(i(o,s.start),o,r,e,r.preferences)}));return 0===c.length?void 0:[t.createCodeFixAction(n,c,e.Diagnostics.Implement_inherited_abstract_class,n,e.Diagnostics.Implement_all_inherited_abstract_classes)]},fixIds:[n],getAllCodeActions:function(n){var o=new e.Map;return t.codeFixAll(n,r,(function(t,r){var s=i(r.file,r.start);e.addToSeen(o,e.getNodeId(s))&&a(s,n.sourceFile,n,t,n.preferences)}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="classSuperMustPrecedeThisAccess",n=[e.Diagnostics.super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class.code];function i(e,t,r,n){e.insertNodeAtConstructorStart(t,r,n),e.delete(t,n)}function a(t,r){var n=e.getTokenAtPosition(t,r);if(108===n.kind){var i=e.getContainingFunction(n),a=o(i.body);return a&&!a.expression.arguments.some((function(t){return e.isPropertyAccessExpression(t)&&t.expression===n}))?{constructor:i,superCall:a}:void 0}}function o(t){return e.isExpressionStatement(t)&&e.isSuperCall(t.expression)?t:e.isFunctionLike(t)?void 0:e.forEachChild(t,o)}t.registerCodeFix({errorCodes:n,getCodeActions:function(n){var o=n.sourceFile,s=n.span,c=a(o,s.start);if(c){var u=c.constructor,l=c.superCall,_=e.textChanges.ChangeTracker.with(n,(function(e){return i(e,o,u,l)}));return[t.createCodeFixAction(r,_,e.Diagnostics.Make_super_call_the_first_statement_in_the_constructor,r,e.Diagnostics.Make_all_super_calls_the_first_statement_in_their_constructor)]}},fixIds:[r],getAllCodeActions:function(r){var o=r.sourceFile,s=new e.Map;return t.codeFixAll(r,n,(function(t,r){var n=a(r.file,r.start);if(n){var c=n.constructor,u=n.superCall;e.addToSeen(s,e.getNodeId(c.parent))&&i(t,o,c,u)}}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="constructorForDerivedNeedSuperCall",n=[e.Diagnostics.Constructors_for_derived_classes_must_contain_a_super_call.code];function i(t,r){var n=e.getTokenAtPosition(t,r);return e.Debug.assert(e.isConstructorDeclaration(n.parent),"token should be at the constructor declaration"),n.parent}function a(t,r,n){var i=e.factory.createExpressionStatement(e.factory.createCallExpression(e.factory.createSuper(),void 0,e.emptyArray));t.insertNodeAtConstructorStart(r,n,i)}t.registerCodeFix({errorCodes:n,getCodeActions:function(n){var o=n.sourceFile,s=n.span,c=i(o,s.start),u=e.textChanges.ChangeTracker.with(n,(function(e){return a(e,o,c)}));return[t.createCodeFixAction(r,u,e.Diagnostics.Add_missing_super_call,r,e.Diagnostics.Add_all_missing_super_calls)]},fixIds:[r],getAllCodeActions:function(e){return t.codeFixAll(e,n,(function(t,r){return a(t,e.sourceFile,i(r.file,r.start))}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="enableExperimentalDecorators",n=[e.Diagnostics.Experimental_support_for_decorators_is_a_feature_that_is_subject_to_change_in_a_future_release_Set_the_experimentalDecorators_option_in_your_tsconfig_or_jsconfig_to_remove_this_warning.code];function i(r,n){t.setJsonCompilerOptionValue(r,n,"experimentalDecorators",e.factory.createTrue())}t.registerCodeFix({errorCodes:n,getCodeActions:function(n){var a=n.program.getCompilerOptions().configFile;if(void 0!==a){var o=e.textChanges.ChangeTracker.with(n,(function(e){return i(e,a)}));return[t.createCodeFixActionWithoutFixAll(r,o,e.Diagnostics.Enable_the_experimentalDecorators_option_in_your_configuration_file)]}},fixIds:[r],getAllCodeActions:function(e){return t.codeFixAll(e,n,(function(t){var r=e.program.getCompilerOptions().configFile;void 0!==r&&i(t,r)}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="fixEnableJsxFlag",n=[e.Diagnostics.Cannot_use_JSX_unless_the_jsx_flag_is_provided.code];function i(r,n){t.setJsonCompilerOptionValue(r,n,"jsx",e.factory.createStringLiteral("react"))}t.registerCodeFix({errorCodes:n,getCodeActions:function(n){var a=n.program.getCompilerOptions().configFile;if(void 0!==a){var o=e.textChanges.ChangeTracker.with(n,(function(e){return i(e,a)}));return[t.createCodeFixActionWithoutFixAll(r,o,e.Diagnostics.Enable_the_jsx_flag_in_your_configuration_file)]}},fixIds:[r],getAllCodeActions:function(e){return t.codeFixAll(e,n,(function(t){var r=e.program.getCompilerOptions().configFile;void 0!==r&&i(t,r)}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="fixNaNEquality",n=[e.Diagnostics.This_condition_will_always_return_0.code];function i(r,n,i){var a=e.find(r.getSemanticDiagnostics(n),(function(e){return e.start===i.start&&e.length===i.length}));if(void 0!==a&&void 0!==a.relatedInformation){var o=e.find(a.relatedInformation,(function(t){return t.code===e.Diagnostics.Did_you_mean_0.code}));if(void 0!==o&&void 0!==o.file&&void 0!==o.start&&void 0!==o.length){var s,c,u,l=t.findAncestorMatchingSpan(o.file,e.createTextSpan(o.start,o.length));if(void 0!==l)return e.isExpression(l)&&e.isBinaryExpression(l.parent)?{suggestion:(s=o.messageText,c=e.flattenDiagnosticMessageText(s,"\n",0).match(/\'(.*)\'/)||[],c[0],u=c[1],u),expression:l.parent,arg:l}:void 0}}}function a(t,r,n,i){var a=e.factory.createCallExpression(e.factory.createPropertyAccessExpression(e.factory.createIdentifier("Number"),e.factory.createIdentifier("isNaN")),void 0,[n]),o=i.operatorToken.kind;t.replaceNode(r,i,37===o||35===o?e.factory.createPrefixUnaryExpression(53,a):a)}t.registerCodeFix({errorCodes:n,getCodeActions:function(n){var o=n.sourceFile,s=n.span,c=i(n.program,o,s);if(void 0!==c){var u=c.suggestion,l=c.expression,_=c.arg,d=e.textChanges.ChangeTracker.with(n,(function(e){return a(e,o,_,l)}));return[t.createCodeFixAction(r,d,[e.Diagnostics.Use_0,u],r,e.Diagnostics.Use_Number_isNaN_in_all_conditions)]}},fixIds:[r],getAllCodeActions:function(r){return t.codeFixAll(r,n,(function(t,n){var o=i(r.program,n.file,e.createTextSpan(n.start,n.length));o&&a(t,n.file,o.arg,o.expression)}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){t.registerCodeFix({errorCodes:[e.Diagnostics.Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_or_nodenext_and_the_target_option_is_set_to_es2017_or_higher.code,e.Diagnostics.Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_or_nodenext_and_the_target_option_is_set_to_es2017_or_higher.code],getCodeActions:function(r){var n=r.program.getCompilerOptions(),i=n.configFile;if(void 0!==i){var a=[],o=e.getEmitModuleKind(n);if(o>=e.ModuleKind.ES2015&&o<e.ModuleKind.ESNext){var s=e.textChanges.ChangeTracker.with(r,(function(r){t.setJsonCompilerOptionValue(r,i,"module",e.factory.createStringLiteral("esnext"))}));a.push(t.createCodeFixActionWithoutFixAll("fixModuleOption",s,[e.Diagnostics.Set_the_module_option_in_your_configuration_file_to_0,"esnext"]))}var c=e.getEmitScriptTarget(n);if(c<4||c>99){s=e.textChanges.ChangeTracker.with(r,(function(r){if(e.getTsConfigObjectLiteralExpression(i)){var n=[["target",e.factory.createStringLiteral("es2017")]];o===e.ModuleKind.CommonJS&&n.push(["module",e.factory.createStringLiteral("commonjs")]),t.setJsonCompilerOptionValues(r,i,n)}}));a.push(t.createCodeFixActionWithoutFixAll("fixTargetOption",s,[e.Diagnostics.Set_the_target_option_in_your_configuration_file_to_0,"es2017"]))}return a.length?a:void 0}}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="fixPropertyAssignment",n=[e.Diagnostics.Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_part_of_a_destructuring_pattern.code];function i(t,r,n){t.replaceNode(r,n,e.factory.createPropertyAssignment(n.name,n.objectAssignmentInitializer))}function a(t,r){return e.cast(e.getTokenAtPosition(t,r).parent,e.isShorthandPropertyAssignment)}t.registerCodeFix({errorCodes:n,fixIds:[r],getCodeActions:function(n){var o=a(n.sourceFile,n.span.start),s=e.textChanges.ChangeTracker.with(n,(function(e){return i(e,n.sourceFile,o)}));return[t.createCodeFixAction(r,s,[e.Diagnostics.Change_0_to_1,"=",":"],r,[e.Diagnostics.Switch_each_misused_0_to_1,"=",":"])]},getAllCodeActions:function(e){return t.codeFixAll(e,n,(function(e,t){return i(e,t.file,a(t.file,t.start))}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="extendsInterfaceBecomesImplements",n=[e.Diagnostics.Cannot_extend_an_interface_0_Did_you_mean_implements.code];function i(t,r){var n=e.getTokenAtPosition(t,r),i=e.getContainingClass(n).heritageClauses,a=i[0].getFirstToken();return 94===a.kind?{extendsToken:a,heritageClauses:i}:void 0}function a(t,r,n,i){if(t.replaceNode(r,n,e.factory.createToken(117)),2===i.length&&94===i[0].token&&117===i[1].token){var a=i[1].getFirstToken(),o=a.getFullStart();t.replaceRange(r,{pos:o,end:o},e.factory.createToken(27));for(var s=r.text,c=a.end;c<s.length&&e.isWhiteSpaceSingleLine(s.charCodeAt(c));)c++;t.deleteRange(r,{pos:a.getStart(),end:c})}}t.registerCodeFix({errorCodes:n,getCodeActions:function(n){var o=n.sourceFile,s=i(o,n.span.start);if(s){var c=s.extendsToken,u=s.heritageClauses,l=e.textChanges.ChangeTracker.with(n,(function(e){return a(e,o,c,u)}));return[t.createCodeFixAction(r,l,e.Diagnostics.Change_extends_to_implements,r,e.Diagnostics.Change_all_extended_interfaces_to_implements)]}},fixIds:[r],getAllCodeActions:function(e){return t.codeFixAll(e,n,(function(e,t){var r=i(t.file,t.start);r&&a(e,t.file,r.extendsToken,r.heritageClauses)}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="forgottenThisPropertyAccess",n=e.Diagnostics.Cannot_find_name_0_Did_you_mean_the_static_member_1_0.code,i=[e.Diagnostics.Cannot_find_name_0_Did_you_mean_the_instance_member_this_0.code,e.Diagnostics.Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member_declaration_property_access_or_on_the_left_hand_side_of_an_in_expression.code,n];function a(t,r,i){var a=e.getTokenAtPosition(t,r);if(e.isIdentifier(a)||e.isPrivateIdentifier(a))return{node:a,className:i===n?e.getContainingClass(a).name.text:void 0}}function o(t,r,n){var i=n.node,a=n.className;e.suppressLeadingAndTrailingTrivia(i),t.replaceNode(r,i,e.factory.createPropertyAccessExpression(a?e.factory.createIdentifier(a):e.factory.createThis(),i))}t.registerCodeFix({errorCodes:i,getCodeActions:function(n){var i=n.sourceFile,s=a(i,n.span.start,n.errorCode);if(s){var c=e.textChanges.ChangeTracker.with(n,(function(e){return o(e,i,s)}));return[t.createCodeFixAction(r,c,[e.Diagnostics.Add_0_to_unresolved_variable,s.className||"this"],r,e.Diagnostics.Add_qualifier_to_all_unresolved_variables_matching_a_member_name)]}},fixIds:[r],getAllCodeActions:function(e){return t.codeFixAll(e,i,(function(t,r){var n=a(r.file,r.start,r.code);n&&o(t,e.sourceFile,n)}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="fixInvalidJsxCharacters_expression",n="fixInvalidJsxCharacters_htmlEntity",i=[e.Diagnostics.Unexpected_token_Did_you_mean_or_gt.code,e.Diagnostics.Unexpected_token_Did_you_mean_or_rbrace.code];t.registerCodeFix({errorCodes:i,fixIds:[r,n],getCodeActions:function(i){var a=i.sourceFile,s=i.preferences,c=i.span,u=e.textChanges.ChangeTracker.with(i,(function(e){return o(e,s,a,c.start,!1)})),l=e.textChanges.ChangeTracker.with(i,(function(e){return o(e,s,a,c.start,!0)}));return[t.createCodeFixAction(r,u,e.Diagnostics.Wrap_invalid_character_in_an_expression_container,r,e.Diagnostics.Wrap_all_invalid_characters_in_an_expression_container),t.createCodeFixAction(n,l,e.Diagnostics.Convert_invalid_character_to_its_html_entity_code,n,e.Diagnostics.Convert_all_invalid_characters_to_HTML_entity_code)]},getAllCodeActions:function(e){return t.codeFixAll(e,i,(function(t,r){return o(t,e.preferences,r.file,r.start,e.fixId===n)}))}});var a={">":"&gt;","}":"&rbrace;"};function o(t,r,n,i,o){var s=n.getText()[i];if(function(t){return e.hasProperty(a,t)}(s)){var c=o?a[s]:"{".concat(e.quote(n,r,s),"}");t.replaceRangeWithText(n,{pos:i,end:i+1},c)}}}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="deleteUnmatchedParameter",n="renameUnmatchedParameter",i=[e.Diagnostics.JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name.code];function a(t,r){var n=e.getTokenAtPosition(t,r);if(n.parent&&e.isJSDocParameterTag(n.parent)&&e.isIdentifier(n.parent.name)){var i=n.parent,a=e.getHostSignatureFromJSDoc(i);if(a)return{signature:a,name:n.parent.name,jsDocParameterTag:i}}}t.registerCodeFix({fixIds:[r,n],errorCodes:i,getCodeActions:function(i){var o=[],s=a(i.sourceFile,i.span.start);if(s)return e.append(o,function(n,i){var a=i.name,o=i.signature,s=i.jsDocParameterTag,c=e.textChanges.ChangeTracker.with(n,(function(e){return e.filterJSDocTags(n.sourceFile,o,(function(e){return e!==s}))}));return t.createCodeFixAction(r,c,[e.Diagnostics.Delete_unused_param_tag_0,a.getText(n.sourceFile)],r,e.Diagnostics.Delete_all_unused_param_tags)}(i,s)),e.append(o,function(r,i){var a=i.name,o=i.signature,s=i.jsDocParameterTag;if(!e.length(o.parameters))return;for(var c=r.sourceFile,u=e.getJSDocTags(o),l=new e.Set,_=0,d=u;_<d.length;_++){var p=d[_];e.isJSDocParameterTag(p)&&e.isIdentifier(p.name)&&l.add(p.name.escapedText)}var f=e.firstDefined(o.parameters,(function(t){return e.isIdentifier(t.name)&&!l.has(t.name.escapedText)?t.name.getText(c):void 0}));if(void 0===f)return;var g=e.factory.updateJSDocParameterTag(s,s.tagName,e.factory.createIdentifier(f),s.isBracketed,s.typeExpression,s.isNameFirst,s.comment),m=e.textChanges.ChangeTracker.with(r,(function(t){return t.replaceJSDocComment(c,o,e.map(u,(function(e){return e===s?g:e})))}));return t.createCodeFixActionWithoutFixAll(n,m,[e.Diagnostics.Rename_param_tag_name_0_to_1,a.getText(c),f])}(i,s)),o},getAllCodeActions:function(n){var o=new e.Map;return t.createCombinedCodeActions(e.textChanges.ChangeTracker.with(n,(function(s){t.eachDiagnostic(n,i,(function(t){var r=a(t.file,t.start);r&&o.set(r.signature,e.append(o.get(r.signature),r.jsDocParameterTag))})),o.forEach((function(t,i){if(n.fixId===r){var a=new e.Set(t);s.filterJSDocTags(i.getSourceFile(),i,(function(e){return!a.has(e)}))}}))})))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="fixUnreferenceableDecoratorMetadata",n=[e.Diagnostics.A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_when_isolatedModules_and_emitDecoratorMetadata_are_enabled.code];t.registerCodeFix({errorCodes:n,getCodeActions:function(n){var i=function(t,r,n){var i=e.tryCast(e.getTokenAtPosition(t,n),e.isIdentifier);if(!i||180!==i.parent.kind)return;var a=r.getTypeChecker().getSymbolAtLocation(i);return e.find((null==a?void 0:a.declarations)||e.emptyArray,e.or(e.isImportClause,e.isImportSpecifier,e.isImportEqualsDeclaration))}(n.sourceFile,n.program,n.span.start);if(i){var a,o=e.textChanges.ChangeTracker.with(n,(function(t){return 273===i.kind&&function(t,r,n,i){e.refactor.doChangeNamedToNamespaceOrDefault(r,i,t,n.parent)}(t,n.sourceFile,i,n.program)})),s=e.textChanges.ChangeTracker.with(n,(function(t){return function(t,r,n,i){if(268===n.kind)return void t.insertModifierBefore(r,154,n.name);var a=270===n.kind?n:n.parent.parent;if(a.name&&a.namedBindings)return;var o=i.getTypeChecker();if(e.forEachImportClauseDeclaration(a,(function(t){if(111551&e.skipAlias(t.symbol,o).flags)return!0})))return;t.insertModifierBefore(r,154,a)}(t,n.sourceFile,i,n.program)}));return o.length&&(a=e.append(a,t.createCodeFixActionWithoutFixAll(r,o,e.Diagnostics.Convert_named_imports_to_namespace_import))),s.length&&(a=e.append(a,t.createCodeFixActionWithoutFixAll(r,s,e.Diagnostics.Convert_to_type_only_import))),a}},fixIds:[r]})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="unusedIdentifier",n="unusedIdentifier_prefix",i="unusedIdentifier_delete",a="unusedIdentifier_deleteImports",o="unusedIdentifier_infer",s=[e.Diagnostics._0_is_declared_but_its_value_is_never_read.code,e.Diagnostics._0_is_declared_but_never_used.code,e.Diagnostics.Property_0_is_declared_but_its_value_is_never_read.code,e.Diagnostics.All_imports_in_import_declaration_are_unused.code,e.Diagnostics.All_destructured_elements_are_unused.code,e.Diagnostics.All_variables_are_unused.code,e.Diagnostics.All_type_parameters_are_unused.code];function c(t,r,n){t.replaceNode(r,n.parent,e.factory.createKeywordTypeNode(157))}function u(n,a){return t.createCodeFixAction(r,n,a,i,e.Diagnostics.Delete_all_unused_declarations)}function l(t,r,n){t.delete(r,e.Debug.checkDefined(e.cast(n.parent,e.isDeclarationWithTypeParameterChildren).typeParameters,"The type parameter to delete should exist"))}function _(e){return 100===e.kind||79===e.kind&&(273===e.parent.kind||270===e.parent.kind)}function d(t){return 100===t.kind?e.tryCast(t.parent,e.isImportDeclaration):void 0}function p(t,r){return e.isVariableDeclarationList(r.parent)&&e.first(r.parent.getChildren(t))===r}function f(e,t,r){e.delete(t,240===r.parent.kind?r.parent:r)}function g(t,r,n,i){r!==e.Diagnostics.Property_0_is_declared_but_its_value_is_never_read.code&&(138===i.kind&&(i=e.cast(i.parent,e.isInferTypeNode).typeParameter.name),e.isIdentifier(i)&&function(e){switch(e.parent.kind){case 166:case 165:return!0;case 257:switch(e.parent.parent.parent.kind){case 247:case 246:return!0}}return!1}(i)&&(t.replaceNode(n,i,e.factory.createIdentifier("_".concat(i.text))),e.isParameter(i.parent)&&e.getJSDocParameterTags(i.parent).forEach((function(r){e.isIdentifier(r.name)&&t.replaceNode(n,r.name,e.factory.createIdentifier("_".concat(r.name.text)))}))))}function m(t,r,n,i,a,o,s,c){!function(t,r,n,i,a,o,s,c){var u=t.parent;if(e.isParameter(u))!function(t,r,n,i,a,o,s,c){void 0===c&&(c=!1);if(function(t,r,n,i,a,o,s){var c=n.parent;switch(c.kind){case 171:case 173:var u=c.parameters.indexOf(n),l=e.isMethodDeclaration(c)?c.name:c,_=e.FindAllReferences.Core.getReferencedSymbolsForNode(c.pos,l,a,i,o);if(_)for(var d=0,p=_;d<p.length;d++)for(var f=0,g=p[d].references;f<g.length;f++){var m=g[f];if(1===m.kind){var y=e.isSuperKeyword(m.node)&&e.isCallExpression(m.node.parent)&&m.node.parent.arguments.length>u,h=e.isPropertyAccessExpression(m.node.parent)&&e.isSuperKeyword(m.node.parent.expression)&&e.isCallExpression(m.node.parent.parent)&&m.node.parent.parent.arguments.length>u,b=(e.isMethodDeclaration(m.node.parent)||e.isMethodSignature(m.node.parent))&&m.node.parent!==n.parent&&m.node.parent.parameters.length>u;if(y||h||b)return!1}}return!0;case 259:return!c.name||!function(t,r,n){return!!e.FindAllReferences.Core.eachSymbolReferenceInFile(n,t,r,(function(t){return e.isIdentifier(t)&&e.isCallExpression(t.parent)&&t.parent.arguments.indexOf(t)>=0}))}(t,r,c.name)||v(c,n,s);case 215:case 216:return v(c,n,s);case 175:return!1;case 174:return!0;default:return e.Debug.failBadSyntaxKind(c)}}(i,r,n,a,o,s,c))if(n.modifiers&&n.modifiers.length>0&&(!e.isIdentifier(n.name)||e.FindAllReferences.Core.isSymbolReferencedInFile(n.name,i,r)))for(var u=0,l=n.modifiers;u<l.length;u++){var _=l[u];e.isModifier(_)&&t.deleteModifier(r,_)}else!n.initializer&&y(n,i,a)&&t.delete(r,n)}(r,n,u,i,a,o,s,c);else if(!(c&&e.isIdentifier(t)&&e.FindAllReferences.Core.isSymbolReferencedInFile(t,i,n))){var l=e.isImportClause(u)?t:e.isComputedPropertyName(u)?u.parent:u;e.Debug.assert(l!==n,"should not delete whole source file"),r.delete(n,l)}}(r,n,t,i,a,o,s,c),e.isIdentifier(r)&&e.FindAllReferences.Core.eachSymbolReferenceInFile(r,i,t,(function(r){var i;e.isPropertyAccessExpression(r.parent)&&r.parent.name===r&&(r=r.parent),!c&&(i=r,(e.isBinaryExpression(i.parent)&&i.parent.left===i||(e.isPostfixUnaryExpression(i.parent)||e.isPrefixUnaryExpression(i.parent))&&i.parent.operand===i)&&e.isExpressionStatement(i.parent.parent))&&n.delete(t,r.parent.parent)}))}function y(t,r,n){var i=t.parent.parameters.indexOf(t);return!e.FindAllReferences.Core.someSignatureUsage(t.parent,n,r,(function(e,t){return!t||t.arguments.length>i}))}function v(t,r,n){var i=t.parameters,a=i.indexOf(r);return e.Debug.assert(-1!==a,"The parameter should already be in the list"),n?i.slice(a+1).every((function(t){return e.isIdentifier(t.name)&&!t.symbol.isReferenced})):a===i.length-1}t.registerCodeFix({errorCodes:s,getCodeActions:function(i){var s=i.errorCode,y=i.sourceFile,v=i.program,h=i.cancellationToken,b=v.getTypeChecker(),x=v.getSourceFiles(),D=e.getTokenAtPosition(y,i.span.start);if(e.isJSDocTemplateTag(D))return[u(e.textChanges.ChangeTracker.with(i,(function(e){return e.delete(y,D)})),e.Diagnostics.Remove_template_tag)];if(29===D.kind)return[u(T=e.textChanges.ChangeTracker.with(i,(function(e){return l(e,y,D)})),e.Diagnostics.Remove_type_parameters)];var S=d(D);if(S){var T=e.textChanges.ChangeTracker.with(i,(function(e){return e.delete(y,S)}));return[t.createCodeFixAction(r,T,[e.Diagnostics.Remove_import_from_0,e.showModuleSpecifier(S)],a,e.Diagnostics.Delete_all_unused_imports)]}if(_(D)&&(A=e.textChanges.ChangeTracker.with(i,(function(e){return m(y,D,e,b,x,v,h,!1)}))).length)return[t.createCodeFixAction(r,A,[e.Diagnostics.Remove_unused_declaration_for_Colon_0,D.getText(y)],a,e.Diagnostics.Delete_all_unused_imports)];if(e.isObjectBindingPattern(D.parent)||e.isArrayBindingPattern(D.parent)){if(e.isParameter(D.parent.parent)){var C=D.parent.elements,E=[C.length>1?e.Diagnostics.Remove_unused_declarations_for_Colon_0:e.Diagnostics.Remove_unused_declaration_for_Colon_0,e.map(C,(function(e){return e.getText(y)})).join(", ")];return[u(e.textChanges.ChangeTracker.with(i,(function(t){return function(t,r,n){e.forEach(n.elements,(function(e){return t.delete(r,e)}))}(t,y,D.parent)})),E)]}return[u(e.textChanges.ChangeTracker.with(i,(function(e){return e.delete(y,D.parent.parent)})),e.Diagnostics.Remove_unused_destructuring_declaration)]}if(p(y,D))return[u(e.textChanges.ChangeTracker.with(i,(function(e){return f(e,y,D.parent)})),e.Diagnostics.Remove_variable_statement)];var k=[];if(138===D.kind){T=e.textChanges.ChangeTracker.with(i,(function(e){return c(e,y,D)}));var N=e.cast(D.parent,e.isInferTypeNode).typeParameter.name.text;k.push(t.createCodeFixAction(r,T,[e.Diagnostics.Replace_infer_0_with_unknown,N],o,e.Diagnostics.Replace_all_unused_infer_with_unknown))}else{var A;if((A=e.textChanges.ChangeTracker.with(i,(function(e){return m(y,D,e,b,x,v,h,!1)}))).length){N=e.isComputedPropertyName(D.parent)?D.parent:D;k.push(u(A,[e.Diagnostics.Remove_unused_declaration_for_Colon_0,N.getText(y)]))}}var F=e.textChanges.ChangeTracker.with(i,(function(e){return g(e,s,y,D)}));return F.length&&k.push(t.createCodeFixAction(r,F,[e.Diagnostics.Prefix_0_with_an_underscore,D.getText(y)],n,e.Diagnostics.Prefix_all_unused_declarations_with_where_possible)),k},fixIds:[n,i,a,o],getAllCodeActions:function(r){var u=r.sourceFile,v=r.program,h=r.cancellationToken,b=v.getTypeChecker(),x=v.getSourceFiles();return t.codeFixAll(r,s,(function(t,s){var D=e.getTokenAtPosition(u,s.start);switch(r.fixId){case n:g(t,s.code,u,D);break;case a:var S=d(D);S?t.delete(u,S):_(D)&&m(u,D,t,b,x,v,h,!0);break;case i:if(138===D.kind||_(D))break;if(e.isJSDocTemplateTag(D))t.delete(u,D);else if(29===D.kind)l(t,u,D);else if(e.isObjectBindingPattern(D.parent)){if(D.parent.parent.initializer)break;e.isParameter(D.parent.parent)&&!y(D.parent.parent,b,x)||t.delete(u,D.parent.parent)}else{if(e.isArrayBindingPattern(D.parent.parent)&&D.parent.parent.parent.initializer)break;p(u,D)?f(t,u,D.parent):m(u,D,t,b,x,v,h,!0)}break;case o:138===D.kind&&c(t,u,D);break;default:e.Debug.fail(JSON.stringify(r.fixId))}}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="fixUnreachableCode",n=[e.Diagnostics.Unreachable_code_detected.code];function i(t,r,n,i,a){var o=e.getTokenAtPosition(r,n),s=e.findAncestor(o,e.isStatement);if(s.getStart(r)!==o.getStart(r)){var c=JSON.stringify({statementKind:e.Debug.formatSyntaxKind(s.kind),tokenKind:e.Debug.formatSyntaxKind(o.kind),errorCode:a,start:n,length:i});e.Debug.fail("Token and statement should start at the same point. "+c)}var u=(e.isBlock(s.parent)?s.parent:s).parent;if(!e.isBlock(s.parent)||s===e.first(s.parent.statements))switch(u.kind){case 242:if(u.elseStatement){if(e.isBlock(s.parent))break;return void t.replaceNode(r,s,e.factory.createBlock(e.emptyArray))}case 244:case 245:return void t.delete(r,u)}if(e.isBlock(s.parent)){var l=n+i,_=e.Debug.checkDefined(function(e,t){for(var r,n=0,i=e;n<i.length;n++){var a=i[n];if(!t(a))break;r=a}return r}(e.sliceAfter(s.parent.statements,s),(function(e){return e.pos<l})),"Some statement should be last");t.deleteNodeRange(r,s,_)}else t.delete(r,s)}t.registerCodeFix({errorCodes:n,getCodeActions:function(n){if(!n.program.getSyntacticDiagnostics(n.sourceFile,n.cancellationToken).length){var a=e.textChanges.ChangeTracker.with(n,(function(e){return i(e,n.sourceFile,n.span.start,n.span.length,n.errorCode)}));return[t.createCodeFixAction(r,a,e.Diagnostics.Remove_unreachable_code,r,e.Diagnostics.Remove_all_unreachable_code)]}},fixIds:[r],getAllCodeActions:function(e){return t.codeFixAll(e,n,(function(e,t){return i(e,t.file,t.start,t.length,t.code)}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="fixUnusedLabel",n=[e.Diagnostics.Unused_label.code];function i(t,r,n){var i=e.getTokenAtPosition(r,n),a=e.cast(i.parent,e.isLabeledStatement),o=i.getStart(r),s=a.statement.getStart(r),c=e.positionsAreOnSameLine(o,s,r)?s:e.skipTrivia(r.text,e.findChildOfKind(a,58,r).end,!0);t.deleteRange(r,{pos:o,end:c})}t.registerCodeFix({errorCodes:n,getCodeActions:function(n){var a=e.textChanges.ChangeTracker.with(n,(function(e){return i(e,n.sourceFile,n.span.start)}));return[t.createCodeFixAction(r,a,e.Diagnostics.Remove_unused_label,r,e.Diagnostics.Remove_all_unused_labels)]},fixIds:[r],getAllCodeActions:function(e){return t.codeFixAll(e,n,(function(e,t){return i(e,t.file,t.start)}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="fixJSDocTypes_plain",n="fixJSDocTypes_nullable",i=[e.Diagnostics.JSDoc_types_can_only_be_used_inside_documentation_comments.code];function a(e,t,r,n,i){e.replaceNode(t,r,i.typeToTypeNode(n,r,void 0))}function o(t,r,n){var i=e.findAncestor(e.getTokenAtPosition(t,r),s),a=i&&i.type;return a&&{typeNode:a,type:n.getTypeFromTypeNode(a)}}function s(e){switch(e.kind){case 231:case 176:case 177:case 259:case 174:case 178:case 197:case 171:case 170:case 166:case 169:case 168:case 175:case 262:case 213:case 257:return!0;default:return!1}}t.registerCodeFix({errorCodes:i,getCodeActions:function(i){var s=i.sourceFile,c=i.program.getTypeChecker(),u=o(s,i.span.start,c);if(u){var l=u.typeNode,_=u.type,d=l.getText(s),p=[f(_,r,e.Diagnostics.Change_all_jsdoc_style_types_to_TypeScript)];return 317===l.kind&&p.push(f(c.getNullableType(_,32768),n,e.Diagnostics.Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types)),p}function f(r,n,o){var u=e.textChanges.ChangeTracker.with(i,(function(e){return a(e,s,l,r,c)}));return t.createCodeFixAction("jdocTypes",u,[e.Diagnostics.Change_0_to_1,d,c.typeToString(r)],n,o)}},fixIds:[r,n],getAllCodeActions:function(e){var r=e.fixId,s=e.program,c=e.sourceFile,u=s.getTypeChecker();return t.codeFixAll(e,i,(function(e,t){var i=o(t.file,t.start,u);if(i){var s=i.typeNode,l=i.type,_=317===s.kind&&r===n?u.getNullableType(l,32768):l;a(e,c,s,_,u)}}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="fixMissingCallParentheses",n=[e.Diagnostics.This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_instead.code];function i(e,t,r){e.replaceNodeWithText(t,r,"".concat(r.text,"()"))}function a(t,r){var n=e.getTokenAtPosition(t,r);if(e.isPropertyAccessExpression(n.parent)){for(var i=n.parent;e.isPropertyAccessExpression(i.parent);)i=i.parent;return i.name}if(e.isIdentifier(n))return n}t.registerCodeFix({errorCodes:n,fixIds:[r],getCodeActions:function(n){var o=a(n.sourceFile,n.span.start);if(o){var s=e.textChanges.ChangeTracker.with(n,(function(e){return i(e,n.sourceFile,o)}));return[t.createCodeFixAction(r,s,e.Diagnostics.Add_missing_call_parentheses,r,e.Diagnostics.Add_all_missing_call_parentheses)]}},getAllCodeActions:function(e){return t.codeFixAll(e,n,(function(e,t){var r=a(t.file,t.start);r&&i(e,t.file,r)}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="fixAwaitInSyncFunction",n=[e.Diagnostics.await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules.code,e.Diagnostics.for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules.code,e.Diagnostics.Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function.code];function i(t,r){var n=e.getTokenAtPosition(t,r),i=e.getContainingFunction(n);if(i){var a,o;switch(i.kind){case 171:a=i.name;break;case 259:case 215:a=e.findChildOfKind(i,98,t);break;case 216:var s=i.typeParameters?29:20;a=e.findChildOfKind(i,s,t)||e.first(i.parameters);break;default:return}return a&&{insertBefore:a,returnType:(o=i,o.type?o.type:e.isVariableDeclaration(o.parent)&&o.parent.type&&e.isFunctionTypeNode(o.parent.type)?o.parent.type.type:void 0)}}}function a(t,r,n){var i=n.insertBefore,a=n.returnType;if(a){var o=e.getEntityNameFromTypeNode(a);o&&79===o.kind&&"Promise"===o.text||t.replaceNode(r,a,e.factory.createTypeReferenceNode("Promise",e.factory.createNodeArray([a])))}t.insertModifierBefore(r,132,i)}t.registerCodeFix({errorCodes:n,getCodeActions:function(n){var o=n.sourceFile,s=n.span,c=i(o,s.start);if(c){var u=e.textChanges.ChangeTracker.with(n,(function(e){return a(e,o,c)}));return[t.createCodeFixAction(r,u,e.Diagnostics.Add_async_modifier_to_containing_function,r,e.Diagnostics.Add_all_missing_async_modifiers)]}},fixIds:[r],getAllCodeActions:function(r){var o=new e.Map;return t.codeFixAll(r,n,(function(t,n){var s=i(n.file,n.start);s&&e.addToSeen(o,e.getNodeId(s.insertBefore))&&a(t,r.sourceFile,s)}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r=[e.Diagnostics._0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property.code,e.Diagnostics._0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor.code],n="fixPropertyOverrideAccessor";function i(r,n,i,a,o){var s,c;if(a===e.Diagnostics._0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property.code)s=n,c=n+i;else if(a===e.Diagnostics._0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor.code){var u=o.program.getTypeChecker(),l=e.getTokenAtPosition(r,n).parent;e.Debug.assert(e.isAccessor(l),"error span of fixPropertyOverrideAccessor should only be on an accessor");var _=l.parent;e.Debug.assert(e.isClassLike(_),"erroneous accessors should only be inside classes");var d=e.singleOrUndefined(t.getAllSupers(_,u));if(!d)return[];var p=e.unescapeLeadingUnderscores(e.getTextOfPropertyName(l.name)),f=u.getPropertyOfType(u.getTypeAtLocation(d),p);if(!f||!f.valueDeclaration)return[];s=f.valueDeclaration.pos,c=f.valueDeclaration.end,r=e.getSourceFileOfNode(f.valueDeclaration)}else e.Debug.fail("fixPropertyOverrideAccessor codefix got unexpected error code "+a);return t.generateAccessorFromProperty(r,o.program,s,c,o,e.Diagnostics.Generate_get_and_set_accessors.message)}t.registerCodeFix({errorCodes:r,getCodeActions:function(r){var a=i(r.sourceFile,r.span.start,r.span.length,r.errorCode,r);if(a)return[t.createCodeFixAction(n,a,e.Diagnostics.Generate_get_and_set_accessors,n,e.Diagnostics.Generate_get_and_set_accessors_for_all_overriding_properties)]},fixIds:[n],getAllCodeActions:function(e){return t.codeFixAll(e,r,(function(t,r){var n=i(r.file,r.start,r.length,r.code,e);if(n)for(var a=0,o=n;a<o.length;a++){var s=o[a];t.pushRaw(e.sourceFile,s)}}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="inferFromUsage",n=[e.Diagnostics.Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined.code,e.Diagnostics.Variable_0_implicitly_has_an_1_type.code,e.Diagnostics.Parameter_0_implicitly_has_an_1_type.code,e.Diagnostics.Rest_parameter_0_implicitly_has_an_any_type.code,e.Diagnostics.Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation.code,e.Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type.code,e.Diagnostics.Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation.code,e.Diagnostics.Member_0_implicitly_has_an_1_type.code,e.Diagnostics.Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage.code,e.Diagnostics.Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage.code,e.Diagnostics.Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage.code,e.Diagnostics.Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage.code,e.Diagnostics.Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage.code,e.Diagnostics._0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage.code,e.Diagnostics.Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage.code,e.Diagnostics.Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage.code,e.Diagnostics.this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation.code];function i(t,r){switch(t){case e.Diagnostics.Parameter_0_implicitly_has_an_1_type.code:case e.Diagnostics.Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage.code:return e.isSetAccessorDeclaration(e.getContainingFunction(r))?e.Diagnostics.Infer_type_of_0_from_usage:e.Diagnostics.Infer_parameter_types_from_usage;case e.Diagnostics.Rest_parameter_0_implicitly_has_an_any_type.code:case e.Diagnostics.Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage.code:return e.Diagnostics.Infer_parameter_types_from_usage;case e.Diagnostics.this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation.code:return e.Diagnostics.Infer_this_type_of_0_from_usage;default:return e.Diagnostics.Infer_type_of_0_from_usage}}function o(r,n,i,a,o,_,g,m,y){if(e.isParameterPropertyModifier(i.kind)||79===i.kind||25===i.kind||108===i.kind){var v=i.parent,h=t.createImportAdder(n,o,y,m);switch(a=function(t){switch(t){case e.Diagnostics.Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage.code:return e.Diagnostics.Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined.code;case e.Diagnostics.Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage.code:return e.Diagnostics.Variable_0_implicitly_has_an_1_type.code;case e.Diagnostics.Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage.code:return e.Diagnostics.Parameter_0_implicitly_has_an_1_type.code;case e.Diagnostics.Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage.code:return e.Diagnostics.Rest_parameter_0_implicitly_has_an_any_type.code;case e.Diagnostics.Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage.code:return e.Diagnostics.Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation.code;case e.Diagnostics._0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage.code:return e.Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type.code;case e.Diagnostics.Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage.code:return e.Diagnostics.Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation.code;case e.Diagnostics.Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage.code:return e.Diagnostics.Member_0_implicitly_has_an_1_type.code}return t}(a)){case e.Diagnostics.Member_0_implicitly_has_an_1_type.code:case e.Diagnostics.Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined.code:if(e.isVariableDeclaration(v)&&g(v)||e.isPropertyDeclaration(v)||e.isPropertySignature(v))return s(r,h,n,v,o,m,_),h.writeFixes(r),v;if(e.isPropertyAccessExpression(v)){var b=d(v.name,o,_),x=e.getTypeNodeIfAccessible(b,v,o,m);if(x){var D=e.factory.createJSDocTypeTag(void 0,e.factory.createJSDocTypeExpression(x),void 0);r.addJSDocTags(n,e.cast(v.parent.parent,e.isExpressionStatement),[D])}return h.writeFixes(r),v}return;case e.Diagnostics.Variable_0_implicitly_has_an_1_type.code:var S=o.getTypeChecker().getSymbolAtLocation(i);return S&&S.valueDeclaration&&e.isVariableDeclaration(S.valueDeclaration)&&g(S.valueDeclaration)?(s(r,h,e.getSourceFileOfNode(S.valueDeclaration),S.valueDeclaration,o,m,_),h.writeFixes(r),S.valueDeclaration):void 0}var T=e.getContainingFunction(i);if(void 0!==T){var C;switch(a){case e.Diagnostics.Parameter_0_implicitly_has_an_1_type.code:if(e.isSetAccessorDeclaration(T)){c(r,h,n,T,o,m,_),C=T;break}case e.Diagnostics.Rest_parameter_0_implicitly_has_an_any_type.code:if(g(T)){var E=e.cast(v,e.isParameter);!function(t,r,n,i,a,o,s,c){if(!e.isIdentifier(i.name))return;var _=function(t,r,n,i){var a=p(t,r,n,i);return a&&f(n,a,i).parameters(t)||t.parameters.map((function(t){return{declaration:t,type:e.isIdentifier(t.name)?d(t.name,n,i):n.getTypeChecker().getAnyType()}}))}(a,n,o,c);if(e.Debug.assert(a.parameters.length===_.length,"Parameter count and inference count should match"),e.isInJSFile(a))l(t,n,_,o,s);else{var g=e.isArrowFunction(a)&&!e.findChildOfKind(a,20,n);g&&t.insertNodeBefore(n,e.first(a.parameters),e.factory.createToken(20));for(var m=0,y=_;m<y.length;m++){var v=y[m],h=v.declaration,b=v.type;!h||h.type||h.initializer||u(t,r,n,h,b,o,s)}g&&t.insertNodeAfter(n,e.last(a.parameters),e.factory.createToken(21))}}(r,h,n,E,T,o,m,_),C=E}break;case e.Diagnostics.Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation.code:case e.Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type.code:e.isGetAccessorDeclaration(T)&&e.isIdentifier(T.name)&&(u(r,h,n,T,d(T.name,o,_),o,m),C=T);break;case e.Diagnostics.Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation.code:e.isSetAccessorDeclaration(T)&&(c(r,h,n,T,o,m,_),C=T);break;case e.Diagnostics.this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation.code:e.textChanges.isThisTypeAnnotatable(T)&&g(T)&&(!function(t,r,n,i,a,o){var s=p(n,r,i,o);if(!s||!s.length)return;var c=f(i,s,o).thisParameter(),u=e.getTypeNodeIfAccessible(c,n,i,a);if(!u)return;e.isInJSFile(n)?function(t,r,n,i){t.addJSDocTags(r,n,[e.factory.createJSDocThisTag(void 0,e.factory.createJSDocTypeExpression(i))])}(t,r,n,u):t.tryInsertThisTypeAnnotation(r,n,u)}(r,n,T,o,m,_),C=T);break;default:return e.Debug.fail(String(a))}return h.writeFixes(r),C}}}function s(t,r,n,i,a,o,s){e.isIdentifier(i.name)&&u(t,r,n,i,d(i.name,a,s),a,o)}function c(t,r,n,i,a,o,s){var c=e.firstOrUndefined(i.parameters);if(c&&e.isIdentifier(i.name)&&e.isIdentifier(c.name)){var _=d(i.name,a,s);_===a.getTypeChecker().getAnyType()&&(_=d(c.name,a,s)),e.isInJSFile(i)?l(t,n,[{declaration:c,type:_}],a,o):u(t,r,n,c,_,a,o)}}function u(r,n,i,a,o,s,c){var u=e.getTypeNodeIfAccessible(o,a,s,c);if(u)if(e.isInJSFile(i)&&168!==a.kind){var l=e.isVariableDeclaration(a)?e.tryCast(a.parent.parent,e.isVariableStatement):a;if(!l)return;var _=e.factory.createJSDocTypeExpression(u),d=e.isGetAccessorDeclaration(a)?e.factory.createJSDocReturnTag(void 0,_,void 0):e.factory.createJSDocTypeTag(void 0,_,void 0);r.addJSDocTags(i,l,[d])}else(function(r,n,i,a,o,s){var c=t.tryGetAutoImportableReferenceFromTypeNode(r,s);if(c&&a.tryInsertTypeAnnotation(i,n,c.typeNode))return e.forEach(c.symbols,(function(e){return o.addImportFromExportedSymbol(e,!0)})),!0;return!1})(u,a,i,r,n,e.getEmitScriptTarget(s.getCompilerOptions()))||r.tryInsertTypeAnnotation(i,a,u)}function l(t,r,n,i,a){var o=n.length&&n[0].declaration.parent;if(o){var s=e.mapDefined(n,(function(t){var r=t.declaration;if(!r.initializer&&!e.getJSDocType(r)&&e.isIdentifier(r.name)){var n=t.type&&e.getTypeNodeIfAccessible(t.type,r,i,a);if(n){var o=e.factory.cloneNode(r.name);return e.setEmitFlags(o,3584),{name:e.factory.cloneNode(r.name),param:r,isOptional:!!t.isOptional,typeNode:n}}}}));if(s.length)if(e.isArrowFunction(o)||e.isFunctionExpression(o)){var c=e.isArrowFunction(o)&&!e.findChildOfKind(o,20,r);c&&t.insertNodeBefore(r,e.first(o.parameters),e.factory.createToken(20)),e.forEach(s,(function(n){var i=n.typeNode,a=n.param,o=e.factory.createJSDocTypeTag(void 0,e.factory.createJSDocTypeExpression(i)),s=e.factory.createJSDocComment(void 0,[o]);t.insertNodeAt(r,a.getStart(r),s,{suffix:" "})})),c&&t.insertNodeAfter(r,e.last(o.parameters),e.factory.createToken(21))}else{var u=e.map(s,(function(t){var r=t.name,n=t.typeNode,i=t.isOptional;return e.factory.createJSDocParameterTag(void 0,r,!!i,e.factory.createJSDocTypeExpression(n),!1,void 0)}));t.addJSDocTags(r,o,u)}}}function _(t,r,n){return e.mapDefined(e.FindAllReferences.getReferenceEntriesForNode(-1,t,r,r.getSourceFiles(),n),(function(t){return 0!==t.kind?e.tryCast(t.node,e.isIdentifier):void 0}))}function d(e,t,r){return f(t,_(e,t,r),r).single()}function p(t,r,n,i){var a;switch(t.kind){case 173:a=e.findChildOfKind(t,135,r);break;case 216:case 215:var o=t.parent;a=(e.isVariableDeclaration(o)||e.isPropertyDeclaration(o))&&e.isIdentifier(o.name)?o.name:t.name;break;case 259:case 171:case 170:a=t.name}if(a)return _(a,n,i)}function f(t,r,n){var i=t.getTypeChecker(),o={string:function(){return i.getStringType()},number:function(){return i.getNumberType()},Array:function(e){return i.createArrayType(e)},Promise:function(e){return i.createPromiseType(e)}},s=[i.getStringType(),i.getNumberType(),i.createArrayType(i.getAnyType()),i.createPromiseType(i.getAnyType())];return{single:function(){return g(l(r))},parameters:function(o){if(0===r.length||!o.parameters)return;for(var s=c(),u=0,p=r;u<p.length;u++){var f=p[u];n.throwIfCancellationRequested(),d(f,s)}var m=a(a([],s.constructs||[],!0),s.calls||[],!0);return o.parameters.map((function(r,a){for(var s=[],c=e.isRestParameter(r),u=!1,d=0,p=m;d<p.length;d++){var f=p[d];if(f.argumentTypes.length<=a)u=e.isInJSFile(o),s.push(i.getUndefinedType());else if(c)for(var y=a;y<f.argumentTypes.length;y++)s.push(i.getBaseTypeOfLiteralType(f.argumentTypes[y]));else s.push(i.getBaseTypeOfLiteralType(f.argumentTypes[a]))}if(e.isIdentifier(r.name)){var v=l(_(r.name,t,n));s.push.apply(s,c?e.mapDefined(v,i.getElementTypeOfArrayType):v)}var h=g(s);return{type:c?i.createArrayType(h):h,isOptional:u&&!c,declaration:r}}))},thisParameter:function(){for(var t=c(),i=0,a=r;i<a.length;i++){var o=a[i];n.throwIfCancellationRequested(),d(o,t)}return g(t.candidateThisTypes||e.emptyArray)}};function c(){return{isNumber:void 0,isString:void 0,isNumberOrString:void 0,candidateTypes:void 0,properties:void 0,calls:void 0,constructs:void 0,numberIndex:void 0,stringIndex:void 0,candidateThisTypes:void 0,inferredTypes:void 0}}function u(t){for(var r=new e.Map,n=0,i=t;n<i.length;n++){var a=i[n];a.properties&&a.properties.forEach((function(e,t){r.has(t)||r.set(t,[]),r.get(t).push(e)}))}var o=new e.Map;return r.forEach((function(e,t){o.set(t,u(e))})),{isNumber:t.some((function(e){return e.isNumber})),isString:t.some((function(e){return e.isString})),isNumberOrString:t.some((function(e){return e.isNumberOrString})),candidateTypes:e.flatMap(t,(function(e){return e.candidateTypes})),properties:o,calls:e.flatMap(t,(function(e){return e.calls})),constructs:e.flatMap(t,(function(e){return e.constructs})),numberIndex:e.forEach(t,(function(e){return e.numberIndex})),stringIndex:e.forEach(t,(function(e){return e.stringIndex})),candidateThisTypes:e.flatMap(t,(function(e){return e.candidateThisTypes})),inferredTypes:void 0}}function l(e){for(var t={isNumber:void 0,isString:void 0,isNumberOrString:void 0,candidateTypes:void 0,properties:void 0,calls:void 0,constructs:void 0,numberIndex:void 0,stringIndex:void 0,candidateThisTypes:void 0,inferredTypes:void 0},r=0,i=e;r<i.length;r++){var a=i[r];n.throwIfCancellationRequested(),d(a,t)}return m(t)}function d(t,r){for(;e.isRightSideOfQualifiedNameOrPropertyAccess(t);)t=t.parent;switch(t.parent.kind){case 241:!function(t,r){b(r,e.isCallExpression(t)?i.getVoidType():i.getAnyType())}(t,r);break;case 222:r.isNumber=!0;break;case 221:!function(e,t){switch(e.operator){case 45:case 46:case 40:case 54:t.isNumber=!0;break;case 39:t.isNumberOrString=!0}}(t.parent,r);break;case 223:!function(t,r,n){switch(r.operatorToken.kind){case 42:case 41:case 43:case 44:case 47:case 48:case 49:case 50:case 51:case 52:case 65:case 67:case 66:case 68:case 69:case 73:case 74:case 78:case 70:case 72:case 71:case 40:case 29:case 32:case 31:case 33:var a=i.getTypeAtLocation(r.left===t?r.right:r.left);1056&a.flags?b(n,a):n.isNumber=!0;break;case 64:case 39:var o=i.getTypeAtLocation(r.left===t?r.right:r.left);1056&o.flags?b(n,o):296&o.flags?n.isNumber=!0:402653316&o.flags?n.isString=!0:1&o.flags||(n.isNumberOrString=!0);break;case 63:case 34:case 36:case 37:case 35:b(n,i.getTypeAtLocation(r.left===t?r.right:r.left));break;case 101:t===r.left&&(n.isString=!0);break;case 56:case 60:t!==r.left||257!==t.parent.parent.kind&&!e.isAssignmentExpression(t.parent.parent,!0)||b(n,i.getTypeAtLocation(r.right))}}(t,t.parent,r);break;case 292:case 293:!function(e,t){b(t,i.getTypeAtLocation(e.parent.parent.expression))}(t.parent,r);break;case 210:case 211:t.parent.expression===t?function(e,t){var r={argumentTypes:[],return_:{isNumber:void 0,isString:void 0,isNumberOrString:void 0,candidateTypes:void 0,properties:void 0,calls:void 0,constructs:void 0,numberIndex:void 0,stringIndex:void 0,candidateThisTypes:void 0,inferredTypes:void 0}};if(e.arguments)for(var n=0,a=e.arguments;n<a.length;n++){var o=a[n];r.argumentTypes.push(i.getTypeAtLocation(o))}d(e,r.return_),210===e.kind?(t.calls||(t.calls=[])).push(r):(t.constructs||(t.constructs=[])).push(r)}(t.parent,r):p(t,r);break;case 208:!function(t,r){var n=e.escapeLeadingUnderscores(t.name.text);r.properties||(r.properties=new e.Map);var i=r.properties.get(n)||{isNumber:void 0,isString:void 0,isNumberOrString:void 0,candidateTypes:void 0,properties:void 0,calls:void 0,constructs:void 0,numberIndex:void 0,stringIndex:void 0,candidateThisTypes:void 0,inferredTypes:void 0};d(t,i),r.properties.set(n,i)}(t.parent,r);break;case 209:!function(e,t,r){if(t===e.argumentExpression)return void(r.isNumberOrString=!0);var n=i.getTypeAtLocation(e.argumentExpression),a={isNumber:void 0,isString:void 0,isNumberOrString:void 0,candidateTypes:void 0,properties:void 0,calls:void 0,constructs:void 0,numberIndex:void 0,stringIndex:void 0,candidateThisTypes:void 0,inferredTypes:void 0};d(e,a),296&n.flags?r.numberIndex=a:r.stringIndex=a}(t.parent,t,r);break;case 299:case 300:!function(t,r){var n=e.isVariableDeclaration(t.parent.parent)?t.parent.parent:t.parent;x(r,i.getTypeAtLocation(n))}(t.parent,r);break;case 169:!function(e,t){x(t,i.getTypeAtLocation(e.parent))}(t.parent,r);break;case 257:var n=t.parent,a=n.name,o=n.initializer;if(t===a){o&&b(r,i.getTypeAtLocation(o));break}default:return p(t,r)}}function p(t,r){e.isExpressionNode(t)&&b(r,i.getContextualType(t))}function f(e){return g(m(e))}function g(t){if(!t.length)return i.getAnyType();var r=i.getUnionType([i.getStringType(),i.getNumberType()]),n=function(t,r){for(var n=[],i=0,a=t;i<a.length;i++)for(var o=a[i],s=0,c=r;s<c.length;s++){var u=c[s],l=u.high,_=u.low;l(o)&&(e.Debug.assert(!_(o),"Priority can't have both low and high"),n.push(_))}return t.filter((function(e){return n.every((function(t){return!t(e)}))}))}(t,[{high:function(e){return e===i.getStringType()||e===i.getNumberType()},low:function(e){return e===r}},{high:function(e){return!(16385&e.flags)},low:function(e){return!!(16385&e.flags)}},{high:function(t){return!(114689&t.flags||16&e.getObjectFlags(t))},low:function(t){return!!(16&e.getObjectFlags(t))}}]),a=n.filter((function(t){return 16&e.getObjectFlags(t)}));return a.length&&(n=n.filter((function(t){return!(16&e.getObjectFlags(t))}))).push(function(t){if(1===t.length)return t[0];for(var r=[],n=[],a=[],o=[],s=!1,c=!1,u=e.createMultiMap(),l=0,_=t;l<_.length;l++){for(var d=_[l],p=0,f=i.getPropertiesOfType(d);p<f.length;p++){var g=f[p];u.add(g.name,g.valueDeclaration?i.getTypeOfSymbolAtLocation(g,g.valueDeclaration):i.getAnyType())}r.push.apply(r,i.getSignaturesOfType(d,0)),n.push.apply(n,i.getSignaturesOfType(d,1));var m=i.getIndexInfoOfType(d,0);m&&(a.push(m.type),s=s||m.isReadonly);var y=i.getIndexInfoOfType(d,1);y&&(o.push(y.type),c=c||y.isReadonly)}var v=e.mapEntries(u,(function(e,r){var n=r.length<t.length?16777216:0,a=i.createSymbol(4|n,e);return a.type=i.getUnionType(r),[e,a]})),h=[];a.length&&h.push(i.createIndexInfo(i.getStringType(),i.getUnionType(a),s));o.length&&h.push(i.createIndexInfo(i.getNumberType(),i.getUnionType(o),c));return i.createAnonymousType(t[0].symbol,v,r,n,h)}(a)),i.getWidenedType(i.getUnionType(n.map(i.getBaseTypeOfLiteralType),2))}function m(t){var r,n,c,u=[];t.isNumber&&u.push(i.getNumberType()),t.isString&&u.push(i.getStringType()),t.isNumberOrString&&u.push(i.getUnionType([i.getStringType(),i.getNumberType()])),t.numberIndex&&u.push(i.createArrayType(f(t.numberIndex))),((null===(r=t.properties)||void 0===r?void 0:r.size)||(null===(n=t.constructs)||void 0===n?void 0:n.length)||t.stringIndex)&&u.push(y(t));var l=(t.candidateTypes||[]).map((function(e){return i.getBaseTypeOfLiteralType(e)})),_=(null===(c=t.calls)||void 0===c?void 0:c.length)?y(t):void 0;return _&&l?u.push(i.getUnionType(a([_],l,!0),2)):(_&&u.push(_),e.length(l)&&u.push.apply(u,l)),u.push.apply(u,function(t){if(!t.properties||!t.properties.size)return[];var r=s.filter((function(r){return function(t,r){return!!r.properties&&!e.forEachEntry(r.properties,(function(r,n){var a,o=i.getTypeOfPropertyOfType(t,n);return!o||(r.calls?!i.getSignaturesOfType(o,0).length||!i.isTypeAssignableTo(o,(a=r.calls,i.createAnonymousType(void 0,e.createSymbolTable(),[h(a)],e.emptyArray,e.emptyArray))):!i.isTypeAssignableTo(o,f(r)))}))}(r,t)}));if(0<r.length&&r.length<3)return r.map((function(r){return function(t,r){if(!(4&e.getObjectFlags(t)&&r.properties))return t;var n=t.target,a=e.singleOrUndefined(n.typeParameters);if(!a)return t;var s=[];return r.properties.forEach((function(t,r){var o=i.getTypeOfPropertyOfType(n,r);e.Debug.assert(!!o,"generic should have all the properties of its reference."),s.push.apply(s,v(o,f(t),a))})),o[t.symbol.escapedName](g(s))}(r,t)}));return[]}(t)),u}function y(t){var r=new e.Map;t.properties&&t.properties.forEach((function(e,t){var n=i.createSymbol(4,t);n.type=f(e),r.set(t,n)}));var n=t.calls?[h(t.calls)]:[],a=t.constructs?[h(t.constructs)]:[],o=t.stringIndex?[i.createIndexInfo(i.getStringType(),f(t.stringIndex),!1)]:[];return i.createAnonymousType(void 0,r,n,a,o)}function v(t,r,n){if(t===n)return[r];if(3145728&t.flags)return e.flatMap(t.types,(function(e){return v(e,r,n)}));if(4&e.getObjectFlags(t)&&4&e.getObjectFlags(r)){var a=i.getTypeArguments(t),o=i.getTypeArguments(r),s=[];if(a&&o)for(var c=0;c<a.length;c++)o[c]&&s.push.apply(s,v(a[c],o[c],n));return s}var u=i.getSignaturesOfType(t,0),l=i.getSignaturesOfType(r,0);return 1===u.length&&1===l.length?function(t,r,n){for(var a=[],o=0;o<t.parameters.length;o++){var s=t.parameters[o],c=r.parameters[o],u=t.declaration&&e.isRestParameter(t.declaration.parameters[o]);if(!c)break;var l=s.valueDeclaration?i.getTypeOfSymbolAtLocation(s,s.valueDeclaration):i.getAnyType(),_=u&&i.getElementTypeOfArrayType(l);_&&(l=_);var d=c.type||(c.valueDeclaration?i.getTypeOfSymbolAtLocation(c,c.valueDeclaration):i.getAnyType());a.push.apply(a,v(l,d,n))}var p=i.getReturnTypeOfSignature(t),f=i.getReturnTypeOfSignature(r);return a.push.apply(a,v(p,f,n)),a}(u[0],l[0],n):[]}function h(t){for(var r=[],n=Math.max.apply(Math,t.map((function(e){return e.argumentTypes.length}))),a=function(n){var a=i.createSymbol(1,e.escapeLeadingUnderscores("arg".concat(n)));a.type=g(t.map((function(e){return e.argumentTypes[n]||i.getUndefinedType()}))),t.some((function(e){return void 0===e.argumentTypes[n]}))&&(a.flags|=16777216),r.push(a)},o=0;o<n;o++)a(o);var s=f(u(t.map((function(e){return e.return_}))));return i.createSignature(void 0,void 0,void 0,r,s,void 0,n,0)}function b(e,t){!t||1&t.flags||131072&t.flags||(e.candidateTypes||(e.candidateTypes=[])).push(t)}function x(e,t){!t||1&t.flags||131072&t.flags||(e.candidateThisTypes||(e.candidateThisTypes=[])).push(t)}}t.registerCodeFix({errorCodes:n,getCodeActions:function(n){var a,s=n.sourceFile,c=n.program,u=n.span.start,l=n.errorCode,_=n.cancellationToken,d=n.host,p=n.preferences,f=e.getTokenAtPosition(s,u),g=e.textChanges.ChangeTracker.with(n,(function(t){a=o(t,s,f,l,c,_,e.returnTrue,d,p)})),m=a&&e.getNameOfDeclaration(a);return m&&0!==g.length?[t.createCodeFixAction(r,g,[i(l,f),e.getTextOfNode(m)],r,e.Diagnostics.Infer_all_types_from_usage)]:void 0},fixIds:[r],getAllCodeActions:function(r){var i=r.sourceFile,a=r.program,s=r.cancellationToken,c=r.host,u=r.preferences,l=e.nodeSeenTracker();return t.codeFixAll(r,n,(function(t,r){o(t,i,e.getTokenAtPosition(r.file,r.start),r.code,a,s,l,c,u)}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="fixReturnTypeInAsyncFunction",n=[e.Diagnostics.The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_write_Promise_0.code];function i(t,r,n){if(!e.isInJSFile(t)){var i=e.getTokenAtPosition(t,n),a=e.findAncestor(i,e.isFunctionLikeDeclaration),o=null==a?void 0:a.type;if(o){var s=r.getTypeFromTypeNode(o),c=r.getAwaitedType(s)||r.getVoidType(),u=r.typeToTypeNode(c,o,void 0);return u?{returnTypeNode:o,returnType:s,promisedTypeNode:u,promisedType:c}:void 0}}}function a(t,r,n,i){t.replaceNode(r,n,e.factory.createTypeReferenceNode("Promise",[i]))}t.registerCodeFix({errorCodes:n,fixIds:[r],getCodeActions:function(n){var o=n.sourceFile,s=n.program,c=n.span,u=s.getTypeChecker(),l=i(o,s.getTypeChecker(),c.start);if(l){var _=l.returnTypeNode,d=l.returnType,p=l.promisedTypeNode,f=l.promisedType,g=e.textChanges.ChangeTracker.with(n,(function(e){return a(e,o,_,p)}));return[t.createCodeFixAction(r,g,[e.Diagnostics.Replace_0_with_Promise_1,u.typeToString(d),u.typeToString(f)],r,e.Diagnostics.Fix_all_incorrect_return_type_of_an_async_functions)]}},getAllCodeActions:function(e){return t.codeFixAll(e,n,(function(t,r){var n=i(r.file,e.program.getTypeChecker(),r.start);n&&a(t,r.file,n.returnTypeNode,n.promisedTypeNode)}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="disableJsDiagnostics",n="disableJsDiagnostics",i=e.mapDefined(Object.keys(e.Diagnostics),(function(t){var r=e.Diagnostics[t];return r.category===e.DiagnosticCategory.Error?r.code:void 0}));function a(t,r,n,i){var a=e.getLineAndCharacterOfPosition(r,n).line;i&&!e.tryAddToSet(i,a)||t.insertCommentBeforeLine(r,a,n," @ts-ignore")}t.registerCodeFix({errorCodes:i,getCodeActions:function(i){var o=i.sourceFile,s=i.program,c=i.span,u=i.host,l=i.formatContext;if(e.isInJSFile(o)&&e.isCheckJsEnabledForFile(o,s.getCompilerOptions())){var _=o.checkJsDirective?"":e.getNewLineOrDefaultFromHost(u,l.options),d=[t.createCodeFixActionWithoutFixAll(r,[t.createFileTextChanges(o.fileName,[e.createTextChange(o.checkJsDirective?e.createTextSpanFromBounds(o.checkJsDirective.pos,o.checkJsDirective.end):e.createTextSpan(0,0),"// @ts-nocheck".concat(_))])],e.Diagnostics.Disable_checking_for_this_file)];return e.textChanges.isValidLocationToAddComment(o,c.start)&&d.unshift(t.createCodeFixAction(r,e.textChanges.ChangeTracker.with(i,(function(e){return a(e,o,c.start)})),e.Diagnostics.Ignore_this_error_message,n,e.Diagnostics.Add_ts_ignore_to_all_error_messages)),d}},fixIds:[n],getAllCodeActions:function(r){var n=new e.Set;return t.codeFixAll(r,i,(function(t,r){e.textChanges.isValidLocationToAddComment(r.file,r.start)&&a(t,r.file,r.start,n)}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){function r(t){return{trackSymbol:function(){return!1},moduleResolverHost:e.getModuleSpecifierResolverHost(t.program,t.host)}}function n(t,n,a,o,s,c,u,d,p,f){var g;void 0===p&&(p=3),void 0===f&&(f=!1);var y=t.getDeclarations(),h=null==y?void 0:y[0],b=o.program.getTypeChecker(),x=e.getEmitScriptTarget(o.program.getCompilerOptions()),D=null!==(g=null==h?void 0:h.kind)&&void 0!==g?g:168,S=e.getSynthesizedDeepClone(e.getNameOfDeclaration(h),!1),T=h?e.getEffectiveModifierFlags(h):0,C=4&T?4:16&T?16:0;h&&e.isAutoAccessorPropertyDeclaration(h)&&(C|=128);var E=C?e.factory.createNodeArray(e.factory.createModifiersFromModifierFlags(C)):void 0,k=b.getWidenedType(b.getTypeOfSymbolAtLocation(t,n)),N=!!(16777216&t.flags),A=!!(16777216&n.flags)||f,F=e.getQuotePreference(a,s);switch(D){case 168:case 169:var P=0===F?268435456:void 0,w=b.typeToTypeNode(k,n,P,r(o));if(c)(I=m(w,x))&&(w=I.typeNode,v(c,I.symbols));u(e.factory.createPropertyDeclaration(E,h?W(S):t.getName(),N&&2&p?e.factory.createToken(57):void 0,w,void 0));break;case 174:case 175:e.Debug.assertIsDefined(y);var I,O=b.typeToTypeNode(k,n,void 0,r(o)),M=e.getAllAccessorDeclarations(y,h),L=M.secondAccessor?[M.firstAccessor,M.secondAccessor]:[M.firstAccessor];if(c)(I=m(O,x))&&(O=I.typeNode,v(c,I.symbols));for(var R=0,B=L;R<B.length;R++){var j=B[R];if(e.isGetAccessorDeclaration(j))u(e.factory.createGetAccessorDeclaration(E,W(S),e.emptyArray,G(O),H(d,F,A)));else{e.Debug.assertNode(j,e.isSetAccessorDeclaration,"The counterpart to a getter should be a setter");var J=e.getSetAccessorValueParameter(j),z=J&&e.isIdentifier(J.name)?e.idText(J.name):void 0;u(e.factory.createSetAccessorDeclaration(E,W(S),l(1,[z],[G(O)],1,!1),H(d,F,A)))}}break;case 170:case 171:e.Debug.assertIsDefined(y);var U=k.isUnion()?e.flatMap(k.types,(function(e){return e.getCallSignatures()})):k.getCallSignatures();if(!e.some(U))break;if(1===y.length){e.Debug.assert(1===U.length,"One declaration implies one signature"),q(F,U[0],E,W(S),H(d,F,A));break}for(var K=0,V=U;K<V.length;K++){q(F,V[K],E,W(S))}if(!A)if(y.length>U.length)q(F,b.getSignatureFromDeclaration(y[y.length-1]),E,W(S),H(d,F));else e.Debug.assert(y.length===U.length,"Declarations and signatures should match count"),u(function(t,n,i,a,o,s,c,u,d){for(var p=a[0],f=a[0].minArgumentCount,g=!1,m=0,y=a;m<y.length;m++){var v=y[m];f=Math.min(v.minArgumentCount,f),e.signatureHasRestParameter(v)&&(g=!0),v.parameters.length>=p.parameters.length&&(!e.signatureHasRestParameter(v)||e.signatureHasRestParameter(p))&&(p=v)}var h=p.parameters.length-(e.signatureHasRestParameter(p)?1:0),b=p.parameters.map((function(e){return e.name})),x=l(h,b,void 0,f,!1);if(g){var D=e.factory.createParameterDeclaration(void 0,e.factory.createToken(25),b[h]||"rest",h>=f?e.factory.createToken(57):void 0,e.factory.createArrayTypeNode(e.factory.createKeywordTypeNode(157)),void 0);x.push(D)}return function(t,r,n,i,a,o,s,c){return e.factory.createMethodDeclaration(t,void 0,r,n?e.factory.createToken(57):void 0,i,a,o,c||_(s))}(c,o,s,void 0,x,function(t,n,i,a){if(e.length(t)){var o=n.getUnionType(e.map(t,n.getReturnTypeOfSignature));return n.typeToTypeNode(o,a,void 0,r(i))}}(a,t,n,i),u,d)}(b,o,n,U,W(S),N&&!!(1&p),E,F,d))}function q(e,t,r,a,s){var l=i(171,o,e,t,s,a,r,N&&!!(1&p),n,c);l&&u(l)}function W(t){return e.getSynthesizedDeepClone(t,!1)}function H(t,r,n){return n?void 0:e.getSynthesizedDeepClone(t,!1)||_(r)}function G(t){return e.getSynthesizedDeepClone(t,!1)}}function i(t,n,i,a,o,s,c,u,l,_){var d=n.program,p=d.getTypeChecker(),f=e.getEmitScriptTarget(d.getCompilerOptions()),g=524545|(0===i?268435456:0),y=p.signatureToSignatureDeclaration(a,t,l,g,r(n));if(y){var h=y.typeParameters,b=y.parameters,x=y.type;if(_){if(h){var D=e.sameMap(h,(function(t){var r,n=t.constraint,i=t.default;n&&((r=m(n,f))&&(n=r.typeNode,v(_,r.symbols)));i&&((r=m(i,f))&&(i=r.typeNode,v(_,r.symbols)));return e.factory.updateTypeParameterDeclaration(t,t.modifiers,t.name,n,i)}));h!==D&&(h=e.setTextRange(e.factory.createNodeArray(D,h.hasTrailingComma),h))}var S=e.sameMap(b,(function(t){var r=m(t.type,f),n=t.type;return r&&(n=r.typeNode,v(_,r.symbols)),e.factory.updateParameterDeclaration(t,t.modifiers,t.dotDotDotToken,t.name,t.questionToken,n,t.initializer)}));if(b!==S&&(b=e.setTextRange(e.factory.createNodeArray(S,b.hasTrailingComma),b)),x){var T=m(x,f);T&&(x=T.typeNode,v(_,T.symbols))}}var C=u?e.factory.createToken(57):void 0,E=y.asteriskToken;return e.isFunctionExpression(y)?e.factory.updateFunctionExpression(y,c,y.asteriskToken,e.tryCast(s,e.isIdentifier),h,b,x,null!=o?o:y.body):e.isArrowFunction(y)?e.factory.updateArrowFunction(y,c,h,b,x,y.equalsGreaterThanToken,null!=o?o:y.body):e.isMethodDeclaration(y)?e.factory.updateMethodDeclaration(y,c,E,null!=s?s:e.factory.createIdentifier(""),C,h,b,x,o):e.isFunctionDeclaration(y)?e.factory.updateFunctionDeclaration(y,c,y.asteriskToken,e.tryCast(s,e.isIdentifier),h,b,x,null!=o?o:y.body):void 0}}function a(e){return 84+e<=90?String.fromCharCode(84+e):"T".concat(e)}function o(t,r,n,i,a,o,s){var c=t.typeToTypeNode(n,i,o,s);if(c&&e.isImportTypeNode(c)){var u=m(c,a);u&&(v(r,u.symbols),c=u.typeNode)}return e.getSynthesizedDeepClone(c)}function s(e){return e.isUnionOrIntersection()?e.types.some(s):262144&e.flags}function c(t,r,n,i,c,l,_){for(var d,p=[],f=new e.Map,g=0;g<n.length;g+=1){var m=n[g];if(m.isUnionOrIntersection()&&m.types.some(s)){var y=a(g);p.push(e.factory.createTypeReferenceNode(y)),f.set(y,void 0)}else{var v=t.getBaseTypeOfLiteralType(m),h=o(t,r,v,i,c,l,_);if(h){p.push(h);var b=u(m),x=!m.isTypeParameter()||!m.constraint||524288&(d=m.constraint).flags&&16===d.objectFlags?void 0:o(t,r,m.constraint,i,c,l,_);b&&f.set(b,{argumentType:m,constraint:x})}}}return{argumentTypeNodes:p,argumentTypeParameters:e.arrayFrom(f.entries())}}function u(e){var t;if(3145728&e.flags)for(var r=0,n=e.types;r<n.length;r++){var i=u(n[r]);if(i)return i}return 262144&e.flags?null===(t=e.getSymbol())||void 0===t?void 0:t.getName():void 0}function l(t,r,n,i,a){for(var o=[],s=new e.Map,c=0;c<t;c++){var u=(null==r?void 0:r[c])||"arg".concat(c),l=s.get(u);s.set(u,(l||0)+1);var _=e.factory.createParameterDeclaration(void 0,void 0,u+(l||""),void 0!==i&&c>=i?e.factory.createToken(57):void 0,a?void 0:(null==n?void 0:n[c])||e.factory.createKeywordTypeNode(157),void 0);o.push(_)}return o}function _(t){return d(e.Diagnostics.Method_not_implemented.message,t)}function d(t,r){return e.factory.createBlock([e.factory.createThrowStatement(e.factory.createNewExpression(e.factory.createIdentifier("Error"),void 0,[e.factory.createStringLiteral(t,0===r)]))],!0)}function p(t,r,n){var i=e.getTsConfigObjectLiteralExpression(r);if(i){var a=g(i,"compilerOptions");if(void 0!==a){var o=a.initializer;if(e.isObjectLiteralExpression(o))for(var s=0,c=n;s<c.length;s++){var u=c[s],l=u[0],_=u[1],d=g(o,l);void 0===d?t.insertNodeAtObjectStart(r,o,f(l,_)):t.replaceNode(r,d.initializer,_)}}else t.insertNodeAtObjectStart(r,i,f("compilerOptions",e.factory.createObjectLiteralExpression(n.map((function(e){return f(e[0],e[1])})),!0)))}}function f(t,r){return e.factory.createPropertyAssignment(e.factory.createStringLiteral(t),r)}function g(t,r){return e.find(t.properties,(function(t){return e.isPropertyAssignment(t)&&!!t.name&&e.isStringLiteral(t.name)&&t.name.text===r}))}function m(t,r){var n,i=e.visitNode(t,(function t(i){var a;if(e.isLiteralImportTypeNode(i)&&i.qualifier){var o=e.getFirstIdentifier(i.qualifier),s=e.getNameForExportedSymbol(o.symbol,r),c=s!==o.text?y(i.qualifier,e.factory.createIdentifier(s)):i.qualifier;n=e.append(n,o.symbol);var u=null===(a=i.typeArguments)||void 0===a?void 0:a.map(t);return e.factory.createTypeReferenceNode(c,u)}return e.visitEachChild(i,t,e.nullTransformationContext)}));if(n&&i)return{typeNode:i,symbols:n}}function y(t,r){return 79===t.kind?r:e.factory.createQualifiedName(y(t.left,r),t.right)}function v(e,t){t.forEach((function(t){return e.addImportFromExportedSymbol(t,!0)}))}t.createMissingMemberNodes=function(e,t,r,i,a,o,s){for(var c=e.symbol.members,u=0,l=t;u<l.length;u++){var _=l[u];c.has(_.escapedName)||n(_,e,r,i,a,o,s,void 0)}},t.getNoopSymbolTrackerWithResolver=r,function(e){e[e.Method=1]="Method",e[e.Property=2]="Property",e[e.All=3]="All"}(t.PreserveOptionalFlags||(t.PreserveOptionalFlags={})),t.addNewNodeForMemberSymbol=n,t.createSignatureDeclarationFromSignature=i,t.createSignatureDeclarationFromCallExpression=function(t,n,i,o,s,u,p){var f=e.getQuotePreference(n.sourceFile,n.preferences),g=e.getEmitScriptTarget(n.program.getCompilerOptions()),m=r(n),y=n.program.getTypeChecker(),v=e.isInJSFile(p),h=o.typeArguments,b=o.arguments,x=o.parent,D=v?void 0:y.getContextualType(o),S=e.map(b,(function(t){return e.isIdentifier(t)?t.text:e.isPropertyAccessExpression(t)&&e.isIdentifier(t.name)?t.name.text:void 0})),T=v?[]:e.map(b,(function(e){return y.getTypeAtLocation(e)})),C=c(y,i,T,p,g,void 0,m),E=C.argumentTypeNodes,k=C.argumentTypeParameters,N=u?e.factory.createNodeArray(e.factory.createModifiersFromModifierFlags(u)):void 0,A=e.isYieldExpression(x)?e.factory.createToken(41):void 0,F=v?void 0:function(t,r,n){var i=new e.Set(r.map((function(e){return e[0]}))),o=new e.Map(r);if(n)for(var s=n.filter((function(e){return!r.some((function(r){var n;return t.getTypeAtLocation(e)===(null===(n=r[1])||void 0===n?void 0:n.argumentType)}))})),c=i.size+s.length,u=0;i.size<c;u+=1)i.add(a(u));return e.map(e.arrayFrom(i.values()),(function(t){var r;return e.factory.createTypeParameterDeclaration(void 0,t,null===(r=o.get(t))||void 0===r?void 0:r.constraint)}))}(y,k,h),P=l(b.length,S,E,void 0,v),w=v||void 0===D?void 0:y.typeToTypeNode(D,p,void 0,m);switch(t){case 171:return e.factory.createMethodDeclaration(N,A,s,void 0,F,P,w,_(f));case 170:return e.factory.createMethodSignature(N,s,void 0,F,P,void 0===w?e.factory.createKeywordTypeNode(157):w);case 259:return e.factory.createFunctionDeclaration(N,A,s,F,P,w,d(e.Diagnostics.Function_not_implemented.message,f));default:e.Debug.fail("Unexpected kind")}},t.typeToAutoImportableTypeNode=o,t.getArgumentTypesAndTypeParameters=c,t.createStubbedBody=d,t.setJsonCompilerOptionValues=p,t.setJsonCompilerOptionValue=function(e,t,r,n){p(e,t,[[r,n]])},t.createJsonPropertyAssignment=f,t.findJsonProperty=g,t.tryGetAutoImportableReferenceFromTypeNode=m,t.importSymbols=v,t.findAncestorMatchingSpan=function(t,r){for(var n=e.textSpanEnd(r),i=e.getTokenAtPosition(t,r.start);i.end<n;)i=i.parent;return i}}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){function r(t){return e.isParameterPropertyDeclaration(t,t.parent)||e.isPropertyDeclaration(t)||e.isPropertyAssignment(t)}function n(t,r){return e.isIdentifier(r)?e.factory.createIdentifier(t):e.factory.createStringLiteral(t)}function i(t,r,n){var i=r?n.name:e.factory.createThis();return e.isIdentifier(t)?e.factory.createPropertyAccessExpression(i,t):e.factory.createElementAccessExpression(i,e.factory.createStringLiteralFromNode(t))}function o(t,i,a,o,s){void 0===s&&(s=!0);var u=e.getTokenAtPosition(t,a),l=a===o&&s,_=e.findAncestor(u.parent,r);if(!_||!e.nodeOverlapsWithStartEnd(_.name,t,a,o)&&!l)return{error:e.getLocaleSpecificMessage(e.Diagnostics.Could_not_find_property_for_which_to_generate_accessor)};if(!function(t){return e.isIdentifier(t)||e.isStringLiteral(t)}(_.name))return{error:e.getLocaleSpecificMessage(e.Diagnostics.Name_is_not_valid)};if(124!=(126975&e.getEffectiveModifierFlags(_)|124))return{error:e.getLocaleSpecificMessage(e.Diagnostics.Can_only_convert_property_with_modifier)};var d=_.name.text,p=e.startsWithUnderscore(d),f=n(p?d:e.getUniqueName("_".concat(d),t),_.name),g=n(p?e.getUniqueName(d.substring(1),t):d,_.name);return{isStatic:e.hasStaticModifier(_),isReadonly:e.hasEffectiveReadonlyModifier(_),type:c(_,i),container:166===_.kind?_.parent.parent:_.parent,originalName:_.name.text,declaration:_,fieldName:f,accessorName:g,renameAccessor:p}}function s(t,r,n,i,a){e.isParameterPropertyDeclaration(i,i.parent)?t.insertMemberAtStart(r,a,n):e.isPropertyAssignment(i)?t.insertNodeAfterComma(r,i,n):t.insertNodeAfter(r,i,n)}function c(t,r){var n=e.getTypeAnnotationNode(t);if(e.isPropertyDeclaration(t)&&n&&t.questionToken){var i=r.getTypeChecker(),o=i.getTypeFromTypeNode(n);if(!i.isTypeAssignableTo(i.getUndefinedType(),o)){var s=e.isUnionTypeNode(n)?n.types:[n];return e.factory.createUnionTypeNode(a(a([],s,!0),[e.factory.createKeywordTypeNode(155)],!1))}}return n}t.generateAccessorFromProperty=function(t,r,n,a,c,u){var l=o(t,r,n,a);if(l&&!e.refactor.isRefactorErrorInfo(l)){var _,d,p=e.textChanges.ChangeTracker.fromContext(c),f=l.isStatic,g=l.isReadonly,m=l.fieldName,y=l.accessorName,v=l.originalName,h=l.type,b=l.container,x=l.declaration;if(e.suppressLeadingAndTrailingTrivia(m),e.suppressLeadingAndTrailingTrivia(y),e.suppressLeadingAndTrailingTrivia(x),e.suppressLeadingAndTrailingTrivia(b),e.isClassLike(b)){var D=e.getEffectiveModifierFlags(x);if(e.isSourceFileJS(t)){var S=e.factory.createModifiersFromModifierFlags(D);_=S,d=S}else _=e.factory.createModifiersFromModifierFlags(function(e){e&=-65,e&=-9,16&e||(e|=4);return e}(D)),d=e.factory.createModifiersFromModifierFlags(function(e){return e&=-5,e&=-17,e|=8,e}(D));e.canHaveDecorators(x)&&(d=e.concatenate(e.getDecorators(x),d))}!function(t,r,n,i,a,o){e.isPropertyDeclaration(n)?function(t,r,n,i,a,o){var s=e.factory.updatePropertyDeclaration(n,o,a,n.questionToken||n.exclamationToken,i,n.initializer);t.replaceNode(r,n,s)}(t,r,n,i,a,o):e.isPropertyAssignment(n)?function(t,r,n,i){var a=e.factory.updatePropertyAssignment(n,i,n.initializer);t.replacePropertyAssignment(r,n,a)}(t,r,n,a):t.replaceNode(r,n,e.factory.updateParameterDeclaration(n,o,n.dotDotDotToken,e.cast(a,e.isIdentifier),n.questionToken,n.type,n.initializer))}(p,t,x,h,m,d);var T=function(t,r,n,a,o,s){return e.factory.createGetAccessorDeclaration(a,r,void 0,n,e.factory.createBlock([e.factory.createReturnStatement(i(t,o,s))],!0))}(m,y,h,_,f,b);if(e.suppressLeadingAndTrailingTrivia(T),s(p,t,T,x,b),g){var C=e.getFirstConstructorWithBody(b);C&&function(t,r,n,i,a){if(!n.body)return;n.body.forEachChild((function n(o){e.isElementAccessExpression(o)&&108===o.expression.kind&&e.isStringLiteral(o.argumentExpression)&&o.argumentExpression.text===a&&e.isWriteAccess(o)&&t.replaceNode(r,o.argumentExpression,e.factory.createStringLiteral(i)),e.isPropertyAccessExpression(o)&&108===o.expression.kind&&o.name.text===a&&e.isWriteAccess(o)&&t.replaceNode(r,o.name,e.factory.createIdentifier(i)),e.isFunctionLike(o)||e.isClassLike(o)||o.forEachChild(n)}))}(p,t,C,m.text,v)}else{var E=function(t,r,n,a,o,s){return e.factory.createSetAccessorDeclaration(a,r,[e.factory.createParameterDeclaration(void 0,void 0,e.factory.createIdentifier("value"),void 0,n)],e.factory.createBlock([e.factory.createExpressionStatement(e.factory.createAssignment(i(t,o,s),e.factory.createIdentifier("value")))],!0))}(m,y,h,_,f,b);e.suppressLeadingAndTrailingTrivia(E),s(p,t,E,x,b)}return p.getChanges()}},t.getAccessorConvertiblePropertyAtPosition=o,t.getAllSupers=function(t,r){for(var n=[];t;){var i=e.getClassExtendsHeritageElement(t),a=i&&r.getSymbolAtLocation(i.expression);if(!a)break;var o=2097152&a.flags?r.getAliasedSymbol(a):a,s=o.declarations&&e.find(o.declarations,e.isClassLike);if(!s)break;n.push(s),t=s}return n}}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="invalidImportSyntax";function n(n,i,a,o){var s=e.textChanges.ChangeTracker.with(n,(function(e){return e.replaceNode(i,a,o)}));return t.createCodeFixActionWithoutFixAll(r,s,[e.Diagnostics.Replace_import_with_0,s[0].textChanges[0].newText])}function i(i,a){var o=i.program.getTypeChecker().getTypeAtLocation(a);if(!o.symbol||!o.symbol.originatingImport)return[];var s=[],c=o.symbol.originatingImport;if(e.isImportCall(c)||e.addRange(s,function(t,r){var i=e.getSourceFileOfNode(r),a=e.getNamespaceDeclarationNode(r),o=t.program.getCompilerOptions(),s=[];return s.push(n(t,i,r,e.makeImport(a.name,void 0,r.moduleSpecifier,e.getQuotePreference(i,t.preferences)))),e.getEmitModuleKind(o)===e.ModuleKind.CommonJS&&s.push(n(t,i,r,e.factory.createImportEqualsDeclaration(void 0,!1,a.name,e.factory.createExternalModuleReference(r.moduleSpecifier)))),s}(i,c)),e.isExpression(a)&&(!e.isNamedDeclaration(a.parent)||a.parent.name!==a)){var u=i.sourceFile,l=e.textChanges.ChangeTracker.with(i,(function(t){return t.replaceNode(u,a,e.factory.createPropertyAccessExpression(a,"default"),{})}));s.push(t.createCodeFixActionWithoutFixAll(r,l,e.Diagnostics.Use_synthetic_default_member))}return s}t.registerCodeFix({errorCodes:[e.Diagnostics.This_expression_is_not_callable.code,e.Diagnostics.This_expression_is_not_constructable.code],getCodeActions:function(t){var r=t.sourceFile,n=e.Diagnostics.This_expression_is_not_callable.code===t.errorCode?210:211,a=e.findAncestor(e.getTokenAtPosition(r,t.span.start),(function(e){return e.kind===n}));if(!a)return[];var o=a.expression;return i(t,o)}}),t.registerCodeFix({errorCodes:[e.Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1.code,e.Diagnostics.Type_0_does_not_satisfy_the_constraint_1.code,e.Diagnostics.Type_0_is_not_assignable_to_type_1.code,e.Diagnostics.Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated.code,e.Diagnostics.Type_predicate_0_is_not_assignable_to_1.code,e.Diagnostics.Property_0_of_type_1_is_not_assignable_to_2_index_type_3.code,e.Diagnostics._0_index_type_1_is_not_assignable_to_2_index_type_3.code,e.Diagnostics.Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2.code,e.Diagnostics.Property_0_in_type_1_is_not_assignable_to_type_2.code,e.Diagnostics.Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property.code,e.Diagnostics.The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1.code],getCodeActions:function(t){var r=t.sourceFile,n=e.findAncestor(e.getTokenAtPosition(r,t.span.start),(function(e){return e.getStart()===t.span.start&&e.getEnd()===t.span.start+t.span.length}));if(!n)return[];return i(t,n)}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="strictClassInitialization",n="addMissingPropertyDefiniteAssignmentAssertions",i="addMissingPropertyUndefinedType",a="addMissingPropertyInitializer",o=[e.Diagnostics.Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor.code];function s(t,r){var n=e.getTokenAtPosition(t,r);if(e.isIdentifier(n)&&e.isPropertyDeclaration(n.parent)){var i=e.getEffectiveTypeAnnotationNode(n.parent);if(i)return{type:i,prop:n.parent,isJs:e.isInJSFile(n.parent)}}}function c(t,r,n){e.suppressLeadingAndTrailingTrivia(n);var i=e.factory.updatePropertyDeclaration(n,n.modifiers,n.name,e.factory.createToken(53),n.type,n.initializer);t.replaceNode(r,n,i)}function u(t,r,n){var i=e.factory.createKeywordTypeNode(155),a=e.isUnionTypeNode(n.type)?n.type.types.concat(i):[n.type,i],o=e.factory.createUnionTypeNode(a);n.isJs?t.addJSDocTags(r,n.prop,[e.factory.createJSDocTypeTag(void 0,e.factory.createJSDocTypeExpression(o))]):t.replaceNode(r,n.type,o)}function l(t,r,n,i){e.suppressLeadingAndTrailingTrivia(n);var a=e.factory.updatePropertyDeclaration(n,n.modifiers,n.name,n.questionToken,n.type,i);t.replaceNode(r,n,a)}function _(e,t){return d(e,e.getTypeFromTypeNode(t.type))}function d(t,r){if(512&r.flags)return r===t.getFalseType()||r===t.getFalseType(!0)?e.factory.createFalse():e.factory.createTrue();if(r.isStringLiteral())return e.factory.createStringLiteral(r.value);if(r.isNumberLiteral())return e.factory.createNumericLiteral(r.value);if(2048&r.flags)return e.factory.createBigIntLiteral(r.value);if(r.isUnion())return e.firstDefined(r.types,(function(e){return d(t,e)}));if(r.isClass()){var n=e.getClassLikeDeclarationOfSymbol(r.symbol);if(!n||e.hasSyntacticModifier(n,256))return;var i=e.getFirstConstructorWithBody(n);if(i&&i.parameters.length)return;return e.factory.createNewExpression(e.factory.createIdentifier(r.symbol.name),void 0,void 0)}return t.isArrayLikeType(r)?e.factory.createArrayLiteralExpression():void 0}t.registerCodeFix({errorCodes:o,getCodeActions:function(o){var d=s(o.sourceFile,o.span.start);if(d){var p=[];return e.append(p,function(n,a){var o=e.textChanges.ChangeTracker.with(n,(function(e){return u(e,n.sourceFile,a)}));return t.createCodeFixAction(r,o,[e.Diagnostics.Add_undefined_type_to_property_0,a.prop.name.getText()],i,e.Diagnostics.Add_undefined_type_to_all_uninitialized_properties)}(o,d)),e.append(p,function(i,a){if(a.isJs)return;var o=e.textChanges.ChangeTracker.with(i,(function(e){return c(e,i.sourceFile,a.prop)}));return t.createCodeFixAction(r,o,[e.Diagnostics.Add_definite_assignment_assertion_to_property_0,a.prop.getText()],n,e.Diagnostics.Add_definite_assignment_assertions_to_all_uninitialized_properties)}(o,d)),e.append(p,function(n,i){if(i.isJs)return;var o=n.program.getTypeChecker(),s=_(o,i.prop);if(!s)return;var c=e.textChanges.ChangeTracker.with(n,(function(e){return l(e,n.sourceFile,i.prop,s)}));return t.createCodeFixAction(r,c,[e.Diagnostics.Add_initializer_to_property_0,i.prop.name.getText()],a,e.Diagnostics.Add_initializers_to_all_uninitialized_properties)}(o,d)),p}},fixIds:[n,i,a],getAllCodeActions:function(r){return t.codeFixAll(r,o,(function(t,o){var d=s(o.file,o.start);if(d)switch(r.fixId){case n:c(t,o.file,d.prop);break;case i:u(t,o.file,d);break;case a:var p=_(r.program.getTypeChecker(),d.prop);if(!p)return;l(t,o.file,d.prop,p);break;default:e.Debug.fail(JSON.stringify(r.fixId))}}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="requireInTs",n=[e.Diagnostics.require_call_may_be_converted_to_an_import.code];function i(t,r,n){var i=n.allowSyntheticDefaults,a=n.defaultImportName,o=n.namedImports,s=n.statement,c=n.required;t.replaceNode(r,s,a&&!i?e.factory.createImportEqualsDeclaration(void 0,!1,a,e.factory.createExternalModuleReference(c)):e.factory.createImportDeclaration(void 0,e.factory.createImportClause(!1,a,o),c,void 0))}function a(t,r,n){var i=e.getTokenAtPosition(t,n).parent;if(!e.isRequireCall(i,!0))throw e.Debug.failBadSyntaxKind(i);var a=e.cast(i.parent,e.isVariableDeclaration),o=e.tryCast(a.name,e.isIdentifier),s=e.isObjectBindingPattern(a.name)?function(t){for(var r=[],n=0,i=t.elements;n<i.length;n++){var a=i[n];if(!e.isIdentifier(a.name)||a.initializer)return;r.push(e.factory.createImportSpecifier(!1,e.tryCast(a.propertyName,e.isIdentifier),a.name))}if(r.length)return e.factory.createNamedImports(r)}(a.name):void 0;if(o||s)return{allowSyntheticDefaults:e.getAllowSyntheticDefaultImports(r.getCompilerOptions()),defaultImportName:o,namedImports:s,statement:e.cast(a.parent.parent,e.isVariableStatement),required:e.first(i.arguments)}}t.registerCodeFix({errorCodes:n,getCodeActions:function(n){var o=a(n.sourceFile,n.program,n.span.start);if(o){var s=e.textChanges.ChangeTracker.with(n,(function(e){return i(e,n.sourceFile,o)}));return[t.createCodeFixAction(r,s,e.Diagnostics.Convert_require_to_import,r,e.Diagnostics.Convert_all_require_to_import)]}},fixIds:[r],getAllCodeActions:function(e){return t.codeFixAll(e,n,(function(t,r){var n=a(r.file,e.program,r.start);n&&i(t,e.sourceFile,n)}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="useDefaultImport",n=[e.Diagnostics.Import_may_be_converted_to_a_default_import.code];function i(t,r){var n=e.getTokenAtPosition(t,r);if(e.isIdentifier(n)){var i=n.parent;if(e.isImportEqualsDeclaration(i)&&e.isExternalModuleReference(i.moduleReference))return{importNode:i,name:n,moduleSpecifier:i.moduleReference.expression};if(e.isNamespaceImport(i)){var a=i.parent.parent;return{importNode:a,name:n,moduleSpecifier:a.moduleSpecifier}}}}function a(t,r,n,i){t.replaceNode(r,n.importNode,e.makeImport(n.name,void 0,n.moduleSpecifier,e.getQuotePreference(r,i)))}t.registerCodeFix({errorCodes:n,getCodeActions:function(n){var o=n.sourceFile,s=n.span.start,c=i(o,s);if(c){var u=e.textChanges.ChangeTracker.with(n,(function(e){return a(e,o,c,n.preferences)}));return[t.createCodeFixAction(r,u,e.Diagnostics.Convert_to_default_import,r,e.Diagnostics.Convert_all_to_default_imports)]}},fixIds:[r],getAllCodeActions:function(e){return t.codeFixAll(e,n,(function(t,r){var n=i(r.file,r.start);n&&a(t,r.file,n,e.preferences)}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="useBigintLiteral",n=[e.Diagnostics.Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accurately_as_integers.code];function i(t,r,n){var i=e.tryCast(e.getTokenAtPosition(r,n.start),e.isNumericLiteral);if(i){var a=i.getText(r)+"n";t.replaceNode(r,i,e.factory.createBigIntLiteral(a))}}t.registerCodeFix({errorCodes:n,getCodeActions:function(n){var a=e.textChanges.ChangeTracker.with(n,(function(e){return i(e,n.sourceFile,n.span)}));if(a.length>0)return[t.createCodeFixAction(r,a,e.Diagnostics.Convert_to_a_bigint_numeric_literal,r,e.Diagnostics.Convert_all_to_bigint_numeric_literals)]},fixIds:[r],getAllCodeActions:function(e){return t.codeFixAll(e,n,(function(e,t){return i(e,t.file,t)}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="fixAddModuleReferTypeMissingTypeof",n=[e.Diagnostics.Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0.code];function i(t,r){var n=e.getTokenAtPosition(t,r);return e.Debug.assert(100===n.kind,"This token should be an ImportKeyword"),e.Debug.assert(202===n.parent.kind,"Token parent should be an ImportType"),n.parent}function a(t,r,n){var i=e.factory.updateImportTypeNode(n,n.argument,n.assertions,n.qualifier,n.typeArguments,!0);t.replaceNode(r,n,i)}t.registerCodeFix({errorCodes:n,getCodeActions:function(n){var o=n.sourceFile,s=n.span,c=i(o,s.start),u=e.textChanges.ChangeTracker.with(n,(function(e){return a(e,o,c)}));return[t.createCodeFixAction(r,u,e.Diagnostics.Add_missing_typeof,r,e.Diagnostics.Add_missing_typeof)]},fixIds:[r],getAllCodeActions:function(e){return t.codeFixAll(e,n,(function(t,r){return a(t,e.sourceFile,i(r.file,r.start))}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="wrapJsxInFragment",n=[e.Diagnostics.JSX_expressions_must_have_one_parent_element.code];function i(t,r){var n=e.getTokenAtPosition(t,r).parent.parent;if((e.isBinaryExpression(n)||(n=n.parent,e.isBinaryExpression(n)))&&e.nodeIsMissing(n.operatorToken))return n}function a(t,r,n){var i=function(t){var r=[],n=t;for(;;){if(e.isBinaryExpression(n)&&e.nodeIsMissing(n.operatorToken)&&27===n.operatorToken.kind){if(r.push(n.left),e.isJsxChild(n.right))return r.push(n.right),r;if(e.isBinaryExpression(n.right)){n=n.right;continue}return}return}}(n);i&&t.replaceNode(r,n,e.factory.createJsxFragment(e.factory.createJsxOpeningFragment(),i,e.factory.createJsxJsxClosingFragment()))}t.registerCodeFix({errorCodes:n,getCodeActions:function(n){var o=n.sourceFile,s=n.span,c=i(o,s.start);if(c){var u=e.textChanges.ChangeTracker.with(n,(function(e){return a(e,o,c)}));return[t.createCodeFixAction(r,u,e.Diagnostics.Wrap_in_JSX_fragment,r,e.Diagnostics.Wrap_all_unparented_JSX_in_JSX_fragment)]}},fixIds:[r],getAllCodeActions:function(e){return t.codeFixAll(e,n,(function(t,r){var n=i(e.sourceFile,r.start);n&&a(t,e.sourceFile,n)}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="fixConvertToMappedObjectType",n=[e.Diagnostics.An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_object_type_instead.code];function i(t,r){var n=e.getTokenAtPosition(t,r),i=e.tryCast(n.parent.parent,e.isIndexSignatureDeclaration);if(i){var a=e.isInterfaceDeclaration(i.parent)?i.parent:e.tryCast(i.parent.parent,e.isTypeAliasDeclaration);if(a)return{indexSignature:i,container:a}}}function o(t,r,n){var i,o,s=n.indexSignature,c=n.container,u=(e.isInterfaceDeclaration(c)?c.members:c.type.members).filter((function(t){return!e.isIndexSignatureDeclaration(t)})),l=e.first(s.parameters),_=e.factory.createTypeParameterDeclaration(void 0,e.cast(l.name,e.isIdentifier),l.type),d=e.factory.createMappedTypeNode(e.hasEffectiveReadonlyModifier(s)?e.factory.createModifier(146):void 0,_,void 0,s.questionToken,s.type,void 0),p=e.factory.createIntersectionTypeNode(a(a(a([],e.getAllSuperTypeNodes(c),!0),[d],!1),u.length?[e.factory.createTypeLiteralNode(u)]:e.emptyArray,!0));t.replaceNode(r,c,(i=c,o=p,e.factory.createTypeAliasDeclaration(i.modifiers,i.name,i.typeParameters,o)))}t.registerCodeFix({errorCodes:n,getCodeActions:function(n){var a=n.sourceFile,s=n.span,c=i(a,s.start);if(c){var u=e.textChanges.ChangeTracker.with(n,(function(e){return o(e,a,c)})),l=e.idText(c.container.name);return[t.createCodeFixAction(r,u,[e.Diagnostics.Convert_0_to_mapped_object_type,l],r,[e.Diagnostics.Convert_0_to_mapped_object_type,l])]}},fixIds:[r],getAllCodeActions:function(e){return t.codeFixAll(e,n,(function(e,t){var r=i(t.file,t.start);r&&o(e,t.file,r)}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="removeAccidentalCallParentheses",n=[e.Diagnostics.This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without.code];t.registerCodeFix({errorCodes:n,getCodeActions:function(n){var i=e.findAncestor(e.getTokenAtPosition(n.sourceFile,n.span.start),e.isCallExpression);if(i){var a=e.textChanges.ChangeTracker.with(n,(function(e){e.deleteRange(n.sourceFile,{pos:i.expression.end,end:i.end})}));return[t.createCodeFixActionWithoutFixAll(r,a,e.Diagnostics.Remove_parentheses)]}},fixIds:[r]})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="removeUnnecessaryAwait",n=[e.Diagnostics.await_has_no_effect_on_the_type_of_this_expression.code];function i(t,r,n){var i=e.tryCast(e.getTokenAtPosition(r,n.start),(function(e){return 133===e.kind})),a=i&&e.tryCast(i.parent,e.isAwaitExpression);if(a){var o=a;if(e.isParenthesizedExpression(a.parent)){var s=e.getLeftmostExpression(a.expression,!1);if(e.isIdentifier(s)){var c=e.findPrecedingToken(a.parent.pos,r);c&&103!==c.kind&&(o=a.parent)}}t.replaceNode(r,o,a.expression)}}t.registerCodeFix({errorCodes:n,getCodeActions:function(n){var a=e.textChanges.ChangeTracker.with(n,(function(e){return i(e,n.sourceFile,n.span)}));if(a.length>0)return[t.createCodeFixAction(r,a,e.Diagnostics.Remove_unnecessary_await,r,e.Diagnostics.Remove_all_unnecessary_uses_of_await)]},fixIds:[r],getAllCodeActions:function(e){return t.codeFixAll(e,n,(function(e,t){return i(e,t.file,t)}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r=[e.Diagnostics.A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both.code],n="splitTypeOnlyImport";function i(t,r){return e.findAncestor(e.getTokenAtPosition(t,r.start),e.isImportDeclaration)}function a(t,r,n){if(r){var i=e.Debug.checkDefined(r.importClause);t.replaceNode(n.sourceFile,r,e.factory.updateImportDeclaration(r,r.modifiers,e.factory.updateImportClause(i,i.isTypeOnly,i.name,void 0),r.moduleSpecifier,r.assertClause)),t.insertNodeAfter(n.sourceFile,r,e.factory.createImportDeclaration(void 0,e.factory.updateImportClause(i,i.isTypeOnly,void 0,i.namedBindings),r.moduleSpecifier,r.assertClause))}}t.registerCodeFix({errorCodes:r,fixIds:[n],getCodeActions:function(r){var o=e.textChanges.ChangeTracker.with(r,(function(e){return a(e,i(r.sourceFile,r.span),r)}));if(o.length)return[t.createCodeFixAction(n,o,e.Diagnostics.Split_into_two_separate_import_declarations,n,e.Diagnostics.Split_all_invalid_type_only_imports)]},getAllCodeActions:function(e){return t.codeFixAll(e,r,(function(t,r){a(t,i(e.sourceFile,r),e)}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="fixConvertConstToLet",n=[e.Diagnostics.Cannot_assign_to_0_because_it_is_a_constant.code];function i(t,r,n){var i,a=n.getTypeChecker().getSymbolAtLocation(e.getTokenAtPosition(t,r));if(void 0!==a){var o=e.tryCast(null===(i=null==a?void 0:a.valueDeclaration)||void 0===i?void 0:i.parent,e.isVariableDeclarationList);if(void 0!==o){var s=e.findChildOfKind(o,85,t);if(void 0!==s)return{symbol:a,token:s}}}}function a(t,r,n){t.replaceNode(r,n,e.factory.createToken(119))}t.registerCodeFix({errorCodes:n,getCodeActions:function(n){var o=n.sourceFile,s=n.span,c=n.program,u=i(o,s.start,c);if(void 0!==u){var l=e.textChanges.ChangeTracker.with(n,(function(e){return a(e,o,u.token)}));return[t.createCodeFixActionMaybeFixAll(r,l,e.Diagnostics.Convert_const_to_let,r,e.Diagnostics.Convert_all_const_to_let)]}},getAllCodeActions:function(r){var o=r.program,s=new e.Map;return t.createCombinedCodeActions(e.textChanges.ChangeTracker.with(r,(function(c){t.eachDiagnostic(r,n,(function(t){var r=i(t.file,t.start,o);if(r&&e.addToSeen(s,e.getSymbolId(r.symbol)))return a(c,t.file,r.token)}))})))},fixIds:[r]})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="fixExpectedComma",n=[e.Diagnostics._0_expected.code];function i(t,r,n){var i=e.getTokenAtPosition(t,r);return 26===i.kind&&i.parent&&(e.isObjectLiteralExpression(i.parent)||e.isArrayLiteralExpression(i.parent))?{node:i}:void 0}function a(t,r,n){var i=n.node,a=e.factory.createToken(27);t.replaceNode(r,i,a)}t.registerCodeFix({errorCodes:n,getCodeActions:function(n){var o=n.sourceFile,s=i(o,n.span.start,n.errorCode);if(s){var c=e.textChanges.ChangeTracker.with(n,(function(e){return a(e,o,s)}));return[t.createCodeFixAction(r,c,[e.Diagnostics.Change_0_to_1,";",","],r,[e.Diagnostics.Change_0_to_1,";",","])]}},fixIds:[r],getAllCodeActions:function(e){return t.codeFixAll(e,n,(function(t,r){var n=i(r.file,r.start,r.code);n&&a(t,e.sourceFile,n)}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="addVoidToPromise",n=[e.Diagnostics.Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_without_arguments.code,e.Diagnostics.Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise.code];function i(t,r,n,i,a){var o=e.getTokenAtPosition(r,n.start);if(e.isIdentifier(o)&&e.isCallExpression(o.parent)&&o.parent.expression===o&&0===o.parent.arguments.length){var s=i.getTypeChecker(),c=s.getSymbolAtLocation(o),u=null==c?void 0:c.valueDeclaration;if(u&&e.isParameter(u)&&e.isNewExpression(u.parent.parent)&&!(null==a?void 0:a.has(u))){null==a||a.add(u);var l=function(t){var r;if(!e.isInJSFile(t))return t.typeArguments;if(e.isParenthesizedExpression(t.parent)){var n=null===(r=e.getJSDocTypeTag(t.parent))||void 0===r?void 0:r.typeExpression.type;if(n&&e.isTypeReferenceNode(n)&&e.isIdentifier(n.typeName)&&"Promise"===e.idText(n.typeName))return n.typeArguments}}(u.parent.parent);if(e.some(l)){var _=l[0],d=!e.isUnionTypeNode(_)&&!e.isParenthesizedTypeNode(_)&&e.isParenthesizedTypeNode(e.factory.createUnionTypeNode([_,e.factory.createKeywordTypeNode(114)]).types[0]);d&&t.insertText(r,_.pos,"("),t.insertText(r,_.end,d?") | void":" | void")}else{var p=s.getResolvedSignature(o.parent),f=null==p?void 0:p.parameters[0],g=f&&s.getTypeOfSymbolAtLocation(f,u.parent.parent);e.isInJSFile(u)?(!g||3&g.flags)&&(t.insertText(r,u.parent.parent.end,")"),t.insertText(r,e.skipTrivia(r.text,u.parent.parent.pos),"/** @type {Promise<void>} */(")):(!g||2&g.flags)&&t.insertText(r,u.parent.parent.expression.end,"<void>")}}}}t.registerCodeFix({errorCodes:n,fixIds:[r],getCodeActions:function(n){var a=e.textChanges.ChangeTracker.with(n,(function(e){return i(e,n.sourceFile,n.span,n.program)}));if(a.length>0)return[t.createCodeFixAction("addVoidToPromise",a,e.Diagnostics.Add_void_to_Promise_resolved_without_a_value,r,e.Diagnostics.Add_void_to_all_Promises_resolved_without_a_value)]},getAllCodeActions:function(r){return t.codeFixAll(r,n,(function(t,n){return i(t,n.file,n,r.program,new e.Set)}))}})}(e.codefix||(e.codefix={}))}(_||(_={})),function(e){!function(t){var r="Convert export",n={name:"Convert default export to named export",description:e.Diagnostics.Convert_default_export_to_named_export.message,kind:"refactor.rewrite.export.named"},i={name:"Convert named export to default export",description:e.Diagnostics.Convert_named_export_to_default_export.message,kind:"refactor.rewrite.export.default"};function a(t,r){void 0===r&&(r=!0);var n=t.file,i=t.program,a=e.getRefactorContextSpan(t),o=e.getTokenAtPosition(n,a.start),s=o.parent&&1&e.getSyntacticModifierFlags(o.parent)&&r?o.parent:e.getParentNodeInSpan(o,n,a);if(!(s&&(e.isSourceFile(s.parent)||e.isModuleBlock(s.parent)&&e.isAmbientModule(s.parent.parent))))return{error:e.getLocaleSpecificMessage(e.Diagnostics.Could_not_find_export_statement)};var c=i.getTypeChecker(),u=function(t,r){var n=t.parent;if(e.isSourceFile(n))return n.symbol;var i=n.parent.symbol;if(i.valueDeclaration&&e.isExternalModuleAugmentation(i.valueDeclaration))return r.getMergedSymbol(i);return i}(s,c),l=e.getSyntacticModifierFlags(s)||(e.isExportAssignment(s)&&!s.isExportEquals?1025:0),_=!!(1024&l);if(!(1&l)||!_&&u.exports.has("default"))return{error:e.getLocaleSpecificMessage(e.Diagnostics.This_file_already_has_a_default_export)};var d=function(t){return e.isIdentifier(t)&&c.getSymbolAtLocation(t)?void 0:{error:e.getLocaleSpecificMessage(e.Diagnostics.Can_only_convert_named_export)}};switch(s.kind){case 259:case 260:case 261:case 263:case 262:case 264:if(!(g=s).name)return;return d(g.name)||{exportNode:g,exportName:g.name,wasDefault:_,exportingModuleSymbol:u};case 240:var p=s;if(!(2&p.declarationList.flags)||1!==p.declarationList.declarations.length)return;var f=e.first(p.declarationList.declarations);if(!f.initializer)return;return e.Debug.assert(!_,"Can't have a default flag here"),d(f.name)||{exportNode:p,exportName:f.name,wasDefault:_,exportingModuleSymbol:u};case 274:var g;if((g=s).isExportEquals)return;return d(g.expression)||{exportNode:g,exportName:g.expression,wasDefault:_,exportingModuleSymbol:u};default:return}}function s(t,r){return e.factory.createImportSpecifier(!1,t===r?void 0:e.factory.createIdentifier(t),e.factory.createIdentifier(r))}function c(t,r){return e.factory.createExportSpecifier(!1,t===r?void 0:e.factory.createIdentifier(t),e.factory.createIdentifier(r))}t.registerRefactor(r,{kinds:[n.kind,i.kind],getAvailableActions:function(s){var c=a(s,"invoked"===s.triggerReason);if(!c)return e.emptyArray;if(!t.isRefactorErrorInfo(c)){var u=c.wasDefault?n:i;return[{name:r,description:u.description,actions:[u]}]}return s.preferences.provideRefactorNotApplicableReason?[{name:r,description:e.Diagnostics.Convert_default_export_to_named_export.message,actions:[o(o({},n),{notApplicableReason:c.error}),o(o({},i),{notApplicableReason:c.error})]}]:e.emptyArray},getEditsForAction:function(r,o){e.Debug.assert(o===n.name||o===i.name,"Unexpected action name");var u=a(r);e.Debug.assert(u&&!t.isRefactorErrorInfo(u),"Expected applicable refactor info");var l=e.textChanges.ChangeTracker.with(r,(function(t){return function(t,r,n,i,a){(function(t,r,n,i){var a=r.wasDefault,o=r.exportNode,s=r.exportName;if(a)if(e.isExportAssignment(o)&&!o.isExportEquals){var u=o.expression,l=c(u.text,u.text);n.replaceNode(t,o,e.factory.createExportDeclaration(void 0,!1,e.factory.createNamedExports([l])))}else n.delete(t,e.Debug.checkDefined(e.findModifier(o,88),"Should find a default keyword in modifier list"));else{var _=e.Debug.checkDefined(e.findModifier(o,93),"Should find an export keyword in modifier list");switch(o.kind){case 259:case 260:case 261:n.insertNodeAfter(t,_,e.factory.createToken(88));break;case 240:var d=e.first(o.declarationList.declarations);if(!e.FindAllReferences.Core.isSymbolReferencedInFile(s,i,t)&&!d.type){n.replaceNode(t,o,e.factory.createExportDefault(e.Debug.checkDefined(d.initializer,"Initializer was previously known to be present")));break}case 263:case 262:case 264:n.deleteModifier(t,_),n.insertNodeAfter(t,o,e.factory.createExportDefault(e.factory.createIdentifier(s.text)));break;default:e.Debug.fail("Unexpected exportNode kind ".concat(o.kind))}}})(t,n,i,r.getTypeChecker()),function(t,r,n,i){var a=r.wasDefault,o=r.exportName,u=r.exportingModuleSymbol,l=t.getTypeChecker(),_=e.Debug.checkDefined(l.getSymbolAtLocation(o),"Export name should resolve to a symbol");e.FindAllReferences.Core.eachExportReference(t.getSourceFiles(),l,i,_,u,o.text,a,(function(t){if(o!==t){var r=t.getSourceFile();a?function(t,r,n,i){var a=r.parent;switch(a.kind){case 208:n.replaceNode(t,r,e.factory.createIdentifier(i));break;case 273:case 278:var o=a;n.replaceNode(t,o,s(i,o.name.text));break;case 270:var c=a;e.Debug.assert(c.name===r,"Import clause name should match provided ref");o=s(i,r.text);var u=c.namedBindings;if(u)if(271===u.kind){n.deleteRange(t,{pos:r.getStart(t),end:u.getStart(t)});var l=e.isStringLiteral(c.parent.moduleSpecifier)?e.quotePreferenceFromString(c.parent.moduleSpecifier,t):1,_=e.makeImport(void 0,[s(i,r.text)],c.parent.moduleSpecifier,l);n.insertNodeAfter(t,c.parent,_)}else n.delete(t,r),n.insertNodeAtEndOfList(t,u.elements,o);else n.replaceNode(t,r,e.factory.createNamedImports([o]));break;case 202:var d=a;n.replaceNode(t,a,e.factory.createImportTypeNode(d.argument,d.assertions,e.factory.createIdentifier(i),d.typeArguments,d.isTypeOf));break;default:e.Debug.failBadSyntaxKind(a)}}(r,t,n,o.text):function(t,r,n){var i=r.parent;switch(i.kind){case 208:n.replaceNode(t,r,e.factory.createIdentifier("default"));break;case 273:var a=e.factory.createIdentifier(i.name.text);1===i.parent.elements.length?n.replaceNode(t,i.parent,a):(n.delete(t,i),n.insertNodeBefore(t,i.parent,a));break;case 278:n.replaceNode(t,i,c("default",i.name.text));break;default:e.Debug.assertNever(i,"Unexpected parent kind ".concat(i.kind))}}(r,t,n)}}))}(r,n,i,a)}(r.file,r.program,u,t,r.cancellationToken)}));return{edits:l,renameFilename:void 0,renameLocation:void 0}}})}(e.refactor||(e.refactor={}))}(_||(_={})),function(e){!function(t){var r,n="Convert import",i=((r={})[0]={name:"Convert namespace import to named imports",description:e.Diagnostics.Convert_namespace_import_to_named_imports.message,kind:"refactor.rewrite.import.named"},r[2]={name:"Convert named imports to namespace import",description:e.Diagnostics.Convert_named_imports_to_namespace_import.message,kind:"refactor.rewrite.import.namespace"},r[1]={name:"Convert named imports to default import",description:e.Diagnostics.Convert_named_imports_to_default_import.message,kind:"refactor.rewrite.import.default"},r);function a(t,r){void 0===r&&(r=!0);var n=t.file,i=e.getRefactorContextSpan(t),a=e.getTokenAtPosition(n,i.start),o=r?e.findAncestor(a,e.isImportDeclaration):e.getParentNodeInSpan(a,n,i);if(!o||!e.isImportDeclaration(o))return{error:"Selection is not an import declaration."};var c=i.start+i.length,u=e.findNextToken(o,o.parent,n);if(!(u&&c>u.getStart())){var l=o.importClause;return l?l.namedBindings?271===l.namedBindings.kind?{convertTo:0,import:l.namedBindings}:s(t.program,l)?{convertTo:1,import:l.namedBindings}:{convertTo:2,import:l.namedBindings}:{error:e.getLocaleSpecificMessage(e.Diagnostics.Could_not_find_namespace_import_or_named_imports)}:{error:e.getLocaleSpecificMessage(e.Diagnostics.Could_not_find_import_clause)}}}function s(t,r){return e.getAllowSyntheticDefaultImports(t.getCompilerOptions())&&function(e,t){var r=t.resolveExternalModuleName(e);if(!r)return!1;var n=t.resolveExternalModuleSymbol(r);return r!==n}(r.parent.moduleSpecifier,t.getTypeChecker())}function c(t){return e.isPropertyAccessExpression(t)?t.name:t.right}function u(t,r,n,i,a){void 0===a&&(a=s(r,i.parent));var o=r.getTypeChecker(),c=i.parent.parent,u=c.moduleSpecifier,_=new e.Set;i.elements.forEach((function(e){var t=o.getSymbolAtLocation(e.name);t&&_.add(t)}));var d=u&&e.isStringLiteral(u)?e.codefix.moduleSpecifierToValidIdentifier(u.text,99):"module";for(var p=i.elements.some((function(r){return!!e.FindAllReferences.Core.eachSymbolReferenceInFile(r.name,o,t,(function(t){var r=o.resolveName(d,t,67108863,!0);return!!r&&(!_.has(r)||e.isExportSpecifier(t.parent))}))}))?e.getUniqueName(d,t):d,f=new e.Set,g=function(r){var i=(r.propertyName||r.name).text;e.FindAllReferences.Core.eachSymbolReferenceInFile(r.name,o,t,(function(a){var o=e.factory.createPropertyAccessExpression(e.factory.createIdentifier(p),i);e.isShorthandPropertyAssignment(a.parent)?n.replaceNode(t,a.parent,e.factory.createPropertyAssignment(a.text,o)):e.isExportSpecifier(a.parent)?f.add(r):n.replaceNode(t,a,o)}))},m=0,y=i.elements;m<y.length;m++){g(y[m])}if(n.replaceNode(t,i,a?e.factory.createIdentifier(p):e.factory.createNamespaceImport(e.factory.createIdentifier(p))),f.size){var v=e.arrayFrom(f.values()).map((function(t){return e.factory.createImportSpecifier(t.isTypeOnly,t.propertyName&&e.factory.createIdentifier(t.propertyName.text),e.factory.createIdentifier(t.name.text))}));n.insertNodeAfter(t,i.parent.parent,l(c,void 0,v))}}function l(t,r,n){return e.factory.createImportDeclaration(void 0,e.factory.createImportClause(!1,r,n&&n.length?e.factory.createNamedImports(n):void 0),t.moduleSpecifier,void 0)}t.registerRefactor(n,{kinds:e.getOwnValues(i).map((function(e){return e.kind})),getAvailableActions:function(r){var s=a(r,"invoked"===r.triggerReason);if(!s)return e.emptyArray;if(!t.isRefactorErrorInfo(s)){var c=i[s.convertTo];return[{name:n,description:c.description,actions:[c]}]}return r.preferences.provideRefactorNotApplicableReason?e.getOwnValues(i).map((function(e){return{name:n,description:e.description,actions:[o(o({},e),{notApplicableReason:s.error})]}})):e.emptyArray},getEditsForAction:function(r,n){e.Debug.assert(e.some(e.getOwnValues(i),(function(e){return e.name===n})),"Unexpected action name");var o=a(r);e.Debug.assert(o&&!t.isRefactorErrorInfo(o),"Expected applicable refactor info");var s=e.textChanges.ChangeTracker.with(r,(function(t){return function(t,r,n,i){var a=r.getTypeChecker();0===i.convertTo?function(t,r,n,i,a){var o=!1,s=[],u=new e.Map;e.FindAllReferences.Core.eachSymbolReferenceInFile(i.name,r,t,(function(t){if(e.isPropertyAccessOrQualifiedName(t.parent)){var n=c(t.parent).text;r.resolveName(n,t,67108863,!0)&&u.set(n,!0),e.Debug.assert(function(t){return e.isPropertyAccessExpression(t)?t.expression:t.left}(t.parent)===t,"Parent expression should match id"),s.push(t.parent)}else o=!0}));for(var _=new e.Map,d=0,p=s;d<p.length;d++){var f=p[d],g=c(f).text,m=_.get(g);void 0===m&&_.set(g,m=u.has(g)?e.getUniqueName(g,t):g),n.replaceNode(t,f,e.factory.createIdentifier(m))}var y=[];_.forEach((function(t,r){y.push(e.factory.createImportSpecifier(!1,t===r?void 0:e.factory.createIdentifier(r),e.factory.createIdentifier(t)))}));var v=i.parent.parent;o&&!a?n.insertNodeAfter(t,v,l(v,void 0,y)):n.replaceNode(t,v,l(v,o?e.factory.createIdentifier(i.name.text):void 0,y))}(t,a,n,i.import,e.getAllowSyntheticDefaultImports(r.getCompilerOptions())):u(t,r,n,i.import,1===i.convertTo)}(r.file,r.program,t,o)}));return{edits:s,renameFilename:void 0,renameLocation:void 0}}}),t.doChangeNamedToNamespaceOrDefault=u}(e.refactor||(e.refactor={}))}(_||(_={})),function(e){!function(t){!function(r){var n="Convert to optional chain expression",i=e.getLocaleSpecificMessage(e.Diagnostics.Convert_to_optional_chain_expression),a={name:n,description:i,kind:"refactor.rewrite.expression.optionalChain"};function s(t){return e.isBinaryExpression(t)||e.isConditionalExpression(t)}function c(t){return s(t)||function(t){return e.isExpressionStatement(t)||e.isReturnStatement(t)||e.isVariableStatement(t)}(t)}function u(t,r){void 0===r&&(r=!0);var n=t.file,i=t.program,a=e.getRefactorContextSpan(t),o=0===a.length;if(!o||r){var u=e.getTokenAtPosition(n,a.start),d=e.findTokenOnLeftOfPosition(n,a.start+a.length),f=e.createTextSpanFromBounds(u.pos,d&&d.end>=u.pos?d.getEnd():u.getEnd()),g=o?function(e){for(;e.parent;){if(c(e)&&!c(e.parent))return e;e=e.parent}return}(u):function(e,t){for(;e.parent;){if(c(e)&&0!==t.length&&e.end>=t.start+t.length)return e;e=e.parent}return}(u,f),m=g&&c(g)?function(t){if(s(t))return t;if(e.isVariableStatement(t)){var r=e.getSingleVariableOfVariableStatement(t),n=null==r?void 0:r.initializer;return n&&s(n)?n:void 0}return t.expression&&s(t.expression)?t.expression:void 0}(g):void 0;if(!m)return{error:e.getLocaleSpecificMessage(e.Diagnostics.Could_not_find_convertible_access_expression)};var y=i.getTypeChecker();return e.isConditionalExpression(m)?function(t,r){var n=t.condition,i=p(t.whenTrue);if(!i||r.isNullableType(r.getTypeAtLocation(i)))return{error:e.getLocaleSpecificMessage(e.Diagnostics.Could_not_find_convertible_access_expression)};if((e.isPropertyAccessExpression(n)||e.isIdentifier(n))&&_(n,i.expression))return{finalExpression:i,occurrences:[n],expression:t};if(e.isBinaryExpression(n)){var a=l(i.expression,n);return a?{finalExpression:i,occurrences:a,expression:t}:{error:e.getLocaleSpecificMessage(e.Diagnostics.Could_not_find_matching_access_expressions)}}}(m,y):function(t){if(55!==t.operatorToken.kind)return{error:e.getLocaleSpecificMessage(e.Diagnostics.Can_only_convert_logical_AND_access_chains)};var r=p(t.right);if(!r)return{error:e.getLocaleSpecificMessage(e.Diagnostics.Could_not_find_convertible_access_expression)};var n=l(r.expression,t.left);return n?{finalExpression:r,occurrences:n,expression:t}:{error:e.getLocaleSpecificMessage(e.Diagnostics.Could_not_find_matching_access_expressions)}}(m)}}function l(t,r){for(var n=[];e.isBinaryExpression(r)&&55===r.operatorToken.kind;){var i=_(e.skipParentheses(t),e.skipParentheses(r.right));if(!i)break;n.push(i),t=i,r=r.left}var a=_(t,r);return a&&n.push(a),n.length>0?n:void 0}function _(t,r){if(e.isIdentifier(r)||e.isPropertyAccessExpression(r)||e.isElementAccessExpression(r))return function(t,r){for(;(e.isCallExpression(t)||e.isPropertyAccessExpression(t)||e.isElementAccessExpression(t))&&d(t)!==d(r);)t=t.expression;for(;e.isPropertyAccessExpression(t)&&e.isPropertyAccessExpression(r)||e.isElementAccessExpression(t)&&e.isElementAccessExpression(r);){if(d(t)!==d(r))return!1;t=t.expression,r=r.expression}return e.isIdentifier(t)&&e.isIdentifier(r)&&t.getText()===r.getText()}(t,r)?r:void 0}function d(t){return e.isIdentifier(t)||e.isStringOrNumericLiteralLike(t)?t.getText():e.isPropertyAccessExpression(t)?d(t.name):e.isElementAccessExpression(t)?d(t.argumentExpression):void 0}function p(t){return t=e.skipParentheses(t),e.isBinaryExpression(t)?p(t.left):(e.isPropertyAccessExpression(t)||e.isElementAccessExpression(t)||e.isCallExpression(t))&&!e.isOptionalChain(t)?t:void 0}function f(t,r,n){if(e.isPropertyAccessExpression(r)||e.isElementAccessExpression(r)||e.isCallExpression(r)){var i=f(t,r.expression,n),a=n.length>0?n[n.length-1]:void 0,o=(null==a?void 0:a.getText())===r.expression.getText();if(o&&n.pop(),e.isCallExpression(r))return o?e.factory.createCallChain(i,e.factory.createToken(28),r.typeArguments,r.arguments):e.factory.createCallChain(i,r.questionDotToken,r.typeArguments,r.arguments);if(e.isPropertyAccessExpression(r))return o?e.factory.createPropertyAccessChain(i,e.factory.createToken(28),r.name):e.factory.createPropertyAccessChain(i,r.questionDotToken,r.name);if(e.isElementAccessExpression(r))return o?e.factory.createElementAccessChain(i,e.factory.createToken(28),r.argumentExpression):e.factory.createElementAccessChain(i,r.questionDotToken,r.argumentExpression)}return r}t.registerRefactor(n,{kinds:[a.kind],getEditsForAction:function(r,n){var i=u(r);return e.Debug.assert(i&&!t.isRefactorErrorInfo(i),"Expected applicable refactor info"),{edits:e.textChanges.ChangeTracker.with(r,(function(t){return function(t,r,n,i,a){var o=i.finalExpression,s=i.occurrences,c=i.expression,u=s[s.length-1],l=f(r,o,s);l&&(e.isPropertyAccessExpression(l)||e.isElementAccessExpression(l)||e.isCallExpression(l))&&(e.isBinaryExpression(c)?n.replaceNodeRange(t,u,o,l):e.isConditionalExpression(c)&&n.replaceNode(t,c,e.factory.createBinaryExpression(l,e.factory.createToken(60),c.whenFalse)))}(r.file,r.program.getTypeChecker(),t,i)})),renameFilename:void 0,renameLocation:void 0}},getAvailableActions:function(r){var s=u(r,"invoked"===r.triggerReason);if(!s)return e.emptyArray;if(!t.isRefactorErrorInfo(s))return[{name:n,description:i,actions:[a]}];if(r.preferences.provideRefactorNotApplicableReason)return[{name:n,description:i,actions:[o(o({},a),{notApplicableReason:s.error})]}];return e.emptyArray}})}(t.convertToOptionalChainExpression||(t.convertToOptionalChainExpression={}))}(e.refactor||(e.refactor={}))}(_||(_={})),function(e){!function(t){!function(r){var n="Convert overload list to single signature",i=e.Diagnostics.Convert_overload_list_to_single_signature.message,a={name:n,description:i,kind:"refactor.rewrite.function.overloadList"};function o(e){switch(e.kind){case 170:case 171:case 176:case 173:case 177:case 259:return!0}return!1}function s(t,r,n){var i=e.getTokenAtPosition(t,r),a=e.findAncestor(i,o);if(a&&!(e.isFunctionLikeDeclaration(a)&&a.body&&e.rangeContainsPosition(a.body,r))){var s=n.getTypeChecker(),c=a.symbol;if(c){var u=c.declarations;if(!(e.length(u)<=1)&&e.every(u,(function(r){return e.getSourceFileOfNode(r)===t}))&&o(u[0])){var l=u[0].kind;if(e.every(u,(function(e){return e.kind===l}))){var _=u;if(!e.some(_,(function(t){return!!t.typeParameters||e.some(t.parameters,(function(t){return!!t.modifiers||!e.isIdentifier(t.name)}))}))){var d=e.mapDefined(_,(function(e){return s.getSignatureFromDeclaration(e)}));if(e.length(d)===e.length(u)){var p=s.getReturnTypeOfSignature(d[0]);if(e.every(d,(function(e){return s.getReturnTypeOfSignature(e)===p})))return _}}}}}}}t.registerRefactor(n,{kinds:[a.kind],getEditsForAction:function(t){var r=t.file,n=t.startPosition,i=t.program,a=s(r,n,i);if(!a)return;var o=i.getTypeChecker(),c=a[a.length-1],u=c;switch(c.kind){case 170:u=e.factory.updateMethodSignature(c,c.modifiers,c.name,c.questionToken,c.typeParameters,_(a),c.type);break;case 171:u=e.factory.updateMethodDeclaration(c,c.modifiers,c.asteriskToken,c.name,c.questionToken,c.typeParameters,_(a),c.type,c.body);break;case 176:u=e.factory.updateCallSignature(c,c.typeParameters,_(a),c.type);break;case 173:u=e.factory.updateConstructorDeclaration(c,c.modifiers,_(a),c.body);break;case 177:u=e.factory.updateConstructSignature(c,c.typeParameters,_(a),c.type);break;case 259:u=e.factory.updateFunctionDeclaration(c,c.modifiers,c.asteriskToken,c.name,c.typeParameters,_(a),c.type,c.body);break;default:return e.Debug.failBadSyntaxKind(c,"Unhandled signature kind in overload list conversion refactoring")}if(u===c)return;var l=e.textChanges.ChangeTracker.with(t,(function(e){e.replaceNodeRange(r,a[0],a[a.length-1],u)}));return{renameFilename:void 0,renameLocation:void 0,edits:l};function _(t){var r=t[t.length-1];return e.isFunctionLikeDeclaration(r)&&r.body&&(t=t.slice(0,t.length-1)),e.factory.createNodeArray([e.factory.createParameterDeclaration(void 0,e.factory.createToken(25),"args",void 0,e.factory.createUnionTypeNode(e.map(t,d)))])}function d(t){var r=e.map(t.parameters,p);return e.setEmitFlags(e.factory.createTupleTypeNode(r),e.some(r,(function(t){return!!e.length(e.getSyntheticLeadingComments(t))}))?0:1)}function p(t){e.Debug.assert(e.isIdentifier(t.name));var r=e.setTextRange(e.factory.createNamedTupleMember(t.dotDotDotToken,t.name,t.questionToken,t.type||e.factory.createKeywordTypeNode(131)),t),n=t.symbol&&t.symbol.getDocumentationComment(o);if(n){var i=e.displayPartsToString(n);i.length&&e.setSyntheticLeadingComments(r,[{text:"*\n".concat(i.split("\n").map((function(e){return" * ".concat(e)})).join("\n"),"\n "),kind:3,pos:-1,end:-1,hasTrailingNewLine:!0,hasLeadingNewline:!0}])}return r}},getAvailableActions:function(t){var r=t.file,o=t.startPosition,c=t.program;return s(r,o,c)?[{name:n,description:i,actions:[a]}]:e.emptyArray}})}(t.addOrRemoveBracesToArrowFunction||(t.addOrRemoveBracesToArrowFunction={}))}(e.refactor||(e.refactor={}))}(_||(_={})),function(e){!function(t){!function(r){var n,i,a,s,c="Extract Symbol",u={name:"Extract Constant",description:e.getLocaleSpecificMessage(e.Diagnostics.Extract_constant),kind:"refactor.extract.constant"},l={name:"Extract Function",description:e.getLocaleSpecificMessage(e.Diagnostics.Extract_function),kind:"refactor.extract.function"};function _(r){var n=r.kind,i=p(r.file,e.getRefactorContextSpan(r),"invoked"===r.triggerReason),a=i.targetRange;if(void 0===a){if(!i.errors||0===i.errors.length||!r.preferences.provideRefactorNotApplicableReason)return e.emptyArray;var s=[];return t.refactorKindBeginsWith(l.kind,n)&&s.push({name:c,description:l.description,actions:[o(o({},l),{notApplicableReason:N(i.errors)})]}),t.refactorKindBeginsWith(u.kind,n)&&s.push({name:c,description:u.description,actions:[o(o({},u),{notApplicableReason:N(i.errors)})]}),s}var _=function(t,r){var n=m(t,r),i=n.scopes,a=n.readsAndWrites,o=a.functionErrorsPerScope,s=a.constantErrorsPerScope,c=i.map((function(t,r){var n,i,a=function(t){return e.isFunctionLikeDeclaration(t)?"inner function":e.isClassLike(t)?"method":"function"}(t),c=function(t){return e.isClassLike(t)?"readonly field":"constant"}(t),u=e.isFunctionLikeDeclaration(t)?function(t){switch(t.kind){case 173:return"constructor";case 215:case 259:return t.name?"function '".concat(t.name.text,"'"):e.ANONYMOUS;case 216:return"arrow function";case 171:return"method '".concat(t.name.getText(),"'");case 174:return"'get ".concat(t.name.getText(),"'");case 175:return"'set ".concat(t.name.getText(),"'");default:throw e.Debug.assertNever(t,"Unexpected scope kind ".concat(t.kind))}}(t):e.isClassLike(t)?function(e){return 260===e.kind?e.name?"class '".concat(e.name.text,"'"):"anonymous class declaration":e.name?"class expression '".concat(e.name.text,"'"):"anonymous class expression"}(t):function(e){return 265===e.kind?"namespace '".concat(e.parent.name.getText(),"'"):e.externalModuleIndicator?0:1}(t);return 1===u?(n=e.formatStringFromArgs(e.getLocaleSpecificMessage(e.Diagnostics.Extract_to_0_in_1_scope),[a,"global"]),i=e.formatStringFromArgs(e.getLocaleSpecificMessage(e.Diagnostics.Extract_to_0_in_1_scope),[c,"global"])):0===u?(n=e.formatStringFromArgs(e.getLocaleSpecificMessage(e.Diagnostics.Extract_to_0_in_1_scope),[a,"module"]),i=e.formatStringFromArgs(e.getLocaleSpecificMessage(e.Diagnostics.Extract_to_0_in_1_scope),[c,"module"])):(n=e.formatStringFromArgs(e.getLocaleSpecificMessage(e.Diagnostics.Extract_to_0_in_1),[a,u]),i=e.formatStringFromArgs(e.getLocaleSpecificMessage(e.Diagnostics.Extract_to_0_in_1),[c,u])),0!==r||e.isClassLike(t)||(i=e.formatStringFromArgs(e.getLocaleSpecificMessage(e.Diagnostics.Extract_to_0_in_enclosing_scope),[c])),{functionExtraction:{description:n,errors:o[r]},constantExtraction:{description:i,errors:s[r]}}}));return c}(a,r);if(void 0===_)return e.emptyArray;for(var d,f,g=[],y=new e.Map,v=[],h=new e.Map,b=0,x=0,D=_;x<D.length;x++){var S=D[x],T=S.functionExtraction,C=S.constantExtraction;if(t.refactorKindBeginsWith(l.kind,n)){var E=T.description;0===T.errors.length?y.has(E)||(y.set(E,!0),g.push({description:E,name:"function_scope_".concat(b),kind:l.kind})):d||(d={description:E,name:"function_scope_".concat(b),notApplicableReason:N(T.errors),kind:l.kind})}if(t.refactorKindBeginsWith(u.kind,n)){E=C.description;0===C.errors.length?h.has(E)||(h.set(E,!0),v.push({description:E,name:"constant_scope_".concat(b),kind:u.kind})):f||(f={description:E,name:"constant_scope_".concat(b),notApplicableReason:N(C.errors),kind:u.kind})}b++}var k=[];return g.length?k.push({name:c,description:e.getLocaleSpecificMessage(e.Diagnostics.Extract_function),actions:g}):r.preferences.provideRefactorNotApplicableReason&&d&&k.push({name:c,description:e.getLocaleSpecificMessage(e.Diagnostics.Extract_function),actions:[d]}),v.length?k.push({name:c,description:e.getLocaleSpecificMessage(e.Diagnostics.Extract_constant),actions:v}):r.preferences.provideRefactorNotApplicableReason&&f&&k.push({name:c,description:e.getLocaleSpecificMessage(e.Diagnostics.Extract_constant),actions:[f]}),k.length?k:e.emptyArray;function N(e){var t=e[0].messageText;return"string"!=typeof t&&(t=t.messageText),t}}function d(t,r){var n=p(t.file,e.getRefactorContextSpan(t)).targetRange,a=/^function_scope_(\d+)$/.exec(r);if(a){var o=+a[1];return e.Debug.assert(isFinite(o),"Expected to parse a finite number from the function scope index"),function(t,r,n){var a=m(t,r),o=a.scopes,s=a.readsAndWrites,c=s.target,u=s.usagesPerScope,l=s.functionErrorsPerScope,_=s.exposedVariableDeclarations;return e.Debug.assert(!l[n].length,"The extraction went missing? How?"),r.cancellationToken.throwIfCancellationRequested(),function(t,r,n,a,o,s){var c,u,l=n.usages,_=n.typeParameterUsages,d=n.substitutions,p=s.program.getTypeChecker(),f=e.getEmitScriptTarget(s.program.getCompilerOptions()),g=e.codefix.createImportAdder(s.file,s.program,s.preferences,s.host),m=r.getSourceFile(),x=e.getUniqueName(e.isClassLike(r)?"newMethod":"newFunction",m),D=e.isInJSFile(r),T=e.factory.createIdentifier(x),C=[],E=[];l.forEach((function(t,n){var i;if(!D){var a=p.getTypeOfSymbolAtLocation(t.symbol,t.node);a=p.getBaseTypeOfLiteralType(a),i=e.codefix.typeToAutoImportableTypeNode(p,g,a,r,f,1)}var o=e.factory.createParameterDeclaration(void 0,void 0,n,void 0,i);C.push(o),2===t.usage&&(u||(u=[])).push(t),E.push(e.factory.createIdentifier(n))}));var k=e.arrayFrom(_.values()).map((function(e){return{type:e,declaration:y(e)}})).sort(v),N=0===k.length?void 0:k.map((function(e){return e.declaration})),A=void 0!==N?N.map((function(t){return e.factory.createTypeReferenceNode(t.name,void 0)})):void 0;if(e.isExpression(t)&&!D){var F=p.getContextualType(t);c=p.typeToTypeNode(F,r,1)}var P,w=function(t,r,n,i,a){var o,s=void 0!==n||r.length>0;if(e.isBlock(t)&&!s&&0===i.size)return{body:e.factory.createBlock(t.statements,!0),returnValueProperty:void 0};var c=!1,u=e.factory.createNodeArray(e.isBlock(t)?t.statements.slice(0):[e.isStatement(t)?t:e.factory.createReturnStatement(e.skipParentheses(t))]);if(s||i.size){var l=e.visitNodes(u,d).slice();if(s&&!a&&e.isStatement(t)){var _=h(r,n);1===_.length?l.push(e.factory.createReturnStatement(_[0].name)):l.push(e.factory.createReturnStatement(e.factory.createObjectLiteralExpression(_)))}return{body:e.factory.createBlock(l,!0),returnValueProperty:o}}return{body:e.factory.createBlock(u,!0),returnValueProperty:void 0};function d(t){if(!c&&e.isReturnStatement(t)&&s){var a=h(r,n);return t.expression&&(o||(o="__return"),a.unshift(e.factory.createPropertyAssignment(o,e.visitNode(t.expression,d)))),1===a.length?e.factory.createReturnStatement(a[0].name):e.factory.createReturnStatement(e.factory.createObjectLiteralExpression(a))}var u=c;c=c||e.isFunctionLikeDeclaration(t)||e.isClassLike(t);var l=i.get(e.getNodeId(t).toString()),_=l?e.getSynthesizedDeepClone(l):e.visitEachChild(t,d,e.nullTransformationContext);return c=u,_}}(t,a,u,d,!!(o.facts&i.HasReturn)),I=w.body,O=w.returnValueProperty;e.suppressLeadingAndTrailingTrivia(I);var M=!!(o.facts&i.UsesThisInFunction);if(e.isClassLike(r)){var L=D?[]:[e.factory.createModifier(121)];o.facts&i.InStaticRegion&&L.push(e.factory.createModifier(124)),o.facts&i.IsAsyncFunction&&L.push(e.factory.createModifier(132)),P=e.factory.createMethodDeclaration(L.length?L:void 0,o.facts&i.IsGenerator?e.factory.createToken(41):void 0,T,void 0,N,C,c,I)}else M&&C.unshift(e.factory.createParameterDeclaration(void 0,void 0,"this",void 0,p.typeToTypeNode(p.getTypeAtLocation(o.thisNode),r,1),void 0)),P=e.factory.createFunctionDeclaration(o.facts&i.IsAsyncFunction?[e.factory.createToken(132)]:void 0,o.facts&i.IsGenerator?e.factory.createToken(41):void 0,T,N,C,c,I);var R=e.textChanges.ChangeTracker.fromContext(s),B=function(t,r){return e.find(function(t){if(e.isFunctionLikeDeclaration(t)){var r=t.body;if(e.isBlock(r))return r.statements}else{if(e.isModuleBlock(t)||e.isSourceFile(t))return t.statements;if(e.isClassLike(t))return t.members;e.assertType(t)}return e.emptyArray}(r),(function(r){return r.pos>=t&&e.isFunctionLikeDeclaration(r)&&!e.isConstructorDeclaration(r)}))}((b(o.range)?e.last(o.range):o.range).end,r);B?R.insertNodeBefore(s.file,B,P,!0):R.insertNodeAtEndOfScope(s.file,r,P);g.writeFixes(R);var j=[],J=function(t,r,n){var a=e.factory.createIdentifier(n);if(e.isClassLike(t)){var o=r.facts&i.InStaticRegion?e.factory.createIdentifier(t.name.text):e.factory.createThis();return e.factory.createPropertyAccessExpression(o,a)}return a}(r,o,x);M&&E.unshift(e.factory.createIdentifier("this"));var z=e.factory.createCallExpression(M?e.factory.createPropertyAccessExpression(J,"call"):J,A,E);o.facts&i.IsGenerator&&(z=e.factory.createYieldExpression(e.factory.createToken(41),z));o.facts&i.IsAsyncFunction&&(z=e.factory.createAwaitExpression(z));S(t)&&(z=e.factory.createJsxExpression(void 0,z));if(a.length&&!u)if(e.Debug.assert(!O,"Expected no returnValueProperty"),e.Debug.assert(!(o.facts&i.HasReturn),"Expected RangeFacts.HasReturn flag to be unset"),1===a.length){var U=a[0];j.push(e.factory.createVariableStatement(void 0,e.factory.createVariableDeclarationList([e.factory.createVariableDeclaration(e.getSynthesizedDeepClone(U.name),void 0,e.getSynthesizedDeepClone(U.type),z)],U.parent.flags)))}else{for(var K=[],V=[],q=a[0].parent.flags,W=!1,H=0,G=a;H<G.length;H++){U=G[H];K.push(e.factory.createBindingElement(void 0,void 0,e.getSynthesizedDeepClone(U.name)));var Q=p.typeToTypeNode(p.getBaseTypeOfLiteralType(p.getTypeAtLocation(U)),r,1);V.push(e.factory.createPropertySignature(void 0,U.symbol.name,void 0,Q)),W=W||void 0!==U.type,q&=U.parent.flags}var X=W?e.factory.createTypeLiteralNode(V):void 0;X&&e.setEmitFlags(X,1),j.push(e.factory.createVariableStatement(void 0,e.factory.createVariableDeclarationList([e.factory.createVariableDeclaration(e.factory.createObjectBindingPattern(K),void 0,X,z)],q)))}else if(a.length||u){if(a.length)for(var Y=0,Z=a;Y<Z.length;Y++){var $=(U=Z[Y]).parent.flags;2&$&&($=-3&$|1),j.push(e.factory.createVariableStatement(void 0,e.factory.createVariableDeclarationList([e.factory.createVariableDeclaration(U.symbol.name,void 0,ie(U.type))],$)))}O&&j.push(e.factory.createVariableStatement(void 0,e.factory.createVariableDeclarationList([e.factory.createVariableDeclaration(O,void 0,ie(c))],1)));var ee=h(a,u);O&&ee.unshift(e.factory.createShorthandPropertyAssignment(O)),1===ee.length?(e.Debug.assert(!O,"Shouldn't have returnValueProperty here"),j.push(e.factory.createExpressionStatement(e.factory.createAssignment(ee[0].name,z))),o.facts&i.HasReturn&&j.push(e.factory.createReturnStatement())):(j.push(e.factory.createExpressionStatement(e.factory.createAssignment(e.factory.createObjectLiteralExpression(ee),z))),O&&j.push(e.factory.createReturnStatement(e.factory.createIdentifier(O))))}else o.facts&i.HasReturn?j.push(e.factory.createReturnStatement(z)):b(o.range)?j.push(e.factory.createExpressionStatement(z)):j.push(z);b(o.range)?R.replaceNodeRangeWithNodes(s.file,e.first(o.range),e.last(o.range),j):R.replaceNodeWithNodes(s.file,o.range,j);var te=R.getChanges(),re=(b(o.range)?e.first(o.range):o.range).getSourceFile().fileName,ne=e.getRenameLocation(te,re,x,!1);return{renameFilename:re,renameLocation:ne,edits:te};function ie(t){if(void 0!==t){for(var r=e.getSynthesizedDeepClone(t),n=r;e.isParenthesizedTypeNode(n);)n=n.type;return e.isUnionTypeNode(n)&&e.find(n.types,(function(e){return 155===e.kind}))?r:e.factory.createUnionTypeNode([r,e.factory.createKeywordTypeNode(155)])}}}(c,o[n],u[n],_,t,r)}(n,t,o)}var s=/^constant_scope_(\d+)$/.exec(r);if(s){o=+s[1];return e.Debug.assert(isFinite(o),"Expected to parse a finite number from the constant scope index"),function(t,r,n){var a=m(t,r),o=a.scopes,s=a.readsAndWrites,c=s.target,u=s.usagesPerScope,l=s.constantErrorsPerScope,_=s.exposedVariableDeclarations;return e.Debug.assert(!l[n].length,"The extraction went missing? How?"),e.Debug.assert(0===_.length,"Extract constant accepted a range containing a variable declaration?"),r.cancellationToken.throwIfCancellationRequested(),function(t,r,n,a,o){var s,c=n.substitutions,u=o.program.getTypeChecker(),l=r.getSourceFile(),_=!e.isPropertyAccessExpression(t)||e.isClassLike(r)||u.resolveName(t.name.text,t,111551,!1)||e.isPrivateIdentifier(t.name)||e.isKeyword(t.name.originalKeywordKind)?e.getUniqueName(e.isClassLike(r)?"newProperty":"newLocal",l):t.name.text,d=e.isInJSFile(r),p=d||!u.isContextSensitive(t)?void 0:u.typeToTypeNode(u.getContextualType(t),r,1),f=function(t,r){return r.size?n(t):t;function n(t){var i=r.get(e.getNodeId(t).toString());return i?e.getSynthesizedDeepClone(i):e.visitEachChild(t,n,e.nullTransformationContext)}}(e.skipParentheses(t),c);s=A(p,f),p=s.variableType,f=s.initializer,e.suppressLeadingAndTrailingTrivia(f);var m=e.textChanges.ChangeTracker.fromContext(o);if(e.isClassLike(r)){e.Debug.assert(!d,"Cannot extract to a JS class");var y=[];y.push(e.factory.createModifier(121)),a&i.InStaticRegion&&y.push(e.factory.createModifier(124)),y.push(e.factory.createModifier(146));var v=e.factory.createPropertyDeclaration(y,_,void 0,p,f),h=e.factory.createPropertyAccessExpression(a&i.InStaticRegion?e.factory.createIdentifier(r.name.getText()):e.factory.createThis(),e.factory.createIdentifier(_));S(t)&&(h=e.factory.createJsxExpression(void 0,h));var b=function(t,r){var n,i=r.members;e.Debug.assert(i.length>0,"Found no members");for(var a=!0,o=0,s=i;o<s.length;o++){var c=s[o];if(c.pos>t)return n||i[0];if(a&&!e.isPropertyDeclaration(c)){if(void 0!==n)return c;a=!1}n=c}return void 0===n?e.Debug.fail():n}(t.pos,r);m.insertNodeBefore(o.file,b,v,!0),m.replaceNode(o.file,t,h)}else{var x=e.factory.createVariableDeclaration(_,void 0,p,f),T=function(t,r){var n;for(;void 0!==t&&t!==r;){if(e.isVariableDeclaration(t)&&t.initializer===n&&e.isVariableDeclarationList(t.parent)&&t.parent.declarations.length>1)return t;n=t,t=t.parent}}(t,r);if(T){m.insertNodeBefore(o.file,T,x);h=e.factory.createIdentifier(_);m.replaceNode(o.file,t,h)}else if(241===t.parent.kind&&r===e.findAncestor(t,g)){var C=e.factory.createVariableStatement(void 0,e.factory.createVariableDeclarationList([x],2));m.replaceNode(o.file,t.parent,C)}else{C=e.factory.createVariableStatement(void 0,e.factory.createVariableDeclarationList([x],2)),b=function(t,r){var n;e.Debug.assert(!e.isClassLike(r));for(var i=t;i!==r;i=i.parent)g(i)&&(n=i);for(i=(n||t).parent;;i=i.parent){if(D(i)){for(var a=void 0,o=0,s=i.statements;o<s.length;o++){var c=s[o];if(c.pos>t.pos)break;a=c}return!a&&e.isCaseClause(i)?(e.Debug.assert(e.isSwitchStatement(i.parent.parent),"Grandparent isn't a switch statement"),i.parent.parent):e.Debug.checkDefined(a,"prevStatement failed to get set")}e.Debug.assert(i!==r,"Didn't encounter a block-like before encountering scope")}}(t,r);if(0===b.pos?m.insertNodeAtTopOfFile(o.file,C,!1):m.insertNodeBefore(o.file,b,C,!1),241===t.parent.kind)m.delete(o.file,t.parent);else{h=e.factory.createIdentifier(_);S(t)&&(h=e.factory.createJsxExpression(void 0,h)),m.replaceNode(o.file,t,h)}}}var E=m.getChanges(),k=t.getSourceFile().fileName,N=e.getRenameLocation(E,k,_,!0);return{renameFilename:k,renameLocation:N,edits:E};function A(n,i){if(void 0===n)return{variableType:n,initializer:i};if(!e.isFunctionExpression(i)&&!e.isArrowFunction(i)||i.typeParameters)return{variableType:n,initializer:i};var a=u.getTypeAtLocation(t),o=e.singleOrUndefined(u.getSignaturesOfType(a,0));if(!o)return{variableType:n,initializer:i};if(o.getTypeParameters())return{variableType:n,initializer:i};for(var s=[],c=!1,l=0,_=i.parameters;l<_.length;l++){var d=_[l];if(d.type)s.push(d);else{var p=u.getTypeAtLocation(d);p===u.getAnyType()&&(c=!0),s.push(e.factory.updateParameterDeclaration(d,d.modifiers,d.dotDotDotToken,d.name,d.questionToken,d.type||u.typeToTypeNode(p,r,1),d.initializer))}}if(c)return{variableType:n,initializer:i};if(n=void 0,e.isArrowFunction(i))i=e.factory.updateArrowFunction(i,e.canHaveModifiers(t)?e.getModifiers(t):void 0,i.typeParameters,s,i.type||u.typeToTypeNode(o.getReturnType(),r,1),i.equalsGreaterThanToken,i.body);else{if(o&&o.thisParameter){var f=e.firstOrUndefined(s);if(!f||e.isIdentifier(f.name)&&"this"!==f.name.escapedText){var g=u.getTypeOfSymbolAtLocation(o.thisParameter,t);s.splice(0,0,e.factory.createParameterDeclaration(void 0,void 0,"this",void 0,u.typeToTypeNode(g,r,1)))}}i=e.factory.updateFunctionExpression(i,e.canHaveModifiers(t)?e.getModifiers(t):void 0,i.asteriskToken,i.name,i.typeParameters,s,i.type||u.typeToTypeNode(o.getReturnType(),r,1),i.body)}return{variableType:n,initializer:i}}}(e.isExpression(c)?c:c.statements[0].expression,o[n],u[n],t.facts,r)}(n,t,o)}e.Debug.fail("Unrecognized action name")}function p(t,r,a){void 0===a&&(a=!0);var o=r.length;if(0===o&&!a)return{errors:[e.createFileDiagnostic(t,r.start,o,n.cannotExtractEmpty)]};var s,c=0===o&&a,u=e.findFirstNonJsxWhitespaceToken(t,r.start),l=e.findTokenOnLeftOfPosition(t,e.textSpanEnd(r)),_=u&&l&&a?function(e,t,r){var n=e.getStart(r),i=t.getEnd();59===r.text.charCodeAt(i)&&i++;return{start:n,length:i-n}}(u,l,t):r,d=c?function(t){return e.findAncestor(t,(function(t){return t.parent&&x(t)&&!e.isBinaryExpression(t.parent)}))}(u):e.getParentNodeInSpan(u,t,_),p=c?d:e.getParentNodeInSpan(l,t,_),g=i.None;if(!d||!p)return{errors:[e.createFileDiagnostic(t,r.start,o,n.cannotExtractRange)]};if(8388608&d.flags)return{errors:[e.createFileDiagnostic(t,r.start,o,n.cannotExtractJSDoc)]};if(d.parent!==p.parent)return{errors:[e.createFileDiagnostic(t,r.start,o,n.cannotExtractRange)]};if(d!==p){if(!D(d.parent))return{errors:[e.createFileDiagnostic(t,r.start,o,n.cannotExtractRange)]};for(var m=[],y=0,v=d.parent.statements;y<v.length;y++){var h=v[y];if(h===d||m.length){var b=E(h);if(b)return{errors:b};m.push(h)}if(h===p)break}return m.length?{targetRange:{range:m,facts:g,thisNode:s}}:{errors:[e.createFileDiagnostic(t,r.start,o,n.cannotExtractRange)]}}if(e.isReturnStatement(d)&&!d.expression)return{errors:[e.createFileDiagnostic(t,r.start,o,n.cannotExtractRange)]};var S=function(t){if(e.isReturnStatement(t)){if(t.expression)return t.expression}else if(e.isVariableStatement(t)||e.isVariableDeclarationList(t)){for(var r=0,n=void 0,i=0,a=e.isVariableStatement(t)?t.declarationList.declarations:t.declarations;i<a.length;i++){var o=a[i];o.initializer&&(r++,n=o.initializer)}if(1===r)return n}else if(e.isVariableDeclaration(t)&&t.initializer)return t.initializer;return t}(d),C=function(t){if(e.isIdentifier(e.isExpressionStatement(t)?t.expression:t))return[e.createDiagnosticForNode(t,n.cannotExtractIdentifier)];return}(S)||E(S);return C?{errors:C}:{targetRange:{range:f(S),facts:g,thisNode:s}};function E(t){var a;if(function(e){e[e.None=0]="None",e[e.Break=1]="Break",e[e.Continue=2]="Continue",e[e.Return=4]="Return"}(a||(a={})),e.Debug.assert(t.pos<=t.end,"This failure could trigger https://github.com/Microsoft/TypeScript/issues/20809 (1)"),e.Debug.assert(!e.positionIsSynthesized(t.pos),"This failure could trigger https://github.com/Microsoft/TypeScript/issues/20809 (2)"),!(e.isStatement(t)||e.isExpressionNode(t)&&x(t)||T(t)))return[e.createDiagnosticForNode(t,n.statementOrExpressionExpected)];if(16777216&t.flags)return[e.createDiagnosticForNode(t,n.cannotExtractAmbientBlock)];var o,c=e.getContainingClass(t);c&&function(t,r){for(var n=t;n!==r;){if(169===n.kind){e.isStatic(n)&&(g|=i.InStaticRegion);break}if(166===n.kind){173===e.getContainingFunction(n).kind&&(g|=i.InStaticRegion);break}171===n.kind&&e.isStatic(n)&&(g|=i.InStaticRegion),n=n.parent}}(t,c);var u,l=4;if(function t(a){if(o)return!0;if(e.isDeclaration(a)){var c=257===a.kind?a.parent.parent:a;if(e.hasSyntacticModifier(c,1))return(o||(o=[])).push(e.createDiagnosticForNode(a,n.cannotExtractExportedEntity)),!0}switch(a.kind){case 269:return(o||(o=[])).push(e.createDiagnosticForNode(a,n.cannotExtractImport)),!0;case 274:return(o||(o=[])).push(e.createDiagnosticForNode(a,n.cannotExtractExportedEntity)),!0;case 106:if(210===a.parent.kind){var _=e.getContainingClass(a);if(void 0===_||_.pos<r.start||_.end>=r.start+r.length)return(o||(o=[])).push(e.createDiagnosticForNode(a,n.cannotExtractSuper)),!0}else g|=i.UsesThis,s=a;break;case 216:e.forEachChild(a,(function t(r){if(e.isThis(r))g|=i.UsesThis,s=a;else{if(e.isClassLike(r)||e.isFunctionLike(r)&&!e.isArrowFunction(r))return!1;e.forEachChild(r,t)}}));case 260:case 259:e.isSourceFile(a.parent)&&void 0===a.parent.externalModuleIndicator&&(o||(o=[])).push(e.createDiagnosticForNode(a,n.functionWillNotBeVisibleInTheNewScope));case 228:case 215:case 171:case 173:case 174:case 175:return!1}var d=l;switch(a.kind){case 242:l&=-5;break;case 255:l=0;break;case 238:a.parent&&255===a.parent.kind&&a.parent.finallyBlock===a&&(l=4);break;case 293:case 292:l|=1;break;default:e.isIterationStatement(a,!1)&&(l|=3)}switch(a.kind){case 194:case 108:g|=i.UsesThis,s=a;break;case 253:var p=a.label;(u||(u=[])).push(p.escapedText),e.forEachChild(a,t),u.pop();break;case 249:case 248:(p=a.label)?e.contains(u,p.escapedText)||(o||(o=[])).push(e.createDiagnosticForNode(a,n.cannotExtractRangeContainingLabeledBreakOrContinueStatementWithTargetOutsideOfTheRange)):l&(249===a.kind?1:2)||(o||(o=[])).push(e.createDiagnosticForNode(a,n.cannotExtractRangeContainingConditionalBreakOrContinueStatements));break;case 220:g|=i.IsAsyncFunction;break;case 226:g|=i.IsGenerator;break;case 250:4&l?g|=i.HasReturn:(o||(o=[])).push(e.createDiagnosticForNode(a,n.cannotExtractRangeContainingConditionalReturnStatement));break;default:e.forEachChild(a,t)}l=d}(t),g&i.UsesThis){var _=e.getThisContainer(t,!1);(259===_.kind||171===_.kind&&207===_.parent.kind||215===_.kind)&&(g|=i.UsesThisInFunction)}return o}}function f(t){return e.isStatement(t)?[t]:e.isExpressionNode(t)?e.isExpressionStatement(t.parent)?[t.parent]:t:T(t)?t:void 0}function g(t){return e.isArrowFunction(t)?e.isFunctionBody(t.body):e.isFunctionLikeDeclaration(t)||e.isSourceFile(t)||e.isModuleBlock(t)||e.isClassLike(t)}function m(t,r){var a=r.file,o=function(t){var r=b(t.range)?e.first(t.range):t.range;if(t.facts&i.UsesThis&&!(t.facts&i.UsesThisInFunction)){var n=e.getContainingClass(r);if(n){var a=e.findAncestor(r,e.isFunctionLikeDeclaration);return a?[a,n]:[n]}}for(var o=[];;)if(166===(r=r.parent).kind&&(r=e.findAncestor(r,(function(t){return e.isFunctionLikeDeclaration(t)})).parent),g(r)&&(o.push(r),308===r.kind))return o}(t),s=function(t,r){return b(t.range)?{pos:e.first(t.range).getStart(r),end:e.last(t.range).getEnd()}:t.range}(t,a),c=function(t,r,a,o,s,c){var u,l,_=new e.Map,d=[],p=[],f=[],g=[],m=[],y=new e.Map,v=[],h=b(t.range)?1===t.range.length&&e.isExpressionStatement(t.range[0])?t.range[0].expression:void 0:t.range;if(void 0===h){var x=t.range,D=e.first(x).getStart(),S=e.last(x).end;l=e.createFileDiagnostic(o,D,S-D,n.expressionExpected)}else 147456&s.getTypeAtLocation(h).flags&&(l=e.createDiagnosticForNode(h,n.uselessConstantType));for(var T=0,C=r;T<C.length;T++){var E=C[T];d.push({usages:new e.Map,typeParameterUsages:new e.Map,substitutions:new e.Map}),p.push(new e.Map),f.push([]);var k=[];l&&k.push(l),e.isClassLike(E)&&e.isInJSFile(E)&&k.push(e.createDiagnosticForNode(E,n.cannotExtractToJSClass)),e.isArrowFunction(E)&&!e.isBlock(E.body)&&k.push(e.createDiagnosticForNode(E,n.cannotExtractToExpressionArrowFunction)),g.push(k)}var N=new e.Map,A=b(t.range)?e.factory.createBlock(t.range):t.range,F=b(t.range)?e.first(t.range):t.range,P=U(F);if(V(A),P&&!b(t.range)&&!e.isJsxAttribute(t.range)){K(s.getContextualType(t.range))}if(_.size>0){for(var w=new e.Map,I=0,O=F;void 0!==O&&I<r.length;O=O.parent)if(O===r[I]&&(w.forEach((function(e,t){d[I].typeParameterUsages.set(t,e)})),I++),e.isDeclarationWithTypeParameters(O))for(var M=0,L=e.getEffectiveTypeParameterDeclarations(O);M<L.length;M++){var R=L[M],B=s.getTypeAtLocation(R);_.has(B.id.toString())&&w.set(B.id.toString(),B)}e.Debug.assert(I===r.length,"Should have iterated all scopes")}if(m.length){var j=e.isBlockScope(r[0],r[0].parent)?r[0]:e.getEnclosingBlockScopeContainer(r[0]);e.forEachChild(j,H)}for(var J=function(a){var o=d[a];if(a>0&&(o.usages.size>0||o.typeParameterUsages.size>0)){var s=b(t.range)?t.range[0]:t.range;g[a].push(e.createDiagnosticForNode(s,n.cannotAccessVariablesFromNestedScopes))}t.facts&i.UsesThisInFunction&&e.isClassLike(r[a])&&f[a].push(e.createDiagnosticForNode(t.thisNode,n.cannotExtractFunctionsContainingThisToMethod));var c,l=!1;if(d[a].usages.forEach((function(t){2===t.usage&&(l=!0,106500&t.symbol.flags&&t.symbol.valueDeclaration&&e.hasEffectiveModifier(t.symbol.valueDeclaration,64)&&(c=t.symbol.valueDeclaration))})),e.Debug.assert(b(t.range)||0===v.length,"No variable declarations expected if something was extracted"),l&&!b(t.range)){var _=e.createDiagnosticForNode(t.range,n.cannotWriteInExpression);f[a].push(_),g[a].push(_)}else if(c&&a>0){_=e.createDiagnosticForNode(c,n.cannotExtractReadonlyPropertyInitializerOutsideConstructor);f[a].push(_),g[a].push(_)}else if(u){_=e.createDiagnosticForNode(u,n.cannotExtractExportedEntity);f[a].push(_),g[a].push(_)}},z=0;z<r.length;z++)J(z);return{target:A,usagesPerScope:d,functionErrorsPerScope:f,constantErrorsPerScope:g,exposedVariableDeclarations:v};function U(t){return!!e.findAncestor(t,(function(t){return e.isDeclarationWithTypeParameters(t)&&0!==e.getEffectiveTypeParameterDeclarations(t).length}))}function K(e){for(var t=0,r=s.getSymbolWalker((function(){return c.throwIfCancellationRequested(),!0})).walkType(e).visitedTypes;t<r.length;t++){var n=r[t];n.isTypeParameter()&&_.set(n.id.toString(),n)}}function V(t,r){(void 0===r&&(r=1),P)&&K(s.getTypeAtLocation(t));if(e.isDeclaration(t)&&t.symbol&&m.push(t),e.isAssignmentExpression(t))V(t.left,2),V(t.right);else if(e.isUnaryExpressionWithWrite(t))V(t.operand,2);else if(e.isPropertyAccessExpression(t)||e.isElementAccessExpression(t))e.forEachChild(t,V);else if(e.isIdentifier(t)){if(!t.parent)return;if(e.isQualifiedName(t.parent)&&t!==t.parent.left)return;if(e.isPropertyAccessExpression(t.parent)&&t!==t.parent.expression)return;q(t,r,e.isPartOfTypeNode(t))}else e.forEachChild(t,V)}function q(t,n,i){var a=W(t,n,i);if(a)for(var o=0;o<r.length;o++){var s=p[o].get(a);s&&d[o].substitutions.set(e.getNodeId(t).toString(),s)}}function W(c,u,l){var _=G(c);if(_){var m=e.getSymbolId(_).toString(),y=N.get(m);if(y&&y>=u)return m;if(N.set(m,u),y){for(var v=0,h=d;v<h.length;v++){var b=h[v];b.usages.get(c.text)&&b.usages.set(c.text,{usage:u,symbol:_,node:c})}return m}var x=_.getDeclarations(),D=x&&e.find(x,(function(e){return e.getSourceFile()===o}));if(D&&!e.rangeContainsStartEnd(a,D.getStart(),D.end)){if(t.facts&i.IsGenerator&&2===u){for(var S=e.createDiagnosticForNode(c,n.cannotExtractRangeThatContainsWritesToReferencesLocatedOutsideOfTheTargetRangeInGenerators),T=0,C=f;T<C.length;T++){C[T].push(S)}for(var E=0,k=g;E<k.length;E++){k[E].push(S)}}for(var A=0;A<r.length;A++){var F=r[A];if(s.resolveName(_.name,F,_.flags,!1)!==_&&!p[A].has(m)){var P=Q(_.exportSymbol||_,F,l);if(P)p[A].set(m,P);else if(l){if(!(262144&_.flags)){S=e.createDiagnosticForNode(c,n.typeWillNotBeVisibleInTheNewScope);f[A].push(S),g[A].push(S)}}else d[A].usages.set(c.text,{usage:u,symbol:_,node:c})}}return m}}}function H(r){if(!(r===t.range||b(t.range)&&t.range.indexOf(r)>=0)){var n=e.isIdentifier(r)?G(r):s.getSymbolAtLocation(r);if(n){var i=e.find(m,(function(e){return e.symbol===n}));if(i)if(e.isVariableDeclaration(i)){var a=i.symbol.id.toString();y.has(a)||(v.push(i),y.set(a,!0))}else u=u||i}e.forEachChild(r,H)}}function G(t){return t.parent&&e.isShorthandPropertyAssignment(t.parent)&&t.parent.name===t?s.getShorthandAssignmentValueSymbol(t.parent):s.getSymbolAtLocation(t)}function Q(t,r,n){if(t){var i=t.getDeclarations();if(i&&i.some((function(e){return e.parent===r})))return e.factory.createIdentifier(t.name);var a=Q(t.parent,r,n);if(void 0!==a)return n?e.factory.createQualifiedName(a,e.factory.createIdentifier(t.name)):e.factory.createPropertyAccessExpression(a,t.name)}}}(t,o,s,a,r.program.getTypeChecker(),r.cancellationToken);return{scopes:o,readsAndWrites:c}}function y(e){var t,r=e.symbol;if(r&&r.declarations)for(var n=0,i=r.declarations;n<i.length;n++){var a=i[n];(void 0===t||a.pos<t.pos)&&(t=a)}return t}function v(t,r){var n=t.type,i=t.declaration,a=r.type,o=r.declaration;return e.compareProperties(i,o,"pos",e.compareValues)||e.compareStringsCaseSensitive(n.symbol?n.symbol.getName():"",a.symbol?a.symbol.getName():"")||e.compareValues(n.id,a.id)}function h(t,r){var n=e.map(t,(function(t){return e.factory.createShorthandPropertyAssignment(t.symbol.name)})),i=e.map(r,(function(t){return e.factory.createShorthandPropertyAssignment(t.symbol.name)}));return void 0===n?i:void 0===i?n:n.concat(i)}function b(t){return e.isArray(t)}function x(e){var t=e.parent;if(302===t.kind)return!1;switch(e.kind){case 10:return 269!==t.kind&&273!==t.kind;case 227:case 203:case 205:return!1;case 79:return 205!==t.kind&&273!==t.kind&&278!==t.kind}return!0}function D(e){switch(e.kind){case 238:case 308:case 265:case 292:return!0;default:return!1}}function S(t){return T(t)||(e.isJsxElement(t)||e.isJsxSelfClosingElement(t)||e.isJsxFragment(t))&&(e.isJsxElement(t.parent)||e.isJsxFragment(t.parent))}function T(t){return e.isStringLiteral(t)&&t.parent&&e.isJsxAttribute(t.parent)}t.registerRefactor(c,{kinds:[u.kind,l.kind],getEditsForAction:d,getAvailableActions:_}),r.getRefactorActionsToExtractSymbol=_,r.getRefactorEditsToExtractSymbol=d,function(t){function r(t){return{message:t,code:0,category:e.DiagnosticCategory.Message,key:t}}t.cannotExtractRange=r("Cannot extract range."),t.cannotExtractImport=r("Cannot extract import statement."),t.cannotExtractSuper=r("Cannot extract super call."),t.cannotExtractJSDoc=r("Cannot extract JSDoc."),t.cannotExtractEmpty=r("Cannot extract empty range."),t.expressionExpected=r("expression expected."),t.uselessConstantType=r("No reason to extract constant of type."),t.statementOrExpressionExpected=r("Statement or expression expected."),t.cannotExtractRangeContainingConditionalBreakOrContinueStatements=r("Cannot extract range containing conditional break or continue statements."),t.cannotExtractRangeContainingConditionalReturnStatement=r("Cannot extract range containing conditional return statement."),t.cannotExtractRangeContainingLabeledBreakOrContinueStatementWithTargetOutsideOfTheRange=r("Cannot extract range containing labeled break or continue with target outside of the range."),t.cannotExtractRangeThatContainsWritesToReferencesLocatedOutsideOfTheTargetRangeInGenerators=r("Cannot extract range containing writes to references located outside of the target range in generators."),t.typeWillNotBeVisibleInTheNewScope=r("Type will not visible in the new scope."),t.functionWillNotBeVisibleInTheNewScope=r("Function will not visible in the new scope."),t.cannotExtractIdentifier=r("Select more than a single identifier."),t.cannotExtractExportedEntity=r("Cannot extract exported declaration"),t.cannotWriteInExpression=r("Cannot write back side-effects when extracting an expression"),t.cannotExtractReadonlyPropertyInitializerOutsideConstructor=r("Cannot move initialization of read-only class property outside of the constructor"),t.cannotExtractAmbientBlock=r("Cannot extract code from ambient contexts"),t.cannotAccessVariablesFromNestedScopes=r("Cannot access variables from nested scopes"),t.cannotExtractToJSClass=r("Cannot extract constant to a class scope in JS"),t.cannotExtractToExpressionArrowFunction=r("Cannot extract constant to an arrow function without a block"),t.cannotExtractFunctionsContainingThisToMethod=r("Cannot extract functions containing this to method")}(n=r.Messages||(r.Messages={})),function(e){e[e.None=0]="None",e[e.HasReturn=1]="HasReturn",e[e.IsGenerator=2]="IsGenerator",e[e.IsAsyncFunction=4]="IsAsyncFunction",e[e.UsesThis=8]="UsesThis",e[e.UsesThisInFunction=16]="UsesThisInFunction",e[e.InStaticRegion=32]="InStaticRegion"}(i||(i={})),r.getRangeToExtract=p,function(e){e[e.Module=0]="Module",e[e.Global=1]="Global"}(a||(a={})),function(e){e[e.Read=1]="Read",e[e.Write=2]="Write"}(s||(s={}))}(t.extractSymbol||(t.extractSymbol={}))}(e.refactor||(e.refactor={}))}(_||(_={})),function(e){!function(t){var r="Extract type",n={name:"Extract to type alias",description:e.getLocaleSpecificMessage(e.Diagnostics.Extract_to_type_alias),kind:"refactor.extract.type"},i={name:"Extract to interface",description:e.getLocaleSpecificMessage(e.Diagnostics.Extract_to_interface),kind:"refactor.extract.interface"},a={name:"Extract to typedef",description:e.getLocaleSpecificMessage(e.Diagnostics.Extract_to_typedef),kind:"refactor.extract.typedef"};function s(t,r){void 0===r&&(r=!0);var n=t.file,i=t.startPosition,a=e.isSourceFileJS(n),o=e.getTokenAtPosition(n,i),s=e.createTextRangeFromSpan(e.getRefactorContextSpan(t)),l=s.pos===s.end&&r,_=e.findAncestor(o,(function(t){return t.parent&&e.isTypeNode(t)&&!u(s,t.parent,n)&&(l||e.nodeOverlapsWithStartEnd(o,n,s.pos,s.end))}));if(!_||!e.isTypeNode(_))return{error:e.getLocaleSpecificMessage(e.Diagnostics.Selection_is_not_a_valid_type_node)};var d=t.program.getTypeChecker(),p=e.Debug.checkDefined(e.findAncestor(_,e.isStatement),"Should find a statement"),f=function(t,r,n,i){var a=[];return o(r)?void 0:a;function o(s){if(e.isTypeReferenceNode(s)){if(e.isIdentifier(s.typeName))for(var c=s.typeName,l=0,_=(null==(g=t.resolveName(c.text,c,262144,!0))?void 0:g.declarations)||e.emptyArray;l<_.length;l++){var d=_[l];if(e.isTypeParameterDeclaration(d)&&d.getSourceFile()===i){if(d.name.escapedText===c.escapedText&&u(d,r,i))return!0;if(u(n,d,i)&&!u(r,d,i)){e.pushIfUnique(a,d);break}}}}else if(e.isInferTypeNode(s)){var p=e.findAncestor(s,(function(t){return e.isConditionalTypeNode(t)&&u(t.extendsType,s,i)}));if(!p||!u(r,p,i))return!0}else if(e.isTypePredicateNode(s)||e.isThisTypeNode(s)){var f=e.findAncestor(s.parent,e.isFunctionLike);if(f&&f.type&&u(f.type,s,i)&&!u(r,f,i))return!0}else if(e.isTypeQueryNode(s)){var g;if(e.isIdentifier(s.exprName)){if((null==(g=t.resolveName(s.exprName.text,s.exprName,111551,!1))?void 0:g.valueDeclaration)&&u(n,g.valueDeclaration,i)&&!u(r,g.valueDeclaration,i))return!0}else if(e.isThisIdentifier(s.exprName.left)&&!u(r,s.parent,i))return!0}return i&&e.isTupleTypeNode(s)&&e.getLineAndCharacterOfPosition(i,s.pos).line===e.getLineAndCharacterOfPosition(i,s.end).line&&e.setEmitFlags(s,1),e.forEachChild(s,o)}}(d,_,p,n);return f?{isJS:a,selection:_,firstStatement:p,typeParameters:f,typeElements:c(d,_)}:{error:e.getLocaleSpecificMessage(e.Diagnostics.No_type_could_be_extracted_from_this_type_node)}}function c(t,r){if(r){if(e.isIntersectionTypeNode(r)){for(var n=[],i=new e.Map,a=0,o=r.types;a<o.length;a++){var s=c(t,o[a]);if(!s||!s.every((function(t){return t.name&&e.addToSeen(i,e.getNameFromPropertyName(t.name))})))return;e.addRange(n,s)}return n}return e.isParenthesizedTypeNode(r)?c(t,r.type):e.isTypeLiteralNode(r)?r.members:void 0}}function u(t,r,n){return e.rangeContainsStartEnd(t,e.skipTrivia(n.text,r.pos),r.end)}t.registerRefactor(r,{kinds:[n.kind,i.kind,a.kind],getAvailableActions:function(c){var u=s(c,"invoked"===c.triggerReason);return u?t.isRefactorErrorInfo(u)?c.preferences.provideRefactorNotApplicableReason?[{name:r,description:e.getLocaleSpecificMessage(e.Diagnostics.Extract_type),actions:[o(o({},a),{notApplicableReason:u.error}),o(o({},n),{notApplicableReason:u.error}),o(o({},i),{notApplicableReason:u.error})]}]:e.emptyArray:[{name:r,description:e.getLocaleSpecificMessage(e.Diagnostics.Extract_type),actions:u.isJS?[a]:e.append([n],u.typeElements&&i)}]:e.emptyArray},getEditsForAction:function(r,o){var c=r.file,u=s(r);e.Debug.assert(u&&!t.isRefactorErrorInfo(u),"Expected to find a range to extract");var l=e.getUniqueName("NewType",c),_=e.textChanges.ChangeTracker.with(r,(function(t){switch(o){case n.name:return e.Debug.assert(!u.isJS,"Invalid actionName/JS combo"),function(t,r,n,i){var a=i.firstStatement,o=i.selection,s=i.typeParameters,c=e.factory.createTypeAliasDeclaration(void 0,n,s.map((function(t){return e.factory.updateTypeParameterDeclaration(t,t.modifiers,t.name,t.constraint,void 0)})),o);t.insertNodeBefore(r,a,e.ignoreSourceNewlines(c),!0),t.replaceNode(r,o,e.factory.createTypeReferenceNode(n,s.map((function(t){return e.factory.createTypeReferenceNode(t.name,void 0)}))),{leadingTriviaOption:e.textChanges.LeadingTriviaOption.Exclude,trailingTriviaOption:e.textChanges.TrailingTriviaOption.ExcludeWhitespace})}(t,c,l,u);case a.name:return e.Debug.assert(u.isJS,"Invalid actionName/JS combo"),function(t,r,n,i){var a=i.firstStatement,o=i.selection,s=i.typeParameters;e.setEmitFlags(o,3584);var c=e.factory.createJSDocTypedefTag(e.factory.createIdentifier("typedef"),e.factory.createJSDocTypeExpression(o),e.factory.createIdentifier(n)),u=[];e.forEach(s,(function(t){var r=e.getEffectiveConstraintOfTypeParameter(t),n=e.factory.createTypeParameterDeclaration(void 0,t.name),i=e.factory.createJSDocTemplateTag(e.factory.createIdentifier("template"),r&&e.cast(r,e.isJSDocTypeExpression),[n]);u.push(i)})),t.insertNodeBefore(r,a,e.factory.createJSDocComment(void 0,e.factory.createNodeArray(e.concatenate(u,[c]))),!0),t.replaceNode(r,o,e.factory.createTypeReferenceNode(n,s.map((function(t){return e.factory.createTypeReferenceNode(t.name,void 0)}))))}(t,c,l,u);case i.name:return e.Debug.assert(!u.isJS&&!!u.typeElements,"Invalid actionName/JS combo"),function(t,r,n,i){var a,o=i.firstStatement,s=i.selection,c=i.typeParameters,u=i.typeElements,l=e.factory.createInterfaceDeclaration(void 0,n,c,void 0,u);e.setTextRange(l,null===(a=u[0])||void 0===a?void 0:a.parent),t.insertNodeBefore(r,o,e.ignoreSourceNewlines(l),!0),t.replaceNode(r,s,e.factory.createTypeReferenceNode(n,c.map((function(t){return e.factory.createTypeReferenceNode(t.name,void 0)}))),{leadingTriviaOption:e.textChanges.LeadingTriviaOption.Exclude,trailingTriviaOption:e.textChanges.TrailingTriviaOption.ExcludeWhitespace})}(t,c,l,u);default:e.Debug.fail("Unexpected action name")}})),d=c.fileName;return{edits:_,renameFilename:d,renameLocation:e.getRenameLocation(_,d,l,!1)}}})}(e.refactor||(e.refactor={}))}(_||(_={})),function(e){!function(t){var r,n,i;t.generateGetAccessorAndSetAccessor||(t.generateGetAccessorAndSetAccessor={}),r="Generate 'get' and 'set' accessors",n=e.Diagnostics.Generate_get_and_set_accessors.message,i={name:r,description:n,kind:"refactor.rewrite.property.generateAccessors"},t.registerRefactor(r,{kinds:[i.kind],getEditsForAction:function(r,n){if(r.endPosition){var i=e.codefix.getAccessorConvertiblePropertyAtPosition(r.file,r.program,r.startPosition,r.endPosition);e.Debug.assert(i&&!t.isRefactorErrorInfo(i),"Expected applicable refactor info");var a=e.codefix.generateAccessorFromProperty(r.file,r.program,r.startPosition,r.endPosition,r,n);if(a){var o=r.file.fileName,s=i.renameAccessor?i.accessorName:i.fieldName;return{renameFilename:o,renameLocation:(e.isIdentifier(s)?0:-1)+e.getRenameLocation(a,o,s.text,e.isParameter(i.declaration)),edits:a}}}},getAvailableActions:function(a){if(!a.endPosition)return e.emptyArray;var s=e.codefix.getAccessorConvertiblePropertyAtPosition(a.file,a.program,a.startPosition,a.endPosition,"invoked"===a.triggerReason);return s?t.isRefactorErrorInfo(s)?a.preferences.provideRefactorNotApplicableReason?[{name:r,description:n,actions:[o(o({},i),{notApplicableReason:s.error})]}]:e.emptyArray:[{name:r,description:n,actions:[i]}]:e.emptyArray}})}(e.refactor||(e.refactor={}))}(_||(_={})),function(e){!function(e){e.isRefactorErrorInfo=function(e){return void 0!==e.error},e.refactorKindBeginsWith=function(e,t){return!t||e.substr(0,t.length)===t}}(e.refactor||(e.refactor={}))}(_||(_={})),function(e){!function(t){var r="Move to a new file",n=e.getLocaleSpecificMessage(e.Diagnostics.Move_to_a_new_file),i={name:r,description:n,kind:"refactor.move.newFile"};function s(t){var r=function(t){var r=t.file,n=e.createTextRangeFromSpan(e.getRefactorContextSpan(t)),i=r.statements,a=e.findIndex(i,(function(e){return e.end>n.pos}));if(-1!==a){var o=i[a];if(e.isNamedDeclaration(o)&&o.name&&e.rangeContainsRange(o.name,n))return{toMove:[i[a]],afterLast:i[a+1]};if(!(n.pos>o.getStart(r))){var s=e.findIndex(i,(function(e){return e.end>n.end}),a);if(-1===s||!(0===s||i[s].getStart(r)<n.end))return{toMove:i.slice(a,-1===s?i.length:s),afterLast:-1===s?void 0:i[s]}}}}(t);if(void 0!==r){var n=[],i=[],a=r.toMove,o=r.afterLast;return e.getRangesWhere(a,c,(function(e,t){for(var r=e;r<t;r++)n.push(a[r]);i.push({first:a[e],afterLast:o})})),0===n.length?void 0:{all:n,ranges:i}}}function c(t){return!function(t){switch(t.kind){case 269:return!0;case 268:return!e.hasSyntacticModifier(t,1);case 240:return t.declarationList.declarations.every((function(t){return!!t.initializer&&e.isRequireCall(t.initializer,!0)}));default:return!1}}(t)&&!e.isPrologueDirective(t)}function u(e,t,r){for(var n=0,i=t;n<i.length;n++){var a=i[n],o=a.first,s=a.afterLast;r.deleteNodeRangeExcludingEnd(e,o,s)}}function l(e){return 269===e.kind?e.moduleSpecifier:268===e.kind?e.moduleReference.expression:e.initializer.arguments[0]}function _(t,r){if(e.isImportDeclaration(t))e.isStringLiteral(t.moduleSpecifier)&&r(t);else if(e.isImportEqualsDeclaration(t))e.isExternalModuleReference(t.moduleReference)&&e.isStringLiteralLike(t.moduleReference.expression)&&r(t);else if(e.isVariableStatement(t))for(var n=0,i=t.declarationList.declarations;n<i.length;n++){var a=i[n];a.initializer&&e.isRequireCall(a.initializer,!0)&&r(a)}}function d(t,r,n,i,a){if(n=e.ensurePathIsNonModuleName(n),i){var o=r.map((function(t){return e.factory.createImportSpecifier(!1,void 0,e.factory.createIdentifier(t))}));return e.makeImportIfNecessary(t,o,n,a)}e.Debug.assert(!t,"No default import should exist");var s=r.map((function(t){return e.factory.createBindingElement(void 0,void 0,t)}));return s.length?p(e.factory.createObjectBindingPattern(s),void 0,f(e.factory.createStringLiteral(n))):void 0}function p(t,r,n,i){return void 0===i&&(i=2),e.factory.createVariableStatement(void 0,e.factory.createVariableDeclarationList([e.factory.createVariableDeclaration(t,void 0,r,n)],i))}function f(t){return e.factory.createCallExpression(e.factory.createIdentifier("require"),void 0,[t])}function g(t,r,n,i){switch(r.kind){case 269:!function(t,r,n,i){if(!r.importClause)return;var a=r.importClause,o=a.name,s=a.namedBindings,c=!o||i(o),u=!s||(271===s.kind?i(s.name):0!==s.elements.length&&s.elements.every((function(e){return i(e.name)})));if(c&&u)n.delete(t,r);else if(o&&c&&n.delete(t,o),s)if(u)n.replaceNode(t,r.importClause,e.factory.updateImportClause(r.importClause,r.importClause.isTypeOnly,o,void 0));else if(272===s.kind)for(var l=0,_=s.elements;l<_.length;l++){var d=_[l];i(d.name)&&n.delete(t,d)}}(t,r,n,i);break;case 268:i(r.name)&&n.delete(t,r);break;case 257:!function(t,r,n,i){var a=r.name;switch(a.kind){case 79:i(a)&&(r.initializer&&e.isRequireCall(r.initializer,!0)?n.delete(t,e.isVariableDeclarationList(r.parent)&&1===e.length(r.parent.declarations)?r.parent.parent:r):n.delete(t,a));break;case 204:break;case 203:if(a.elements.every((function(t){return e.isIdentifier(t.name)&&i(t.name)})))n.delete(t,e.isVariableDeclarationList(r.parent)&&1===r.parent.declarations.length?r.parent.parent:r);else for(var o=0,s=a.elements;o<s.length;o++){var c=s[o];e.isIdentifier(c.name)&&i(c.name)&&n.delete(t,c.name)}}}(t,r,n,i);break;default:e.Debug.assertNever(r,"Unexpected import decl kind ".concat(r.kind))}}function m(t){switch(t.kind){case 268:case 273:case 270:case 271:return!0;case 257:return y(t);case 205:return e.isVariableDeclaration(t.parent.parent)&&y(t.parent.parent);default:return!1}}function y(t){return e.isSourceFile(t.parent.parent.parent)&&!!t.initializer&&e.isRequireCall(t.initializer,!0)}function v(t,r,n){switch(t.kind){case 269:var i=t.importClause;if(!i)return;var a=i.name&&n(i.name)?i.name:void 0,o=i.namedBindings&&function(t,r){if(271===t.kind)return r(t.name)?t:void 0;var n=t.elements.filter((function(e){return r(e.name)}));return n.length?e.factory.createNamedImports(n):void 0}(i.namedBindings,n);return a||o?e.factory.createImportDeclaration(void 0,e.factory.createImportClause(!1,a,o),r,void 0):void 0;case 268:return n(t.name)?t:void 0;case 257:var s=function(t,r){switch(t.kind){case 79:return r(t)?t:void 0;case 204:return t;case 203:var n=t.elements.filter((function(t){return t.propertyName||!e.isIdentifier(t.name)||r(t.name)}));return n.length?e.factory.createObjectBindingPattern(n):void 0}}(t.name,n);return s?p(s,t.type,f(r),t.parent.flags):void 0;default:return e.Debug.assertNever(t,"Unexpected import kind ".concat(t.kind))}}function h(t,r,n){t.forEachChild((function t(i){if(e.isIdentifier(i)&&!e.isDeclarationName(i)){var a=r.getSymbolAtLocation(i);a&&n(a)}else i.forEachChild(t)}))}t.registerRefactor(r,{kinds:[i.kind],getAvailableActions:function(t){var a=s(t);return t.preferences.allowTextChangesInNewFiles&&a?[{name:r,description:n,actions:[i]}]:t.preferences.provideRefactorNotApplicableReason?[{name:r,description:n,actions:[o(o({},i),{notApplicableReason:e.getLocaleSpecificMessage(e.Diagnostics.Selection_is_not_a_valid_statement_or_statements)})]}]:e.emptyArray},getEditsForAction:function(t,n){e.Debug.assert(n===r,"Wrong refactor invoked");var i=e.Debug.checkDefined(s(t));return{edits:e.textChanges.ChangeTracker.with(t,(function(r){return n=t.file,o=t.program,s=i,c=r,p=t.host,y=t.preferences,C=o.getTypeChecker(),I=function(t,r,n){var i=new b,a=new b,o=new b,s=e.find(r,(function(e){return!!(2&e.transformFlags)})),c=S(s);c&&a.add(c);for(var u=0,l=r;u<l.length;u++)T(v=l[u],(function(t){i.add(e.Debug.checkDefined(e.isExpressionStatement(t)?n.getSymbolAtLocation(t.expression.left):t.symbol,"Need a symbol here"))}));for(var _=0,d=r;_<d.length;_++)h(v=d[_],n,(function(e){if(e.declarations)for(var r=0,n=e.declarations;r<n.length;r++){var s=n[r];m(s)?a.add(e):x(s)&&D(s)===t&&!i.has(e)&&o.add(e)}}));for(var p=a.clone(),f=new b,g=0,y=t.statements;g<y.length;g++){var v=y[g];e.contains(r,v)||(c&&2&v.transformFlags&&p.delete(c),h(v,n,(function(e){i.has(e)&&f.add(e),p.delete(e)})))}return{movedSymbols:i,newFileImportsFromOldFile:o,oldFileImportsFromNewFile:f,oldImportsNeededByNewFile:a,unusedImportsFromOldFile:p};function S(t){if(void 0!==t){var r=n.getJsxNamespace(t),i=n.resolveName(r,t,1920,!0);return i&&e.some(i.declarations,m)?i:void 0}}}(n,s.all,C),O=e.getDirectoryPath(n.fileName),M=e.extensionFromPath(n.fileName),L=function(t,r,n,i){for(var a=t,o=1;;o++){var s=e.combinePaths(n,a+r);if(!i.fileExists(s))return a;a="".concat(t,".").concat(o)}}((B=I.oldFileImportsFromNewFile,j=I.movedSymbols,B.forEachEntry(e.symbolNameNoDefault)||j.forEachEntry(e.symbolNameNoDefault)||"newFile"),M,O,p),R=L+M,c.createNewFile(n,e.combinePaths(O,R),function(t,r,n,i,o,s,c){var p=o.getTypeChecker(),m=e.takeWhile(t.statements,e.isPrologueDirective);if(void 0===t.externalModuleIndicator&&void 0===t.commonJsModuleIndicator&&0===r.oldImportsNeededByNewFile.size())return u(t,i.ranges,n),a(a([],m,!0),i.all,!0);var y=!!t.externalModuleIndicator,h=e.getQuotePreference(t,c),b=function(t,r,n,i){var a,o=[];return t.forEach((function(t){"default"===t.escapedName?a=e.factory.createIdentifier(e.symbolNameNoDefault(t)):o.push(t.name)})),d(a,o,r,n,i)}(r.oldFileImportsFromNewFile,s,y,h);b&&e.insertImports(n,t,b,!0),function(t,r,n,i,a){for(var o=0,s=t.statements;o<s.length;o++){var c=s[o];e.contains(r,c)||_(c,(function(e){return g(t,e,n,(function(e){return i.has(a.getSymbolAtLocation(e))}))}))}}(t,i.all,n,r.unusedImportsFromOldFile,p),u(t,i.ranges,n),function(t,r,n,i,a){for(var o=r.getTypeChecker(),s=function(r){if(r===n)return"continue";for(var s=function(s){_(s,(function(c){if(o.getSymbolAtLocation(l(c))===n.symbol){var u=function(t){var r=e.isBindingElement(t.parent)?e.getPropertySymbolFromBindingElement(o,t.parent):e.skipAlias(o.getSymbolAtLocation(t),o);return!!r&&i.has(r)};g(r,c,t,u);var _=e.combinePaths(e.getDirectoryPath(l(c).text),a),d=v(c,e.factory.createStringLiteral(_),u);d&&t.insertNodeAfter(r,s,d);var p=function(t){switch(t.kind){case 269:return t.importClause&&t.importClause.namedBindings&&271===t.importClause.namedBindings.kind?t.importClause.namedBindings.name:void 0;case 268:return t.name;case 257:return e.tryCast(t.name,e.isIdentifier);default:return e.Debug.assertNever(t,"Unexpected node kind ".concat(t.kind))}}(c);p&&function(t,r,n,i,a,o,s,c){var u=e.codefix.moduleSpecifierToValidIdentifier(a,99),l=!1,_=[];if(e.FindAllReferences.Core.eachSymbolReferenceInFile(s,n,r,(function(t){e.isPropertyAccessExpression(t.parent)&&(l=l||!!n.resolveName(u,t,67108863,!0),i.has(n.getSymbolAtLocation(t.parent.name))&&_.push(t))})),_.length){for(var d=l?e.getUniqueName(u,r):u,p=0,g=_;p<g.length;p++){var m=g[p];t.replaceNode(r,m,e.factory.createIdentifier(d))}t.insertNodeAfter(r,c,function(t,r,n){var i=e.factory.createIdentifier(r),a=e.factory.createStringLiteral(n);switch(t.kind){case 269:return e.factory.createImportDeclaration(void 0,e.factory.createImportClause(!1,void 0,e.factory.createNamespaceImport(i)),a,void 0);case 268:return e.factory.createImportEqualsDeclaration(void 0,!1,i,e.factory.createExternalModuleReference(a));case 257:return e.factory.createVariableDeclaration(i,void 0,void 0,f(a));default:return e.Debug.assertNever(t,"Unexpected node kind ".concat(t.kind))}}(c,a,o))}}(t,r,o,i,a,_,p,c)}}))},c=0,u=r.statements;c<u.length;c++)s(u[c])},c=0,u=r.getSourceFiles();c<u.length;c++)s(u[c])}(n,o,t,r.movedSymbols,s);var D=function(t,r,n,i,a,o,s){for(var c,u=[],p=0,f=t.statements;p<f.length;p++)_(f[p],(function(t){e.append(u,v(t,l(t),(function(e){return r.has(a.getSymbolAtLocation(e))})))}));var g=[],m=e.nodeSeenTracker();return n.forEach((function(r){if(r.declarations)for(var n=0,a=r.declarations;n<a.length;n++){var s=a[n];if(x(s)){var u=E(s);if(u){var l=k(s);m(l)&&N(t,l,u,i,o),e.hasSyntacticModifier(s,1024)?c=u:g.push(u.text)}}}})),e.append(u,d(c,g,e.removeFileExtension(e.getBaseFileName(t.fileName)),o,s)),u}(t,r.oldImportsNeededByNewFile,r.newFileImportsFromOldFile,n,p,y,h),C=function(t,r,n,i){return e.flatMap(r,(function(r){if(s=r,e.Debug.assert(e.isSourceFile(s.parent),"Node parent should be a SourceFile"),(S(s)||e.isVariableStatement(s))&&!A(t,r,i)&&T(r,(function(t){return n.has(e.Debug.checkDefined(t.symbol))}))){var o=function(e,t){return t?[F(e)]:function(e){return a([e],P(e).map(w),!0)}(e)}(r,i);if(o)return o}var s;return r}))}(t,i.all,r.oldFileImportsFromNewFile,y);return D.length&&C.length?a(a(a(a([],m,!0),D,!0),[4],!1),C,!0):a(a(a([],m,!0),D,!0),C,!0)}(n,I,c,s,o,L,y)),void function(t,r,n,i,a){var o=t.getCompilerOptions().configFile;if(o){var s=e.normalizePath(e.combinePaths(n,"..",i)),c=e.getRelativePathFromFile(o.fileName,s,a),u=o.statements[0]&&e.tryCast(o.statements[0].expression,e.isObjectLiteralExpression),l=u&&e.find(u.properties,(function(t){return e.isPropertyAssignment(t)&&e.isStringLiteral(t.name)&&"files"===t.name.text}));l&&e.isArrayLiteralExpression(l.initializer)&&r.insertNodeInListAfter(o,e.last(l.initializer.elements),e.factory.createStringLiteral(c),l.initializer.elements)}}(o,c,n.fileName,R,e.hostGetCanonicalFileName(p));var n,o,s,c,p,y,C,I,O,M,L,R,B,j})),renameFilename:void 0,renameLocation:void 0}}});var b=function(){function t(){this.map=new e.Map}return t.prototype.add=function(t){this.map.set(String(e.getSymbolId(t)),t)},t.prototype.has=function(t){return this.map.has(String(e.getSymbolId(t)))},t.prototype.delete=function(t){this.map.delete(String(e.getSymbolId(t)))},t.prototype.forEach=function(e){this.map.forEach(e)},t.prototype.forEachEntry=function(t){return e.forEachEntry(this.map,t)},t.prototype.clone=function(){var r=new t;return e.copyEntries(this.map,r.map),r},t.prototype.size=function(){return this.map.size},t}();function x(t){return S(t)&&e.isSourceFile(t.parent)||e.isVariableDeclaration(t)&&e.isSourceFile(t.parent.parent.parent)}function D(t){return e.isVariableDeclaration(t)?t.parent.parent.parent:t.parent}function S(e){switch(e.kind){case 259:case 260:case 264:case 263:case 262:case 261:case 268:return!0;default:return!1}}function T(t,r){switch(t.kind){case 259:case 260:case 264:case 263:case 262:case 261:case 268:return r(t);case 240:return e.firstDefined(t.declarationList.declarations,(function(e){return C(e.name,r)}));case 241:var n=t.expression;return e.isBinaryExpression(n)&&1===e.getAssignmentDeclarationKind(n)?r(t):void 0}}function C(t,r){switch(t.kind){case 79:return r(e.cast(t.parent,(function(t){return e.isVariableDeclaration(t)||e.isBindingElement(t)})));case 204:case 203:return e.firstDefined(t.elements,(function(t){return e.isOmittedExpression(t)?void 0:C(t.name,r)}));default:return e.Debug.assertNever(t,"Unexpected name kind ".concat(t.kind))}}function E(t){return e.isExpressionStatement(t)?e.tryCast(t.expression.left.name,e.isIdentifier):e.tryCast(t.name,e.isIdentifier)}function k(t){switch(t.kind){case 257:return t.parent.parent;case 205:return k(e.cast(t.parent.parent,(function(t){return e.isVariableDeclaration(t)||e.isBindingElement(t)})));default:return t}}function N(t,r,n,i,a){if(!A(t,r,a,n))if(a)e.isExpressionStatement(r)||i.insertExportModifier(t,r);else{var o=P(r);0!==o.length&&i.insertNodesAfter(t,r,o.map(w))}}function A(t,r,n,i){var a;return n?!e.isExpressionStatement(r)&&e.hasSyntacticModifier(r,1)||!(!i||!(null===(a=t.symbol.exports)||void 0===a?void 0:a.has(i.escapedText))):!!t.symbol&&!!t.symbol.exports&&P(r).some((function(r){return t.symbol.exports.has(e.escapeLeadingUnderscores(r))}))}function F(t){var r=e.canHaveModifiers(t)?e.concatenate([e.factory.createModifier(93)],e.getModifiers(t)):void 0;switch(t.kind){case 259:return e.factory.updateFunctionDeclaration(t,r,t.asteriskToken,t.name,t.typeParameters,t.parameters,t.type,t.body);case 260:var n=e.canHaveDecorators(t)?e.getDecorators(t):void 0;return e.factory.updateClassDeclaration(t,e.concatenate(n,r),t.name,t.typeParameters,t.heritageClauses,t.members);case 240:return e.factory.updateVariableStatement(t,r,t.declarationList);case 264:return e.factory.updateModuleDeclaration(t,r,t.name,t.body);case 263:return e.factory.updateEnumDeclaration(t,r,t.name,t.members);case 262:return e.factory.updateTypeAliasDeclaration(t,r,t.name,t.typeParameters,t.type);case 261:return e.factory.updateInterfaceDeclaration(t,r,t.name,t.typeParameters,t.heritageClauses,t.members);case 268:return e.factory.updateImportEqualsDeclaration(t,r,t.isTypeOnly,t.name,t.moduleReference);case 241:return e.Debug.fail();default:return e.Debug.assertNever(t,"Unexpected declaration kind ".concat(t.kind))}}function P(t){switch(t.kind){case 259:case 260:return[t.name.text];case 240:return e.mapDefined(t.declarationList.declarations,(function(t){return e.isIdentifier(t.name)?t.name.text:void 0}));case 264:case 263:case 262:case 261:case 268:return e.emptyArray;case 241:return e.Debug.fail("Can't export an ExpressionStatement");default:return e.Debug.assertNever(t,"Unexpected decl kind ".concat(t.kind))}}function w(t){return e.factory.createExpressionStatement(e.factory.createBinaryExpression(e.factory.createPropertyAccessExpression(e.factory.createIdentifier("exports"),e.factory.createIdentifier(t)),63,e.factory.createIdentifier(t)))}}(e.refactor||(e.refactor={}))}(_||(_={})),function(e){!function(t){!function(r){var n="Add or remove braces in an arrow function",i=e.Diagnostics.Add_or_remove_braces_in_an_arrow_function.message,a={name:"Add braces to arrow function",description:e.Diagnostics.Add_braces_to_arrow_function.message,kind:"refactor.rewrite.arrow.braces.add"},s={name:"Remove braces from arrow function",description:e.Diagnostics.Remove_braces_from_arrow_function.message,kind:"refactor.rewrite.arrow.braces.remove"};function c(r,n,i,o){void 0===i&&(i=!0);var c=e.getTokenAtPosition(r,n),u=e.getContainingFunction(c);if(!u)return{error:e.getLocaleSpecificMessage(e.Diagnostics.Could_not_find_a_containing_arrow_function)};if(!e.isArrowFunction(u))return{error:e.getLocaleSpecificMessage(e.Diagnostics.Containing_function_is_not_an_arrow_function)};if(e.rangeContainsRange(u,c)&&(!e.rangeContainsRange(u.body,c)||i)){if(t.refactorKindBeginsWith(a.kind,o)&&e.isExpression(u.body))return{func:u,addBraces:!0,expression:u.body};if(t.refactorKindBeginsWith(s.kind,o)&&e.isBlock(u.body)&&1===u.body.statements.length){var l=e.first(u.body.statements);if(e.isReturnStatement(l))return{func:u,addBraces:!1,expression:l.expression,returnStatement:l}}}}t.registerRefactor(n,{kinds:[s.kind],getEditsForAction:function(r,n){var i=r.file,o=r.startPosition,u=c(i,o);e.Debug.assert(u&&!t.isRefactorErrorInfo(u),"Expected applicable refactor info");var l,_=u.expression,d=u.returnStatement,p=u.func;if(n===a.name){var f=e.factory.createReturnStatement(_);l=e.factory.createBlock([f],!0),e.copyLeadingComments(_,f,i,3,!0)}else if(n===s.name&&d){var g=_||e.factory.createVoidZero();l=e.needsParentheses(g)?e.factory.createParenthesizedExpression(g):g,e.copyTrailingAsLeadingComments(d,l,i,3,!1),e.copyLeadingComments(d,l,i,3,!1),e.copyTrailingComments(d,l,i,3,!1)}else e.Debug.fail("invalid action");var m=e.textChanges.ChangeTracker.with(r,(function(e){e.replaceNode(i,p.body,l)}));return{renameFilename:void 0,renameLocation:void 0,edits:m}},getAvailableActions:function(r){var u=r.file,l=r.startPosition,_=r.triggerReason,d=c(u,l,"invoked"===_);if(!d)return e.emptyArray;if(!t.isRefactorErrorInfo(d))return[{name:n,description:i,actions:[d.addBraces?a:s]}];if(r.preferences.provideRefactorNotApplicableReason)return[{name:n,description:i,actions:[o(o({},a),{notApplicableReason:d.error}),o(o({},s),{notApplicableReason:d.error})]}];return e.emptyArray}})}(t.addOrRemoveBracesToArrowFunction||(t.addOrRemoveBracesToArrowFunction={}))}(e.refactor||(e.refactor={}))}(_||(_={})),function(e){!function(t){!function(r){var n="Convert parameters to destructured object",i=e.getLocaleSpecificMessage(e.Diagnostics.Convert_parameters_to_destructured_object),o={name:n,description:i,kind:"refactor.rewrite.parameters.toDestructured"};function s(t,r){var n=e.getContainingObjectLiteralElement(t);if(n){var i=r.getContextualTypeForObjectLiteralElement(n),a=null==i?void 0:i.getSymbol();if(a&&!(6&e.getCheckFlags(a)))return a}}function c(t){var r=t.node;return e.isImportSpecifier(r.parent)||e.isImportClause(r.parent)||e.isImportEqualsDeclaration(r.parent)||e.isNamespaceImport(r.parent)||e.isExportSpecifier(r.parent)||e.isExportAssignment(r.parent)?r:void 0}function u(t){if(e.isDeclaration(t.node.parent))return t.node}function l(t){if(t.node.parent){var r=t.node,n=r.parent;switch(n.kind){case 210:case 211:var i=e.tryCast(n,e.isCallOrNewExpression);if(i&&i.expression===r)return i;break;case 208:var a=e.tryCast(n,e.isPropertyAccessExpression);if(a&&a.parent&&a.name===r){var o=e.tryCast(a.parent,e.isCallOrNewExpression);if(o&&o.expression===a)return o}break;case 209:var s=e.tryCast(n,e.isElementAccessExpression);if(s&&s.parent&&s.argumentExpression===r){var c=e.tryCast(s.parent,e.isCallOrNewExpression);if(c&&c.expression===s)return c}}}}function _(t){if(t.node.parent){var r=t.node,n=r.parent;switch(n.kind){case 208:var i=e.tryCast(n,e.isPropertyAccessExpression);if(i&&i.expression===r)return i;break;case 209:var a=e.tryCast(n,e.isElementAccessExpression);if(a&&a.expression===r)return a}}}function d(t){var r=t.node;if(2===e.getMeaningFromLocation(r)||e.isExpressionWithTypeArgumentsInClassExtendsClause(r.parent))return r}function p(t,r,n){var i=e.getTouchingToken(t,r),a=e.getContainingFunctionDeclaration(i);if(!function(t){var r=e.findAncestor(t,e.isJSDocNode);if(r){var n=e.findAncestor(r,(function(t){return!e.isJSDocNode(t)}));return!!n&&e.isFunctionLikeDeclaration(n)}return!1}(i))return!(a&&function(t,r){var n;if(!function(t,r){return function(e){if(v(e))return e.length-1;return e.length}(t)>=1&&e.every(t,(function(t){return function(t,r){if(e.isRestParameter(t)){var n=r.getTypeAtLocation(t);if(!r.isArrayType(n)&&!r.isTupleType(n))return!1}return!t.modifiers&&e.isIdentifier(t.name)}(t,r)}))}(t.parameters,r))return!1;switch(t.kind){case 259:return m(t)&&g(t,r);case 171:if(e.isObjectLiteralExpression(t.parent)){var i=s(t.name,r);return 1===(null===(n=null==i?void 0:i.declarations)||void 0===n?void 0:n.length)&&g(t,r)}return g(t,r);case 173:return e.isClassDeclaration(t.parent)?m(t.parent)&&g(t,r):y(t.parent.parent)&&g(t,r);case 215:case 216:return y(t.parent)}return!1}(a,n)&&e.rangeContainsRange(a,i))||a.body&&e.rangeContainsRange(a.body,i)?void 0:a}function f(t){return e.isMethodSignature(t)&&(e.isInterfaceDeclaration(t.parent)||e.isTypeLiteralNode(t.parent))}function g(e,t){return!!e.body&&!t.isImplementationOfOverload(e)}function m(t){return!!t.name||!!e.findModifier(t,88)}function y(t){return e.isVariableDeclaration(t)&&e.isVarConst(t)&&e.isIdentifier(t.name)&&!t.type}function v(t){return t.length>0&&e.isThis(t[0].name)}function h(t){return v(t)&&(t=e.factory.createNodeArray(t.slice(1),t.hasTrailingComma)),t}function b(t,r){var n=h(t.parameters),i=e.isRestParameter(e.last(n)),a=i?r.slice(0,n.length-1):r,o=e.map(a,(function(t,r){var i,a,o=D(n[r]),s=(i=o,a=t,e.isIdentifier(a)&&e.getTextOfIdentifierOrLiteral(a)===i?e.factory.createShorthandPropertyAssignment(i):e.factory.createPropertyAssignment(i,a));return e.suppressLeadingAndTrailingTrivia(s.name),e.isPropertyAssignment(s)&&e.suppressLeadingAndTrailingTrivia(s.initializer),e.copyComments(t,s),s}));if(i&&r.length>=n.length){var s=r.slice(n.length-1),c=e.factory.createPropertyAssignment(D(e.last(n)),e.factory.createArrayLiteralExpression(s));o.push(c)}return e.factory.createObjectLiteralExpression(o,!1)}function x(t,r,n){var i,a,o,s=r.getTypeChecker(),c=h(t.parameters),u=e.map(c,(function(t){var r=e.factory.createBindingElement(void 0,void 0,D(t),e.isRestParameter(t)&&m(t)?e.factory.createArrayLiteralExpression():t.initializer);e.suppressLeadingAndTrailingTrivia(r),t.initializer&&r.initializer&&e.copyComments(t.initializer,r.initializer);return r})),l=e.factory.createObjectBindingPattern(u),_=(i=c,a=e.map(i,g),e.addEmitFlags(e.factory.createTypeLiteralNode(a),1));e.every(c,m)&&(o=e.factory.createObjectLiteralExpression());var d=e.factory.createParameterDeclaration(void 0,void 0,l,void 0,_,o);if(v(t.parameters)){var p=t.parameters[0],f=e.factory.createParameterDeclaration(void 0,void 0,p.name,void 0,p.type);return e.suppressLeadingAndTrailingTrivia(f.name),e.copyComments(p.name,f.name),p.type&&(e.suppressLeadingAndTrailingTrivia(f.type),e.copyComments(p.type,f.type)),e.factory.createNodeArray([f,d])}return e.factory.createNodeArray([d]);function g(t){var i,a,o=t.type;o||!t.initializer&&!e.isRestParameter(t)||(i=t,a=s.getTypeAtLocation(i),o=e.getTypeNodeIfAccessible(a,i,r,n));var c=e.factory.createPropertySignature(void 0,D(t),m(t)?e.factory.createToken(57):t.questionToken,o);return e.suppressLeadingAndTrailingTrivia(c),e.copyComments(t.name,c.name),t.type&&c.type&&e.copyComments(t.type,c.type),c}function m(t){if(e.isRestParameter(t)){var r=s.getTypeAtLocation(t);return!s.isTupleType(r)}return s.isOptionalParameter(t)}}function D(t){return e.getTextOfIdentifierOrLiteral(t.name)}t.registerRefactor(n,{kinds:[o.kind],getEditsForAction:function(t,r){e.Debug.assert(r===n,"Unexpected action name");var i=t.file,o=t.startPosition,g=t.program,m=t.cancellationToken,y=t.host,v=p(i,o,g.getTypeChecker());if(!v||!m)return;var h=function(t,r,n){var i=function(t){switch(t.kind){case 259:return t.name?[t.name]:[e.Debug.checkDefined(e.findModifier(t,88),"Nameless function declaration should be a default export")];case 171:return[t.name];case 173:var r=e.Debug.checkDefined(e.findChildOfKind(t,135,t.getSourceFile()),"Constructor declaration should have constructor keyword");return 228===t.parent.kind?[t.parent.parent.name,r]:[r];case 216:return[t.parent.name];case 215:return t.name?[t.name,t.parent.name]:[t.parent.name];default:return e.Debug.assertNever(t,"Unexpected function declaration kind ".concat(t.kind))}}(t),o=e.isConstructorDeclaration(t)?function(t){switch(t.parent.kind){case 260:var r=t.parent;return r.name?[r.name]:[e.Debug.checkDefined(e.findModifier(r,88),"Nameless class declaration should be a default export")];case 228:var n=t.parent,i=t.parent.parent,a=n.name;return a?[a,i.name]:[i.name]}}(t):[],p=e.deduplicate(a(a([],i,!0),o,!0),e.equateValues),g=r.getTypeChecker(),m=e.flatMap(p,(function(t){return e.FindAllReferences.getReferenceEntriesForNode(-1,t,r,r.getSourceFiles(),n)})),y=v(m);e.every(y.declarations,(function(t){return e.contains(p,t)}))||(y.valid=!1);return y;function v(r){for(var n={accessExpressions:[],typeUsages:[]},a={functionCalls:[],declarations:[],classReferences:n,valid:!0},p=e.map(i,h),m=e.map(o,h),y=e.isConstructorDeclaration(t),v=e.map(i,(function(e){return s(e,g)})),b=0,x=r;b<x.length;b++){var D=x[b];if(0!==D.kind){if(e.contains(v,h(D.node))){if(f(D.node.parent)){a.signature=D.node.parent;continue}if(T=l(D)){a.functionCalls.push(T);continue}}var S=s(D.node,g);if(S&&e.contains(v,S))if(C=u(D)){a.declarations.push(C);continue}if(e.contains(p,h(D.node))||e.isNewExpressionTarget(D.node)){var T;if(c(D))continue;if(C=u(D)){a.declarations.push(C);continue}if(T=l(D)){a.functionCalls.push(T);continue}}if(y&&e.contains(m,h(D.node))){var C;if(c(D))continue;if(C=u(D)){a.declarations.push(C);continue}var E=_(D);if(E){n.accessExpressions.push(E);continue}if(e.isClassDeclaration(t.parent)){var k=d(D);if(k){n.typeUsages.push(k);continue}}}a.valid=!1}else a.valid=!1}return a}function h(t){var r=g.getSymbolAtLocation(t);return r&&e.getSymbolTarget(r,g)}}(v,g,m);if(h.valid){var D=e.textChanges.ChangeTracker.with(t,(function(t){return function(t,r,n,i,a,o){var s=o.signature,c=e.map(x(a,r,n),(function(t){return e.getSynthesizedDeepClone(t)}));if(s){f(s,e.map(x(s,r,n),(function(t){return e.getSynthesizedDeepClone(t)})))}f(a,c);for(var u=e.sortAndDeduplicate(o.functionCalls,(function(t,r){return e.compareValues(t.pos,r.pos)})),l=0,_=u;l<_.length;l++){var d=_[l];if(d.arguments&&d.arguments.length){var p=e.getSynthesizedDeepClone(b(a,d.arguments),!0);i.replaceNodeRange(e.getSourceFileOfNode(d),e.first(d.arguments),e.last(d.arguments),p,{leadingTriviaOption:e.textChanges.LeadingTriviaOption.IncludeAll,trailingTriviaOption:e.textChanges.TrailingTriviaOption.Include})}}function f(r,n){i.replaceNodeRangeWithNodes(t,e.first(r.parameters),e.last(r.parameters),n,{joiner:", ",indentation:0,leadingTriviaOption:e.textChanges.LeadingTriviaOption.IncludeAll,trailingTriviaOption:e.textChanges.TrailingTriviaOption.Include})}}(i,g,y,t,v,h)}));return{renameFilename:void 0,renameLocation:void 0,edits:D}}return{edits:[]}},getAvailableActions:function(t){var r=t.file,a=t.startPosition;return e.isSourceFileJS(r)?e.emptyArray:p(r,a,t.program.getTypeChecker())?[{name:n,description:i,actions:[o]}]:e.emptyArray}})}(t.convertParamsToDestructuredObject||(t.convertParamsToDestructuredObject={}))}(e.refactor||(e.refactor={}))}(_||(_={})),function(e){!function(t){!function(r){var n="Convert to template string",i=e.getLocaleSpecificMessage(e.Diagnostics.Convert_to_template_string),a={name:n,description:i,kind:"refactor.rewrite.string"};function s(t,r){var n=e.getTokenAtPosition(t,r),i=u(n);return!l(i).isValidConcatenation&&e.isParenthesizedExpression(i.parent)&&e.isBinaryExpression(i.parent.parent)?i.parent.parent:n}function c(t,r){var n=u(r),i=t.file,a=function(t,r){var n=t.nodes,i=t.operators,a=function(t,r){return function(n,i){n<t.length&&e.copyTrailingComments(t[n],i,r,3,!1)}}(i,r),o=function(t,r,n){return function(i,a){for(;i.length>0;){var o=i.shift();e.copyTrailingComments(t[o],a,r,3,!1),n(o,a)}}}(n,r,a),s=d(0,n),c=s[0],u=s[1],l=s[2],f=s[3];if(c===n.length){var g=e.factory.createNoSubstitutionTemplateLiteral(u,l);return o(f,g),g}var m=[],y=e.factory.createTemplateHead(u,l);o(f,y);for(var v,h=function(t){var r=function(t){e.isParenthesizedExpression(t)&&(p(t),t=t.expression);return t}(n[t]);a(t,r);var i=d(t+1,n),s=i[0],c=i[1],u=i[2],l=i[3],f=(t=s-1)===n.length-1;if(e.isTemplateExpression(r)){var g=e.map(r.templateSpans,(function(t,n){p(t);var i=n===r.templateSpans.length-1,a=t.literal.text+(i?c:""),o=_(t.literal)+(i?u:"");return e.factory.createTemplateSpan(t.expression,f&&i?e.factory.createTemplateTail(a,o):e.factory.createTemplateMiddle(a,o))}));m.push.apply(m,g)}else{var y=f?e.factory.createTemplateTail(c,u):e.factory.createTemplateMiddle(c,u);o(l,y),m.push(e.factory.createTemplateSpan(r,y))}v=t},b=c;b<n.length;b++)h(b),b=v;return e.factory.createTemplateExpression(y,m)}(l(n),i),o=e.getTrailingCommentRanges(i.text,n.end);if(o){var s=o[o.length-1],c={pos:o[0].pos,end:s.end};return e.textChanges.ChangeTracker.with(t,(function(e){e.deleteRange(i,c),e.replaceNode(i,n,a)}))}return e.textChanges.ChangeTracker.with(t,(function(e){return e.replaceNode(i,n,a)}))}function u(t){return e.findAncestor(t.parent,(function(t){switch(t.kind){case 208:case 209:return!1;case 225:case 223:return!(e.isBinaryExpression(t.parent)&&(r=t.parent,63!==r.operatorToken.kind));default:return"quit"}var r}))||t}function l(t){var r=function(t){if(!e.isBinaryExpression(t))return{nodes:[t],operators:[],validOperators:!0,hasString:e.isStringLiteral(t)||e.isNoSubstitutionTemplateLiteral(t)};var n=r(t.left),i=n.nodes,a=n.operators,o=n.hasString,s=n.validOperators;if(!(o||e.isStringLiteral(t.right)||e.isTemplateExpression(t.right)))return{nodes:[t],operators:[],hasString:!1,validOperators:!0};var c=39===t.operatorToken.kind,u=s&&c;return i.push(t.right),a.push(t.operatorToken),{nodes:i,operators:a,hasString:!0,validOperators:u}},n=r(t),i=n.nodes,a=n.operators,o=n.validOperators,s=n.hasString;return{nodes:i,operators:a,isValidConcatenation:o&&s}}t.registerRefactor(n,{kinds:[a.kind],getEditsForAction:function(t,r){var n=t.file,a=t.startPosition,o=s(n,a);if(r===i)return{edits:c(t,o)};return e.Debug.fail("invalid action")},getAvailableActions:function(t){var r=t.file,c=t.startPosition,_=u(s(r,c)),d={name:n,description:i,actions:[]};if(e.isBinaryExpression(_)&&l(_).isValidConcatenation)return d.actions.push(a),[d];if(t.preferences.provideRefactorNotApplicableReason)return d.actions.push(o(o({},a),{notApplicableReason:e.getLocaleSpecificMessage(e.Diagnostics.Can_only_convert_string_concatenation)})),[d];return e.emptyArray}});function _(t){var r=e.isTemplateHead(t)||e.isTemplateMiddle(t)?-2:-1;return e.getTextOfNode(t).slice(1,r)}function d(t,r){for(var n=[],i="",a="";t<r.length;){var o=r[t];if(!e.isStringLiteralLike(o)){if(e.isTemplateExpression(o)){i+=o.head.text,a+=_(o.head);break}break}i+=o.text,a+=e.getTextOfNode(o).slice(1,-1).replace(/\\.|[$`]/g,(function(e){return"\\"===e[0]?e:"\\"+e})),n.push(t),t++}return[t,i,a,n]}function p(t){var r=t.getSourceFile();e.copyTrailingComments(t,t.expression,r,3,!1),e.copyTrailingAsLeadingComments(t.expression,t.expression,r,3,!1)}}(t.convertStringOrTemplateLiteral||(t.convertStringOrTemplateLiteral={}))}(e.refactor||(e.refactor={}))}(_||(_={})),function(e){!function(t){!function(r){var n="Convert arrow function or function expression",i=e.getLocaleSpecificMessage(e.Diagnostics.Convert_arrow_function_or_function_expression),a={name:"Convert to anonymous function",description:e.getLocaleSpecificMessage(e.Diagnostics.Convert_to_anonymous_function),kind:"refactor.rewrite.function.anonymous"},s={name:"Convert to named function",description:e.getLocaleSpecificMessage(e.Diagnostics.Convert_to_named_function),kind:"refactor.rewrite.function.named"},c={name:"Convert to arrow function",description:e.getLocaleSpecificMessage(e.Diagnostics.Convert_to_arrow_function),kind:"refactor.rewrite.function.arrow"};function u(t){var r=!1;return t.forEachChild((function t(n){e.isThis(n)?r=!0:e.isClassLike(n)||e.isFunctionDeclaration(n)||e.isFunctionExpression(n)||e.forEachChild(n,t)})),r}function l(t,r,n){var i=e.getTokenAtPosition(t,r),a=n.getTypeChecker(),o=function(t,r,n){if(!function(t){return e.isVariableDeclaration(t)||e.isVariableDeclarationList(t)&&1===t.declarations.length}(n))return;var i=(e.isVariableDeclaration(n)?n:e.first(n.declarations)).initializer;if(i&&(e.isArrowFunction(i)||e.isFunctionExpression(i)&&!d(t,r,i)))return i;return}(t,a,i.parent);if(o&&!u(o.body)&&!a.containsArgumentsReference(o))return{selectedVariableDeclaration:!0,func:o};var s=e.getContainingFunction(i);if(s&&(e.isFunctionExpression(s)||e.isArrowFunction(s))&&!e.rangeContainsRange(s.body,i)&&!u(s.body)&&!a.containsArgumentsReference(s)){if(e.isFunctionExpression(s)&&d(t,a,s))return;return{selectedVariableDeclaration:!1,func:s}}}function _(t){if(e.isExpression(t)){var r=e.factory.createReturnStatement(t),n=t.getSourceFile();return e.suppressLeadingAndTrailingTrivia(r),e.copyTrailingAsLeadingComments(t,r,n,void 0,!0),e.factory.createBlock([r],!0)}return t}function d(t,r,n){return!!n.name&&e.FindAllReferences.Core.isSymbolReferencedInFile(n.name,r,t)}t.registerRefactor(n,{kinds:[a.kind,s.kind,c.kind],getEditsForAction:function(t,r){var n=t.file,i=t.startPosition,o=t.program,u=l(n,i,o);if(!u)return;var d=u.func,p=[];switch(r){case a.name:p.push.apply(p,function(t,r){var n=t.file,i=_(r.body),a=e.factory.createFunctionExpression(r.modifiers,r.asteriskToken,void 0,r.typeParameters,r.parameters,r.type,i);return e.textChanges.ChangeTracker.with(t,(function(e){return e.replaceNode(n,r,a)}))}(t,d));break;case s.name:var f=function(t){var r=t.parent;if(!e.isVariableDeclaration(r)||!e.isVariableDeclarationInVariableStatement(r))return;var n=r.parent,i=n.parent;return e.isVariableDeclarationList(n)&&e.isVariableStatement(i)&&e.isIdentifier(r.name)?{variableDeclaration:r,variableDeclarationList:n,statement:i,name:r.name}:void 0}(d);if(!f)return;p.push.apply(p,function(t,r,n){var i=t.file,a=_(r.body),o=n.variableDeclaration,s=n.variableDeclarationList,c=n.statement,u=n.name;e.suppressLeadingTrivia(c);var l=1&e.getCombinedModifierFlags(o)|e.getEffectiveModifierFlags(r),d=e.factory.createModifiersFromModifierFlags(l),p=e.factory.createFunctionDeclaration(e.length(d)?d:void 0,r.asteriskToken,u,r.typeParameters,r.parameters,r.type,a);return 1===s.declarations.length?e.textChanges.ChangeTracker.with(t,(function(e){return e.replaceNode(i,c,p)})):e.textChanges.ChangeTracker.with(t,(function(e){e.delete(i,o),e.insertNodeAfter(i,c,p)}))}(t,d,f));break;case c.name:if(!e.isFunctionExpression(d))return;p.push.apply(p,function(t,r){var n,i=t.file,a=r.body.statements,o=a[0];!function(t,r){return 1===t.statements.length&&e.isReturnStatement(r)&&!!r.expression}(r.body,o)?n=r.body:(n=o.expression,e.suppressLeadingAndTrailingTrivia(n),e.copyComments(o,n));var s=e.factory.createArrowFunction(r.modifiers,r.typeParameters,r.parameters,r.type,e.factory.createToken(38),n);return e.textChanges.ChangeTracker.with(t,(function(e){return e.replaceNode(i,r,s)}))}(t,d));break;default:return e.Debug.fail("invalid action")}return{renameFilename:void 0,renameLocation:void 0,edits:p}},getAvailableActions:function(r){var u=r.file,_=r.startPosition,d=r.program,p=r.kind,f=l(u,_,d);if(!f)return e.emptyArray;var g=f.selectedVariableDeclaration,m=f.func,y=[],v=[];if(t.refactorKindBeginsWith(s.kind,p)){(h=g||e.isArrowFunction(m)&&e.isVariableDeclaration(m.parent)?void 0:e.getLocaleSpecificMessage(e.Diagnostics.Could_not_convert_to_named_function))?v.push(o(o({},s),{notApplicableReason:h})):y.push(s)}if(t.refactorKindBeginsWith(a.kind,p)){(h=!g&&e.isArrowFunction(m)?void 0:e.getLocaleSpecificMessage(e.Diagnostics.Could_not_convert_to_anonymous_function))?v.push(o(o({},a),{notApplicableReason:h})):y.push(a)}if(t.refactorKindBeginsWith(c.kind,p)){var h;(h=e.isFunctionExpression(m)?void 0:e.getLocaleSpecificMessage(e.Diagnostics.Could_not_convert_to_arrow_function))?v.push(o(o({},c),{notApplicableReason:h})):y.push(c)}return[{name:n,description:i,actions:0===y.length&&r.preferences.provideRefactorNotApplicableReason?v:y}]}})}(t.convertArrowFunctionOrFunctionExpression||(t.convertArrowFunctionOrFunctionExpression={}))}(e.refactor||(e.refactor={}))}(_||(_={})),function(e){!function(t){!function(r){var n="Infer function return type",i=e.Diagnostics.Infer_function_return_type.message,a={name:n,description:i,kind:"refactor.rewrite.function.returnType"};function s(r){if(!e.isInJSFile(r.file)&&t.refactorKindBeginsWith(a.kind,r.kind)){var n=e.getTokenAtPosition(r.file,r.startPosition),i=e.findAncestor(n,(function(t){return e.isBlock(t)||t.parent&&e.isArrowFunction(t.parent)&&(38===t.kind||t.parent.body===t)?"quit":function(e){switch(e.kind){case 259:case 215:case 216:case 171:return!0;default:return!1}}(t)}));if(!i||!i.body||i.type)return{error:e.getLocaleSpecificMessage(e.Diagnostics.Return_type_must_be_inferred_from_a_function)};var o=r.program.getTypeChecker(),s=function(t,r){if(t.isImplementationOfOverload(r)){var n=t.getTypeAtLocation(r).getCallSignatures();if(n.length>1)return t.getUnionType(e.mapDefined(n,(function(e){return e.getReturnType()})))}var i=t.getSignatureFromDeclaration(r);if(i)return t.getReturnTypeOfSignature(i)}(o,i);if(!s)return{error:e.getLocaleSpecificMessage(e.Diagnostics.Could_not_determine_function_return_type)};var c=o.typeToTypeNode(s,i,1);return c?{declaration:i,returnTypeNode:c}:void 0}}t.registerRefactor(n,{kinds:[a.kind],getEditsForAction:function(r){var n=s(r);if(n&&!t.isRefactorErrorInfo(n)){return{renameFilename:void 0,renameLocation:void 0,edits:e.textChanges.ChangeTracker.with(r,(function(t){return i=r.file,a=t,o=n.declaration,s=n.returnTypeNode,c=e.findChildOfKind(o,21,i),u=e.isArrowFunction(o)&&void 0===c,void((l=u?e.first(o.parameters):c)&&(u&&(a.insertNodeBefore(i,l,e.factory.createToken(20)),a.insertNodeAfter(i,l,e.factory.createToken(21))),a.insertNodeAt(i,l.end,s,{prefix:": "})));var i,a,o,s,c,u,l}))}}return},getAvailableActions:function(r){var c=s(r);if(!c)return e.emptyArray;if(!t.isRefactorErrorInfo(c))return[{name:n,description:i,actions:[a]}];if(r.preferences.provideRefactorNotApplicableReason)return[{name:n,description:i,actions:[o(o({},a),{notApplicableReason:c.error})]}];return e.emptyArray}})}(t.inferFunctionReturnType||(t.inferFunctionReturnType={}))}(e.refactor||(e.refactor={}))}(_||(_={})),function(e){function t(t,n,i,a){var o=e.isNodeKind(t)?new r(t,n,i):79===t?new u(79,n,i):80===t?new _(80,n,i):new c(t,n,i);return o.parent=a,o.flags=50720768&a.flags,o}e.servicesVersion="0.8";var r=function(){function r(e,t,r){this.pos=t,this.end=r,this.flags=0,this.modifierFlagsCache=0,this.transformFlags=0,this.parent=void 0,this.kind=e}return r.prototype.assertHasRealPosition=function(t){e.Debug.assert(!e.positionIsSynthesized(this.pos)&&!e.positionIsSynthesized(this.end),t||"Node must have a real position for this operation")},r.prototype.getSourceFile=function(){return e.getSourceFileOfNode(this)},r.prototype.getStart=function(t,r){return this.assertHasRealPosition(),e.getTokenPosOfNode(this,t,r)},r.prototype.getFullStart=function(){return this.assertHasRealPosition(),this.pos},r.prototype.getEnd=function(){return this.assertHasRealPosition(),this.end},r.prototype.getWidth=function(e){return this.assertHasRealPosition(),this.getEnd()-this.getStart(e)},r.prototype.getFullWidth=function(){return this.assertHasRealPosition(),this.end-this.pos},r.prototype.getLeadingTriviaWidth=function(e){return this.assertHasRealPosition(),this.getStart(e)-this.pos},r.prototype.getFullText=function(e){return this.assertHasRealPosition(),(e||this.getSourceFile()).text.substring(this.pos,this.end)},r.prototype.getText=function(e){return this.assertHasRealPosition(),e||(e=this.getSourceFile()),e.text.substring(this.getStart(e),this.getEnd())},r.prototype.getChildCount=function(e){return this.getChildren(e).length},r.prototype.getChildAt=function(e,t){return this.getChildren(t)[e]},r.prototype.getChildren=function(r){return this.assertHasRealPosition("Node without a real position cannot be scanned and thus has no token nodes - use forEachChild and collect the result if that's fine"),this._children||(this._children=function(r,i){if(!e.isNodeKind(r.kind))return e.emptyArray;var a=[];if(e.isJSDocCommentContainingNode(r))return r.forEachChild((function(e){a.push(e)})),a;e.scanner.setText((i||r.getSourceFile()).text);var o=r.pos,s=function(e){n(a,o,e.pos,r),a.push(e),o=e.end},c=function(e){n(a,o,e.pos,r),a.push(function(e,r){var i=t(351,e.pos,e.end,r);i._children=[];for(var a=e.pos,o=0,s=e;o<s.length;o++){var c=s[o];n(i._children,a,c.pos,r),i._children.push(c),a=c.end}return n(i._children,a,e.end,r),i}(e,r)),o=e.end};return e.forEach(r.jsDoc,s),o=r.pos,r.forEachChild(s,c),n(a,o,r.end,r),e.scanner.setText(void 0),a}(this,r))},r.prototype.getFirstToken=function(t){this.assertHasRealPosition();var r=this.getChildren(t);if(r.length){var n=e.find(r,(function(e){return e.kind<312||e.kind>350}));return n.kind<163?n:n.getFirstToken(t)}},r.prototype.getLastToken=function(t){this.assertHasRealPosition();var r=this.getChildren(t),n=e.lastOrUndefined(r);if(n)return n.kind<163?n:n.getLastToken(t)},r.prototype.forEachChild=function(t,r){return e.forEachChild(this,t,r)},r}();function n(r,n,i,a){for(e.scanner.setTextPos(n);n<i;){var o=e.scanner.scan(),s=e.scanner.getTextPos();if(s<=i&&(79===o&&e.Debug.fail("Did not expect ".concat(e.Debug.formatSyntaxKind(a.kind)," to have an Identifier in its trivia")),r.push(t(o,n,s,a))),n=s,1===o)break}}var i=function(){function t(e,t){this.pos=e,this.end=t,this.flags=0,this.modifierFlagsCache=0,this.transformFlags=0,this.parent=void 0}return t.prototype.getSourceFile=function(){return e.getSourceFileOfNode(this)},t.prototype.getStart=function(t,r){return e.getTokenPosOfNode(this,t,r)},t.prototype.getFullStart=function(){return this.pos},t.prototype.getEnd=function(){return this.end},t.prototype.getWidth=function(e){return this.getEnd()-this.getStart(e)},t.prototype.getFullWidth=function(){return this.end-this.pos},t.prototype.getLeadingTriviaWidth=function(e){return this.getStart(e)-this.pos},t.prototype.getFullText=function(e){return(e||this.getSourceFile()).text.substring(this.pos,this.end)},t.prototype.getText=function(e){return e||(e=this.getSourceFile()),e.text.substring(this.getStart(e),this.getEnd())},t.prototype.getChildCount=function(){return this.getChildren().length},t.prototype.getChildAt=function(e){return this.getChildren()[e]},t.prototype.getChildren=function(){return 1===this.kind&&this.jsDoc||e.emptyArray},t.prototype.getFirstToken=function(){},t.prototype.getLastToken=function(){},t.prototype.forEachChild=function(){},t}(),s=function(){function t(e,t){this.flags=e,this.escapedName=t}return t.prototype.getFlags=function(){return this.flags},Object.defineProperty(t.prototype,"name",{get:function(){return e.symbolName(this)},enumerable:!1,configurable:!0}),t.prototype.getEscapedName=function(){return this.escapedName},t.prototype.getName=function(){return this.name},t.prototype.getDeclarations=function(){return this.declarations},t.prototype.getDocumentationComment=function(t){if(!this.documentationComment)if(this.documentationComment=e.emptyArray,!this.declarations&&this.target&&this.target.tupleLabelDeclaration){var r=this.target.tupleLabelDeclaration;this.documentationComment=m([r],t)}else this.documentationComment=m(this.declarations,t);return this.documentationComment},t.prototype.getContextualDocumentationComment=function(t,r){if(t){if(e.isGetAccessor(t)&&(this.contextualGetAccessorDocumentationComment||(this.contextualGetAccessorDocumentationComment=m(e.filter(this.declarations,e.isGetAccessor),r)),e.length(this.contextualGetAccessorDocumentationComment)))return this.contextualGetAccessorDocumentationComment;if(e.isSetAccessor(t)&&(this.contextualSetAccessorDocumentationComment||(this.contextualSetAccessorDocumentationComment=m(e.filter(this.declarations,e.isSetAccessor),r)),e.length(this.contextualSetAccessorDocumentationComment)))return this.contextualSetAccessorDocumentationComment}return this.getDocumentationComment(r)},t.prototype.getJsDocTags=function(e){return void 0===this.tags&&(this.tags=g(this.declarations,e)),this.tags},t.prototype.getContextualJsDocTags=function(t,r){if(t){if(e.isGetAccessor(t)&&(this.contextualGetAccessorTags||(this.contextualGetAccessorTags=g(e.filter(this.declarations,e.isGetAccessor),r)),e.length(this.contextualGetAccessorTags)))return this.contextualGetAccessorTags;if(e.isSetAccessor(t)&&(this.contextualSetAccessorTags||(this.contextualSetAccessorTags=g(e.filter(this.declarations,e.isSetAccessor),r)),e.length(this.contextualSetAccessorTags)))return this.contextualSetAccessorTags}return this.getJsDocTags(r)},t}(),c=function(e){function t(t,r,n){var i=e.call(this,r,n)||this;return i.kind=t,i}return l(t,e),t}(i),u=function(t){function r(e,r,n){var i=t.call(this,r,n)||this;return i.kind=79,i}return l(r,t),Object.defineProperty(r.prototype,"text",{get:function(){return e.idText(this)},enumerable:!1,configurable:!0}),r}(i);u.prototype.kind=79;var _=function(t){function r(e,r,n){return t.call(this,r,n)||this}return l(r,t),Object.defineProperty(r.prototype,"text",{get:function(){return e.idText(this)},enumerable:!1,configurable:!0}),r}(i);_.prototype.kind=80;var d=function(){function t(e,t){this.checker=e,this.flags=t}return t.prototype.getFlags=function(){return this.flags},t.prototype.getSymbol=function(){return this.symbol},t.prototype.getProperties=function(){return this.checker.getPropertiesOfType(this)},t.prototype.getProperty=function(e){return this.checker.getPropertyOfType(this,e)},t.prototype.getApparentProperties=function(){return this.checker.getAugmentedPropertiesOfType(this)},t.prototype.getCallSignatures=function(){return this.checker.getSignaturesOfType(this,0)},t.prototype.getConstructSignatures=function(){return this.checker.getSignaturesOfType(this,1)},t.prototype.getStringIndexType=function(){return this.checker.getIndexTypeOfType(this,0)},t.prototype.getNumberIndexType=function(){return this.checker.getIndexTypeOfType(this,1)},t.prototype.getBaseTypes=function(){return this.isClassOrInterface()?this.checker.getBaseTypes(this):void 0},t.prototype.isNullableType=function(){return this.checker.isNullableType(this)},t.prototype.getNonNullableType=function(){return this.checker.getNonNullableType(this)},t.prototype.getNonOptionalType=function(){return this.checker.getNonOptionalType(this)},t.prototype.getConstraint=function(){return this.checker.getBaseConstraintOfType(this)},t.prototype.getDefault=function(){return this.checker.getDefaultFromTypeParameter(this)},t.prototype.isUnion=function(){return!!(1048576&this.flags)},t.prototype.isIntersection=function(){return!!(2097152&this.flags)},t.prototype.isUnionOrIntersection=function(){return!!(3145728&this.flags)},t.prototype.isLiteral=function(){return!!(384&this.flags)},t.prototype.isStringLiteral=function(){return!!(128&this.flags)},t.prototype.isNumberLiteral=function(){return!!(256&this.flags)},t.prototype.isTypeParameter=function(){return!!(262144&this.flags)},t.prototype.isClassOrInterface=function(){return!!(3&e.getObjectFlags(this))},t.prototype.isClass=function(){return!!(1&e.getObjectFlags(this))},t.prototype.isIndexType=function(){return!!(4194304&this.flags)},Object.defineProperty(t.prototype,"typeArguments",{get:function(){if(4&e.getObjectFlags(this))return this.checker.getTypeArguments(this)},enumerable:!1,configurable:!0}),t}(),p=function(){function t(e,t){this.checker=e,this.flags=t}return t.prototype.getDeclaration=function(){return this.declaration},t.prototype.getTypeParameters=function(){return this.typeParameters},t.prototype.getParameters=function(){return this.parameters},t.prototype.getReturnType=function(){return this.checker.getReturnTypeOfSignature(this)},t.prototype.getTypeParameterAtPosition=function(t){var r=this.checker.getParameterType(this,t);if(r.isIndexType()&&e.isThisTypeParameter(r.type)){var n=r.type.getConstraint();if(n)return this.checker.getIndexType(n)}return r},t.prototype.getDocumentationComment=function(){return this.documentationComment||(this.documentationComment=m(e.singleElementArray(this.declaration),this.checker))},t.prototype.getJsDocTags=function(){return this.jsDocTags||(this.jsDocTags=g(e.singleElementArray(this.declaration),this.checker))},t}();function f(t){return e.getJSDocTags(t).some((function(e){return"inheritDoc"===e.tagName.text||"inheritdoc"===e.tagName.text}))}function g(t,r){if(!t)return e.emptyArray;var n=e.JsDoc.getJsDocTagsFromDeclarations(t,r);if(r&&(0===n.length||t.some(f)))for(var i=new e.Set,o=function(e){var t=y(r,e,(function(t){var n;if(!i.has(t))return i.add(t),174===e.kind||175===e.kind?t.getContextualJsDocTags(e,r):1===(null===(n=t.declarations)||void 0===n?void 0:n.length)?t.getJsDocTags():void 0}));t&&(n=a(a([],t,!0),n,!0))},s=0,c=t;s<c.length;s++){o(c[s])}return n}function m(t,r){if(!t)return e.emptyArray;var n=e.JsDoc.getJsDocCommentsFromDeclarations(t,r);if(r&&(0===n.length||t.some(f)))for(var i=new e.Set,a=function(t){var a=y(r,t,(function(e){if(!i.has(e))return i.add(e),174===t.kind||175===t.kind?e.getContextualDocumentationComment(t,r):e.getDocumentationComment(r)}));a&&(n=0===n.length?a.slice():a.concat(e.lineBreakPart(),n))},o=0,s=t;o<s.length;o++){a(s[o])}return n}function y(t,r,n){var i,a=173===(null===(i=r.parent)||void 0===i?void 0:i.kind)?r.parent.parent:r.parent;if(a){var o=e.hasStaticModifier(r);return e.firstDefined(e.getAllSuperTypeNodes(a),(function(e){var i=t.getTypeAtLocation(e),a=o&&i.symbol?t.getTypeOfSymbol(i.symbol):i,s=t.getPropertyOfType(a,r.symbol.name);return s?n(s):void 0}))}}var v=function(t){function r(e,r,n){var i=t.call(this,e,r,n)||this;return i.kind=308,i}return l(r,t),r.prototype.update=function(t,r){return e.updateSourceFile(this,t,r)},r.prototype.getLineAndCharacterOfPosition=function(t){return e.getLineAndCharacterOfPosition(this,t)},r.prototype.getLineStarts=function(){return e.getLineStarts(this)},r.prototype.getPositionOfLineAndCharacter=function(t,r,n){return e.computePositionOfLineAndCharacter(e.getLineStarts(this),t,r,this.text,n)},r.prototype.getLineEndOfPosition=function(e){var t,r=this.getLineAndCharacterOfPosition(e).line,n=this.getLineStarts();r+1>=n.length&&(t=this.getEnd()),t||(t=n[r+1]-1);var i=this.getFullText();return"\n"===i[t]&&"\r"===i[t-1]?t-1:t},r.prototype.getNamedDeclarations=function(){return this.namedDeclarations||(this.namedDeclarations=this.computeNamedDeclarations()),this.namedDeclarations},r.prototype.computeNamedDeclarations=function(){var t=e.createMultiMap();return this.forEachChild((function i(a){switch(a.kind){case 259:case 215:case 171:case 170:var o=a,s=n(o);if(s){var c=function(e){var r=t.get(e);r||t.set(e,r=[]);return r}(s),u=e.lastOrUndefined(c);u&&o.parent===u.parent&&o.symbol===u.symbol?o.body&&!u.body&&(c[c.length-1]=o):c.push(o)}e.forEachChild(a,i);break;case 260:case 228:case 261:case 262:case 263:case 264:case 268:case 278:case 273:case 270:case 271:case 174:case 175:case 184:r(a),e.forEachChild(a,i);break;case 166:if(!e.hasSyntacticModifier(a,16476))break;case 257:case 205:var l=a;if(e.isBindingPattern(l.name)){e.forEachChild(l.name,i);break}l.initializer&&i(l.initializer);case 302:case 169:case 168:r(a);break;case 275:var _=a;_.exportClause&&(e.isNamedExports(_.exportClause)?e.forEach(_.exportClause.elements,i):i(_.exportClause.name));break;case 269:var d=a.importClause;d&&(d.name&&r(d.name),d.namedBindings&&(271===d.namedBindings.kind?r(d.namedBindings):e.forEach(d.namedBindings.elements,i)));break;case 223:0!==e.getAssignmentDeclarationKind(a)&&r(a);default:e.forEachChild(a,i)}})),t;function r(e){var r=n(e);r&&t.add(r,e)}function n(t){var r=e.getNonAssignedNameOfDeclaration(t);return r&&(e.isComputedPropertyName(r)&&e.isPropertyAccessExpression(r.expression)?r.expression.name.text:e.isPropertyName(r)?e.getNameFromPropertyName(r):void 0)}},r}(r),h=function(){function t(e,t,r){this.fileName=e,this.text=t,this.skipTrivia=r}return t.prototype.getLineAndCharacterOfPosition=function(t){return e.getLineAndCharacterOfPosition(this,t)},t}();function b(t){var r=!0;for(var n in t)if(e.hasProperty(t,n)&&!x(n)){r=!1;break}if(r)return t;var i={};for(var n in t){if(e.hasProperty(t,n))i[x(n)?n:n.charAt(0).toLowerCase()+n.substr(1)]=t[n]}return i}function x(e){return!e.length||e.charAt(0)===e.charAt(0).toLowerCase()}function D(){return{target:1,jsx:1}}e.toEditorSettings=b,e.displayPartsToString=function(t){return t?e.map(t,(function(e){return e.text})).join(""):""},e.getDefaultCompilerOptions=D,e.getSupportedCodeFixes=function(){return e.codefix.getSupportedErrorCodes()};var S=function(){function t(e){this.host=e}return t.prototype.getCurrentSourceFile=function(t){var r,n,i,a,o,s,c,u,l=this.host.getScriptSnapshot(t);if(!l)throw new Error("Could not find file: '"+t+"'.");var _,d=e.getScriptKind(t,this.host),p=this.host.getScriptVersion(t);if(this.currentFileName!==t)_=C(t,l,{languageVersion:99,impliedNodeFormat:e.getImpliedNodeFormatForFile(e.toPath(t,this.host.getCurrentDirectory(),(null===(i=null===(n=(r=this.host).getCompilerHost)||void 0===n?void 0:n.call(r))||void 0===i?void 0:i.getCanonicalFileName)||e.hostGetCanonicalFileName(this.host)),null===(u=null===(c=null===(s=null===(o=(a=this.host).getCompilerHost)||void 0===o?void 0:o.call(a))||void 0===s?void 0:s.getModuleResolutionCache)||void 0===c?void 0:c.call(s))||void 0===u?void 0:u.getPackageJsonInfoCache(),this.host,this.host.getCompilationSettings()),setExternalModuleIndicator:e.getSetExternalModuleIndicator(this.host.getCompilationSettings())},p,!0,d);else if(this.currentFileVersion!==p){var f=l.getChangeRange(this.currentFileScriptSnapshot);_=E(this.currentSourceFile,l,p,f)}return _&&(this.currentFileVersion=p,this.currentFileName=t,this.currentFileScriptSnapshot=l,this.currentSourceFile=_),this.currentSourceFile},t}();function T(e,t,r){e.version=r,e.scriptSnapshot=t}function C(t,r,n,i,a,o){var s=e.createSourceFile(t,e.getSnapshotText(r),n,a,o);return T(s,r,i),s}function E(t,r,n,i,a){if(i&&n!==t.version){var o=void 0,s=0!==i.span.start?t.text.substr(0,i.span.start):"",c=e.textSpanEnd(i.span)!==t.text.length?t.text.substr(e.textSpanEnd(i.span)):"";if(0===i.newLength)o=s&&c?s+c:s||c;else{var u=r.getText(i.span.start,i.span.start+i.newLength);o=s&&c?s+u+c:s?s+u:u+c}var l=e.updateSourceFile(t,o,i,a);return T(l,r,n),l.nameTable=void 0,t!==l&&t.scriptSnapshot&&(t.scriptSnapshot.dispose&&t.scriptSnapshot.dispose(),t.scriptSnapshot=void 0),l}var _={languageVersion:t.languageVersion,impliedNodeFormat:t.impliedNodeFormat,setExternalModuleIndicator:t.setExternalModuleIndicator};return C(t.fileName,r,_,n,!0,t.scriptKind)}e.createLanguageServiceSourceFile=C,e.updateLanguageServiceSourceFile=E;var k={isCancellationRequested:e.returnFalse,throwIfCancellationRequested:e.noop},N=function(){function t(e){this.cancellationToken=e}return t.prototype.isCancellationRequested=function(){return this.cancellationToken.isCancellationRequested()},t.prototype.throwIfCancellationRequested=function(){if(this.isCancellationRequested())throw null===e.tracing||void 0===e.tracing||e.tracing.instant("session","cancellationThrown",{kind:"CancellationTokenObject"}),new e.OperationCanceledException},t}(),A=function(){function t(e,t){void 0===t&&(t=20),this.hostCancellationToken=e,this.throttleWaitMilliseconds=t,this.lastCancellationCheckTime=0}return t.prototype.isCancellationRequested=function(){var t=e.timestamp();return Math.abs(t-this.lastCancellationCheckTime)>=this.throttleWaitMilliseconds&&(this.lastCancellationCheckTime=t,this.hostCancellationToken.isCancellationRequested())},t.prototype.throwIfCancellationRequested=function(){if(this.isCancellationRequested())throw null===e.tracing||void 0===e.tracing||e.tracing.instant("session","cancellationThrown",{kind:"ThrottledCancellationToken"}),new e.OperationCanceledException},t}();e.ThrottledCancellationToken=A;var F=["getSemanticDiagnostics","getSuggestionDiagnostics","getCompilerOptionsDiagnostics","getSemanticClassifications","getEncodedSemanticClassifications","getCodeFixesAtPosition","getCombinedCodeFix","applyCodeActionCommand","organizeImports","getEditsForFileRename","getEmitOutput","getApplicableRefactors","getEditsForRefactor","prepareCallHierarchy","provideCallHierarchyIncomingCalls","provideCallHierarchyOutgoingCalls","provideInlayHints"],P=a(a([],F,!0),["getCompletionsAtPosition","getCompletionEntryDetails","getCompletionEntrySymbol","getSignatureHelpItems","getQuickInfoAtPosition","getDefinitionAtPosition","getDefinitionAndBoundSpan","getImplementationAtPosition","getTypeDefinitionAtPosition","getReferencesAtPosition","findReferences","getOccurrencesAtPosition","getDocumentHighlights","getNavigateToItems","getRenameInfo","findRenameLocations","getApplicableRefactors"],!1);function w(t){var r=function(t){switch(t.kind){case 10:case 14:case 8:if(164===t.parent.kind)return e.isObjectLiteralElement(t.parent.parent)?t.parent.parent:void 0;case 79:return!e.isObjectLiteralElement(t.parent)||207!==t.parent.parent.kind&&289!==t.parent.parent.kind||t.parent.name!==t?void 0:t.parent}return}(t);return r&&(e.isObjectLiteralExpression(r.parent)||e.isJsxAttributes(r.parent))?r:void 0}function I(t,r,n,i){var a=e.getNameFromPropertyName(t.name);if(!a)return e.emptyArray;if(!n.isUnion())return(o=n.getProperty(a))?[o]:e.emptyArray;var o,s=e.mapDefined(n.types,(function(n){return(e.isObjectLiteralExpression(t.parent)||e.isJsxAttributes(t.parent))&&r.isTypeInvalidDueToUnionDiscriminant(n,t.parent)?void 0:n.getProperty(a)}));if(i&&(0===s.length||s.length===n.types.length)&&(o=n.getProperty(a)))return[o];return 0===s.length?e.mapDefined(n.types,(function(e){return e.getProperty(a)})):s}e.createLanguageService=function(t,r,n){var i,s,c;void 0===r&&(r=e.createDocumentRegistry(t.useCaseSensitiveFileNames&&t.useCaseSensitiveFileNames(),t.getCurrentDirectory())),c=void 0===n?e.LanguageServiceMode.Semantic:"boolean"==typeof n?n?e.LanguageServiceMode.Syntactic:e.LanguageServiceMode.Semantic:n;var u,l,_=new S(t),d=0,p=t.getCancellationToken?new N(t.getCancellationToken()):k,f=t.getCurrentDirectory();function g(e){t.log&&t.log(e)}e.maybeSetLocalizedDiagnosticMessages(null===(s=t.getLocalizedDiagnosticMessages)||void 0===s?void 0:s.bind(t));var m=e.hostUsesCaseSensitiveFileNames(t),y=e.createGetCanonicalFileName(m),v=e.getSourceMapper({useCaseSensitiveFileNames:function(){return m},getCurrentDirectory:function(){return f},getProgram:D,fileExists:e.maybeBind(t,t.fileExists),readFile:e.maybeBind(t,t.readFile),getDocumentPositionMapper:e.maybeBind(t,t.getDocumentPositionMapper),getSourceFileLike:e.maybeBind(t,t.getSourceFileLike),log:g});function h(e){var t=u.getSourceFile(e);if(!t){var r=new Error("Could not find source file: '".concat(e,"'."));throw r.ProgramFiles=u.getSourceFiles().map((function(e){return e.fileName})),r}return t}function x(){var n,i,o;if(e.Debug.assert(c!==e.LanguageServiceMode.Syntactic),t.getProjectVersion){var s=t.getProjectVersion();if(s){if(l===s&&!(null===(n=t.hasChangedAutomaticTypeDirectiveNames)||void 0===n?void 0:n.call(t)))return;l=s}}var _=t.getTypeRootsVersion?t.getTypeRootsVersion():0;d!==_&&(g("TypeRoots version has changed; provide new program"),u=void 0,d=_);var h,b=t.getScriptFileNames().slice(),x=t.getCompilationSettings()||{target:1,jsx:1},D=t.hasInvalidatedResolutions||e.returnFalse,S=e.maybeBind(t,t.hasChangedAutomaticTypeDirectiveNames),T=null===(i=t.getProjectReferences)||void 0===i?void 0:i.call(t),C={getSourceFile:I,getSourceFileByPath:O,getCancellationToken:function(){return p},getCanonicalFileName:y,useCaseSensitiveFileNames:function(){return m},getNewLine:function(){return e.getNewLineCharacter(x,(function(){return e.getNewLineOrDefaultFromHost(t)}))},getDefaultLibFileName:function(e){return t.getDefaultLibFileName(e)},writeFile:e.noop,getCurrentDirectory:function(){return f},fileExists:function(e){return t.fileExists(e)},readFile:function(e){return t.readFile&&t.readFile(e)},getSymlinkCache:e.maybeBind(t,t.getSymlinkCache),realpath:e.maybeBind(t,t.realpath),directoryExists:function(r){return e.directoryProbablyExists(r,t)},getDirectories:function(e){return t.getDirectories?t.getDirectories(e):[]},readDirectory:function(r,n,i,a,o){return e.Debug.checkDefined(t.readDirectory,"'LanguageServiceHost.readDirectory' must be implemented to correctly process 'projectReferences'"),t.readDirectory(r,n,i,a,o)},onReleaseOldSourceFile:w,onReleaseParsedCommandLine:function(e,r,n){var i;t.getParsedCommandLine?null===(i=t.onReleaseParsedCommandLine)||void 0===i||i.call(t,e,r,n):r&&w(r.sourceFile,n)},hasInvalidatedResolutions:D,hasChangedAutomaticTypeDirectiveNames:S,trace:e.maybeBind(t,t.trace),resolveModuleNames:e.maybeBind(t,t.resolveModuleNames),getModuleResolutionCache:e.maybeBind(t,t.getModuleResolutionCache),resolveTypeReferenceDirectives:e.maybeBind(t,t.resolveTypeReferenceDirectives),useSourceOfProjectReferenceRedirect:e.maybeBind(t,t.useSourceOfProjectReferenceRedirect),getParsedCommandLine:P},E=C.getSourceFile,k=e.changeCompilerHostLikeToUseCache(C,(function(t){return e.toPath(t,f,y)}),(function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return E.call.apply(E,a([C],e,!1))})).getSourceFileWithCache;C.getSourceFile=k,null===(o=t.setCompilerHost)||void 0===o||o.call(t,C);var N={useCaseSensitiveFileNames:m,fileExists:function(e){return C.fileExists(e)},readFile:function(e){return C.readFile(e)},readDirectory:function(){for(var e,t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return(e=C).readDirectory.apply(e,t)},trace:C.trace,getCurrentDirectory:C.getCurrentDirectory,onUnRecoverableConfigFileDiagnostic:e.noop},A=r.getKeyForCompilationSettings(x);if(!e.isProgramUptoDate(u,b,x,(function(e,r){return t.getScriptVersion(r)}),(function(e){return C.fileExists(e)}),D,S,P,T)){var F={rootNames:b,options:x,host:C,oldProgram:u,projectReferences:T};return u=e.createProgram(F),C=void 0,h=void 0,v.clearCache(),void u.getTypeChecker()}function P(r){var n=e.toPath(r,f,y),i=null==h?void 0:h.get(n);if(void 0!==i)return i||void 0;var a=t.getParsedCommandLine?t.getParsedCommandLine(r):function(t){var r=I(t,100);return r?(r.path=e.toPath(t,f,y),r.resolvedPath=r.path,r.originalFileName=r.fileName,e.parseJsonSourceFileConfigFileContent(r,N,e.getNormalizedAbsolutePath(e.getDirectoryPath(t),f),void 0,e.getNormalizedAbsolutePath(t,f))):void 0}(r);return(h||(h=new e.Map)).set(n,a||!1),a}function w(e,t){var n=r.getKeyForCompilationSettings(t);r.releaseDocumentWithKey(e.resolvedPath,n,e.scriptKind,e.impliedNodeFormat)}function I(t,r,n,i){return O(t,e.toPath(t,f,y),r,n,i)}function O(n,i,a,o,s){e.Debug.assert(C,"getOrCreateSourceFileByPath called after typical CompilerHost lifetime, check the callstack something with a reference to an old host.");var c=t.getScriptSnapshot(n);if(c){var l=e.getScriptKind(n,t),_=t.getScriptVersion(n);if(!s){var d=u&&u.getSourceFileByPath(i);if(d){if(l===d.scriptKind)return r.updateDocumentWithKey(n,i,t,A,c,_,l,a);r.releaseDocumentWithKey(d.resolvedPath,r.getKeyForCompilationSettings(u.getCompilerOptions()),d.scriptKind,d.impliedNodeFormat)}}return r.acquireDocumentWithKey(n,i,t,A,c,_,l,a)}}}function D(){if(c!==e.LanguageServiceMode.Syntactic)return x(),u;e.Debug.assert(void 0===u)}function T(t,r,n){var i=e.normalizePath(t);e.Debug.assert(n.some((function(t){return e.normalizePath(t)===i}))),x();var a=e.mapDefined(n,(function(e){return u.getSourceFile(e)})),o=h(t);return e.DocumentHighlights.getDocumentHighlights(u,p,o,r,a)}function C(t,r,n,i){x();var a=n&&2===n.use?u.getSourceFiles().filter((function(e){return!u.isSourceFileDefaultLibrary(e)})):u.getSourceFiles();return e.FindAllReferences.findReferenceOrRenameEntries(u,p,a,t,r,n,i)}var E=new e.Map(e.getEntries(((i={})[18]=19,i[20]=21,i[22]=23,i[31]=29,i)));function A(r){var n;return e.Debug.assertEqual(r.type,"install package"),t.installPackage?t.installPackage({fileName:(n=r.file,e.toPath(n,f,y)),packageName:r.packageName}):Promise.reject("Host does not implement `installPackage`")}function O(e,t){return{lineStarts:e.getLineStarts(),firstLine:e.getLineAndCharacterOfPosition(t.pos).line,lastLine:e.getLineAndCharacterOfPosition(t.end).line}}function M(t,r,n){for(var i=_.getCurrentSourceFile(t),a=[],o=O(i,r),s=o.lineStarts,c=o.firstLine,u=o.lastLine,l=n||!1,d=Number.MAX_VALUE,p=new e.Map,f=new RegExp(/\S/),g=e.isInsideJsxElement(i,s[c]),m=g?"{/*":"//",y=c;y<=u;y++){var v=i.text.substring(s[y],i.getLineEndOfPosition(s[y])),h=f.exec(v);h&&(d=Math.min(d,h.index),p.set(y.toString(),h.index),v.substr(h.index,m.length)!==m&&(l=void 0===n||n))}for(y=c;y<=u;y++)if(c===u||s[y]!==r.end){var b=p.get(y.toString());void 0!==b&&(g?a.push.apply(a,L(t,{pos:s[y]+d,end:i.getLineEndOfPosition(s[y])},l,g)):l?a.push({newText:m,span:{length:0,start:s[y]+d}}):i.text.substr(s[y]+b,m.length)===m&&a.push({newText:"",span:{length:m.length,start:s[y]+b}}))}return a}function L(t,r,n,i){for(var a,o=_.getCurrentSourceFile(t),s=[],c=o.text,u=!1,l=n||!1,d=[],p=r.pos,f=void 0!==i?i:e.isInsideJsxElement(o,p),g=f?"{/*":"/*",m=f?"*/}":"*/",y=f?"\\{\\/\\*":"\\/\\*",v=f?"\\*\\/\\}":"\\*\\/";p<=r.end;){var h=c.substr(p,g.length)===g?g.length:0,b=e.isInComment(o,p+h);if(b)f&&(b.pos--,b.end++),d.push(b.pos),3===b.kind&&d.push(b.end),u=!0,p=b.end+1;else{var x=c.substring(p,r.end).search("(".concat(y,")|(").concat(v,")"));l=void 0!==n?n:l||!e.isTextWhiteSpaceLike(c,p,-1===x?r.end:p+x),p=-1===x?r.end+1:p+x+m.length}}if(l||!u){2!==(null===(a=e.isInComment(o,r.pos))||void 0===a?void 0:a.kind)&&e.insertSorted(d,r.pos,e.compareValues),e.insertSorted(d,r.end,e.compareValues);var D=d[0];c.substr(D,g.length)!==g&&s.push({newText:g,span:{length:0,start:D}});for(var S=1;S<d.length-1;S++)c.substr(d[S]-m.length,m.length)!==m&&s.push({newText:m,span:{length:0,start:d[S]}}),c.substr(d[S],g.length)!==g&&s.push({newText:g,span:{length:0,start:d[S]}});s.length%2!=0&&s.push({newText:m,span:{length:0,start:d[d.length-1]}})}else for(var T=0,C=d;T<C.length;T++){var E=C[T],k=E-m.length>0?E-m.length:0;h=c.substr(k,m.length)===m?m.length:0;s.push({newText:"",span:{length:g.length,start:E-h}})}return s}function R(t){var r=t.openingElement,n=t.closingElement,i=t.parent;return!e.tagNamesAreEquivalent(r.tagName,n.tagName)||e.isJsxElement(i)&&e.tagNamesAreEquivalent(r.tagName,i.openingElement.tagName)&&R(i)}function B(t){var r=t.closingFragment,n=t.parent;return!!(131072&r.flags)||e.isJsxFragment(n)&&B(n)}function j(r,n,i,a,o,s){var c="number"==typeof n?[n,void 0]:[n.pos,n.end];return{file:r,startPosition:c[0],endPosition:c[1],program:D(),host:t,formatContext:e.formatting.getFormatContext(a,t),cancellationToken:p,preferences:i,triggerReason:o,kind:s}}E.forEach((function(e,t){return E.set(e.toString(),Number(t))}));var J={dispose:function(){if(u){var n=r.getKeyForCompilationSettings(u.getCompilerOptions());e.forEach(u.getSourceFiles(),(function(e){return r.releaseDocumentWithKey(e.resolvedPath,n,e.scriptKind,e.impliedNodeFormat)})),u=void 0}t=void 0},cleanupSemanticCache:function(){u=void 0},getSyntacticDiagnostics:function(e){return x(),u.getSyntacticDiagnostics(h(e),p).slice()},getSemanticDiagnostics:function(t){x();var r=h(t),n=u.getSemanticDiagnostics(r,p);if(!e.getEmitDeclarations(u.getCompilerOptions()))return n.slice();var i=u.getDeclarationDiagnostics(r,p);return a(a([],n,!0),i,!0)},getSuggestionDiagnostics:function(t){return x(),e.computeSuggestionDiagnostics(h(t),u,p)},getCompilerOptionsDiagnostics:function(){return x(),a(a([],u.getOptionsDiagnostics(p),!0),u.getGlobalDiagnostics(p),!0)},getSyntacticClassifications:function(t,r){return e.getSyntacticClassifications(p,_.getCurrentSourceFile(t),r)},getSemanticClassifications:function(t,r,n){return x(),"2020"===(n||"original")?e.classifier.v2020.getSemanticClassifications(u,p,h(t),r):e.getSemanticClassifications(u.getTypeChecker(),p,h(t),u.getClassifiableNames(),r)},getEncodedSyntacticClassifications:function(t,r){return e.getEncodedSyntacticClassifications(p,_.getCurrentSourceFile(t),r)},getEncodedSemanticClassifications:function(t,r,n){return x(),"original"===(n||"original")?e.getEncodedSemanticClassifications(u.getTypeChecker(),p,h(t),u.getClassifiableNames(),r):e.classifier.v2020.getEncodedSemanticClassifications(u,p,h(t),r)},getCompletionsAtPosition:function(r,n,i,a){void 0===i&&(i=e.emptyOptions);var s=o(o({},e.identity(i)),{includeCompletionsForModuleExports:i.includeCompletionsForModuleExports||i.includeExternalModuleExports,includeCompletionsWithInsertText:i.includeCompletionsWithInsertText||i.includeInsertTextCompletions});return x(),e.Completions.getCompletionsAtPosition(t,u,g,h(r),n,s,i.triggerCharacter,i.triggerKind,p,a&&e.formatting.getFormatContext(a,t))},getCompletionEntryDetails:function(r,n,i,a,o,s,c){return void 0===s&&(s=e.emptyOptions),x(),e.Completions.getCompletionEntryDetails(u,g,h(r),n,{name:i,source:o,data:c},t,a&&e.formatting.getFormatContext(a,t),s,p)},getCompletionEntrySymbol:function(r,n,i,a,o){return void 0===o&&(o=e.emptyOptions),x(),e.Completions.getCompletionEntrySymbol(u,g,h(r),n,{name:i,source:a},t,o)},getSignatureHelpItems:function(t,r,n){var i=(void 0===n?e.emptyOptions:n).triggerReason;x();var a=h(t);return e.SignatureHelp.getSignatureHelpItems(u,a,r,i,p)},getQuickInfoAtPosition:function(t,r){x();var n=h(t),i=e.getTouchingPropertyName(n,r);if(i!==n){var a=u.getTypeChecker(),o=function(t){if(e.isNewExpression(t.parent)&&t.pos===t.parent.pos)return t.parent.expression;if(e.isNamedTupleMember(t.parent)&&t.pos===t.parent.pos)return t.parent;if(e.isImportMeta(t.parent)&&t.parent.name===t)return t.parent;return t}(i),s=function(t,r){var n=w(t);if(n){var i=r.getContextualType(n.parent),a=i&&I(n,r,i,!1);if(a&&1===a.length)return e.first(a)}return r.getSymbolAtLocation(t)}(o,a);if(!s||a.isUnknownSymbol(s)){var c=function(t,r,n){switch(r.kind){case 79:return!e.isLabelName(r)&&!e.isTagName(r)&&!e.isConstTypeReference(r.parent);case 208:case 163:return!e.isInComment(t,n);case 108:case 194:case 106:case 199:return!0;case 233:return e.isImportMeta(r);default:return!1}}(n,o,r)?a.getTypeAtLocation(o):void 0;return c&&{kind:"",kindModifiers:"",textSpan:e.createTextSpanFromNode(o,n),displayParts:a.runWithCancellationToken(p,(function(t){return e.typeToDisplayParts(t,c,e.getContainerNode(o))})),documentation:c.symbol?c.symbol.getDocumentationComment(a):void 0,tags:c.symbol?c.symbol.getJsDocTags(a):void 0}}var l=a.runWithCancellationToken(p,(function(t){return e.SymbolDisplay.getSymbolDisplayPartsDocumentationAndSymbolKind(t,s,n,e.getContainerNode(o),o)})),_=l.symbolKind,d=l.displayParts,f=l.documentation,g=l.tags;return{kind:_,kindModifiers:e.SymbolDisplay.getSymbolModifiers(a,s),textSpan:e.createTextSpanFromNode(o,n),displayParts:d,documentation:f,tags:g}}},getDefinitionAtPosition:function(t,r,n,i){return x(),e.GoToDefinition.getDefinitionAtPosition(u,h(t),r,n,i)},getDefinitionAndBoundSpan:function(t,r){return x(),e.GoToDefinition.getDefinitionAndBoundSpan(u,h(t),r)},getImplementationAtPosition:function(t,r){return x(),e.FindAllReferences.getImplementationsAtPosition(u,p,u.getSourceFiles(),h(t),r)},getTypeDefinitionAtPosition:function(t,r){return x(),e.GoToDefinition.getTypeDefinitionAtPosition(u.getTypeChecker(),h(t),r)},getReferencesAtPosition:function(t,r){return x(),C(e.getTouchingPropertyName(h(t),r),r,{use:1},e.FindAllReferences.toReferenceEntry)},findReferences:function(t,r){return x(),e.FindAllReferences.findReferencedSymbols(u,p,u.getSourceFiles(),h(t),r)},getFileReferences:function(t){return x(),e.FindAllReferences.Core.getReferencesForFileName(t,u,u.getSourceFiles()).map(e.FindAllReferences.toReferenceEntry)},getOccurrencesAtPosition:function(t,r){return e.flatMap(T(t,r,[t]),(function(e){return e.highlightSpans.map((function(t){return o(o({fileName:e.fileName,textSpan:t.textSpan,isWriteAccess:"writtenReference"===t.kind},t.isInString&&{isInString:!0}),t.contextSpan&&{contextSpan:t.contextSpan})}))}))},getDocumentHighlights:T,getNameOrDottedNameSpan:function(t,r,n){var i=_.getCurrentSourceFile(t),a=e.getTouchingPropertyName(i,r);if(a!==i){switch(a.kind){case 208:case 163:case 10:case 95:case 110:case 104:case 106:case 108:case 194:case 79:break;default:return}for(var o=a;;)if(e.isRightSideOfPropertyAccess(o)||e.isRightSideOfQualifiedName(o))o=o.parent;else{if(!e.isNameOfModuleDeclaration(o))break;if(264!==o.parent.parent.kind||o.parent.parent.body!==o.parent)break;o=o.parent.parent.name}return e.createTextSpanFromBounds(o.getStart(),a.getEnd())}},getBreakpointStatementAtPosition:function(t,r){var n=_.getCurrentSourceFile(t);return e.BreakpointResolver.spanInSourceFileAtLocation(n,r)},getNavigateToItems:function(t,r,n,i){void 0===i&&(i=!1),x();var a=n?[h(n)]:u.getSourceFiles();return e.NavigateTo.getNavigateToItems(a,u.getTypeChecker(),p,t,r,i)},getRenameInfo:function(t,r,n){return x(),e.Rename.getRenameInfo(u,h(t),r,n||{})},getSmartSelectionRange:function(t,r){return e.SmartSelectionRange.getSmartSelectionRange(r,_.getCurrentSourceFile(t))},findRenameLocations:function(t,r,n,i,a){x();var s=h(t),c=e.getAdjustedRenameLocation(e.getTouchingPropertyName(s,r));if(e.Rename.nodeIsEligibleForRename(c)){if(e.isIdentifier(c)&&(e.isJsxOpeningElement(c.parent)||e.isJsxClosingElement(c.parent))&&e.isIntrinsicJsxName(c.escapedText)){var u=c.parent.parent;return[u.openingElement,u.closingElement].map((function(t){var r=e.createTextSpanFromNode(t.tagName,s);return o({fileName:s.fileName,textSpan:r},e.FindAllReferences.toContextSpan(r,s,t.parent))}))}return C(c,r,{findInStrings:n,findInComments:i,providePrefixAndSuffixTextForRename:a,use:2},(function(t,r,n){return e.FindAllReferences.toRenameLocation(t,r,n,a||!1)}))}},getNavigationBarItems:function(t){return e.NavigationBar.getNavigationBarItems(_.getCurrentSourceFile(t),p)},getNavigationTree:function(t){return e.NavigationBar.getNavigationTree(_.getCurrentSourceFile(t),p)},getOutliningSpans:function(t){var r=_.getCurrentSourceFile(t);return e.OutliningElementsCollector.collectElements(r,p)},getTodoComments:function(t,r){x();var n=h(t);p.throwIfCancellationRequested();var i,a,o=n.text,s=[];if(r.length>0&&(a=n.fileName,!e.stringContains(a,"/node_modules/")))for(var c=function(){var t="("+/(?:^(?:\s|\*)*)/.source+"|"+/(?:\/\/+\s*)/.source+"|"+/(?:\/\*+\s*)/.source+")",n="(?:"+e.map(r,(function(e){return"("+(e.text.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")+")")})).join("|")+")",i=t+"("+n+/(?:.*?)/.source+")"+/(?:$|\*\/)/.source;return new RegExp(i,"gim")}(),u=void 0;u=c.exec(o);){p.throwIfCancellationRequested();e.Debug.assert(u.length===r.length+3);var l=u[1],_=u.index+l.length;if(e.isInComment(n,_)){for(var d=void 0,f=0;f<r.length;f++)u[f+3]&&(d=r[f]);if(void 0===d)return e.Debug.fail();if(!((i=o.charCodeAt(_+d.text.length))>=97&&i<=122||i>=65&&i<=90||i>=48&&i<=57)){var g=u[2];s.push({descriptor:d,message:g,position:_})}}}return s},getBraceMatchingAtPosition:function(t,r){var n=_.getCurrentSourceFile(t),i=e.getTouchingToken(n,r),a=i.getStart(n)===r?E.get(i.kind.toString()):void 0,o=a&&e.findChildOfKind(i.parent,a,n);return o?[e.createTextSpanFromNode(i,n),e.createTextSpanFromNode(o,n)].sort((function(e,t){return e.start-t.start})):e.emptyArray},getIndentationAtPosition:function(t,r,n){var i=e.timestamp(),a=b(n),o=_.getCurrentSourceFile(t);g("getIndentationAtPosition: getCurrentSourceFile: "+(e.timestamp()-i)),i=e.timestamp();var s=e.formatting.SmartIndenter.getIndentation(r,o,a);return g("getIndentationAtPosition: computeIndentation  : "+(e.timestamp()-i)),s},getFormattingEditsForRange:function(r,n,i,a){var o=_.getCurrentSourceFile(r);return e.formatting.formatSelection(n,i,o,e.formatting.getFormatContext(b(a),t))},getFormattingEditsForDocument:function(r,n){return e.formatting.formatDocument(_.getCurrentSourceFile(r),e.formatting.getFormatContext(b(n),t))},getFormattingEditsAfterKeystroke:function(r,n,i,a){var o=_.getCurrentSourceFile(r),s=e.formatting.getFormatContext(b(a),t);if(!e.isInComment(o,n))switch(i){case"{":return e.formatting.formatOnOpeningCurly(n,o,s);case"}":return e.formatting.formatOnClosingCurly(n,o,s);case";":return e.formatting.formatOnSemicolon(n,o,s);case"\n":return e.formatting.formatOnEnter(n,o,s)}return[]},getDocCommentTemplateAtPosition:function(r,n,i){return e.JsDoc.getDocCommentTemplateAtPosition(e.getNewLineOrDefaultFromHost(t),_.getCurrentSourceFile(r),n,i)},isValidBraceCompletionAtPosition:function(t,r,n){if(60===n)return!1;var i=_.getCurrentSourceFile(t);if(e.isInString(i,r))return!1;if(e.isInsideJsxElementOrAttribute(i,r))return 123===n;if(e.isInTemplateString(i,r))return!1;switch(n){case 39:case 34:case 96:return!e.isInComment(i,r)}return!0},getJsxClosingTagAtPosition:function(t,r){var n=_.getCurrentSourceFile(t),i=e.findPrecedingToken(r,n);if(i){var a=31===i.kind&&e.isJsxOpeningElement(i.parent)?i.parent.parent:e.isJsxText(i)&&e.isJsxElement(i.parent)?i.parent:void 0;if(a&&R(a))return{newText:"</".concat(a.openingElement.tagName.getText(n),">")};var o=31===i.kind&&e.isJsxOpeningFragment(i.parent)?i.parent.parent:e.isJsxText(i)&&e.isJsxFragment(i.parent)?i.parent:void 0;return o&&B(o)?{newText:"</>"}:void 0}},getSpanOfEnclosingComment:function(t,r,n){var i=_.getCurrentSourceFile(t),a=e.formatting.getRangeOfEnclosingComment(i,r);return!a||n&&3!==a.kind?void 0:e.createTextSpanFromRange(a)},getCodeFixesAtPosition:function(r,n,i,a,o,s){void 0===s&&(s=e.emptyOptions),x();var c=h(r),l=e.createTextSpanFromBounds(n,i),_=e.formatting.getFormatContext(o,t);return e.flatMap(e.deduplicate(a,e.equateValues,e.compareValues),(function(r){return p.throwIfCancellationRequested(),e.codefix.getFixes({errorCode:r,sourceFile:c,span:l,program:u,host:t,cancellationToken:p,formatContext:_,preferences:s})}))},getCombinedCodeFix:function(r,n,i,a){void 0===a&&(a=e.emptyOptions),x(),e.Debug.assert("file"===r.type);var o=h(r.fileName),s=e.formatting.getFormatContext(i,t);return e.codefix.getAllFixes({fixId:n,sourceFile:o,program:u,host:t,cancellationToken:p,formatContext:s,preferences:a})},applyCodeActionCommand:function(t,r){var n="string"==typeof t?r:t;return e.isArray(n)?Promise.all(n.map((function(e){return A(e)}))):A(n)},organizeImports:function(r,n,i){var a;void 0===i&&(i=e.emptyOptions),x(),e.Debug.assert("file"===r.type);var o=h(r.fileName),s=e.formatting.getFormatContext(n,t),c=null!==(a=r.mode)&&void 0!==a?a:r.skipDestructiveCodeActions?"SortAndCombine":"All";return e.OrganizeImports.organizeImports(o,s,t,u,i,c)},getEditsForFileRename:function(r,n,i,a){return void 0===a&&(a=e.emptyOptions),e.getEditsForFileRename(D(),r,n,t,e.formatting.getFormatContext(i,t),a,v)},getEmitOutput:function(r,n,i){x();var a=h(r),o=t.getCustomTransformers&&t.getCustomTransformers();return e.getFileEmitOutput(u,a,!!n,p,o,i)},getNonBoundSourceFile:function(e){return _.getCurrentSourceFile(e)},getProgram:D,getCurrentProgram:function(){return u},getAutoImportProvider:function(){var e;return null===(e=t.getPackageJsonAutoImportProvider)||void 0===e?void 0:e.call(t)},updateIsDefinitionOfReferencedSymbols:function(r,n){var i=u.getTypeChecker(),a=function(){for(var a=0,o=r;a<o.length;a++)for(var s=0,c=o[a].references;s<c.length;s++){var u=c[s];if(n.has(u)){var l=f(u);return e.Debug.assertIsDefined(l),i.getSymbolAtLocation(l)}var _=e.getMappedDocumentSpan(u,v,e.maybeBind(t,t.fileExists));if(_&&n.has(_))if(l=f(_))return i.getSymbolAtLocation(l)}return}();if(!a)return!1;for(var o=0,s=r;o<s.length;o++)for(var c=0,l=s[o].references;c<l.length;c++){var _=l[c],d=f(_);if(e.Debug.assertIsDefined(d),n.has(_)||e.FindAllReferences.isDeclarationOfSymbol(d,a)){n.add(_),_.isDefinition=!0;var p=e.getMappedDocumentSpan(_,v,e.maybeBind(t,t.fileExists));p&&n.add(p)}else _.isDefinition=!1}return!0;function f(t){var r=u.getSourceFile(t.fileName);if(r){var n=e.getTouchingPropertyName(r,t.textSpan.start);return e.FindAllReferences.Core.getAdjustedNode(n,{use:1})}}},getApplicableRefactors:function(t,r,n,i,a){void 0===n&&(n=e.emptyOptions),x();var o=h(t);return e.refactor.getApplicableRefactors(j(o,r,n,e.emptyOptions,i,a))},getEditsForRefactor:function(t,r,n,i,a,o){void 0===o&&(o=e.emptyOptions),x();var s=h(t);return e.refactor.getEditsForRefactor(j(s,n,o,r),i,a)},toLineColumnOffset:function(e,t){return 0===t?{line:0,character:0}:v.toLineColumnOffset(e,t)},getSourceMapper:function(){return v},clearSourceMapperCache:function(){return v.clearCache()},prepareCallHierarchy:function(t,r){x();var n=e.CallHierarchy.resolveCallHierarchyDeclaration(u,e.getTouchingPropertyName(h(t),r));return n&&e.mapOneOrMany(n,(function(t){return e.CallHierarchy.createCallHierarchyItem(u,t)}))},provideCallHierarchyIncomingCalls:function(t,r){x();var n=h(t),i=e.firstOrOnly(e.CallHierarchy.resolveCallHierarchyDeclaration(u,0===r?n:e.getTouchingPropertyName(n,r)));return i?e.CallHierarchy.getIncomingCalls(u,i,p):[]},provideCallHierarchyOutgoingCalls:function(t,r){x();var n=h(t),i=e.firstOrOnly(e.CallHierarchy.resolveCallHierarchyDeclaration(u,0===r?n:e.getTouchingPropertyName(n,r)));return i?e.CallHierarchy.getOutgoingCalls(u,i):[]},toggleLineComment:M,toggleMultilineComment:L,commentSelection:function(e,t){var r=O(_.getCurrentSourceFile(e),t);return r.firstLine===r.lastLine&&t.pos!==t.end?L(e,t,!0):M(e,t,!0)},uncommentSelection:function(t,r){var n=_.getCurrentSourceFile(t),i=[],a=r.pos,o=r.end;a===o&&(o+=e.isInsideJsxElement(n,a)?2:1);for(var s=a;s<=o;s++){var c=e.isInComment(n,s);if(c){switch(c.kind){case 2:i.push.apply(i,M(t,{end:c.end,pos:c.pos+1},!1));break;case 3:i.push.apply(i,L(t,{end:c.end,pos:c.pos+1},!1))}s=c.end+1}}return i},provideInlayHints:function(r,n,i){void 0===i&&(i=e.emptyOptions),x();var a=h(r);return e.InlayHints.provideInlayHints(function(e,r,n){return{file:e,program:D(),host:t,span:r,preferences:n,cancellationToken:p}}(a,n,i))}};switch(c){case e.LanguageServiceMode.Semantic:break;case e.LanguageServiceMode.PartialSemantic:F.forEach((function(e){return J[e]=function(){throw new Error("LanguageService Operation: ".concat(e," not allowed in LanguageServiceMode.PartialSemantic"))}}));break;case e.LanguageServiceMode.Syntactic:P.forEach((function(e){return J[e]=function(){throw new Error("LanguageService Operation: ".concat(e," not allowed in LanguageServiceMode.Syntactic"))}}));break;default:e.Debug.assertNever(c)}return J},e.getNameTable=function(t){return t.nameTable||function(t){var r=t.nameTable=new e.Map;t.forEachChild((function t(n){if(e.isIdentifier(n)&&!e.isTagName(n)&&n.escapedText||e.isStringOrNumericLiteralLike(n)&&function(t){return e.isDeclarationName(t)||280===t.parent.kind||function(e){return e&&e.parent&&209===e.parent.kind&&e.parent.argumentExpression===e}(t)||e.isLiteralComputedPropertyDeclarationName(t)}(n)){var i=e.getEscapedTextOfIdentifierOrLiteral(n);r.set(i,void 0===r.get(i)?n.pos:-1)}else if(e.isPrivateIdentifier(n)){i=n.escapedText;r.set(i,void 0===r.get(i)?n.pos:-1)}if(e.forEachChild(n,t),e.hasJSDocNodes(n))for(var a=0,o=n.jsDoc;a<o.length;a++){var s=o[a];e.forEachChild(s,t)}}))}(t),t.nameTable},e.getContainingObjectLiteralElement=w,e.getPropertySymbolsFromContextualType=I,e.getDefaultLibFilePath=function(t){return e.combinePaths("/",e.getDefaultLibFileName(t))},e.setObjectAllocator({getNodeConstructor:function(){return r},getTokenConstructor:function(){return c},getIdentifierConstructor:function(){return u},getPrivateIdentifierConstructor:function(){return _},getSourceFileConstructor:function(){return v},getSymbolConstructor:function(){return s},getTypeConstructor:function(){return d},getSignatureConstructor:function(){return p},getSourceMapSourceConstructor:function(){return h}})}(_||(_={})),function(e){!function(t){t.spanInSourceFileAtLocation=function(t,r){if(!t.isDeclarationFile){var n=e.getTokenAtPosition(t,r),i=t.getLineAndCharacterOfPosition(r).line;if(t.getLineAndCharacterOfPosition(n.getStart(t)).line>i){var a=e.findPrecedingToken(n.pos,t);if(!a||t.getLineAndCharacterOfPosition(a.getEnd()).line!==i)return;n=a}if(!(16777216&n.flags))return _(n)}function o(r,n){var i=e.canHaveDecorators(r)?e.findLast(r.modifiers,e.isDecorator):void 0,a=i?e.skipTrivia(t.text,i.end):r.getStart(t);return e.createTextSpanFromBounds(a,(n||r).getEnd())}function s(r,n){return o(r,e.findNextToken(n,n.parent,t))}function c(e,r){return e&&i===t.getLineAndCharacterOfPosition(e.getStart(t)).line?_(e):_(r)}function u(r){return _(e.findPrecedingToken(r.pos,t))}function l(r){return _(e.findNextToken(r,r.parent,t))}function _(r){if(r){var n=r.parent;switch(r.kind){case 240:return y(r.declarationList.declarations[0]);case 257:case 169:case 168:return y(r);case 166:return function t(r){if(e.isBindingPattern(r.name))return x(r.name);if(function(t){return!!t.initializer||void 0!==t.dotDotDotToken||e.hasSyntacticModifier(t,12)}(r))return o(r);var n=r.parent,i=n.parameters.indexOf(r);return e.Debug.assert(-1!==i),0!==i?t(n.parameters[i-1]):_(n.body)}(r);case 259:case 171:case 170:case 174:case 175:case 173:case 215:case 216:return function(e){if(!e.body)return;if(v(e))return o(e);return _(e.body)}(r);case 238:if(e.isFunctionBlock(r))return function(e){var t=e.statements.length?e.statements[0]:e.getLastToken();if(v(e.parent))return c(e.parent,t);return _(t)}(r);case 265:return h(r);case 295:return h(r.block);case 241:return o(r.expression);case 250:return o(r.getChildAt(0),r.expression);case 244:return s(r,r.expression);case 243:return _(r.statement);case 256:return o(r.getChildAt(0));case 242:return s(r,r.expression);case 253:return _(r.statement);case 249:case 248:return o(r.getChildAt(0),r.label);case 245:return function(e){if(e.initializer)return b(e);if(e.condition)return o(e.condition);if(e.incrementor)return o(e.incrementor)}(r);case 246:return s(r,r.expression);case 247:return b(r);case 252:return s(r,r.expression);case 292:case 293:return _(r.statements[0]);case 255:return h(r.tryBlock);case 254:case 274:return o(r,r.expression);case 268:return o(r,r.moduleReference);case 269:case 275:return o(r,r.moduleSpecifier);case 264:if(1!==e.getModuleInstanceState(r))return;case 260:case 263:case 302:case 205:return o(r);case 251:return _(r.statement);case 167:return function(r,n,i){if(r){var a=r.indexOf(n);if(a>=0){for(var s=a,c=a+1;s>0&&i(r[s-1]);)s--;for(;c<r.length&&i(r[c]);)c++;return e.createTextSpanFromBounds(e.skipTrivia(t.text,r[s].pos),r[c-1].end)}}return o(n)}(n.modifiers,r,e.isDecorator);case 203:case 204:return x(r);case 261:case 262:return;case 26:case 1:return c(e.findPrecedingToken(r.pos,t));case 27:return u(r);case 18:return function(r){switch(r.parent.kind){case 263:var n=r.parent;return c(e.findPrecedingToken(r.pos,t,r.parent),n.members.length?n.members[0]:n.getLastToken(t));case 260:var i=r.parent;return c(e.findPrecedingToken(r.pos,t,r.parent),i.members.length?i.members[0]:i.getLastToken(t));case 266:return c(r.parent.parent,r.parent.clauses[0])}return _(r.parent)}(r);case 19:return function(t){switch(t.parent.kind){case 265:if(1!==e.getModuleInstanceState(t.parent.parent))return;case 263:case 260:return o(t);case 238:if(e.isFunctionBlock(t.parent))return o(t);case 295:return _(e.lastOrUndefined(t.parent.statements));case 266:var r=t.parent,n=e.lastOrUndefined(r.clauses);return n?_(e.lastOrUndefined(n.statements)):void 0;case 203:var i=t.parent;return _(e.lastOrUndefined(i.elements)||i);default:if(e.isArrayLiteralOrObjectLiteralDestructuringPattern(t.parent)){var a=t.parent;return o(e.lastOrUndefined(a.properties)||a)}return _(t.parent)}}(r);case 23:return function(t){if(204===t.parent.kind){var r=t.parent;return o(e.lastOrUndefined(r.elements)||r)}if(e.isArrayLiteralOrObjectLiteralDestructuringPattern(t.parent)){var n=t.parent;return o(e.lastOrUndefined(n.elements)||n)}return _(t.parent)}(r);case 20:return function(e){if(243===e.parent.kind||210===e.parent.kind||211===e.parent.kind)return u(e);if(214===e.parent.kind)return l(e);return _(e.parent)}(r);case 21:return function(e){switch(e.parent.kind){case 215:case 259:case 216:case 171:case 170:case 174:case 175:case 173:case 244:case 243:case 245:case 247:case 210:case 211:case 214:return u(e);default:return _(e.parent)}}(r);case 58:return function(t){if(e.isFunctionLike(t.parent)||299===t.parent.kind||166===t.parent.kind)return u(t);return _(t.parent)}(r);case 31:case 29:return function(e){if(213===e.parent.kind)return l(e);return _(e.parent)}(r);case 115:return function(e){if(243===e.parent.kind)return s(e,e.parent.expression);return _(e.parent)}(r);case 91:case 83:case 96:return l(r);case 162:return function(e){if(247===e.parent.kind)return l(e);return _(e.parent)}(r);default:if(e.isArrayLiteralOrObjectLiteralDestructuringPattern(r))return D(r);if((79===r.kind||227===r.kind||299===r.kind||300===r.kind)&&e.isArrayLiteralOrObjectLiteralDestructuringPattern(n))return o(r);if(223===r.kind){var i=r,a=i.left,d=i.operatorToken;if(e.isArrayLiteralOrObjectLiteralDestructuringPattern(a))return D(a);if(63===d.kind&&e.isArrayLiteralOrObjectLiteralDestructuringPattern(r.parent))return o(r);if(27===d.kind)return _(a)}if(e.isExpressionNode(r))switch(n.kind){case 243:return u(r);case 167:return _(r.parent);case 245:case 247:return o(r);case 223:if(27===r.parent.operatorToken.kind)return o(r);break;case 216:if(r.parent.body===r)return o(r)}switch(r.parent.kind){case 299:if(r.parent.name===r&&!e.isArrayLiteralOrObjectLiteralDestructuringPattern(r.parent.parent))return _(r.parent.initializer);break;case 213:if(r.parent.type===r)return l(r.parent.type);break;case 257:case 166:var p=r.parent,f=p.initializer,g=p.type;if(f===r||g===r||e.isAssignmentOperator(r.kind))return u(r);break;case 223:a=r.parent.left;if(e.isArrayLiteralOrObjectLiteralDestructuringPattern(a)&&r!==a)return u(r);break;default:if(e.isFunctionLike(r.parent)&&r.parent.type===r)return u(r)}return _(r.parent)}}function m(r){return e.isVariableDeclarationList(r.parent)&&r.parent.declarations[0]===r?o(e.findPrecedingToken(r.pos,t,r.parent),r):o(r)}function y(r){if(246===r.parent.parent.kind)return _(r.parent.parent);var n=r.parent;return e.isBindingPattern(r.name)?x(r.name):e.hasOnlyExpressionInitializer(r)&&r.initializer||e.hasSyntacticModifier(r,1)||247===n.parent.kind?m(r):e.isVariableDeclarationList(r.parent)&&r.parent.declarations[0]!==r?_(e.findPrecedingToken(r.pos,t,r.parent)):void 0}function v(t){return e.hasSyntacticModifier(t,1)||260===t.parent.kind&&173!==t.kind}function h(r){switch(r.parent.kind){case 264:if(1!==e.getModuleInstanceState(r.parent))return;case 244:case 242:case 246:return c(r.parent,r.statements[0]);case 245:case 247:return c(e.findPrecedingToken(r.pos,t,r.parent),r.statements[0])}return _(r.statements[0])}function b(e){if(258!==e.initializer.kind)return _(e.initializer);var t=e.initializer;return t.declarations.length>0?_(t.declarations[0]):void 0}function x(t){var r=e.forEach(t.elements,(function(e){return 229!==e.kind?e:void 0}));return r?_(r):205===t.parent.kind?o(t.parent):m(t.parent)}function D(t){e.Debug.assert(204!==t.kind&&203!==t.kind);var r=206===t.kind?t.elements:t.properties,n=e.forEach(r,(function(e){return 229!==e.kind?e:void 0}));return n?_(n):o(223===t.parent.kind?t.parent:t)}}}}(e.BreakpointResolver||(e.BreakpointResolver={}))}(_||(_={})),function(e){e.transform=function(t,r,n){var i=[];n=e.fixupCompilerOptions(n,i);var a=e.isArray(t)?t:[t],o=e.transformNodes(void 0,void 0,e.factory,n,a,r,!0);return o.diagnostics=e.concatenate(o.diagnostics,i),o}}(_||(_={}));var _,d=function(){return this}();!function(e){function t(e,t){e&&e.log("*INTERNAL ERROR* - Exception in typescript services: "+t.message)}var r=function(){function t(e){this.scriptSnapshotShim=e}return t.prototype.getText=function(e,t){return this.scriptSnapshotShim.getText(e,t)},t.prototype.getLength=function(){return this.scriptSnapshotShim.getLength()},t.prototype.getChangeRange=function(t){var r=t,n=this.scriptSnapshotShim.getChangeRange(r.scriptSnapshotShim);if(null===n)return null;var i=JSON.parse(n);return e.createTextChangeRange(e.createTextSpan(i.span.start,i.span.length),i.newLength)},t.prototype.dispose=function(){"dispose"in this.scriptSnapshotShim&&this.scriptSnapshotShim.dispose()},t}(),n=function(){function t(t){var r=this;this.shimHost=t,this.loggingEnabled=!1,this.tracingEnabled=!1,"getModuleResolutionsForFile"in this.shimHost&&(this.resolveModuleNames=function(t,n){var i=JSON.parse(r.shimHost.getModuleResolutionsForFile(n));return e.map(t,(function(t){var r=e.getProperty(i,t);return r?{resolvedFileName:r,extension:e.extensionFromPath(r),isExternalLibraryImport:!1}:void 0}))}),"directoryExists"in this.shimHost&&(this.directoryExists=function(e){return r.shimHost.directoryExists(e)}),"getTypeReferenceDirectiveResolutionsForFile"in this.shimHost&&(this.resolveTypeReferenceDirectives=function(t,n){var i=JSON.parse(r.shimHost.getTypeReferenceDirectiveResolutionsForFile(n));return e.map(t,(function(t){return e.getProperty(i,e.isString(t)?t:t.fileName.toLowerCase())}))})}return t.prototype.log=function(e){this.loggingEnabled&&this.shimHost.log(e)},t.prototype.trace=function(e){this.tracingEnabled&&this.shimHost.trace(e)},t.prototype.error=function(e){this.shimHost.error(e)},t.prototype.getProjectVersion=function(){if(this.shimHost.getProjectVersion)return this.shimHost.getProjectVersion()},t.prototype.getTypeRootsVersion=function(){return this.shimHost.getTypeRootsVersion?this.shimHost.getTypeRootsVersion():0},t.prototype.useCaseSensitiveFileNames=function(){return!!this.shimHost.useCaseSensitiveFileNames&&this.shimHost.useCaseSensitiveFileNames()},t.prototype.getCompilationSettings=function(){var e=this.shimHost.getCompilationSettings();if(null===e||""===e)throw Error("LanguageServiceShimHostAdapter.getCompilationSettings: empty compilationSettings");var t=JSON.parse(e);return t.allowNonTsExtensions=!0,t},t.prototype.getScriptFileNames=function(){var e=this.shimHost.getScriptFileNames();return JSON.parse(e)},t.prototype.getScriptSnapshot=function(e){var t=this.shimHost.getScriptSnapshot(e);return t&&new r(t)},t.prototype.getScriptKind=function(e){return"getScriptKind"in this.shimHost?this.shimHost.getScriptKind(e):0},t.prototype.getScriptVersion=function(e){return this.shimHost.getScriptVersion(e)},t.prototype.getLocalizedDiagnosticMessages=function(){var e=this.shimHost.getLocalizedDiagnosticMessages();if(null===e||""===e)return null;try{return JSON.parse(e)}catch(t){return this.log(t.description||"diagnosticMessages.generated.json has invalid JSON format"),null}},t.prototype.getCancellationToken=function(){var t=this.shimHost.getCancellationToken();return new e.ThrottledCancellationToken(t)},t.prototype.getCurrentDirectory=function(){return this.shimHost.getCurrentDirectory()},t.prototype.getDirectories=function(e){return JSON.parse(this.shimHost.getDirectories(e))},t.prototype.getDefaultLibFileName=function(e){return this.shimHost.getDefaultLibFileName(JSON.stringify(e))},t.prototype.readDirectory=function(t,r,n,i,a){var o=e.getFileMatcherPatterns(t,n,i,this.shimHost.useCaseSensitiveFileNames(),this.shimHost.getCurrentDirectory());return JSON.parse(this.shimHost.readDirectory(t,JSON.stringify(r),JSON.stringify(o.basePaths),o.excludePattern,o.includeFilePattern,o.includeDirectoryPattern,a))},t.prototype.readFile=function(e,t){return this.shimHost.readFile(e,t)},t.prototype.fileExists=function(e){return this.shimHost.fileExists(e)},t}();e.LanguageServiceShimHostAdapter=n;var i=function(){function t(e){var t=this;this.shimHost=e,this.useCaseSensitiveFileNames=!!this.shimHost.useCaseSensitiveFileNames&&this.shimHost.useCaseSensitiveFileNames(),"directoryExists"in this.shimHost?this.directoryExists=function(e){return t.shimHost.directoryExists(e)}:this.directoryExists=void 0,"realpath"in this.shimHost?this.realpath=function(e){return t.shimHost.realpath(e)}:this.realpath=void 0}return t.prototype.readDirectory=function(t,r,n,i,a){var o=e.getFileMatcherPatterns(t,n,i,this.shimHost.useCaseSensitiveFileNames(),this.shimHost.getCurrentDirectory());return JSON.parse(this.shimHost.readDirectory(t,JSON.stringify(r),JSON.stringify(o.basePaths),o.excludePattern,o.includeFilePattern,o.includeDirectoryPattern,a))},t.prototype.fileExists=function(e){return this.shimHost.fileExists(e)},t.prototype.readFile=function(e){return this.shimHost.readFile(e)},t.prototype.getDirectories=function(e){return JSON.parse(this.shimHost.getDirectories(e))},t}();function s(e,t,r,n){return c(e,t,!0,r,n)}function c(r,n,i,a,o){try{var s=function(t,r,n,i){var a;i&&(t.log(r),a=e.timestamp());var o=n();if(i){var s=e.timestamp();if(t.log("".concat(r," completed in ").concat(s-a," msec")),e.isString(o)){var c=o;c.length>128&&(c=c.substring(0,128)+"..."),t.log("  result.length=".concat(c.length,", result='").concat(JSON.stringify(c),"'"))}}return o}(r,n,a,o);return i?JSON.stringify({result:s}):s}catch(c){return c instanceof e.OperationCanceledException?JSON.stringify({canceled:!0}):(t(r,c),c.description=n,JSON.stringify({error:c}))}}e.CoreServicesShimHostAdapter=i;var _=function(){function e(e){this.factory=e,e.registerShim(this)}return e.prototype.dispose=function(e){this.factory.unregisterShim(this)},e}();function p(t,r){return t.map((function(t){return function(t,r){return{message:e.flattenDiagnosticMessageText(t.messageText,r),start:t.start,length:t.length,category:e.diagnosticCategoryName(t),code:t.code,reportsUnnecessary:t.reportsUnnecessary,reportsDeprecated:t.reportsDeprecated}}(t,r)}))}e.realizeDiagnostics=p;var f=function(t){function r(e,r,n){var i=t.call(this,e)||this;return i.host=r,i.languageService=n,i.logPerformance=!1,i.logger=i.host,i}return l(r,t),r.prototype.forwardJSONCall=function(e,t){return s(this.logger,e,t,this.logPerformance)},r.prototype.dispose=function(e){this.logger.log("dispose()"),this.languageService.dispose(),this.languageService=null,d&&d.CollectGarbage&&(d.CollectGarbage(),this.logger.log("CollectGarbage()")),this.logger=null,t.prototype.dispose.call(this,e)},r.prototype.refresh=function(e){this.forwardJSONCall("refresh(".concat(e,")"),(function(){return null}))},r.prototype.cleanupSemanticCache=function(){var e=this;this.forwardJSONCall("cleanupSemanticCache()",(function(){return e.languageService.cleanupSemanticCache(),null}))},r.prototype.realizeDiagnostics=function(t){return p(t,e.getNewLineOrDefaultFromHost(this.host))},r.prototype.getSyntacticClassifications=function(t,r,n){var i=this;return this.forwardJSONCall("getSyntacticClassifications('".concat(t,"', ").concat(r,", ").concat(n,")"),(function(){return i.languageService.getSyntacticClassifications(t,e.createTextSpan(r,n))}))},r.prototype.getSemanticClassifications=function(t,r,n){var i=this;return this.forwardJSONCall("getSemanticClassifications('".concat(t,"', ").concat(r,", ").concat(n,")"),(function(){return i.languageService.getSemanticClassifications(t,e.createTextSpan(r,n))}))},r.prototype.getEncodedSyntacticClassifications=function(t,r,n){var i=this;return this.forwardJSONCall("getEncodedSyntacticClassifications('".concat(t,"', ").concat(r,", ").concat(n,")"),(function(){return g(i.languageService.getEncodedSyntacticClassifications(t,e.createTextSpan(r,n)))}))},r.prototype.getEncodedSemanticClassifications=function(t,r,n){var i=this;return this.forwardJSONCall("getEncodedSemanticClassifications('".concat(t,"', ").concat(r,", ").concat(n,")"),(function(){return g(i.languageService.getEncodedSemanticClassifications(t,e.createTextSpan(r,n)))}))},r.prototype.getSyntacticDiagnostics=function(e){var t=this;return this.forwardJSONCall("getSyntacticDiagnostics('".concat(e,"')"),(function(){var r=t.languageService.getSyntacticDiagnostics(e);return t.realizeDiagnostics(r)}))},r.prototype.getSemanticDiagnostics=function(e){var t=this;return this.forwardJSONCall("getSemanticDiagnostics('".concat(e,"')"),(function(){var r=t.languageService.getSemanticDiagnostics(e);return t.realizeDiagnostics(r)}))},r.prototype.getSuggestionDiagnostics=function(e){var t=this;return this.forwardJSONCall("getSuggestionDiagnostics('".concat(e,"')"),(function(){return t.realizeDiagnostics(t.languageService.getSuggestionDiagnostics(e))}))},r.prototype.getCompilerOptionsDiagnostics=function(){var e=this;return this.forwardJSONCall("getCompilerOptionsDiagnostics()",(function(){var t=e.languageService.getCompilerOptionsDiagnostics();return e.realizeDiagnostics(t)}))},r.prototype.getQuickInfoAtPosition=function(e,t){var r=this;return this.forwardJSONCall("getQuickInfoAtPosition('".concat(e,"', ").concat(t,")"),(function(){return r.languageService.getQuickInfoAtPosition(e,t)}))},r.prototype.getNameOrDottedNameSpan=function(e,t,r){var n=this;return this.forwardJSONCall("getNameOrDottedNameSpan('".concat(e,"', ").concat(t,", ").concat(r,")"),(function(){return n.languageService.getNameOrDottedNameSpan(e,t,r)}))},r.prototype.getBreakpointStatementAtPosition=function(e,t){var r=this;return this.forwardJSONCall("getBreakpointStatementAtPosition('".concat(e,"', ").concat(t,")"),(function(){return r.languageService.getBreakpointStatementAtPosition(e,t)}))},r.prototype.getSignatureHelpItems=function(e,t,r){var n=this;return this.forwardJSONCall("getSignatureHelpItems('".concat(e,"', ").concat(t,")"),(function(){return n.languageService.getSignatureHelpItems(e,t,r)}))},r.prototype.getDefinitionAtPosition=function(e,t){var r=this;return this.forwardJSONCall("getDefinitionAtPosition('".concat(e,"', ").concat(t,")"),(function(){return r.languageService.getDefinitionAtPosition(e,t)}))},r.prototype.getDefinitionAndBoundSpan=function(e,t){var r=this;return this.forwardJSONCall("getDefinitionAndBoundSpan('".concat(e,"', ").concat(t,")"),(function(){return r.languageService.getDefinitionAndBoundSpan(e,t)}))},r.prototype.getTypeDefinitionAtPosition=function(e,t){var r=this;return this.forwardJSONCall("getTypeDefinitionAtPosition('".concat(e,"', ").concat(t,")"),(function(){return r.languageService.getTypeDefinitionAtPosition(e,t)}))},r.prototype.getImplementationAtPosition=function(e,t){var r=this;return this.forwardJSONCall("getImplementationAtPosition('".concat(e,"', ").concat(t,")"),(function(){return r.languageService.getImplementationAtPosition(e,t)}))},r.prototype.getRenameInfo=function(e,t,r){var n=this;return this.forwardJSONCall("getRenameInfo('".concat(e,"', ").concat(t,")"),(function(){return n.languageService.getRenameInfo(e,t,r)}))},r.prototype.getSmartSelectionRange=function(e,t){var r=this;return this.forwardJSONCall("getSmartSelectionRange('".concat(e,"', ").concat(t,")"),(function(){return r.languageService.getSmartSelectionRange(e,t)}))},r.prototype.findRenameLocations=function(e,t,r,n,i){var a=this;return this.forwardJSONCall("findRenameLocations('".concat(e,"', ").concat(t,", ").concat(r,", ").concat(n,", ").concat(i,")"),(function(){return a.languageService.findRenameLocations(e,t,r,n,i)}))},r.prototype.getBraceMatchingAtPosition=function(e,t){var r=this;return this.forwardJSONCall("getBraceMatchingAtPosition('".concat(e,"', ").concat(t,")"),(function(){return r.languageService.getBraceMatchingAtPosition(e,t)}))},r.prototype.isValidBraceCompletionAtPosition=function(e,t,r){var n=this;return this.forwardJSONCall("isValidBraceCompletionAtPosition('".concat(e,"', ").concat(t,", ").concat(r,")"),(function(){return n.languageService.isValidBraceCompletionAtPosition(e,t,r)}))},r.prototype.getSpanOfEnclosingComment=function(e,t,r){var n=this;return this.forwardJSONCall("getSpanOfEnclosingComment('".concat(e,"', ").concat(t,")"),(function(){return n.languageService.getSpanOfEnclosingComment(e,t,r)}))},r.prototype.getIndentationAtPosition=function(e,t,r){var n=this;return this.forwardJSONCall("getIndentationAtPosition('".concat(e,"', ").concat(t,")"),(function(){var i=JSON.parse(r);return n.languageService.getIndentationAtPosition(e,t,i)}))},r.prototype.getReferencesAtPosition=function(e,t){var r=this;return this.forwardJSONCall("getReferencesAtPosition('".concat(e,"', ").concat(t,")"),(function(){return r.languageService.getReferencesAtPosition(e,t)}))},r.prototype.findReferences=function(e,t){var r=this;return this.forwardJSONCall("findReferences('".concat(e,"', ").concat(t,")"),(function(){return r.languageService.findReferences(e,t)}))},r.prototype.getFileReferences=function(e){var t=this;return this.forwardJSONCall("getFileReferences('".concat(e,")"),(function(){return t.languageService.getFileReferences(e)}))},r.prototype.getOccurrencesAtPosition=function(e,t){var r=this;return this.forwardJSONCall("getOccurrencesAtPosition('".concat(e,"', ").concat(t,")"),(function(){return r.languageService.getOccurrencesAtPosition(e,t)}))},r.prototype.getDocumentHighlights=function(t,r,n){var i=this;return this.forwardJSONCall("getDocumentHighlights('".concat(t,"', ").concat(r,")"),(function(){var a=i.languageService.getDocumentHighlights(t,r,JSON.parse(n)),o=e.toFileNameLowerCase(e.normalizeSlashes(t));return e.filter(a,(function(t){return e.toFileNameLowerCase(e.normalizeSlashes(t.fileName))===o}))}))},r.prototype.getCompletionsAtPosition=function(e,t,r,n){var i=this;return this.forwardJSONCall("getCompletionsAtPosition('".concat(e,"', ").concat(t,", ").concat(r,", ").concat(n,")"),(function(){return i.languageService.getCompletionsAtPosition(e,t,r,n)}))},r.prototype.getCompletionEntryDetails=function(e,t,r,n,i,a,o){var s=this;return this.forwardJSONCall("getCompletionEntryDetails('".concat(e,"', ").concat(t,", '").concat(r,"')"),(function(){var c=void 0===n?void 0:JSON.parse(n);return s.languageService.getCompletionEntryDetails(e,t,r,c,i,a,o)}))},r.prototype.getFormattingEditsForRange=function(e,t,r,n){var i=this;return this.forwardJSONCall("getFormattingEditsForRange('".concat(e,"', ").concat(t,", ").concat(r,")"),(function(){var a=JSON.parse(n);return i.languageService.getFormattingEditsForRange(e,t,r,a)}))},r.prototype.getFormattingEditsForDocument=function(e,t){var r=this;return this.forwardJSONCall("getFormattingEditsForDocument('".concat(e,"')"),(function(){var n=JSON.parse(t);return r.languageService.getFormattingEditsForDocument(e,n)}))},r.prototype.getFormattingEditsAfterKeystroke=function(e,t,r,n){var i=this;return this.forwardJSONCall("getFormattingEditsAfterKeystroke('".concat(e,"', ").concat(t,", '").concat(r,"')"),(function(){var a=JSON.parse(n);return i.languageService.getFormattingEditsAfterKeystroke(e,t,r,a)}))},r.prototype.getDocCommentTemplateAtPosition=function(e,t,r){var n=this;return this.forwardJSONCall("getDocCommentTemplateAtPosition('".concat(e,"', ").concat(t,")"),(function(){return n.languageService.getDocCommentTemplateAtPosition(e,t,r)}))},r.prototype.getNavigateToItems=function(e,t,r){var n=this;return this.forwardJSONCall("getNavigateToItems('".concat(e,"', ").concat(t,", ").concat(r,")"),(function(){return n.languageService.getNavigateToItems(e,t,r)}))},r.prototype.getNavigationBarItems=function(e){var t=this;return this.forwardJSONCall("getNavigationBarItems('".concat(e,"')"),(function(){return t.languageService.getNavigationBarItems(e)}))},r.prototype.getNavigationTree=function(e){var t=this;return this.forwardJSONCall("getNavigationTree('".concat(e,"')"),(function(){return t.languageService.getNavigationTree(e)}))},r.prototype.getOutliningSpans=function(e){var t=this;return this.forwardJSONCall("getOutliningSpans('".concat(e,"')"),(function(){return t.languageService.getOutliningSpans(e)}))},r.prototype.getTodoComments=function(e,t){var r=this;return this.forwardJSONCall("getTodoComments('".concat(e,"')"),(function(){return r.languageService.getTodoComments(e,JSON.parse(t))}))},r.prototype.prepareCallHierarchy=function(e,t){var r=this;return this.forwardJSONCall("prepareCallHierarchy('".concat(e,"', ").concat(t,")"),(function(){return r.languageService.prepareCallHierarchy(e,t)}))},r.prototype.provideCallHierarchyIncomingCalls=function(e,t){var r=this;return this.forwardJSONCall("provideCallHierarchyIncomingCalls('".concat(e,"', ").concat(t,")"),(function(){return r.languageService.provideCallHierarchyIncomingCalls(e,t)}))},r.prototype.provideCallHierarchyOutgoingCalls=function(e,t){var r=this;return this.forwardJSONCall("provideCallHierarchyOutgoingCalls('".concat(e,"', ").concat(t,")"),(function(){return r.languageService.provideCallHierarchyOutgoingCalls(e,t)}))},r.prototype.provideInlayHints=function(e,t,r){var n=this;return this.forwardJSONCall("provideInlayHints('".concat(e,"', '").concat(JSON.stringify(t),"', ").concat(JSON.stringify(r),")"),(function(){return n.languageService.provideInlayHints(e,t,r)}))},r.prototype.getEmitOutput=function(e){var t=this;return this.forwardJSONCall("getEmitOutput('".concat(e,"')"),(function(){var r=t.languageService.getEmitOutput(e),n=r.diagnostics,i=u(r,["diagnostics"]);return o(o({},i),{diagnostics:t.realizeDiagnostics(n)})}))},r.prototype.getEmitOutputObject=function(e){var t=this;return c(this.logger,"getEmitOutput('".concat(e,"')"),!1,(function(){return t.languageService.getEmitOutput(e)}),this.logPerformance)},r.prototype.toggleLineComment=function(e,t){var r=this;return this.forwardJSONCall("toggleLineComment('".concat(e,"', '").concat(JSON.stringify(t),"')"),(function(){return r.languageService.toggleLineComment(e,t)}))},r.prototype.toggleMultilineComment=function(e,t){var r=this;return this.forwardJSONCall("toggleMultilineComment('".concat(e,"', '").concat(JSON.stringify(t),"')"),(function(){return r.languageService.toggleMultilineComment(e,t)}))},r.prototype.commentSelection=function(e,t){var r=this;return this.forwardJSONCall("commentSelection('".concat(e,"', '").concat(JSON.stringify(t),"')"),(function(){return r.languageService.commentSelection(e,t)}))},r.prototype.uncommentSelection=function(e,t){var r=this;return this.forwardJSONCall("uncommentSelection('".concat(e,"', '").concat(JSON.stringify(t),"')"),(function(){return r.languageService.uncommentSelection(e,t)}))},r}(_);function g(e){return{spans:e.spans.join(","),endOfLineState:e.endOfLineState}}var m=function(t){function r(r,n){var i=t.call(this,r)||this;return i.logger=n,i.logPerformance=!1,i.classifier=e.createClassifier(),i}return l(r,t),r.prototype.getEncodedLexicalClassifications=function(e,t,r){var n=this;return void 0===r&&(r=!1),s(this.logger,"getEncodedLexicalClassifications",(function(){return g(n.classifier.getEncodedLexicalClassifications(e,t,r))}),this.logPerformance)},r.prototype.getClassificationsForLine=function(e,t,r){void 0===r&&(r=!1);for(var n=this.classifier.getClassificationsForLine(e,t,r),i="",a=0,o=n.entries;a<o.length;a++){var s=o[a];i+=s.length+"\n",i+=s.classification+"\n"}return i+=n.finalLexState},r}(_),y=function(t){function r(e,r,n){var i=t.call(this,e)||this;return i.logger=r,i.host=n,i.logPerformance=!1,i}return l(r,t),r.prototype.forwardJSONCall=function(e,t){return s(this.logger,e,t,this.logPerformance)},r.prototype.resolveModuleName=function(t,r,n){var i=this;return this.forwardJSONCall("resolveModuleName('".concat(t,"')"),(function(){var a=JSON.parse(n),o=e.resolveModuleName(r,e.normalizeSlashes(t),a,i.host),s=o.resolvedModule?o.resolvedModule.resolvedFileName:void 0;return o.resolvedModule&&".ts"!==o.resolvedModule.extension&&".tsx"!==o.resolvedModule.extension&&".d.ts"!==o.resolvedModule.extension&&(s=void 0),{resolvedFileName:s,failedLookupLocations:o.failedLookupLocations,affectingLocations:o.affectingLocations}}))},r.prototype.resolveTypeReferenceDirective=function(t,r,n){var i=this;return this.forwardJSONCall("resolveTypeReferenceDirective(".concat(t,")"),(function(){var a=JSON.parse(n),o=e.resolveTypeReferenceDirective(r,e.normalizeSlashes(t),a,i.host);return{resolvedFileName:o.resolvedTypeReferenceDirective?o.resolvedTypeReferenceDirective.resolvedFileName:void 0,primary:!o.resolvedTypeReferenceDirective||o.resolvedTypeReferenceDirective.primary,failedLookupLocations:o.failedLookupLocations}}))},r.prototype.getPreProcessedFileInfo=function(t,r){var n=this;return this.forwardJSONCall("getPreProcessedFileInfo('".concat(t,"')"),(function(){var t=e.preProcessFile(e.getSnapshotText(r),!0,!0);return{referencedFiles:n.convertFileReferences(t.referencedFiles),importedFiles:n.convertFileReferences(t.importedFiles),ambientExternalModules:t.ambientExternalModules,isLibFile:t.isLibFile,typeReferenceDirectives:n.convertFileReferences(t.typeReferenceDirectives),libReferenceDirectives:n.convertFileReferences(t.libReferenceDirectives)}}))},r.prototype.getAutomaticTypeDirectiveNames=function(t){var r=this;return this.forwardJSONCall("getAutomaticTypeDirectiveNames('".concat(t,"')"),(function(){var n=JSON.parse(t);return e.getAutomaticTypeDirectiveNames(n,r.host)}))},r.prototype.convertFileReferences=function(t){if(t){for(var r=[],n=0,i=t;n<i.length;n++){var a=i[n];r.push({path:e.normalizeSlashes(a.fileName),position:a.pos,length:a.end-a.pos})}return r}},r.prototype.getTSConfigFileInfo=function(t,r){var n=this;return this.forwardJSONCall("getTSConfigFileInfo('".concat(t,"')"),(function(){var i=e.parseJsonText(t,e.getSnapshotText(r)),o=e.normalizeSlashes(t),s=e.parseJsonSourceFileConfigFileContent(i,n.host,e.getDirectoryPath(o),{},o);return{options:s.options,typeAcquisition:s.typeAcquisition,files:s.fileNames,raw:s.raw,errors:p(a(a([],i.parseDiagnostics,!0),s.errors,!0),"\r\n")}}))},r.prototype.getDefaultCompilationSettings=function(){return this.forwardJSONCall("getDefaultCompilationSettings()",(function(){return e.getDefaultCompilerOptions()}))},r.prototype.discoverTypings=function(t){var r=this,n=e.createGetCanonicalFileName(!1);return this.forwardJSONCall("discoverTypings()",(function(){var i=JSON.parse(t);return void 0===r.safeList&&(r.safeList=e.JsTyping.loadSafeList(r.host,e.toPath(i.safeListPath,i.safeListPath,n))),e.JsTyping.discoverTypings(r.host,(function(e){return r.logger.log(e)}),i.fileNames,e.toPath(i.projectRootPath,i.projectRootPath,n),r.safeList,i.packageNameToTypingLocation,i.typeAcquisition,i.unresolvedImports,i.typesRegistry,e.emptyOptions)}))},r}(_),v=function(){function r(){this._shims=[]}return r.prototype.getServicesVersion=function(){return e.servicesVersion},r.prototype.createLanguageServiceShim=function(r){try{void 0===this.documentRegistry&&(this.documentRegistry=e.createDocumentRegistry(r.useCaseSensitiveFileNames&&r.useCaseSensitiveFileNames(),r.getCurrentDirectory()));var i=new n(r),a=e.createLanguageService(i,this.documentRegistry,!1);return new f(this,r,a)}catch(o){throw t(r,o),o}},r.prototype.createClassifierShim=function(e){try{return new m(this,e)}catch(r){throw t(e,r),r}},r.prototype.createCoreServicesShim=function(e){try{var r=new i(e);return new y(this,e,r)}catch(n){throw t(e,n),n}},r.prototype.close=function(){e.clear(this._shims),this.documentRegistry=void 0},r.prototype.registerShim=function(e){this._shims.push(e)},r.prototype.unregisterShim=function(e){for(var t=0;t<this._shims.length;t++)if(this._shims[t]===e)return void delete this._shims[t];throw new Error("Invalid operation")},r}();e.TypeScriptServicesFactory=v}(_||(_={})),function(){if("object"!=typeof globalThis)try{Object.defineProperty(Object.prototype,"__magic__",{get:function(){return this},configurable:!0}),__magic__.globalThis=__magic__,"undefined"==typeof globalThis&&(window.globalThis=window),delete Object.prototype.__magic__}catch(e){window.globalThis=window}}(),("undefined"==typeof process||process.browser)&&(globalThis.TypeScript=globalThis.TypeScript||{},globalThis.TypeScript.Services=globalThis.TypeScript.Services||{},globalThis.TypeScript.Services.TypeScriptServicesFactory=_.TypeScriptServicesFactory,globalThis.toolsVersion=_.versionMajorMinor),e.exports&&(e.exports=_),function(e){function t(t,r,n,i){if(Object.defineProperty(l,"name",o(o({},Object.getOwnPropertyDescriptor(l,"name")),{value:t})),i)for(var a=0,s=Object.keys(i);a<s.length;a++){var c=+s[a];!isNaN(c)&&e.hasProperty(r,"".concat(c))&&(r[c]=e.Debug.deprecate(r[c],o(o({},i[c]),{name:t})))}var u=function(t,r){return function(n){for(var i=0;e.hasProperty(t,"".concat(i))&&e.hasProperty(r,"".concat(i));i++){if((0,r[i])(n))return i}}}(r,n);return l;function l(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=u(e),i=void 0!==n?r[n]:void 0;if("function"==typeof i)return i.apply(void 0,e);throw new TypeError("Invalid arguments")}}e.createOverload=t,e.buildOverload=function(e){return{overload:function(r){return{bind:function(n){return{finish:function(){return t(e,r,n)},deprecate:function(i){return{finish:function(){return t(e,r,n,i)}}}}}}}}}}(_||(_={})),function(e){var t={since:"4.0",warnAfter:"4.1",message:"Use the appropriate method on 'ts.factory' or the 'factory' supplied by your transformation context instead."};e.createNodeArray=e.Debug.deprecate(e.factory.createNodeArray,t),e.createNumericLiteral=e.Debug.deprecate(e.factory.createNumericLiteral,t),e.createBigIntLiteral=e.Debug.deprecate(e.factory.createBigIntLiteral,t),e.createStringLiteral=e.Debug.deprecate(e.factory.createStringLiteral,t),e.createStringLiteralFromNode=e.Debug.deprecate(e.factory.createStringLiteralFromNode,t),e.createRegularExpressionLiteral=e.Debug.deprecate(e.factory.createRegularExpressionLiteral,t),e.createLoopVariable=e.Debug.deprecate(e.factory.createLoopVariable,t),e.createUniqueName=e.Debug.deprecate(e.factory.createUniqueName,t),e.createPrivateIdentifier=e.Debug.deprecate(e.factory.createPrivateIdentifier,t),e.createSuper=e.Debug.deprecate(e.factory.createSuper,t),e.createThis=e.Debug.deprecate(e.factory.createThis,t),e.createNull=e.Debug.deprecate(e.factory.createNull,t),e.createTrue=e.Debug.deprecate(e.factory.createTrue,t),e.createFalse=e.Debug.deprecate(e.factory.createFalse,t),e.createModifier=e.Debug.deprecate(e.factory.createModifier,t),e.createModifiersFromModifierFlags=e.Debug.deprecate(e.factory.createModifiersFromModifierFlags,t),e.createQualifiedName=e.Debug.deprecate(e.factory.createQualifiedName,t),e.updateQualifiedName=e.Debug.deprecate(e.factory.updateQualifiedName,t),e.createComputedPropertyName=e.Debug.deprecate(e.factory.createComputedPropertyName,t),e.updateComputedPropertyName=e.Debug.deprecate(e.factory.updateComputedPropertyName,t),e.createTypeParameterDeclaration=e.Debug.deprecate(e.factory.createTypeParameterDeclaration,t),e.updateTypeParameterDeclaration=e.Debug.deprecate(e.factory.updateTypeParameterDeclaration,t),e.createParameter=e.Debug.deprecate(e.factory.createParameterDeclaration,t),e.updateParameter=e.Debug.deprecate(e.factory.updateParameterDeclaration,t),e.createDecorator=e.Debug.deprecate(e.factory.createDecorator,t),e.updateDecorator=e.Debug.deprecate(e.factory.updateDecorator,t),e.createProperty=e.Debug.deprecate(e.factory.createPropertyDeclaration,t),e.updateProperty=e.Debug.deprecate(e.factory.updatePropertyDeclaration,t),e.createMethod=e.Debug.deprecate(e.factory.createMethodDeclaration,t),e.updateMethod=e.Debug.deprecate(e.factory.updateMethodDeclaration,t),e.createConstructor=e.Debug.deprecate(e.factory.createConstructorDeclaration,t),e.updateConstructor=e.Debug.deprecate(e.factory.updateConstructorDeclaration,t),e.createGetAccessor=e.Debug.deprecate(e.factory.createGetAccessorDeclaration,t),e.updateGetAccessor=e.Debug.deprecate(e.factory.updateGetAccessorDeclaration,t),e.createSetAccessor=e.Debug.deprecate(e.factory.createSetAccessorDeclaration,t),e.updateSetAccessor=e.Debug.deprecate(e.factory.updateSetAccessorDeclaration,t),e.createCallSignature=e.Debug.deprecate(e.factory.createCallSignature,t),e.updateCallSignature=e.Debug.deprecate(e.factory.updateCallSignature,t),e.createConstructSignature=e.Debug.deprecate(e.factory.createConstructSignature,t),e.updateConstructSignature=e.Debug.deprecate(e.factory.updateConstructSignature,t),e.updateIndexSignature=e.Debug.deprecate(e.factory.updateIndexSignature,t),e.createKeywordTypeNode=e.Debug.deprecate(e.factory.createKeywordTypeNode,t),e.createTypePredicateNodeWithModifier=e.Debug.deprecate(e.factory.createTypePredicateNode,t),e.updateTypePredicateNodeWithModifier=e.Debug.deprecate(e.factory.updateTypePredicateNode,t),e.createTypeReferenceNode=e.Debug.deprecate(e.factory.createTypeReferenceNode,t),e.updateTypeReferenceNode=e.Debug.deprecate(e.factory.updateTypeReferenceNode,t),e.createFunctionTypeNode=e.Debug.deprecate(e.factory.createFunctionTypeNode,t),e.updateFunctionTypeNode=e.Debug.deprecate(e.factory.updateFunctionTypeNode,t),e.createConstructorTypeNode=e.Debug.deprecate((function(t,r,n){return e.factory.createConstructorTypeNode(void 0,t,r,n)}),t),e.updateConstructorTypeNode=e.Debug.deprecate((function(t,r,n,i){return e.factory.updateConstructorTypeNode(t,t.modifiers,r,n,i)}),t),e.createTypeQueryNode=e.Debug.deprecate(e.factory.createTypeQueryNode,t),e.updateTypeQueryNode=e.Debug.deprecate(e.factory.updateTypeQueryNode,t),e.createTypeLiteralNode=e.Debug.deprecate(e.factory.createTypeLiteralNode,t),e.updateTypeLiteralNode=e.Debug.deprecate(e.factory.updateTypeLiteralNode,t),e.createArrayTypeNode=e.Debug.deprecate(e.factory.createArrayTypeNode,t),e.updateArrayTypeNode=e.Debug.deprecate(e.factory.updateArrayTypeNode,t),e.createTupleTypeNode=e.Debug.deprecate(e.factory.createTupleTypeNode,t),e.updateTupleTypeNode=e.Debug.deprecate(e.factory.updateTupleTypeNode,t),e.createOptionalTypeNode=e.Debug.deprecate(e.factory.createOptionalTypeNode,t),e.updateOptionalTypeNode=e.Debug.deprecate(e.factory.updateOptionalTypeNode,t),e.createRestTypeNode=e.Debug.deprecate(e.factory.createRestTypeNode,t),e.updateRestTypeNode=e.Debug.deprecate(e.factory.updateRestTypeNode,t),e.createUnionTypeNode=e.Debug.deprecate(e.factory.createUnionTypeNode,t),e.updateUnionTypeNode=e.Debug.deprecate(e.factory.updateUnionTypeNode,t),e.createIntersectionTypeNode=e.Debug.deprecate(e.factory.createIntersectionTypeNode,t),e.updateIntersectionTypeNode=e.Debug.deprecate(e.factory.updateIntersectionTypeNode,t),e.createConditionalTypeNode=e.Debug.deprecate(e.factory.createConditionalTypeNode,t),e.updateConditionalTypeNode=e.Debug.deprecate(e.factory.updateConditionalTypeNode,t),e.createInferTypeNode=e.Debug.deprecate(e.factory.createInferTypeNode,t),e.updateInferTypeNode=e.Debug.deprecate(e.factory.updateInferTypeNode,t),e.createImportTypeNode=e.Debug.deprecate(e.factory.createImportTypeNode,t),e.updateImportTypeNode=e.Debug.deprecate(e.factory.updateImportTypeNode,t),e.createParenthesizedType=e.Debug.deprecate(e.factory.createParenthesizedType,t),e.updateParenthesizedType=e.Debug.deprecate(e.factory.updateParenthesizedType,t),e.createThisTypeNode=e.Debug.deprecate(e.factory.createThisTypeNode,t),e.updateTypeOperatorNode=e.Debug.deprecate(e.factory.updateTypeOperatorNode,t),e.createIndexedAccessTypeNode=e.Debug.deprecate(e.factory.createIndexedAccessTypeNode,t),e.updateIndexedAccessTypeNode=e.Debug.deprecate(e.factory.updateIndexedAccessTypeNode,t),e.createMappedTypeNode=e.Debug.deprecate(e.factory.createMappedTypeNode,t),e.updateMappedTypeNode=e.Debug.deprecate(e.factory.updateMappedTypeNode,t),e.createLiteralTypeNode=e.Debug.deprecate(e.factory.createLiteralTypeNode,t),e.updateLiteralTypeNode=e.Debug.deprecate(e.factory.updateLiteralTypeNode,t),e.createObjectBindingPattern=e.Debug.deprecate(e.factory.createObjectBindingPattern,t),e.updateObjectBindingPattern=e.Debug.deprecate(e.factory.updateObjectBindingPattern,t),e.createArrayBindingPattern=e.Debug.deprecate(e.factory.createArrayBindingPattern,t),e.updateArrayBindingPattern=e.Debug.deprecate(e.factory.updateArrayBindingPattern,t),e.createBindingElement=e.Debug.deprecate(e.factory.createBindingElement,t),e.updateBindingElement=e.Debug.deprecate(e.factory.updateBindingElement,t),e.createArrayLiteral=e.Debug.deprecate(e.factory.createArrayLiteralExpression,t),e.updateArrayLiteral=e.Debug.deprecate(e.factory.updateArrayLiteralExpression,t),e.createObjectLiteral=e.Debug.deprecate(e.factory.createObjectLiteralExpression,t),e.updateObjectLiteral=e.Debug.deprecate(e.factory.updateObjectLiteralExpression,t),e.createPropertyAccess=e.Debug.deprecate(e.factory.createPropertyAccessExpression,t),e.updatePropertyAccess=e.Debug.deprecate(e.factory.updatePropertyAccessExpression,t),e.createPropertyAccessChain=e.Debug.deprecate(e.factory.createPropertyAccessChain,t),e.updatePropertyAccessChain=e.Debug.deprecate(e.factory.updatePropertyAccessChain,t),e.createElementAccess=e.Debug.deprecate(e.factory.createElementAccessExpression,t),e.updateElementAccess=e.Debug.deprecate(e.factory.updateElementAccessExpression,t),e.createElementAccessChain=e.Debug.deprecate(e.factory.createElementAccessChain,t),e.updateElementAccessChain=e.Debug.deprecate(e.factory.updateElementAccessChain,t),e.createCall=e.Debug.deprecate(e.factory.createCallExpression,t),e.updateCall=e.Debug.deprecate(e.factory.updateCallExpression,t),e.createCallChain=e.Debug.deprecate(e.factory.createCallChain,t),e.updateCallChain=e.Debug.deprecate(e.factory.updateCallChain,t),e.createNew=e.Debug.deprecate(e.factory.createNewExpression,t),e.updateNew=e.Debug.deprecate(e.factory.updateNewExpression,t),e.createTypeAssertion=e.Debug.deprecate(e.factory.createTypeAssertion,t),e.updateTypeAssertion=e.Debug.deprecate(e.factory.updateTypeAssertion,t),e.createParen=e.Debug.deprecate(e.factory.createParenthesizedExpression,t),e.updateParen=e.Debug.deprecate(e.factory.updateParenthesizedExpression,t),e.createFunctionExpression=e.Debug.deprecate(e.factory.createFunctionExpression,t),e.updateFunctionExpression=e.Debug.deprecate(e.factory.updateFunctionExpression,t),e.createDelete=e.Debug.deprecate(e.factory.createDeleteExpression,t),e.updateDelete=e.Debug.deprecate(e.factory.updateDeleteExpression,t),e.createTypeOf=e.Debug.deprecate(e.factory.createTypeOfExpression,t),e.updateTypeOf=e.Debug.deprecate(e.factory.updateTypeOfExpression,t),e.createVoid=e.Debug.deprecate(e.factory.createVoidExpression,t),e.updateVoid=e.Debug.deprecate(e.factory.updateVoidExpression,t),e.createAwait=e.Debug.deprecate(e.factory.createAwaitExpression,t),e.updateAwait=e.Debug.deprecate(e.factory.updateAwaitExpression,t),e.createPrefix=e.Debug.deprecate(e.factory.createPrefixUnaryExpression,t),e.updatePrefix=e.Debug.deprecate(e.factory.updatePrefixUnaryExpression,t),e.createPostfix=e.Debug.deprecate(e.factory.createPostfixUnaryExpression,t),e.updatePostfix=e.Debug.deprecate(e.factory.updatePostfixUnaryExpression,t),e.createBinary=e.Debug.deprecate(e.factory.createBinaryExpression,t),e.updateConditional=e.Debug.deprecate(e.factory.updateConditionalExpression,t),e.createTemplateExpression=e.Debug.deprecate(e.factory.createTemplateExpression,t),e.updateTemplateExpression=e.Debug.deprecate(e.factory.updateTemplateExpression,t),e.createTemplateHead=e.Debug.deprecate(e.factory.createTemplateHead,t),e.createTemplateMiddle=e.Debug.deprecate(e.factory.createTemplateMiddle,t),e.createTemplateTail=e.Debug.deprecate(e.factory.createTemplateTail,t),e.createNoSubstitutionTemplateLiteral=e.Debug.deprecate(e.factory.createNoSubstitutionTemplateLiteral,t),e.updateYield=e.Debug.deprecate(e.factory.updateYieldExpression,t),e.createSpread=e.Debug.deprecate(e.factory.createSpreadElement,t),e.updateSpread=e.Debug.deprecate(e.factory.updateSpreadElement,t),e.createOmittedExpression=e.Debug.deprecate(e.factory.createOmittedExpression,t),e.createAsExpression=e.Debug.deprecate(e.factory.createAsExpression,t),e.updateAsExpression=e.Debug.deprecate(e.factory.updateAsExpression,t),e.createNonNullExpression=e.Debug.deprecate(e.factory.createNonNullExpression,t),e.updateNonNullExpression=e.Debug.deprecate(e.factory.updateNonNullExpression,t),e.createNonNullChain=e.Debug.deprecate(e.factory.createNonNullChain,t),e.updateNonNullChain=e.Debug.deprecate(e.factory.updateNonNullChain,t),e.createMetaProperty=e.Debug.deprecate(e.factory.createMetaProperty,t),e.updateMetaProperty=e.Debug.deprecate(e.factory.updateMetaProperty,t),e.createTemplateSpan=e.Debug.deprecate(e.factory.createTemplateSpan,t),e.updateTemplateSpan=e.Debug.deprecate(e.factory.updateTemplateSpan,t),e.createSemicolonClassElement=e.Debug.deprecate(e.factory.createSemicolonClassElement,t),e.createBlock=e.Debug.deprecate(e.factory.createBlock,t),e.updateBlock=e.Debug.deprecate(e.factory.updateBlock,t),e.createVariableStatement=e.Debug.deprecate(e.factory.createVariableStatement,t),e.updateVariableStatement=e.Debug.deprecate(e.factory.updateVariableStatement,t),e.createEmptyStatement=e.Debug.deprecate(e.factory.createEmptyStatement,t),e.createExpressionStatement=e.Debug.deprecate(e.factory.createExpressionStatement,t),e.updateExpressionStatement=e.Debug.deprecate(e.factory.updateExpressionStatement,t),e.createStatement=e.Debug.deprecate(e.factory.createExpressionStatement,t),e.updateStatement=e.Debug.deprecate(e.factory.updateExpressionStatement,t),e.createIf=e.Debug.deprecate(e.factory.createIfStatement,t),e.updateIf=e.Debug.deprecate(e.factory.updateIfStatement,t),e.createDo=e.Debug.deprecate(e.factory.createDoStatement,t),e.updateDo=e.Debug.deprecate(e.factory.updateDoStatement,t),e.createWhile=e.Debug.deprecate(e.factory.createWhileStatement,t),e.updateWhile=e.Debug.deprecate(e.factory.updateWhileStatement,t),e.createFor=e.Debug.deprecate(e.factory.createForStatement,t),e.updateFor=e.Debug.deprecate(e.factory.updateForStatement,t),e.createForIn=e.Debug.deprecate(e.factory.createForInStatement,t),e.updateForIn=e.Debug.deprecate(e.factory.updateForInStatement,t),e.createForOf=e.Debug.deprecate(e.factory.createForOfStatement,t),e.updateForOf=e.Debug.deprecate(e.factory.updateForOfStatement,t),e.createContinue=e.Debug.deprecate(e.factory.createContinueStatement,t),e.updateContinue=e.Debug.deprecate(e.factory.updateContinueStatement,t),e.createBreak=e.Debug.deprecate(e.factory.createBreakStatement,t),e.updateBreak=e.Debug.deprecate(e.factory.updateBreakStatement,t),e.createReturn=e.Debug.deprecate(e.factory.createReturnStatement,t),e.updateReturn=e.Debug.deprecate(e.factory.updateReturnStatement,t),e.createWith=e.Debug.deprecate(e.factory.createWithStatement,t),e.updateWith=e.Debug.deprecate(e.factory.updateWithStatement,t),e.createSwitch=e.Debug.deprecate(e.factory.createSwitchStatement,t),e.updateSwitch=e.Debug.deprecate(e.factory.updateSwitchStatement,t),e.createLabel=e.Debug.deprecate(e.factory.createLabeledStatement,t),e.updateLabel=e.Debug.deprecate(e.factory.updateLabeledStatement,t),e.createThrow=e.Debug.deprecate(e.factory.createThrowStatement,t),e.updateThrow=e.Debug.deprecate(e.factory.updateThrowStatement,t),e.createTry=e.Debug.deprecate(e.factory.createTryStatement,t),e.updateTry=e.Debug.deprecate(e.factory.updateTryStatement,t),e.createDebuggerStatement=e.Debug.deprecate(e.factory.createDebuggerStatement,t),e.createVariableDeclarationList=e.Debug.deprecate(e.factory.createVariableDeclarationList,t),e.updateVariableDeclarationList=e.Debug.deprecate(e.factory.updateVariableDeclarationList,t),e.createFunctionDeclaration=e.Debug.deprecate(e.factory.createFunctionDeclaration,t),e.updateFunctionDeclaration=e.Debug.deprecate(e.factory.updateFunctionDeclaration,t),e.createClassDeclaration=e.Debug.deprecate(e.factory.createClassDeclaration,t),e.updateClassDeclaration=e.Debug.deprecate(e.factory.updateClassDeclaration,t),e.createInterfaceDeclaration=e.Debug.deprecate(e.factory.createInterfaceDeclaration,t),e.updateInterfaceDeclaration=e.Debug.deprecate(e.factory.updateInterfaceDeclaration,t),e.createTypeAliasDeclaration=e.Debug.deprecate(e.factory.createTypeAliasDeclaration,t),e.updateTypeAliasDeclaration=e.Debug.deprecate(e.factory.updateTypeAliasDeclaration,t),e.createEnumDeclaration=e.Debug.deprecate(e.factory.createEnumDeclaration,t),e.updateEnumDeclaration=e.Debug.deprecate(e.factory.updateEnumDeclaration,t),e.createModuleDeclaration=e.Debug.deprecate(e.factory.createModuleDeclaration,t),e.updateModuleDeclaration=e.Debug.deprecate(e.factory.updateModuleDeclaration,t),e.createModuleBlock=e.Debug.deprecate(e.factory.createModuleBlock,t),e.updateModuleBlock=e.Debug.deprecate(e.factory.updateModuleBlock,t),e.createCaseBlock=e.Debug.deprecate(e.factory.createCaseBlock,t),e.updateCaseBlock=e.Debug.deprecate(e.factory.updateCaseBlock,t),e.createNamespaceExportDeclaration=e.Debug.deprecate(e.factory.createNamespaceExportDeclaration,t),e.updateNamespaceExportDeclaration=e.Debug.deprecate(e.factory.updateNamespaceExportDeclaration,t),e.createImportEqualsDeclaration=e.Debug.deprecate(e.factory.createImportEqualsDeclaration,t),e.updateImportEqualsDeclaration=e.Debug.deprecate(e.factory.updateImportEqualsDeclaration,t),e.createImportDeclaration=e.Debug.deprecate(e.factory.createImportDeclaration,t),e.updateImportDeclaration=e.Debug.deprecate(e.factory.updateImportDeclaration,t),e.createNamespaceImport=e.Debug.deprecate(e.factory.createNamespaceImport,t),e.updateNamespaceImport=e.Debug.deprecate(e.factory.updateNamespaceImport,t),e.createNamedImports=e.Debug.deprecate(e.factory.createNamedImports,t),e.updateNamedImports=e.Debug.deprecate(e.factory.updateNamedImports,t),e.createImportSpecifier=e.Debug.deprecate(e.factory.createImportSpecifier,t),e.updateImportSpecifier=e.Debug.deprecate(e.factory.updateImportSpecifier,t),e.createExportAssignment=e.Debug.deprecate(e.factory.createExportAssignment,t),e.updateExportAssignment=e.Debug.deprecate(e.factory.updateExportAssignment,t),e.createNamedExports=e.Debug.deprecate(e.factory.createNamedExports,t),e.updateNamedExports=e.Debug.deprecate(e.factory.updateNamedExports,t),e.createExportSpecifier=e.Debug.deprecate(e.factory.createExportSpecifier,t),e.updateExportSpecifier=e.Debug.deprecate(e.factory.updateExportSpecifier,t),e.createExternalModuleReference=e.Debug.deprecate(e.factory.createExternalModuleReference,t),e.updateExternalModuleReference=e.Debug.deprecate(e.factory.updateExternalModuleReference,t),e.createJSDocTypeExpression=e.Debug.deprecate(e.factory.createJSDocTypeExpression,t),e.createJSDocTypeTag=e.Debug.deprecate(e.factory.createJSDocTypeTag,t),e.createJSDocReturnTag=e.Debug.deprecate(e.factory.createJSDocReturnTag,t),e.createJSDocThisTag=e.Debug.deprecate(e.factory.createJSDocThisTag,t),e.createJSDocComment=e.Debug.deprecate(e.factory.createJSDocComment,t),e.createJSDocParameterTag=e.Debug.deprecate(e.factory.createJSDocParameterTag,t),e.createJSDocClassTag=e.Debug.deprecate(e.factory.createJSDocClassTag,t),e.createJSDocAugmentsTag=e.Debug.deprecate(e.factory.createJSDocAugmentsTag,t),e.createJSDocEnumTag=e.Debug.deprecate(e.factory.createJSDocEnumTag,t),e.createJSDocTemplateTag=e.Debug.deprecate(e.factory.createJSDocTemplateTag,t),e.createJSDocTypedefTag=e.Debug.deprecate(e.factory.createJSDocTypedefTag,t),e.createJSDocCallbackTag=e.Debug.deprecate(e.factory.createJSDocCallbackTag,t),e.createJSDocSignature=e.Debug.deprecate(e.factory.createJSDocSignature,t),e.createJSDocPropertyTag=e.Debug.deprecate(e.factory.createJSDocPropertyTag,t),e.createJSDocTypeLiteral=e.Debug.deprecate(e.factory.createJSDocTypeLiteral,t),e.createJSDocImplementsTag=e.Debug.deprecate(e.factory.createJSDocImplementsTag,t),e.createJSDocAuthorTag=e.Debug.deprecate(e.factory.createJSDocAuthorTag,t),e.createJSDocPublicTag=e.Debug.deprecate(e.factory.createJSDocPublicTag,t),e.createJSDocPrivateTag=e.Debug.deprecate(e.factory.createJSDocPrivateTag,t),e.createJSDocProtectedTag=e.Debug.deprecate(e.factory.createJSDocProtectedTag,t),e.createJSDocReadonlyTag=e.Debug.deprecate(e.factory.createJSDocReadonlyTag,t),e.createJSDocTag=e.Debug.deprecate(e.factory.createJSDocUnknownTag,t),e.createJsxElement=e.Debug.deprecate(e.factory.createJsxElement,t),e.updateJsxElement=e.Debug.deprecate(e.factory.updateJsxElement,t),e.createJsxSelfClosingElement=e.Debug.deprecate(e.factory.createJsxSelfClosingElement,t),e.updateJsxSelfClosingElement=e.Debug.deprecate(e.factory.updateJsxSelfClosingElement,t),e.createJsxOpeningElement=e.Debug.deprecate(e.factory.createJsxOpeningElement,t),e.updateJsxOpeningElement=e.Debug.deprecate(e.factory.updateJsxOpeningElement,t),e.createJsxClosingElement=e.Debug.deprecate(e.factory.createJsxClosingElement,t),e.updateJsxClosingElement=e.Debug.deprecate(e.factory.updateJsxClosingElement,t),e.createJsxFragment=e.Debug.deprecate(e.factory.createJsxFragment,t),e.createJsxText=e.Debug.deprecate(e.factory.createJsxText,t),e.updateJsxText=e.Debug.deprecate(e.factory.updateJsxText,t),e.createJsxOpeningFragment=e.Debug.deprecate(e.factory.createJsxOpeningFragment,t),e.createJsxJsxClosingFragment=e.Debug.deprecate(e.factory.createJsxJsxClosingFragment,t),e.updateJsxFragment=e.Debug.deprecate(e.factory.updateJsxFragment,t),e.createJsxAttribute=e.Debug.deprecate(e.factory.createJsxAttribute,t),e.updateJsxAttribute=e.Debug.deprecate(e.factory.updateJsxAttribute,t),e.createJsxAttributes=e.Debug.deprecate(e.factory.createJsxAttributes,t),e.updateJsxAttributes=e.Debug.deprecate(e.factory.updateJsxAttributes,t),e.createJsxSpreadAttribute=e.Debug.deprecate(e.factory.createJsxSpreadAttribute,t),e.updateJsxSpreadAttribute=e.Debug.deprecate(e.factory.updateJsxSpreadAttribute,t),e.createJsxExpression=e.Debug.deprecate(e.factory.createJsxExpression,t),e.updateJsxExpression=e.Debug.deprecate(e.factory.updateJsxExpression,t),e.createCaseClause=e.Debug.deprecate(e.factory.createCaseClause,t),e.updateCaseClause=e.Debug.deprecate(e.factory.updateCaseClause,t),e.createDefaultClause=e.Debug.deprecate(e.factory.createDefaultClause,t),e.updateDefaultClause=e.Debug.deprecate(e.factory.updateDefaultClause,t),e.createHeritageClause=e.Debug.deprecate(e.factory.createHeritageClause,t),e.updateHeritageClause=e.Debug.deprecate(e.factory.updateHeritageClause,t),e.createCatchClause=e.Debug.deprecate(e.factory.createCatchClause,t),e.updateCatchClause=e.Debug.deprecate(e.factory.updateCatchClause,t),e.createPropertyAssignment=e.Debug.deprecate(e.factory.createPropertyAssignment,t),e.updatePropertyAssignment=e.Debug.deprecate(e.factory.updatePropertyAssignment,t),e.createShorthandPropertyAssignment=e.Debug.deprecate(e.factory.createShorthandPropertyAssignment,t),e.updateShorthandPropertyAssignment=e.Debug.deprecate(e.factory.updateShorthandPropertyAssignment,t),e.createSpreadAssignment=e.Debug.deprecate(e.factory.createSpreadAssignment,t),e.updateSpreadAssignment=e.Debug.deprecate(e.factory.updateSpreadAssignment,t),e.createEnumMember=e.Debug.deprecate(e.factory.createEnumMember,t),e.updateEnumMember=e.Debug.deprecate(e.factory.updateEnumMember,t),e.updateSourceFileNode=e.Debug.deprecate(e.factory.updateSourceFile,t),e.createNotEmittedStatement=e.Debug.deprecate(e.factory.createNotEmittedStatement,t),e.createPartiallyEmittedExpression=e.Debug.deprecate(e.factory.createPartiallyEmittedExpression,t),e.updatePartiallyEmittedExpression=e.Debug.deprecate(e.factory.updatePartiallyEmittedExpression,t),e.createCommaList=e.Debug.deprecate(e.factory.createCommaListExpression,t),e.updateCommaList=e.Debug.deprecate(e.factory.updateCommaListExpression,t),e.createBundle=e.Debug.deprecate(e.factory.createBundle,t),e.updateBundle=e.Debug.deprecate(e.factory.updateBundle,t),e.createImmediatelyInvokedFunctionExpression=e.Debug.deprecate(e.factory.createImmediatelyInvokedFunctionExpression,t),e.createImmediatelyInvokedArrowFunction=e.Debug.deprecate(e.factory.createImmediatelyInvokedArrowFunction,t),e.createVoidZero=e.Debug.deprecate(e.factory.createVoidZero,t),e.createExportDefault=e.Debug.deprecate(e.factory.createExportDefault,t),e.createExternalModuleExport=e.Debug.deprecate(e.factory.createExternalModuleExport,t),e.createNamespaceExport=e.Debug.deprecate(e.factory.createNamespaceExport,t),e.updateNamespaceExport=e.Debug.deprecate(e.factory.updateNamespaceExport,t),e.createToken=e.Debug.deprecate((function(t){return e.factory.createToken(t)}),t),e.createIdentifier=e.Debug.deprecate((function(t){return e.factory.createIdentifier(t,void 0,void 0)}),t),e.createTempVariable=e.Debug.deprecate((function(t){return e.factory.createTempVariable(t,void 0)}),t),e.getGeneratedNameForNode=e.Debug.deprecate((function(t){return e.factory.getGeneratedNameForNode(t,void 0)}),t),e.createOptimisticUniqueName=e.Debug.deprecate((function(t){return e.factory.createUniqueName(t,16)}),t),e.createFileLevelUniqueName=e.Debug.deprecate((function(t){return e.factory.createUniqueName(t,48)}),t),e.createIndexSignature=e.Debug.deprecate((function(t,r,n,i){return e.factory.createIndexSignature(t,r,n,i)}),t),e.createTypePredicateNode=e.Debug.deprecate((function(t,r){return e.factory.createTypePredicateNode(void 0,t,r)}),t),e.updateTypePredicateNode=e.Debug.deprecate((function(t,r,n){return e.factory.updateTypePredicateNode(t,void 0,r,n)}),t),e.createLiteral=e.Debug.deprecate((function(t){return"number"==typeof t?e.factory.createNumericLiteral(t):"object"==typeof t&&"base10Value"in t?e.factory.createBigIntLiteral(t):"boolean"==typeof t?t?e.factory.createTrue():e.factory.createFalse():"string"==typeof t?e.factory.createStringLiteral(t,void 0):e.factory.createStringLiteralFromNode(t)}),{since:"4.0",warnAfter:"4.1",message:"Use `factory.createStringLiteral`, `factory.createStringLiteralFromNode`, `factory.createNumericLiteral`, `factory.createBigIntLiteral`, `factory.createTrue`, `factory.createFalse`, or the factory supplied by your transformation context instead."}),e.createMethodSignature=e.Debug.deprecate((function(t,r,n,i,a){return e.factory.createMethodSignature(void 0,i,a,t,r,n)}),t),e.updateMethodSignature=e.Debug.deprecate((function(t,r,n,i,a,o){return e.factory.updateMethodSignature(t,t.modifiers,a,o,r,n,i)}),t),e.createTypeOperatorNode=e.Debug.deprecate((function(t,r){var n;return r?n=t:(r=t,n=141),e.factory.createTypeOperatorNode(n,r)}),t),e.createTaggedTemplate=e.Debug.deprecate((function(t,r,n){var i;return n?i=r:n=r,e.factory.createTaggedTemplateExpression(t,i,n)}),t),e.updateTaggedTemplate=e.Debug.deprecate((function(t,r,n,i){var a;return i?a=n:i=n,e.factory.updateTaggedTemplateExpression(t,r,a,i)}),t),e.updateBinary=e.Debug.deprecate((function(t,r,n,i){return void 0===i&&(i=t.operatorToken),"number"==typeof i&&(i=i===t.operatorToken.kind?t.operatorToken:e.factory.createToken(i)),e.factory.updateBinaryExpression(t,r,i,n)}),t),e.createConditional=e.Debug.deprecate((function(t,r,n,i,a){return 5===arguments.length?e.factory.createConditionalExpression(t,r,n,i,a):3===arguments.length?e.factory.createConditionalExpression(t,e.factory.createToken(57),r,e.factory.createToken(58),n):e.Debug.fail("Argument count mismatch")}),t),e.createYield=e.Debug.deprecate((function(t,r){var n;return r?n=t:r=t,e.factory.createYieldExpression(n,r)}),t),e.createClassExpression=e.Debug.deprecate((function(t,r,n,i,a){return e.factory.createClassExpression(void 0,t,r,n,i,a)}),t),e.updateClassExpression=e.Debug.deprecate((function(t,r,n,i,a,o){return e.factory.updateClassExpression(t,void 0,r,n,i,a,o)}),t),e.createPropertySignature=e.Debug.deprecate((function(t,r,n,i,a){var o=e.factory.createPropertySignature(t,r,n,i);return o.initializer=a,o}),t),e.updatePropertySignature=e.Debug.deprecate((function(t,r,n,i,a,o){var s=e.factory.updatePropertySignature(t,r,n,i,a);return t.initializer!==o&&(s===t&&(s=e.factory.cloneNode(t)),s.initializer=o),s}),t),e.createExpressionWithTypeArguments=e.Debug.deprecate((function(t,r){return e.factory.createExpressionWithTypeArguments(r,t)}),t),e.updateExpressionWithTypeArguments=e.Debug.deprecate((function(t,r,n){return e.factory.updateExpressionWithTypeArguments(t,n,r)}),t),e.createArrowFunction=e.Debug.deprecate((function(t,r,n,i,a,o){return 6===arguments.length?e.factory.createArrowFunction(t,r,n,i,a,o):5===arguments.length?e.factory.createArrowFunction(t,r,n,i,void 0,a):e.Debug.fail("Argument count mismatch")}),t),e.updateArrowFunction=e.Debug.deprecate((function(t,r,n,i,a,o,s){return 7===arguments.length?e.factory.updateArrowFunction(t,r,n,i,a,o,s):6===arguments.length?e.factory.updateArrowFunction(t,r,n,i,a,t.equalsGreaterThanToken,o):e.Debug.fail("Argument count mismatch")}),t),e.createVariableDeclaration=e.Debug.deprecate((function(t,r,n,i){return 4===arguments.length?e.factory.createVariableDeclaration(t,r,n,i):arguments.length>=1&&arguments.length<=3?e.factory.createVariableDeclaration(t,void 0,r,n):e.Debug.fail("Argument count mismatch")}),t),e.updateVariableDeclaration=e.Debug.deprecate((function(t,r,n,i,a){return 5===arguments.length?e.factory.updateVariableDeclaration(t,r,n,i,a):4===arguments.length?e.factory.updateVariableDeclaration(t,r,t.exclamationToken,n,i):e.Debug.fail("Argument count mismatch")}),t),e.createImportClause=e.Debug.deprecate((function(t,r,n){return void 0===n&&(n=!1),e.factory.createImportClause(n,t,r)}),t),e.updateImportClause=e.Debug.deprecate((function(t,r,n,i){return e.factory.updateImportClause(t,i,r,n)}),t),e.createExportDeclaration=e.Debug.deprecate((function(t,r,n,i,a){return void 0===a&&(a=!1),e.factory.createExportDeclaration(t,r,a,n,i)}),t),e.updateExportDeclaration=e.Debug.deprecate((function(t,r,n,i,a,o){return e.factory.updateExportDeclaration(t,r,n,o,i,a,t.assertClause)}),t),e.createJSDocParamTag=e.Debug.deprecate((function(t,r,n,i){return e.factory.createJSDocParameterTag(void 0,t,r,n,!1,i?e.factory.createNodeArray([e.factory.createJSDocText(i)]):void 0)}),t),e.createComma=e.Debug.deprecate((function(t,r){return e.factory.createComma(t,r)}),t),e.createLessThan=e.Debug.deprecate((function(t,r){return e.factory.createLessThan(t,r)}),t),e.createAssignment=e.Debug.deprecate((function(t,r){return e.factory.createAssignment(t,r)}),t),e.createStrictEquality=e.Debug.deprecate((function(t,r){return e.factory.createStrictEquality(t,r)}),t),e.createStrictInequality=e.Debug.deprecate((function(t,r){return e.factory.createStrictInequality(t,r)}),t),e.createAdd=e.Debug.deprecate((function(t,r){return e.factory.createAdd(t,r)}),t),e.createSubtract=e.Debug.deprecate((function(t,r){return e.factory.createSubtract(t,r)}),t),e.createLogicalAnd=e.Debug.deprecate((function(t,r){return e.factory.createLogicalAnd(t,r)}),t),e.createLogicalOr=e.Debug.deprecate((function(t,r){return e.factory.createLogicalOr(t,r)}),t),e.createPostfixIncrement=e.Debug.deprecate((function(t){return e.factory.createPostfixIncrement(t)}),t),e.createLogicalNot=e.Debug.deprecate((function(t){return e.factory.createLogicalNot(t)}),t),e.createNode=e.Debug.deprecate((function(t,r,n){return void 0===r&&(r=0),void 0===n&&(n=0),e.setTextRangePosEnd(308===t?e.parseBaseNodeFactory.createBaseSourceFileNode(t):79===t?e.parseBaseNodeFactory.createBaseIdentifierNode(t):80===t?e.parseBaseNodeFactory.createBasePrivateIdentifierNode(t):e.isNodeKind(t)?e.parseBaseNodeFactory.createBaseNode(t):e.parseBaseNodeFactory.createBaseTokenNode(t),r,n)}),{since:"4.0",warnAfter:"4.1",message:"Use an appropriate `factory` method instead."}),e.getMutableClone=e.Debug.deprecate((function(t){var r=e.factory.cloneNode(t);return e.setTextRange(r,t),e.setParent(r,t.parent),r}),{since:"4.0",warnAfter:"4.1",message:"Use an appropriate `factory.update...` method instead, use `setCommentRange` or `setSourceMapRange`, and avoid setting `parent`."})}(_||(_={})),function(e){e.isTypeAssertion=e.Debug.deprecate((function(e){return 213===e.kind}),{since:"4.0",warnAfter:"4.1",message:"Use `isTypeAssertionExpression` instead."})}(_||(_={})),function(e){e.isIdentifierOrPrivateIdentifier=e.Debug.deprecate((function(t){return e.isMemberName(t)}),{since:"4.2",warnAfter:"4.3",message:"Use `isMemberName` instead."})}(_||(_={})),function(e){function t(t){var r=t.createConstructorTypeNode,n=t.updateConstructorTypeNode;t.createConstructorTypeNode=e.buildOverload("createConstructorTypeNode").overload({0:function(e,t,n,i){return r(e,t,n,i)},1:function(e,t,n){return r(void 0,e,t,n)}}).bind({0:function(e){return 4===e.length},1:function(e){return 3===e.length}}).deprecate({1:{since:"4.2",warnAfter:"4.3",message:"Use the overload that accepts 'modifiers'"}}).finish(),t.updateConstructorTypeNode=e.buildOverload("updateConstructorTypeNode").overload({0:function(e,t,r,i,a){return n(e,t,r,i,a)},1:function(e,t,r,i){return n(e,e.modifiers,t,r,i)}}).bind({0:function(e){return 5===e.length},1:function(e){return 4===e.length}}).deprecate({1:{since:"4.2",warnAfter:"4.3",message:"Use the overload that accepts 'modifiers'"}}).finish()}var r=e.createNodeFactory;e.createNodeFactory=function(e,n){var i=r(e,n);return t(i),i},t(e.factory)}(_||(_={})),function(e){function t(t){var r=t.createImportTypeNode,n=t.updateImportTypeNode;t.createImportTypeNode=e.buildOverload("createImportTypeNode").overload({0:function(e,t,n,i,a){return r(e,t,n,i,a)},1:function(e,t,n,i){return r(e,void 0,t,n,i)}}).bind({0:function(t){var r=t[1],n=t[2],i=t[3],a=t[4];return(void 0===r||e.isImportTypeAssertionContainer(r))&&(void 0===n||!e.isArray(n))&&(void 0===i||e.isArray(i))&&(void 0===a||"boolean"==typeof a)},1:function(t){var r=t[1],n=t[2],i=t[3];return void 0===t[4]&&(void 0===r||e.isEntityName(r))&&(void 0===n||e.isArray(n))&&(void 0===i||"boolean"==typeof i)}}).deprecate({1:{since:"4.6",warnAfter:"4.7",message:"Use the overload that accepts 'assertions'"}}).finish(),t.updateImportTypeNode=e.buildOverload("updateImportTypeNode").overload({0:function(e,t,r,i,a,o){return n(e,t,r,i,a,o)},1:function(e,t,r,i,a){return n(e,t,e.assertions,r,i,a)}}).bind({0:function(t){var r=t[2],n=t[3],i=t[4],a=t[5];return(void 0===r||e.isImportTypeAssertionContainer(r))&&(void 0===n||!e.isArray(n))&&(void 0===i||e.isArray(i))&&(void 0===a||"boolean"==typeof a)},1:function(t){var r=t[2],n=t[3],i=t[4];return void 0===t[5]&&(void 0===r||e.isEntityName(r))&&(void 0===n||e.isArray(n))&&(void 0===i||"boolean"==typeof i)}}).deprecate({1:{since:"4.6",warnAfter:"4.7",message:"Use the overload that accepts 'assertions'"}}).finish()}var r=e.createNodeFactory;e.createNodeFactory=function(e,n){var i=r(e,n);return t(i),i},t(e.factory)}(_||(_={})),function(e){function t(t){var r=t.createTypeParameterDeclaration,n=t.updateTypeParameterDeclaration;t.createTypeParameterDeclaration=e.buildOverload("createTypeParameterDeclaration").overload({0:function(e,t,n,i){return r(e,t,n,i)},1:function(e,t,n){return r(void 0,e,t,n)}}).bind({0:function(t){var r=t[0];return void 0===r||e.isArray(r)},1:function(t){var r=t[0];return void 0!==r&&!e.isArray(r)}}).deprecate({1:{since:"4.7",warnAfter:"4.8",message:"Use the overload that accepts 'modifiers'"}}).finish(),t.updateTypeParameterDeclaration=e.buildOverload("updateTypeParameterDeclaration").overload({0:function(e,t,r,i,a){return n(e,t,r,i,a)},1:function(e,t,r,i){return n(e,e.modifiers,t,r,i)}}).bind({0:function(t){var r=t[1];return void 0===r||e.isArray(r)},1:function(t){var r=t[1];return void 0!==r&&!e.isArray(r)}}).deprecate({1:{since:"4.7",warnAfter:"4.8",message:"Use the overload that accepts 'modifiers'"}}).finish()}var r=e.createNodeFactory;e.createNodeFactory=function(e,n){var i=r(e,n);return t(i),i},t(e.factory)}(_||(_={})),function(e){var t={since:"4.8",warnAfter:"4.9.0-0",message:"Decorators have been combined with modifiers. Callers should switch to an overload that does not accept a 'decorators' parameter."},r={since:"4.8",warnAfter:"4.9.0-0",message:"Decorators are no longer supported for this function. Callers should switch to an overload that does not accept a 'decorators' parameter."},n={since:"4.8",warnAfter:"4.9.0-0",message:"Decorators and modifiers are no longer supported for this function. Callers should switch to an overload that does not accept the 'decorators' and 'modifiers' parameters."};function i(i){var a=i.createParameterDeclaration,o=i.updateParameterDeclaration,s=i.createPropertyDeclaration,c=i.updatePropertyDeclaration,u=i.createMethodDeclaration,l=i.updateMethodDeclaration,_=i.createConstructorDeclaration,d=i.updateConstructorDeclaration,p=i.createGetAccessorDeclaration,f=i.updateGetAccessorDeclaration,g=i.createSetAccessorDeclaration,m=i.updateSetAccessorDeclaration,y=i.createIndexSignature,v=i.updateIndexSignature,h=i.createClassStaticBlockDeclaration,b=i.updateClassStaticBlockDeclaration,x=i.createClassExpression,D=i.updateClassExpression,S=i.createFunctionDeclaration,T=i.updateFunctionDeclaration,C=i.createClassDeclaration,E=i.updateClassDeclaration,k=i.createInterfaceDeclaration,N=i.updateInterfaceDeclaration,A=i.createTypeAliasDeclaration,F=i.updateTypeAliasDeclaration,P=i.createEnumDeclaration,w=i.updateEnumDeclaration,I=i.createModuleDeclaration,O=i.updateModuleDeclaration,M=i.createImportEqualsDeclaration,L=i.updateImportEqualsDeclaration,R=i.createImportDeclaration,B=i.updateImportDeclaration,j=i.createExportAssignment,J=i.updateExportAssignment,z=i.createExportDeclaration,U=i.updateExportDeclaration;i.createParameterDeclaration=e.buildOverload("createParameterDeclaration").overload({0:function(e,t,r,n,i,o){return a(e,t,r,n,i,o)},1:function(t,r,n,i,o,s,c){return a(e.concatenate(t,r),n,i,o,s,c)}}).bind({0:function(t){var r=t[1],n=t[2],i=t[3],a=t[4],o=t[5];return void 0===t[6]&&(void 0===r||!e.isArray(r))&&(void 0===n||"string"==typeof n||e.isBindingName(n))&&(void 0===i||"object"==typeof i&&e.isQuestionToken(i))&&(void 0===a||e.isTypeNode(a))&&(void 0===o||e.isExpression(o))},1:function(t){var r=t[1],n=t[2],i=t[3],a=t[4],o=t[5],s=t[6];return(void 0===r||e.isArray(r))&&(void 0===n||"object"==typeof n&&e.isDotDotDotToken(n))&&(void 0===i||"string"==typeof i||e.isBindingName(i))&&(void 0===a||e.isQuestionToken(a))&&(void 0===o||e.isTypeNode(o))&&(void 0===s||e.isExpression(s))}}).deprecate({1:t}).finish(),i.updateParameterDeclaration=e.buildOverload("updateParameterDeclaration").overload({0:function(e,t,r,n,i,a,s){return o(e,t,r,n,i,a,s)},1:function(t,r,n,i,a,s,c,u){return o(t,e.concatenate(r,n),i,a,s,c,u)}}).bind({0:function(t){var r=t[2],n=t[3],i=t[4],a=t[5],o=t[6];return void 0===t[7]&&(void 0===r||!e.isArray(r))&&(void 0===n||"string"==typeof n||e.isBindingName(n))&&(void 0===i||"object"==typeof i&&e.isQuestionToken(i))&&(void 0===a||e.isTypeNode(a))&&(void 0===o||e.isExpression(o))},1:function(t){var r=t[2],n=t[3],i=t[4],a=t[5],o=t[6],s=t[7];return(void 0===r||e.isArray(r))&&(void 0===n||"object"==typeof n&&e.isDotDotDotToken(n))&&(void 0===i||"string"==typeof i||e.isBindingName(i))&&(void 0===a||e.isQuestionToken(a))&&(void 0===o||e.isTypeNode(o))&&(void 0===s||e.isExpression(s))}}).deprecate({1:t}).finish(),i.createPropertyDeclaration=e.buildOverload("createPropertyDeclaration").overload({0:function(e,t,r,n,i){return s(e,t,r,n,i)},1:function(t,r,n,i,a,o){return s(e.concatenate(t,r),n,i,a,o)}}).bind({0:function(t){var r=t[1],n=t[2],i=t[3],a=t[4];return void 0===t[5]&&(void 0===r||!e.isArray(r))&&(void 0===n||"object"==typeof n&&e.isQuestionOrExclamationToken(n))&&(void 0===i||e.isTypeNode(i))&&(void 0===a||e.isExpression(a))},1:function(t){var r=t[1],n=t[2],i=t[3],a=t[4],o=t[5];return(void 0===r||e.isArray(r))&&(void 0===n||"string"==typeof n||e.isPropertyName(n))&&(void 0===i||e.isQuestionOrExclamationToken(i))&&(void 0===a||e.isTypeNode(a))&&(void 0===o||e.isExpression(o))}}).deprecate({1:t}).finish(),i.updatePropertyDeclaration=e.buildOverload("updatePropertyDeclaration").overload({0:function(e,t,r,n,i,a){return c(e,t,r,n,i,a)},1:function(t,r,n,i,a,o,s){return c(t,e.concatenate(r,n),i,a,o,s)}}).bind({0:function(t){var r=t[2],n=t[3],i=t[4],a=t[5];return void 0===t[6]&&(void 0===r||!e.isArray(r))&&(void 0===n||"object"==typeof n&&e.isQuestionOrExclamationToken(n))&&(void 0===i||e.isTypeNode(i))&&(void 0===a||e.isExpression(a))},1:function(t){var r=t[2],n=t[3],i=t[4],a=t[5],o=t[6];return(void 0===r||e.isArray(r))&&(void 0===n||"string"==typeof n||e.isPropertyName(n))&&(void 0===i||e.isQuestionOrExclamationToken(i))&&(void 0===a||e.isTypeNode(a))&&(void 0===o||e.isExpression(o))}}).deprecate({1:t}).finish(),i.createMethodDeclaration=e.buildOverload("createMethodDeclaration").overload({0:function(e,t,r,n,i,a,o,s){return u(e,t,r,n,i,a,o,s)},1:function(t,r,n,i,a,o,s,c,l){return u(e.concatenate(t,r),n,i,a,o,s,c,l)}}).bind({0:function(t){var r=t[1],n=t[2],i=t[3],a=t[4],o=t[5],s=t[6],c=t[7];return void 0===t[8]&&(void 0===r||!e.isArray(r))&&(void 0===n||"string"==typeof n||e.isPropertyName(n))&&(void 0===i||"object"==typeof i&&e.isQuestionToken(i))&&(void 0===a||e.isArray(a))&&(void 0===o||!e.some(o,e.isTypeParameterDeclaration))&&(void 0===s||!e.isArray(s))&&(void 0===c||e.isBlock(c))},1:function(t){var r=t[1],n=t[2],i=t[3],a=t[4],o=t[5],s=t[6],c=t[7],u=t[8];return(void 0===r||e.isArray(r))&&(void 0===n||"object"==typeof n&&e.isAsteriskToken(n))&&(void 0===i||"string"==typeof i||e.isPropertyName(i))&&(void 0===a||!e.isArray(a))&&(void 0===o||!e.some(o,e.isParameter))&&(void 0===s||e.isArray(s))&&(void 0===c||e.isTypeNode(c))&&(void 0===u||e.isBlock(u))}}).deprecate({1:t}).finish(),i.updateMethodDeclaration=e.buildOverload("updateMethodDeclaration").overload({0:function(e,t,r,n,i,a,o,s,c){return l(e,t,r,n,i,a,o,s,c)},1:function(t,r,n,i,a,o,s,c,u,_){return l(t,e.concatenate(r,n),i,a,o,s,c,u,_)}}).bind({0:function(t){var r=t[2],n=t[3],i=t[4],a=t[5],o=t[6],s=t[7],c=t[8];return void 0===t[9]&&(void 0===r||!e.isArray(r))&&(void 0===n||"string"==typeof n||e.isPropertyName(n))&&(void 0===i||"object"==typeof i&&e.isQuestionToken(i))&&(void 0===a||e.isArray(a))&&(void 0===o||!e.some(o,e.isTypeParameterDeclaration))&&(void 0===s||!e.isArray(s))&&(void 0===c||e.isBlock(c))},1:function(t){var r=t[2],n=t[3],i=t[4],a=t[5],o=t[6],s=t[7],c=t[8],u=t[9];return(void 0===r||e.isArray(r))&&(void 0===n||"object"==typeof n&&e.isAsteriskToken(n))&&(void 0===i||"string"==typeof i||e.isPropertyName(i))&&(void 0===a||!e.isArray(a))&&(void 0===o||!e.some(o,e.isParameter))&&(void 0===s||e.isArray(s))&&(void 0===c||e.isTypeNode(c))&&(void 0===u||e.isBlock(u))}}).deprecate({1:t}).finish(),i.createConstructorDeclaration=e.buildOverload("createConstructorDeclaration").overload({0:function(e,t,r){return _(e,t,r)},1:function(e,t,r,n){return _(t,r,n)}}).bind({0:function(t){var r=t[0],n=t[1],i=t[2];return!(void 0!==t[3]||void 0!==r&&e.some(r,e.isDecorator)||void 0!==n&&e.some(n,e.isModifier)||void 0!==i&&e.isArray(i))},1:function(t){var r=t[0],n=t[1],i=t[2],a=t[3];return(void 0===r||!e.some(r,e.isModifier))&&(void 0===n||!e.some(n,e.isParameter))&&(void 0===i||e.isArray(i))&&(void 0===a||e.isBlock(a))}}).deprecate({1:r}).finish(),i.updateConstructorDeclaration=e.buildOverload("updateConstructorDeclaration").overload({0:function(e,t,r,n){return d(e,t,r,n)},1:function(e,t,r,n,i){return d(e,r,n,i)}}).bind({0:function(t){var r=t[1],n=t[2],i=t[3];return!(void 0!==t[4]||void 0!==r&&e.some(r,e.isDecorator)||void 0!==n&&e.some(n,e.isModifier)||void 0!==i&&e.isArray(i))},1:function(t){var r=t[1],n=t[2],i=t[3],a=t[4];return(void 0===r||!e.some(r,e.isModifier))&&(void 0===n||!e.some(n,e.isParameter))&&(void 0===i||e.isArray(i))&&(void 0===a||e.isBlock(a))}}).deprecate({1:r}).finish(),i.createGetAccessorDeclaration=e.buildOverload("createGetAccessorDeclaration").overload({0:function(e,t,r,n,i){return p(e,t,r,n,i)},1:function(t,r,n,i,a,o){return p(e.concatenate(t,r),n,i,a,o)}}).bind({0:function(t){var r=t[1],n=t[2],i=t[3],a=t[4];return void 0===t[5]&&(void 0===r||!e.isArray(r))&&(void 0===n||e.isArray(n))&&(void 0===i||!e.isArray(i))&&(void 0===a||e.isBlock(a))},1:function(t){var r=t[1],n=t[2],i=t[3],a=t[4],o=t[5];return(void 0===r||e.isArray(r))&&(void 0===n||!e.isArray(n))&&(void 0===i||e.isArray(i))&&(void 0===a||e.isTypeNode(a))&&(void 0===o||e.isBlock(o))}}).deprecate({1:t}).finish(),i.updateGetAccessorDeclaration=e.buildOverload("updateGetAccessorDeclaration").overload({0:function(e,t,r,n,i,a){return f(e,t,r,n,i,a)},1:function(t,r,n,i,a,o,s){return f(t,e.concatenate(r,n),i,a,o,s)}}).bind({0:function(t){var r=t[2],n=t[3],i=t[4],a=t[5];return void 0===t[6]&&(void 0===r||!e.isArray(r))&&(void 0===n||e.isArray(n))&&(void 0===i||!e.isArray(i))&&(void 0===a||e.isBlock(a))},1:function(t){var r=t[2],n=t[3],i=t[4],a=t[5],o=t[6];return(void 0===r||e.isArray(r))&&(void 0===n||!e.isArray(n))&&(void 0===i||e.isArray(i))&&(void 0===a||e.isTypeNode(a))&&(void 0===o||e.isBlock(o))}}).deprecate({1:t}).finish(),i.createSetAccessorDeclaration=e.buildOverload("createSetAccessorDeclaration").overload({0:function(e,t,r,n){return g(e,t,r,n)},1:function(t,r,n,i,a){return g(e.concatenate(t,r),n,i,a)}}).bind({0:function(t){var r=t[1],n=t[2],i=t[3];return void 0===t[4]&&(void 0===r||!e.isArray(r))&&(void 0===n||e.isArray(n))&&(void 0===i||!e.isArray(i))},1:function(t){var r=t[1],n=t[2],i=t[3],a=t[4];return(void 0===r||e.isArray(r))&&(void 0===n||!e.isArray(n))&&(void 0===i||e.isArray(i))&&(void 0===a||e.isBlock(a))}}).deprecate({1:t}).finish(),i.updateSetAccessorDeclaration=e.buildOverload("updateSetAccessorDeclaration").overload({0:function(e,t,r,n,i){return m(e,t,r,n,i)},1:function(t,r,n,i,a,o){return m(t,e.concatenate(r,n),i,a,o)}}).bind({0:function(t){var r=t[2],n=t[3],i=t[4];return void 0===t[5]&&(void 0===r||!e.isArray(r))&&(void 0===n||e.isArray(n))&&(void 0===i||!e.isArray(i))},1:function(t){var r=t[2],n=t[3],i=t[4],a=t[5];return(void 0===r||e.isArray(r))&&(void 0===n||!e.isArray(n))&&(void 0===i||e.isArray(i))&&(void 0===a||e.isBlock(a))}}).deprecate({1:t}).finish(),i.createIndexSignature=e.buildOverload("createIndexSignature").overload({0:function(e,t,r){return y(e,t,r)},1:function(e,t,r,n){return y(t,r,n)}}).bind({0:function(t){var r=t[0],n=t[1],i=t[2];return void 0===t[3]&&(void 0===r||e.every(r,e.isModifier))&&(void 0===n||e.every(n,e.isParameter))&&(void 0===i||!e.isArray(i))},1:function(t){var r=t[0],n=t[1],i=t[2],a=t[3];return(void 0===r||e.every(r,e.isDecorator))&&(void 0===n||e.every(n,e.isModifier))&&(void 0===i||e.isArray(i))&&(void 0===a||e.isTypeNode(a))}}).deprecate({1:r}).finish(),i.updateIndexSignature=e.buildOverload("updateIndexSignature").overload({0:function(e,t,r,n){return v(e,t,r,n)},1:function(e,t,r,n,i){return v(e,r,n,i)}}).bind({0:function(t){var r=t[1],n=t[2],i=t[3];return void 0===t[4]&&(void 0===r||e.every(r,e.isModifier))&&(void 0===n||e.every(n,e.isParameter))&&(void 0===i||!e.isArray(i))},1:function(t){var r=t[1],n=t[2],i=t[3],a=t[4];return(void 0===r||e.every(r,e.isDecorator))&&(void 0===n||e.every(n,e.isModifier))&&(void 0===i||e.isArray(i))&&(void 0===a||e.isTypeNode(a))}}).deprecate({1:r}).finish(),i.createClassStaticBlockDeclaration=e.buildOverload("createClassStaticBlockDeclaration").overload({0:function(e){return h(e)},1:function(e,t,r){return h(r)}}).bind({0:function(t){var r=t[0],n=t[1],i=t[2];return void 0===n&&void 0===i&&(void 0===r||!e.isArray(r))},1:function(t){var r=t[0],n=t[1],i=t[2];return(void 0===r||e.isArray(r))&&(void 0===n||e.isArray(r))&&(void 0===i||e.isBlock(i))}}).deprecate({1:n}).finish(),i.updateClassStaticBlockDeclaration=e.buildOverload("updateClassStaticBlockDeclaration").overload({0:function(e,t){return b(e,t)},1:function(e,t,r,n){return b(e,n)}}).bind({0:function(t){var r=t[1],n=t[2],i=t[3];return void 0===n&&void 0===i&&(void 0===r||!e.isArray(r))},1:function(t){var r=t[1],n=t[2],i=t[3];return(void 0===r||e.isArray(r))&&(void 0===n||e.isArray(r))&&(void 0===i||e.isBlock(i))}}).deprecate({1:n}).finish(),i.createClassExpression=e.buildOverload("createClassExpression").overload({0:function(e,t,r,n,i){return x(e,t,r,n,i)},1:function(t,r,n,i,a,o){return x(e.concatenate(t,r),n,i,a,o)}}).bind({0:function(t){var r=t[1],n=t[2],i=t[3],a=t[4];return void 0===t[5]&&(void 0===r||!e.isArray(r))&&(void 0===n||e.isArray(n))&&(void 0===i||e.every(i,e.isHeritageClause))&&(void 0===a||e.every(a,e.isClassElement))},1:function(t){var r=t[1],n=t[2],i=t[3],a=t[4],o=t[5];return(void 0===r||e.isArray(r))&&(void 0===n||!e.isArray(n))&&(void 0===i||e.every(i,e.isTypeParameterDeclaration))&&(void 0===a||e.every(a,e.isHeritageClause))&&(void 0===o||e.isArray(o))}}).deprecate({1:r}).finish(),i.updateClassExpression=e.buildOverload("updateClassExpression").overload({0:function(e,t,r,n,i,a){return D(e,t,r,n,i,a)},1:function(t,r,n,i,a,o,s){return D(t,e.concatenate(r,n),i,a,o,s)}}).bind({0:function(t){var r=t[2],n=t[3],i=t[4],a=t[5];return void 0===t[6]&&(void 0===r||!e.isArray(r))&&(void 0===n||e.isArray(n))&&(void 0===i||e.every(i,e.isHeritageClause))&&(void 0===a||e.every(a,e.isClassElement))},1:function(t){var r=t[2],n=t[3],i=t[4],a=t[5],o=t[6];return(void 0===r||e.isArray(r))&&(void 0===n||!e.isArray(n))&&(void 0===i||e.every(i,e.isTypeParameterDeclaration))&&(void 0===a||e.every(a,e.isHeritageClause))&&(void 0===o||e.isArray(o))}}).deprecate({1:r}).finish(),i.createFunctionDeclaration=e.buildOverload("createFunctionDeclaration").overload({0:function(e,t,r,n,i,a,o){return S(e,t,r,n,i,a,o)},1:function(e,t,r,n,i,a,o,s){return S(t,r,n,i,a,o,s)}}).bind({0:function(t){var r=t[1],n=t[2],i=t[3],a=t[4],o=t[5],s=t[6];return void 0===t[7]&&(void 0===r||!e.isArray(r))&&(void 0===n||"string"==typeof n||e.isIdentifier(n))&&(void 0===i||e.isArray(i))&&(void 0===a||e.every(a,e.isParameter))&&(void 0===o||!e.isArray(o))&&(void 0===s||e.isBlock(s))},1:function(t){var r=t[1],n=t[2],i=t[3],a=t[4],o=t[5],s=t[6],c=t[7];return(void 0===r||e.isArray(r))&&(void 0===n||"string"!=typeof n&&e.isAsteriskToken(n))&&(void 0===i||!e.isArray(i))&&(void 0===a||e.every(a,e.isTypeParameterDeclaration))&&(void 0===o||e.isArray(o))&&(void 0===s||e.isTypeNode(s))&&(void 0===c||e.isBlock(c))}}).deprecate({1:r}).finish(),i.updateFunctionDeclaration=e.buildOverload("updateFunctionDeclaration").overload({0:function(e,t,r,n,i,a,o,s){return T(e,t,r,n,i,a,o,s)},1:function(e,t,r,n,i,a,o,s,c){return T(e,r,n,i,a,o,s,c)}}).bind({0:function(t){var r=t[2],n=t[3],i=t[4],a=t[5],o=t[6],s=t[7];return void 0===t[8]&&(void 0===r||!e.isArray(r))&&(void 0===n||e.isIdentifier(n))&&(void 0===i||e.isArray(i))&&(void 0===a||e.every(a,e.isParameter))&&(void 0===o||!e.isArray(o))&&(void 0===s||e.isBlock(s))},1:function(t){var r=t[2],n=t[3],i=t[4],a=t[5],o=t[6],s=t[7],c=t[8];return(void 0===r||e.isArray(r))&&(void 0===n||"string"!=typeof n&&e.isAsteriskToken(n))&&(void 0===i||!e.isArray(i))&&(void 0===a||e.every(a,e.isTypeParameterDeclaration))&&(void 0===o||e.isArray(o))&&(void 0===s||e.isTypeNode(s))&&(void 0===c||e.isBlock(c))}}).deprecate({1:r}).finish(),i.createClassDeclaration=e.buildOverload("createClassDeclaration").overload({0:function(e,t,r,n,i){return C(e,t,r,n,i)},1:function(t,r,n,i,a,o){return C(e.concatenate(t,r),n,i,a,o)}}).bind({0:function(t){var r=t[1],n=t[2],i=t[3],a=t[4];return void 0===t[5]&&(void 0===r||!e.isArray(r))&&(void 0===n||e.isArray(n))&&(void 0===i||e.every(i,e.isHeritageClause))&&(void 0===a||e.every(a,e.isClassElement))},1:function(){return!0}}).deprecate({1:t}).finish(),i.updateClassDeclaration=e.buildOverload("updateClassDeclaration").overload({0:function(e,t,r,n,i,a){return E(e,t,r,n,i,a)},1:function(t,r,n,i,a,o,s){return E(t,e.concatenate(r,n),i,a,o,s)}}).bind({0:function(t){var r=t[2],n=t[3],i=t[4],a=t[5];return void 0===t[6]&&(void 0===r||!e.isArray(r))&&(void 0===n||e.isArray(n))&&(void 0===i||e.every(i,e.isHeritageClause))&&(void 0===a||e.every(a,e.isClassElement))},1:function(t){var r=t[2],n=t[3],i=t[4],a=t[5],o=t[6];return(void 0===r||e.isArray(r))&&(void 0===n||!e.isArray(n))&&(void 0===i||e.every(i,e.isTypeParameterDeclaration))&&(void 0===a||e.every(a,e.isHeritageClause))&&(void 0===o||e.isArray(o))}}).deprecate({1:t}).finish(),i.createInterfaceDeclaration=e.buildOverload("createInterfaceDeclaration").overload({0:function(e,t,r,n,i){return k(e,t,r,n,i)},1:function(e,t,r,n,i,a){return k(t,r,n,i,a)}}).bind({0:function(t){var r=t[0],n=t[1],i=t[2],a=t[3],o=t[4];return void 0===t[5]&&(void 0===r||e.every(r,e.isModifier))&&(void 0===n||!e.isArray(n))&&(void 0===i||e.isArray(i))&&(void 0===a||e.every(a,e.isHeritageClause))&&(void 0===o||e.every(o,e.isTypeElement))},1:function(t){var r=t[0],n=t[1],i=t[2],a=t[3],o=t[4],s=t[5];return(void 0===r||e.every(r,e.isDecorator))&&(void 0===n||e.isArray(n))&&(void 0===i||!e.isArray(i))&&(void 0===a||e.every(a,e.isTypeParameterDeclaration))&&(void 0===o||e.every(o,e.isHeritageClause))&&(void 0===s||e.every(s,e.isTypeElement))}}).deprecate({1:r}).finish(),i.updateInterfaceDeclaration=e.buildOverload("updateInterfaceDeclaration").overload({0:function(e,t,r,n,i,a){return N(e,t,r,n,i,a)},1:function(e,t,r,n,i,a,o){return N(e,r,n,i,a,o)}}).bind({0:function(t){var r=t[1],n=t[2],i=t[3],a=t[4],o=t[5];return void 0===t[6]&&(void 0===r||e.every(r,e.isModifier))&&(void 0===n||!e.isArray(n))&&(void 0===i||e.isArray(i))&&(void 0===a||e.every(a,e.isHeritageClause))&&(void 0===o||e.every(o,e.isTypeElement))},1:function(t){var r=t[1],n=t[2],i=t[3],a=t[4],o=t[5],s=t[6];return(void 0===r||e.every(r,e.isDecorator))&&(void 0===n||e.isArray(n))&&(void 0===i||!e.isArray(i))&&(void 0===a||e.every(a,e.isTypeParameterDeclaration))&&(void 0===o||e.every(o,e.isHeritageClause))&&(void 0===s||e.every(s,e.isTypeElement))}}).deprecate({1:r}).finish(),i.createTypeAliasDeclaration=e.buildOverload("createTypeAliasDeclaration").overload({0:function(e,t,r,n){return A(e,t,r,n)},1:function(e,t,r,n,i){return A(t,r,n,i)}}).bind({0:function(t){var r=t[0],n=t[1],i=t[2],a=t[3];return void 0===t[4]&&(void 0===r||e.every(r,e.isModifier))&&(void 0===n||!e.isArray(n))&&(void 0===i||e.isArray(i))&&(void 0===a||!e.isArray(a))},1:function(t){var r=t[0],n=t[1],i=t[2],a=t[3],o=t[4];return(void 0===r||e.every(r,e.isDecorator))&&(void 0===n||e.isArray(n))&&(void 0===i||!e.isArray(i))&&(void 0===a||e.isArray(a))&&(void 0===o||e.isTypeNode(o))}}).deprecate({1:r}).finish(),i.updateTypeAliasDeclaration=e.buildOverload("updateTypeAliasDeclaration").overload({0:function(e,t,r,n,i){return F(e,t,r,n,i)},1:function(e,t,r,n,i,a){return F(e,r,n,i,a)}}).bind({0:function(t){var r=t[1],n=t[2],i=t[3],a=t[4];return void 0===t[5]&&(void 0===r||e.every(r,e.isModifier))&&(void 0===n||!e.isArray(n))&&(void 0===i||e.isArray(i))&&(void 0===a||!e.isArray(a))},1:function(t){var r=t[1],n=t[2],i=t[3],a=t[4],o=t[5];return(void 0===r||e.every(r,e.isDecorator))&&(void 0===n||e.isArray(n))&&(void 0===i||!e.isArray(i))&&(void 0===a||e.isArray(a))&&(void 0===o||e.isTypeNode(o))}}).deprecate({1:r}).finish(),i.createEnumDeclaration=e.buildOverload("createEnumDeclaration").overload({0:function(e,t,r){return P(e,t,r)},1:function(e,t,r,n){return P(t,r,n)}}).bind({0:function(t){var r=t[0],n=t[1],i=t[2];return void 0===t[3]&&(void 0===r||e.every(r,e.isModifier))&&(void 0===n||!e.isArray(n))&&(void 0===i||e.isArray(i))},1:function(t){var r=t[0],n=t[1],i=t[2],a=t[3];return(void 0===r||e.every(r,e.isDecorator))&&(void 0===n||e.isArray(n))&&(void 0===i||!e.isArray(i))&&(void 0===a||e.isArray(a))}}).deprecate({1:r}).finish(),i.updateEnumDeclaration=e.buildOverload("updateEnumDeclaration").overload({0:function(e,t,r,n){return w(e,t,r,n)},1:function(e,t,r,n,i){return w(e,r,n,i)}}).bind({0:function(t){var r=t[1],n=t[2],i=t[3];return void 0===t[4]&&(void 0===r||e.every(r,e.isModifier))&&(void 0===n||!e.isArray(n))&&(void 0===i||e.isArray(i))},1:function(t){var r=t[1],n=t[2],i=t[3],a=t[4];return(void 0===r||e.every(r,e.isDecorator))&&(void 0===n||e.isArray(n))&&(void 0===i||!e.isArray(i))&&(void 0===a||e.isArray(a))}}).deprecate({1:r}).finish(),i.createModuleDeclaration=e.buildOverload("createModuleDeclaration").overload({0:function(e,t,r,n){return I(e,t,r,n)},1:function(e,t,r,n,i){return I(t,r,n,i)}}).bind({0:function(t){var r=t[0],n=t[1],i=t[2],a=t[3];return void 0===t[4]&&(void 0===r||e.every(r,e.isModifier))&&void 0!==n&&!e.isArray(n)&&(void 0===i||e.isModuleBody(i))&&(void 0===a||"number"==typeof a)},1:function(t){var r=t[0],n=t[1],i=t[2],a=t[3],o=t[4];return(void 0===r||e.every(r,e.isDecorator))&&(void 0===n||e.isArray(n))&&void 0!==i&&e.isModuleName(i)&&(void 0===a||"object"==typeof a)&&(void 0===o||"number"==typeof o)}}).deprecate({1:r}).finish(),i.updateModuleDeclaration=e.buildOverload("updateModuleDeclaration").overload({0:function(e,t,r,n){return O(e,t,r,n)},1:function(e,t,r,n,i){return O(e,r,n,i)}}).bind({0:function(t){var r=t[1],n=t[2],i=t[3];return void 0===t[4]&&(void 0===r||e.every(r,e.isModifier))&&(void 0===n||!e.isArray(n))&&(void 0===i||e.isModuleBody(i))},1:function(t){var r=t[1],n=t[2],i=t[3],a=t[4];return(void 0===r||e.every(r,e.isDecorator))&&(void 0===n||e.isArray(n))&&void 0!==i&&e.isModuleName(i)&&(void 0===a||e.isModuleBody(a))}}).deprecate({1:r}).finish(),i.createImportEqualsDeclaration=e.buildOverload("createImportEqualsDeclaration").overload({0:function(e,t,r,n){return M(e,t,r,n)},1:function(e,t,r,n,i){return M(t,r,n,i)}}).bind({0:function(t){var r=t[0],n=t[1],i=t[2],a=t[3];return void 0===t[4]&&(void 0===r||e.every(r,e.isModifier))&&(void 0===n||"boolean"==typeof n)&&"boolean"!=typeof i&&"string"!=typeof a},1:function(t){var r=t[0],n=t[1],i=t[2],a=t[3],o=t[4];return(void 0===r||e.every(r,e.isDecorator))&&(void 0===n||e.isArray(n))&&(void 0===i||"boolean"==typeof i)&&("string"==typeof a||e.isIdentifier(a))&&void 0!==o&&e.isModuleReference(o)}}).deprecate({1:r}).finish(),i.updateImportEqualsDeclaration=e.buildOverload("updateImportEqualsDeclaration").overload({0:function(e,t,r,n,i){return L(e,t,r,n,i)},1:function(e,t,r,n,i,a){return L(e,r,n,i,a)}}).bind({0:function(t){var r=t[1],n=t[2],i=t[3],a=t[4];return void 0===t[5]&&(void 0===r||e.every(r,e.isModifier))&&(void 0===n||"boolean"==typeof n)&&"boolean"!=typeof i&&"string"!=typeof a},1:function(t){var r=t[1],n=t[2],i=t[3],a=t[4],o=t[5];return(void 0===r||e.every(r,e.isDecorator))&&(void 0===n||e.isArray(n))&&(void 0===i||"boolean"==typeof i)&&("string"==typeof a||e.isIdentifier(a))&&void 0!==o&&e.isModuleReference(o)}}).deprecate({1:r}).finish(),i.createImportDeclaration=e.buildOverload("createImportDeclaration").overload({0:function(e,t,r,n){return R(e,t,r,n)},1:function(e,t,r,n,i){return R(t,r,n,i)}}).bind({0:function(t){var r=t[0],n=t[1],i=t[2],a=t[3];return void 0===t[4]&&(void 0===r||e.every(r,e.isModifier))&&(void 0===n||!e.isArray(n))&&void 0!==i&&e.isExpression(i)&&(void 0===a||e.isAssertClause(a))},1:function(t){var r=t[0],n=t[1],i=t[2],a=t[3],o=t[4];return(void 0===r||e.every(r,e.isDecorator))&&(void 0===n||e.isArray(n))&&(void 0===i||e.isImportClause(i))&&void 0!==a&&e.isExpression(a)&&(void 0===o||e.isAssertClause(o))}}).deprecate({1:r}).finish(),i.updateImportDeclaration=e.buildOverload("updateImportDeclaration").overload({0:function(e,t,r,n,i){return B(e,t,r,n,i)},1:function(e,t,r,n,i,a){return B(e,r,n,i,a)}}).bind({0:function(t){var r=t[1],n=t[2],i=t[3],a=t[4];return void 0===t[5]&&(void 0===r||e.every(r,e.isModifier))&&(void 0===n||!e.isArray(n))&&(void 0===i||e.isExpression(i))&&(void 0===a||e.isAssertClause(a))},1:function(t){var r=t[1],n=t[2],i=t[3],a=t[4],o=t[5];return(void 0===r||e.every(r,e.isDecorator))&&(void 0===n||e.isArray(n))&&(void 0===i||e.isImportClause(i))&&void 0!==a&&e.isExpression(a)&&(void 0===o||e.isAssertClause(o))}}).deprecate({1:r}).finish(),i.createExportAssignment=e.buildOverload("createExportAssignment").overload({0:function(e,t,r){return j(e,t,r)},1:function(e,t,r,n){return j(t,r,n)}}).bind({0:function(t){var r=t[0],n=t[1],i=t[2];return void 0===t[3]&&(void 0===r||e.every(r,e.isModifier))&&(void 0===n||"boolean"==typeof n)&&"object"==typeof i},1:function(t){var r=t[0],n=t[1],i=t[2],a=t[3];return(void 0===r||e.every(r,e.isDecorator))&&(void 0===n||e.isArray(n))&&(void 0===i||"boolean"==typeof i)&&void 0!==a&&e.isExpression(a)}}).deprecate({1:r}).finish(),i.updateExportAssignment=e.buildOverload("updateExportAssignment").overload({0:function(e,t,r){return J(e,t,r)},1:function(e,t,r,n){return J(e,r,n)}}).bind({0:function(t){var r=t[1],n=t[2];return void 0===t[3]&&(void 0===r||e.every(r,e.isModifier))&&void 0!==n&&!e.isArray(n)},1:function(t){var r=t[1],n=t[2],i=t[3];return(void 0===r||e.every(r,e.isDecorator))&&(void 0===n||e.isArray(n))&&void 0!==i&&e.isExpression(i)}}).deprecate({1:r}).finish(),i.createExportDeclaration=e.buildOverload("createExportDeclaration").overload({0:function(e,t,r,n,i){return z(e,t,r,n,i)},1:function(e,t,r,n,i,a){return z(t,r,n,i,a)}}).bind({0:function(t){var r=t[0],n=t[1],i=t[2],a=t[3],o=t[4];return void 0===t[5]&&(void 0===r||e.every(r,e.isModifier))&&"boolean"==typeof n&&"boolean"!=typeof i&&(void 0===a||e.isExpression(a))&&(void 0===o||e.isAssertClause(o))},1:function(t){var r=t[0],n=t[1],i=t[2],a=t[3],o=t[4],s=t[5];return(void 0===r||e.every(r,e.isDecorator))&&(void 0===n||e.isArray(n))&&"boolean"==typeof i&&(void 0===a||e.isNamedExportBindings(a))&&(void 0===o||e.isExpression(o))&&(void 0===s||e.isAssertClause(s))}}).deprecate({1:r}).finish(),i.updateExportDeclaration=e.buildOverload("updateExportDeclaration").overload({0:function(e,t,r,n,i,a){return U(e,t,r,n,i,a)},1:function(e,t,r,n,i,a,o){return U(e,r,n,i,a,o)}}).bind({0:function(t){var r=t[1],n=t[2],i=t[3],a=t[4],o=t[5];return void 0===t[6]&&(void 0===r||e.every(r,e.isModifier))&&"boolean"==typeof n&&"boolean"!=typeof i&&(void 0===a||e.isExpression(a))&&(void 0===o||e.isAssertClause(o))},1:function(t){var r=t[1],n=t[2],i=t[3],a=t[4],o=t[5],s=t[6];return(void 0===r||e.every(r,e.isDecorator))&&(void 0===n||e.isArray(n))&&"boolean"==typeof i&&(void 0===a||e.isNamedExportBindings(a))&&(void 0===o||e.isExpression(o))&&(void 0===s||e.isAssertClause(s))}}).deprecate({1:r}).finish()}var a=e.createNodeFactory;e.createNodeFactory=function(e,t){var r=a(e,t);return i(r),r},i(e.factory)}(_||(_={})),function(e){"undefined"!=typeof console&&(e.Debug.loggingHost={log:function(t,r){switch(t){case e.LogLevel.Error:return console.error(r);case e.LogLevel.Warning:return console.warn(r);case e.LogLevel.Info:case e.LogLevel.Verbose:return console.log(r)}}})}(_||(_={}))}}]);
\ No newline at end of file
diff --git a/assets/js/54a18fe8.fd648bf5.js b/assets/js/54a18fe8.fd648bf5.js
new file mode 100644
index 0000000..491048a
--- /dev/null
+++ b/assets/js/54a18fe8.fd648bf5.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5580],{3905:(t,e,n)=>{n.d(e,{Zo:()=>c,kt:()=>k});var r=n(7294);function a(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function l(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 o(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?l(Object(n),!0).forEach((function(e){a(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function p(t,e){if(null==t)return{};var n,r,a=function(t,e){if(null==t)return{};var n,r,a={},l=Object.keys(t);for(r=0;r<l.length;r++)n=l[r],e.indexOf(n)>=0||(a[n]=t[n]);return a}(t,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);for(r=0;r<l.length;r++)n=l[r],e.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(a[n]=t[n])}return a}var i=r.createContext({}),u=function(t){var e=r.useContext(i),n=e;return t&&(n="function"==typeof t?t(e):o(o({},e),t)),n},c=function(t){var e=u(t.components);return r.createElement(i.Provider,{value:e},t.children)},d="mdxType",m={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},s=r.forwardRef((function(t,e){var n=t.components,a=t.mdxType,l=t.originalType,i=t.parentName,c=p(t,["components","mdxType","originalType","parentName"]),d=u(n),s=a,k=d["".concat(i,".").concat(s)]||d[s]||m[s]||l;return n?r.createElement(k,o(o({ref:e},c),{},{components:n})):r.createElement(k,o({ref:e},c))}));function k(t,e){var n=arguments,a=e&&e.mdxType;if("string"==typeof t||a){var l=n.length,o=new Array(l);o[0]=s;var p={};for(var i in e)hasOwnProperty.call(e,i)&&(p[i]=e[i]);p.originalType=t,p[d]="string"==typeof t?t:a,o[1]=p;for(var u=2;u<l;u++)o[u]=n[u];return r.createElement.apply(null,o)}return r.createElement.apply(null,n)}s.displayName="MDXCreateElement"},6220:(t,e,n)=>{n.r(e),n.d(e,{assets:()=>c,contentTitle:()=>i,default:()=>s,frontMatter:()=>p,metadata:()=>u,toc:()=>d});var r=n(7462),a=n(3366),l=(n(7294),n(3905)),o=["components"],p={id:"unit64",title:"UInt64",sidebar_label:"UInt64"},i=void 0,u={unversionedId:"cryptojs/unit64",id:"cryptojs/unit64",title:"UInt64",description:"UInt64",source:"@site/../docs/cryptojs/uint64.md",sourceDirName:"cryptojs",slug:"/cryptojs/unit64",permalink:"/docs/cryptojs/unit64",draft:!1,tags:[],version:"current",frontMatter:{id:"unit64",title:"UInt64",sidebar_label:"UInt64"},sidebar:"docs",previous:{title:"SHA3",permalink:"/docs/cryptojs/sha3"},next:{title:"D-TA Overview",permalink:"/docs/d-ta-overview"}},c={},d=[{value:"UInt64",id:"uint64",level:2},{value:"new UInt64(top, bot)",id:"new-uint64top-bot",level:3},{value:"uInt64.add(y)",id:"uint64addy",level:3},{value:"uInt64.copy()",id:"uint64copy",level:3},{value:"uInt64.shlb()",id:"uint64shlb",level:3}],m={toc:d};function s(t){var e=t.components,n=(0,a.Z)(t,o);return(0,l.kt)("wrapper",(0,r.Z)({},m,n,{components:e,mdxType:"MDXLayout"}),(0,l.kt)("a",{name:"UInt64"}),(0,l.kt)("h2",{id:"uint64"},"UInt64"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": global class",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}UInt64{"}"}'),"  "),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#UInt64"},"UInt64"),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#new_UInt64_new"},"new UInt64(top, bot)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#UInt64+add"},".add(y)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#UInt64+copy"},".copy()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#UInt64+shlb"},".shlb()"))))),(0,l.kt)("a",{name:"new_UInt64_new"}),(0,l.kt)("h3",{id:"new-uint64top-bot"},"new UInt64(top, bot)"),(0,l.kt)("p",null,"Creates an instance of UInt64. Rudimentary unsigned 64-bit type for SHA384 and SHA512"),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"top"),(0,l.kt)("td",{parentName:"tr",align:null},"Top 32 bits")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"bot"),(0,l.kt)("td",{parentName:"tr",align:null},"Bottom 32 bits")))),(0,l.kt)("a",{name:"UInt64+add"}),(0,l.kt)("h3",{id:"uint64addy"},"uInt64.add(y)"),(0,l.kt)("p",null,"Add value"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#UInt64"},(0,l.kt)("code",null,"UInt64")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}UInt64{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"y"),(0,l.kt)("td",{parentName:"tr",align:null},"UInt64 value")))),(0,l.kt)("a",{name:"UInt64+copy"}),(0,l.kt)("h3",{id:"uint64copy"},"uInt64.copy()"),(0,l.kt)("p",null,"Copy value"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#UInt64"},(0,l.kt)("code",null,"UInt64")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}UInt64{"}"}'),"  "),(0,l.kt)("a",{name:"UInt64+shlb"}),(0,l.kt)("h3",{id:"uint64shlb"},"uInt64.shlb()"),(0,l.kt)("p",null,"Shift left"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#UInt64"},(0,l.kt)("code",null,"UInt64")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}UInt64{"}"}')))}s.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/598fef50.908cd3ff.js b/assets/js/598fef50.908cd3ff.js
new file mode 100644
index 0000000..f976e1d
--- /dev/null
+++ b/assets/js/598fef50.908cd3ff.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4279],{3905:(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 o(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 p(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 i=n.createContext({}),s=function(t){var e=n.useContext(i),a=e;return t&&(a="function"==typeof t?t(e):o(o({},e),t)),a},u=function(t){var e=s(t.components);return n.createElement(i.Provider,{value:e},t.children)},k="mdxType",m={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},h=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,l=t.originalType,i=t.parentName,u=p(t,["components","mdxType","originalType","parentName"]),k=s(a),h=r,c=k["".concat(i,".").concat(h)]||k[h]||m[h]||l;return a?n.createElement(c,o(o({ref:e},u),{},{components:a})):n.createElement(c,o({ref:e},u))}));function c(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=a.length,o=new Array(l);o[0]=h;var p={};for(var i in e)hasOwnProperty.call(e,i)&&(p[i]=e[i]);p.originalType=t,p[k]="string"==typeof t?t:r,o[1]=p;for(var s=2;s<l;s++)o[s]=a[s];return n.createElement.apply(null,o)}return n.createElement.apply(null,a)}h.displayName="MDXCreateElement"},6499:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>u,contentTitle:()=>i,default:()=>h,frontMatter:()=>p,metadata:()=>s,toc:()=>k});var n=a(7462),r=a(3366),l=(a(7294),a(3905)),o=["components"],p={id:"sha3",title:"SHA3",sidebar_label:"SHA3"},i=void 0,s={unversionedId:"cryptojs/sha3",id:"cryptojs/sha3",title:"SHA3",description:"SHA3",source:"@site/../docs/cryptojs/sha3.md",sourceDirName:"cryptojs",slug:"/cryptojs/sha3",permalink:"/docs/cryptojs/sha3",draft:!1,tags:[],version:"current",frontMatter:{id:"sha3",title:"SHA3",sidebar_label:"SHA3"},sidebar:"docs",previous:{title:"RSA",permalink:"/docs/cryptojs/rsa"},next:{title:"UInt64",permalink:"/docs/cryptojs/unit64"}},u={},k=[{value:"SHA3",id:"sha3",level:2},{value:"new SHA3(olen)",id:"new-sha3olen",level:3},{value:"shA3.init(olen)",id:"sha3initolen",level:3},{value:"shA3.process()",id:"sha3process",level:3},{value:"shA3.hash(buff)",id:"sha3hashbuff",level:3},{value:"shA3.shake(buff, olen)",id:"sha3shakebuff-olen",level:3}],m={toc:k};function h(t){var e=t.components,a=(0,r.Z)(t,o);return(0,l.kt)("wrapper",(0,n.Z)({},m,a,{components:e,mdxType:"MDXLayout"}),(0,l.kt)("a",{name:"SHA3"}),(0,l.kt)("h2",{id:"sha3"},"SHA3"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": global class",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}SHA3{"}"}'),"  "),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#SHA3"},"SHA3"),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#new_SHA3_new"},"new SHA3(olen)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#SHA3+init"},".init(olen)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#SHA3+process"},".process()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#SHA3+hash"},".hash(buff)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#SHA3+shake"},".shake(buff, olen)"))))),(0,l.kt)("a",{name:"new_SHA3_new"}),(0,l.kt)("h3",{id:"new-sha3olen"},"new SHA3(olen)"),(0,l.kt)("p",null,"Creates an instance of SHA3"),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"olen"),(0,l.kt)("td",{parentName:"tr",align:null},"output length")))),(0,l.kt)("a",{name:"SHA3+init"}),(0,l.kt)("h3",{id:"sha3initolen"},"shA3.init(olen)"),(0,l.kt)("p",null,"Initialise an instance of SHA3"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#SHA3"},(0,l.kt)("code",null,"SHA3")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}SHA3{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"olen"),(0,l.kt)("td",{parentName:"tr",align:null},"output length")))),(0,l.kt)("a",{name:"SHA3+process"}),(0,l.kt)("h3",{id:"sha3process"},"shA3.process()"),(0,l.kt)("p",null,"Process a byte for SHA3"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#SHA3"},(0,l.kt)("code",null,"SHA3")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}SHA3{"}"}'),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Byt"),": byte of date to be processed  "),(0,l.kt)("a",{name:"SHA3+hash"}),(0,l.kt)("h3",{id:"sha3hashbuff"},"shA3.hash(buff)"),(0,l.kt)("p",null,"Create fixed length hash output of SHA3"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#SHA3"},(0,l.kt)("code",null,"SHA3")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}SHA3{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"buff"),(0,l.kt)("td",{parentName:"tr",align:null},"byte array to store hash")))),(0,l.kt)("a",{name:"SHA3+shake"}),(0,l.kt)("h3",{id:"sha3shakebuff-olen"},"shA3.shake(buff, olen)"),(0,l.kt)("p",null,"Create variable length hash output of SHA3"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#SHA3"},(0,l.kt)("code",null,"SHA3")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}SHA3{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"buff"),(0,l.kt)("td",{parentName:"tr",align:null},"byte array to store hash")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"olen"),(0,l.kt)("td",{parentName:"tr",align:null},"length of the hash")))))}h.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/5abf2286.2050f369.js b/assets/js/5abf2286.2050f369.js
new file mode 100644
index 0000000..c3359ef
--- /dev/null
+++ b/assets/js/5abf2286.2050f369.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9215],{3905:(e,t,r)=>{r.d(t,{Zo:()=>l,kt:()=>d});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(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?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(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,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(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)&&(o[r]=e[r])}return o}var c=n.createContext({}),p=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},l=function(e){var t=p(e.components);return n.createElement(c.Provider,{value:t},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,l=s(e,["components","mdxType","originalType","parentName"]),u=p(r),f=o,d=u["".concat(c,".").concat(f)]||u[f]||m[f]||a;return r?n.createElement(d,i(i({ref:t},l),{},{components:r})):n.createElement(d,i({ref:t},l))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=f;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s[u]="string"==typeof e?e:o,i[1]=s;for(var p=2;p<a;p++)i[p]=r[p];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}f.displayName="MDXCreateElement"},5086:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>c,default:()=>f,frontMatter:()=>s,metadata:()=>p,toc:()=>u});var n=r(7462),o=r(3366),a=(r(7294),r(3905)),i=["components"],s={title:"Miss us? We missed you.",author:"Brian Spector",authorURL:"http://twitter.com/bspector"},c=void 0,p={permalink:"/blog/2019/06/10/miss-me",source:"@site/blog/2019-06-10-miss-me.md",title:"Miss us? We missed you.",description:"It's not often that Apache Incubation projects start, lay dormant for three years, and then spring to life. Yet, it's really happening. I pleased to report that in the past two weeks Milagro has added three new contributors, one new PPMC member and one new mentor. We launched a spartan, yet esthetically pleasing, project website. And, we have a roadmap.....",date:"2019-06-10T00:00:00.000Z",formattedDate:"June 10, 2019",tags:[],readingTime:.315,hasTruncateMarker:!1,authors:[{name:"Brian Spector",url:"http://twitter.com/bspector"}],frontMatter:{title:"Miss us? We missed you.",author:"Brian Spector",authorURL:"http://twitter.com/bspector"}},l={authorsImageUrls:[void 0]},u=[],m={toc:u};function f(e){var t=e.components,r=(0,o.Z)(e,i);return(0,a.kt)("wrapper",(0,n.Z)({},m,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"It's not often that Apache Incubation projects start, lay dormant for three years, and then spring to life. Yet, it's really happening. I pleased to report that in the past two weeks Milagro has added three new contributors, one new PPMC member and one new mentor. We launched a spartan, yet esthetically pleasing, project website. And, we have a roadmap....."),(0,a.kt)("p",null,"More details soon."))}f.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/63bfaece.00c51657.js b/assets/js/63bfaece.00c51657.js
new file mode 100644
index 0000000..8bda7b4
--- /dev/null
+++ b/assets/js/63bfaece.00c51657.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4758],{3905:(t,e,n)=>{n.d(e,{Zo:()=>s,kt:()=>m});var r=n(7294);function a(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 r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function i(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){a(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 c(t,e){if(null==t)return{};var n,r,a=function(t,e){if(null==t)return{};var n,r,a={},o=Object.keys(t);for(r=0;r<o.length;r++)n=o[r],e.indexOf(n)>=0||(a[n]=t[n]);return a}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(r=0;r<o.length;r++)n=o[r],e.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(a[n]=t[n])}return a}var l=r.createContext({}),u=function(t){var e=r.useContext(l),n=e;return t&&(n="function"==typeof t?t(e):i(i({},e),t)),n},s=function(t){var e=u(t.components);return r.createElement(l.Provider,{value:e},t.children)},p="mdxType",d={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},f=r.forwardRef((function(t,e){var n=t.components,a=t.mdxType,o=t.originalType,l=t.parentName,s=c(t,["components","mdxType","originalType","parentName"]),p=u(n),f=a,m=p["".concat(l,".").concat(f)]||p[f]||d[f]||o;return n?r.createElement(m,i(i({ref:e},s),{},{components:n})):r.createElement(m,i({ref:e},s))}));function m(t,e){var n=arguments,a=e&&e.mdxType;if("string"==typeof t||a){var o=n.length,i=new Array(o);i[0]=f;var c={};for(var l in e)hasOwnProperty.call(e,l)&&(c[l]=e[l]);c.originalType=t,c[p]="string"==typeof t?t:a,i[1]=c;for(var u=2;u<o;u++)i[u]=n[u];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}f.displayName="MDXCreateElement"},764:(t,e,n)=>{n.r(e),n.d(e,{assets:()=>s,contentTitle:()=>l,default:()=>f,frontMatter:()=>c,metadata:()=>u,toc:()=>p});var r=n(7462),a=n(3366),o=(n(7294),n(3905)),i=["components"],c={id:"authentication",title:"Authentication",sidebar_label:"Authentication"},l=void 0,u={unversionedId:"dta-details/authentication",id:"dta-details/authentication",title:"Authentication",description:"When you first install a Milagro D-TA, the API endpoints are not authenticated by default. In other words, any simple CURL command will elicit the expected response. Milagro D-TAs support the oAuth bearer token authentication out of the box.",source:"@site/../docs/dta-details/authentication.md",sourceDirName:"dta-details",slug:"/dta-details/authentication",permalink:"/docs/dta-details/authentication",draft:!1,tags:[],version:"current",frontMatter:{id:"authentication",title:"Authentication",sidebar_label:"Authentication"},sidebar:"docs",previous:{title:"Plugins Overview",permalink:"/docs/dta-details/plugins-overview"},next:{title:"Multi-Party Computation Library 0.1",permalink:"/docs/mpc-api-0.1"}},s={},p=[{value:"Configuration",id:"configuration",level:2}],d={toc:p};function f(t){var e=t.components,n=(0,a.Z)(t,i);return(0,o.kt)("wrapper",(0,r.Z)({},d,n,{components:e,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"When you first install a Milagro D-TA, the API endpoints are not authenticated by default. In other words, any simple CURL command will elicit the expected response. Milagro D-TAs support the ",(0,o.kt)("a",{parentName:"p",href:"https://tools.ietf.org/html/rfc6750"},"oAuth bearer token authentication")," out of the box."),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"We strong recommend that you ",(0,o.kt)("strong",{parentName:"p"},(0,o.kt)("em",{parentName:"strong"},"do not"))," run a Milagro D-TA instance without authentication.")),(0,o.kt)("p",null,"To configure authentication all that is required is a standard OAuth 2.0 service. If you do not have an OAuth service currently running in your own infrastructure, we recommend any of these fine service providers who will be able to authenticate your API users."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://aws.amazon.com/cognito/"},"AWS Cognito")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://azure.microsoft.com/en-gb/services/active-directory/"},"Azure Active Directory")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://auth0.com/"},"AuthO"))),(0,o.kt)("h2",{id:"configuration"},"Configuration"),(0,o.kt)("p",null,"Please see ",(0,o.kt)("a",{parentName:"p",href:"/docs/dta-details/configuration"},"Configuration")," for details on how to configure config.yaml to support OAuth."))}f.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/6b470099.2eaabadf.js b/assets/js/6b470099.2eaabadf.js
new file mode 100644
index 0000000..0d9708a
--- /dev/null
+++ b/assets/js/6b470099.2eaabadf.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8483],{5745:e=>{e.exports=JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}')}}]);
\ No newline at end of file
diff --git a/assets/js/6b73894e.c335836c.js b/assets/js/6b73894e.c335836c.js
new file mode 100644
index 0000000..07f99c7
--- /dev/null
+++ b/assets/js/6b73894e.c335836c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4441],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>k});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 l(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 o(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 c=a.createContext({}),s=function(e){var t=a.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},d=function(e){var t=s(e.components);return a.createElement(c.Provider,{value:t},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,i=e.originalType,c=e.parentName,d=o(e,["components","mdxType","originalType","parentName"]),u=s(r),m=n,k=u["".concat(c,".").concat(m)]||u[m]||p[m]||i;return r?a.createElement(k,l(l({ref:t},d),{},{components:r})):a.createElement(k,l({ref:t},d))}));function k(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=r.length,l=new Array(i);l[0]=m;var o={};for(var c in t)hasOwnProperty.call(t,c)&&(o[c]=t[c]);o.originalType=e,o[u]="string"==typeof e?e:n,l[1]=o;for(var s=2;s<i;s++)l[s]=r[s];return a.createElement.apply(null,l)}return a.createElement.apply(null,r)}m.displayName="MDXCreateElement"},6394:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>d,contentTitle:()=>c,default:()=>m,frontMatter:()=>o,metadata:()=>s,toc:()=>u});var a=r(7462),n=r(3366),i=(r(7294),r(3905)),l=["components"],o={id:"quickstart",title:"Quick Start",sidebar_label:"Quick Start"},c=void 0,s={unversionedId:"dta-details/quickstart",id:"dta-details/quickstart",title:"Quick Start",description:"Docker",source:"@site/../docs/dta-details/quickstart.md",sourceDirName:"dta-details",slug:"/dta-details/quickstart",permalink:"/docs/dta-details/quickstart",draft:!1,tags:[],version:"current",frontMatter:{id:"quickstart",title:"Quick Start",sidebar_label:"Quick Start"},sidebar:"docs",previous:{title:"D-TA Overview",permalink:"/docs/d-ta-overview"},next:{title:"API",permalink:"/docs/dta-details/api"}},d={},u=[{value:"Docker",id:"docker",level:2},{value:"Plugins",id:"plugins",level:2},{value:"Safeguard Secret",id:"safeguard-secret",level:3},{value:"Bitcoin Wallet Security",id:"bitcoin-wallet-security",level:3},{value:"D-TA API",id:"d-ta-api",level:2},{value:"Example - To create a new Identity",id:"example---to-create-a-new-identity",level:3}],p={toc:u};function m(e){var t=e.components,r=(0,n.Z)(e,l);return(0,i.kt)("wrapper",(0,a.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"docker"},"Docker"),(0,i.kt)("p",null,'The easiest way to see a D-TA in action is to run it in a Docker container. The default settings will run a single D-TA that acts as Principal, Fiduciary and Beneficiary. The default settings include an embedded IPFS node connected to a private IPFS network and an embedded "Bolt" database. This will get you up and running quickly but is ',(0,i.kt)("strong",{parentName:"p"},"not for production use!")),(0,i.kt)("p",null,"Please see the repo's ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/apache/incubator-milagro-dta"},"README")," for alternative build instructions."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"\ngit clone https://github.com/apache/incubator-milagro-dta.git\n\ncd incubator-milagro-dta\n\ndocker build -t milagrodta .\n\ndocker run -it -p 5556:5556 milagrodta\n\n\n")),(0,i.kt)("p",null,"Now you can test if the D-TA is running by hitting http:"),(0,i.kt)("p",null,"You should see something like..."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"\n\n\n")),(0,i.kt)("h2",{id:"plugins"},"Plugins"),(0,i.kt)("p",null,"The Milagro D-TA comes with two additional plugins out-of-the box, which are intended to demonstrate how it can be extended."),(0,i.kt)("h3",{id:"safeguard-secret"},"Safeguard Secret"),(0,i.kt)("p",null,"The Safeguard Secret plugin encrypts a string with the public key using ",(0,i.kt)("a",{parentName:"p",href:"https://medium.com/asecuritysite-when-bob-met-alice/generating-an-encryption-key-without-a-pass-phrase-meet-ecies-bbea1787d846"},"ECIES")," and decrypts it when the Fiduciary's D-TA returns the secret key."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"To Run Safeguard Secret")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"\n\n\n")),(0,i.kt)("h3",{id:"bitcoin-wallet-security"},"Bitcoin Wallet Security"),(0,i.kt)("p",null,"A Bitcoin Wallet uses a public key (derived from a private key) to create a Bitcoin address. To spend funds from that address, the private key is needed. Insufficient security of private keys has let to billions of dollars in theft. The Principal's Bitcoin Wallet Security plugin receives one half of the public key from the Fiduciary to ultimately create the wallet address. To spend the funds, the Fiduciary D-TA returns a secret to the Beneficiary's D-TA. A process adds this secret to one that is resident within the Principal's D-TA to materialize the wallet's private key."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"To Run Bitcoin Wallet Security")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"\n\n\n")),(0,i.kt)("p",null,"You can confirm that the plugins have loaded by hitting "),(0,i.kt)("h2",{id:"d-ta-api"},"D-TA API"),(0,i.kt)("p",null,"A Swagger description of the API is accessed ",(0,i.kt)("a",{parentName:"p",href:"/swagger/index.html"},"via this link.")),(0,i.kt)("p",null,"The Milagro D-TA can easily be integrated with an existing back office system, called from a front-end application or called from CURL, Postman, Swagger etc."),(0,i.kt)("p",null,"The API has three parts to it:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("strong",{parentName:"li"},"Identity Endpoints")," - that support creation and retrieval of ",(0,i.kt)("a",{parentName:"li",href:"/docs/dta-details/identity-documents"},"identity documents")),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("strong",{parentName:"li"},"Order Endpoints")," ",(0,i.kt)("ol",{parentName:"li"},(0,i.kt)("li",{parentName:"ol"},"Creates orders for new public keys"),(0,i.kt)("li",{parentName:"ol"},"Requests for secret keys to be transferred"),(0,i.kt)("li",{parentName:"ol"},"Allows orders to be searched and listed"))),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("strong",{parentName:"li"},"Fulfillment RPC")," - these are the server-to-server remote procedure calls that enable a Principal D-TA to communicate with a Master Fiduciary D-TA")),(0,i.kt)("h3",{id:"example---to-create-a-new-identity"},"Example - To create a new Identity"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"\n\n\n")))}m.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/6d6ade50.a73bb6db.js b/assets/js/6d6ade50.a73bb6db.js
new file mode 100644
index 0000000..c41e362
--- /dev/null
+++ b/assets/js/6d6ade50.a73bb6db.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9809],{3905:(e,t,r)=>{r.d(t,{Zo:()=>m,kt:()=>d});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 p(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 l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?p(Object(r),!0).forEach((function(t){n(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):p(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={},p=Object.keys(e);for(a=0;a<p.length;a++)r=p[a],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var p=Object.getOwnPropertySymbols(e);for(a=0;a<p.length;a++)r=p[a],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var o=a.createContext({}),i=function(e){var t=a.useContext(o),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},m=function(e){var t=i(e.components);return a.createElement(o.Provider,{value:t},e.children)},k="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},b=a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,p=e.originalType,o=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),k=i(r),b=n,d=k["".concat(o,".").concat(b)]||k[b]||u[b]||p;return r?a.createElement(d,l(l({ref:t},m),{},{components:r})):a.createElement(d,l({ref:t},m))}));function d(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var p=r.length,l=new Array(p);l[0]=b;var s={};for(var o in t)hasOwnProperty.call(t,o)&&(s[o]=t[o]);s.originalType=e,s[k]="string"==typeof e?e:n,l[1]=s;for(var i=2;i<p;i++)l[i]=r[i];return a.createElement.apply(null,l)}return a.createElement.apply(null,r)}b.displayName="MDXCreateElement"},1671:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>m,contentTitle:()=>o,default:()=>b,frontMatter:()=>s,metadata:()=>i,toc:()=>k});var a=r(7462),n=r(3366),p=(r(7294),r(3905)),l=["components"],s={id:"bls",title:"BLS",sidebar_label:"BLS"},o=void 0,i={unversionedId:"cryptojs/bls",id:"cryptojs/bls",title:"BLS",description:"BLS",source:"@site/../docs/cryptojs/bls.md",sourceDirName:"cryptojs",slug:"/cryptojs/bls",permalink:"/docs/cryptojs/bls",draft:!1,tags:[],version:"current",frontMatter:{id:"bls",title:"BLS",sidebar_label:"BLS"},sidebar:"docs",previous:{title:"BIG",permalink:"/docs/cryptojs/big"},next:{title:"BLS192",permalink:"/docs/cryptojs/bls192"}},m={},k=[{value:"BLS",id:"bls",level:2},{value:"new BLS()",id:"new-bls",level:3},{value:"BLS.bytestostring() \u21d2",id:"blsbytestostring-",level:3},{value:"BLS.stringtobytes() \u21d2",id:"blsstringtobytes-",level:3},{value:"BLS.bls_hashit() \u21d2",id:"blsbls_hashit-",level:3},{value:"BLS.KeyPairGenerate() \u21d2",id:"blskeypairgenerate-",level:3},{value:"BLS.sign() \u21d2",id:"blssign-",level:3},{value:"BLS.verify() \u21d2",id:"blsverify-",level:3},{value:"BLS.add_G1() \u21d2",id:"blsadd_g1-",level:3},{value:"BLS.add_G2() \u21d2",id:"blsadd_g2-",level:3}],u={toc:k};function b(e){var t=e.components,r=(0,n.Z)(e,l);return(0,p.kt)("wrapper",(0,a.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,p.kt)("a",{name:"BLS"}),(0,p.kt)("h2",{id:"bls"},"BLS"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": global class",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BLS{"}"}'),"  "),(0,p.kt)("ul",null,(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BLS"},"BLS"),(0,p.kt)("ul",{parentName:"li"},(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#new_BLS_new"},"new BLS()")),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BLS.bytestostring"},".bytestostring()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BLS.stringtobytes"},".stringtobytes()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BLS.bls_hashit"},".bls_hashit()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BLS.KeyPairGenerate"},".KeyPairGenerate()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BLS.sign"},".sign()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BLS.verify"},".verify()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BLS.add_G1"},".add_G1()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BLS.add_G2"},".add_G2()")," \u21d2")))),(0,p.kt)("a",{name:"new_BLS_new"}),(0,p.kt)("h3",{id:"new-bls"},"new BLS()"),(0,p.kt)("p",null,"Creates an instance of BLS"),(0,p.kt)("a",{name:"BLS.bytestostring"}),(0,p.kt)("h3",{id:"blsbytestostring-"},"BLS.bytestostring() \u21d2"),(0,p.kt)("p",null,"Convert byte array to string"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#BLS"},(0,p.kt)("code",null,"BLS")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": string",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BLS{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": b byte array  "),(0,p.kt)("a",{name:"BLS.stringtobytes"}),(0,p.kt)("h3",{id:"blsstringtobytes-"},"BLS.stringtobytes() \u21d2"),(0,p.kt)("p",null,"Convert string to byte array"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#BLS"},(0,p.kt)("code",null,"BLS")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": byte array",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BLS{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": s string  "),(0,p.kt)("a",{name:"BLS.bls_hashit"}),(0,p.kt)("h3",{id:"blsbls_hashit-"},"BLS.bls_hashit() \u21d2"),(0,p.kt)("p",null,"hash a message to an ECP point, using SHA3"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#BLS"},(0,p.kt)("code",null,"BLS")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": ECP point",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BLS{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": m message to be hashedstring  "),(0,p.kt)("a",{name:"BLS.KeyPairGenerate"}),(0,p.kt)("h3",{id:"blskeypairgenerate-"},"BLS.KeyPairGenerate() \u21d2"),(0,p.kt)("p",null,"Generate key pair"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#BLS"},(0,p.kt)("code",null,"BLS")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": Error code",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BLS{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": rng Cryptographically Secure Random Number Generator",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": S Private key",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": W Public key  "),(0,p.kt)("a",{name:"BLS.sign"}),(0,p.kt)("h3",{id:"blssign-"},"BLS.sign() \u21d2"),(0,p.kt)("p",null,"Sign message"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#BLS"},(0,p.kt)("code",null,"BLS")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": Error code",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BLS{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": SIG Singature",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": m Message to sign",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": S Private key  "),(0,p.kt)("a",{name:"BLS.verify"}),(0,p.kt)("h3",{id:"blsverify-"},"BLS.verify() \u21d2"),(0,p.kt)("p",null,"Verify message"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#BLS"},(0,p.kt)("code",null,"BLS")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": Error code",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BLS{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": SIG Signature",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": m Message to sign",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": W Public key  "),(0,p.kt)("a",{name:"BLS.add_G1"}),(0,p.kt)("h3",{id:"blsadd_g1-"},"BLS.add_G1() \u21d2"),(0,p.kt)("p",null,"R=R1+R2 in group G1"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#BLS"},(0,p.kt)("code",null,"BLS")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": Error code",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BLS{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": R1 G1 Point",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": R2 G1 Point",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": R G1 Point  "),(0,p.kt)("a",{name:"BLS.add_G2"}),(0,p.kt)("h3",{id:"blsadd_g2-"},"BLS.add_G2() \u21d2"),(0,p.kt)("p",null,"W=W1+W2 in group G2"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#BLS"},(0,p.kt)("code",null,"BLS")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": Error code",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BLS{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": W1 G2 Point",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": W2 G2 Point",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": R G2 Point"))}b.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/76b96e45.0c9c696f.js b/assets/js/76b96e45.0c9c696f.js
new file mode 100644
index 0000000..0262dfa
--- /dev/null
+++ b/assets/js/76b96e45.0c9c696f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[761],{3905:(t,e,a)=>{a.d(e,{Zo:()=>k,kt:()=>s});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 p(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 i(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 m=n.createContext({}),N=function(t){var e=n.useContext(m),a=e;return t&&(a="function"==typeof t?t(e):p(p({},e),t)),a},k=function(t){var e=N(t.components);return n.createElement(m.Provider,{value:e},t.children)},d="mdxType",u={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},o=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,l=t.originalType,m=t.parentName,k=i(t,["components","mdxType","originalType","parentName"]),d=N(a),o=r,s=d["".concat(m,".").concat(o)]||d[o]||u[o]||l;return a?n.createElement(s,p(p({ref:e},k),{},{components:a})):n.createElement(s,p({ref:e},k))}));function s(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=a.length,p=new Array(l);p[0]=o;var i={};for(var m in e)hasOwnProperty.call(e,m)&&(i[m]=e[m]);i.originalType=t,i[d]="string"==typeof t?t:r,p[1]=i;for(var N=2;N<l;N++)p[N]=a[N];return n.createElement.apply(null,p)}return n.createElement.apply(null,a)}o.displayName="MDXCreateElement"},6738:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>k,contentTitle:()=>m,default:()=>o,frontMatter:()=>i,metadata:()=>N,toc:()=>d});var n=a(7462),r=a(3366),l=(a(7294),a(3905)),p=["components"],i={id:"mpin192",title:"MPIN192",sidebar_label:"MPIN192"},m=void 0,N={unversionedId:"cryptojs/mpin192",id:"cryptojs/mpin192",title:"MPIN192",description:"MPIN192",source:"@site/../docs/cryptojs/mpin192.md",sourceDirName:"cryptojs",slug:"/cryptojs/mpin192",permalink:"/docs/cryptojs/mpin192",draft:!1,tags:[],version:"current",frontMatter:{id:"mpin192",title:"MPIN192",sidebar_label:"MPIN192"},sidebar:"docs",previous:{title:"MPIN",permalink:"/docs/cryptojs/mpin"},next:{title:"MPIN256",permalink:"/docs/cryptojs/mpin256"}},k={},d=[{value:"MPIN192",id:"mpin192",level:2},{value:"new MPIN192()",id:"new-mpin192",level:3},{value:"MPIN192.today() \u21d2",id:"mpin192today-",level:3},{value:"MPIN192.bytestostring(b) \u21d2",id:"mpin192bytestostringb-",level:3},{value:"MPIN192.stringtobytes(s) \u21d2",id:"mpin192stringtobytess-",level:3},{value:"MPIN192.comparebytes(a, b) \u21d2",id:"mpin192comparebytesa-b-",level:3},{value:"MPIN192.mpin_hash(c, U) \u21d2",id:"mpin192mpin_hashc-u-",level:3},{value:"MPIN192.hashit(sha, n, B) \u21d2",id:"mpin192hashitsha-n-b-",level:3},{value:"MPIN192.map(u, cb) \u21d2",id:"mpin192mapu-cb-",level:3},{value:"MPIN192.unmap(u, P) \u21d2",id:"mpin192unmapu-p-",level:3},{value:"MPIN192.RECOMBINE_G1(R1, R2, R) \u21d2",id:"mpin192recombine_g1r1-r2-r-",level:3},{value:"MPIN192.RECOMBINE_G2(W1, W2, W) \u21d2",id:"mpin192recombine_g2w1-w2-w-",level:3},{value:"MPIN192.HASH_ID(sha, ID) \u21d2",id:"mpin192hash_idsha-id-",level:3},{value:"MPIN192.RANDOM_GENERATE(rng, S) \u21d2",id:"mpin192random_generaterng-s-",level:3},{value:"MPIN192.EXTRACT_PIN() \u21d2",id:"mpin192extract_pin-",level:3},{value:"MPIN192.EXTRACT_FACTOR() \u21d2",id:"mpin192extract_factor-",level:3},{value:"MPIN192.RESTORE_FACTOR() \u21d2",id:"mpin192restore_factor-",level:3},{value:"MPIN192.GET_SERVER_SECRET(S, SST) \u21d2",id:"mpin192get_server_secrets-sst-",level:3},{value:"MPIN192.GET_G1_MULTIPLE(type, x, G, W) \u21d2",id:"mpin192get_g1_multipletype-x-g-w-",level:3},{value:"MPIN192.GET_CLIENT_SECRET(S, CID, CST) \u21d2",id:"mpin192get_client_secrets-cid-cst-",level:3},{value:"MPIN192.GET_CLIENT_PERMIT(sha, date, S, CID, CTT) \u21d2",id:"mpin192get_client_permitsha-date-s-cid-ctt-",level:3},{value:"MPIN192.CLIENT_1(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT) \u21d2",id:"mpin192client_1sha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-",level:3},{value:"MPIN192.CLIENT_2(X, Y, SEC) \u21d2",id:"mpin192client_2x-y-sec-",level:3},{value:"MPIN192.SERVER_1(sha, date, CID, HID, HTID) \u21d2",id:"mpin192server_1sha-date-cid-hid-htid-",level:3},{value:"MPIN192.SERVER_2(date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, Pa) \u21d2",id:"mpin192server_2date-hid-htid-y-sst-xid-xcid-msec-e-f-pa-",level:3},{value:"MPIN192.KANGAROO(E, F) \u21d2",id:"mpin192kangarooe-f-",level:3},{value:"MPIN192.GET_TIME() \u21d2",id:"mpin192get_time-",level:3},{value:"MPIN192.GET_Y(sha, TimeValue, xCID, Y) \u21d2",id:"mpin192get_ysha-timevalue-xcid-y-",level:3},{value:"MPIN192.CLIENT(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT, TimeValue, Y, Message) \u21d2",id:"mpin192clientsha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-timevalue-y-message-",level:3},{value:"MPIN192.SERVER(sha, date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, CID, TimeValue, MESSAGE, Pa) \u21d2",id:"mpin192serversha-date-hid-htid-y-sst-xid-xcid-msec-e-f-cid-timevalue-message-pa-",level:3},{value:"MPIN192.PRECOMPUTE(TOKEN, CID, G1, G2) \u21d2",id:"mpin192precomputetoken-cid-g1-g2-",level:3},{value:"MPIN192.HASH_ALL(sha, HID, xID, xCID, SEC, Y, R, W) \u21d2",id:"mpin192hash_allsha-hid-xid-xcid-sec-y-r-w-",level:3},{value:"MPIN192.CLIENT_KEY(sha, G1, G2, pin, R, X, H, wCID, CK) \u21d2",id:"mpin192client_keysha-g1-g2-pin-r-x-h-wcid-ck-",level:3},{value:"MPIN192.SERVER_KEY(h, Z, SST, W, H, HID, xID, xCID, SK) \u21d2",id:"mpin192server_keyh-z-sst-w-h-hid-xid-xcid-sk-",level:3},{value:"MPIN192.GET_DVS_KEYPAIR(rng, Z, Pa) \u21d2",id:"mpin192get_dvs_keypairrng-z-pa-",level:3}],u={toc:d};function o(t){var e=t.components,a=(0,r.Z)(t,p);return(0,l.kt)("wrapper",(0,n.Z)({},u,a,{components:e,mdxType:"MDXLayout"}),(0,l.kt)("a",{name:"MPIN192"}),(0,l.kt)("h2",{id:"mpin192"},"MPIN192"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": global class",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN192{"}"}'),"  "),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN192"},"MPIN192"),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#new_MPIN192_new"},"new MPIN192()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN192.today"},".today()")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN192.bytestostring"},".bytestostring(b)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN192.stringtobytes"},".stringtobytes(s)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN192.comparebytes"},".comparebytes(a, b)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN192.mpin_hash"},".mpin_hash(c, U)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN192.hashit"},".hashit(sha, n, B)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN192.map"},".map(u, cb)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN192.unmap"},".unmap(u, P)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN192.RECOMBINE_G1"},".RECOMBINE_G1(R1, R2, R)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN192.RECOMBINE_G2"},".RECOMBINE_G2(W1, W2, W)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN192.HASH_ID"},".HASH_ID(sha, ID)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN192.RANDOM_GENERATE"},".RANDOM_GENERATE(rng, S)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN192.EXTRACT_PIN"},".EXTRACT_PIN()")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN192.EXTRACT_FACTOR"},".EXTRACT_FACTOR()")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN192.RESTORE_FACTOR"},".RESTORE_FACTOR()")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN192.GET_SERVER_SECRET"},".GET_SERVER_SECRET(S, SST)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN192.GET_G1_MULTIPLE"},".GET_G1_MULTIPLE(type, x, G, W)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN192.GET_CLIENT_SECRET"},".GET_CLIENT_SECRET(S, CID, CST)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN192.GET_CLIENT_PERMIT"},".GET_CLIENT_PERMIT(sha, date, S, CID, CTT)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN192.CLIENT_1"},".CLIENT_1(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN192.CLIENT_2"},".CLIENT_2(X, Y, SEC)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN192.SERVER_1"},".SERVER_1(sha, date, CID, HID, HTID)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN192.SERVER_2"},".SERVER_2(date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, Pa)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN192.KANGAROO"},".KANGAROO(E, F)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN192.GET_TIME"},".GET_TIME()")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN192.GET_Y"},".GET_Y(sha, TimeValue, xCID, Y)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN192.CLIENT"},".CLIENT(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT, TimeValue, Y, Message)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN192.SERVER"},".SERVER(sha, date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, CID, TimeValue, MESSAGE, Pa)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN192.PRECOMPUTE"},".PRECOMPUTE(TOKEN, CID, G1, G2)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN192.HASH_ALL"},".HASH_ALL(sha, HID, xID, xCID, SEC, Y, R, W)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN192.CLIENT_KEY"},".CLIENT_KEY(sha, G1, G2, pin, R, X, H, wCID, CK)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN192.SERVER_KEY"},".SERVER_KEY(h, Z, SST, W, H, HID, xID, xCID, SK)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN192.GET_DVS_KEYPAIR"},".GET_DVS_KEYPAIR(rng, Z, Pa)")," \u21d2")))),(0,l.kt)("a",{name:"new_MPIN192_new"}),(0,l.kt)("h3",{id:"new-mpin192"},"new MPIN192()"),(0,l.kt)("p",null,"Creates an instance of MPIN192"),(0,l.kt)("a",{name:"MPIN192.today"}),(0,l.kt)("h3",{id:"mpin192today-"},"MPIN192.today() \u21d2"),(0,l.kt)("p",null,"Get epoch time"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN192"},(0,l.kt)("code",null,"MPIN192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": time in slots since epoch",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN192{"}"}'),"  "),(0,l.kt)("a",{name:"MPIN192.bytestostring"}),(0,l.kt)("h3",{id:"mpin192bytestostringb-"},"MPIN192.bytestostring(b) \u21d2"),(0,l.kt)("p",null,"Convert byte array to string"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN192"},(0,l.kt)("code",null,"MPIN192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": s string",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN192{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"b"),(0,l.kt)("td",{parentName:"tr",align:null},"byte array")))),(0,l.kt)("a",{name:"MPIN192.stringtobytes"}),(0,l.kt)("h3",{id:"mpin192stringtobytess-"},"MPIN192.stringtobytes(s) \u21d2"),(0,l.kt)("p",null,"Convert a string to byte array"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN192"},(0,l.kt)("code",null,"MPIN192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": b byte array",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN192{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"s"),(0,l.kt)("td",{parentName:"tr",align:null},"string")))),(0,l.kt)("a",{name:"MPIN192.comparebytes"}),(0,l.kt)("h3",{id:"mpin192comparebytesa-b-"},"MPIN192.comparebytes(a, b) \u21d2"),(0,l.kt)("p",null,"Convert byte arrays"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN192"},(0,l.kt)("code",null,"MPIN192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": true if equal",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN192{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"a"),(0,l.kt)("td",{parentName:"tr",align:null},"byte array")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"b"),(0,l.kt)("td",{parentName:"tr",align:null},"byte array")))),(0,l.kt)("a",{name:"MPIN192.mpin_hash"}),(0,l.kt)("h3",{id:"mpin192mpin_hashc-u-"},"MPIN192.mpin_hash(c, U) \u21d2"),(0,l.kt)("p",null,"Hash values"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN192"},(0,l.kt)("code",null,"MPIN192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": R hash value",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN192{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"c"),(0,l.kt)("td",{parentName:"tr",align:null},"FP8 instance")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"U"),(0,l.kt)("td",{parentName:"tr",align:null},"ECP unstancebyte array")))),(0,l.kt)("a",{name:"MPIN192.hashit"}),(0,l.kt)("h3",{id:"mpin192hashitsha-n-b-"},"MPIN192.hashit(sha, n, B) \u21d2"),(0,l.kt)("p",null,"General purpose hash function"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN192"},(0,l.kt)("code",null,"MPIN192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": R hash value",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN192{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sha"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"n"),(0,l.kt)("td",{parentName:"tr",align:null},"Integer")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"B"),(0,l.kt)("td",{parentName:"tr",align:null},"byte array")))),(0,l.kt)("a",{name:"MPIN192.map"}),(0,l.kt)("h3",{id:"mpin192mapu-cb-"},"MPIN192.map(u, cb) \u21d2"),(0,l.kt)("p",null,"maps a random u to a point on the curve"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN192"},(0,l.kt)("code",null,"MPIN192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": P ECP pointhash value",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN192{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"u"),(0,l.kt)("td",{parentName:"tr",align:null},"BIG numberInteger")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"cb"),(0,l.kt)("td",{parentName:"tr",align:null},'an integer representing the "sign" of y, in fact its least significant bit.')))),(0,l.kt)("a",{name:"MPIN192.unmap"}),(0,l.kt)("h3",{id:"mpin192unmapu-p-"},"MPIN192.unmap(u, P) \u21d2"),(0,l.kt)("p",null,"returns u derived from P. Random value in range 1 to return value should then be added to u"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN192"},(0,l.kt)("code",null,"MPIN192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": r Value that should be added to u to derive P",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN192{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"u"),(0,l.kt)("td",{parentName:"tr",align:null},"BIG numberInteger")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"P"),(0,l.kt)("td",{parentName:"tr",align:null},"ECP pointhash value")))),(0,l.kt)("a",{name:"MPIN192.RECOMBINE_G1"}),(0,l.kt)("h3",{id:"mpin192recombine_g1r1-r2-r-"},"MPIN192.RECOMBINE_G1(R1, R2, R) \u21d2"),(0,l.kt)("p",null,"Add two members from the group G1"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN192"},(0,l.kt)("code",null,"MPIN192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": 0 or an error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN192{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"R1"),(0,l.kt)("td",{parentName:"tr",align:null},"Input member of G1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"R2"),(0,l.kt)("td",{parentName:"tr",align:null},"Input member of G1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"R"),(0,l.kt)("td",{parentName:"tr",align:null},"Output member of G1. R=R1+R2")))),(0,l.kt)("a",{name:"MPIN192.RECOMBINE_G2"}),(0,l.kt)("h3",{id:"mpin192recombine_g2w1-w2-w-"},"MPIN192.RECOMBINE_G2(W1, W2, W) \u21d2"),(0,l.kt)("p",null,"Add two members from the group G2"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN192"},(0,l.kt)("code",null,"MPIN192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": 0 or an error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN192{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"W1"),(0,l.kt)("td",{parentName:"tr",align:null},"Input member of G2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"W2"),(0,l.kt)("td",{parentName:"tr",align:null},"Input member of G2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"W"),(0,l.kt)("td",{parentName:"tr",align:null},"Output member of G2. W=W1+W2")))),(0,l.kt)("a",{name:"MPIN192.HASH_ID"}),(0,l.kt)("h3",{id:"mpin192hash_idsha-id-"},"MPIN192.HASH_ID(sha, ID) \u21d2"),(0,l.kt)("p",null,"Hash the identity"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN192"},(0,l.kt)("code",null,"MPIN192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": hash value",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN192{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sha"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ID"),(0,l.kt)("td",{parentName:"tr",align:null},"Identity as byte array")))),(0,l.kt)("a",{name:"MPIN192.RANDOM_GENERATE"}),(0,l.kt)("h3",{id:"mpin192random_generaterng-s-"},"MPIN192.RANDOM_GENERATE(rng, S) \u21d2"),(0,l.kt)("p",null,"Create random secret"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN192"},(0,l.kt)("code",null,"MPIN192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN192{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"rng"),(0,l.kt)("td",{parentName:"tr",align:null},"cryptographically secure random number generator")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"S"),(0,l.kt)("td",{parentName:"tr",align:null},"Random secret value")))),(0,l.kt)("a",{name:"MPIN192.EXTRACT_PIN"}),(0,l.kt)("h3",{id:"mpin192extract_pin-"},"MPIN192.EXTRACT_PIN() \u21d2"),(0,l.kt)("p",null,"Extract a PIN number from a client secret"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN192"},(0,l.kt)("code",null,"MPIN192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": token",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN192{"}"}'),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": sha hash type",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": CID Client identity",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": pin PIN value",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": TOKEN Client secret  "),(0,l.kt)("a",{name:"MPIN192.EXTRACT_FACTOR"}),(0,l.kt)("h3",{id:"mpin192extract_factor-"},"MPIN192.EXTRACT_FACTOR() \u21d2"),(0,l.kt)("p",null,"Extract factor from TOKEN for identity CID"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN192"},(0,l.kt)("code",null,"MPIN192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": token",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN192{"}"}'),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": sha hash type",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": CID Client identity",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": factor Value to extract",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": facbits Number of bits in factor",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": TOKEN Token value  "),(0,l.kt)("a",{name:"MPIN192.RESTORE_FACTOR"}),(0,l.kt)("h3",{id:"mpin192restore_factor-"},"MPIN192.RESTORE_FACTOR() \u21d2"),(0,l.kt)("p",null,"Restore factor to TOKEN for identity CID"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN192"},(0,l.kt)("code",null,"MPIN192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": token",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN192{"}"}'),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": sha hash type",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": CID Client identity",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": factor Value to extract",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": facbits Number of bits in factor",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": TOKEN Token value  "),(0,l.kt)("a",{name:"MPIN192.GET_SERVER_SECRET"}),(0,l.kt)("h3",{id:"mpin192get_server_secrets-sst-"},"MPIN192.GET_SERVER_SECRET(S, SST) \u21d2"),(0,l.kt)("p",null,"Create a server secret in G2 from a master secret"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN192"},(0,l.kt)("code",null,"MPIN192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN192{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"S"),(0,l.kt)("td",{parentName:"tr",align:null},"Master secret")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SST"),(0,l.kt)("td",{parentName:"tr",align:null},"Server secret = s.Q where Q is a fixed generator of G2")))),(0,l.kt)("a",{name:"MPIN192.GET_G1_MULTIPLE"}),(0,l.kt)("h3",{id:"mpin192get_g1_multipletype-x-g-w-"},"MPIN192.GET_G1_MULTIPLE(type, x, G, W) \u21d2"),(0,l.kt)("p",null,"Find a random multiple of a point in G1"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN192"},(0,l.kt)("code",null,"MPIN192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN192{"}"}'),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": rng cryptographically secure random number generator  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"type"),(0,l.kt)("td",{parentName:"tr",align:null},"determines type of action to be taken")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"x"),(0,l.kt)("td",{parentName:"tr",align:null},"an output internally randomly generated if R!=NULL, otherwise must be provided as an input")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"G"),(0,l.kt)("td",{parentName:"tr",align:null},"if type=0 a point in G1, else an octet to be mapped to G1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"W"),(0,l.kt)("td",{parentName:"tr",align:null},"the output =x.G or x.M(G), where M(.) is a mapping")))),(0,l.kt)("a",{name:"MPIN192.GET_CLIENT_SECRET"}),(0,l.kt)("h3",{id:"mpin192get_client_secrets-cid-cst-"},"MPIN192.GET_CLIENT_SECRET(S, CID, CST) \u21d2"),(0,l.kt)("p",null,"Create a client secret in G1 from a master secret and the client ID"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN192"},(0,l.kt)("code",null,"MPIN192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN192{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"S"),(0,l.kt)("td",{parentName:"tr",align:null},"is an input master secret")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"CID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input client identity")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"CST"),(0,l.kt)("td",{parentName:"tr",align:null},"is the full client secret = s.H(ID)")))),(0,l.kt)("a",{name:"MPIN192.GET_CLIENT_PERMIT"}),(0,l.kt)("h3",{id:"mpin192get_client_permitsha-date-s-cid-ctt-"},"MPIN192.GET_CLIENT_PERMIT(sha, date, S, CID, CTT) \u21d2"),(0,l.kt)("p",null,"Create a Time Permit in G1 from a master secret and the client ID"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN192"},(0,l.kt)("code",null,"MPIN192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN192{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null}))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sha"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"date"),(0,l.kt)("td",{parentName:"tr",align:null},"is input date, in days since the epoch."),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"S"),(0,l.kt)("td",{parentName:"tr",align:null},"is an input master secret"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"CID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input client identity"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"CTT"),(0,l.kt)("td",{parentName:"tr",align:null},"is a Time Permit for the given date = s.H(d"),(0,l.kt)("td",{parentName:"tr",align:null},"H(ID))")))),(0,l.kt)("a",{name:"MPIN192.CLIENT_1"}),(0,l.kt)("h3",{id:"mpin192client_1sha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-"},"MPIN192.CLIENT_1(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT) \u21d2"),(0,l.kt)("p",null,"Perform first pass of the client side of the 3-pass version of the M-Pin protocol"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN192"},(0,l.kt)("code",null,"MPIN192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN192{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null}))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sha"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"date"),(0,l.kt)("td",{parentName:"tr",align:null},"is input date, in days since the epoch. Set to 0 if Time permits disabled"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"CLIENT_ID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input client identity"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"rng"),(0,l.kt)("td",{parentName:"tr",align:null},"is a pointer to a cryptographically secure random number generator"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"X"),(0,l.kt)("td",{parentName:"tr",align:null},"an output internally randomly generated if R!=NULL, otherwise must be provided as an input"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"pin"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input PIN number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"TOKEN"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input M-Pin token (the client secret with PIN portion removed)"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SEC"),(0,l.kt)("td",{parentName:"tr",align:null},"is output = CS+TP, where CS=is the reconstructed client secret, and TP is the time permit"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xID"),(0,l.kt)("td",{parentName:"tr",align:null},"is output = x.H(ID)"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xCID"),(0,l.kt)("td",{parentName:"tr",align:null},"is output = x.(H(ID)+H(d"),(0,l.kt)("td",{parentName:"tr",align:null},"H(ID)))")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"PERMIT"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input time permit"),(0,l.kt)("td",{parentName:"tr",align:null})))),(0,l.kt)("a",{name:"MPIN192.CLIENT_2"}),(0,l.kt)("h3",{id:"mpin192client_2x-y-sec-"},"MPIN192.CLIENT_2(X, Y, SEC) \u21d2"),(0,l.kt)("p",null,"Perform second pass of the client side of the 3-pass version of the M-Pin protocol"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN192"},(0,l.kt)("code",null,"MPIN192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN192{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"X"),(0,l.kt)("td",{parentName:"tr",align:null},"an input, a locally generated random number")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Y"),(0,l.kt)("td",{parentName:"tr",align:null},"an input random challenge from the server")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SEC"),(0,l.kt)("td",{parentName:"tr",align:null},"on output = -(x+y).V")))),(0,l.kt)("a",{name:"MPIN192.SERVER_1"}),(0,l.kt)("h3",{id:"mpin192server_1sha-date-cid-hid-htid-"},"MPIN192.SERVER_1(sha, date, CID, HID, HTID) \u21d2"),(0,l.kt)("p",null,"Perform first pass of the server side of the 3-pass version of the M-Pin protocol"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN192"},(0,l.kt)("code",null,"MPIN192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN192{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null}))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sha"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"date"),(0,l.kt)("td",{parentName:"tr",align:null},"is input date, in days since the epoch. Set to 0 if Time permits disabled"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"CID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input claimed client identity"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"HID"),(0,l.kt)("td",{parentName:"tr",align:null},"is output H(ID), a hash of the client ID"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"HTID"),(0,l.kt)("td",{parentName:"tr",align:null},"is output H(ID)+H(d"),(0,l.kt)("td",{parentName:"tr",align:null},"H(ID))")))),(0,l.kt)("a",{name:"MPIN192.SERVER_2"}),(0,l.kt)("h3",{id:"mpin192server_2date-hid-htid-y-sst-xid-xcid-msec-e-f-pa-"},"MPIN192.SERVER_2(date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, Pa) \u21d2"),(0,l.kt)("p",null,"Perform third pass on the server side of the 3-pass version of the M-Pin protocol"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN192"},(0,l.kt)("code",null,"MPIN192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN192{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null}))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"date"),(0,l.kt)("td",{parentName:"tr",align:null},"is input date, in days since the epoch. Set to 0 if Time permits disabled"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"HID"),(0,l.kt)("td",{parentName:"tr",align:null},"is input H(ID), a hash of the client ID"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"HTID"),(0,l.kt)("td",{parentName:"tr",align:null},"is input H(ID)+H(d"),(0,l.kt)("td",{parentName:"tr",align:null},"H(ID))")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Y"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input server's randomly generated challenge"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SST"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input server secret"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xID"),(0,l.kt)("td",{parentName:"tr",align:null},"is input from the client = x.H(ID)"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xCID"),(0,l.kt)("td",{parentName:"tr",align:null},"is input from the client= x.(H(ID)+H(d"),(0,l.kt)("td",{parentName:"tr",align:null},"H(ID)))")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"mSEC"),(0,l.kt)("td",{parentName:"tr",align:null},"is an input from the client"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"E"),(0,l.kt)("td",{parentName:"tr",align:null},"is an output to help the Kangaroos to find the PIN error, or NULL if not required"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"F"),(0,l.kt)("td",{parentName:"tr",align:null},"is an output to help the Kangaroos to find the PIN error, or NULL if not required"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Pa"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input public key from the client, z.Q or NULL if the client uses regular mpin"),(0,l.kt)("td",{parentName:"tr",align:null})))),(0,l.kt)("a",{name:"MPIN192.KANGAROO"}),(0,l.kt)("h3",{id:"mpin192kangarooe-f-"},"MPIN192.KANGAROO(E, F) \u21d2"),(0,l.kt)("p",null,"Use Kangaroos to find PIN error"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN192"},(0,l.kt)("code",null,"MPIN192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": 0 if Kangaroos failed, or the PIN error e",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN192{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"E"),(0,l.kt)("td",{parentName:"tr",align:null},"a member of the group GT")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"F"),(0,l.kt)("td",{parentName:"tr",align:null},"a member of the group GT =  E^e")))),(0,l.kt)("a",{name:"MPIN192.GET_TIME"}),(0,l.kt)("h3",{id:"mpin192get_time-"},"MPIN192.GET_TIME() \u21d2"),(0,l.kt)("p",null,"Time since epoch"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN192"},(0,l.kt)("code",null,"MPIN192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": time since epoch",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN192{"}"}'),"  "),(0,l.kt)("a",{name:"MPIN192.GET_Y"}),(0,l.kt)("h3",{id:"mpin192get_ysha-timevalue-xcid-y-"},"MPIN192.GET_Y(sha, TimeValue, xCID, Y) \u21d2"),(0,l.kt)("p",null,"Generate Y=H(s,O), where s is epoch time, O is a byte array, and H(.) is a hash function"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN192"},(0,l.kt)("code",null,"MPIN192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN192{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sha"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"TimeValue"),(0,l.kt)("td",{parentName:"tr",align:null},"is epoch time in seconds")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xCID"),(0,l.kt)("td",{parentName:"tr",align:null},"input bytearray is an input octet")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Y"),(0,l.kt)("td",{parentName:"tr",align:null},"output value")))),(0,l.kt)("a",{name:"MPIN192.CLIENT"}),(0,l.kt)("h3",{id:"mpin192clientsha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-timevalue-y-message-"},"MPIN192.CLIENT(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT, TimeValue, Y, Message) \u21d2"),(0,l.kt)("p",null,"Perform client side of the one-pass version of the M-Pin protocol"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN192"},(0,l.kt)("code",null,"MPIN192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN192{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null}),(0,l.kt)("th",{parentName:"tr",align:null}))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sha"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type"),(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},"date"),(0,l.kt)("td",{parentName:"tr",align:null},"is input date, in days since the epoch. Set to 0 if Time permits disabled"),(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},"CLIENT_ID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input client identity"),(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},"rng"),(0,l.kt)("td",{parentName:"tr",align:null},"is a pointer to a cryptographically secure random number generator"),(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},"X"),(0,l.kt)("td",{parentName:"tr",align:null},"an output internally randomly generated if R!=NULL, otherwise must be provided as an input"),(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},"pin"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input PIN number"),(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},"TOKEN"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input M-Pin token (the client secret with PIN portion removed)"),(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},"SEC"),(0,l.kt)("td",{parentName:"tr",align:null},"is output = -(x+y)(CS+TP), where CS is the reconstructed client secret, and TP is the time permit"),(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},"xID"),(0,l.kt)("td",{parentName:"tr",align:null},"is output = x.H(ID)"),(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},"xCID"),(0,l.kt)("td",{parentName:"tr",align:null},"is output = x.(H(ID)+H(d"),(0,l.kt)("td",{parentName:"tr",align:null},"H(ID)))"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"PERMIT"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input time permit"),(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},"TimeValue"),(0,l.kt)("td",{parentName:"tr",align:null},"is input epoch time in seconds - a timestamp"),(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},"Y"),(0,l.kt)("td",{parentName:"tr",align:null},"is output H(t"),(0,l.kt)("td",{parentName:"tr",align:null},"U) or H(t"),(0,l.kt)("td",{parentName:"tr",align:null},"UT) if Time Permits enabled")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Message"),(0,l.kt)("td",{parentName:"tr",align:null},"is the message to be signed"),(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null})))),(0,l.kt)("a",{name:"MPIN192.SERVER"}),(0,l.kt)("h3",{id:"mpin192serversha-date-hid-htid-y-sst-xid-xcid-msec-e-f-cid-timevalue-message-pa-"},"MPIN192.SERVER(sha, date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, CID, TimeValue, MESSAGE, Pa) \u21d2"),(0,l.kt)("p",null,"Perform server side of the one-pass version of the M-Pin protocol"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN192"},(0,l.kt)("code",null,"MPIN192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN192{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null}),(0,l.kt)("th",{parentName:"tr",align:null}))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sha"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type"),(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},"date"),(0,l.kt)("td",{parentName:"tr",align:null},"is input date, in days since the epoch. Set to 0 if Time permits disabled"),(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},"HID"),(0,l.kt)("td",{parentName:"tr",align:null},"is output H(ID), a hash of the client ID"),(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},"HTID"),(0,l.kt)("td",{parentName:"tr",align:null},"is output H(ID)+H(d"),(0,l.kt)("td",{parentName:"tr",align:null},"H(ID))"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Y"),(0,l.kt)("td",{parentName:"tr",align:null},"is output H(t"),(0,l.kt)("td",{parentName:"tr",align:null},"U) or H(t"),(0,l.kt)("td",{parentName:"tr",align:null},"UT) if Time Permits enabled")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SST"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input server secret"),(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},"xID"),(0,l.kt)("td",{parentName:"tr",align:null},"is input from the client = x.H(ID)"),(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},"xCID"),(0,l.kt)("td",{parentName:"tr",align:null},"is input from the client= x.(H(ID)+H(d"),(0,l.kt)("td",{parentName:"tr",align:null},"H(ID)))"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"mSEC"),(0,l.kt)("td",{parentName:"tr",align:null},"is an input from the client"),(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},"E"),(0,l.kt)("td",{parentName:"tr",align:null},"is an output to help the Kangaroos to find the PIN error, or NULL if not required"),(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},"F"),(0,l.kt)("td",{parentName:"tr",align:null},"is an output to help the Kangaroos to find the PIN error, or NULL if not required"),(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},"CID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input claimed client identity"),(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},"TimeValue"),(0,l.kt)("td",{parentName:"tr",align:null},"is input epoch time in seconds - a timestamp"),(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},"MESSAGE"),(0,l.kt)("td",{parentName:"tr",align:null},"is the message to be signed"),(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},"Pa"),(0,l.kt)("td",{parentName:"tr",align:null},"is input from the client z.Q or NULL if the key-escrow less scheme is not used"),(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null})))),(0,l.kt)("a",{name:"MPIN192.PRECOMPUTE"}),(0,l.kt)("h3",{id:"mpin192precomputetoken-cid-g1-g2-"},"MPIN192.PRECOMPUTE(TOKEN, CID, G1, G2) \u21d2"),(0,l.kt)("p",null,"Precompute values for use by the client side of M-Pin Full"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN192"},(0,l.kt)("code",null,"MPIN192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN192{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"TOKEN"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input M-Pin token (the client secret with PIN portion removed)")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"CID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input client identity")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"G1"),(0,l.kt)("td",{parentName:"tr",align:null},"precomputed output")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"G2"),(0,l.kt)("td",{parentName:"tr",align:null},"precomputed output")))),(0,l.kt)("a",{name:"MPIN192.HASH_ALL"}),(0,l.kt)("h3",{id:"mpin192hash_allsha-hid-xid-xcid-sec-y-r-w-"},"MPIN192.HASH_ALL(sha, HID, xID, xCID, SEC, Y, R, W) \u21d2"),(0,l.kt)("p",null,"Hash the session transcript"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN192"},(0,l.kt)("code",null,"MPIN192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": H the output is the hash of all of the above that apply",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN192{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null}))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sha"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"HID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hashed input client ID = H(ID)"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the client output = x.H(ID)"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xCID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the client output = x.(H(ID)+H(T"),(0,l.kt)("td",{parentName:"tr",align:null},"H(ID)))")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SEC"),(0,l.kt)("td",{parentName:"tr",align:null},"is the client part response"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Y"),(0,l.kt)("td",{parentName:"tr",align:null},"is the server challenge"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"R"),(0,l.kt)("td",{parentName:"tr",align:null},"is the client part response"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"W"),(0,l.kt)("td",{parentName:"tr",align:null},"is the server part response"),(0,l.kt)("td",{parentName:"tr",align:null})))),(0,l.kt)("a",{name:"MPIN192.CLIENT_KEY"}),(0,l.kt)("h3",{id:"mpin192client_keysha-g1-g2-pin-r-x-h-wcid-ck-"},"MPIN192.CLIENT_KEY(sha, G1, G2, pin, R, X, H, wCID, CK) \u21d2"),(0,l.kt)("p",null,"Calculate Key on Client side for M-Pin Full"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN192"},(0,l.kt)("code",null,"MPIN192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": 0 or an error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN192{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sha"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"G1"),(0,l.kt)("td",{parentName:"tr",align:null},"precomputed input")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"G2"),(0,l.kt)("td",{parentName:"tr",align:null},"precomputed input")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"pin"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input PIN number")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"R"),(0,l.kt)("td",{parentName:"tr",align:null},"is an input, a locally generated random number")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"X"),(0,l.kt)("td",{parentName:"tr",align:null},"is an input, a locally generated random number")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"H"),(0,l.kt)("td",{parentName:"tr",align:null},"is an input, hash of the protocol transcript")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"wCID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input Server-side Diffie-Hellman component")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"CK"),(0,l.kt)("td",{parentName:"tr",align:null},"is the output calculated shared key")))),(0,l.kt)("a",{name:"MPIN192.SERVER_KEY"}),(0,l.kt)("h3",{id:"mpin192server_keyh-z-sst-w-h-hid-xid-xcid-sk-"},"MPIN192.SERVER_KEY(h, Z, SST, W, H, HID, xID, xCID, SK) \u21d2"),(0,l.kt)("p",null,"Calculate Key on Server side for M-Pin Full"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN192"},(0,l.kt)("code",null,"MPIN192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": 0 or an error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN192{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null}))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"h"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Z"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input Client-side Diffie-Hellman component"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SST"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input server secret"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"W"),(0,l.kt)("td",{parentName:"tr",align:null},"is an input random number generated by the server"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"H"),(0,l.kt)("td",{parentName:"tr",align:null},"is an input, hash of the protocol transcript"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"HID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hashed input client ID = H(ID)"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xID"),(0,l.kt)("td",{parentName:"tr",align:null},"is input from the client = x.H(ID)"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xCID"),(0,l.kt)("td",{parentName:"tr",align:null},"is input from the client= x.(H(ID)+H(d"),(0,l.kt)("td",{parentName:"tr",align:null},"H(ID)))")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SK"),(0,l.kt)("td",{parentName:"tr",align:null},"is the output calculated shared key"),(0,l.kt)("td",{parentName:"tr",align:null})))),(0,l.kt)("a",{name:"MPIN192.GET_DVS_KEYPAIR"}),(0,l.kt)("h3",{id:"mpin192get_dvs_keypairrng-z-pa-"},"MPIN192.GET_DVS_KEYPAIR(rng, Z, Pa) \u21d2"),(0,l.kt)("p",null,"Generates a random public key for the client z.Q"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN192"},(0,l.kt)("code",null,"MPIN192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": 0 or an error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN192{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"rng"),(0,l.kt)("td",{parentName:"tr",align:null},"cryptographically secure random number generator")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Z"),(0,l.kt)("td",{parentName:"tr",align:null},"an output internally randomly generated if R!=NULL, otherwise it must be provided as an input")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Pa"),(0,l.kt)("td",{parentName:"tr",align:null},"the output public key for the client")))))}o.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/76b9cd24.60662dea.js b/assets/js/76b9cd24.60662dea.js
new file mode 100644
index 0000000..8047ee3
--- /dev/null
+++ b/assets/js/76b9cd24.60662dea.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9784],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>f});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 o(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 p(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){n(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 i(e,t){if(null==e)return{};var r,a,n=function(e,t){if(null==e)return{};var r,a,n={},o=Object.keys(e);for(a=0;a<o.length;a++)r=o[a],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var c=a.createContext({}),l=function(e){var t=a.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):p(p({},t),e)),r},s=function(e){var t=l(e.components);return a.createElement(c.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,o=e.originalType,c=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),u=l(r),d=n,f=u["".concat(c,".").concat(d)]||u[d]||m[d]||o;return r?a.createElement(f,p(p({ref:t},s),{},{components:r})):a.createElement(f,p({ref:t},s))}));function f(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=r.length,p=new Array(o);p[0]=d;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i[u]="string"==typeof e?e:n,p[1]=i;for(var l=2;l<o;l++)p[l]=r[l];return a.createElement.apply(null,p)}return a.createElement.apply(null,r)}d.displayName="MDXCreateElement"},1065:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>c,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>u});var a=r(7462),n=r(3366),o=(r(7294),r(3905)),p=["components"],i={id:"amcl-javascript-api",title:"AMCL JavaScript API",sidebar_label:"AMCL JavaScript API"},c=void 0,l={unversionedId:"amcl-javascript-api",id:"amcl-javascript-api",title:"AMCL JavaScript API",description:"MCJS - Milagro Crypto JavaScript",source:"@site/../docs/amcl-javascript-api.md",sourceDirName:".",slug:"/amcl-javascript-api",permalink:"/docs/amcl-javascript-api",draft:!1,tags:[],version:"current",frontMatter:{id:"amcl-javascript-api",title:"AMCL JavaScript API",sidebar_label:"AMCL JavaScript API"}},s={},u=[],m={toc:u};function d(e){var t=e.components,r=(0,n.Z)(e,p);return(0,o.kt)("wrapper",(0,a.Z)({},m,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,(0,o.kt)("em",{parentName:"p"},"MCJS - Milagro Crypto JavaScript")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"MCJS is a standards compliant JavaScript cryptographic library with no\nexternal dependencies except for the random seed source.")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"MCJS supports the standards for RSA, ECDH, ECIES, ECDSA and M-PIN, AES-GCM\nencryption/decryption, SHA256, SHA384, SHA512 and SHA3 hash functions and a\ncryptographically secure random number generator. Furthermore we recently\nadded New Hope, a post-quantum key exchange.")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"MCJS is ",(0,o.kt)("a",{parentName:"p",href:"https://nodejs.org/en/"},"Node.js")," compatible and browser compatible\n(see some examples by going to the next page)."))))}d.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/7e37206e.593907d1.js b/assets/js/7e37206e.593907d1.js
new file mode 100644
index 0000000..6b8e6c7
--- /dev/null
+++ b/assets/js/7e37206e.593907d1.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2740],{5401:(e,t,n)=>{n.r(t),n.d(t,{default:()=>i});var r=n(3285),a=n(7294),o=function(e){return a.createElement("div",e)},l=function(e){return a.createElement("div",e)};function c(e){var t=e.config,n=e.language,r=void 0===n?"":n,c=t.baseUrl,i=t.docsUrl,u=i?i+"/":"",m=r?r+"/":"",s=function(e){return""+c+u+m+e},d=[{content:"Learn more about Milagro. [Read the docs.]("+s("milagro-intro.html")+")",title:"Milagro Overview"},{content:"Join us. [Become a contributor.]("+s("contributor-guide.html")+")",title:"Like cutting-edge crypto?"},{content:"We blog. [No, really.]("+s("../blog/")+")",title:"Need Status?"}];return a.createElement("div",{className:"docMainWrapper wrapper"},a.createElement(o,{className:"mainContainer documentContainer postContainer"},a.createElement("div",{className:"post"},a.createElement("header",{className:"postHeader"},a.createElement("h1",null,"Get involved.")),a.createElement("p",null,"Send an email to ",a.createElement("a",{href:"mailto:dev-subscribe@milagro.apache.org?Subject=Subscribe",target:"_top"},"dev-subscribe @ milagro.apache.org")," to join our mailing list."),a.createElement(l,{contents:d,layout:"threeColumn"}))))}const i=function(e){return a.createElement(r.Z,null,a.createElement(c,e))}}}]);
\ No newline at end of file
diff --git a/assets/js/8218.ebcaf7ac.js b/assets/js/8218.ebcaf7ac.js
new file mode 100644
index 0000000..47172c8
--- /dev/null
+++ b/assets/js/8218.ebcaf7ac.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8218],{9058:(e,t,a)=>{a.d(t,{Z:()=>_});var r=a(3366),l=a(7294),n=a(6010),o=a(3285),i=a(7524),s=a(9960),m=a(5999);const c="sidebar_re4s",u="sidebarItemTitle_pO2u",d="sidebarItemList_Yudw",g="sidebarItem__DBe",p="sidebarItemLink_mo7H",v="sidebarItemLinkActive_I1ZP";function f(e){var t=e.sidebar;return l.createElement("aside",{className:"col col--3"},l.createElement("nav",{className:(0,n.Z)(c,"thin-scrollbar"),"aria-label":(0,m.I)({id:"theme.blog.sidebar.navAriaLabel",message:"Blog recent posts navigation",description:"The ARIA label for recent posts in the blog sidebar"})},l.createElement("div",{className:(0,n.Z)(u,"margin-bottom--md")},t.title),l.createElement("ul",{className:(0,n.Z)(d,"clean-list")},t.items.map((function(e){return l.createElement("li",{key:e.permalink,className:g},l.createElement(s.Z,{isNavLink:!0,to:e.permalink,className:p,activeClassName:v},e.title))})))))}var h=a(3102);function E(e){var t=e.sidebar;return l.createElement("ul",{className:"menu__list"},t.items.map((function(e){return l.createElement("li",{key:e.permalink,className:"menu__list-item"},l.createElement(s.Z,{isNavLink:!0,to:e.permalink,className:"menu__link",activeClassName:"menu__link--active"},e.title))})))}function b(e){return l.createElement(h.Zo,{component:E,props:e})}function P(e){var t=e.sidebar,a=(0,i.i)();return null!=t&&t.items.length?"mobile"===a?l.createElement(b,{sidebar:t}):l.createElement(f,{sidebar:t}):null}var N=["sidebar","toc","children"];function _(e){var t=e.sidebar,a=e.toc,i=e.children,s=(0,r.Z)(e,N),m=t&&t.items.length>0;return l.createElement(o.Z,s,l.createElement("div",{className:"container margin-vert--lg"},l.createElement("div",{className:"row"},l.createElement(P,{sidebar:t}),l.createElement("main",{className:(0,n.Z)("col",{"col--7":m,"col--9 col--offset-1":!m}),itemScope:!0,itemType:"http://schema.org/Blog"},i),a&&l.createElement("div",{className:"col col--2"},a))))}},756:(e,t,a)=>{a.d(t,{Z:()=>j});var r=a(7294),l=a(6010),n=a(9460),o=a(4996);function i(e){var t,a=e.children,l=e.className,i=(0,n.C)(),s=i.frontMatter,m=i.assets,c=(0,o.C)().withBaseUrl,u=null!=(t=m.image)?t:s.image;return r.createElement("article",{className:l,itemProp:"blogPost",itemScope:!0,itemType:"http://schema.org/BlogPosting"},u&&r.createElement("meta",{itemProp:"image",content:c(u,{absolute:!0})}),a)}var s=a(9960);const m="title_f1Hy";function c(e){var t=e.className,a=(0,n.C)(),o=a.metadata,i=a.isBlogPostPage,c=o.permalink,u=o.title,d=i?"h1":"h2";return r.createElement(d,{className:(0,l.Z)(m,t),itemProp:"headline"},i?u:r.createElement(s.Z,{itemProp:"url",to:c},u))}var u=a(5999),d=a(2263),g=["zero","one","two","few","many","other"];function p(e){return g.filter((function(t){return e.includes(t)}))}var v={locale:"en",pluralForms:p(["one","other"]),select:function(e){return 1===e?"one":"other"}};function f(){var e=(0,d.Z)().i18n.currentLocale;return(0,r.useMemo)((function(){try{return t=e,a=new Intl.PluralRules(t),{locale:t,pluralForms:p(a.resolvedOptions().pluralCategories),select:function(e){return a.select(e)}}}catch(r){return console.error('Failed to use Intl.PluralRules for locale "'+e+'".\nDocusaurus will fallback to the default (English) implementation.\nError: '+r.message+"\n"),v}var t,a}),[e])}function h(){var e=f();return{selectMessage:function(t,a){return function(e,t,a){var r=e.split("|");if(1===r.length)return r[0];r.length>a.pluralForms.length&&console.error("For locale="+a.locale+", a maximum of "+a.pluralForms.length+" plural forms are expected ("+a.pluralForms.join(",")+"), but the message contains "+r.length+": "+e);var l=a.select(t),n=a.pluralForms.indexOf(l);return r[Math.min(n,r.length-1)]}(a,t,e)}}}const E="container_mt6G";function b(e){var t,a=e.readingTime,l=(t=h().selectMessage,function(e){var a=Math.ceil(e);return t(a,(0,u.I)({id:"theme.blog.post.readingTime.plurals",description:'Pluralized label for "{readingTime} min read". 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 min read|{readingTime} min read"},{readingTime:a}))});return r.createElement(r.Fragment,null,l(a))}function P(e){var t=e.date,a=e.formattedDate;return r.createElement("time",{dateTime:t,itemProp:"datePublished"},a)}function N(){return r.createElement(r.Fragment,null," \xb7 ")}function _(e){var t=e.className,a=(0,n.C)().metadata,o=a.date,i=a.formattedDate,s=a.readingTime;return r.createElement("div",{className:(0,l.Z)(E,"margin-vert--md",t)},r.createElement(P,{date:o,formattedDate:i}),void 0!==s&&r.createElement(r.Fragment,null,r.createElement(N,null),r.createElement(b,{readingTime:s})))}function Z(e){return e.href?r.createElement(s.Z,e):r.createElement(r.Fragment,null,e.children)}function k(e){var t=e.author,a=e.className,n=t.name,o=t.title,i=t.url,s=t.imageURL,m=t.email,c=i||m&&"mailto:"+m||void 0;return r.createElement("div",{className:(0,l.Z)("avatar margin-bottom--sm",a)},s&&r.createElement(Z,{href:c,className:"avatar__photo-link"},r.createElement("img",{className:"avatar__photo",src:s,alt:n})),n&&r.createElement("div",{className:"avatar__intro",itemProp:"author",itemScope:!0,itemType:"https://schema.org/Person"},r.createElement("div",{className:"avatar__name"},r.createElement(Z,{href:c,itemProp:"url"},r.createElement("span",{itemProp:"name"},n))),o&&r.createElement("small",{className:"avatar__subtitle",itemProp:"description"},o)))}const C="authorCol_Hf19",T="imageOnlyAuthorRow_pa_O",w="imageOnlyAuthorCol_G86a";function y(e){var t=e.className,a=(0,n.C)(),o=a.metadata.authors,i=a.assets;if(0===o.length)return null;var s=o.every((function(e){return!e.name}));return r.createElement("div",{className:(0,l.Z)("margin-top--md margin-bottom--sm",s?T:"row",t)},o.map((function(e,t){var a;return r.createElement("div",{className:(0,l.Z)(!s&&"col col--6",s?w:C),key:t},r.createElement(k,{author:Object.assign({},e,{imageURL:null!=(a=i.authorsImageUrls[t])?a:e.imageURL})}))})))}function B(){return r.createElement("header",null,r.createElement(c,null),r.createElement(_,null),r.createElement(y,null))}var I=a(8780),F=a(9334);function M(e){var t=e.children,a=e.className,o=(0,n.C)().isBlogPostPage;return r.createElement("div",{id:o?I.blogPostContainerID:void 0,className:(0,l.Z)("markdown",a),itemProp:"articleBody"},r.createElement(F.Z,null,t))}var L=a(4881),R=a(6233),x=a(7462),A=a(3366),O=["blogPostTitle"];function U(){return r.createElement("b",null,r.createElement(u.Z,{id:"theme.blog.post.readMore",description:"The label used in blog post item excerpts to link to full blog posts"},"Read More"))}function D(e){var t=e.blogPostTitle,a=(0,A.Z)(e,O);return r.createElement(s.Z,(0,x.Z)({"aria-label":(0,u.I)({message:"Read more about {title}",id:"theme.blog.post.readMoreLabel",description:"The ARIA label for the link to full blog posts from excerpts"},{title:t})},a),r.createElement(U,null))}const H="blogPostFooterDetailsFull_mRVl";function S(){var e=(0,n.C)(),t=e.metadata,a=e.isBlogPostPage,o=t.tags,i=t.title,s=t.editUrl,m=t.hasTruncateMarker,c=!a&&m,u=o.length>0;return u||c||s?r.createElement("footer",{className:(0,l.Z)("row docusaurus-mt-lg",a&&H)},u&&r.createElement("div",{className:(0,l.Z)("col",{"col--9":c})},r.createElement(R.Z,{tags:o})),a&&s&&r.createElement("div",{className:"col margin-top--sm"},r.createElement(L.Z,{editUrl:s})),c&&r.createElement("div",{className:(0,l.Z)("col text--right",{"col--3":u})},r.createElement(D,{blogPostTitle:i,to:t.permalink}))):null}function j(e){var t=e.children,a=e.className,o=(0,n.C)().isBlogPostPage?void 0:"margin-bottom--xl";return r.createElement(i,{className:(0,l.Z)(o,a)},r.createElement(B,null),r.createElement(M,null,t),r.createElement(S,null))}},9460:(e,t,a)=>{a.d(t,{C:()=>i,n:()=>o});var r=a(7294),l=a(9688),n=r.createContext(null);function o(e){var t=e.children,a=e.content,l=e.isBlogPostPage,o=function(e){var t=e.content,a=e.isBlogPostPage;return(0,r.useMemo)((function(){return{metadata:t.metadata,frontMatter:t.frontMatter,assets:t.assets,toc:t.toc,isBlogPostPage:a}}),[t,a])}({content:a,isBlogPostPage:void 0!==l&&l});return r.createElement(n.Provider,{value:o},t)}function i(){var e=(0,r.useContext)(n);if(null===e)throw new l.i6("BlogPostProvider");return e}}}]);
\ No newline at end of file
diff --git a/assets/js/83ec89a5.564fe5ef.js b/assets/js/83ec89a5.564fe5ef.js
new file mode 100644
index 0000000..6395ebb
--- /dev/null
+++ b/assets/js/83ec89a5.564fe5ef.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8421],{3905:(t,e,a)=>{a.d(e,{Zo:()=>o,kt:()=>d});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 p(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 m(t){for(var e=1;e<arguments.length;e++){var a=null!=arguments[e]?arguments[e]:{};e%2?p(Object(a),!0).forEach((function(e){r(t,e,a[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(a)):p(Object(a)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(a,e))}))}return t}function l(t,e){if(null==t)return{};var a,n,r=function(t,e){if(null==t)return{};var a,n,r={},p=Object.keys(t);for(n=0;n<p.length;n++)a=p[n],e.indexOf(a)>=0||(r[a]=t[a]);return r}(t,e);if(Object.getOwnPropertySymbols){var p=Object.getOwnPropertySymbols(t);for(n=0;n<p.length;n++)a=p[n],e.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(r[a]=t[a])}return r}var i=n.createContext({}),k=function(t){var e=n.useContext(i),a=e;return t&&(a="function"==typeof t?t(e):m(m({},e),t)),a},o=function(t){var e=k(t.components);return n.createElement(i.Provider,{value:e},t.children)},s="mdxType",u={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},b=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,p=t.originalType,i=t.parentName,o=l(t,["components","mdxType","originalType","parentName"]),s=k(a),b=r,d=s["".concat(i,".").concat(b)]||s[b]||u[b]||p;return a?n.createElement(d,m(m({ref:e},o),{},{components:a})):n.createElement(d,m({ref:e},o))}));function d(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var p=a.length,m=new Array(p);m[0]=b;var l={};for(var i in e)hasOwnProperty.call(e,i)&&(l[i]=e[i]);l.originalType=t,l[s]="string"==typeof t?t:r,m[1]=l;for(var k=2;k<p;k++)m[k]=a[k];return n.createElement.apply(null,m)}return n.createElement.apply(null,a)}b.displayName="MDXCreateElement"},6269:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>o,contentTitle:()=>i,default:()=>b,frontMatter:()=>l,metadata:()=>k,toc:()=>s});var n=a(7462),r=a(3366),p=(a(7294),a(3905)),m=["components"],l={id:"big",title:"BIG",sidebar_label:"BIG"},i=void 0,k={unversionedId:"cryptojs/big",id:"cryptojs/big",title:"BIG",description:"BIG",source:"@site/../docs/cryptojs/big.md",sourceDirName:"cryptojs",slug:"/cryptojs/big",permalink:"/docs/cryptojs/big",draft:!1,tags:[],version:"current",frontMatter:{id:"big",title:"BIG",sidebar_label:"BIG"},sidebar:"docs",previous:{title:"AES",permalink:"/docs/cryptojs/aes"},next:{title:"BLS",permalink:"/docs/cryptojs/bls"}},o={},s=[{value:"BIG",id:"big",level:2},{value:"new BIG()",id:"new-big",level:3},{value:"biG.zero() \u21d2",id:"bigzero-",level:3},{value:"biG.one() \u21d2",id:"bigone-",level:3},{value:"biG.iszilch() \u21d2",id:"bigiszilch-",level:3},{value:"biG.isunity() \u21d2",id:"bigisunity-",level:3},{value:"biG.cswap()",id:"bigcswap",level:3},{value:"biG.cmove()",id:"bigcmove",level:3},{value:"biG.copy() \u21d2",id:"bigcopy-",level:3},{value:"biG.hcopy() \u21d2",id:"bighcopy-",level:3},{value:"biG.rcopy() \u21d2",id:"bigrcopy-",level:3},{value:"biG.norm() \u21d2",id:"bignorm-",level:3},{value:"biG.fshr() \u21d2",id:"bigfshr-",level:3},{value:"biG.shr() \u21d2",id:"bigshr-",level:3},{value:"biG.fshl() \u21d2",id:"bigfshl-",level:3},{value:"biG.shl() \u21d2",id:"bigshl-",level:3},{value:"biG.nbits() \u21d2",id:"bignbits-",level:3},{value:"biG.toString() \u21d2",id:"bigtostring-",level:3},{value:"biG.add() \u21d2",id:"bigadd-",level:3},{value:"biG.or() \u21d2",id:"bigor-",level:3},{value:"biG.plus() \u21d2",id:"bigplus-",level:3},{value:"biG.inc() \u21d2",id:"biginc-",level:3},{value:"biG.sub() \u21d2",id:"bigsub-",level:3},{value:"biG.rsub() \u21d2",id:"bigrsub-",level:3},{value:"biG.dec() \u21d2",id:"bigdec-",level:3},{value:"biG.minus() \u21d2",id:"bigminus-",level:3},{value:"biG.imul() \u21d2",id:"bigimul-",level:3},{value:"biG.tobytearray()",id:"bigtobytearray",level:3},{value:"biG.toBytes()",id:"bigtobytes",level:3},{value:"biG.muladd()",id:"bigmuladd",level:3},{value:"biG.pmul() \u21d2",id:"bigpmul-",level:3},{value:"biG.pxmul() \u21d2",id:"bigpxmul-",level:3},{value:"biG.div3() \u21d2",id:"bigdiv3-",level:3},{value:"biG.mod2m() \u21d2",id:"bigmod2m-",level:3},{value:"biG.invmod2m() \u21d2",id:"biginvmod2m-",level:3},{value:"biG.mod() \u21d2",id:"bigmod-",level:3},{value:"biG.div() \u21d2",id:"bigdiv-",level:3},{value:"biG.parity() \u21d2",id:"bigparity-",level:3},{value:"biG.bit() \u21d2",id:"bigbit-",level:3},{value:"biG.lastbits() \u21d2",id:"biglastbits-",level:3},{value:"biG.jacobi() \u21d2",id:"bigjacobi-",level:3},{value:"biG.invmodp() \u21d2",id:"biginvmodp-",level:3},{value:"biG.powmod() \u21d2",id:"bigpowmod-",level:3},{value:"BIG.frombytearray() \u21d2",id:"bigfrombytearray-",level:3},{value:"BIG.smul() \u21d2",id:"bigsmul-",level:3},{value:"BIG.comp() \u21d2",id:"bigcomp-",level:3},{value:"BIG.random() \u21d2",id:"bigrandom-",level:3},{value:"BIG.randomnum() \u21d2",id:"bigrandomnum-",level:3},{value:"BIG.mul() \u21d2",id:"bigmul-",level:3},{value:"BIG.sqr() \u21d2",id:"bigsqr-",level:3},{value:"BIG.modmul() \u21d2",id:"bigmodmul-",level:3},{value:"BIG.modsqr() \u21d2",id:"bigmodsqr-",level:3},{value:"BIG.modneg() \u21d2",id:"bigmodneg-",level:3},{value:"BIG.invmod256() \u21d2",id:"biginvmod256-",level:3}],u={toc:s};function b(t){var e=t.components,a=(0,r.Z)(t,m);return(0,p.kt)("wrapper",(0,n.Z)({},u,a,{components:e,mdxType:"MDXLayout"}),(0,p.kt)("a",{name:"BIG"}),(0,p.kt)("h2",{id:"big"},"BIG"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": global class",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),"  "),(0,p.kt)("ul",null,(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG"},"BIG"),(0,p.kt)("ul",{parentName:"li"},(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#new_BIG_new"},"new BIG()")),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("em",{parentName:"li"},"instance"),(0,p.kt)("ul",{parentName:"li"},(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG+zero"},".zero()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG+one"},".one()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG+iszilch"},".iszilch()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG+isunity"},".isunity()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG+cswap"},".cswap()")),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG+cmove"},".cmove()")),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG+copy"},".copy()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG+hcopy"},".hcopy()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG+rcopy"},".rcopy()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG+norm"},".norm()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG+fshr"},".fshr()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG+shr"},".shr()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG+fshl"},".fshl()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG+shl"},".shl()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG+nbits"},".nbits()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG+toString"},".toString()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG+add"},".add()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG+or"},".or()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG+plus"},".plus()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG+inc"},".inc()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG+sub"},".sub()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG+rsub"},".rsub()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG+dec"},".dec()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG+minus"},".minus()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG+imul"},".imul()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG+tobytearray"},".tobytearray()")),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG+toBytes"},".toBytes()")),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG+muladd"},".muladd()")),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG+pmul"},".pmul()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG+pxmul"},".pxmul()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG+div3"},".div3()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG+mod2m"},".mod2m()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG+invmod2m"},".invmod2m()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG+mod"},".mod()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG+div"},".div()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG+parity"},".parity()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG+bit"},".bit()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG+lastbits"},".lastbits()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG+jacobi"},".jacobi()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG+invmodp"},".invmodp()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG+powmod"},".powmod()")," \u21d2"))),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("em",{parentName:"li"},"static"),(0,p.kt)("ul",{parentName:"li"},(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG.frombytearray"},".frombytearray()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG.smul"},".smul()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG.comp"},".comp()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG.random"},".random()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG.randomnum"},".randomnum()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG.mul"},".mul()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG.sqr"},".sqr()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG.modmul"},".modmul()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG.modsqr"},".modsqr()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG.modneg"},".modneg()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BIG.invmod256"},".invmod256()")," \u21d2")))))),(0,p.kt)("a",{name:"new_BIG_new"}),(0,p.kt)("h3",{id:"new-big"},"new BIG()"),(0,p.kt)("p",null,"General purpose Constructor"),(0,p.kt)("a",{name:"BIG+zero"}),(0,p.kt)("h3",{id:"bigzero-"},"biG.zero() \u21d2"),(0,p.kt)("p",null,"set to zero"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": BIG number",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),"  "),(0,p.kt)("a",{name:"BIG+one"}),(0,p.kt)("h3",{id:"bigone-"},"biG.one() \u21d2"),(0,p.kt)("p",null,"set to one"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": BIG number",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),"  "),(0,p.kt)("a",{name:"BIG+iszilch"}),(0,p.kt)("h3",{id:"bigiszilch-"},"biG.iszilch() \u21d2"),(0,p.kt)("p",null,"test for zero"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": True if zero",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),"  "),(0,p.kt)("a",{name:"BIG+isunity"}),(0,p.kt)("h3",{id:"bigisunity-"},"biG.isunity() \u21d2"),(0,p.kt)("p",null,"test for unity"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": True if one",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),"  "),(0,p.kt)("a",{name:"BIG+cswap"}),(0,p.kt)("h3",{id:"bigcswap"},"biG.cswap()"),(0,p.kt)("p",null,"Conditional swap of two BIGs depending on d using XOR - no branches"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": b BIG number",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": d BIG number  "),(0,p.kt)("a",{name:"BIG+cmove"}),(0,p.kt)("h3",{id:"bigcmove"},"biG.cmove()"),(0,p.kt)("p",null,"Conditional move of BIG depending on d using XOR - no branches"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": b BIG number",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": d BIG number  "),(0,p.kt)("a",{name:"BIG+copy"}),(0,p.kt)("h3",{id:"bigcopy-"},"biG.copy() \u21d2"),(0,p.kt)("p",null,"Copy from another BIG"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": The BIG object",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": y BIG number  "),(0,p.kt)("a",{name:"BIG+hcopy"}),(0,p.kt)("h3",{id:"bighcopy-"},"biG.hcopy() \u21d2"),(0,p.kt)("p",null,"copy from bottom half of ctx.DBIG"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": The new BIG object",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": y BIG number  "),(0,p.kt)("a",{name:"BIG+rcopy"}),(0,p.kt)("h3",{id:"bigrcopy-"},"biG.rcopy() \u21d2"),(0,p.kt)("p",null,"copy from ROM"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": The BIG object",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": y BIG number in ROM  "),(0,p.kt)("a",{name:"BIG+norm"}),(0,p.kt)("h3",{id:"bignorm-"},"biG.norm() \u21d2"),(0,p.kt)("p",null,"normalise BIG - force all digits ","<"," 2^BASEBITS"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": BIG number",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),"  "),(0,p.kt)("a",{name:"BIG+fshr"}),(0,p.kt)("h3",{id:"bigfshr-"},"biG.fshr() \u21d2"),(0,p.kt)("p",null,"Quick Fast shifts a BIG right by a small number of bits - input must be normalised, output will be normalised"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": r The shifted out part",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": k Number of bits to shift  "),(0,p.kt)("a",{name:"BIG+shr"}),(0,p.kt)("h3",{id:"bigshr-"},"biG.shr() \u21d2"),(0,p.kt)("p",null,"General shift right by k bits"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": BIG number",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": k Number of bits to shift  "),(0,p.kt)("a",{name:"BIG+fshl"}),(0,p.kt)("h3",{id:"bigfshl-"},"biG.fshl() \u21d2"),(0,p.kt)("p",null,"Fast shifts a BIG left by a small number of bits - input must be normalised, output will be normalised"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": r The shifted out part",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": k Number of bits to shift  "),(0,p.kt)("a",{name:"BIG+shl"}),(0,p.kt)("h3",{id:"bigshl-"},"biG.shl() \u21d2"),(0,p.kt)("p",null,"General shift left by k bits"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": BIG number",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": k Number of bits to shift  "),(0,p.kt)("a",{name:"BIG+nbits"}),(0,p.kt)("h3",{id:"bignbits-"},"biG.nbits() \u21d2"),(0,p.kt)("p",null,"length in bits"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": The number of bigs in BIG object",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),"  "),(0,p.kt)("a",{name:"BIG+toString"}),(0,p.kt)("h3",{id:"bigtostring-"},"biG.toString() \u21d2"),(0,p.kt)("p",null,"Convert to string"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": string representation of a BIG number",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),"  "),(0,p.kt)("a",{name:"BIG+add"}),(0,p.kt)("h3",{id:"bigadd-"},"biG.add() \u21d2"),(0,p.kt)("p",null,"Sum two BIG mumbers"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": this+=y",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": y BIG object  "),(0,p.kt)("a",{name:"BIG+or"}),(0,p.kt)("h3",{id:"bigor-"},"biG.or() \u21d2"),(0,p.kt)("p",null,"OR two BIG mumbers"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": this|=y",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": y BIG object  "),(0,p.kt)("a",{name:"BIG+plus"}),(0,p.kt)("h3",{id:"bigplus-"},"biG.plus() \u21d2"),(0,p.kt)("p",null,"Sum two BIG mumbers"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": this+x",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": x BIG object  "),(0,p.kt)("a",{name:"BIG+inc"}),(0,p.kt)("h3",{id:"biginc-"},"biG.inc() \u21d2"),(0,p.kt)("p",null,"Sum BIG and integer"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": this+=i",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": i Integer to add  "),(0,p.kt)("a",{name:"BIG+sub"}),(0,p.kt)("h3",{id:"bigsub-"},"biG.sub() \u21d2"),(0,p.kt)("p",null,"Subtract BIG from one another"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": this-=y",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": y BIG object  "),(0,p.kt)("a",{name:"BIG+rsub"}),(0,p.kt)("h3",{id:"bigrsub-"},"biG.rsub() \u21d2"),(0,p.kt)("p",null,"Reverse subtract BIG from one another"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": this=x-this",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": x BIG object  "),(0,p.kt)("a",{name:"BIG+dec"}),(0,p.kt)("h3",{id:"bigdec-"},"biG.dec() \u21d2"),(0,p.kt)("p",null,"Subtract integer from BIG"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": this-=i",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": i Integer to subtract  "),(0,p.kt)("a",{name:"BIG+minus"}),(0,p.kt)("h3",{id:"bigminus-"},"biG.minus() \u21d2"),(0,p.kt)("p",null,"Subtract BIG"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": New BIG object",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": x BIG object  "),(0,p.kt)("a",{name:"BIG+imul"}),(0,p.kt)("h3",{id:"bigimul-"},"biG.imul() \u21d2"),(0,p.kt)("p",null,"Multiply by small integer"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": this","*","c",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": c small integer  "),(0,p.kt)("a",{name:"BIG+tobytearray"}),(0,p.kt)("h3",{id:"bigtobytearray"},"biG.tobytearray()"),(0,p.kt)("p",null,"convert this BIG to byte array"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),"  "),(0,p.kt)("a",{name:"BIG+toBytes"}),(0,p.kt)("h3",{id:"bigtobytes"},"biG.toBytes()"),(0,p.kt)("p",null,"convert this to byte array"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),"  "),(0,p.kt)("a",{name:"BIG+muladd"}),(0,p.kt)("h3",{id:"bigmuladd"},"biG.muladd()"),(0,p.kt)("p",null,"this","[i]","+=x","*","y+c, and return high part"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),"  "),(0,p.kt)("a",{name:"BIG+pmul"}),(0,p.kt)("h3",{id:"bigpmul-"},"biG.pmul() \u21d2"),(0,p.kt)("p",null,"multiply by larger int"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": carry value",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": c large integer  "),(0,p.kt)("a",{name:"BIG+pxmul"}),(0,p.kt)("h3",{id:"bigpxmul-"},"biG.pxmul() \u21d2"),(0,p.kt)("p",null,"multiply by still larger int - results requires a DBIG"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": DBIG object",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": c large integer  "),(0,p.kt)("a",{name:"BIG+div3"}),(0,p.kt)("h3",{id:"bigdiv3-"},"biG.div3() \u21d2"),(0,p.kt)("p",null,"divide by 3"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": carry value",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),"  "),(0,p.kt)("a",{name:"BIG+mod2m"}),(0,p.kt)("h3",{id:"bigmod2m-"},"biG.mod2m() \u21d2"),(0,p.kt)("p",null,"set x = x mod 2^m"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": BIG object",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": m Exponent  "),(0,p.kt)("a",{name:"BIG+invmod2m"}),(0,p.kt)("h3",{id:"biginvmod2m-"},"biG.invmod2m() \u21d2"),(0,p.kt)("p",null,"a=1/a mod 2^256. This is very fast!"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": BIG object",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),"  "),(0,p.kt)("a",{name:"BIG+mod"}),(0,p.kt)("h3",{id:"bigmod-"},"biG.mod() \u21d2"),(0,p.kt)("p",null,"reduce this mod m"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": BIG object",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),"  "),(0,p.kt)("a",{name:"BIG+div"}),(0,p.kt)("h3",{id:"bigdiv-"},"biG.div() \u21d2"),(0,p.kt)("p",null,"this/=m1"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": BIG number",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Paramter"),": m1 divisor  "),(0,p.kt)("a",{name:"BIG+parity"}),(0,p.kt)("h3",{id:"bigparity-"},"biG.parity() \u21d2"),(0,p.kt)("p",null,"return parity of this"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": BIG object",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),"  "),(0,p.kt)("a",{name:"BIG+bit"}),(0,p.kt)("h3",{id:"bigbit-"},"biG.bit() \u21d2"),(0,p.kt)("p",null,"return n-th bit of this"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": bit value",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": nth bit to return  "),(0,p.kt)("a",{name:"BIG+lastbits"}),(0,p.kt)("h3",{id:"biglastbits-"},"biG.lastbits() \u21d2"),(0,p.kt)("p",null,"return last n bits of this"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": bit values",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": n bits to return  "),(0,p.kt)("a",{name:"BIG+jacobi"}),(0,p.kt)("h3",{id:"bigjacobi-"},"biG.jacobi() \u21d2"),(0,p.kt)("p",null,"Jacobi Symbol (this/p)"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": 0, 1 or -1",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": p BIG number  "),(0,p.kt)("a",{name:"BIG+invmodp"}),(0,p.kt)("h3",{id:"biginvmodp-"},"biG.invmodp() \u21d2"),(0,p.kt)("p",null,"this=1/this mod p. Binary method"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": BIG object",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": p The BIG Modulus  "),(0,p.kt)("a",{name:"BIG+powmod"}),(0,p.kt)("h3",{id:"bigpowmod-"},"biG.powmod() \u21d2"),(0,p.kt)("p",null,"Exponentation modulo m"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": this^e mod m",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": e1 BIG number",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": m  The BIG Modulus  "),(0,p.kt)("a",{name:"BIG.frombytearray"}),(0,p.kt)("h3",{id:"bigfrombytearray-"},"BIG.frombytearray() \u21d2"),(0,p.kt)("p",null,"convert from byte array to BIG"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": BIG object",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": b Bytearray  "),(0,p.kt)("a",{name:"BIG.smul"}),(0,p.kt)("h3",{id:"bigsmul-"},"BIG.smul() \u21d2"),(0,p.kt)("p",null,"return a","*","b where product fits a BIG"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": a","*","b",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": a BIG number",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": b BIG number  "),(0,p.kt)("a",{name:"BIG.comp"}),(0,p.kt)("h3",{id:"bigcomp-"},"BIG.comp() \u21d2"),(0,p.kt)("p",null,"Compare a and b"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": 0 if a==b, -1 if a","<","b, +1 if a",">","b",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": a BIG number (normalised)",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": b BIG number (normalised  "),(0,p.kt)("a",{name:"BIG.random"}),(0,p.kt)("h3",{id:"bigrandom-"},"BIG.random() \u21d2"),(0,p.kt)("p",null,"Get 8","*","MODBYTES size random number"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": BIG number",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": rng Cryptographically Secure Random Number Generator  "),(0,p.kt)("a",{name:"BIG.randomnum"}),(0,p.kt)("h3",{id:"bigrandomnum-"},"BIG.randomnum() \u21d2"),(0,p.kt)("p",null,"Create random BIG in portable way, one bit at a time"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": BIG number",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": rng Cryptographically Secure Random Number Generator",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": q The BIG Modulus  "),(0,p.kt)("a",{name:"BIG.mul"}),(0,p.kt)("h3",{id:"bigmul-"},"BIG.mul() \u21d2"),(0,p.kt)("p",null,"Multiple two BIG numbers"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": a","*","b as a DBIG number",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": a BIG number",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": b BIG number  "),(0,p.kt)("a",{name:"BIG.sqr"}),(0,p.kt)("h3",{id:"bigsqr-"},"BIG.sqr() \u21d2"),(0,p.kt)("p",null,"Square two BIG numbers"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": a","*","2 as a DBIG number",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": a BIG number  "),(0,p.kt)("a",{name:"BIG.modmul"}),(0,p.kt)("h3",{id:"bigmodmul-"},"BIG.modmul() \u21d2"),(0,p.kt)("p",null,"Multiple two BIG numbers modulo m"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": a1","*","b1 mod m  as a BIG number",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": a1 BIG number",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": b1 BIG number",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": m The BIG Modulus  "),(0,p.kt)("a",{name:"BIG.modsqr"}),(0,p.kt)("h3",{id:"bigmodsqr-"},"BIG.modsqr() \u21d2"),(0,p.kt)("p",null,"Square a BIG number modulo m"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": a","*","2 mod m  as a BIG number",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": a1 BIG number",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": m The BIG Modulus  "),(0,p.kt)("a",{name:"BIG.modneg"}),(0,p.kt)("h3",{id:"bigmodneg-"},"BIG.modneg() \u21d2"),(0,p.kt)("p",null,"Inversion"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": -a1 mod m",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": a1 BIG number",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": m The BIG Modulus  "),(0,p.kt)("a",{name:"BIG.invmod256"}),(0,p.kt)("h3",{id:"biginvmod256-"},"BIG.invmod256() \u21d2"),(0,p.kt)("p",null,"Arazi and Qi inversion mod 256"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#BIG"},(0,p.kt)("code",null,"BIG")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": BIG number",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BIG{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": a BIG number"))}b.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/899bffd7.7761a6d6.js b/assets/js/899bffd7.7761a6d6.js
new file mode 100644
index 0000000..7c2d539
--- /dev/null
+++ b/assets/js/899bffd7.7761a6d6.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4356],{3905:(t,e,a)=>{a.d(e,{Zo:()=>s,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 p(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 i(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 k=n.createContext({}),m=function(t){var e=n.useContext(k),a=e;return t&&(a="function"==typeof t?t(e):p(p({},e),t)),a},s=function(t){var e=m(t.components);return n.createElement(k.Provider,{value:e},t.children)},o="mdxType",u={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},d=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,l=t.originalType,k=t.parentName,s=i(t,["components","mdxType","originalType","parentName"]),o=m(a),d=r,N=o["".concat(k,".").concat(d)]||o[d]||u[d]||l;return a?n.createElement(N,p(p({ref:e},s),{},{components:a})):n.createElement(N,p({ref:e},s))}));function N(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=a.length,p=new Array(l);p[0]=d;var i={};for(var k in e)hasOwnProperty.call(e,k)&&(i[k]=e[k]);i.originalType=t,i[o]="string"==typeof t?t:r,p[1]=i;for(var m=2;m<l;m++)p[m]=a[m];return n.createElement.apply(null,p)}return n.createElement.apply(null,a)}d.displayName="MDXCreateElement"},6059:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>s,contentTitle:()=>k,default:()=>d,frontMatter:()=>i,metadata:()=>m,toc:()=>o});var n=a(7462),r=a(3366),l=(a(7294),a(3905)),p=["components"],i={id:"rsa",title:"RSA",sidebar_label:"RSA"},k=void 0,m={unversionedId:"cryptojs/rsa",id:"cryptojs/rsa",title:"RSA",description:"Classes",source:"@site/../docs/cryptojs/rsa.md",sourceDirName:"cryptojs",slug:"/cryptojs/rsa",permalink:"/docs/cryptojs/rsa",draft:!1,tags:[],version:"current",frontMatter:{id:"rsa",title:"RSA",sidebar_label:"RSA"},sidebar:"docs",previous:{title:"RAND",permalink:"/docs/cryptojs/rand"},next:{title:"SHA3",permalink:"/docs/cryptojs/sha3"}},s={},o=[{value:"Classes",id:"classes",level:2},{value:"RSA",id:"rsa",level:2},{value:"new RSA()",id:"new-rsa",level:3},{value:"RSA.bytestohex(b) \u21d2",id:"rsabytestohexb-",level:3},{value:"RSA.bytestostring(b) \u21d2",id:"rsabytestostringb-",level:3},{value:"RSA.stringtobytes(s) \u21d2",id:"rsastringtobytess-",level:3},{value:"RSA.hashit(sha, A, n) \u21d2",id:"rsahashitsha-a-n-",level:3},{value:"RSA.KEY_PAIR(rng, e, PRIV, PUB)",id:"rsakey_pairrng-e-priv-pub",level:3},{value:"RSA.PKCS15(rng, e, PRIV, PUB) \u21d2",id:"rsapkcs15rng-e-priv-pub-",level:3},{value:"RSA.OAEP_ENCODE(sha, m, rng, P) \u21d2",id:"rsaoaep_encodesha-m-rng-p-",level:3},{value:"RSA.OAEP_DECODE(sha, P, f) \u21d2",id:"rsaoaep_decodesha-p-f-",level:3},{value:"RSA.PRIVATE_KEY_KILL(PRIV)",id:"rsaprivate_key_killpriv",level:3},{value:"RSA.ENCRYPT(PUB, F, G)",id:"rsaencryptpub-f-g",level:3},{value:"RSA.DECRYPT(PRIV, G, F)",id:"rsadecryptpriv-g-f",level:3},{value:"rsa_private_key",id:"rsa_private_key",level:2},{value:"new rsa_private_key(n)",id:"new-rsa_private_keyn",level:3},{value:"rsa_public_key",id:"rsa_public_key",level:2},{value:"new rsa_public_key(m)",id:"new-rsa_public_keym",level:3}],u={toc:o};function d(t){var e=t.components,a=(0,r.Z)(t,p);return(0,l.kt)("wrapper",(0,n.Z)({},u,a,{components:e,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"classes"},"Classes"),(0,l.kt)("dl",null,(0,l.kt)("dt",null,(0,l.kt)("a",{href:"#RSA"},"RSA")),(0,l.kt)("dd",null),(0,l.kt)("dt",null,(0,l.kt)("a",{href:"#rsa_private_key"},"rsa_private_key")),(0,l.kt)("dd",null),(0,l.kt)("dt",null,(0,l.kt)("a",{href:"#rsa_public_key"},"rsa_public_key")),(0,l.kt)("dd",null)),(0,l.kt)("a",{name:"RSA"}),(0,l.kt)("h2",{id:"rsa"},"RSA"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": global class",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}RSA{"}"}'),"  "),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#RSA"},"RSA"),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#new_RSA_new"},"new RSA()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#RSA.bytestohex"},".bytestohex(b)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#RSA.bytestostring"},".bytestostring(b)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#RSA.stringtobytes"},".stringtobytes(s)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#RSA.hashit"},".hashit(sha, A, n)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#RSA.KEY_PAIR"},".KEY_PAIR(rng, e, PRIV, PUB)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#RSA.PKCS15"},".PKCS15(rng, e, PRIV, PUB)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#RSA.OAEP_ENCODE"},".OAEP_ENCODE(sha, m, rng, P)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#RSA.OAEP_DECODE"},".OAEP_DECODE(sha, P, f)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#RSA.PRIVATE_KEY_KILL"},".PRIVATE_KEY_KILL(PRIV)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#RSA.ENCRYPT"},".ENCRYPT(PUB, F, G)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#RSA.DECRYPT"},".DECRYPT(PRIV, G, F)"))))),(0,l.kt)("a",{name:"new_RSA_new"}),(0,l.kt)("h3",{id:"new-rsa"},"new RSA()"),(0,l.kt)("p",null,"Creates an instance of RSA"),(0,l.kt)("a",{name:"RSA.bytestohex"}),(0,l.kt)("h3",{id:"rsabytestohexb-"},"RSA.bytestohex(b) \u21d2"),(0,l.kt)("p",null,"Convert byte array to hex string"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#RSA"},(0,l.kt)("code",null,"RSA")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": s hex string",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}RSA{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"b"),(0,l.kt)("td",{parentName:"tr",align:null},"byte array")))),(0,l.kt)("a",{name:"RSA.bytestostring"}),(0,l.kt)("h3",{id:"rsabytestostringb-"},"RSA.bytestostring(b) \u21d2"),(0,l.kt)("p",null,"Convert byte array to string"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#RSA"},(0,l.kt)("code",null,"RSA")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": s string",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}RSA{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"b"),(0,l.kt)("td",{parentName:"tr",align:null},"byte array")))),(0,l.kt)("a",{name:"RSA.stringtobytes"}),(0,l.kt)("h3",{id:"rsastringtobytess-"},"RSA.stringtobytes(s) \u21d2"),(0,l.kt)("p",null,"Convert a string to byte array"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#RSA"},(0,l.kt)("code",null,"RSA")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": b byte array",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}RSA{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"s"),(0,l.kt)("td",{parentName:"tr",align:null},"string")))),(0,l.kt)("a",{name:"RSA.hashit"}),(0,l.kt)("h3",{id:"rsahashitsha-a-n-"},"RSA.hashit(sha, A, n) \u21d2"),(0,l.kt)("p",null,"General purpose hash function"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#RSA"},(0,l.kt)("code",null,"RSA")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": R hash value",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}RSA{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sha"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"A"),(0,l.kt)("td",{parentName:"tr",align:null},"byte array")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"n"),(0,l.kt)("td",{parentName:"tr",align:null},"Integer")))),(0,l.kt)("a",{name:"RSA.KEY_PAIR"}),(0,l.kt)("h3",{id:"rsakey_pairrng-e-priv-pub"},"RSA.KEY_PAIR(rng, e, PRIV, PUB)"),(0,l.kt)("p",null,"RSA Key Pair Generator"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#RSA"},(0,l.kt)("code",null,"RSA")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}RSA{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"rng"),(0,l.kt)("td",{parentName:"tr",align:null},"is a pointer to a cryptographically secure random number generator")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"e"),(0,l.kt)("td",{parentName:"tr",align:null},"the encryption exponent")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"PRIV"),(0,l.kt)("td",{parentName:"tr",align:null},"the output RSA private key")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"PUB"),(0,l.kt)("td",{parentName:"tr",align:null},"the output RSA public key")))),(0,l.kt)("a",{name:"RSA.PKCS15"}),(0,l.kt)("h3",{id:"rsapkcs15rng-e-priv-pub-"},"RSA.PKCS15(rng, e, PRIV, PUB) \u21d2"),(0,l.kt)("p",null,"PKCS V1.5 padding of a message prior to RSA signature"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#RSA"},(0,l.kt)("code",null,"RSA")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": true or false",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}RSA{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"rng"),(0,l.kt)("td",{parentName:"tr",align:null},"is a pointer to a cryptographically secure random number generator")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"e"),(0,l.kt)("td",{parentName:"tr",align:null},"the encryption exponent")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"PRIV"),(0,l.kt)("td",{parentName:"tr",align:null},"the output RSA private key")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"PUB"),(0,l.kt)("td",{parentName:"tr",align:null},"the output RSA public key")))),(0,l.kt)("a",{name:"RSA.OAEP_ENCODE"}),(0,l.kt)("h3",{id:"rsaoaep_encodesha-m-rng-p-"},"RSA.OAEP_ENCODE(sha, m, rng, P) \u21d2"),(0,l.kt)("p",null,"OAEP padding of a message prior to RSA encryption"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#RSA"},(0,l.kt)("code",null,"RSA")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": f is the output encoding, ready for RSA encryption",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}RSA{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sha"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"m"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input message")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"rng"),(0,l.kt)("td",{parentName:"tr",align:null},"is a pointer to a cryptographically secure random number generator")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"P"),(0,l.kt)("td",{parentName:"tr",align:null},"are input encoding parameter string (could be NULL)")))),(0,l.kt)("a",{name:"RSA.OAEP_DECODE"}),(0,l.kt)("h3",{id:"rsaoaep_decodesha-p-f-"},"RSA.OAEP_DECODE(sha, P, f) \u21d2"),(0,l.kt)("p",null,"OAEP unpadding of a message after RSA decryption"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#RSA"},(0,l.kt)("code",null,"RSA")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": r is the unpadded message",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}RSA{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sha"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"P"),(0,l.kt)("td",{parentName:"tr",align:null},"are input encoding parameter string (could be NULL)")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"f"),(0,l.kt)("td",{parentName:"tr",align:null},"is the padded message")))),(0,l.kt)("a",{name:"RSA.PRIVATE_KEY_KILL"}),(0,l.kt)("h3",{id:"rsaprivate_key_killpriv"},"RSA.PRIVATE_KEY_KILL(PRIV)"),(0,l.kt)("p",null,"Destroy an RSA private Key"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#RSA"},(0,l.kt)("code",null,"RSA")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}RSA{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"PRIV"),(0,l.kt)("td",{parentName:"tr",align:null},"the input RSA private key. Destroyed on output.")))),(0,l.kt)("a",{name:"RSA.ENCRYPT"}),(0,l.kt)("h3",{id:"rsaencryptpub-f-g"},"RSA.ENCRYPT(PUB, F, G)"),(0,l.kt)("p",null,"RSA encryption of suitably padded plaintext"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#RSA"},(0,l.kt)("code",null,"RSA")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}RSA{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"PUB"),(0,l.kt)("td",{parentName:"tr",align:null},"the input RSA public key")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"F"),(0,l.kt)("td",{parentName:"tr",align:null},"is input padded message")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"G"),(0,l.kt)("td",{parentName:"tr",align:null},"is the output ciphertext")))),(0,l.kt)("a",{name:"RSA.DECRYPT"}),(0,l.kt)("h3",{id:"rsadecryptpriv-g-f"},"RSA.DECRYPT(PRIV, G, F)"),(0,l.kt)("p",null,"RSA decryption of ciphertext"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#RSA"},(0,l.kt)("code",null,"RSA")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}RSA{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"PRIV"),(0,l.kt)("td",{parentName:"tr",align:null},"the input RSA private key")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"G"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input ciphertext")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"F"),(0,l.kt)("td",{parentName:"tr",align:null},"is output plaintext (requires unpadding)")))),(0,l.kt)("a",{name:"rsa_private_key"}),(0,l.kt)("h2",{id:"rsa_private_key"},"rsa_private_key"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": global class",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}rsa_private_key{"}"}'),"  "),(0,l.kt)("a",{name:"new_rsa_private_key_new"}),(0,l.kt)("h3",{id:"new-rsa_private_keyn"},"new rsa_private_key(n)"),(0,l.kt)("p",null,"Creates an instance of rsa_private_key"),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"n"),(0,l.kt)("td",{parentName:"tr",align:null},"FF length")))),(0,l.kt)("a",{name:"rsa_public_key"}),(0,l.kt)("h2",{id:"rsa_public_key"},"rsa_public_key"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": global class",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}rsa_private_key{"}"}'),"  "),(0,l.kt)("a",{name:"new_rsa_public_key_new"}),(0,l.kt)("h3",{id:"new-rsa_public_keym"},"new rsa_public_key(m)"),(0,l.kt)("p",null,"Creates an instance of rsa_public_key"),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"m"),(0,l.kt)("td",{parentName:"tr",align:null},"FF length")))))}d.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/8cfa73c0.e67b6530.js b/assets/js/8cfa73c0.e67b6530.js
new file mode 100644
index 0000000..9c33fa6
--- /dev/null
+++ b/assets/js/8cfa73c0.e67b6530.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2144],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>d});var n=r(7294);function o(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 n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(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){o(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 p(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},i=Object.keys(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),l=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(c.Provider,{value:t},e.children)},f="mdxType",s={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,o=e.mdxType,i=e.originalType,c=e.parentName,u=p(e,["components","mdxType","originalType","parentName"]),f=l(r),m=o,d=f["".concat(c,".").concat(m)]||f[m]||s[m]||i;return r?n.createElement(d,a(a({ref:t},u),{},{components:r})):n.createElement(d,a({ref:t},u))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,a=new Array(i);a[0]=m;var p={};for(var c in t)hasOwnProperty.call(t,c)&&(p[c]=t[c]);p.originalType=e,p[f]="string"==typeof e?e:o,a[1]=p;for(var l=2;l<i;l++)a[l]=r[l];return n.createElement.apply(null,a)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},845:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>c,default:()=>m,frontMatter:()=>p,metadata:()=>l,toc:()=>f});var n=r(7462),o=r(3366),i=(r(7294),r(3905)),a=["components"],p={id:"zkp-mfa-api",title:"Zero Knowledge Proof MFA API",sidebar_label:"ZKP-MFA API"},c=void 0,l={unversionedId:"zkp-mfa-api",id:"zkp-mfa-api",title:"Zero Knowledge Proof MFA API",description:"Interested in becoming a contributor? Milagro is looking for you.",source:"@site/../docs/zkp-mfa-api.md",sourceDirName:".",slug:"/zkp-mfa-api",permalink:"/docs/zkp-mfa-api",draft:!1,tags:[],version:"current",frontMatter:{id:"zkp-mfa-api",title:"Zero Knowledge Proof MFA API",sidebar_label:"ZKP-MFA API"},sidebar:"docs",previous:{title:"ZKP-MFA Overview",permalink:"/docs/zkp-mfa-overview"},next:{title:"Contributor's Guide",permalink:"/docs/contributor-guide"}},u={},f=[],s={toc:f};function m(e){var t=e.components,r=(0,o.Z)(e,a);return(0,i.kt)("wrapper",(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("admonition",{title:"WE NEED HELP DOCUMENTING!",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"Interested in becoming a contributor? Milagro is looking for you.\n",(0,i.kt)("a",{parentName:"p",href:"/docs/contributor-guide"},"CONTRIBUTOR'S GUIDE"),".")),(0,i.kt)("p",null,"Supported admonition types are: caution, note, important, tip, warning."))}m.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/8d622fb0.c7a2e8dc.js b/assets/js/8d622fb0.c7a2e8dc.js
new file mode 100644
index 0000000..bc918eb
--- /dev/null
+++ b/assets/js/8d622fb0.c7a2e8dc.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3678],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>m});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 i(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?i(Object(r),!0).forEach((function(t){a(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,n,a=function(e,t){if(null==e)return{};var r,n,a={},i=Object.keys(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var l=n.createContext({}),c=function(e){var t=n.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 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)}},f=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),d=c(r),f=a,m=d["".concat(l,".").concat(f)]||d[f]||u[f]||i;return r?n.createElement(m,o(o({ref:t},p),{},{components:r})):n.createElement(m,o({ref:t},p))}));function m(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=r.length,o=new Array(i);o[0]=f;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[d]="string"==typeof e?e:a,o[1]=s;for(var c=2;c<i;c++)o[c]=r[c];return n.createElement.apply(null,o)}return n.createElement.apply(null,r)}f.displayName="MDXCreateElement"},6232:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>f,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var n=r(7462),a=r(3366),i=(r(7294),r(3905)),o=["components"],s={id:"ipfs",title:"IPFS",sidebar_label:"IPFS"},l=void 0,c={unversionedId:"dta-details/ipfs",id:"dta-details/ipfs",title:"IPFS",description:"The Milagro D-TA aims to provide an auditable record of all interactions between actors in the system. It is vital that all the actors in the system can refer to an agreed record of these transactions in case of dispute or in response to requests from third parties such as law enforcement, audit or compliance organizations.  The Milagro D-TA creates immutable, secure and attributable records of every interaction that occurs in the lifecycle of entities and their dealings with secrets. We do this using the Inter Planetary File System - IPFS.",source:"@site/../docs/dta-details/ipfs.md",sourceDirName:"dta-details",slug:"/dta-details/ipfs",permalink:"/docs/dta-details/ipfs",draft:!1,tags:[],version:"current",frontMatter:{id:"ipfs",title:"IPFS",sidebar_label:"IPFS"},sidebar:"docs",previous:{title:"Encrypted Envelope",permalink:"/docs/dta-details/encrypted-envelope"},next:{title:"Plugins Overview",permalink:"/docs/dta-details/plugins-overview"}},p={},d=[],u={toc:d};function f(e){var t=e.components,r=(0,a.Z)(e,o);return(0,i.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"The Milagro D-TA aims to provide an auditable record of all interactions between actors in the system. It is vital that all the actors in the system can refer to an agreed record of these transactions in case of dispute or in response to requests from third parties such as law enforcement, audit or compliance organizations.  The Milagro D-TA creates immutable, secure and attributable records of every interaction that occurs in the lifecycle of entities and their dealings with secrets. We do this using the Inter Planetary File System - ",(0,i.kt)("a",{parentName:"p",href:"https://ipfs.io/"},"IPFS"),"."),(0,i.kt)("p",null,"IPFS is a globally distributed peer-to-peer file system - think GitHub meets BitTorrent. When a file is written (SET) into your local IPFS node a hash of the document is returned, you can then GET the document using that address. If somebody else who is running an IPFS tries to GET the same hash address the file will be pulled from your node to theirs. If the document is changed in way the hash will change. In this way, an immutability and peer-to-peer consensus is achieved."),(0,i.kt)("admonition",{title:"We appreciate feedback regarding this approach.",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"For more complex consensus requirements, the Milagro D-TA will be implementing ",(0,i.kt)("a",{parentName:"p",href:"https://tendermint.com/"},"Tendermint")," in following releases.")))}f.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/8d8b4e4d.5b6f1186.js b/assets/js/8d8b4e4d.5b6f1186.js
new file mode 100644
index 0000000..5013475
--- /dev/null
+++ b/assets/js/8d8b4e4d.5b6f1186.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[626],{3905:(e,t,n)=>{n.d(t,{Zo:()=>m,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 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 p(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 d=a.createContext({}),o=function(e){var t=a.useContext(d),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},m=function(e){var t=o(e.components);return a.createElement(d.Provider,{value:t},e.children)},c="mdxType",k={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,l=e.originalType,d=e.parentName,m=p(e,["components","mdxType","originalType","parentName"]),c=o(n),u=r,h=c["".concat(d,".").concat(u)]||c[u]||k[u]||l;return n?a.createElement(h,i(i({ref:t},m),{},{components:n})):a.createElement(h,i({ref:t},m))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,i=new Array(l);i[0]=u;var p={};for(var d in t)hasOwnProperty.call(t,d)&&(p[d]=t[d]);p.originalType=e,p[c]="string"==typeof e?e:r,i[1]=p;for(var o=2;o<l;o++)i[o]=n[o];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}u.displayName="MDXCreateElement"},1056:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>m,contentTitle:()=>d,default:()=>u,frontMatter:()=>p,metadata:()=>o,toc:()=>c});var a=n(7462),r=n(3366),l=(n(7294),n(3905)),i=["components"],p={id:"gcm",title:"GCM",sidebar_label:"GCM"},d=void 0,o={unversionedId:"cryptojs/gcm",id:"cryptojs/gcm",title:"GCM",description:"GCM",source:"@site/../docs/cryptojs/gcm.md",sourceDirName:"cryptojs",slug:"/cryptojs/gcm",permalink:"/docs/cryptojs/gcm",draft:!1,tags:[],version:"current",frontMatter:{id:"gcm",title:"GCM",sidebar_label:"GCM"},sidebar:"docs",previous:{title:"FP48",permalink:"/docs/cryptojs/fp48"},next:{title:"HASH256",permalink:"/docs/cryptojs/hash256"}},m={},c=[{value:"GCM",id:"gcm",level:2},{value:"new GCM()",id:"new-gcm",level:3},{value:"gcM.init(nk, key, niv, iv)",id:"gcminitnk-key-niv-iv",level:3},{value:"gcM.add_header(header, len)",id:"gcmadd_headerheader-len",level:3},{value:"gcM.add_plain(plain, len) \u21d2",id:"gcmadd_plainplain-len-",level:3},{value:"gcM.add_cipher(cipher, len) \u21d2",id:"gcmadd_ciphercipher-len-",level:3}],k={toc:c};function u(e){var t=e.components,n=(0,r.Z)(e,i);return(0,l.kt)("wrapper",(0,a.Z)({},k,n,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("a",{name:"GCM"}),(0,l.kt)("h2",{id:"gcm"},"GCM"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": global class",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}GCM{"}"}'),"  "),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#GCM"},"GCM"),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#new_GCM_new"},"new GCM()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#GCM+init"},".init(nk, key, niv, iv)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#GCM+add_header"},".add_header(header, len)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#GCM+add_plain"},".add_plain(plain, len)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#GCM+add_cipher"},".add_cipher(cipher, len)")," \u21d2")))),(0,l.kt)("a",{name:"new_GCM_new"}),(0,l.kt)("h3",{id:"new-gcm"},"new GCM()"),(0,l.kt)("p",null,"Creates an instance of GCM"),(0,l.kt)("a",{name:"GCM+init"}),(0,l.kt)("h3",{id:"gcminitnk-key-niv-iv"},"gcM.init(nk, key, niv, iv)"),(0,l.kt)("p",null,"Initialize GCM mode"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#GCM"},(0,l.kt)("code",null,"GCM")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}GCM{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"nk"),(0,l.kt)("td",{parentName:"tr",align:null},"is the key length in bytes, 16, 24 or 32")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"key"),(0,l.kt)("td",{parentName:"tr",align:null},"the AES key as an array of 16 bytes")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"niv"),(0,l.kt)("td",{parentName:"tr",align:null},"the number of bytes in the Initialisation Vector (IV)")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"iv"),(0,l.kt)("td",{parentName:"tr",align:null},"the IV")))),(0,l.kt)("a",{name:"GCM+add_header"}),(0,l.kt)("h3",{id:"gcmadd_headerheader-len"},"gcM.add_header(header, len)"),(0,l.kt)("p",null,"Add header (material to be authenticated but not encrypted)"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#GCM"},(0,l.kt)("code",null,"GCM")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}GCM{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"header"),(0,l.kt)("td",{parentName:"tr",align:null},"is the header material to be added")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"len"),(0,l.kt)("td",{parentName:"tr",align:null},"the number of bytes in the header")))),(0,l.kt)("a",{name:"GCM+add_plain"}),(0,l.kt)("h3",{id:"gcmadd_plainplain-len-"},"gcM.add_plain(plain, len) \u21d2"),(0,l.kt)("p",null,"Add plaintext and extract ciphertext"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#GCM"},(0,l.kt)("code",null,"GCM")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": cipher is the ciphertext generated",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}GCM{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"plain"),(0,l.kt)("td",{parentName:"tr",align:null},"is the plaintext material to be added")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"len"),(0,l.kt)("td",{parentName:"tr",align:null},"the number of bytes in the plaintext")))),(0,l.kt)("a",{name:"GCM+add_cipher"}),(0,l.kt)("h3",{id:"gcmadd_ciphercipher-len-"},"gcM.add_cipher(cipher, len) \u21d2"),(0,l.kt)("p",null,"Add Ciphertext - decrypts to plaintext"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#GCM"},(0,l.kt)("code",null,"GCM")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": plain is the plaintext material generated",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}GCM{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"cipher"),(0,l.kt)("td",{parentName:"tr",align:null},"is the ciphertext to be added")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"len"),(0,l.kt)("td",{parentName:"tr",align:null},"the number of bytes in the plaintext")))))}u.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/928c7886.838c054a.js b/assets/js/928c7886.838c054a.js
new file mode 100644
index 0000000..9c015c2
--- /dev/null
+++ b/assets/js/928c7886.838c054a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9009],{3905:(e,t,r)=>{r.d(t,{Zo:()=>m,kt:()=>b});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 p(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 l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?p(Object(r),!0).forEach((function(t){n(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):p(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={},p=Object.keys(e);for(a=0;a<p.length;a++)r=p[a],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var p=Object.getOwnPropertySymbols(e);for(a=0;a<p.length;a++)r=p[a],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var o=a.createContext({}),i=function(e){var t=a.useContext(o),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},m=function(e){var t=i(e.components);return a.createElement(o.Provider,{value:t},e.children)},k="mdxType",u={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,p=e.originalType,o=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),k=i(r),d=n,b=k["".concat(o,".").concat(d)]||k[d]||u[d]||p;return r?a.createElement(b,l(l({ref:t},m),{},{components:r})):a.createElement(b,l({ref:t},m))}));function b(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var p=r.length,l=new Array(p);l[0]=d;var s={};for(var o in t)hasOwnProperty.call(t,o)&&(s[o]=t[o]);s.originalType=e,s[k]="string"==typeof e?e:n,l[1]=s;for(var i=2;i<p;i++)l[i]=r[i];return a.createElement.apply(null,l)}return a.createElement.apply(null,r)}d.displayName="MDXCreateElement"},3122:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>m,contentTitle:()=>o,default:()=>d,frontMatter:()=>s,metadata:()=>i,toc:()=>k});var a=r(7462),n=r(3366),p=(r(7294),r(3905)),l=["components"],s={id:"bls256",title:"BLS256",sidebar_label:"BLS256"},o=void 0,i={unversionedId:"cryptojs/bls256",id:"cryptojs/bls256",title:"BLS256",description:"BLS256",source:"@site/../docs/cryptojs/bls256.md",sourceDirName:"cryptojs",slug:"/cryptojs/bls256",permalink:"/docs/cryptojs/bls256",draft:!1,tags:[],version:"current",frontMatter:{id:"bls256",title:"BLS256",sidebar_label:"BLS256"},sidebar:"docs",previous:{title:"BLS192",permalink:"/docs/cryptojs/bls192"},next:{title:"DBIG",permalink:"/docs/cryptojs/dbig"}},m={},k=[{value:"BLS256",id:"bls256",level:2},{value:"new BLS256()",id:"new-bls256",level:3},{value:"BLS256.bytestostring() \u21d2",id:"bls256bytestostring-",level:3},{value:"BLS256.stringtobytes() \u21d2",id:"bls256stringtobytes-",level:3},{value:"BLS256.bls_hashit() \u21d2",id:"bls256bls_hashit-",level:3},{value:"BLS256.KeyPairGenerate() \u21d2",id:"bls256keypairgenerate-",level:3},{value:"BLS256.sign() \u21d2",id:"bls256sign-",level:3},{value:"BLS256.verify() \u21d2",id:"bls256verify-",level:3},{value:"BLS256.add_G1() \u21d2",id:"bls256add_g1-",level:3},{value:"BLS256.add_G2() \u21d2",id:"bls256add_g2-",level:3}],u={toc:k};function d(e){var t=e.components,r=(0,n.Z)(e,l);return(0,p.kt)("wrapper",(0,a.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,p.kt)("a",{name:"BLS256"}),(0,p.kt)("h2",{id:"bls256"},"BLS256"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": global class",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BLS256{"}"}'),"  "),(0,p.kt)("ul",null,(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BLS256"},"BLS256"),(0,p.kt)("ul",{parentName:"li"},(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#new_BLS256_new"},"new BLS256()")),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BLS256.bytestostring"},".bytestostring()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BLS256.stringtobytes"},".stringtobytes()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BLS256.bls_hashit"},".bls_hashit()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BLS256.KeyPairGenerate"},".KeyPairGenerate()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BLS256.sign"},".sign()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BLS256.verify"},".verify()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BLS256.add_G1"},".add_G1()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#BLS256.add_G2"},".add_G2()")," \u21d2")))),(0,p.kt)("a",{name:"new_BLS256_new"}),(0,p.kt)("h3",{id:"new-bls256"},"new BLS256()"),(0,p.kt)("p",null,"Creates an instance of BLS256"),(0,p.kt)("a",{name:"BLS256.bytestostring"}),(0,p.kt)("h3",{id:"bls256bytestostring-"},"BLS256.bytestostring() \u21d2"),(0,p.kt)("p",null,"Convert byte array to string"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#BLS256"},(0,p.kt)("code",null,"BLS256")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": string",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BLS192{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": b byte array  "),(0,p.kt)("a",{name:"BLS256.stringtobytes"}),(0,p.kt)("h3",{id:"bls256stringtobytes-"},"BLS256.stringtobytes() \u21d2"),(0,p.kt)("p",null,"Convert string to byte array"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#BLS256"},(0,p.kt)("code",null,"BLS256")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": byte array",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BLS192{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": s string  "),(0,p.kt)("a",{name:"BLS256.bls_hashit"}),(0,p.kt)("h3",{id:"bls256bls_hashit-"},"BLS256.bls_hashit() \u21d2"),(0,p.kt)("p",null,"hash a message to an ECP point, using SHA3"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#BLS256"},(0,p.kt)("code",null,"BLS256")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": ECP point",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BLS192{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": m message to be hashedstring  "),(0,p.kt)("a",{name:"BLS256.KeyPairGenerate"}),(0,p.kt)("h3",{id:"bls256keypairgenerate-"},"BLS256.KeyPairGenerate() \u21d2"),(0,p.kt)("p",null,"Generate key pair"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#BLS256"},(0,p.kt)("code",null,"BLS256")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": Error code",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BLS192{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": rng Cryptographically Secure Random Number Generator",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": S Private key",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": W Public key  "),(0,p.kt)("a",{name:"BLS256.sign"}),(0,p.kt)("h3",{id:"bls256sign-"},"BLS256.sign() \u21d2"),(0,p.kt)("p",null,"Sign message"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#BLS256"},(0,p.kt)("code",null,"BLS256")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": Error code",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BLS192{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": SIG Singature",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": m Message to sign",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": S Private key  "),(0,p.kt)("a",{name:"BLS256.verify"}),(0,p.kt)("h3",{id:"bls256verify-"},"BLS256.verify() \u21d2"),(0,p.kt)("p",null,"Verify message"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#BLS256"},(0,p.kt)("code",null,"BLS256")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": Error code",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BLS192{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": SIG Signature",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": m Message to sign",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": W Public key  "),(0,p.kt)("a",{name:"BLS256.add_G1"}),(0,p.kt)("h3",{id:"bls256add_g1-"},"BLS256.add_G1() \u21d2"),(0,p.kt)("p",null,"R=R1+R2 in group G1"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#BLS256"},(0,p.kt)("code",null,"BLS256")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": Error code",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BLS192{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": R1 G1 Point",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": R2 G1 Point",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": R G1 Point  "),(0,p.kt)("a",{name:"BLS256.add_G2"}),(0,p.kt)("h3",{id:"bls256add_g2-"},"BLS256.add_G2() \u21d2"),(0,p.kt)("p",null,"W=W1+W2 in group G2"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#BLS256"},(0,p.kt)("code",null,"BLS256")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": Error code",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}BLS192{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": W1 G2 Point",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": W2 G2 Point",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": R G2 Point"))}d.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/935f2afb.d4022c38.js b/assets/js/935f2afb.d4022c38.js
new file mode 100644
index 0000000..1cce701
--- /dev/null
+++ b/assets/js/935f2afb.d4022c38.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).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":"category","label":"About Milagro","items":[{"type":"link","label":"Milagro Introduction","href":"/docs/milagro-intro","docId":"milagro-intro"},{"type":"link","label":"Milagro Crypto","href":"/docs/milagro-crypto","docId":"milagro-crypto"},{"type":"link","label":"Milagro Protocols","href":"/docs/milagro-protocols","docId":"milagro-protocols"},{"type":"link","label":"Milagro Design","href":"/docs/milagro-design","docId":"milagro-design"}],"collapsed":true,"collapsible":true},{"type":"category","label":"AMCL Library","items":[{"type":"link","label":"AMCL Overview","href":"/docs/amcl-overview","docId":"amcl-overview"},{"type":"link","label":"AMCL C API 2.0.0","href":"/docs/amcl-c-api-2.0.0","docId":"amcl-c-api-2.0.0"},{"type":"category","label":"AMCL JavaScript API 1.0.0","items":[{"type":"link","label":"AMCL JavaScript API","href":"/docs/cryptojs/amcl-javascript-api","docId":"cryptojs/amcl-javascript-api"},{"type":"link","label":"AES","href":"/docs/cryptojs/aes","docId":"cryptojs/aes"},{"type":"link","label":"BIG","href":"/docs/cryptojs/big","docId":"cryptojs/big"},{"type":"link","label":"BLS","href":"/docs/cryptojs/bls","docId":"cryptojs/bls"},{"type":"link","label":"BLS192","href":"/docs/cryptojs/bls192","docId":"cryptojs/bls192"},{"type":"link","label":"BLS256","href":"/docs/cryptojs/bls256","docId":"cryptojs/bls256"},{"type":"link","label":"DBIG","href":"/docs/cryptojs/dbig","docId":"cryptojs/dbig"},{"type":"link","label":"ECDH","href":"/docs/cryptojs/ecdh","docId":"cryptojs/ecdh"},{"type":"link","label":"ECP","href":"/docs/cryptojs/ecp","docId":"cryptojs/ecp"},{"type":"link","label":"ECP2","href":"/docs/cryptojs/ecp2","docId":"cryptojs/ecp2"},{"type":"link","label":"ECP4","href":"/docs/cryptojs/ecp4","docId":"cryptojs/ecp4"},{"type":"link","label":"ECP8","href":"/docs/cryptojs/ecp8","docId":"cryptojs/ecp8"},{"type":"link","label":"FF","href":"/docs/cryptojs/ff","docId":"cryptojs/ff"},{"type":"link","label":"FP","href":"/docs/cryptojs/fp","docId":"cryptojs/fp"},{"type":"link","label":"FP2","href":"/docs/cryptojs/fp2","docId":"cryptojs/fp2"},{"type":"link","label":"FP4","href":"/docs/cryptojs/fp4","docId":"cryptojs/fp4"},{"type":"link","label":"FP8","href":"/docs/cryptojs/fp8","docId":"cryptojs/fp8"},{"type":"link","label":"FP12","href":"/docs/cryptojs/fp12","docId":"cryptojs/fp12"},{"type":"link","label":"FP16","href":"/docs/cryptojs/fp16","docId":"cryptojs/fp16"},{"type":"link","label":"FP24","href":"/docs/cryptojs/fp24","docId":"cryptojs/fp24"},{"type":"link","label":"FP48","href":"/docs/cryptojs/fp48","docId":"cryptojs/fp48"},{"type":"link","label":"GCM","href":"/docs/cryptojs/gcm","docId":"cryptojs/gcm"},{"type":"link","label":"HASH256","href":"/docs/cryptojs/hash256","docId":"cryptojs/hash256"},{"type":"link","label":"HASH384","href":"/docs/cryptojs/hash384","docId":"cryptojs/hash384"},{"type":"link","label":"HASH512","href":"/docs/cryptojs/hash512","docId":"cryptojs/hash512"},{"type":"link","label":"MPIN","href":"/docs/cryptojs/mpin","docId":"cryptojs/mpin"},{"type":"link","label":"MPIN192","href":"/docs/cryptojs/mpin192","docId":"cryptojs/mpin192"},{"type":"link","label":"MPIN256","href":"/docs/cryptojs/mpin256","docId":"cryptojs/mpin256"},{"type":"link","label":"PAIR","href":"/docs/cryptojs/pair","docId":"cryptojs/pair"},{"type":"link","label":"PAIR192","href":"/docs/cryptojs/pair192","docId":"cryptojs/pair192"},{"type":"link","label":"PAIR256","href":"/docs/cryptojs/pair256","docId":"cryptojs/pair256"},{"type":"link","label":"RAND","href":"/docs/cryptojs/rand","docId":"cryptojs/rand"},{"type":"link","label":"RSA","href":"/docs/cryptojs/rsa","docId":"cryptojs/rsa"},{"type":"link","label":"SHA3","href":"/docs/cryptojs/sha3","docId":"cryptojs/sha3"},{"type":"link","label":"UInt64","href":"/docs/cryptojs/unit64","docId":"cryptojs/unit64"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"D-TA","items":[{"type":"link","label":"D-TA Overview","href":"/docs/d-ta-overview","docId":"d-ta-overview"},{"type":"link","label":"Quick Start","href":"/docs/dta-details/quickstart","docId":"dta-details/quickstart"},{"type":"link","label":"API","href":"/docs/dta-details/api","docId":"dta-details/api"},{"type":"link","label":"Configuration","href":"/docs/dta-details/configuration","docId":"dta-details/configuration"},{"type":"link","label":"Identity Documents","href":"/docs/dta-details/identity-documents","docId":"dta-details/identity-documents"},{"type":"link","label":"Encrypted Envelope","href":"/docs/dta-details/encrypted-envelope","docId":"dta-details/encrypted-envelope"},{"type":"link","label":"IPFS","href":"/docs/dta-details/ipfs","docId":"dta-details/ipfs"},{"type":"link","label":"Plugins Overview","href":"/docs/dta-details/plugins-overview","docId":"dta-details/plugins-overview"},{"type":"link","label":"Authentication","href":"/docs/dta-details/authentication","docId":"dta-details/authentication"}],"collapsed":true,"collapsible":true},{"type":"category","label":"MPC Library","items":[{"type":"link","label":"Multi-Party Computation Library 0.1","href":"/docs/mpc-api-0.1","docId":"mpc-api-0.1"}],"collapsed":true,"collapsible":true},{"type":"category","label":"ZKP-MFA Clients/Servers","items":[{"type":"link","label":"ZKP-MFA Overview","href":"/docs/zkp-mfa-overview","docId":"zkp-mfa-overview"},{"type":"link","label":"ZKP-MFA API","href":"/docs/zkp-mfa-api","docId":"zkp-mfa-api"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Project Info","items":[{"type":"link","label":"Contributor\'s Guide","href":"/docs/contributor-guide","docId":"contributor-guide"},{"type":"link","label":"Downloads","href":"/docs/downloads","docId":"downloads"},{"type":"link","label":"Support","href":"/docs/support","docId":"support"}],"collapsed":true,"collapsible":true}]},"docs":{"amcl-c-api-2.0.0":{"id":"amcl-c-api-2.0.0","title":"AMCL C API 2.0.0","description":"Doxygen support is available for Milagro Crypto Library.","sidebar":"docs"},"amcl-javascript-api":{"id":"amcl-javascript-api","title":"AMCL JavaScript API","description":"MCJS - Milagro Crypto JavaScript"},"amcl-overview":{"id":"amcl-overview","title":"Apache Milagro Crypto Library (AMCL)","description":"Introduction","sidebar":"docs"},"contributor-guide":{"id":"contributor-guide","title":"Contributor\'s Guide","description":"Apache Milagro Mailing List","sidebar":"docs"},"cryptojs/aes":{"id":"cryptojs/aes","title":"AES","description":"AES","sidebar":"docs"},"cryptojs/amcl-javascript-api":{"id":"cryptojs/amcl-javascript-api","title":"AMCL JavaScript API","description":"MCJS - Milagro Crypto JavaScript","sidebar":"docs"},"cryptojs/big":{"id":"cryptojs/big","title":"BIG","description":"BIG","sidebar":"docs"},"cryptojs/bls":{"id":"cryptojs/bls","title":"BLS","description":"BLS","sidebar":"docs"},"cryptojs/bls192":{"id":"cryptojs/bls192","title":"BLS192","description":"BLS192","sidebar":"docs"},"cryptojs/bls256":{"id":"cryptojs/bls256","title":"BLS256","description":"BLS256","sidebar":"docs"},"cryptojs/dbig":{"id":"cryptojs/dbig","title":"DBIG","description":"DBIG","sidebar":"docs"},"cryptojs/ecdh":{"id":"cryptojs/ecdh","title":"ECDH","description":"ECDH","sidebar":"docs"},"cryptojs/ecp":{"id":"cryptojs/ecp","title":"ECP","description":"ECP","sidebar":"docs"},"cryptojs/ecp2":{"id":"cryptojs/ecp2","title":"ECP2","description":"ECP2","sidebar":"docs"},"cryptojs/ecp4":{"id":"cryptojs/ecp4","title":"ECP4","description":"ECP4","sidebar":"docs"},"cryptojs/ecp8":{"id":"cryptojs/ecp8","title":"ECP8","description":"ECP8","sidebar":"docs"},"cryptojs/ff":{"id":"cryptojs/ff","title":"FF","description":"FF","sidebar":"docs"},"cryptojs/fp":{"id":"cryptojs/fp","title":"FP","description":"FP","sidebar":"docs"},"cryptojs/fp12":{"id":"cryptojs/fp12","title":"FP12","description":"FP12","sidebar":"docs"},"cryptojs/fp16":{"id":"cryptojs/fp16","title":"FP16","description":"FP16","sidebar":"docs"},"cryptojs/fp2":{"id":"cryptojs/fp2","title":"FP2","description":"FP2","sidebar":"docs"},"cryptojs/fp24":{"id":"cryptojs/fp24","title":"FP24","description":"FP24","sidebar":"docs"},"cryptojs/fp4":{"id":"cryptojs/fp4","title":"FP4","description":"FP4","sidebar":"docs"},"cryptojs/fp48":{"id":"cryptojs/fp48","title":"FP48","description":"FP48","sidebar":"docs"},"cryptojs/fp8":{"id":"cryptojs/fp8","title":"FP8","description":"FP8","sidebar":"docs"},"cryptojs/gcm":{"id":"cryptojs/gcm","title":"GCM","description":"GCM","sidebar":"docs"},"cryptojs/hash256":{"id":"cryptojs/hash256","title":"HASH256","description":"HASH256","sidebar":"docs"},"cryptojs/hash384":{"id":"cryptojs/hash384","title":"HASH384","description":"HASH384","sidebar":"docs"},"cryptojs/hash512":{"id":"cryptojs/hash512","title":"HASH512","description":"HASH512","sidebar":"docs"},"cryptojs/mpin":{"id":"cryptojs/mpin","title":"MPIN","description":"MPIN","sidebar":"docs"},"cryptojs/mpin192":{"id":"cryptojs/mpin192","title":"MPIN192","description":"MPIN192","sidebar":"docs"},"cryptojs/mpin256":{"id":"cryptojs/mpin256","title":"MPIN256","description":"MPIN256","sidebar":"docs"},"cryptojs/pair":{"id":"cryptojs/pair","title":"PAIR","description":"PAIR","sidebar":"docs"},"cryptojs/pair192":{"id":"cryptojs/pair192","title":"PAIR192","description":"PAIR192","sidebar":"docs"},"cryptojs/pair256":{"id":"cryptojs/pair256","title":"PAIR256","description":"PAIR256","sidebar":"docs"},"cryptojs/rand":{"id":"cryptojs/rand","title":"RAND","description":"RAND","sidebar":"docs"},"cryptojs/rsa":{"id":"cryptojs/rsa","title":"RSA","description":"Classes","sidebar":"docs"},"cryptojs/sha3":{"id":"cryptojs/sha3","title":"SHA3","description":"SHA3","sidebar":"docs"},"cryptojs/unit64":{"id":"cryptojs/unit64","title":"UInt64","description":"UInt64","sidebar":"docs"},"d-ta-api":{"id":"d-ta-api","title":"D-TA Node API","description":"Interested in becoming a contributor? Milagro is looking for you."},"d-ta-overview":{"id":"d-ta-overview","title":"Decentralized Trust Authority Overview","description":"VERSION: ALPHA RELEASE 0.1.0","sidebar":"docs"},"downloads":{"id":"downloads","title":"Downloads","description":"This page will be updated with all official Apache Software Foundation releases from the Apache Milagro (incubating) project.","sidebar":"docs"},"dta-details/api":{"id":"dta-details/api","title":"API","description":"Open-API specifications are provided for the core \\"vanilla\\" Milagro D-TA HTTP REST services and for both the shipped plugins: Bitcoin Wallet Security and Safeguard Secret.","sidebar":"docs"},"dta-details/authentication":{"id":"dta-details/authentication","title":"Authentication","description":"When you first install a Milagro D-TA, the API endpoints are not authenticated by default. In other words, any simple CURL command will elicit the expected response. Milagro D-TAs support the oAuth bearer token authentication out of the box.","sidebar":"docs"},"dta-details/configuration":{"id":"dta-details/configuration","title":"Configuration","description":"The Milagro D-TA can be configured either by editing its configuration file or using command line flags.","sidebar":"docs"},"dta-details/encrypted-envelope":{"id":"dta-details/encrypted-envelope","title":"Encrypted Envelope","description":"The Milagro D-TA enables Principals (who require secrets to be safeguarded) to communicate with Fiduciaries who provide custodian services for those secrets. To facilitate these transactions communication between the parties must be secure i.e., must have privacy, authentication, non-repudiation and message integrity. The Milagro D-TA delivers this using its \\"Encrypted Envelope\\" messaging format.","sidebar":"docs"},"dta-details/identity-documents":{"id":"dta-details/identity-documents","title":"Identity Documents","description":"The first problem that a Milagro D-TA aims to solve is how entities in the system can identify and trust each other. In order to participate in the Milagro D-TA ecosystem each entity must publish a set of public keys into IPFS. The IPFS hash for an identity documents is then the ID for each entity running a D-TA.","sidebar":"docs"},"dta-details/ipfs":{"id":"dta-details/ipfs","title":"IPFS","description":"The Milagro D-TA aims to provide an auditable record of all interactions between actors in the system. It is vital that all the actors in the system can refer to an agreed record of these transactions in case of dispute or in response to requests from third parties such as law enforcement, audit or compliance organizations.  The Milagro D-TA creates immutable, secure and attributable records of every interaction that occurs in the lifecycle of entities and their dealings with secrets. We do this using the Inter Planetary File System - IPFS.","sidebar":"docs"},"dta-details/plugin-dev-guide":{"id":"dta-details/plugin-dev-guide","title":"D-TA Plugins Developers Guide","description":"We have provided a template plugin that provides the same functionality as out-of-the-box milagro."},"dta-details/plugins-overview":{"id":"dta-details/plugins-overview","title":"D-TA Plugins Overview","description":"The out-of-the-box Milagro D-TA doesn\'t do much: a Principal\'s D-TA gets a public key from a Fiduciary\'s D-TA, and at a later date, can request the corresponding secret key. It is simple conceptually, but the core operation does this in a hard-to-hack, and fully auditable way.","sidebar":"docs"},"dta-details/quickstart":{"id":"dta-details/quickstart","title":"Quick Start","description":"Docker","sidebar":"docs"},"milagro-crypto":{"id":"milagro-crypto","title":"Milagro Crypto","description":"One of the critical points about information security is to give access to resources only to authorized entities and deny access to unauthorized ones.","sidebar":"docs"},"milagro-design":{"id":"milagro-design","title":"Milagro Design","description":"Protocols and Technology","sidebar":"docs"},"milagro-intro":{"id":"milagro-intro","title":"Milagro Introduction","description":"Apache Milagro is a set of core security infrastructure and crypto libraries purpose-built for decentralized networks and distributed systems, while also providing value to cloud-connected app-centric software and IoT devices that require Internet scale.","sidebar":"docs"},"milagro-protocols":{"id":"milagro-protocols","title":"Milagro Protocols","description":"The Apache Milagro crypto libraries contain an (almost) overwhelming choice of algorithms and cryptographic primitives for robust and rapid application development. This section focuses specifically on a few protocols that are used extensively as key building blocks within the Milagro Zero-Knowledge Proof Multi-Factor Authentication (ZKP-MFA) server and clients, and Milagro Decentralized Trust Authority (D-TA) applications. Both applications implement these protocols using the Milagro crypto libraries.","sidebar":"docs"},"mpc-api-0.1":{"id":"mpc-api-0.1","title":"Multi-Party Computation (MPC) Library 0.1 (libmpc)","description":"Apache Milagro\'s Multi-Party Computation library (libmpc) is the latest addition to the project (as of June 2022), and uses the Apache Milagro C Library to implement Multi-Party Computation. It offers and API to allow for customs computations to be perfomed.","sidebar":"docs"},"support":{"id":"support","title":"Support","description":"Issues","sidebar":"docs"},"zkp-mfa-api":{"id":"zkp-mfa-api","title":"Zero Knowledge Proof MFA API","description":"Interested in becoming a contributor? Milagro is looking for you.","sidebar":"docs"},"zkp-mfa-overview":{"id":"zkp-mfa-overview","title":"Zero Knowledge Proof MFA Overview","description":"Interested in becoming a contributor? Milagro is looking for you.","sidebar":"docs"}}}')}}]);
\ No newline at end of file
diff --git a/assets/js/947b45f9.e6d16fb5.js b/assets/js/947b45f9.e6d16fb5.js
new file mode 100644
index 0000000..b1282ca
--- /dev/null
+++ b/assets/js/947b45f9.e6d16fb5.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[722],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>d});var r=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 r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}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){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 s(e,t){if(null==e)return{};var a,r,n=function(e,t){if(null==e)return{};var a,r,n={},o=Object.keys(e);for(r=0;r<o.length;r++)a=o[r],t.indexOf(a)>=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)a=o[r],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var p=r.createContext({}),l=function(e){var t=r.useContext(p),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},c=function(e){var t=l(e.components);return r.createElement(p.Provider,{value:t},e.children)},u="mdxType",f={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},h=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,o=e.originalType,p=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=l(a),h=n,d=u["".concat(p,".").concat(h)]||u[h]||f[h]||o;return a?r.createElement(d,i(i({ref:t},c),{},{components:a})):r.createElement(d,i({ref:t},c))}));function d(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=a.length,i=new Array(o);i[0]=h;var s={};for(var p in t)hasOwnProperty.call(t,p)&&(s[p]=t[p]);s.originalType=e,s[u]="string"==typeof e?e:n,i[1]=s;for(var l=2;l<o;l++)i[l]=a[l];return r.createElement.apply(null,i)}return r.createElement.apply(null,a)}h.displayName="MDXCreateElement"},2205:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>c,contentTitle:()=>p,default:()=>h,frontMatter:()=>s,metadata:()=>l,toc:()=>u});var r=a(7462),n=a(3366),o=(a(7294),a(3905)),i=["components"],s={id:"milagro-intro",title:"Milagro Introduction",sidebar_label:"Milagro Introduction"},p=void 0,l={unversionedId:"milagro-intro",id:"milagro-intro",title:"Milagro Introduction",description:"Apache Milagro is a set of core security infrastructure and crypto libraries purpose-built for decentralized networks and distributed systems, while also providing value to cloud-connected app-centric software and IoT devices that require Internet scale.",source:"@site/../docs/milagro-intro.md",sourceDirName:".",slug:"/milagro-intro",permalink:"/docs/milagro-intro",draft:!1,tags:[],version:"current",frontMatter:{id:"milagro-intro",title:"Milagro Introduction",sidebar_label:"Milagro Introduction"},sidebar:"docs",next:{title:"Milagro Crypto",permalink:"/docs/milagro-crypto"}},c={},u=[{value:"Pairing Cryptography",id:"pairing-cryptography",level:2},{value:"Pairings Go Mainstream",id:"pairings-go-mainstream",level:2},{value:"The Move to Post-Quantum",id:"the-move-to-post-quantum",level:2}],f={toc:u};function h(e){var t=e.components,a=(0,n.Z)(e,i);return(0,o.kt)("wrapper",(0,r.Z)({},f,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Apache Milagro is a set of core security infrastructure and crypto libraries purpose-built for decentralized networks and distributed systems, while also providing value to cloud-connected app-centric software and IoT devices that require Internet scale."),(0,o.kt)("p",null,"Milagro's purpose is to provide a secure and positive open source alternative to centralized and proprietary monolithic trust providers such as commercial certificate authorities and the certificate backed cryptosystems that rely on them."),(0,o.kt)("h2",{id:"pairing-cryptography"},"Pairing Cryptography"),(0,o.kt)("p",null,"Over the last decade, pairings on elliptic curves have been a very active area of research in cryptography, particularly within decentralized networks and distributed systems."),(0,o.kt)("p",null,"A pairing is a kind of the bilinear map defined over an elliptic curve. Examples include Weil pairing, Tate pairing, optimal Ate pairing and so on.  "),(0,o.kt)("p",null,"Pairings map pairs of points on an elliptic curve into the multiplicative group of a finite field. Their unique properties have enabled many new cryptographic protocols that had not previously been feasible."),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Pairing-based_cryptography"},"Pairing-Based Cryptography (PBC)")," is emerging as a solution to complex problems that proved intractable to the standard mathematics of Public-Key Cryptography such as Identity-Based Encryption (IBE), whereby the identity of a client can be used as their public key."),(0,o.kt)("p",null,"In certain use cases, this removes the need for a PKI infrastructure, since the main reason to issue certificates is to bind a public / private key pair to an identity - a function not required when using IBE."),(0,o.kt)("p",null,"Removing the certificate management burden enables the identity management and key lifecycle to take place within the decentralized cryptosystem itself."),(0,o.kt)("p",null,"As a result, Milagro's decentralized cryptosystem design goals seek to deliver products that are easier to scale and manage than traditional PKI, eliminate root key 'single point of compromise' weaknesses and are a seamless fit for today's decentralized networks and distributed systems."),(0,o.kt)("h2",{id:"pairings-go-mainstream"},"Pairings Go Mainstream"),(0,o.kt)("p",null,"Pairings are key building blocks in Apache Milagro's crypto libraries and products. As examples, BLS signatures feature prominently in Milagro Decentralized Trust Authorities (D-TA), while the M-Pin protocol used in the Milagro ZKP-MFA clients and servers."),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Boneh-Lynn-Shacham"},"BLS signatures")," are widely recognized within the cryptocurrency space for their signature aggregation abilities. BLS signatures are now going through an IETF submission review",(0,o.kt)("sup",{parentName:"p",id:"fnref-first"},(0,o.kt)("a",{parentName:"sup",href:"#fn-first",className:"footnote-ref"},"first"))," standardization process."),(0,o.kt)("p",null,"The ",(0,o.kt)("a",{parentName:"p",href:"https://eprint.iacr.org/2002/164"},"M-Pin protocol"),(0,o.kt)("sup",{parentName:"p",id:"fnref-second"},(0,o.kt)("a",{parentName:"sup",href:"#fn-second",className:"footnote-ref"},"second")),", which is a multi-factor authentication protocol built upon zero-knowledge proofs, is widely deployed across cloud infrastructures and in public facing deployments by the UK Government",(0,o.kt)("sup",{parentName:"p",id:"fnref-third"},(0,o.kt)("a",{parentName:"sup",href:"#fn-third",className:"footnote-ref"},"third")),". "),(0,o.kt)("p",null,"Zcash implements their own zero-knowledge proof algorithm named zk-SNARKs (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge)",(0,o.kt)("sup",{parentName:"p",id:"fnref-fourth"},(0,o.kt)("a",{parentName:"sup",href:"#fn-fourth",className:"footnote-ref"},"fourth")),". zk-SNARKs is used for protecting privacy of transactions of Zcash. Pairings are a key ingredient for constructing zk-SNARKS."),(0,o.kt)("p",null,"Cloudflare introduced Geo Key Manager",(0,o.kt)("sup",{parentName:"p",id:"fnref-fifth"},(0,o.kt)("a",{parentName:"sup",href:"#fn-fifth",className:"footnote-ref"},"fifth"))," to restrict distribution of customers' private keys to the subset of their data centers. To achieve this functionality, attribute-based encryption is used and pairings again are a key building block."),(0,o.kt)("p",null,"The Trusted Computing Group (TCG) specifies ECDAA (Elliptic Curve Direct Anonymous Attestation) in the specification of Trusted Platform Module",(0,o.kt)("sup",{parentName:"p",id:"fnref-sixth"},(0,o.kt)("a",{parentName:"sup",href:"#fn-sixth",className:"footnote-ref"},"sixth")),". ECDAA is a protocol for proving the attestation held by a Trusted Platform Module (TPM) to a verifier without revealing the attestation held by that TPM. Pairing cryptography is used for constructing ECDAA. FIDO Alliance",(0,o.kt)("sup",{parentName:"p",id:"fnref-seventh"},(0,o.kt)("a",{parentName:"sup",href:"#fn-seventh",className:"footnote-ref"},"seventh"))," and W3C",(0,o.kt)("sup",{parentName:"p",id:"fnref-eighth"},(0,o.kt)("a",{parentName:"sup",href:"#fn-eighth",className:"footnote-ref"},"eighth"))," have also published ECDAA algorithms similar to TCG."),(0,o.kt)("p",null,"In 2015, NIST (",(0,o.kt)("a",{parentName:"p",href:"http://www.theregister.co.uk/2014/05/26/congress_divorces_nist_from_nsa/"},"the 'post-NSA' NIST"),") goes so far as to recommend standardization of pairing based cryptography in their publication, ",(0,o.kt)("a",{parentName:"p",href:"http://nvlpubs.nist.gov/nistpubs/jres/120/jres.120.002.pdf"},"Report on Pairing-Based Cryptography"),"."),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},'"Based on the study, the report suggests an approach for including pairing-based cryptography schemes in the NIST cryptographic toolkit. As we have seen, pairing-based cryptography has much to offer. Pairing-based schemes, such as IBE, provide special properties which cannot be provided through traditional PKI in a straightforward way. Therefore, pairing-based cryptographic schemes would make a nice addition to NIST\u2019s cryptographic toolkit. In particular, we have focused attention on IBE. IBE simplifies key management procedures of certificate-based public key infrastructures. IBE also offers interesting features arising from the possibility of encoding additional information into a user\u2019s identity.  It has been a decade since the first IBE schemes were proposed. These schemes have received sufficient attention from the cryptographic community and no weakness has been identified."'),(0,o.kt)("p",{parentName:"blockquote"}," --- NIST, ",(0,o.kt)("em",{parentName:"p"},"Report on Pairing-Based Cryptography"))),(0,o.kt)("h2",{id:"the-move-to-post-quantum"},"The Move to Post-Quantum"),(0,o.kt)("p",null,"The security of almost all public-key cryptosystems in use today rely on computational assumptions such as the Integer Factorization (IF) and Discrete Logarithm (DL) problems as the foundation of their security. These are problems that today's classical computers cannot solve. In 1994, Shor",(0,o.kt)("sup",{parentName:"p",id:"fnref-ninth"},(0,o.kt)("a",{parentName:"sup",href:"#fn-ninth",className:"footnote-ref"},"ninth"))," showed that both IF and DL problems are easy to solve on a quantum computer, based on the laws of quantum physics. As a consequence, almost all currently deployed public-key cryptosystems will become completely insecure if quantum computers become a practical reality."),(0,o.kt)("p",null,"According to NIST in its Report on Post-Quantum Cryptography",(0,o.kt)("sup",{parentName:"p",id:"fnref-tenth"},(0,o.kt)("a",{parentName:"sup",href:"#fn-tenth",className:"footnote-ref"},"tenth")),', "It will take significant effort to ensure a smooth and secure migration from the current widely used cryptosystems to their quantum computing resistant counterparts. Therefore, regardless of whether we can estimate the exact time of the arrival of the quantum computing era, we must begin now to prepare our information security systems to be able to resist quantum computing."'),(0,o.kt)("p",null,"Most experts have a range of quantum computing being strong enough to crack today's cryptosystems being on the horizon anywhere from five to twenty years. It should also be stated that quantum computation only speeds up a brute-force keysearch by a factor of a square root, so any symmetric algorithm can be made secure against a quantum computer by doubling the key length, i.e., take AES from 128 bits to 256."),(0,o.kt)("p",null,"Milagro has begun implementing post-quantum algorithms into its code base, beginning with the Supersingular Isogeny Key Encapsulation",(0,o.kt)("sup",{parentName:"p",id:"fnref-eleventh"},(0,o.kt)("a",{parentName:"sup",href:"#fn-eleventh",className:"footnote-ref"},"eleventh"))," protocol. Why? "),(0,o.kt)("p",null,"Obviously, data that is transient and that does not retain a long term value doesn't require a level of protection against a post-quantum adversary. It becomes an issue when data is retained for the long term. If data is harvested and stored, and has retained value even after decades, then it should be protected to a post-quantum degree. In short, you are protecting the data for the day ",(0,o.kt)("em",{parentName:"p"},"WHEN")," a working quantum computer comes online."),(0,o.kt)("hr",null),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"It is hoped that Apache Milagro will become a safe, IPR free island of innovation for cryptographers interested in pairing protocols that deliver much needed core security infrastructure for the advancement of decentralized networks and distributed systems.")),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"We hope you join us and become part of this journey.")),(0,o.kt)("hr",null),(0,o.kt)("admonition",{title:"See an error in this documentation? ",type:"note"},(0,o.kt)("p",{parentName:"admonition"},"Submit a pull request on the development branch of ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/apache/incubator-milagro"},"Milagro Website Repo"),".")),(0,o.kt)("p",null,"Supported admonition types are: caution, note, important, tip, warning."),(0,o.kt)("div",{className:"footnotes"},(0,o.kt)("hr",{parentName:"div"}),(0,o.kt)("ol",{parentName:"div"},(0,o.kt)("li",{parentName:"ol",id:"fn-first"},(0,o.kt)("a",{parentName:"li",href:"https://datatracker.ietf.org/doc/draft-boneh-bls-signature/"},"IETF BLS Signature Internet Draft"),(0,o.kt)("a",{parentName:"li",href:"#fnref-first",className:"footnote-backref"},"\u21a9")),(0,o.kt)("li",{parentName:"ol",id:"fn-second"},(0,o.kt)("a",{parentName:"li",href:"https://tools.ietf.org/html/draft-scott-mpin-00"},"IETF M-Pin Informational Draft"),(0,o.kt)("a",{parentName:"li",href:"#fnref-second",className:"footnote-backref"},"\u21a9")),(0,o.kt)("li",{parentName:"ol",id:"fn-third"},(0,o.kt)("a",{parentName:"li",href:"https://www.computerweekly.com/news/4500260479/Experian-chooses-UK-authentication-startup-for-GovUK-Verify"},"UK Government selects M-Pin protocol based authentication provider"),(0,o.kt)("a",{parentName:"li",href:"#fnref-third",className:"footnote-backref"},"\u21a9")),(0,o.kt)("li",{parentName:"ol",id:"fn-fourth"},(0,o.kt)("a",{parentName:"li",href:"https://z.cash/technology/zksnarks.html"},'Lindemann, R., "What are zk-SNARKs?", July 2018'),(0,o.kt)("a",{parentName:"li",href:"#fnref-fourth",className:"footnote-backref"},"\u21a9")),(0,o.kt)("li",{parentName:"ol",id:"fn-fifth"},(0,o.kt)("a",{parentName:"li",href:"https://blog.cloudflare.com/geo-key-manager-how-it-works"},"Geo Key Manager: How It Works"),(0,o.kt)("a",{parentName:"li",href:"#fnref-fifth",className:"footnote-backref"},"\u21a9")),(0,o.kt)("li",{parentName:"ol",id:"fn-sixth"},(0,o.kt)("a",{parentName:"li",href:"https://trustedcomputinggroup.org/resource/tpm-library-specification/"},'TPM 2.0 Library Specification", September 2016'),(0,o.kt)("a",{parentName:"li",href:"#fnref-sixth",className:"footnote-backref"},"\u21a9")),(0,o.kt)("li",{parentName:"ol",id:"fn-seventh"},(0,o.kt)("a",{parentName:"li",href:"https://fidoalliance.org/specs/fido-v2.0-rd-20180702/fido-ecdaa-algorithm-v2.0-rd-20180702.html"},"FIDO ECDAA Algorithm - FIDO Alliance Review Draft 02"),(0,o.kt)("a",{parentName:"li",href:"#fnref-seventh",className:"footnote-backref"},"\u21a9")),(0,o.kt)("li",{parentName:"ol",id:"fn-eighth"},(0,o.kt)("a",{parentName:"li",href:"https://www.w3.org/TR/webauthn"},"Web Authentication: An API for accessing Public Key Credentials Level 1 - W3C Candidate Recommendation"),(0,o.kt)("a",{parentName:"li",href:"#fnref-eighth",className:"footnote-backref"},"\u21a9")),(0,o.kt)("li",{parentName:"ol",id:"fn-ninth"},(0,o.kt)("a",{parentName:"li",href:"https://pdfs.semanticscholar.org/6902/cb196ec032852ff31cc178ca822a5f67b2f2.pdf"},"Algorithms for quantum computation: discrete logarithms and factoring"),(0,o.kt)("a",{parentName:"li",href:"#fnref-ninth",className:"footnote-backref"},"\u21a9")),(0,o.kt)("li",{parentName:"ol",id:"fn-tenth"},(0,o.kt)("a",{parentName:"li",href:"https://nvlpubs.nist.gov/nistpubs/ir/2016/NIST.IR.8105.pdf"},"Report on post-quantum cryptography"),(0,o.kt)("a",{parentName:"li",href:"#fnref-tenth",className:"footnote-backref"},"\u21a9")),(0,o.kt)("li",{parentName:"ol",id:"fn-eleventh"},(0,o.kt)("a",{parentName:"li",href:"https://sike.org/"},"SIKE"),(0,o.kt)("a",{parentName:"li",href:"#fnref-eleventh",className:"footnote-backref"},"\u21a9")))))}h.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/948a189c.8679b8a7.js b/assets/js/948a189c.8679b8a7.js
new file mode 100644
index 0000000..b2960c2
--- /dev/null
+++ b/assets/js/948a189c.8679b8a7.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4655],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>g});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 o(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 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){n(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,a,n=function(e,t){if(null==e)return{};var r,a,n={},o=Object.keys(e);for(a=0;a<o.length;a++)r=o[a],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var p=a.createContext({}),s=function(e){var t=a.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=s(e.components);return a.createElement(p.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 r=e.components,n=e.mdxType,o=e.originalType,p=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),c=s(r),d=n,g=c["".concat(p,".").concat(d)]||c[d]||m[d]||o;return r?a.createElement(g,i(i({ref:t},u),{},{components:r})):a.createElement(g,i({ref:t},u))}));function g(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=r.length,i=new Array(o);i[0]=d;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[c]="string"==typeof e?e:n,i[1]=l;for(var s=2;s<o;s++)i[s]=r[s];return a.createElement.apply(null,i)}return a.createElement.apply(null,r)}d.displayName="MDXCreateElement"},3823:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>p,default:()=>d,frontMatter:()=>l,metadata:()=>s,toc:()=>c});var a=r(7462),n=r(3366),o=(r(7294),r(3905)),i=["components"],l={id:"support",title:"Support",sidebar_label:"Support"},p=void 0,s={unversionedId:"support",id:"support",title:"Support",description:"Issues",source:"@site/../docs/support.md",sourceDirName:".",slug:"/support",permalink:"/docs/support",draft:!1,tags:[],version:"current",frontMatter:{id:"support",title:"Support",sidebar_label:"Support"},sidebar:"docs",previous:{title:"Downloads",permalink:"/docs/downloads"}},u={},c=[{value:"Issues",id:"issues",level:2},{value:"Get Involved",id:"get-involved",level:2},{value:"Milagro Overview",id:"milagro-overview",level:2},{value:"Like cutting-edge crypto?",id:"like-cutting-edge-crypto",level:2},{value:"Need Status?",id:"need-status",level:2}],m={toc:c};function d(e){var t=e.components,r=(0,n.Z)(e,i);return(0,o.kt)("wrapper",(0,a.Z)({},m,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"issues"},"Issues"),(0,o.kt)("p",null,'Please report any bugs or feature requests using the "Issues" tab within our GitHub repositories:'),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/apache/incubator-milagro/issues"},(0,o.kt)("strong",{parentName:"a"},"incubator-milagro")," (used to build this website)")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/apache/incubator-milagro-crypto-c/issues"},(0,o.kt)("strong",{parentName:"a"},"incubator-milagro-crypto-c")," (standards compliant cryptographic library written in C)")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/apache/incubator-milagro-MPC/issues"},(0,o.kt)("strong",{parentName:"a"},"incubator-milagro-MPC")," (Multi-Party Computation Library)")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/apache/incubator-milagro-crypto-js/issues"},(0,o.kt)("strong",{parentName:"a"},"incubator-milagro-crypto-js")," (standards compliant cryptographic library written in JavaScript)")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/apache/incubator-milagro-crypto-rust/issues"},(0,o.kt)("strong",{parentName:"a"},"incubator-milagro-crypto-rust")," (standards compliant cryptographic library written in Rust)")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/apache/incubator-milagro-dta/issues"},(0,o.kt)("strong",{parentName:"a"},"incubator-milagro-dta")," (Decentralized Trust Authority (D-TA) - a collaborative key management server)"))),(0,o.kt)("h2",{id:"get-involved"},"Get Involved"),(0,o.kt)("p",null,"To join the Milagro developer's mailing list, please send an email to:"),(0,o.kt)("a",{href:"mailto:dev-subscribe@milagro.apache.org?Subject=Subscribe",target:"_top"},"dev-subscribe @ milagro.apache.org"),(0,o.kt)("h2",{id:"milagro-overview"},"Milagro Overview"),(0,o.kt)("p",null,"Learn more about Milagro.  ",(0,o.kt)("a",{parentName:"p",href:"/docs/milagro-intro"},"Read the docs.")),(0,o.kt)("h2",{id:"like-cutting-edge-crypto"},"Like cutting-edge crypto?"),(0,o.kt)("p",null,"Join us.  ",(0,o.kt)("a",{parentName:"p",href:"/docs/contributor-guide"},"Become a contributor.")),(0,o.kt)("h2",{id:"need-status"},"Need Status?"),(0,o.kt)("p",null,"We blog. ",(0,o.kt)("a",{parentName:"p",href:"http://milagro.apache.org/blog/"},"No, really.")),(0,o.kt)("p",null,"Supported admonition types are: caution, note, important, tip, warning."))}d.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/95b96bb9.88819a76.js b/assets/js/95b96bb9.88819a76.js
new file mode 100644
index 0000000..2667703
--- /dev/null
+++ b/assets/js/95b96bb9.88819a76.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3561],{4577:s=>{s.exports=JSON.parse('{"title":"Recent posts","items":[{"title":"Miss us? We missed you.","permalink":"/blog/2019/06/10/miss-me"}]}')}}]);
\ No newline at end of file
diff --git a/assets/js/9e4087bc.1ed553d2.js b/assets/js/9e4087bc.1ed553d2.js
new file mode 100644
index 0000000..041dfc1
--- /dev/null
+++ b/assets/js/9e4087bc.1ed553d2.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3608],{3169:(e,t,a)=>{a.r(t),a.d(t,{default:()=>o});var r=a(7294),n=a(9960),l=a(5999),c=a(1944),i=a(3285);function m(e){var t=e.year,a=e.posts;return r.createElement(r.Fragment,null,r.createElement("h3",null,t),r.createElement("ul",null,a.map((function(e){return r.createElement("li",{key:e.metadata.date},r.createElement(n.Z,{to:e.metadata.permalink},e.metadata.formattedDate," - ",e.metadata.title))}))))}function s(e){var t=e.years;return r.createElement("section",{className:"margin-vert--lg"},r.createElement("div",{className:"container"},r.createElement("div",{className:"row"},t.map((function(e,t){return r.createElement("div",{key:t,className:"col col--4 margin-vert--lg"},r.createElement(m,e))})))))}function o(e){var t,a,n=e.archive,m=(0,l.I)({id:"theme.blog.archive.title",message:"Archive",description:"The page & hero title of the blog archive page"}),o=(0,l.I)({id:"theme.blog.archive.description",message:"Archive",description:"The page & hero description of the blog archive page"}),u=(t=n.blogPosts,a=t.reduceRight((function(e,t){var a,r=t.metadata.date.split("-")[0],n=null!=(a=e.get(r))?a:[];return e.set(r,[t].concat(n))}),new Map),Array.from(a,(function(e){return{year:e[0],posts:e[1]}})));return r.createElement(r.Fragment,null,r.createElement(c.d,{title:m,description:o}),r.createElement(i.Z,null,r.createElement("header",{className:"hero hero--primary"},r.createElement("div",{className:"container"},r.createElement("h1",{className:"hero__title"},m),r.createElement("p",{className:"hero__subtitle"},o))),r.createElement("main",null,u.length>0&&r.createElement(s,{years:u}))))}}}]);
\ No newline at end of file
diff --git a/assets/js/a6aa9e1f.3ffbb1d8.js b/assets/js/a6aa9e1f.3ffbb1d8.js
new file mode 100644
index 0000000..5bc09b3
--- /dev/null
+++ b/assets/js/a6aa9e1f.3ffbb1d8.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3089],{3269:(e,t,a)=>{a.r(t),a.d(t,{default:()=>h});var n=a(7294),r=a(6010),l=a(2263),i=a(1944),o=a(5281),s=a(9058),m=a(5999),c=a(2244);function g(e){var t=e.metadata,a=t.previousPage,r=t.nextPage;return n.createElement("nav",{className:"pagination-nav","aria-label":(0,m.I)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"})},a&&n.createElement(c.Z,{permalink:a,title:n.createElement(m.Z,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)"},"Newer Entries")}),r&&n.createElement(c.Z,{permalink:r,title:n.createElement(m.Z,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)"},"Older Entries"),isNext:!0}))}var p=a(197),u=a(9460),d=a(756);function E(e){var t=e.items,a=e.component,r=void 0===a?d.Z:a;return n.createElement(n.Fragment,null,t.map((function(e){var t=e.content;return n.createElement(u.n,{key:t.metadata.permalink,content:t},n.createElement(r,null,n.createElement(t,null)))})))}function b(e){var t=e.metadata,a=(0,l.Z)().siteConfig.title,r=t.blogDescription,o=t.blogTitle,s="/"===t.permalink?a:o;return n.createElement(n.Fragment,null,n.createElement(i.d,{title:s,description:r}),n.createElement(p.Z,{tag:"blog_posts_list"}))}function v(e){var t=e.metadata,a=e.items,r=e.sidebar;return n.createElement(s.Z,{sidebar:r},n.createElement(E,{items:a}),n.createElement(g,{metadata:t}))}function h(e){return n.createElement(i.FG,{className:(0,r.Z)(o.k.wrapper.blogPages,o.k.page.blogListPage)},n.createElement(b,e),n.createElement(v,e))}}}]);
\ No newline at end of file
diff --git a/assets/js/a6f36191.dd828e22.js b/assets/js/a6f36191.dd828e22.js
new file mode 100644
index 0000000..a8d07bf
--- /dev/null
+++ b/assets/js/a6f36191.dd828e22.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6525],{3905:(e,t,a)=>{a.d(t,{Zo:()=>h,kt:()=>k});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 l(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 p(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?l(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):l(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,r=function(e,t){if(null==e)return{};var a,n,r={},l=Object.keys(e);for(n=0;n<l.length;n++)a=l[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n<l.length;n++)a=l[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var o=n.createContext({}),i=function(e){var t=n.useContext(o),a=t;return e&&(a="function"==typeof e?e(t):p(p({},t),e)),a},h=function(e){var t=i(e.components);return n.createElement(o.Provider,{value:t},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,l=e.originalType,o=e.parentName,h=s(e,["components","mdxType","originalType","parentName"]),c=i(a),u=r,k=c["".concat(o,".").concat(u)]||c[u]||m[u]||l;return a?n.createElement(k,p(p({ref:t},h),{},{components:a})):n.createElement(k,p({ref:t},h))}));function k(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=a.length,p=new Array(l);p[0]=u;var s={};for(var o in t)hasOwnProperty.call(t,o)&&(s[o]=t[o]);s.originalType=e,s[c]="string"==typeof e?e:r,p[1]=s;for(var i=2;i<l;i++)p[i]=a[i];return n.createElement.apply(null,p)}return n.createElement.apply(null,a)}u.displayName="MDXCreateElement"},8226:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>h,contentTitle:()=>o,default:()=>u,frontMatter:()=>s,metadata:()=>i,toc:()=>c});var n=a(7462),r=a(3366),l=(a(7294),a(3905)),p=["components"],s={id:"hash384",title:"HASH384",sidebar_label:"HASH384"},o=void 0,i={unversionedId:"cryptojs/hash384",id:"cryptojs/hash384",title:"HASH384",description:"HASH384",source:"@site/../docs/cryptojs/hash384.md",sourceDirName:"cryptojs",slug:"/cryptojs/hash384",permalink:"/docs/cryptojs/hash384",draft:!1,tags:[],version:"current",frontMatter:{id:"hash384",title:"HASH384",sidebar_label:"HASH384"},sidebar:"docs",previous:{title:"HASH256",permalink:"/docs/cryptojs/hash256"},next:{title:"HASH512",permalink:"/docs/cryptojs/hash512"}},h={},c=[{value:"HASH384",id:"hash384",level:2},{value:"new HASH384()",id:"new-hash384",level:3},{value:"hasH384.init()",id:"hash384init",level:3},{value:"hasH384.process(byt)",id:"hash384processbyt",level:3},{value:"hasH384.process_array(b)",id:"hash384process_arrayb",level:3},{value:"hasH384.process_num(n)",id:"hash384process_numn",level:3},{value:"hasH384.hash() \u21d2",id:"hash384hash-",level:3}],m={toc:c};function u(e){var t=e.components,a=(0,r.Z)(e,p);return(0,l.kt)("wrapper",(0,n.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("a",{name:"HASH384"}),(0,l.kt)("h2",{id:"hash384"},"HASH384"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": global class",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}HASH384{"}"}'),"  "),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#HASH384"},"HASH384"),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#new_HASH384_new"},"new HASH384()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#HASH384+init"},".init()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#HASH384+process"},".process(byt)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#HASH384+process_array"},".process_array(b)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#HASH384+process_num"},".process_num(n)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#HASH384+hash"},".hash()")," \u21d2")))),(0,l.kt)("a",{name:"new_HASH384_new"}),(0,l.kt)("h3",{id:"new-hash384"},"new HASH384()"),(0,l.kt)("p",null,"Creates an instance of HASH384"),(0,l.kt)("a",{name:"HASH384+init"}),(0,l.kt)("h3",{id:"hash384init"},"hasH384.init()"),(0,l.kt)("p",null,"Initialise Hash function"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#HASH384"},(0,l.kt)("code",null,"HASH384")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}HASH384{"}"}'),"  "),(0,l.kt)("a",{name:"HASH384+process"}),(0,l.kt)("h3",{id:"hash384processbyt"},"hasH384.process(byt)"),(0,l.kt)("p",null,"Process a single byte"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#HASH384"},(0,l.kt)("code",null,"HASH384")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}HASH384{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"byt"),(0,l.kt)("td",{parentName:"tr",align:null},"byte to be included in hash")))),(0,l.kt)("a",{name:"HASH384+process_array"}),(0,l.kt)("h3",{id:"hash384process_arrayb"},"hasH384.process_array(b)"),(0,l.kt)("p",null,"Process an array of bytes"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#HASH384"},(0,l.kt)("code",null,"HASH384")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}HASH384{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"b"),(0,l.kt)("td",{parentName:"tr",align:null},"byte arrray to be included in hash")))),(0,l.kt)("a",{name:"HASH384+process_num"}),(0,l.kt)("h3",{id:"hash384process_numn"},"hasH384.process_num(n)"),(0,l.kt)("p",null,"Process a 32-bit integer"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#HASH384"},(0,l.kt)("code",null,"HASH384")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}HASH384{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"n"),(0,l.kt)("td",{parentName:"tr",align:null},"Integer to be included in hash")))),(0,l.kt)("a",{name:"HASH384+hash"}),(0,l.kt)("h3",{id:"hash384hash-"},"hasH384.hash() \u21d2"),(0,l.kt)("p",null,"Generate 32-byte hash"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#HASH384"},(0,l.kt)("code",null,"HASH384")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": digest 32-byte hash",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}HASH384{"}"}')))}u.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/a7098721.225b93dc.js b/assets/js/a7098721.225b93dc.js
new file mode 100644
index 0000000..39ecbab
--- /dev/null
+++ b/assets/js/a7098721.225b93dc.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1050],{6615:e=>{e.exports=JSON.parse('{"permalink":"/blog","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]);
\ No newline at end of file
diff --git a/assets/js/aa39f157.444dccd1.js b/assets/js/aa39f157.444dccd1.js
new file mode 100644
index 0000000..9aaad3c
--- /dev/null
+++ b/assets/js/aa39f157.444dccd1.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8278],{3905:(t,e,a)=>{a.d(e,{Zo:()=>o,kt:()=>s});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 p(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 i(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 k=n.createContext({}),m=function(t){var e=n.useContext(k),a=e;return t&&(a="function"==typeof t?t(e):p(p({},e),t)),a},o=function(t){var e=m(t.components);return n.createElement(k.Provider,{value:e},t.children)},c="mdxType",u={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},d=n.forwardRef((function(t,e){var a=t.components,l=t.mdxType,r=t.originalType,k=t.parentName,o=i(t,["components","mdxType","originalType","parentName"]),c=m(a),d=l,s=c["".concat(k,".").concat(d)]||c[d]||u[d]||r;return a?n.createElement(s,p(p({ref:e},o),{},{components:a})):n.createElement(s,p({ref:e},o))}));function s(t,e){var a=arguments,l=e&&e.mdxType;if("string"==typeof t||l){var r=a.length,p=new Array(r);p[0]=d;var i={};for(var k in e)hasOwnProperty.call(e,k)&&(i[k]=e[k]);i.originalType=t,i[c]="string"==typeof t?t:l,p[1]=i;for(var m=2;m<r;m++)p[m]=a[m];return n.createElement.apply(null,p)}return n.createElement.apply(null,a)}d.displayName="MDXCreateElement"},79:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>o,contentTitle:()=>k,default:()=>d,frontMatter:()=>i,metadata:()=>m,toc:()=>c});var n=a(7462),l=a(3366),r=(a(7294),a(3905)),p=["components"],i={id:"ecp",title:"ECP",sidebar_label:"ECP"},k=void 0,m={unversionedId:"cryptojs/ecp",id:"cryptojs/ecp",title:"ECP",description:"ECP",source:"@site/../docs/cryptojs/ecp.md",sourceDirName:"cryptojs",slug:"/cryptojs/ecp",permalink:"/docs/cryptojs/ecp",draft:!1,tags:[],version:"current",frontMatter:{id:"ecp",title:"ECP",sidebar_label:"ECP"},sidebar:"docs",previous:{title:"ECDH",permalink:"/docs/cryptojs/ecdh"},next:{title:"ECP2",permalink:"/docs/cryptojs/ecp2"}},o={},c=[{value:"ECP",id:"ecp",level:2},{value:"new ECP()",id:"new-ecp",level:3},{value:"ecP.is_infinity(1)",id:"ecpis_infinity1",level:3},{value:"ecP.cswap()",id:"ecpcswap",level:3},{value:"ecP.cmove()",id:"ecpcmove",level:3},{value:"ecP.select()",id:"ecpselect",level:3},{value:"ecP.copy(P)",id:"ecpcopyp",level:3},{value:"ecP.neg()",id:"ecpneg",level:3},{value:"ecP.inf()",id:"ecpinf",level:3},{value:"ecP.setxy(ix, iy)",id:"ecpsetxyix-iy",level:3},{value:"ecP.setxi(ix, s)",id:"ecpsetxiix-s",level:3},{value:"ecP.setx(ix)",id:"ecpsetxix",level:3},{value:"ecP.affine()",id:"ecpaffine",level:3},{value:"ecP.getX()",id:"ecpgetx",level:3},{value:"ecP.getY()",id:"ecpgety",level:3},{value:"ecP.getS()",id:"ecpgets",level:3},{value:"ecP.getx()",id:"ecpgetx-1",level:3},{value:"ecP.gety()",id:"ecpgety-1",level:3},{value:"ecP.getz()",id:"ecpgetz",level:3},{value:"ecP.toBytes(b)",id:"ecptobytesb",level:3},{value:"ecP.toString() \u21d2",id:"ecptostring-",level:3},{value:"ecP.dbl()",id:"ecpdbl",level:3},{value:"ecP.add()",id:"ecpadd",level:3},{value:"ecP.sub(Q)",id:"ecpsubq",level:3},{value:"ecP.pinmul(e, bts)",id:"ecppinmule-bts",level:3},{value:"ecP.cfp()",id:"ecpcfp",level:3},{value:"ecP.mul(e)",id:"ecpmule",level:3},{value:"ecP.mul2(e, Q, f)",id:"ecpmul2e-q-f",level:3},{value:"ECP.generator()",id:"ecpgenerator",level:3},{value:"ECP.fromBytes(b)",id:"ecpfrombytesb",level:3},{value:"ECP.RHS(x)",id:"ecprhsx",level:3}],u={toc:c};function d(t){var e=t.components,a=(0,l.Z)(t,p);return(0,r.kt)("wrapper",(0,n.Z)({},u,a,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("a",{name:"ECP"}),(0,r.kt)("h2",{id:"ecp"},"ECP"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": global class",(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}ECP{"}"}'),"  "),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#ECP"},"ECP"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#new_ECP_new"},"new ECP()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("em",{parentName:"li"},"instance"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#ECP+is_infinity"},".is_infinity(1)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#ECP+cswap"},".cswap()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#ECP+cmove"},".cmove()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#ECP+select"},".select()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#ECP+copy"},".copy(P)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#ECP+neg"},".neg()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#ECP+inf"},".inf()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#ECP+setxy"},".setxy(ix, iy)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#ECP+setxi"},".setxi(ix, s)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#ECP+setx"},".setx(ix)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#ECP+affine"},".affine()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#ECP+getX"},".getX()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#ECP+getY"},".getY()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#ECP+getS"},".getS()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#ECP+getx"},".getx()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#ECP+gety"},".gety()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#ECP+getz"},".getz()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#ECP+toBytes"},".toBytes(b)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#ECP+toString"},".toString()")," \u21d2"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#ECP+dbl"},".dbl()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#ECP+add"},".add()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#ECP+sub"},".sub(Q)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#ECP+pinmul"},".pinmul(e, bts)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#ECP+cfp"},".cfp()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#ECP+mul"},".mul(e)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#ECP+mul2"},".mul2(e, Q, f)")))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("em",{parentName:"li"},"static"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#ECP.generator"},".generator()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#ECP.fromBytes"},".fromBytes(b)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#ECP.RHS"},".RHS(x)"))))))),(0,r.kt)("a",{name:"new_ECP_new"}),(0,r.kt)("h3",{id:"new-ecp"},"new ECP()"),(0,r.kt)("p",null,"Creates an instance of ECP"),(0,r.kt)("a",{name:"ECP+is_infinity"}),(0,r.kt)("h3",{id:"ecpis_infinity1"},"ecP.is_infinity(1)"),(0,r.kt)("p",null,"Tests for ECP point equal to infinity"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#ECP"},(0,r.kt)("code",null,"ECP")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}ECP{"}"}'),"  "),(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},"Param"),(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},"if infinity, else returns 0")))),(0,r.kt)("a",{name:"ECP+cswap"}),(0,r.kt)("h3",{id:"ecpcswap"},"ecP.cswap()"),(0,r.kt)("p",null,"conditional swap of this and Q dependant on dCopy ECP point to another ECP point"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#ECP"},(0,r.kt)("code",null,"ECP")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}ECP{"}"}'),"  "),(0,r.kt)("a",{name:"ECP+cmove"}),(0,r.kt)("h3",{id:"ecpcmove"},"ecP.cmove()"),(0,r.kt)("p",null,"conditional move of Q to P dependant on d"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#ECP"},(0,r.kt)("code",null,"ECP")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}ECP{"}"}'),"  "),(0,r.kt)("a",{name:"ECP+select"}),(0,r.kt)("h3",{id:"ecpselect"},"ecP.select()"),(0,r.kt)("p",null,"Constant time select from pre-computed table"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#ECP"},(0,r.kt)("code",null,"ECP")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}ECP{"}"}'),"  "),(0,r.kt)("a",{name:"ECP+copy"}),(0,r.kt)("h3",{id:"ecpcopyp"},"ecP.copy(P)"),(0,r.kt)("p",null,"Copy ECP point to another ECP point"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#ECP"},(0,r.kt)("code",null,"ECP")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}ECP{"}"}'),"  "),(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},"Param"),(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},"P"),(0,r.kt)("td",{parentName:"tr",align:null},"ECP instance")))),(0,r.kt)("a",{name:"ECP+neg"}),(0,r.kt)("h3",{id:"ecpneg"},"ecP.neg()"),(0,r.kt)("p",null,"set this=-this"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#ECP"},(0,r.kt)("code",null,"ECP")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}ECP{"}"}'),"  "),(0,r.kt)("a",{name:"ECP+inf"}),(0,r.kt)("h3",{id:"ecpinf"},"ecP.inf()"),(0,r.kt)("p",null,"Set ECP to point-at-infinity"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#ECP"},(0,r.kt)("code",null,"ECP")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}ECP{"}"}'),"  "),(0,r.kt)("a",{name:"ECP+setxy"}),(0,r.kt)("h3",{id:"ecpsetxyix-iy"},"ecP.setxy(ix, iy)"),(0,r.kt)("p",null,"set this=(x,y)"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#ECP"},(0,r.kt)("code",null,"ECP")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}ECP{"}"}'),"  "),(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},"Param"),(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},"ix"),(0,r.kt)("td",{parentName:"tr",align:null},"x-value")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"iy"),(0,r.kt)("td",{parentName:"tr",align:null},"y-value")))),(0,r.kt)("a",{name:"ECP+setxi"}),(0,r.kt)("h3",{id:"ecpsetxiix-s"},"ecP.setxi(ix, s)"),(0,r.kt)("p",null,"set this=x, where x is ctx.BIG, y is derived from sign s"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#ECP"},(0,r.kt)("code",null,"ECP")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}ECP{"}"}'),"  "),(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},"Param"),(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},"ix"),(0,r.kt)("td",{parentName:"tr",align:null},"x-value")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"s"),(0,r.kt)("td",{parentName:"tr",align:null},"sign to derive y")))),(0,r.kt)("a",{name:"ECP+setx"}),(0,r.kt)("h3",{id:"ecpsetxix"},"ecP.setx(ix)"),(0,r.kt)("p",null,"set this=x, y calculated from curve equation"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#ECP"},(0,r.kt)("code",null,"ECP")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}ECP{"}"}'),"  "),(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},"Param"),(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},"ix"),(0,r.kt)("td",{parentName:"tr",align:null},"x-value")))),(0,r.kt)("a",{name:"ECP+affine"}),(0,r.kt)("h3",{id:"ecpaffine"},"ecP.affine()"),(0,r.kt)("p",null,"convert this to affine, from (x,y,z) to (x,y)"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#ECP"},(0,r.kt)("code",null,"ECP")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}ECP{"}"}'),"  "),(0,r.kt)("a",{name:"ECP+getX"}),(0,r.kt)("h3",{id:"ecpgetx"},"ecP.getX()"),(0,r.kt)("p",null,"extract affine x as ctx.FP2"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#ECP"},(0,r.kt)("code",null,"ECP")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}ECP{"}"}'),"  "),(0,r.kt)("a",{name:"ECP+getY"}),(0,r.kt)("h3",{id:"ecpgety"},"ecP.getY()"),(0,r.kt)("p",null,"extract affine y as ctx.FP2"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#ECP"},(0,r.kt)("code",null,"ECP")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}ECP{"}"}'),"  "),(0,r.kt)("a",{name:"ECP+getS"}),(0,r.kt)("h3",{id:"ecpgets"},"ecP.getS()"),(0,r.kt)("p",null,"get sign of Y"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#ECP"},(0,r.kt)("code",null,"ECP")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}ECP{"}"}'),"  "),(0,r.kt)("a",{name:"ECP+getx"}),(0,r.kt)("h3",{id:"ecpgetx-1"},"ecP.getx()"),(0,r.kt)("p",null,"extract x as ctx.FP"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#ECP"},(0,r.kt)("code",null,"ECP")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}ECP{"}"}'),"  "),(0,r.kt)("a",{name:"ECP+gety"}),(0,r.kt)("h3",{id:"ecpgety-1"},"ecP.gety()"),(0,r.kt)("p",null,"extract y as ctx.FP"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#ECP"},(0,r.kt)("code",null,"ECP")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}ECP{"}"}'),"  "),(0,r.kt)("a",{name:"ECP+getz"}),(0,r.kt)("h3",{id:"ecpgetz"},"ecP.getz()"),(0,r.kt)("p",null,"extract z as ctx.FP"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#ECP"},(0,r.kt)("code",null,"ECP")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}ECP{"}"}'),"  "),(0,r.kt)("a",{name:"ECP+toBytes"}),(0,r.kt)("h3",{id:"ecptobytesb"},"ecP.toBytes(b)"),(0,r.kt)("p",null,"convert this to byte arrayextract projective x"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#ECP"},(0,r.kt)("code",null,"ECP")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}ECP{"}"}'),"  "),(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},"Param"),(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},"b"),(0,r.kt)("td",{parentName:"tr",align:null},"byte array output")))),(0,r.kt)("a",{name:"ECP+toString"}),(0,r.kt)("h3",{id:"ecptostring-"},"ecP.toString() \u21d2"),(0,r.kt)("p",null,"convert this to hex string"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#ECP"},(0,r.kt)("code",null,"ECP")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"Returns"),": hex string",(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}ECP{"}"}'),"  "),(0,r.kt)("a",{name:"ECP+dbl"}),(0,r.kt)("h3",{id:"ecpdbl"},"ecP.dbl()"),(0,r.kt)("p",null,"this+=this"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#ECP"},(0,r.kt)("code",null,"ECP")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}ECP{"}"}'),"  "),(0,r.kt)("a",{name:"ECP+add"}),(0,r.kt)("h3",{id:"ecpadd"},"ecP.add()"),(0,r.kt)("p",null,"Adds ECP instances"),(0,r.kt)("p",null,"param Q ECP instance"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#ECP"},(0,r.kt)("code",null,"ECP")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}ECP{"}"}'),"  "),(0,r.kt)("a",{name:"ECP+sub"}),(0,r.kt)("h3",{id:"ecpsubq"},"ecP.sub(Q)"),(0,r.kt)("p",null,"Subtracts ECP instance Q  from this"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#ECP"},(0,r.kt)("code",null,"ECP")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}ECP{"}"}'),"  "),(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},"Param"),(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},"Q"),(0,r.kt)("td",{parentName:"tr",align:null},"ECP instance")))),(0,r.kt)("a",{name:"ECP+pinmul"}),(0,r.kt)("h3",{id:"ecppinmule-bts"},"ecP.pinmul(e, bts)"),(0,r.kt)("p",null,"constant time multiply by small integer of length bts - use ladder"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#ECP"},(0,r.kt)("code",null,"ECP")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}ECP{"}"}'),"  "),(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},"Param"),(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},"e"),(0,r.kt)("td",{parentName:"tr",align:null},"small integer")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"bts"),(0,r.kt)("td",{parentName:"tr",align:null},"e bit length")))),(0,r.kt)("a",{name:"ECP+cfp"}),(0,r.kt)("h3",{id:"ecpcfp"},"ecP.cfp()"),(0,r.kt)("p",null,"multiply this by the curves cofactor"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#ECP"},(0,r.kt)("code",null,"ECP")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}ECP{"}"}'),"  "),(0,r.kt)("a",{name:"ECP+mul"}),(0,r.kt)("h3",{id:"ecpmule"},"ecP.mul(e)"),(0,r.kt)("p",null,"Multiplies an ECP instance P by a BIG, side-channel resistant"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#ECP"},(0,r.kt)("code",null,"ECP")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}ECP{"}"}'),"  "),(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},"Param"),(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},"e"),(0,r.kt)("td",{parentName:"tr",align:null},"BIG number multiplier")))),(0,r.kt)("a",{name:"ECP+mul2"}),(0,r.kt)("h3",{id:"ecpmul2e-q-f"},"ecP.mul2(e, Q, f)"),(0,r.kt)("p",null,"Return e.this+f.Q"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#ECP"},(0,r.kt)("code",null,"ECP")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}ECP{"}"}'),"  "),(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},"Param"),(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},"e"),(0,r.kt)("td",{parentName:"tr",align:null},"BIG number multiplier")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Q"),(0,r.kt)("td",{parentName:"tr",align:null},"ECP instance")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"f"),(0,r.kt)("td",{parentName:"tr",align:null},"BIG number multiplier")))),(0,r.kt)("a",{name:"ECP.generator"}),(0,r.kt)("h3",{id:"ecpgenerator"},"ECP.generator()"),(0,r.kt)("p",null,"Set group generator"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,r.kt)("a",{parentName:"p",href:"#ECP"},(0,r.kt)("code",null,"ECP")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}ECP{"}"}'),"  "),(0,r.kt)("a",{name:"ECP.fromBytes"}),(0,r.kt)("h3",{id:"ecpfrombytesb"},"ECP.fromBytes(b)"),(0,r.kt)("p",null,"convert from byte array to point"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,r.kt)("a",{parentName:"p",href:"#ECP"},(0,r.kt)("code",null,"ECP")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}ECP{"}"}'),"  "),(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},"Param"),(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},"b"),(0,r.kt)("td",{parentName:"tr",align:null},"input byte array")))),(0,r.kt)("a",{name:"ECP.RHS"}),(0,r.kt)("h3",{id:"ecprhsx"},"ECP.RHS(x)"),(0,r.kt)("p",null,"Calculate RHS of the curve equation"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,r.kt)("a",{parentName:"p",href:"#ECP"},(0,r.kt)("code",null,"ECP")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}ECP{"}"}'),"  "),(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},"Param"),(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},"x"),(0,r.kt)("td",{parentName:"tr",align:null},"x-value")))))}d.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/abda4bac.ea08378e.js b/assets/js/abda4bac.ea08378e.js
new file mode 100644
index 0000000..6ec3332
--- /dev/null
+++ b/assets/js/abda4bac.ea08378e.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[875],{3905:(t,e,a)=>{a.d(e,{Zo:()=>k,kt:()=>s});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 p(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 i(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 m=n.createContext({}),o=function(t){var e=n.useContext(m),a=e;return t&&(a="function"==typeof t?t(e):p(p({},e),t)),a},k=function(t){var e=o(t.components);return n.createElement(m.Provider,{value:e},t.children)},u="mdxType",d={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},N=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,l=t.originalType,m=t.parentName,k=i(t,["components","mdxType","originalType","parentName"]),u=o(a),N=r,s=u["".concat(m,".").concat(N)]||u[N]||d[N]||l;return a?n.createElement(s,p(p({ref:e},k),{},{components:a})):n.createElement(s,p({ref:e},k))}));function s(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=a.length,p=new Array(l);p[0]=N;var i={};for(var m in e)hasOwnProperty.call(e,m)&&(i[m]=e[m]);i.originalType=t,i[u]="string"==typeof t?t:r,p[1]=i;for(var o=2;o<l;o++)p[o]=a[o];return n.createElement.apply(null,p)}return n.createElement.apply(null,a)}N.displayName="MDXCreateElement"},9095:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>k,contentTitle:()=>m,default:()=>N,frontMatter:()=>i,metadata:()=>o,toc:()=>u});var n=a(7462),r=a(3366),l=(a(7294),a(3905)),p=["components"],i={id:"pair256",title:"PAIR256",sidebar_label:"PAIR256"},m=void 0,o={unversionedId:"cryptojs/pair256",id:"cryptojs/pair256",title:"PAIR256",description:"PAIR256",source:"@site/../docs/cryptojs/pair256.md",sourceDirName:"cryptojs",slug:"/cryptojs/pair256",permalink:"/docs/cryptojs/pair256",draft:!1,tags:[],version:"current",frontMatter:{id:"pair256",title:"PAIR256",sidebar_label:"PAIR256"},sidebar:"docs",previous:{title:"PAIR192",permalink:"/docs/cryptojs/pair192"},next:{title:"RAND",permalink:"/docs/cryptojs/rand"}},k={},u=[{value:"PAIR256",id:"pair256",level:2},{value:"new PAIR256()",id:"new-pair256",level:3},{value:"PAIR256.line()",id:"pair256line",level:3},{value:"PAIR256.initmp()",id:"pair256initmp",level:3},{value:"PAIR256.miller(r, res)",id:"pair256millerr-res",level:3},{value:"PAIR256.another(r, P1, Q1)",id:"pair256anotherr-p1-q1",level:3},{value:"PAIR256.ate(P1, Q1)",id:"pair256atep1-q1",level:3},{value:"PAIR256.ate2(P1, Q1, R1, S1)",id:"pair256ate2p1-q1-r1-s1",level:3},{value:"PAIR256.fexp(m)",id:"pair256fexpm",level:3},{value:"PAIR256.lbits()",id:"pair256lbits",level:3},{value:"PAIR256.glv()",id:"pair256glv",level:3},{value:"PAIR256.gs()",id:"pair256gs",level:3},{value:"PAIR256.G1mul(P, e) \u21d2",id:"pair256g1mulp-e-",level:3},{value:"PAIR256.G2mul(P, e) \u21d2",id:"pair256g2mulp-e-",level:3},{value:"PAIR256.GTpow(d, e) \u21d2",id:"pair256gtpowd-e-",level:3}],d={toc:u};function N(t){var e=t.components,a=(0,r.Z)(t,p);return(0,l.kt)("wrapper",(0,n.Z)({},d,a,{components:e,mdxType:"MDXLayout"}),(0,l.kt)("a",{name:"PAIR256"}),(0,l.kt)("h2",{id:"pair256"},"PAIR256"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": global class",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}PAIR256{"}"}'),"  "),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#PAIR256"},"PAIR256"),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#new_PAIR256_new"},"new PAIR256()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#PAIR256.line"},".line()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#PAIR256.initmp"},".initmp()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#PAIR256.miller"},".miller(r, res)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#PAIR256.another"},".another(r, P1, Q1)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#PAIR256.ate"},".ate(P1, Q1)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#PAIR256.ate2"},".ate2(P1, Q1, R1, S1)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#PAIR256.fexp"},".fexp(m)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#PAIR256.lbits"},".lbits()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#PAIR256.glv"},".glv()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#PAIR256.gs"},".gs()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#PAIR256.G1mul"},".G1mul(P, e)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#PAIR256.G2mul"},".G2mul(P, e)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#PAIR256.GTpow"},".GTpow(d, e)")," \u21d2")))),(0,l.kt)("a",{name:"new_PAIR256_new"}),(0,l.kt)("h3",{id:"new-pair256"},"new PAIR256()"),(0,l.kt)("p",null,"Creates an instance of PAIR256"),(0,l.kt)("a",{name:"PAIR256.line"}),(0,l.kt)("h3",{id:"pair256line"},"PAIR256.line()"),(0,l.kt)("p",null,"Line function"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#PAIR256"},(0,l.kt)("code",null,"PAIR256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}PAIR256{"}"}'),"  "),(0,l.kt)("a",{name:"PAIR256.initmp"}),(0,l.kt)("h3",{id:"pair256initmp"},"PAIR256.initmp()"),(0,l.kt)("p",null,"prepare for multi-pairing"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#PAIR256"},(0,l.kt)("code",null,"PAIR256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}PAIR256{"}"}'),"  "),(0,l.kt)("a",{name:"PAIR256.miller"}),(0,l.kt)("h3",{id:"pair256millerr-res"},"PAIR256.miller(r, res)"),(0,l.kt)("p",null,"basic Miller loop"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#PAIR256"},(0,l.kt)("code",null,"PAIR256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}PAIR256{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"r"),(0,l.kt)("td",{parentName:"tr",align:null},"FP48 precomputed array of accumulated line functions")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"res"),(0,l.kt)("td",{parentName:"tr",align:null},"FP48 result")))),(0,l.kt)("a",{name:"PAIR256.another"}),(0,l.kt)("h3",{id:"pair256anotherr-p1-q1"},"PAIR256.another(r, P1, Q1)"),(0,l.kt)("p",null,"Precompute line functions for n-pairing"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#PAIR256"},(0,l.kt)("code",null,"PAIR256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}PAIR256{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"r"),(0,l.kt)("td",{parentName:"tr",align:null},"array of precomputed FP48 products of line functions")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"P1"),(0,l.kt)("td",{parentName:"tr",align:null},"An element of G2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Q1"),(0,l.kt)("td",{parentName:"tr",align:null},"An element of G1")))),(0,l.kt)("a",{name:"PAIR256.ate"}),(0,l.kt)("h3",{id:"pair256atep1-q1"},"PAIR256.ate(P1, Q1)"),(0,l.kt)("p",null,"Calculate Miller loop for Optimal ATE pairing e(P,Q)"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#PAIR256"},(0,l.kt)("code",null,"PAIR256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}PAIR256{"}"}'),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Result"),": r An element of GT i.e. result of the pairing calculation e(P,Q)  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"P1"),(0,l.kt)("td",{parentName:"tr",align:null},"An element of G2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Q1"),(0,l.kt)("td",{parentName:"tr",align:null},"An element of G1")))),(0,l.kt)("a",{name:"PAIR256.ate2"}),(0,l.kt)("h3",{id:"pair256ate2p1-q1-r1-s1"},"PAIR256.ate2(P1, Q1, R1, S1)"),(0,l.kt)("p",null,"Calculate Miller loop for Optimal ATE double-pairing e(P,Q).e(R,S)"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#PAIR256"},(0,l.kt)("code",null,"PAIR256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}PAIR256{"}"}'),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Result"),": r An element of GT i.e. result of the double pairing calculation e(P,Q).e(R,S)  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"P1"),(0,l.kt)("td",{parentName:"tr",align:null},"An element of G2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Q1"),(0,l.kt)("td",{parentName:"tr",align:null},"An element of G1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"R1"),(0,l.kt)("td",{parentName:"tr",align:null},"An element of G2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"S1"),(0,l.kt)("td",{parentName:"tr",align:null},"An element of G1")))),(0,l.kt)("a",{name:"PAIR256.fexp"}),(0,l.kt)("h3",{id:"pair256fexpm"},"PAIR256.fexp(m)"),(0,l.kt)("p",null,"Final exponentiation of pairing, converts output of Miller loop to element in GT"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#PAIR256"},(0,l.kt)("code",null,"PAIR256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}PAIR256{"}"}'),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Result"),": r m^((p^12-1)/r) where p is modulus and r is the group order  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"m"),(0,l.kt)("td",{parentName:"tr",align:null},"FP48 value")))),(0,l.kt)("a",{name:"PAIR256.lbits"}),(0,l.kt)("h3",{id:"pair256lbits"},"PAIR256.lbits()"),(0,l.kt)("p",null,"prepare ate parameter, n=6u+2 (BN) or n=u (BLS), n3=3","*","n"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#PAIR256"},(0,l.kt)("code",null,"PAIR256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}PAIR256{"}"}'),"  "),(0,l.kt)("a",{name:"PAIR256.glv"}),(0,l.kt)("h3",{id:"pair256glv"},"PAIR256.glv()"),(0,l.kt)("p",null,"GLV method"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#PAIR256"},(0,l.kt)("code",null,"PAIR256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}PAIR256{"}"}'),"  "),(0,l.kt)("a",{name:"PAIR256.gs"}),(0,l.kt)("h3",{id:"pair256gs"},"PAIR256.gs()"),(0,l.kt)("p",null,"Galbraith & Scott Method"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#PAIR256"},(0,l.kt)("code",null,"PAIR256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}PAIR256{"}"}'),"  "),(0,l.kt)("a",{name:"PAIR256.G1mul"}),(0,l.kt)("h3",{id:"pair256g1mulp-e-"},"PAIR256.G1mul(P, e) \u21d2"),(0,l.kt)("p",null,"Fast point multiplication of a member of the group G1 by a BIG number"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#PAIR256"},(0,l.kt)("code",null,"PAIR256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": R Member of G1 R=e.P",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}PAIR256{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"P"),(0,l.kt)("td",{parentName:"tr",align:null},"Member of G1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"e"),(0,l.kt)("td",{parentName:"tr",align:null},"BIG multiplier")))),(0,l.kt)("a",{name:"PAIR256.G2mul"}),(0,l.kt)("h3",{id:"pair256g2mulp-e-"},"PAIR256.G2mul(P, e) \u21d2"),(0,l.kt)("p",null,"Multiply P by e in group G2"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#PAIR256"},(0,l.kt)("code",null,"PAIR256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": R Member of G2 R=e.P",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}PAIR256{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"P"),(0,l.kt)("td",{parentName:"tr",align:null},"Member of G2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"e"),(0,l.kt)("td",{parentName:"tr",align:null},"BIG multiplier")))),(0,l.kt)("a",{name:"PAIR256.GTpow"}),(0,l.kt)("h3",{id:"pair256gtpowd-e-"},"PAIR256.GTpow(d, e) \u21d2"),(0,l.kt)("p",null,"Fast raising of a member of GT to a BIG power"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#PAIR256"},(0,l.kt)("code",null,"PAIR256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": r d^e",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}PAIR256{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"d"),(0,l.kt)("td",{parentName:"tr",align:null},"Member of GT")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"e"),(0,l.kt)("td",{parentName:"tr",align:null},"BIG exponent")))))}N.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/b0cc1135.c5891ee2.js b/assets/js/b0cc1135.c5891ee2.js
new file mode 100644
index 0000000..fe3e799
--- /dev/null
+++ b/assets/js/b0cc1135.c5891ee2.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1426],{3905:(a,e,t)=>{t.d(e,{Zo:()=>o,kt:()=>k});var s=t(7294);function n(a,e,t){return e in a?Object.defineProperty(a,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):a[e]=t,a}function m(a,e){var t=Object.keys(a);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(a);e&&(s=s.filter((function(e){return Object.getOwnPropertyDescriptor(a,e).enumerable}))),t.push.apply(t,s)}return t}function p(a){for(var e=1;e<arguments.length;e++){var t=null!=arguments[e]?arguments[e]:{};e%2?m(Object(t),!0).forEach((function(e){n(a,e,t[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(t)):m(Object(t)).forEach((function(e){Object.defineProperty(a,e,Object.getOwnPropertyDescriptor(t,e))}))}return a}function r(a,e){if(null==a)return{};var t,s,n=function(a,e){if(null==a)return{};var t,s,n={},m=Object.keys(a);for(s=0;s<m.length;s++)t=m[s],e.indexOf(t)>=0||(n[t]=a[t]);return n}(a,e);if(Object.getOwnPropertySymbols){var m=Object.getOwnPropertySymbols(a);for(s=0;s<m.length;s++)t=m[s],e.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(a,t)&&(n[t]=a[t])}return n}var i=s.createContext({}),l=function(a){var e=s.useContext(i),t=e;return a&&(t="function"==typeof a?a(e):p(p({},e),a)),t},o=function(a){var e=l(a.components);return s.createElement(i.Provider,{value:e},a.children)},c="mdxType",N={inlineCode:"code",wrapper:function(a){var e=a.children;return s.createElement(s.Fragment,{},e)}},h=s.forwardRef((function(a,e){var t=a.components,n=a.mdxType,m=a.originalType,i=a.parentName,o=r(a,["components","mdxType","originalType","parentName"]),c=l(t),h=n,k=c["".concat(i,".").concat(h)]||c[h]||N[h]||m;return t?s.createElement(k,p(p({ref:e},o),{},{components:t})):s.createElement(k,p({ref:e},o))}));function k(a,e){var t=arguments,n=e&&e.mdxType;if("string"==typeof a||n){var m=t.length,p=new Array(m);p[0]=h;var r={};for(var i in e)hasOwnProperty.call(e,i)&&(r[i]=e[i]);r.originalType=a,r[c]="string"==typeof a?a:n,p[1]=r;for(var l=2;l<m;l++)p[l]=t[l];return s.createElement.apply(null,p)}return s.createElement.apply(null,t)}h.displayName="MDXCreateElement"},5316:(a,e,t)=>{t.r(e),t.d(e,{assets:()=>o,contentTitle:()=>i,default:()=>h,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var s=t(7462),n=t(3366),m=(t(7294),t(3905)),p=["components"],r={id:"milagro-crypto",title:"Milagro Crypto",sidebar_label:"Milagro Crypto"},i=void 0,l={unversionedId:"milagro-crypto",id:"milagro-crypto",title:"Milagro Crypto",description:"One of the critical points about information security is to give access to resources only to authorized entities and deny access to unauthorized ones.",source:"@site/../docs/milagro-crypto.md",sourceDirName:".",slug:"/milagro-crypto",permalink:"/docs/milagro-crypto",draft:!1,tags:[],version:"current",frontMatter:{id:"milagro-crypto",title:"Milagro Crypto",sidebar_label:"Milagro Crypto"},sidebar:"docs",previous:{title:"Milagro Introduction",permalink:"/docs/milagro-intro"},next:{title:"Milagro Protocols",permalink:"/docs/milagro-protocols"}},o={},c=[{value:"Elliptic Curve Cryptography",id:"elliptic-curve-cryptography",level:2},{value:"Pairing Based Cryptography",id:"pairing-based-cryptography",level:2},{value:"Identity Based Encryption",id:"identity-based-encryption",level:2},{value:"Post-Quantum Cryptography",id:"post-quantum-cryptography",level:2},{value:"Zero Knowledge Proof",id:"zero-knowledge-proof",level:2},{value:"Summary",id:"summary",level:2}],N={toc:c};function h(a){var e=a.components,t=(0,n.Z)(a,p);return(0,m.kt)("wrapper",(0,s.Z)({},N,t,{components:e,mdxType:"MDXLayout"}),(0,m.kt)("p",null,"One of the critical points about information security is to give access to resources only to authorized entities and deny access to unauthorized ones.\nPreventing unauthorized access very often comes down to making it ",(0,m.kt)("strong",{parentName:"p"},(0,m.kt)("em",{parentName:"strong"},"almost impossible")),", i.e., tough, expensive, complicated, and time-consuming for the unauthorized entities to get access to resources."),(0,m.kt)("p",null,"The same principles apply to cryptography. In most cases, a suitable encryption mechanism satisfies at least two basic requirements:"),(0,m.kt)("ol",null,(0,m.kt)("li",{parentName:"ol"},"It is possible to give easy access to encrypted, cryptographically protected content to authorized entities."),(0,m.kt)("li",{parentName:"ol"},"It is possible to make it extremely challenging for unauthorized entities to access encrypted (ditto) content.")),(0,m.kt)("p",null,"Using the above, we can define an operation: Encryption that is tough to reverse without possessing a particular parameter, for example, a decryption key.\nIn RSA-based encryption two prime numbers, the private key, are multiplied to generate a public key, so that it is almost impossible to reverse the operation and retrieve the original prime numbers."),(0,m.kt)("p",null,"Multiple sources are available online to read more on the topic. We recommend this short paper from ",(0,m.kt)("a",{parentName:"p",href:"https://math.berkeley.edu/~kpmann/encryption.pdf"},"Cal Berkeley at this link"),"."),(0,m.kt)("p",null,"As noted in the mentioned paper, with RSA, we need enormous prime numbers to make it ",(0,m.kt)("strong",{parentName:"p"},(0,m.kt)("em",{parentName:"strong"},"almost impossible"))," to break the encryption, hence to find the two big prime numbers.\nOn elliptic curves, multiplication of a point by a number can be defined so that much shorter numbers than in the big prime number case are needed to reach the same level of ",(0,m.kt)("strong",{parentName:"p"},(0,m.kt)("em",{parentName:"strong"},"almost impossibility")),"."),(0,m.kt)("h2",{id:"elliptic-curve-cryptography"},"Elliptic Curve Cryptography"),(0,m.kt)("p",null,"Elliptic curves are another way to do encryption. Elliptic curves are mathematical structures, on which operations like addition and multiplications of points are easily defined.\nIn particular, multiplication of a point by a number is a relatively easy operation to compute, while it is ",(0,m.kt)("strong",{parentName:"p"},(0,m.kt)("em",{parentName:"strong"},"almost impossible"))," to reverse the process, that is, to determine\nthe multiplier knowing the result of the multiplication."),(0,m.kt)("p",null,"The problem of reversing the multiplication is known as the Discrete Logarithm Problem on elliptic curves (ECDLP).\nThe difference in computational complexity (between performing the multiplication and reversing the result to retrieve the multiplier) is one of the essential cornerstones of elliptic curve cryptography."),(0,m.kt)("h2",{id:"pairing-based-cryptography"},"Pairing Based Cryptography"),(0,m.kt)("p",null,"Using elliptic curves we can now define on some elliptic curve a bilinear function called a ",(0,m.kt)("strong",{parentName:"p"},(0,m.kt)("em",{parentName:"strong"},"pairing")),", which enables a mapping from two points on the same curve (or points on two related curves) into a different mathematical structure called a finite field. The bilinearity of the pairing is the key characteristic that makes pairing interesting and widely used in cryptography."),(0,m.kt)("p",null,"A ",(0,m.kt)("strong",{parentName:"p"},(0,m.kt)("em",{parentName:"strong"},"bilinear pairing"))," ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"e")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"e")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e")))))," maps a pair of points (hence the name pairing) on an elliptic curve ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"E")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"E")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05764em"}},"E"))))),", defined over some field ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"F"),(0,m.kt)("mi",{parentName:"msub"},"q"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"F_{q}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"F"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.1514em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.03588em"}},"q"))))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.2861em"}},(0,m.kt)("span",{parentName:"span"}))))))))))," to an element of the multiplicative group of a finite extension of ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"F"),(0,m.kt)("msup",{parentName:"msub"},(0,m.kt)("mi",{parentName:"msup"},"q"),(0,m.kt)("mi",{parentName:"msup"},"k")))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"{F}_{q^k}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1.0221em",verticalAlign:"-0.3387em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"F")),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3448em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.4974em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.03588em"}},"q"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.782em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.786em",marginRight:"0.0714em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.5em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size3 size1 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.03148em"}},"k")))))))))))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3387em"}},(0,m.kt)("span",{parentName:"span"})))))))))),"."),(0,m.kt)("div",{className:"math math-display"},(0,m.kt)("span",{parentName:"div",className:"katex-display"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"m"),(0,m.kt)("mi",{parentName:"mrow"},"A"),(0,m.kt)("mo",{parentName:"mrow"},"+"),(0,m.kt)("mi",{parentName:"mrow"},"B"),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("mi",{parentName:"mrow"},"n"),(0,m.kt)("mi",{parentName:"mrow"},"P"),(0,m.kt)("mo",{parentName:"mrow"},"+"),(0,m.kt)("mi",{parentName:"mrow"},"Q"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"A"),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("mi",{parentName:"mrow"},"P"),(0,m.kt)("msup",{parentName:"mrow"},(0,m.kt)("mo",{parentName:"msup",stretchy:"false"},")"),(0,m.kt)("mrow",{parentName:"msup"},(0,m.kt)("mi",{parentName:"mrow"},"m"),(0,m.kt)("mi",{parentName:"mrow"},"n"))),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"B"),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("mi",{parentName:"mrow"},"Q"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"e(mA+B, nP + Q) = e(A,P)^{mn} e(B, Q)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"m"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8778em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05017em"}},"B"),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"n"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"P"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"Q"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"P"),(0,m.kt)("span",{parentName:"span",className:"mclose"},(0,m.kt)("span",{parentName:"span",className:"mclose"},")"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.7144em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-3.113em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"mn"))))))))),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05017em"}},"B"),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"Q"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")")))))),(0,m.kt)("p",null,"The elements ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"P")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"P")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"P")))))," and ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"Q")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"Q")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8778em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"Q")))))," lie in two different groups, respectively ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"G"),(0,m.kt)("mn",{parentName:"msub"},"1"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"G_{1}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"G"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"1"))))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"}))))))))))," and ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"G"),(0,m.kt)("mn",{parentName:"msub"},"2"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"G_{2}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"G"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"2"))))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))))))),". The choice of those two different group determines a different ",(0,m.kt)("strong",{parentName:"p"},(0,m.kt)("em",{parentName:"strong"},"types"))," of pairing."),(0,m.kt)("p",null,"Let ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"E")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"E")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05764em"}},"E")))))," an ordinary elliptic curve, take ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"G"),(0,m.kt)("mn",{parentName:"msub"},"1")),(0,m.kt)("mo",{parentName:"mrow",mathvariant:"normal"},"\u2260"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"G"),(0,m.kt)("mn",{parentName:"msub"},"2"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"G_{1} \\neq G_{2}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8889em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"G"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"1"))))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},(0,m.kt)("span",{parentName:"span",className:"mrel"},(0,m.kt)("span",{parentName:"span",className:"mord vbox"},(0,m.kt)("span",{parentName:"span",className:"thinbox"},(0,m.kt)("span",{parentName:"span",className:"rlap"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8889em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"inner"},(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mrel"},"\ue020"))),(0,m.kt)("span",{parentName:"span",className:"fix"}))))),(0,m.kt)("span",{parentName:"span",className:"mrel"},"=")),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"G"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"2"))))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))))))),", and if there is not an efficiently computable isomorphism ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"\u03d5"),(0,m.kt)("mo",{parentName:"mrow"},":"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"G"),(0,m.kt)("mn",{parentName:"msub"},"1")),(0,m.kt)("mo",{parentName:"mrow"},"\u2192"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"G"),(0,m.kt)("mn",{parentName:"msub"},"2"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\phi:G_{1}\\to G_{2}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8889em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"\u03d5"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},":"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"G"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"1"))))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"\u2192"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"G"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"2"))))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"}))))))))))," then the pairing is said to be of ",(0,m.kt)("strong",{parentName:"p"},(0,m.kt)("em",{parentName:"strong"},"Type",(0,m.kt)("span",{parentName:"em",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mo",{parentName:"mrow"},"\u2212"),(0,m.kt)("mn",{parentName:"mrow"},"3")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"-3")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.7278em",verticalAlign:"-0.0833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},"\u2212"),(0,m.kt)("span",{parentName:"span",className:"mord"},"3"))))))),"."),(0,m.kt)("p",null,"Currently, most of the state-of-the-art implementations of pairings take place on ordinary curves that assume the ",(0,m.kt)("strong",{parentName:"p"},(0,m.kt)("em",{parentName:"strong"},"Type",(0,m.kt)("span",{parentName:"em",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mo",{parentName:"mrow"},"\u2212"),(0,m.kt)("mn",{parentName:"mrow"},"3")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"-3")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.7278em",verticalAlign:"-0.0833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},"\u2212"),(0,m.kt)("span",{parentName:"span",className:"mord"},"3")))))))," scenario for reasons of efficiency and secure implementation."),(0,m.kt)("h2",{id:"identity-based-encryption"},"Identity Based Encryption"),(0,m.kt)("p",null,"Pairing-based cryptography builds on elliptic curve-based cryptography, but the extra functionality of the pairing enables us to design schemes which would otherwise be impossible to realize, or would be prohibitively expensive to do using RSA-based cryptosystems."),(0,m.kt)("p",null,"Identity-based encryption (IBE) is one such scheme that has received a large of amount of attention from the crypto community, and where commercially available products have been on the market for some time and are in wide use today."),(0,m.kt)("p",null,"IBE is similar to classical asymmetric key cryptography, in that each user has a public key for encryption and a private key for decryption. But there are many differences:"),(0,m.kt)("ol",null,(0,m.kt)("li",{parentName:"ol"},"IBE allows public keys to be set to the value of a pre-existing identifier, such as an email address, while in PKI the public key does not contain the notion of an identity, and the association with an identifier is created by a certificate signed by a third party (Certification Authority)."),(0,m.kt)("li",{parentName:"ol"},"Clients or individual users do not generate private keys, but must instead download them from a trusted third party known as the Trust Authority (TA)."),(0,m.kt)("li",{parentName:"ol"},"In IBE, to encrypt messages, the sender must obtain public \u201csystem parameters\u201d from the Trust Authority (TA). These system parameters are used in combination with the intended recipient\u2019s identity string (e.g. email address) to generate an encrypted message.")),(0,m.kt)("h2",{id:"post-quantum-cryptography"},"Post-Quantum Cryptography"),(0,m.kt)("p",null,'"Post-quantum cryptography (sometimes referred to as quantum-proof, quantum-safe or quantum-resistant) refers to cryptographic algorithms (usually public-key algorithms) that are thought to be secure against an attack by a quantum computer. As of 2018, this is not true for the most popular public-key algorithms, which can be efficiently broken by a sufficiently strong hypothetical quantum computer. '),(0,m.kt)("p",null,"The problem with currently popular algorithms is that their security relies on one of three hard mathematical problems: the integer factorization problem, the discrete logarithm problem or the elliptic-curve discrete logarithm problem. All of these problems can be easily solved on a sufficiently powerful quantum computer running Shor's algorithm. "),(0,m.kt)("p",null,'Even though current, publicly known, experimental quantum computers lack processing power to break any real cryptographic algorithm, many cryptographers are designing new algorithms to prepare for a time when quantum computing becomes a threat."',(0,m.kt)("sup",{parentName:"p",id:"fnref-first"},(0,m.kt)("a",{parentName:"sup",href:"#fn-first",className:"footnote-ref"},"first"))),(0,m.kt)("h2",{id:"zero-knowledge-proof"},"Zero Knowledge Proof"),(0,m.kt)("p",null,'"In cryptography, a ',(0,m.kt)("strong",{parentName:"p"},"zero-knowledge proof")," or ",(0,m.kt)("strong",{parentName:"p"},"zero-knowledge protocol")," is a method by which one party (the ",(0,m.kt)("em",{parentName:"p"},"prover"),") can prove to another party (the ",(0,m.kt)("em",{parentName:"p"},"verifier"),") that a given statement is true, without conveying any information apart from the fact that the statement is indeed true."),(0,m.kt)("p",null,"If proving the statement requires knowledge of some secret information on the part of the prover, the definition implies that the verifier will not be able to prove the statement in turn to anyone else, since the verifier does not possess the secret information."),(0,m.kt)("p",null,"Notice that the statement being proved must include the assertion that the prover has such knowledge (otherwise, the statement would not be proved in zero-knowledge, since at the end of the protocol the verifier would gain the additional information that the prover has knowledge of the required secret information)."),(0,m.kt)("p",null,"If the statement consists ",(0,m.kt)("em",{parentName:"p"},"only")," of the fact that the prover possesses the secret information, it is a special case known as ",(0,m.kt)("em",{parentName:"p"},"zero-knowledge proof of knowledge"),', and it nicely illustrates the essence of the notion of zero-knowledge proofs: proving that one has knowledge of certain information is trivial if one is allowed to simply reveal that information; the challenge is proving that one has such knowledge without revealing the secret information or anything else."',(0,m.kt)("sup",{parentName:"p",id:"fnref-second"},(0,m.kt)("a",{parentName:"sup",href:"#fn-second",className:"footnote-ref"},"second"))),(0,m.kt)("h2",{id:"summary"},"Summary"),(0,m.kt)("p",null,(0,m.kt)("strong",{parentName:"p"},"Elliptic curve cryptography")," is an attractive alternative to conventional public key cryptography for implementation on constrained devices, where the significant computational resources i.e. speed, memory are limited and low-power wireless communication protocols is essential. It attains the same security levels as traditional cryptosystems using smaller parameter sizes."),(0,m.kt)("p",null,(0,m.kt)("strong",{parentName:"p"},"Pairing-based cryptography")," builds on elliptic curve-based cryptography, but the extra functionality of the pairing enables us to design schemes which would otherwise be impossible to realize, or would be prohibitively expensive. Examples include identity-based encryption, group signatures and non-interactive zero-knowledge proofs."),(0,m.kt)("p",null,(0,m.kt)("strong",{parentName:"p"},"Identity-based encryption")," doesn\u2019t require certificates and certificate authorities. A trusted third party generates all the private keys, but all the public keys can be derived knowing the identity of the public key owner, for example, an email address.  That means that no certificate is needed to bind a public key to its owner.  Typically, it is up to the application to verify the owner possesses access to the unique identity attribute during the enrollment process in which a client obtains a private key."),(0,m.kt)("p",null,(0,m.kt)("strong",{parentName:"p"},"Post-quantum cryptography")," Post-quantum cryptography are cryptosystems which can be run on a classical computer, but are secure even if an adversary possesses a quantum computer. For data that must be private, but has the potential to be long lived and publicly available, using post-quantum secure algorithms like AES 256-bit for encryption and SIKE for encapsulation of encryption keys is essential. "),(0,m.kt)("p",null,(0,m.kt)("strong",{parentName:"p"},"Zero-knowledge proof")," is a method by which one party (the prover) can prove to another party (the verifier) that a given statement is true, without conveying any information apart from the fact that the statement is indeed true."),(0,m.kt)("p",null,"For an in-depth dive into the cryptographic protocols in use within the Milagro framework, see the next section ",(0,m.kt)("a",{parentName:"p",href:"/docs/milagro-protocols"},"Milagro Protocols"),"."),(0,m.kt)("hr",null),(0,m.kt)("admonition",{title:"See an error in this documentation? ",type:"note"},(0,m.kt)("p",{parentName:"admonition"},"Submit a pull request on the development branch of ",(0,m.kt)("a",{parentName:"p",href:"https://github.com/apache/incubator-milagro"},"Milagro Website Repo"),".")),(0,m.kt)("p",null,"Supported admonition types are: caution, note, important, tip, warning."),(0,m.kt)("div",{className:"footnotes"},(0,m.kt)("hr",{parentName:"div"}),(0,m.kt)("ol",{parentName:"div"},(0,m.kt)("li",{parentName:"ol",id:"fn-first"},(0,m.kt)("a",{parentName:"li",href:"https://en.wikipedia.org/wiki/Post-quantum_cryptography"},"Wikipedia article"),(0,m.kt)("a",{parentName:"li",href:"#fnref-first",className:"footnote-backref"},"\u21a9")),(0,m.kt)("li",{parentName:"ol",id:"fn-second"},(0,m.kt)("a",{parentName:"li",href:"https://en.wikipedia.org/wiki/Zero-knowledge_proof"},"Wikipedia article"),(0,m.kt)("a",{parentName:"li",href:"#fnref-second",className:"footnote-backref"},"\u21a9")))))}h.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/b1f0173d.2ca42697.js b/assets/js/b1f0173d.2ca42697.js
new file mode 100644
index 0000000..73e744f
--- /dev/null
+++ b/assets/js/b1f0173d.2ca42697.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6605],{3905:(a,e,t)=>{t.d(e,{Zo:()=>N,kt:()=>h});var s=t(7294);function n(a,e,t){return e in a?Object.defineProperty(a,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):a[e]=t,a}function m(a,e){var t=Object.keys(a);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(a);e&&(s=s.filter((function(e){return Object.getOwnPropertyDescriptor(a,e).enumerable}))),t.push.apply(t,s)}return t}function p(a){for(var e=1;e<arguments.length;e++){var t=null!=arguments[e]?arguments[e]:{};e%2?m(Object(t),!0).forEach((function(e){n(a,e,t[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(t)):m(Object(t)).forEach((function(e){Object.defineProperty(a,e,Object.getOwnPropertyDescriptor(t,e))}))}return a}function r(a,e){if(null==a)return{};var t,s,n=function(a,e){if(null==a)return{};var t,s,n={},m=Object.keys(a);for(s=0;s<m.length;s++)t=m[s],e.indexOf(t)>=0||(n[t]=a[t]);return n}(a,e);if(Object.getOwnPropertySymbols){var m=Object.getOwnPropertySymbols(a);for(s=0;s<m.length;s++)t=m[s],e.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(a,t)&&(n[t]=a[t])}return n}var i=s.createContext({}),l=function(a){var e=s.useContext(i),t=e;return a&&(t="function"==typeof a?a(e):p(p({},e),a)),t},N=function(a){var e=l(a.components);return s.createElement(i.Provider,{value:e},a.children)},o="mdxType",c={inlineCode:"code",wrapper:function(a){var e=a.children;return s.createElement(s.Fragment,{},e)}},k=s.forwardRef((function(a,e){var t=a.components,n=a.mdxType,m=a.originalType,i=a.parentName,N=r(a,["components","mdxType","originalType","parentName"]),o=l(t),k=n,h=o["".concat(i,".").concat(k)]||o[k]||c[k]||m;return t?s.createElement(h,p(p({ref:e},N),{},{components:t})):s.createElement(h,p({ref:e},N))}));function h(a,e){var t=arguments,n=e&&e.mdxType;if("string"==typeof a||n){var m=t.length,p=new Array(m);p[0]=k;var r={};for(var i in e)hasOwnProperty.call(e,i)&&(r[i]=e[i]);r.originalType=a,r[o]="string"==typeof a?a:n,p[1]=r;for(var l=2;l<m;l++)p[l]=t[l];return s.createElement.apply(null,p)}return s.createElement.apply(null,t)}k.displayName="MDXCreateElement"},4522:(a,e,t)=>{t.r(e),t.d(e,{assets:()=>N,contentTitle:()=>i,default:()=>k,frontMatter:()=>r,metadata:()=>l,toc:()=>o});var s=t(7462),n=t(3366),m=(t(7294),t(3905)),p=["components"],r={id:"milagro-design",title:"Milagro Design",sidebar_label:"Milagro Design"},i=void 0,l={unversionedId:"milagro-design",id:"milagro-design",title:"Milagro Design",description:"Protocols and Technology",source:"@site/../docs/milagro-design.md",sourceDirName:".",slug:"/milagro-design",permalink:"/docs/milagro-design",draft:!1,tags:[],version:"current",frontMatter:{id:"milagro-design",title:"Milagro Design",sidebar_label:"Milagro Design"},sidebar:"docs",previous:{title:"Milagro Protocols",permalink:"/docs/milagro-protocols"},next:{title:"AMCL Overview",permalink:"/docs/amcl-overview"}},N={},o=[{value:"Protocols and Technology",id:"protocols-and-technology",level:2},{value:"Identity Based Encryption",id:"identity-based-encryption",level:3},{value:"Decentralized Identity",id:"decentralized-identity",level:3},{value:"Encrypted Envelope",id:"encrypted-envelope",level:3},{value:"Decentralized Trust Authorities: D-TA",id:"decentralized-trust-authorities-d-ta",level:2},{value:"Issuing Secrets",id:"issuing-secrets",level:3},{value:"Safekeeping Secrets",id:"safekeeping-secrets",level:3},{value:"Summary",id:"summary",level:2},{value:"Pairing and PQ Cryptography",id:"pairing-and-pq-cryptography",level:3},{value:"Decentralized Cryptosystem",id:"decentralized-cryptosystem",level:3},{value:"No Single Point of Compromise",id:"no-single-point-of-compromise",level:3}],c={toc:o};function k(a){var e=a.components,t=(0,n.Z)(a,p);return(0,m.kt)("wrapper",(0,s.Z)({},c,t,{components:e,mdxType:"MDXLayout"}),(0,m.kt)("h2",{id:"protocols-and-technology"},"Protocols and Technology"),(0,m.kt)("h3",{id:"identity-based-encryption"},"Identity Based Encryption"),(0,m.kt)("p",null,"M-Pin and Chow Choo are in the class of Identity Based Encryption protocols, which use pairings in their construction. The M-Pin Protocol is intended to replace the well-known Username/Password authentication mechanism which is widely considered to be effectively broken."),(0,m.kt)("p",null,"The main problem is the existence of a password file on the server, which is commonly stolen and hacked, revealing most user passwords."),(0,m.kt)("p",null,"The idea behind Milagro's Zero-Knowledge Proof Multi-Factor Authentication (ZKP-MFA) Server is that each registered client is issued with a secret cryptographic key derived from their identity. They then prove to the Milagro ZKP-MFA Server that they are in possession of this key using a zero-knowledge proof protocol, which can be extended to include authenticated key agreement."),(0,m.kt)("p",null,"This protocol design eliminates the need for any information related to clients, or their keys, to be kept on the authentication server. Should an attacker penetrate the server, it is impossible to deduct any information about end users because it doesn't exist, at least within the authentication system."),(0,m.kt)("p",null,"Common to both Chow-Choo and M-Pin is that the keys are issued in shares, not as whole keys, by entities called Decentralized Trust Authorities. Only the clients who receive all of the shares from the D-TA's, will ever know their completed whole keys."),(0,m.kt)("p",null,"Industry commentators have long advocated a multi-factor solution. The novel feature of M-Pin and Chow-Choo is that the cryptographic secrets issued to clients or peers may be safely split up into any number of independent factors."),(0,m.kt)("p",null,"Each of these factors has the same form; they are points on an elliptic curve. To recreate the original secret, they are simply added together again -- it's as simple as that."),(0,m.kt)("p",null,"One factor might be derived from a key unlocked from the biometric login (ex: FaceID) which is available as a PIN input on a successful biometric authentication. This 'biometric based' PIN is, on Apple hardware, stored in the secure element of the device (something you are). Another factor might be the remainder token securely stored in the authenticator app on a smartphone (something you have). Yet a final piece can be a PIN or passphrase (something you know), which is secure as the M-Pin client secret cannot be brute force attacked offline."),(0,m.kt)("h3",{id:"decentralized-identity"},"Decentralized Identity"),(0,m.kt)("p",null,"Milagro applications use these identity based protocols in combination with classical cryptosystems where the endpoint generates a public/private key pair and the private key never leaves the application or device."),(0,m.kt)("p",null,"An entity running a Milagro application attaches the public keys it has generated upon initialization to a self sovereign identity document (ID Document), that only reveals a unique account code as identifier. This ID document is signed by the Milagro and distributed over a decentralized identity system built upon IPFS",(0,m.kt)("sup",{parentName:"p",id:"fnref-first"},(0,m.kt)("a",{parentName:"sup",href:"#fn-first",className:"footnote-ref"},"first")),", so each ID Document lives on an immutable, operation-based conflict-free replicated data structure (CRDT), which is accessible to any other Milagro application."),(0,m.kt)("p",null,(0,m.kt)("em",{parentName:"p"},"For further detail, please see the format specification for ID Documents.")),(0,m.kt)("h3",{id:"encrypted-envelope"},"Encrypted Envelope"),(0,m.kt)("p",null,"ID Documents enable messages, called Encrypted Envelopes, containing secrets to be sent between endpoints running Milagro software. This can include clients, servers and peers and Milagro ZKP-MFA Servers, ZKP-MFA clients and Decentralized Trust Authorities. The ID Documents of recipients are available to any endpoint, so their public keys can be used to secure secrets in transit. In the case of digital asset custody, these messages need to be part of a permanent record, available in a decentralized, immutable data structure (like a blockchain). Given the permanence of this data, the privacy design of these immutable records need to account for advances in quantum cryptography. "),(0,m.kt)("p",null,"Messages and immutable records are encrypted with AES-GCM at a 256-bit level with parameters anticipating quantum cryptography. It is necessary to know the recipient's public key, obtained via the ID Document, in order to encapsulate the encryption key for each recipient of the message or entity who has access to the Immutable Record."),(0,m.kt)("p",null,"SIKE keys pairs are generated locally by endpoints running Milagro software, are not received in shares from D-TAs. SIKE public keys are used by the sender of a message to encapsulate the AES 256-bit key used to create the Encrypted Envelope. An encapsulation takes place once for every recipient and is affixed to the Encrypted Envelope."),(0,m.kt)("p",null,"BLS signatures handle two jobs. Like SIKE key pairs, BLS signature key pairs are generated locally by endpoints running Milagro software, are not received in shares from D-TAs. The signatures these keys generate enable the non-repudiation of Encrypted Envelopes between endpoints and stored long term as immutable records. This is a classic use case of digital signatures, like PGP signatures over email."),(0,m.kt)("p",null,(0,m.kt)("em",{parentName:"p"},"For further detail, please see the format specification for Encrypted Envelopes.")),(0,m.kt)("p",null,"The other use of BLS signatures is more complex. As described previously, BLS signatures have unique properties. Milagro leverages its own Encrypted Envelope format to enable the BLS ability of splitting signing keys by with a secure mechanism to securely distribute the split BLS signing keys. When delivered securely to the right entities, these part shares of BLS signing keys themselves become signature keys. The thresholds of these signatures can be aggregated securely to produce an aggregated single signature which would have been produced by the original whole signing key prior to the original key being split. This signature can be verified by an aggregated public key."),(0,m.kt)("p",null,"Another capability is for a public key to be aggregated from multiple public keys in advance of aggregating signatures created by the corresponding private keys. These private keys are generated locally, and never leave the device, vs the method described previously. Signatures made from these keys can themselves be aggregated into a complete signature, verified by the aggregated public key."),(0,m.kt)("p",null,"These capabilities are well suited to safeguarding secrets with an example in the following section."),(0,m.kt)("h2",{id:"decentralized-trust-authorities-d-ta"},"Decentralized Trust Authorities: D-TA"),(0,m.kt)("p",null,"The Milagro framework protocols rely on Decentralized Trust Authorities for two jobs: Issuing shares of secrets, or safeguarding shares of secrets."),(0,m.kt)("p",null,"D-TAs can issue shares, or fractions, of Type-3 Pairing private keys to Milagro Applications, such as the Milagro ZKP-MFA Servers or clients or to other D-TAs, which can be any software or hardware applications that have embedded some Milagro code in order derive the functional capabilities."),(0,m.kt)("p",null,"These clients or peers become the only entities that know the completed whole keys assembled from shares issued by different Decentralized Trust Authorities."),(0,m.kt)("p",null,"Type-3 pairings were selected as they are the most efficient pairing and will work with non-supersingular pairing-friendly curves."),(0,m.kt)("p",null,"These operate as ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"G"),(0,m.kt)("mn",{parentName:"msub"},"1"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"G_1")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"G"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"1")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"}))))))))))," x ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"G"),(0,m.kt)("mn",{parentName:"msub"},"2")),(0,m.kt)("mo",{parentName:"mrow"},"\u2192"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"G"),(0,m.kt)("mi",{parentName:"msub"},"T"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"G_2\\rightarrow G_T")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"G"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"2")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"\u2192"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"G"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3283em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.13889em"}},"T")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))))))),", where ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"G"),(0,m.kt)("mn",{parentName:"msub"},"2"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"G_2")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"G"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"2")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"}))))))))))," is a particular group of points, again of the order ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"q")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"q")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"q"))))),", but on a twisted elliptic curve defined over an extension which is a divisor of ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"k")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"k")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03148em"}},"k"))))),"."),(0,m.kt)("p",null,"These curves can be constructed to be a near perfect fit at any required level of security. The pairing protocols within the Milagro framework all work on a Type-3 pairing."),(0,m.kt)("p",null,"One of the novel aspects of pairing-based cryptography is that deployed secrets are commonly represented as points on an elliptic curve, which are the result of multiplying a known point by a master secret ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"s")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"s")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"))))),"."),(0,m.kt)("p",null,"So for example a secret might be of the form ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mi",{parentName:"mrow"},"P")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"sP")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"P"))))),", where ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"P")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"P")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"P")))))," is known."),(0,m.kt)("p",null,"There are a number of interesting things we can do with secrets that have this form, that are not possible with the secrets that arise when using other cryptographic technologies."),(0,m.kt)("p",null,"For example they can be split into two, into ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"s"),(0,m.kt)("mn",{parentName:"msub"},"1")),(0,m.kt)("mi",{parentName:"mrow"},"P")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"s_1P")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"1")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"P")))))," and ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"s"),(0,m.kt)("mn",{parentName:"msub"},"2")),(0,m.kt)("mi",{parentName:"mrow"},"P")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"s_2P")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"2")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"P")))))," where ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"s"),(0,m.kt)("mn",{parentName:"msub"},"1")),(0,m.kt)("mo",{parentName:"mrow"},"+"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"s"),(0,m.kt)("mn",{parentName:"msub"},"2"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"s=s_1+s_2")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.7333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"1")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.5806em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"2")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"}))))))))))," and ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mi",{parentName:"mrow"},"P"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"s"),(0,m.kt)("mn",{parentName:"msub"},"1")),(0,m.kt)("mi",{parentName:"mrow"},"P"),(0,m.kt)("mo",{parentName:"mrow"},"+"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"s"),(0,m.kt)("mn",{parentName:"msub"},"2")),(0,m.kt)("mi",{parentName:"mrow"},"P")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"sP = s_1P +s_2P")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"P"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"1")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"P"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"2")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"P"))))),"."),(0,m.kt)("p",null,"In fact they can be just as easily split into multiple parts, just like chopping up a cucumber."),(0,m.kt)("p",null,"We can also add extra components to create a secret of the form ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"P"),(0,m.kt)("mn",{parentName:"msub"},"1")),(0,m.kt)("mo",{parentName:"mrow"},"+"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"P"),(0,m.kt)("mn",{parentName:"msub"},"2")),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"P"),(0,m.kt)("mn",{parentName:"msub"},"1")),(0,m.kt)("mo",{parentName:"mrow"},"+"),(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"P"),(0,m.kt)("mn",{parentName:"msub"},"2"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"s(P_1+P_2) = sP_1+sP_2")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"P"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"1")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"P"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"2")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"P"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"1")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"P"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"2")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))))))),"."),(0,m.kt)("p",null,"It is the flexibility that arises from this form of the secret that allows us to introduce the idea of chopping off a tiny sliver of the secret to support a PIN number."),(0,m.kt)("p",null,"It also facilitates the concept of ",(0,m.kt)("em",{parentName:"p"},"Time Permits")," as discussed in a later section."),(0,m.kt)("p",null,"Lastly, it enables Decentralized Trust."),(0,m.kt)("h3",{id:"issuing-secrets"},"Issuing Secrets"),(0,m.kt)("p",null,"A Trusted Authority will be in possession of a master secret ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"s")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"s")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"))))),", a random element of ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"F"),(0,m.kt)("mi",{parentName:"msub"},"q"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"F_q")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"F"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.1514em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.03588em"}},"q")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.2861em"}},(0,m.kt)("span",{parentName:"span"})))))))))),"."),(0,m.kt)("p",null,"A client secret is of the form ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"."),(0,m.kt)("mi",{parentName:"mrow"},"H"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"I"),(0,m.kt)("mi",{parentName:"mrow"},"D"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"s.H(ID)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"mord"},"."),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.08125em"}},"H"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07847em"}},"I"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"D"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"))))),", where ID is the client identity and ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"H"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"."),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"H(.)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.08125em"}},"H"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord"},"."),(0,m.kt)("span",{parentName:"span",className:"mclose"},")")))))," a hash function which maps to a point on ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"G"),(0,m.kt)("mn",{parentName:"msub"},"1"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"G_1")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"G"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"1")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))))))),"."),(0,m.kt)("p",null,"From prior art, we assume that ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"H")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"H")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.08125em"}},"H")))))," is modeled as a random oracle where ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"H"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"I"),(0,m.kt)("mi",{parentName:"mrow"},"D"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mi",{parentName:"mrow"},"r"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"_"),(0,m.kt)("mrow",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"mrow"},"I"),(0,m.kt)("mi",{parentName:"mrow"},"D")),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"."),(0,m.kt)("mi",{parentName:"mrow"},"P")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"H(ID) = r\\_{ID}.P")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.08125em"}},"H"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07847em"}},"I"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"D"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.9933em",verticalAlign:"-0.31em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"r"),(0,m.kt)("span",{parentName:"span",className:"mord",style:{marginRight:"0.02778em"}},"_"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07847em"}},"I"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"D")),(0,m.kt)("span",{parentName:"span",className:"mord"},"."),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"P")))))),(0,m.kt)("p",null,"where ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"r"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"_"),(0,m.kt)("mrow",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"mrow"},"I"),(0,m.kt)("mi",{parentName:"mrow"},"D")),(0,m.kt)("mo",{parentName:"mrow"},"\u2208"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"F"),(0,m.kt)("mi",{parentName:"msub"},"q"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"r\\_{ID}\\in F_q")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.9933em",verticalAlign:"-0.31em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"r"),(0,m.kt)("span",{parentName:"span",className:"mord",style:{marginRight:"0.02778em"}},"_"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07847em"}},"I"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"D")),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"\u2208"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.9694em",verticalAlign:"-0.2861em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"F"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.1514em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.03588em"}},"q")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.2861em"}},(0,m.kt)("span",{parentName:"span"}))))))))))," is random and ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"P")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"P")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"P")))))," is a fixed generator of ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"G"),(0,m.kt)("mn",{parentName:"msub"},"1"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"G_1")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"G"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"1")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))))))),"."),(0,m.kt)("p",null,"A Milagro ZKP-MFA Server will be issued with ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mi",{parentName:"mrow"},"Q")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"sQ")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8778em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"Q"))))),", where ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"Q")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"Q")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8778em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"Q")))))," is a fixed generator of ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"G"),(0,m.kt)("mn",{parentName:"msub"},"2"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"G_2")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"G"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"2")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))))))),"."),(0,m.kt)("p",null,"Note that this will be the only multiple of ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"s")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"s")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s")))))," in ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"G"),(0,m.kt)("mn",{parentName:"msub"},"2"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"G_2")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"G"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"2")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"}))))))))))," ever provided by the TA. Servers will always be associated with their own unique master secrets."),(0,m.kt)("p",null,"Note that the TA functionality can be trivially decentralized and distributed using a secret sharing scheme, to remove from the overall system a single point of compromise or coercion."),(0,m.kt)("p",null,"In the simplest possible case there may be two Decentralized Trusted Authorities (D-TAs), each of which independently maintains their own share of the master key."),(0,m.kt)("p",null,"So ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"s"),(0,m.kt)("mn",{parentName:"msub"},"1")),(0,m.kt)("mo",{parentName:"mrow"},"+"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"s"),(0,m.kt)("mn",{parentName:"msub"},"2"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"s=s_1+s_2")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.7333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"1")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.5806em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"2")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))))))),", and each D-TA issues a part-client key to the client ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"s"),(0,m.kt)("mn",{parentName:"msub"},"1")),(0,m.kt)("mi",{parentName:"mrow"},"H"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"I"),(0,m.kt)("mi",{parentName:"mrow"},"D"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"s_1 H(ID)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"1")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.08125em"}},"H"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07847em"}},"I"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"D"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")")))))," and ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"s"),(0,m.kt)("mn",{parentName:"msub"},"2")),(0,m.kt)("mi",{parentName:"mrow"},"H"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"I"),(0,m.kt)("mi",{parentName:"mrow"},"D"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"s_2 H(ID)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"2")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.08125em"}},"H"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07847em"}},"I"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"D"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"))))),", which the client, after receiving the shares, adds together to form their full key."),(0,m.kt)("p",null,"Now even if one D-TA is compromised, the client key is still safe."),(0,m.kt)("p",null,"In the age of self sovereign identity, any entity can be a Decentralized Trust Authority as long as its Beneficiary trusts it to securely issue shares of secrets, or hold them for safekeeping."),(0,m.kt)("h3",{id:"safekeeping-secrets"},"Safekeeping Secrets"),(0,m.kt)("p",null,"A D-TA may act as a Fiduciary over secrets where it can participate in a process to enable a Beneficiary to recover the secret. Using aggregated BLS signatures in a simple example, an entity running Milagro software may engage multiple D-TAs to act as Fiduciaries over its seed value used to generate and back up a cryptocurrency HD Wallet."),(0,m.kt)("p",null,"As described in",(0,m.kt)("sup",{parentName:"p",id:"fnref-first"},(0,m.kt)("a",{parentName:"sup",href:"#fn-first",className:"footnote-ref"},"first"))," the first step is for each D-TA to generate a key pair by choosing ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mi",{parentName:"mrow"},"k"),(0,m.kt)("mo",{parentName:"mrow"},(0,m.kt)("mover",{parentName:"mo"},(0,m.kt)("mo",{parentName:"mover"},(0,m.kt)("mo",{parentName:"mo"},"\u2190")),(0,m.kt)("mi",{parentName:"mover"},"s"))),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"double-struck"},"Z"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"_"),(0,m.kt)("mi",{parentName:"mrow"},"q")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"s k\\stackrel{s}{\\leftarrow}\\mathbb{Z}\\_{q}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.9683em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03148em"}},"k"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},(0,m.kt)("span",{parentName:"span",className:"mop op-limits"},(0,m.kt)("span",{parentName:"span",className:"vlist-t"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.9683em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-3em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.kt)("span",{parentName:"span"},(0,m.kt)("span",{parentName:"span",className:"mop"},"\u2190"))),(0,m.kt)("span",{parentName:"span",style:{top:"-3.5669em",marginLeft:"0em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"s"))))))))),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.9989em",verticalAlign:"-0.31em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathbb"},"Z"),(0,m.kt)("span",{parentName:"span",className:"mord",style:{marginRight:"0.02778em"}},"_"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"q"))))))," to compute:"),(0,m.kt)("div",{className:"math math-display"},(0,m.kt)("span",{parentName:"div",className:"katex-display"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"p"),(0,m.kt)("mi",{parentName:"mrow"},"k"),(0,m.kt)("mo",{parentName:"mrow"},"\u2190"),(0,m.kt)("mi",{parentName:"mrow"},"g"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"_"),(0,m.kt)("msup",{parentName:"mrow"},(0,m.kt)("mn",{parentName:"msup"},"2"),(0,m.kt)("mrow",{parentName:"msup"},(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mi",{parentName:"mrow"},"k")))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"p k\\leftarrow g\\_{2}^{s k}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8889em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"p"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03148em"}},"k"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"\u2190"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1.2091em",verticalAlign:"-0.31em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"g"),(0,m.kt)("span",{parentName:"span",className:"mord",style:{marginRight:"0.02778em"}},"_"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord"},"2")),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.8991em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-3.113em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"s"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.03148em"}},"k")))))))))))))),(0,m.kt)("p",null,"which outputs the ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"p"),(0,m.kt)("mi",{parentName:"mrow"},"k"),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mi",{parentName:"mrow"},"k"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"(p k, s k)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"p"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03148em"}},"k"),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03148em"}},"k"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"))))),"."),(0,m.kt)("p",null,"The Beneficiary would select which D-TA service providers (acting in concert) it would use to help it generate a secret. Assume a Beneficiary is also a participant in this protocol, it also runs a D-TA and acts as the designated combiner in the protocol."),(0,m.kt)("p",null,"In advance of creating the HD Wallet seed, a Beneficiary would elicit the services of Decentralized Trust Authorities to act as Fiduciaries in a decentralized secret recovery protocol. The Beneficiary's next step calculates the aggregate public key by running protocol ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mtext",{parentName:"mrow"},"KAg"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"{"),(0,m.kt)("mi",{parentName:"mrow"},"p"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"k"),(0,m.kt)("mn",{parentName:"msub"},"1")),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("mo",{parentName:"mrow"},"\u2026"),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("mi",{parentName:"mrow"},"p"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"k"),(0,m.kt)("mi",{parentName:"msub"},"n")),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"}"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\text{KAg}(\\{p k_1,\\ldots, p k_n\\})")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord text"},(0,m.kt)("span",{parentName:"span",className:"mord"},"KAg")),(0,m.kt)("span",{parentName:"span",className:"mopen"},"({"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"p"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03148em"}},"k"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0315em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"1")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"minner"},"\u2026"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"p"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03148em"}},"k"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.1514em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0315em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"n")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mclose"},"})")))))," using the D-TA's known public keys as input (who have agreed to act as Fiduciaries to this process) and also its own public key."),(0,m.kt)("p",null,"The Beneficiary then requests a signature ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"\u03c3")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\sigma")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"\u03c3")))))," on a message ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"m")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"m")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"m")))))," from each of the D-TAs acting as Fiduciaries, including itself. For each D-TA, singing is a single round protocol."),(0,m.kt)("p",null,"To finalize setup, each D-TA transmits its signature ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"\u03c3")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\sigma")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"\u03c3")))))," to the Beneficiary (acting as designated combiner). The Beneficiary generates its own signature and combines it with the received D-TA signatures for the final aggregated signature of ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"\u03c3"),(0,m.kt)("mo",{parentName:"mrow"},"\u2190"),(0,m.kt)("msubsup",{parentName:"mrow"},(0,m.kt)("mo",{parentName:"msubsup"},"\u220f"),(0,m.kt)("mrow",{parentName:"msubsup"},(0,m.kt)("mi",{parentName:"mrow"},"j"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mn",{parentName:"mrow"},"1")),(0,m.kt)("mi",{parentName:"msubsup"},"n")),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"s"),(0,m.kt)("mi",{parentName:"msub"},"j"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\sigma\\leftarrow\\prod_{j=1}^{n} s_{j}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"\u03c3"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"\u2190"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1.2401em",verticalAlign:"-0.4358em"}}),(0,m.kt)("span",{parentName:"span",className:"mop"},(0,m.kt)("span",{parentName:"span",className:"mop op-symbol small-op",style:{position:"relative",top:"0em"}},"\u220f"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.8043em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.4003em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.05724em"}},"j"),(0,m.kt)("span",{parentName:"span",className:"mrel mtight"},"="),(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"1")))),(0,m.kt)("span",{parentName:"span",style:{top:"-3.2029em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"n"))))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.4358em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3117em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.05724em"}},"j"))))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.2861em"}},(0,m.kt)("span",{parentName:"span"})))))))))),"."),(0,m.kt)("p",null,"The final signature is verified against the aggregated public key if the verifier function outputs 1. Assuming so, the setup completes by hashing the aggregated signature where ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"H"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mover",{parentName:"mrow",accent:"true"},(0,m.kt)("mi",{parentName:"mover"},"\u03c3"),(0,m.kt)("mo",{parentName:"mover"},"~")),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"H(\\tilde{\\sigma})")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.08125em"}},"H"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord accent"},(0,m.kt)("span",{parentName:"span",className:"vlist-t"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.6679em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-3em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"\u03c3")),(0,m.kt)("span",{parentName:"span",style:{top:"-3.35em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.kt)("span",{parentName:"span",className:"accent-body",style:{left:"-0.25em"}},(0,m.kt)("span",{parentName:"span",className:"mord"},"~"))))))),(0,m.kt)("span",{parentName:"span",className:"mclose"},")")))))," is the seed of the HD Wallet."),(0,m.kt)("p",null,"Assuming the Beneficiary has backed up their BLS signature key, recovering the HD Wallet seed from multiple Fiduciaries becomes as simple as re-running the setup protocol again. It is easy to envision Fiduciary services running D-TAs, responding and authenticating requests for recovering secrets."),(0,m.kt)("h2",{id:"summary"},"Summary"),(0,m.kt)("h3",{id:"pairing-and-pq-cryptography"},"Pairing and PQ Cryptography"),(0,m.kt)("p",null,"Milagro leverages a combination of pairing and post-quantum algorithms to distribute cryptographic operations and split cryptographic parameters, providing a level of security and functionality that is a step forward in when compared to the certificate backed cryptosystems in service today. With pairing cryptography, security systems such as multi-factor authentication using zero knowledge protocols, certificate-less authenticated key agreement with perfect forward secrecy and decentralized secret recovery can be deployed in real world scenarios. AES-256 bit encryption and post-quantum key encapsulation ensure that long-lived data is safe from intrusion, even in the face of a post-quantum adversary."),(0,m.kt)("h3",{id:"decentralized-cryptosystem"},"Decentralized Cryptosystem"),(0,m.kt)("p",null,"Bitcoin's blockchain provides an alternative distributed approach to managing a currency without the need for a central bank. With bitcoin, the ledger is distributed, not centralized. Milagro's cryptosystem is decentralized to create the same advantages as a distributed ledger. While architecturally different to the blockchain, Milagro's cryptosystem and the applications built on it are compatible with and can add significant value to cryptocurrencies and other decentralized networks. "),(0,m.kt)("p",null,"Milagro envisions a new class of cryptographic service providers called Decentralized Trust Authorities, or D-TAs for short. The purpose of a D-TA is to independently issue shares, or fractions, of cryptographic keys to Milagro clients and servers and application endpoints which have embedded Milagro cryptographic libraries. D-TA's also operate as 'Fiduciaries', to enable their 'Beneficiaries' to recover secrets in a decentralized manner, without keeping a share of the secret itself. D-TAs operate independently from each other, are isolated in totality, and completely unaware of the existence of other D-TAs."),(0,m.kt)("h3",{id:"no-single-point-of-compromise"},"No Single Point of Compromise"),(0,m.kt)("p",null,"Milagro entities receive issued shares cryptographic keys or signatures and combine them to create the whole completed key or signature, thus becoming the only audience who possess knowledge of the entire key or signature. If D-TAs are under separate organizational controls, current root key compromises and key escrow threats inherent in PKI systems are an order of magnitude harder to achieve in a Milagro cryptosystem.  An attacker would need to subvert all independent parties."),(0,m.kt)("p",null,"In other words, all D-TAs used to generate shares, or fractions, of keys for Milagro clients and servers must be compromised to create the equivalent of a PKI root key compromise. All D-TAs under the threshold needed to recreate a signature would need to be compromised (including the Beneficiary) in order to generate a final signature."),(0,m.kt)("hr",null),(0,m.kt)("admonition",{title:"See an error in this documentation? ",type:"note"},(0,m.kt)("p",{parentName:"admonition"},"Submit a pull request on the development branch of ",(0,m.kt)("a",{parentName:"p",href:"https://github.com/apache/incubator-milagro"},"Milagro Website Repo"),".")),(0,m.kt)("p",null,"Supported admonition types are: caution, note, important, tip, warning."),(0,m.kt)("div",{className:"footnotes"},(0,m.kt)("hr",{parentName:"div"}),(0,m.kt)("ol",{parentName:"div"},(0,m.kt)("li",{parentName:"ol",id:"fn-first"},(0,m.kt)("a",{parentName:"li",href:"https://github.com/ipfs/ipfs"},"IPFS"),(0,m.kt)("a",{parentName:"li",href:"#fnref-first",className:"footnote-backref"},"\u21a9")))))}k.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/b8f83f70.93ab5f6a.js b/assets/js/b8f83f70.93ab5f6a.js
new file mode 100644
index 0000000..c2c8e90
--- /dev/null
+++ b/assets/js/b8f83f70.93ab5f6a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3972],{3905:(t,e,a)=>{a.d(e,{Zo:()=>k,kt:()=>s});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 p(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 i(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 m=n.createContext({}),o=function(t){var e=n.useContext(m),a=e;return t&&(a="function"==typeof t?t(e):p(p({},e),t)),a},k=function(t){var e=o(t.components);return n.createElement(m.Provider,{value:e},t.children)},u="mdxType",d={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},N=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,l=t.originalType,m=t.parentName,k=i(t,["components","mdxType","originalType","parentName"]),u=o(a),N=r,s=u["".concat(m,".").concat(N)]||u[N]||d[N]||l;return a?n.createElement(s,p(p({ref:e},k),{},{components:a})):n.createElement(s,p({ref:e},k))}));function s(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=a.length,p=new Array(l);p[0]=N;var i={};for(var m in e)hasOwnProperty.call(e,m)&&(i[m]=e[m]);i.originalType=t,i[u]="string"==typeof t?t:r,p[1]=i;for(var o=2;o<l;o++)p[o]=a[o];return n.createElement.apply(null,p)}return n.createElement.apply(null,a)}N.displayName="MDXCreateElement"},9520:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>k,contentTitle:()=>m,default:()=>N,frontMatter:()=>i,metadata:()=>o,toc:()=>u});var n=a(7462),r=a(3366),l=(a(7294),a(3905)),p=["components"],i={id:"pair192",title:"PAIR192",sidebar_label:"PAIR192"},m=void 0,o={unversionedId:"cryptojs/pair192",id:"cryptojs/pair192",title:"PAIR192",description:"PAIR192",source:"@site/../docs/cryptojs/pair192.md",sourceDirName:"cryptojs",slug:"/cryptojs/pair192",permalink:"/docs/cryptojs/pair192",draft:!1,tags:[],version:"current",frontMatter:{id:"pair192",title:"PAIR192",sidebar_label:"PAIR192"},sidebar:"docs",previous:{title:"PAIR",permalink:"/docs/cryptojs/pair"},next:{title:"PAIR256",permalink:"/docs/cryptojs/pair256"}},k={},u=[{value:"PAIR192",id:"pair192",level:2},{value:"new PAIR192()",id:"new-pair192",level:3},{value:"PAIR192.line()",id:"pair192line",level:3},{value:"PAIR192.initmp()",id:"pair192initmp",level:3},{value:"PAIR192.miller(r, res)",id:"pair192millerr-res",level:3},{value:"PAIR192.another(r, P1, Q1)",id:"pair192anotherr-p1-q1",level:3},{value:"PAIR192.ate(P1, Q1)",id:"pair192atep1-q1",level:3},{value:"PAIR192.ate2(P1, Q1, R1, S1)",id:"pair192ate2p1-q1-r1-s1",level:3},{value:"PAIR192.fexp(m)",id:"pair192fexpm",level:3},{value:"PAIR192.lbits()",id:"pair192lbits",level:3},{value:"PAIR192.glv()",id:"pair192glv",level:3},{value:"PAIR192.gs()",id:"pair192gs",level:3},{value:"PAIR192.G1mul(P, e) \u21d2",id:"pair192g1mulp-e-",level:3},{value:"PAIR192.G2mul(P, e) \u21d2",id:"pair192g2mulp-e-",level:3},{value:"PAIR192.GTpow(d, e) \u21d2",id:"pair192gtpowd-e-",level:3}],d={toc:u};function N(t){var e=t.components,a=(0,r.Z)(t,p);return(0,l.kt)("wrapper",(0,n.Z)({},d,a,{components:e,mdxType:"MDXLayout"}),(0,l.kt)("a",{name:"PAIR192"}),(0,l.kt)("h2",{id:"pair192"},"PAIR192"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": global class",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}PAIR192{"}"}'),"  "),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#PAIR192"},"PAIR192"),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#new_PAIR192_new"},"new PAIR192()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#PAIR192.line"},".line()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#PAIR192.initmp"},".initmp()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#PAIR192.miller"},".miller(r, res)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#PAIR192.another"},".another(r, P1, Q1)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#PAIR192.ate"},".ate(P1, Q1)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#PAIR192.ate2"},".ate2(P1, Q1, R1, S1)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#PAIR192.fexp"},".fexp(m)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#PAIR192.lbits"},".lbits()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#PAIR192.glv"},".glv()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#PAIR192.gs"},".gs()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#PAIR192.G1mul"},".G1mul(P, e)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#PAIR192.G2mul"},".G2mul(P, e)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#PAIR192.GTpow"},".GTpow(d, e)")," \u21d2")))),(0,l.kt)("a",{name:"new_PAIR192_new"}),(0,l.kt)("h3",{id:"new-pair192"},"new PAIR192()"),(0,l.kt)("p",null,"Creates an instance of PAIR192"),(0,l.kt)("a",{name:"PAIR192.line"}),(0,l.kt)("h3",{id:"pair192line"},"PAIR192.line()"),(0,l.kt)("p",null,"Line function"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#PAIR192"},(0,l.kt)("code",null,"PAIR192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}PAIR192{"}"}'),"  "),(0,l.kt)("a",{name:"PAIR192.initmp"}),(0,l.kt)("h3",{id:"pair192initmp"},"PAIR192.initmp()"),(0,l.kt)("p",null,"prepare for multi-pairing"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#PAIR192"},(0,l.kt)("code",null,"PAIR192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}PAIR192{"}"}'),"  "),(0,l.kt)("a",{name:"PAIR192.miller"}),(0,l.kt)("h3",{id:"pair192millerr-res"},"PAIR192.miller(r, res)"),(0,l.kt)("p",null,"basic Miller loop"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#PAIR192"},(0,l.kt)("code",null,"PAIR192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}PAIR192{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"r"),(0,l.kt)("td",{parentName:"tr",align:null},"FP24 precomputed array of accumulated line functions")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"res"),(0,l.kt)("td",{parentName:"tr",align:null},"FP24 result")))),(0,l.kt)("a",{name:"PAIR192.another"}),(0,l.kt)("h3",{id:"pair192anotherr-p1-q1"},"PAIR192.another(r, P1, Q1)"),(0,l.kt)("p",null,"Precompute line functions for n-pairing"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#PAIR192"},(0,l.kt)("code",null,"PAIR192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}PAIR192{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"r"),(0,l.kt)("td",{parentName:"tr",align:null},"array of precomputed FP24 products of line functions")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"P1"),(0,l.kt)("td",{parentName:"tr",align:null},"An element of G2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Q1"),(0,l.kt)("td",{parentName:"tr",align:null},"An element of G1")))),(0,l.kt)("a",{name:"PAIR192.ate"}),(0,l.kt)("h3",{id:"pair192atep1-q1"},"PAIR192.ate(P1, Q1)"),(0,l.kt)("p",null,"Calculate Miller loop for Optimal ATE pairing e(P,Q)"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#PAIR192"},(0,l.kt)("code",null,"PAIR192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}PAIR192{"}"}'),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Result"),": r An element of GT i.e. result of the pairing calculation e(P,Q)  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"P1"),(0,l.kt)("td",{parentName:"tr",align:null},"An element of G2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Q1"),(0,l.kt)("td",{parentName:"tr",align:null},"An element of G1")))),(0,l.kt)("a",{name:"PAIR192.ate2"}),(0,l.kt)("h3",{id:"pair192ate2p1-q1-r1-s1"},"PAIR192.ate2(P1, Q1, R1, S1)"),(0,l.kt)("p",null,"Calculate Miller loop for Optimal ATE double-pairing e(P,Q).e(R,S)"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#PAIR192"},(0,l.kt)("code",null,"PAIR192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}PAIR192{"}"}'),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Result"),": r An element of GT i.e. result of the double pairing calculation e(P,Q).e(R,S)  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"P1"),(0,l.kt)("td",{parentName:"tr",align:null},"An element of G2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Q1"),(0,l.kt)("td",{parentName:"tr",align:null},"An element of G1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"R1"),(0,l.kt)("td",{parentName:"tr",align:null},"An element of G2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"S1"),(0,l.kt)("td",{parentName:"tr",align:null},"An element of G1")))),(0,l.kt)("a",{name:"PAIR192.fexp"}),(0,l.kt)("h3",{id:"pair192fexpm"},"PAIR192.fexp(m)"),(0,l.kt)("p",null,"Final exponentiation of pairing, converts output of Miller loop to element in GT"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#PAIR192"},(0,l.kt)("code",null,"PAIR192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}PAIR192{"}"}'),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Result"),": r m^((p^12-1)/r) where p is modulus and r is the group order  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"m"),(0,l.kt)("td",{parentName:"tr",align:null},"FP24 value")))),(0,l.kt)("a",{name:"PAIR192.lbits"}),(0,l.kt)("h3",{id:"pair192lbits"},"PAIR192.lbits()"),(0,l.kt)("p",null,"prepare ate parameter, n=6u+2 (BN) or n=u (BLS), n3=3","*","n"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#PAIR192"},(0,l.kt)("code",null,"PAIR192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}PAIR192{"}"}'),"  "),(0,l.kt)("a",{name:"PAIR192.glv"}),(0,l.kt)("h3",{id:"pair192glv"},"PAIR192.glv()"),(0,l.kt)("p",null,"GLV method"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#PAIR192"},(0,l.kt)("code",null,"PAIR192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}PAIR192{"}"}'),"  "),(0,l.kt)("a",{name:"PAIR192.gs"}),(0,l.kt)("h3",{id:"pair192gs"},"PAIR192.gs()"),(0,l.kt)("p",null,"Galbraith & Scott Method"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#PAIR192"},(0,l.kt)("code",null,"PAIR192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}PAIR192{"}"}'),"  "),(0,l.kt)("a",{name:"PAIR192.G1mul"}),(0,l.kt)("h3",{id:"pair192g1mulp-e-"},"PAIR192.G1mul(P, e) \u21d2"),(0,l.kt)("p",null,"Fast point multiplication of a member of the group G1 by a BIG number"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#PAIR192"},(0,l.kt)("code",null,"PAIR192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": R Member of G1 R=e.P",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}PAIR192{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"P"),(0,l.kt)("td",{parentName:"tr",align:null},"Member of G1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"e"),(0,l.kt)("td",{parentName:"tr",align:null},"BIG multiplier")))),(0,l.kt)("a",{name:"PAIR192.G2mul"}),(0,l.kt)("h3",{id:"pair192g2mulp-e-"},"PAIR192.G2mul(P, e) \u21d2"),(0,l.kt)("p",null,"Multiply P by e in group G2"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#PAIR192"},(0,l.kt)("code",null,"PAIR192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": R Member of G2 R=e.P",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}PAIR192{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"P"),(0,l.kt)("td",{parentName:"tr",align:null},"Member of G2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"e"),(0,l.kt)("td",{parentName:"tr",align:null},"BIG multiplier")))),(0,l.kt)("a",{name:"PAIR192.GTpow"}),(0,l.kt)("h3",{id:"pair192gtpowd-e-"},"PAIR192.GTpow(d, e) \u21d2"),(0,l.kt)("p",null,"Fast raising of a member of GT to a BIG power"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#PAIR192"},(0,l.kt)("code",null,"PAIR192")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": r d^e",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}PAIR192{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"d"),(0,l.kt)("td",{parentName:"tr",align:null},"Member of GT")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"e"),(0,l.kt)("td",{parentName:"tr",align:null},"BIG exponent")))))}N.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/c11c5242.9c21f4f8.js b/assets/js/c11c5242.9c21f4f8.js
new file mode 100644
index 0000000..85f1c5a
--- /dev/null
+++ b/assets/js/c11c5242.9c21f4f8.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1838],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>h});var a=r(7294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function n(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?n(Object(r),!0).forEach((function(t){i(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):n(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,i=function(e,t){if(null==e)return{};var r,a,i={},n=Object.keys(e);for(a=0;a<n.length;a++)r=n[a],t.indexOf(r)>=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(a=0;a<n.length;a++)r=n[a],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}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)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var r=e.components,i=e.mdxType,n=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),d=c(r),m=i,h=d["".concat(l,".").concat(m)]||d[m]||u[m]||n;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,i=t&&t.mdxType;if("string"==typeof e||i){var n=r.length,o=new Array(n);o[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[d]="string"==typeof e?e:i,o[1]=s;for(var c=2;c<n;c++)o[c]=r[c];return a.createElement.apply(null,o)}return a.createElement.apply(null,r)}m.displayName="MDXCreateElement"},5845:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>m,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var a=r(7462),i=r(3366),n=(r(7294),r(3905)),o=["components"],s={id:"d-ta-overview",title:"Decentralized Trust Authority Overview",sidebar_label:"D-TA Overview"},l=void 0,c={unversionedId:"d-ta-overview",id:"d-ta-overview",title:"Decentralized Trust Authority Overview",description:"VERSION: ALPHA RELEASE 0.1.0",source:"@site/../docs/d-ta-overview.md",sourceDirName:".",slug:"/d-ta-overview",permalink:"/docs/d-ta-overview",draft:!1,tags:[],version:"current",frontMatter:{id:"d-ta-overview",title:"Decentralized Trust Authority Overview",sidebar_label:"D-TA Overview"},sidebar:"docs",previous:{title:"UInt64",permalink:"/docs/cryptojs/unit64"},next:{title:"Quick Start",permalink:"/docs/dta-details/quickstart"}},p={},d=[{value:"VERSION: ALPHA RELEASE 0.1.0",id:"version-alpha-release-010",level:3},{value:"Release Schedule:",id:"release-schedule",level:4},{value:"Milagro D-TA Security",id:"milagro-d-ta-security",level:2},{value:"The Milagro D-TA Communication Protocol",id:"the-milagro-d-ta-communication-protocol",level:2}],u={toc:d};function m(e){var t=e.components,s=(0,i.Z)(e,o);return(0,n.kt)("wrapper",(0,a.Z)({},u,s,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h3",{id:"version-alpha-release-010"},"VERSION: ALPHA RELEASE 0.1.0"),(0,n.kt)("admonition",{title:"The Alpha Release of the D-TA is not for production use.",type:"important"}),(0,n.kt)("h4",{id:"release-schedule"},"Release Schedule:"),(0,n.kt)("p",null,"Beta Release: Q4 2019"),(0,n.kt)("p",null,"RC1 Release: Q1 2020"),(0,n.kt)("h1",{id:"introduction"},"Introduction"),(0,n.kt)("p",null,"The Apache Milagro (Incubating) Decentralized Trust Authority (D-TA) is a collaborative key management server. It has two primary functions. "),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("strong",{parentName:"li"},"Issue")," shares of identity-based Type-3 pairing secrets for initializing zero-knowledge proof multi-factor authentication (ZKP-MFA) networks of clients and authentication servers."),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("strong",{parentName:"li"},"Safeguards")," shares of generic secrets, acting independently but in conjunction with other D-TA nodes, for the benefit of other D-TA nodes. ")),(0,n.kt)("p",null,"In the use case where it issues shares, the D-TA holds nothing except for its Master Secret and acts as a distributed private key generation server. In the use case where it is safeguarding shares of secrets, it is up to the application developer to implement back-end application logic to hold those shares securely. Examples include using Hardware Security Modules (HSMs) via an on-board PKCS#11 implementation to create a realm of key encryption keys, or multi-party computation through BLS signature aggregation."),(0,n.kt)("h1",{id:"roles"},"Roles"),(0,n.kt)("p",null,"Operators of Decentralized Trust Authorities are segmented into three roles."),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"Principals")," - These entities operate a Milagro D-TA node to securely communicate with other D-TA nodes (Fiduciaries), employing them to issues shares of secrets or safeguard shares of secrets.")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"Fiduciaries")," - These entities operate ","\\","( 1 + n ","\\",") Milagro D-TAs to issue shares of secrets or safeguard shares of secrets.")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"Beneficiaries")," - These entities receive shares of secrets from Fiduciaries."))),(0,n.kt)("p",null,"A D-TA facilitates secure and auditable communication between entities and service providers who can keep shares of secret keys safe (Fiduciaries). The D-TA is written in Go and uses REST services based on the GoKit microservices framework. The D-TA uses IPFS to create a shared immutable log of transactions and relies on Milagro-Crypto-C for it's crypto. Future release candidates will incorporate Tendermint for consensus protocol."),(0,n.kt)("h1",{id:"safeguarding-secrets"},"Safeguarding Secrets"),(0,n.kt)("p",null,"In order to safeguard a secret using the D-TA a minimum of two roles are required: a client (Principal) and a server (Fiduciary). In addition a third party can be nominated as the ultimate recipient of the secret (Beneficiary). You can run a single D-TA to provide all three roles if you want to see it in action. See the ",(0,n.kt)("a",{parentName:"p",href:"/docs/dta-details/quickstart"},"quick start guide")," for instructions on how to do that."),(0,n.kt)("p",null,'This system can be imagined like a "network HSM". Below is a VERY simplified overview of the process:'),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Figure 1",src:r(8214).Z,width:"1283",height:"720"})),(0,n.kt)("h2",{id:"milagro-d-ta-security"},"Milagro D-TA Security"),(0,n.kt)("p",null,"The ",(0,n.kt)("strong",{parentName:"p"},"Seed")," is the focus of the system - the D-TA provides a method for Principals to communicate with Fiduciaries who can secure their secrets, it does not prescribe how the securing should be done. The most basic implementation of a D-TA should secure seeds in an HSM using a PKCS#11 interface. "),(0,n.kt)("p",null,"We hope that many custodial services will adopt the Milagro D-TA as a communication protocol and that they will bring a profusion of security paradigms, by working together we can make a dynamic market place for custodial services and together make the Internet a safer place."),(0,n.kt)("h2",{id:"the-milagro-d-ta-communication-protocol"},"The Milagro D-TA Communication Protocol"),(0,n.kt)("p",null,"The D-TA provides a secure, distributed method of communication between Beneficiaries, Principals and Fiduciaries. It aims to solve the following problems:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"How can actors in the system be identified and trusted?"),(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"Answer:")," ",(0,n.kt)("a",{parentName:"p",href:"/docs/dta-details/identity-documents"},"Identity Documents"))),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"How can records of interactions between actors in the system be trusted and verified?"),(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"Answer:")," ",(0,n.kt)("a",{parentName:"p",href:"/docs/dta-details/encrypted-envelope"},"Encrypted Envelopes")," via ",(0,n.kt)("a",{parentName:"p",href:"/docs/dta-details/ipfs"},"IPFS"))),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},'How can different custodial services provide their own "special security sauce"?'),(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"Answer:")," ",(0,n.kt)("a",{parentName:"p",href:"/docs/dta-details/plugins-overview"},"Plugins")))),(0,n.kt)("p",null,"A more complete view of the Milagro D-TA ecosystem is shown below"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Figure 1",src:r(8294).Z,width:"1672",height:"1095"})))}m.isMDXComponent=!0},8214:(e,t,r)=>{r.d(t,{Z:()=>a});const a=r.p+"assets/images/RC1-Overview-1-df66e3e41d643bfeb8ad2c77160b6d97.png"},8294:(e,t,r)=>{r.d(t,{Z:()=>a});const a=r.p+"assets/images/RC1-537ade04d4b9de9c84709b309c333790.png"}}]);
\ No newline at end of file
diff --git a/assets/js/c2075afd.6d411f80.js b/assets/js/c2075afd.6d411f80.js
new file mode 100644
index 0000000..9e3331c
--- /dev/null
+++ b/assets/js/c2075afd.6d411f80.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9290],{3905:(t,e,a)=>{a.d(e,{Zo:()=>o,kt:()=>s});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 p(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 i(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 k=n.createContext({}),m=function(t){var e=n.useContext(k),a=e;return t&&(a="function"==typeof t?t(e):p(p({},e),t)),a},o=function(t){var e=m(t.components);return n.createElement(k.Provider,{value:e},t.children)},c="mdxType",u={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},d=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,l=t.originalType,k=t.parentName,o=i(t,["components","mdxType","originalType","parentName"]),c=m(a),d=r,s=c["".concat(k,".").concat(d)]||c[d]||u[d]||l;return a?n.createElement(s,p(p({ref:e},o),{},{components:a})):n.createElement(s,p({ref:e},o))}));function s(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=a.length,p=new Array(l);p[0]=d;var i={};for(var k in e)hasOwnProperty.call(e,k)&&(i[k]=e[k]);i.originalType=t,i[c]="string"==typeof t?t:r,p[1]=i;for(var m=2;m<l;m++)p[m]=a[m];return n.createElement.apply(null,p)}return n.createElement.apply(null,a)}d.displayName="MDXCreateElement"},1196:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>o,contentTitle:()=>k,default:()=>d,frontMatter:()=>i,metadata:()=>m,toc:()=>c});var n=a(7462),r=a(3366),l=(a(7294),a(3905)),p=["components"],i={id:"ecp2",title:"ECP2",sidebar_label:"ECP2"},k=void 0,m={unversionedId:"cryptojs/ecp2",id:"cryptojs/ecp2",title:"ECP2",description:"ECP2",source:"@site/../docs/cryptojs/ecp2.md",sourceDirName:"cryptojs",slug:"/cryptojs/ecp2",permalink:"/docs/cryptojs/ecp2",draft:!1,tags:[],version:"current",frontMatter:{id:"ecp2",title:"ECP2",sidebar_label:"ECP2"},sidebar:"docs",previous:{title:"ECP",permalink:"/docs/cryptojs/ecp"},next:{title:"ECP4",permalink:"/docs/cryptojs/ecp4"}},o={},c=[{value:"ECP2",id:"ecp2",level:2},{value:"new ECP2()",id:"new-ecp2",level:3},{value:"ecP2.is_infinity(1)",id:"ecp2is_infinity1",level:3},{value:"ecP2.copy(P)",id:"ecp2copyp",level:3},{value:"ecP2.inf()",id:"ecp2inf",level:3},{value:"ecP2.cmove()",id:"ecp2cmove",level:3},{value:"ecP2.select()",id:"ecp2select",level:3},{value:"ecP2.equals(Q)",id:"ecp2equalsq",level:3},{value:"ecP2.neg()",id:"ecp2neg",level:3},{value:"ecP2.affine()",id:"ecp2affine",level:3},{value:"ecP2.getX()",id:"ecp2getx",level:3},{value:"ecP2.getY()",id:"ecp2gety",level:3},{value:"ecP2.getx()",id:"ecp2getx-1",level:3},{value:"ecP2.gety()",id:"ecp2gety-1",level:3},{value:"ecP2.getz()",id:"ecp2getz",level:3},{value:"ecP2.toBytes(b)",id:"ecp2tobytesb",level:3},{value:"ecP2.toString() \u21d2",id:"ecp2tostring-",level:3},{value:"ecP2.setxy(ix, iy)",id:"ecp2setxyix-iy",level:3},{value:"ecP2.setx(ix)",id:"ecp2setxix",level:3},{value:"ecP2.frob()",id:"ecp2frob",level:3},{value:"ecP2.dbl()",id:"ecp2dbl",level:3},{value:"ecP2.add()",id:"ecp2add",level:3},{value:"ecP2.sub(Q)",id:"ecp2subq",level:3},{value:"ecP2.mul(e)",id:"ecp2mule",level:3},{value:"ECP2.generator()",id:"ecp2generator",level:3},{value:"ECP2.fromBytes(b)",id:"ecp2frombytesb",level:3},{value:"ECP2.RHS(x)",id:"ecp2rhsx",level:3},{value:"ECP2.mul4()",id:"ecp2mul4",level:3}],u={toc:c};function d(t){var e=t.components,a=(0,r.Z)(t,p);return(0,l.kt)("wrapper",(0,n.Z)({},u,a,{components:e,mdxType:"MDXLayout"}),(0,l.kt)("a",{name:"ECP2"}),(0,l.kt)("h2",{id:"ecp2"},"ECP2"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": global class",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP2{"}"}'),"  "),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP2"},"ECP2"),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#new_ECP2_new"},"new ECP2()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("em",{parentName:"li"},"instance"),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP2+is_infinity"},".is_infinity(1)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP2+copy"},".copy(P)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP2+inf"},".inf()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP2+cmove"},".cmove()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP2+select"},".select()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP2+equals"},".equals(Q)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP2+neg"},".neg()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP2+affine"},".affine()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP2+getX"},".getX()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP2+getY"},".getY()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP2+getx"},".getx()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP2+gety"},".gety()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP2+getz"},".getz()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP2+toBytes"},".toBytes(b)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP2+toString"},".toString()")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP2+setxy"},".setxy(ix, iy)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP2+setx"},".setx(ix)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP2+frob"},".frob()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP2+dbl"},".dbl()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP2+add"},".add()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP2+sub"},".sub(Q)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP2+mul"},".mul(e)")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("em",{parentName:"li"},"static"),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP2.generator"},".generator()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP2.fromBytes"},".fromBytes(b)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP2.RHS"},".RHS(x)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP2.mul4"},".mul4()"))))))),(0,l.kt)("a",{name:"new_ECP2_new"}),(0,l.kt)("h3",{id:"new-ecp2"},"new ECP2()"),(0,l.kt)("p",null,"Creates an instance of ECP2"),(0,l.kt)("a",{name:"ECP2+is_infinity"}),(0,l.kt)("h3",{id:"ecp2is_infinity1"},"ecP2.is_infinity(1)"),(0,l.kt)("p",null,"Tests for ECP2 point equal to infinity"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP2"},(0,l.kt)("code",null,"ECP2")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP2{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(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},"if infinity, else returns 0")))),(0,l.kt)("a",{name:"ECP2+copy"}),(0,l.kt)("h3",{id:"ecp2copyp"},"ecP2.copy(P)"),(0,l.kt)("p",null,"Copy ECP2 point to another ECP2 point"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP2"},(0,l.kt)("code",null,"ECP2")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP2{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"P"),(0,l.kt)("td",{parentName:"tr",align:null},"ECP2 instance")))),(0,l.kt)("a",{name:"ECP2+inf"}),(0,l.kt)("h3",{id:"ecp2inf"},"ecP2.inf()"),(0,l.kt)("p",null,"Set ECP2 to point-at-infinity"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP2"},(0,l.kt)("code",null,"ECP2")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP2{"}"}'),"  "),(0,l.kt)("a",{name:"ECP2+cmove"}),(0,l.kt)("h3",{id:"ecp2cmove"},"ecP2.cmove()"),(0,l.kt)("p",null,"conditional move of Q to P dependant on d"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP2"},(0,l.kt)("code",null,"ECP2")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP2{"}"}'),"  "),(0,l.kt)("a",{name:"ECP2+select"}),(0,l.kt)("h3",{id:"ecp2select"},"ecP2.select()"),(0,l.kt)("p",null,"Constant time select from pre-computed table"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP2"},(0,l.kt)("code",null,"ECP2")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP2{"}"}'),"  "),(0,l.kt)("a",{name:"ECP2+equals"}),(0,l.kt)("h3",{id:"ecp2equalsq"},"ecP2.equals(Q)"),(0,l.kt)("p",null,"Test P == Q"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP2"},(0,l.kt)("code",null,"ECP2")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP2{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Q"),(0,l.kt)("td",{parentName:"tr",align:null},"ECP2 instance")))),(0,l.kt)("a",{name:"ECP2+neg"}),(0,l.kt)("h3",{id:"ecp2neg"},"ecP2.neg()"),(0,l.kt)("p",null,"set this=-this"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP2"},(0,l.kt)("code",null,"ECP2")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP2{"}"}'),"  "),(0,l.kt)("a",{name:"ECP2+affine"}),(0,l.kt)("h3",{id:"ecp2affine"},"ecP2.affine()"),(0,l.kt)("p",null,"convert this to affine, from (x,y,z) to (x,y)"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP2"},(0,l.kt)("code",null,"ECP2")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP2{"}"}'),"  "),(0,l.kt)("a",{name:"ECP2+getX"}),(0,l.kt)("h3",{id:"ecp2getx"},"ecP2.getX()"),(0,l.kt)("p",null,"extract affine x as ctx.FP2"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP2"},(0,l.kt)("code",null,"ECP2")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP2{"}"}'),"  "),(0,l.kt)("a",{name:"ECP2+getY"}),(0,l.kt)("h3",{id:"ecp2gety"},"ecP2.getY()"),(0,l.kt)("p",null,"extract affine y as ctx.FP2"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP2"},(0,l.kt)("code",null,"ECP2")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP2{"}"}'),"  "),(0,l.kt)("a",{name:"ECP2+getx"}),(0,l.kt)("h3",{id:"ecp2getx-1"},"ecP2.getx()"),(0,l.kt)("p",null,"extract projective x"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP2"},(0,l.kt)("code",null,"ECP2")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP2{"}"}'),"  "),(0,l.kt)("a",{name:"ECP2+gety"}),(0,l.kt)("h3",{id:"ecp2gety-1"},"ecP2.gety()"),(0,l.kt)("p",null,"extract projective y"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP2"},(0,l.kt)("code",null,"ECP2")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP2{"}"}'),"  "),(0,l.kt)("a",{name:"ECP2+getz"}),(0,l.kt)("h3",{id:"ecp2getz"},"ecP2.getz()"),(0,l.kt)("p",null,"extract projective z"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP2"},(0,l.kt)("code",null,"ECP2")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP2{"}"}'),"  "),(0,l.kt)("a",{name:"ECP2+toBytes"}),(0,l.kt)("h3",{id:"ecp2tobytesb"},"ecP2.toBytes(b)"),(0,l.kt)("p",null,"convert this to byte arrayextract projective x"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP2"},(0,l.kt)("code",null,"ECP2")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP2{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"b"),(0,l.kt)("td",{parentName:"tr",align:null},"byte array output")))),(0,l.kt)("a",{name:"ECP2+toString"}),(0,l.kt)("h3",{id:"ecp2tostring-"},"ecP2.toString() \u21d2"),(0,l.kt)("p",null,"convert this to hex string"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP2"},(0,l.kt)("code",null,"ECP2")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": hex string",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP2{"}"}'),"  "),(0,l.kt)("a",{name:"ECP2+setxy"}),(0,l.kt)("h3",{id:"ecp2setxyix-iy"},"ecP2.setxy(ix, iy)"),(0,l.kt)("p",null,"set this=(x,y)"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP2"},(0,l.kt)("code",null,"ECP2")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP2{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ix"),(0,l.kt)("td",{parentName:"tr",align:null},"x-value")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"iy"),(0,l.kt)("td",{parentName:"tr",align:null},"y-value")))),(0,l.kt)("a",{name:"ECP2+setx"}),(0,l.kt)("h3",{id:"ecp2setxix"},"ecP2.setx(ix)"),(0,l.kt)("p",null,"set this=(x,.)"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP2"},(0,l.kt)("code",null,"ECP2")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP2{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ix"),(0,l.kt)("td",{parentName:"tr",align:null},"x-value")))),(0,l.kt)("a",{name:"ECP2+frob"}),(0,l.kt)("h3",{id:"ecp2frob"},"ecP2.frob()"),(0,l.kt)("p",null,"set this","*","=q, where q is Modulus, using Frobenius"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP2"},(0,l.kt)("code",null,"ECP2")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP2{"}"}'),"  "),(0,l.kt)("a",{name:"ECP2+dbl"}),(0,l.kt)("h3",{id:"ecp2dbl"},"ecP2.dbl()"),(0,l.kt)("p",null,"this+=this"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP2"},(0,l.kt)("code",null,"ECP2")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP2{"}"}'),"  "),(0,l.kt)("a",{name:"ECP2+add"}),(0,l.kt)("h3",{id:"ecp2add"},"ecP2.add()"),(0,l.kt)("p",null,"Adds ECP2 instances"),(0,l.kt)("p",null,"param Q ECP2 instance"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP2"},(0,l.kt)("code",null,"ECP2")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP2{"}"}'),"  "),(0,l.kt)("a",{name:"ECP2+sub"}),(0,l.kt)("h3",{id:"ecp2subq"},"ecP2.sub(Q)"),(0,l.kt)("p",null,"Subtracts ECP instance Q  from this"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP2"},(0,l.kt)("code",null,"ECP2")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP2{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Q"),(0,l.kt)("td",{parentName:"tr",align:null},"ECP2 instance")))),(0,l.kt)("a",{name:"ECP2+mul"}),(0,l.kt)("h3",{id:"ecp2mule"},"ecP2.mul(e)"),(0,l.kt)("p",null,"Multiplies an ECP2 instance P by a BIG, side-channel resistant"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP2"},(0,l.kt)("code",null,"ECP2")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP2{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"e"),(0,l.kt)("td",{parentName:"tr",align:null},"BIG number multiplier")))),(0,l.kt)("a",{name:"ECP2.generator"}),(0,l.kt)("h3",{id:"ecp2generator"},"ECP2.generator()"),(0,l.kt)("p",null,"Set group generator"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP2"},(0,l.kt)("code",null,"ECP2")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP2{"}"}'),"  "),(0,l.kt)("a",{name:"ECP2.fromBytes"}),(0,l.kt)("h3",{id:"ecp2frombytesb"},"ECP2.fromBytes(b)"),(0,l.kt)("p",null,"convert from byte array to point"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP2"},(0,l.kt)("code",null,"ECP2")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP2{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"b"),(0,l.kt)("td",{parentName:"tr",align:null},"input byte array")))),(0,l.kt)("a",{name:"ECP2.RHS"}),(0,l.kt)("h3",{id:"ecp2rhsx"},"ECP2.RHS(x)"),(0,l.kt)("p",null,"Calculate RHS of curve equation x^3+B"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP2"},(0,l.kt)("code",null,"ECP2")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP2{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"x"),(0,l.kt)("td",{parentName:"tr",align:null},"x-value")))),(0,l.kt)("a",{name:"ECP2.mul4"}),(0,l.kt)("h3",{id:"ecp2mul4"},"ECP2.mul4()"),(0,l.kt)("p",null,"Calculate P=u0.Q0+u1_Q1+u2_Q2+u3","*","Q3"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP2"},(0,l.kt)("code",null,"ECP2")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP2{"}"}')))}d.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/c21e361c.49396231.js b/assets/js/c21e361c.49396231.js
new file mode 100644
index 0000000..4efe739
--- /dev/null
+++ b/assets/js/c21e361c.49396231.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9634],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>m});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 l(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 p=a.createContext({}),c=function(e){var t=a.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},s=function(e){var t=c(e.components);return a.createElement(p.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},g=a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,i=e.originalType,p=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),u=c(r),g=n,m=u["".concat(p,".").concat(g)]||u[g]||d[g]||i;return r?a.createElement(m,o(o({ref:t},s),{},{components:r})):a.createElement(m,o({ref:t},s))}));function m(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=r.length,o=new Array(i);o[0]=g;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[u]="string"==typeof e?e:n,o[1]=l;for(var c=2;c<i;c++)o[c]=r[c];return a.createElement.apply(null,o)}return a.createElement.apply(null,r)}g.displayName="MDXCreateElement"},1475:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>p,default:()=>g,frontMatter:()=>l,metadata:()=>c,toc:()=>u});var a=r(7462),n=r(3366),i=(r(7294),r(3905)),o=["components"],l={id:"api",title:"API",sidebar_label:"API"},p=void 0,c={unversionedId:"dta-details/api",id:"dta-details/api",title:"API",description:'Open-API specifications are provided for the core "vanilla" Milagro D-TA HTTP REST services and for both the shipped plugins: Bitcoin Wallet Security and Safeguard Secret.',source:"@site/../docs/dta-details/api.md",sourceDirName:"dta-details",slug:"/dta-details/api",permalink:"/docs/dta-details/api",draft:!1,tags:[],version:"current",frontMatter:{id:"api",title:"API",sidebar_label:"API"},sidebar:"docs",previous:{title:"Quick Start",permalink:"/docs/dta-details/quickstart"},next:{title:"Configuration",permalink:"/docs/dta-details/configuration"}},s={},u=[{value:"Testing The API",id:"testing-the-api",level:2}],d={toc:u};function g(e){var t=e.components,r=(0,n.Z)(e,o);return(0,i.kt)("wrapper",(0,a.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,'Open-API specifications are provided for the core "vanilla" Milagro D-TA HTTP REST services and for both the shipped plugins: Bitcoin Wallet Security and Safeguard Secret.'),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://raw.githubusercontent.com/apache/incubator-milagro-dta/develop/open-api.yaml"},"Standard API")," The ",(0,i.kt)("a",{parentName:"li",href:"/swagger/index.html"},"Swagger UI is available at this link."),"   "),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://raw.githubusercontent.com/apache/incubator-milagro-dta/develop/pkg/bitcoinplugin/open-api.yaml"},"Bitcoin Wallet Security Plugin API"),"   "),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://raw.githubusercontent.com/apache/incubator-milagro-dta/develop/pkg/safeguardsecret/open-api.yaml"},"Safeguard Secret API"),"   ")),(0,i.kt)("h2",{id:"testing-the-api"},"Testing The API"),(0,i.kt)("p",null,"This assumes that your local DTA is running on port 5556 as described in the ",(0,i.kt)("a",{parentName:"p",href:"/docs/dta-details/quickstart"},"quick start guide"),"."),(0,i.kt)("p",null,"Instructions for installing Swagger UI can be found ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/swagger-api/swagger-ui/blob/master/docs/usage/installation.md"},"here"),"."),(0,i.kt)("p",null,"For example..."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"\ndocker pull swaggerapi/swagger-ui  \n\ndocker run -p 80:8080 swaggerapi/swagger-ui\n\n\n")),(0,i.kt)("p",null,"In your browser hit http://localhost:80"),(0,i.kt)("p",null,"Paste the URL of one of the API docs above into the text box at the top of the screen. "),(0,i.kt)("p",null,"Please let us know your comments by subscribing to ",(0,i.kt)("a",{parentName:"p",href:"mailto:dev@milagro.apache.org"},"dev@milagro.apache.org")," by sending an email to ",(0,i.kt)("a",{parentName:"p",href:"mailto:dev-subscribe@milagro.apache.org"},"dev-subscribe@milagro.apache.org"),"."))}g.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/c4f5d8e4.dd05c200.js b/assets/js/c4f5d8e4.dd05c200.js
new file mode 100644
index 0000000..2b5d597
--- /dev/null
+++ b/assets/js/c4f5d8e4.dd05c200.js
@@ -0,0 +1 @@
+(self.webpackChunk=self.webpackChunk||[]).push([[4195],{2841:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r=n(4578),l=n(3285),a=(n(5423),n(7294)),s=function(e){return a.createElement("div",e)},c=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){return a.createElement("div",{className:"mainContainer",style:{display:"flex",alignItems:"center",height:"60vh",justifyContent:"center"}},a.createElement(s,{padding:["bottom","top"]},a.createElement("div",{className:"showcaseSection",style:{display:"flex",alignItems:"center",justifyContent:"center"}},a.createElement("div",{className:"prose",style:{alignItems:"center",justifyContent:"center",margin:"auto"}},a.createElement("img",{src:"images/milagro_logo.svg",alt:"Apache Milagro logo",style:{margin:"auto",alignItems:"center",display:"flex"}}),a.createElement("br",null),a.createElement("br",null),a.createElement("br",null),a.createElement("br",null),a.createElement("p",null,"Core security infrastructure for decentralized networks and distributed systems")),a.createElement("p",null," "))))},t}(a.Component);const i=function(e){return a.createElement(l.Z,null,a.createElement(c,e))}},3411:e=>{function t(e){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}t.keys=()=>[],t.resolve=t,t.id=3411,e.exports=t},2183:()=>{},3024:()=>{},2715:()=>{},3611:()=>{},8353:()=>{},1210:()=>{},3454:()=>{}}]);
\ No newline at end of file
diff --git a/assets/js/c511d3db.b177362f.js b/assets/js/c511d3db.b177362f.js
new file mode 100644
index 0000000..eac00f0
--- /dev/null
+++ b/assets/js/c511d3db.b177362f.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1334],{3905:(t,e,a)=>{a.d(e,{Zo:()=>k,kt:()=>s});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 p(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 i(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 m=n.createContext({}),N=function(t){var e=n.useContext(m),a=e;return t&&(a="function"==typeof t?t(e):p(p({},e),t)),a},k=function(t){var e=N(t.components);return n.createElement(m.Provider,{value:e},t.children)},d="mdxType",u={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},o=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,l=t.originalType,m=t.parentName,k=i(t,["components","mdxType","originalType","parentName"]),d=N(a),o=r,s=d["".concat(m,".").concat(o)]||d[o]||u[o]||l;return a?n.createElement(s,p(p({ref:e},k),{},{components:a})):n.createElement(s,p({ref:e},k))}));function s(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=a.length,p=new Array(l);p[0]=o;var i={};for(var m in e)hasOwnProperty.call(e,m)&&(i[m]=e[m]);i.originalType=t,i[d]="string"==typeof t?t:r,p[1]=i;for(var N=2;N<l;N++)p[N]=a[N];return n.createElement.apply(null,p)}return n.createElement.apply(null,a)}o.displayName="MDXCreateElement"},5467:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>k,contentTitle:()=>m,default:()=>o,frontMatter:()=>i,metadata:()=>N,toc:()=>d});var n=a(7462),r=a(3366),l=(a(7294),a(3905)),p=["components"],i={id:"mpin256",title:"MPIN256",sidebar_label:"MPIN256"},m=void 0,N={unversionedId:"cryptojs/mpin256",id:"cryptojs/mpin256",title:"MPIN256",description:"MPIN256",source:"@site/../docs/cryptojs/mpin256.md",sourceDirName:"cryptojs",slug:"/cryptojs/mpin256",permalink:"/docs/cryptojs/mpin256",draft:!1,tags:[],version:"current",frontMatter:{id:"mpin256",title:"MPIN256",sidebar_label:"MPIN256"},sidebar:"docs",previous:{title:"MPIN192",permalink:"/docs/cryptojs/mpin192"},next:{title:"PAIR",permalink:"/docs/cryptojs/pair"}},k={},d=[{value:"MPIN256",id:"mpin256",level:2},{value:"new MPIN256()",id:"new-mpin256",level:3},{value:"MPIN256.today() \u21d2",id:"mpin256today-",level:3},{value:"MPIN256.bytestostring(b) \u21d2",id:"mpin256bytestostringb-",level:3},{value:"MPIN256.stringtobytes(s) \u21d2",id:"mpin256stringtobytess-",level:3},{value:"MPIN256.comparebytes(a, b) \u21d2",id:"mpin256comparebytesa-b-",level:3},{value:"MPIN256.mpin_hash(c, U) \u21d2",id:"mpin256mpin_hashc-u-",level:3},{value:"MPIN256.hashit(sha, n, B) \u21d2",id:"mpin256hashitsha-n-b-",level:3},{value:"MPIN256.map(u, cb) \u21d2",id:"mpin256mapu-cb-",level:3},{value:"MPIN256.unmap(u, P) \u21d2",id:"mpin256unmapu-p-",level:3},{value:"MPIN256.RECOMBINE_G1(R1, R2, R) \u21d2",id:"mpin256recombine_g1r1-r2-r-",level:3},{value:"MPIN256.RECOMBINE_G2(W1, W2, W) \u21d2",id:"mpin256recombine_g2w1-w2-w-",level:3},{value:"MPIN256.HASH_ID(sha, ID) \u21d2",id:"mpin256hash_idsha-id-",level:3},{value:"MPIN256.RANDOM_GENERATE(rng, S) \u21d2",id:"mpin256random_generaterng-s-",level:3},{value:"MPIN256.EXTRACT_PIN() \u21d2",id:"mpin256extract_pin-",level:3},{value:"MPIN256.EXTRACT_FACTOR() \u21d2",id:"mpin256extract_factor-",level:3},{value:"MPIN256.RESTORE_FACTOR() \u21d2",id:"mpin256restore_factor-",level:3},{value:"MPIN256.GET_SERVER_SECRET(S, SST) \u21d2",id:"mpin256get_server_secrets-sst-",level:3},{value:"MPIN256.GET_G1_MULTIPLE(type, x, G, W) \u21d2",id:"mpin256get_g1_multipletype-x-g-w-",level:3},{value:"MPIN256.GET_CLIENT_SECRET(S, CID, CST) \u21d2",id:"mpin256get_client_secrets-cid-cst-",level:3},{value:"MPIN256.GET_CLIENT_PERMIT(sha, date, S, CID, CTT) \u21d2",id:"mpin256get_client_permitsha-date-s-cid-ctt-",level:3},{value:"MPIN256.CLIENT_1(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT) \u21d2",id:"mpin256client_1sha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-",level:3},{value:"MPIN256.CLIENT_2(X, Y, SEC) \u21d2",id:"mpin256client_2x-y-sec-",level:3},{value:"MPIN256.SERVER_1(sha, date, CID, HID, HTID) \u21d2",id:"mpin256server_1sha-date-cid-hid-htid-",level:3},{value:"MPIN256.SERVER_2(date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, Pa) \u21d2",id:"mpin256server_2date-hid-htid-y-sst-xid-xcid-msec-e-f-pa-",level:3},{value:"MPIN256.KANGAROO(E, F) \u21d2",id:"mpin256kangarooe-f-",level:3},{value:"MPIN256.GET_TIME() \u21d2",id:"mpin256get_time-",level:3},{value:"MPIN256.CLIENT(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT, TimeValue, Y, Message) \u21d2",id:"mpin256clientsha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-timevalue-y-message-",level:3},{value:"MPIN256.SERVER(sha, date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, CID, TimeValue, MESSAGE, Pa) \u21d2",id:"mpin256serversha-date-hid-htid-y-sst-xid-xcid-msec-e-f-cid-timevalue-message-pa-",level:3},{value:"MPIN256.PRECOMPUTE(TOKEN, CID, G1, G2) \u21d2",id:"mpin256precomputetoken-cid-g1-g2-",level:3},{value:"MPIN256.HASH_ALL(sha, HID, xID, xCID, SEC, Y, R, W) \u21d2",id:"mpin256hash_allsha-hid-xid-xcid-sec-y-r-w-",level:3},{value:"MPIN256.CLIENT_KEY(sha, G1, G2, pin, R, X, H, wCID, CK) \u21d2",id:"mpin256client_keysha-g1-g2-pin-r-x-h-wcid-ck-",level:3},{value:"MPIN256.SERVER_KEY(h, Z, SST, W, H, HID, xID, xCID, SK) \u21d2",id:"mpin256server_keyh-z-sst-w-h-hid-xid-xcid-sk-",level:3},{value:"MPIN256.GET_DVS_KEYPAIR(rng, Z, Pa) \u21d2",id:"mpin256get_dvs_keypairrng-z-pa-",level:3}],u={toc:d};function o(t){var e=t.components,a=(0,r.Z)(t,p);return(0,l.kt)("wrapper",(0,n.Z)({},u,a,{components:e,mdxType:"MDXLayout"}),(0,l.kt)("a",{name:"MPIN256"}),(0,l.kt)("h2",{id:"mpin256"},"MPIN256"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": global class",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN256{"}"}'),"  "),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN256"},"MPIN256"),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#new_MPIN256_new"},"new MPIN256()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN256.today"},".today()")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN256.bytestostring"},".bytestostring(b)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN256.stringtobytes"},".stringtobytes(s)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN256.comparebytes"},".comparebytes(a, b)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN256.mpin_hash"},".mpin_hash(c, U)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN256.hashit"},".hashit(sha, n, B)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN256.map"},".map(u, cb)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN256.unmap"},".unmap(u, P)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN256.RECOMBINE_G1"},".RECOMBINE_G1(R1, R2, R)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN256.RECOMBINE_G2"},".RECOMBINE_G2(W1, W2, W)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN256.HASH_ID"},".HASH_ID(sha, ID)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN256.RANDOM_GENERATE"},".RANDOM_GENERATE(rng, S)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN256.EXTRACT_PIN"},".EXTRACT_PIN()")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN256.EXTRACT_FACTOR"},".EXTRACT_FACTOR()")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN256.RESTORE_FACTOR"},".RESTORE_FACTOR()")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN256.GET_SERVER_SECRET"},".GET_SERVER_SECRET(S, SST)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN256.GET_G1_MULTIPLE"},".GET_G1_MULTIPLE(type, x, G, W)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN256.GET_CLIENT_SECRET"},".GET_CLIENT_SECRET(S, CID, CST)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN256.GET_CLIENT_PERMIT"},".GET_CLIENT_PERMIT(sha, date, S, CID, CTT)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN256.CLIENT_1"},".CLIENT_1(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN256.CLIENT_2"},".CLIENT_2(X, Y, SEC)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN256.SERVER_1"},".SERVER_1(sha, date, CID, HID, HTID)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN256.SERVER_2"},".SERVER_2(date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, Pa)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN256.KANGAROO"},".KANGAROO(E, F)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN256.GET_TIME"},".GET_TIME()")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN256.CLIENT"},".CLIENT(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT, TimeValue, Y, Message)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN256.SERVER"},".SERVER(sha, date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, CID, TimeValue, MESSAGE, Pa)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN256.PRECOMPUTE"},".PRECOMPUTE(TOKEN, CID, G1, G2)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN256.HASH_ALL"},".HASH_ALL(sha, HID, xID, xCID, SEC, Y, R, W)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN256.CLIENT_KEY"},".CLIENT_KEY(sha, G1, G2, pin, R, X, H, wCID, CK)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN256.SERVER_KEY"},".SERVER_KEY(h, Z, SST, W, H, HID, xID, xCID, SK)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN256.GET_DVS_KEYPAIR"},".GET_DVS_KEYPAIR(rng, Z, Pa)")," \u21d2")))),(0,l.kt)("a",{name:"new_MPIN256_new"}),(0,l.kt)("h3",{id:"new-mpin256"},"new MPIN256()"),(0,l.kt)("p",null,"Creates an instance of MPIN256"),(0,l.kt)("a",{name:"MPIN256.today"}),(0,l.kt)("h3",{id:"mpin256today-"},"MPIN256.today() \u21d2"),(0,l.kt)("p",null,"Get epoch time for day"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN256"},(0,l.kt)("code",null,"MPIN256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": time in slots since epoch",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN256{"}"}'),"  "),(0,l.kt)("a",{name:"MPIN256.bytestostring"}),(0,l.kt)("h3",{id:"mpin256bytestostringb-"},"MPIN256.bytestostring(b) \u21d2"),(0,l.kt)("p",null,"Convert byte array to string"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN256"},(0,l.kt)("code",null,"MPIN256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": s string",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN256{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"b"),(0,l.kt)("td",{parentName:"tr",align:null},"byte array")))),(0,l.kt)("a",{name:"MPIN256.stringtobytes"}),(0,l.kt)("h3",{id:"mpin256stringtobytess-"},"MPIN256.stringtobytes(s) \u21d2"),(0,l.kt)("p",null,"Convert a string to byte array"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN256"},(0,l.kt)("code",null,"MPIN256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": b byte array",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN256{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"s"),(0,l.kt)("td",{parentName:"tr",align:null},"string")))),(0,l.kt)("a",{name:"MPIN256.comparebytes"}),(0,l.kt)("h3",{id:"mpin256comparebytesa-b-"},"MPIN256.comparebytes(a, b) \u21d2"),(0,l.kt)("p",null,"Convert byte arrays"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN256"},(0,l.kt)("code",null,"MPIN256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": true if equal",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN256{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"a"),(0,l.kt)("td",{parentName:"tr",align:null},"byte array")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"b"),(0,l.kt)("td",{parentName:"tr",align:null},"byte array")))),(0,l.kt)("a",{name:"MPIN256.mpin_hash"}),(0,l.kt)("h3",{id:"mpin256mpin_hashc-u-"},"MPIN256.mpin_hash(c, U) \u21d2"),(0,l.kt)("p",null,"Hash values"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN256"},(0,l.kt)("code",null,"MPIN256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": R hash value",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN256{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"c"),(0,l.kt)("td",{parentName:"tr",align:null},"FP8 instance")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"U"),(0,l.kt)("td",{parentName:"tr",align:null},"ECP unstancebyte array")))),(0,l.kt)("a",{name:"MPIN256.hashit"}),(0,l.kt)("h3",{id:"mpin256hashitsha-n-b-"},"MPIN256.hashit(sha, n, B) \u21d2"),(0,l.kt)("p",null,"General purpose hash function"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN256"},(0,l.kt)("code",null,"MPIN256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": R hash value",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN256{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sha"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"n"),(0,l.kt)("td",{parentName:"tr",align:null},"Integer")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"B"),(0,l.kt)("td",{parentName:"tr",align:null},"byte array")))),(0,l.kt)("a",{name:"MPIN256.map"}),(0,l.kt)("h3",{id:"mpin256mapu-cb-"},"MPIN256.map(u, cb) \u21d2"),(0,l.kt)("p",null,"maps a random u to a point on the curve"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN256"},(0,l.kt)("code",null,"MPIN256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": P ECP pointhash value",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN256{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"u"),(0,l.kt)("td",{parentName:"tr",align:null},"BIG numberInteger")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"cb"),(0,l.kt)("td",{parentName:"tr",align:null},'an integer representing the "sign" of y, in fact its least significant bit.')))),(0,l.kt)("a",{name:"MPIN256.unmap"}),(0,l.kt)("h3",{id:"mpin256unmapu-p-"},"MPIN256.unmap(u, P) \u21d2"),(0,l.kt)("p",null,"returns u derived from P. Random value in range 1 to return value should then be added to u"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN256"},(0,l.kt)("code",null,"MPIN256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": r Value that should be added to u to derive P",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN256{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"u"),(0,l.kt)("td",{parentName:"tr",align:null},"BIG numberInteger")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"P"),(0,l.kt)("td",{parentName:"tr",align:null},"ECP pointhash value")))),(0,l.kt)("a",{name:"MPIN256.RECOMBINE_G1"}),(0,l.kt)("h3",{id:"mpin256recombine_g1r1-r2-r-"},"MPIN256.RECOMBINE_G1(R1, R2, R) \u21d2"),(0,l.kt)("p",null,"Add two members from the group G1"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN256"},(0,l.kt)("code",null,"MPIN256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": 0 or an error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN256{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"R1"),(0,l.kt)("td",{parentName:"tr",align:null},"Input member of G1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"R2"),(0,l.kt)("td",{parentName:"tr",align:null},"Input member of G1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"R"),(0,l.kt)("td",{parentName:"tr",align:null},"Output member of G1. R=R1+R2")))),(0,l.kt)("a",{name:"MPIN256.RECOMBINE_G2"}),(0,l.kt)("h3",{id:"mpin256recombine_g2w1-w2-w-"},"MPIN256.RECOMBINE_G2(W1, W2, W) \u21d2"),(0,l.kt)("p",null,"Add two members from the group G2"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN256"},(0,l.kt)("code",null,"MPIN256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": 0 or an error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN256{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"W1"),(0,l.kt)("td",{parentName:"tr",align:null},"Input member of G2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"W2"),(0,l.kt)("td",{parentName:"tr",align:null},"Input member of G2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"W"),(0,l.kt)("td",{parentName:"tr",align:null},"Output member of G2. W=W1+W2")))),(0,l.kt)("a",{name:"MPIN256.HASH_ID"}),(0,l.kt)("h3",{id:"mpin256hash_idsha-id-"},"MPIN256.HASH_ID(sha, ID) \u21d2"),(0,l.kt)("p",null,"Hash the identity"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN256"},(0,l.kt)("code",null,"MPIN256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": hash value",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN256{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sha"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ID"),(0,l.kt)("td",{parentName:"tr",align:null},"Identity as byte array")))),(0,l.kt)("a",{name:"MPIN256.RANDOM_GENERATE"}),(0,l.kt)("h3",{id:"mpin256random_generaterng-s-"},"MPIN256.RANDOM_GENERATE(rng, S) \u21d2"),(0,l.kt)("p",null,"Create random secret"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN256"},(0,l.kt)("code",null,"MPIN256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN256{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"rng"),(0,l.kt)("td",{parentName:"tr",align:null},"cryptographically secure random number generator")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"S"),(0,l.kt)("td",{parentName:"tr",align:null},"Random secret value")))),(0,l.kt)("a",{name:"MPIN256.EXTRACT_PIN"}),(0,l.kt)("h3",{id:"mpin256extract_pin-"},"MPIN256.EXTRACT_PIN() \u21d2"),(0,l.kt)("p",null,"Extract a PIN number from a client secret"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN256"},(0,l.kt)("code",null,"MPIN256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": token",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN256{"}"}'),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": sha hash type",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": CID Client identity",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": pin PIN value",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": TOKEN Client secret  "),(0,l.kt)("a",{name:"MPIN256.EXTRACT_FACTOR"}),(0,l.kt)("h3",{id:"mpin256extract_factor-"},"MPIN256.EXTRACT_FACTOR() \u21d2"),(0,l.kt)("p",null,"Extract factor from TOKEN for identity CID"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN256"},(0,l.kt)("code",null,"MPIN256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": token",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN256{"}"}'),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": sha hash type",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": CID Client identity",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": factor Value to extract",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": facbits Number of bits in factor",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": TOKEN Token value  "),(0,l.kt)("a",{name:"MPIN256.RESTORE_FACTOR"}),(0,l.kt)("h3",{id:"mpin256restore_factor-"},"MPIN256.RESTORE_FACTOR() \u21d2"),(0,l.kt)("p",null,"Restore factor to TOKEN for identity CID"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN256"},(0,l.kt)("code",null,"MPIN256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": token",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN256{"}"}'),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": sha hash type",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": CID Client identity",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": factor Value to extract",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": facbits Number of bits in factor",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": TOKEN Token value  "),(0,l.kt)("a",{name:"MPIN256.GET_SERVER_SECRET"}),(0,l.kt)("h3",{id:"mpin256get_server_secrets-sst-"},"MPIN256.GET_SERVER_SECRET(S, SST) \u21d2"),(0,l.kt)("p",null,"Create a server secret in G2 from a master secret"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN256"},(0,l.kt)("code",null,"MPIN256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN256{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"S"),(0,l.kt)("td",{parentName:"tr",align:null},"Master secret")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SST"),(0,l.kt)("td",{parentName:"tr",align:null},"Server secret = s.Q where Q is a fixed generator of G2")))),(0,l.kt)("a",{name:"MPIN256.GET_G1_MULTIPLE"}),(0,l.kt)("h3",{id:"mpin256get_g1_multipletype-x-g-w-"},"MPIN256.GET_G1_MULTIPLE(type, x, G, W) \u21d2"),(0,l.kt)("p",null,"Find a random multiple of a point in G1"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN256"},(0,l.kt)("code",null,"MPIN256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN256{"}"}'),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": rng cryptographically secure random number generator  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"type"),(0,l.kt)("td",{parentName:"tr",align:null},"determines type of action to be taken")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"x"),(0,l.kt)("td",{parentName:"tr",align:null},"an output internally randomly generated if R!=NULL, otherwise must be provided as an input")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"G"),(0,l.kt)("td",{parentName:"tr",align:null},"if type=0 a point in G1, else an octet to be mapped to G1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"W"),(0,l.kt)("td",{parentName:"tr",align:null},"the output =x.G or x.M(G), where M(.) is a mapping")))),(0,l.kt)("a",{name:"MPIN256.GET_CLIENT_SECRET"}),(0,l.kt)("h3",{id:"mpin256get_client_secrets-cid-cst-"},"MPIN256.GET_CLIENT_SECRET(S, CID, CST) \u21d2"),(0,l.kt)("p",null,"Create a client secret in G1 from a master secret and the client ID"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN256"},(0,l.kt)("code",null,"MPIN256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN256{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"S"),(0,l.kt)("td",{parentName:"tr",align:null},"is an input master secret")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"CID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input client identity")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"CST"),(0,l.kt)("td",{parentName:"tr",align:null},"is the full client secret = s.H(ID)")))),(0,l.kt)("a",{name:"MPIN256.GET_CLIENT_PERMIT"}),(0,l.kt)("h3",{id:"mpin256get_client_permitsha-date-s-cid-ctt-"},"MPIN256.GET_CLIENT_PERMIT(sha, date, S, CID, CTT) \u21d2"),(0,l.kt)("p",null,"Create a Time Permit in G1 from a master secret and the client ID"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN256"},(0,l.kt)("code",null,"MPIN256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN256{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null}))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sha"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"date"),(0,l.kt)("td",{parentName:"tr",align:null},"is input date, in days since the epoch."),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"S"),(0,l.kt)("td",{parentName:"tr",align:null},"is an input master secret"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"CID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input client identity"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"CTT"),(0,l.kt)("td",{parentName:"tr",align:null},"is a Time Permit for the given date = s.H(d"),(0,l.kt)("td",{parentName:"tr",align:null},"H(ID))")))),(0,l.kt)("a",{name:"MPIN256.CLIENT_1"}),(0,l.kt)("h3",{id:"mpin256client_1sha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-"},"MPIN256.CLIENT_1(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT) \u21d2"),(0,l.kt)("p",null,"Perform first pass of the client side of the 3-pass version of the M-Pin protocol"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN256"},(0,l.kt)("code",null,"MPIN256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN256{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null}))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sha"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"date"),(0,l.kt)("td",{parentName:"tr",align:null},"is input date, in days since the epoch. Set to 0 if Time permits disabled"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"CLIENT_ID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input client identity"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"rng"),(0,l.kt)("td",{parentName:"tr",align:null},"is a pointer to a cryptographically secure random number generator"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"X"),(0,l.kt)("td",{parentName:"tr",align:null},"an output internally randomly generated if R!=NULL, otherwise must be provided as an input"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"pin"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input PIN number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"TOKEN"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input M-Pin token (the client secret with PIN portion removed)"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SEC"),(0,l.kt)("td",{parentName:"tr",align:null},"is output = CS+TP, where CS=is the reconstructed client secret, and TP is the time permit"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xID"),(0,l.kt)("td",{parentName:"tr",align:null},"is output = x.H(ID)"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xCID"),(0,l.kt)("td",{parentName:"tr",align:null},"is output = x.(H(ID)+H(d"),(0,l.kt)("td",{parentName:"tr",align:null},"H(ID)))")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"PERMIT"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input time permit"),(0,l.kt)("td",{parentName:"tr",align:null})))),(0,l.kt)("a",{name:"MPIN256.CLIENT_2"}),(0,l.kt)("h3",{id:"mpin256client_2x-y-sec-"},"MPIN256.CLIENT_2(X, Y, SEC) \u21d2"),(0,l.kt)("p",null,"Perform second pass of the client side of the 3-pass version of the M-Pin protocol"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN256"},(0,l.kt)("code",null,"MPIN256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN256{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"X"),(0,l.kt)("td",{parentName:"tr",align:null},"an input, a locally generated random number")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Y"),(0,l.kt)("td",{parentName:"tr",align:null},"an input random challenge from the server")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SEC"),(0,l.kt)("td",{parentName:"tr",align:null},"on output = -(x+y).V")))),(0,l.kt)("a",{name:"MPIN256.SERVER_1"}),(0,l.kt)("h3",{id:"mpin256server_1sha-date-cid-hid-htid-"},"MPIN256.SERVER_1(sha, date, CID, HID, HTID) \u21d2"),(0,l.kt)("p",null,"Perform first pass of the server side of the 3-pass version of the M-Pin protocol"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN256"},(0,l.kt)("code",null,"MPIN256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN256{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null}))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sha"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"date"),(0,l.kt)("td",{parentName:"tr",align:null},"is input date, in days since the epoch. Set to 0 if Time permits disabled"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"CID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input claimed client identity"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"HID"),(0,l.kt)("td",{parentName:"tr",align:null},"is output H(ID), a hash of the client ID"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"HTID"),(0,l.kt)("td",{parentName:"tr",align:null},"is output H(ID)+H(d"),(0,l.kt)("td",{parentName:"tr",align:null},"H(ID))")))),(0,l.kt)("a",{name:"MPIN256.SERVER_2"}),(0,l.kt)("h3",{id:"mpin256server_2date-hid-htid-y-sst-xid-xcid-msec-e-f-pa-"},"MPIN256.SERVER_2(date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, Pa) \u21d2"),(0,l.kt)("p",null,"Perform third pass on the server side of the 3-pass version of the M-Pin protocol"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN256"},(0,l.kt)("code",null,"MPIN256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN256{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null}))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"date"),(0,l.kt)("td",{parentName:"tr",align:null},"is input date, in days since the epoch. Set to 0 if Time permits disabled"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"HID"),(0,l.kt)("td",{parentName:"tr",align:null},"is input H(ID), a hash of the client ID"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"HTID"),(0,l.kt)("td",{parentName:"tr",align:null},"is input H(ID)+H(d"),(0,l.kt)("td",{parentName:"tr",align:null},"H(ID))")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Y"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input server's randomly generated challenge"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SST"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input server secret"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xID"),(0,l.kt)("td",{parentName:"tr",align:null},"is input from the client = x.H(ID)"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xCID"),(0,l.kt)("td",{parentName:"tr",align:null},"is input from the client= x.(H(ID)+H(d"),(0,l.kt)("td",{parentName:"tr",align:null},"H(ID)))")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"mSEC"),(0,l.kt)("td",{parentName:"tr",align:null},"is an input from the client"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"E"),(0,l.kt)("td",{parentName:"tr",align:null},"is an output to help the Kangaroos to find the PIN error, or NULL if not required"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"F"),(0,l.kt)("td",{parentName:"tr",align:null},"is an output to help the Kangaroos to find the PIN error, or NULL if not required"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Pa"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input public key from the client, z.Q or NULL if the client uses regular mpin"),(0,l.kt)("td",{parentName:"tr",align:null})))),(0,l.kt)("a",{name:"MPIN256.KANGAROO"}),(0,l.kt)("h3",{id:"mpin256kangarooe-f-"},"MPIN256.KANGAROO(E, F) \u21d2"),(0,l.kt)("p",null,"Use Kangaroos to find PIN error"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN256"},(0,l.kt)("code",null,"MPIN256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": 0 if Kangaroos failed, or the PIN error e",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN256{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"E"),(0,l.kt)("td",{parentName:"tr",align:null},"a member of the group GT")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"F"),(0,l.kt)("td",{parentName:"tr",align:null},"a member of the group GT =  E^e")))),(0,l.kt)("a",{name:"MPIN256.GET_TIME"}),(0,l.kt)("h3",{id:"mpin256get_time-"},"MPIN256.GET_TIME() \u21d2"),(0,l.kt)("p",null,"Time since epoch"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN256"},(0,l.kt)("code",null,"MPIN256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": time since epoch",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN256{"}"}'),"  "),(0,l.kt)("a",{name:"MPIN256.CLIENT"}),(0,l.kt)("h3",{id:"mpin256clientsha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-timevalue-y-message-"},"MPIN256.CLIENT(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT, TimeValue, Y, Message) \u21d2"),(0,l.kt)("p",null,"Perform client side of the one-pass version of the M-Pin protocol"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN256"},(0,l.kt)("code",null,"MPIN256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN256{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null}),(0,l.kt)("th",{parentName:"tr",align:null}))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sha"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type"),(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},"date"),(0,l.kt)("td",{parentName:"tr",align:null},"is input date, in days since the epoch. Set to 0 if Time permits disabled"),(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},"CLIENT_ID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input client identity"),(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},"rng"),(0,l.kt)("td",{parentName:"tr",align:null},"is a pointer to a cryptographically secure random number generator"),(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},"X"),(0,l.kt)("td",{parentName:"tr",align:null},"an output internally randomly generated if R!=NULL, otherwise must be provided as an input"),(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},"pin"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input PIN number"),(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},"TOKEN"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input M-Pin token (the client secret with PIN portion removed)"),(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},"SEC"),(0,l.kt)("td",{parentName:"tr",align:null},"is output = -(x+y)(CS+TP), where CS is the reconstructed client secret, and TP is the time permit"),(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},"xID"),(0,l.kt)("td",{parentName:"tr",align:null},"is output = x.H(ID)"),(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},"xCID"),(0,l.kt)("td",{parentName:"tr",align:null},"is output = x.(H(ID)+H(d"),(0,l.kt)("td",{parentName:"tr",align:null},"H(ID)))"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"PERMIT"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input time permit"),(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},"TimeValue"),(0,l.kt)("td",{parentName:"tr",align:null},"is input epoch time in seconds - a timestamp"),(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},"Y"),(0,l.kt)("td",{parentName:"tr",align:null},"is output H(t"),(0,l.kt)("td",{parentName:"tr",align:null},"U) or H(t"),(0,l.kt)("td",{parentName:"tr",align:null},"UT) if Time Permits enabled")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Message"),(0,l.kt)("td",{parentName:"tr",align:null},"is the message to be signed"),(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null})))),(0,l.kt)("a",{name:"MPIN256.SERVER"}),(0,l.kt)("h3",{id:"mpin256serversha-date-hid-htid-y-sst-xid-xcid-msec-e-f-cid-timevalue-message-pa-"},"MPIN256.SERVER(sha, date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, CID, TimeValue, MESSAGE, Pa) \u21d2"),(0,l.kt)("p",null,"Perform server side of the one-pass version of the M-Pin protocol"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN256"},(0,l.kt)("code",null,"MPIN256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN256{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null}),(0,l.kt)("th",{parentName:"tr",align:null}))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sha"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type"),(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},"date"),(0,l.kt)("td",{parentName:"tr",align:null},"is input date, in days since the epoch. Set to 0 if Time permits disabled"),(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},"HID"),(0,l.kt)("td",{parentName:"tr",align:null},"is output H(ID), a hash of the client ID"),(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},"HTID"),(0,l.kt)("td",{parentName:"tr",align:null},"is output H(ID)+H(d"),(0,l.kt)("td",{parentName:"tr",align:null},"H(ID))"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Y"),(0,l.kt)("td",{parentName:"tr",align:null},"is output H(t"),(0,l.kt)("td",{parentName:"tr",align:null},"U) or H(t"),(0,l.kt)("td",{parentName:"tr",align:null},"UT) if Time Permits enabled")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SST"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input server secret"),(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},"xID"),(0,l.kt)("td",{parentName:"tr",align:null},"is input from the client = x.H(ID)"),(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},"xCID"),(0,l.kt)("td",{parentName:"tr",align:null},"is input from the client= x.(H(ID)+H(d"),(0,l.kt)("td",{parentName:"tr",align:null},"H(ID)))"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"mSEC"),(0,l.kt)("td",{parentName:"tr",align:null},"is an input from the client"),(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},"E"),(0,l.kt)("td",{parentName:"tr",align:null},"is an output to help the Kangaroos to find the PIN error, or NULL if not required"),(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},"F"),(0,l.kt)("td",{parentName:"tr",align:null},"is an output to help the Kangaroos to find the PIN error, or NULL if not required"),(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},"CID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input claimed client identity"),(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},"TimeValue"),(0,l.kt)("td",{parentName:"tr",align:null},"is input epoch time in seconds - a timestamp"),(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},"MESSAGE"),(0,l.kt)("td",{parentName:"tr",align:null},"is the message to be signed"),(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},"Pa"),(0,l.kt)("td",{parentName:"tr",align:null},"is input from the client z.Q or NULL if the key-escrow less scheme is not used"),(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null})))),(0,l.kt)("a",{name:"MPIN256.PRECOMPUTE"}),(0,l.kt)("h3",{id:"mpin256precomputetoken-cid-g1-g2-"},"MPIN256.PRECOMPUTE(TOKEN, CID, G1, G2) \u21d2"),(0,l.kt)("p",null,"Precompute values for use by the client side of M-Pin Full"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN256"},(0,l.kt)("code",null,"MPIN256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN256{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"TOKEN"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input M-Pin token (the client secret with PIN portion removed)")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"CID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input client identity")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"G1"),(0,l.kt)("td",{parentName:"tr",align:null},"precomputed output")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"G2"),(0,l.kt)("td",{parentName:"tr",align:null},"precomputed output")))),(0,l.kt)("a",{name:"MPIN256.HASH_ALL"}),(0,l.kt)("h3",{id:"mpin256hash_allsha-hid-xid-xcid-sec-y-r-w-"},"MPIN256.HASH_ALL(sha, HID, xID, xCID, SEC, Y, R, W) \u21d2"),(0,l.kt)("p",null,"Hash the session transcript"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN256"},(0,l.kt)("code",null,"MPIN256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": H the output is the hash of all of the above that apply",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN256{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null}))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sha"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"HID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hashed input client ID = H(ID)"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the client output = x.H(ID)"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xCID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the client output = x.(H(ID)+H(T"),(0,l.kt)("td",{parentName:"tr",align:null},"H(ID)))")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SEC"),(0,l.kt)("td",{parentName:"tr",align:null},"is the client part response"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Y"),(0,l.kt)("td",{parentName:"tr",align:null},"is the server challenge"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"R"),(0,l.kt)("td",{parentName:"tr",align:null},"is the client part response"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"W"),(0,l.kt)("td",{parentName:"tr",align:null},"is the server part response"),(0,l.kt)("td",{parentName:"tr",align:null})))),(0,l.kt)("a",{name:"MPIN256.CLIENT_KEY"}),(0,l.kt)("h3",{id:"mpin256client_keysha-g1-g2-pin-r-x-h-wcid-ck-"},"MPIN256.CLIENT_KEY(sha, G1, G2, pin, R, X, H, wCID, CK) \u21d2"),(0,l.kt)("p",null,"Calculate Key on Client side for M-Pin Full"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN256"},(0,l.kt)("code",null,"MPIN256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": 0 or an error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN256{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sha"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"G1"),(0,l.kt)("td",{parentName:"tr",align:null},"precomputed input")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"G2"),(0,l.kt)("td",{parentName:"tr",align:null},"precomputed input")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"pin"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input PIN number")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"R"),(0,l.kt)("td",{parentName:"tr",align:null},"is an input, a locally generated random number")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"X"),(0,l.kt)("td",{parentName:"tr",align:null},"is an input, a locally generated random number")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"H"),(0,l.kt)("td",{parentName:"tr",align:null},"is an input, hash of the protocol transcript")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"wCID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input Server-side Diffie-Hellman component")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"CK"),(0,l.kt)("td",{parentName:"tr",align:null},"is the output calculated shared key")))),(0,l.kt)("a",{name:"MPIN256.SERVER_KEY"}),(0,l.kt)("h3",{id:"mpin256server_keyh-z-sst-w-h-hid-xid-xcid-sk-"},"MPIN256.SERVER_KEY(h, Z, SST, W, H, HID, xID, xCID, SK) \u21d2"),(0,l.kt)("p",null,"Calculate Key on Server side for M-Pin Full"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN256"},(0,l.kt)("code",null,"MPIN256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": 0 or an error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN256{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null}))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"h"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Z"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input Client-side Diffie-Hellman component"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SST"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input server secret"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"W"),(0,l.kt)("td",{parentName:"tr",align:null},"is an input random number generated by the server"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"H"),(0,l.kt)("td",{parentName:"tr",align:null},"is an input, hash of the protocol transcript"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"HID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hashed input client ID = H(ID)"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xID"),(0,l.kt)("td",{parentName:"tr",align:null},"is input from the client = x.H(ID)"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xCID"),(0,l.kt)("td",{parentName:"tr",align:null},"is input from the client= x.(H(ID)+H(d"),(0,l.kt)("td",{parentName:"tr",align:null},"H(ID)))")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SK"),(0,l.kt)("td",{parentName:"tr",align:null},"is the output calculated shared key"),(0,l.kt)("td",{parentName:"tr",align:null})))),(0,l.kt)("a",{name:"MPIN256.GET_DVS_KEYPAIR"}),(0,l.kt)("h3",{id:"mpin256get_dvs_keypairrng-z-pa-"},"MPIN256.GET_DVS_KEYPAIR(rng, Z, Pa) \u21d2"),(0,l.kt)("p",null,"Generates a random public key for the client z.Q"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN256"},(0,l.kt)("code",null,"MPIN256")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": 0 or an error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN256{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"rng"),(0,l.kt)("td",{parentName:"tr",align:null},"cryptographically secure random number generator")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Z"),(0,l.kt)("td",{parentName:"tr",align:null},"an output internally randomly generated if R!=NULL, otherwise it must be provided as an input")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Pa"),(0,l.kt)("td",{parentName:"tr",align:null},"the output public key for the client")))))}o.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/c5928a60.a55e51da.js b/assets/js/c5928a60.a55e51da.js
new file mode 100644
index 0000000..14f1330
--- /dev/null
+++ b/assets/js/c5928a60.a55e51da.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1370],{3905:(t,e,a)=>{a.d(e,{Zo:()=>k,kt:()=>s});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 p(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 i(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 m=n.createContext({}),o=function(t){var e=n.useContext(m),a=e;return t&&(a="function"==typeof t?t(e):p(p({},e),t)),a},k=function(t){var e=o(t.components);return n.createElement(m.Provider,{value:e},t.children)},u="mdxType",d={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},N=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,l=t.originalType,m=t.parentName,k=i(t,["components","mdxType","originalType","parentName"]),u=o(a),N=r,s=u["".concat(m,".").concat(N)]||u[N]||d[N]||l;return a?n.createElement(s,p(p({ref:e},k),{},{components:a})):n.createElement(s,p({ref:e},k))}));function s(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=a.length,p=new Array(l);p[0]=N;var i={};for(var m in e)hasOwnProperty.call(e,m)&&(i[m]=e[m]);i.originalType=t,i[u]="string"==typeof t?t:r,p[1]=i;for(var o=2;o<l;o++)p[o]=a[o];return n.createElement.apply(null,p)}return n.createElement.apply(null,a)}N.displayName="MDXCreateElement"},351:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>k,contentTitle:()=>m,default:()=>N,frontMatter:()=>i,metadata:()=>o,toc:()=>u});var n=a(7462),r=a(3366),l=(a(7294),a(3905)),p=["components"],i={id:"pair",title:"PAIR",sidebar_label:"PAIR"},m=void 0,o={unversionedId:"cryptojs/pair",id:"cryptojs/pair",title:"PAIR",description:"PAIR",source:"@site/../docs/cryptojs/pair.md",sourceDirName:"cryptojs",slug:"/cryptojs/pair",permalink:"/docs/cryptojs/pair",draft:!1,tags:[],version:"current",frontMatter:{id:"pair",title:"PAIR",sidebar_label:"PAIR"},sidebar:"docs",previous:{title:"MPIN256",permalink:"/docs/cryptojs/mpin256"},next:{title:"PAIR192",permalink:"/docs/cryptojs/pair192"}},k={},u=[{value:"PAIR",id:"pair",level:2},{value:"new PAIR()",id:"new-pair",level:3},{value:"PAIR.line()",id:"pairline",level:3},{value:"PAIR.initmp()",id:"pairinitmp",level:3},{value:"PAIR.miller(r, res)",id:"pairmillerr-res",level:3},{value:"PAIR.another(r, P1, Q1)",id:"pairanotherr-p1-q1",level:3},{value:"PAIR.ate(P1, Q1)",id:"pairatep1-q1",level:3},{value:"PAIR.ate2(P1, Q1, R1, S1)",id:"pairate2p1-q1-r1-s1",level:3},{value:"PAIR.fexp(m)",id:"pairfexpm",level:3},{value:"PAIR.lbits()",id:"pairlbits",level:3},{value:"PAIR.glv()",id:"pairglv",level:3},{value:"PAIR.gs()",id:"pairgs",level:3},{value:"PAIR.G1mul(P, e) \u21d2",id:"pairg1mulp-e-",level:3},{value:"PAIR.G2mul(P, e) \u21d2",id:"pairg2mulp-e-",level:3},{value:"PAIR.GTpow(d, e) \u21d2",id:"pairgtpowd-e-",level:3}],d={toc:u};function N(t){var e=t.components,a=(0,r.Z)(t,p);return(0,l.kt)("wrapper",(0,n.Z)({},d,a,{components:e,mdxType:"MDXLayout"}),(0,l.kt)("a",{name:"PAIR"}),(0,l.kt)("h2",{id:"pair"},"PAIR"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": global class",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}PAIR{"}"}'),"  "),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#PAIR"},"PAIR"),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#new_PAIR_new"},"new PAIR()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#PAIR.line"},".line()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#PAIR.initmp"},".initmp()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#PAIR.miller"},".miller(r, res)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#PAIR.another"},".another(r, P1, Q1)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#PAIR.ate"},".ate(P1, Q1)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#PAIR.ate2"},".ate2(P1, Q1, R1, S1)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#PAIR.fexp"},".fexp(m)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#PAIR.lbits"},".lbits()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#PAIR.glv"},".glv()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#PAIR.gs"},".gs()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#PAIR.G1mul"},".G1mul(P, e)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#PAIR.G2mul"},".G2mul(P, e)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#PAIR.GTpow"},".GTpow(d, e)")," \u21d2")))),(0,l.kt)("a",{name:"new_PAIR_new"}),(0,l.kt)("h3",{id:"new-pair"},"new PAIR()"),(0,l.kt)("p",null,"Creates an instance of PAIR"),(0,l.kt)("a",{name:"PAIR.line"}),(0,l.kt)("h3",{id:"pairline"},"PAIR.line()"),(0,l.kt)("p",null,"Line function"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#PAIR"},(0,l.kt)("code",null,"PAIR")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}PAIR{"}"}'),"  "),(0,l.kt)("a",{name:"PAIR.initmp"}),(0,l.kt)("h3",{id:"pairinitmp"},"PAIR.initmp()"),(0,l.kt)("p",null,"prepare for multi-pairing"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#PAIR"},(0,l.kt)("code",null,"PAIR")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}PAIR{"}"}'),"  "),(0,l.kt)("a",{name:"PAIR.miller"}),(0,l.kt)("h3",{id:"pairmillerr-res"},"PAIR.miller(r, res)"),(0,l.kt)("p",null,"basic Miller loop"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#PAIR"},(0,l.kt)("code",null,"PAIR")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}PAIR{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"r"),(0,l.kt)("td",{parentName:"tr",align:null},"FP12 precomputed array of accumulated line functions")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"res"),(0,l.kt)("td",{parentName:"tr",align:null},"FP12 result")))),(0,l.kt)("a",{name:"PAIR.another"}),(0,l.kt)("h3",{id:"pairanotherr-p1-q1"},"PAIR.another(r, P1, Q1)"),(0,l.kt)("p",null,"Precompute line functions for n-pairing"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#PAIR"},(0,l.kt)("code",null,"PAIR")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}PAIR{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"r"),(0,l.kt)("td",{parentName:"tr",align:null},"array of precomputed FP48 products of line functions")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"P1"),(0,l.kt)("td",{parentName:"tr",align:null},"An element of G2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Q1"),(0,l.kt)("td",{parentName:"tr",align:null},"An element of G1")))),(0,l.kt)("a",{name:"PAIR.ate"}),(0,l.kt)("h3",{id:"pairatep1-q1"},"PAIR.ate(P1, Q1)"),(0,l.kt)("p",null,"Calculate Miller loop for Optimal ATE pairing e(P,Q)"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#PAIR"},(0,l.kt)("code",null,"PAIR")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}PAIR{"}"}'),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Result"),": r An element of GT i.e. result of the pairing calculation e(P,Q)  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"P1"),(0,l.kt)("td",{parentName:"tr",align:null},"An element of G2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Q1"),(0,l.kt)("td",{parentName:"tr",align:null},"An element of G1")))),(0,l.kt)("a",{name:"PAIR.ate2"}),(0,l.kt)("h3",{id:"pairate2p1-q1-r1-s1"},"PAIR.ate2(P1, Q1, R1, S1)"),(0,l.kt)("p",null,"Calculate Miller loop for Optimal ATE double-pairing e(P,Q).e(R,S)"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#PAIR"},(0,l.kt)("code",null,"PAIR")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}PAIR{"}"}'),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Result"),": r An element of GT i.e. result of the double pairing calculation e(P,Q).e(R,S)  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"P1"),(0,l.kt)("td",{parentName:"tr",align:null},"An element of G2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Q1"),(0,l.kt)("td",{parentName:"tr",align:null},"An element of G1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"R1"),(0,l.kt)("td",{parentName:"tr",align:null},"An element of G2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"S1"),(0,l.kt)("td",{parentName:"tr",align:null},"An element of G1")))),(0,l.kt)("a",{name:"PAIR.fexp"}),(0,l.kt)("h3",{id:"pairfexpm"},"PAIR.fexp(m)"),(0,l.kt)("p",null,"Final exponentiation of pairing, converts output of Miller loop to element in GT"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#PAIR"},(0,l.kt)("code",null,"PAIR")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}PAIR{"}"}'),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Result"),": r m^((p^12-1)/r) where p is modulus and r is the group order  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"m"),(0,l.kt)("td",{parentName:"tr",align:null},"FP12 value")))),(0,l.kt)("a",{name:"PAIR.lbits"}),(0,l.kt)("h3",{id:"pairlbits"},"PAIR.lbits()"),(0,l.kt)("p",null,"prepare ate parameter, n=6u+2 (BN) or n=u (BLS), n3=3","*","n"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#PAIR"},(0,l.kt)("code",null,"PAIR")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}PAIR{"}"}'),"  "),(0,l.kt)("a",{name:"PAIR.glv"}),(0,l.kt)("h3",{id:"pairglv"},"PAIR.glv()"),(0,l.kt)("p",null,"GLV method"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#PAIR"},(0,l.kt)("code",null,"PAIR")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}PAIR{"}"}'),"  "),(0,l.kt)("a",{name:"PAIR.gs"}),(0,l.kt)("h3",{id:"pairgs"},"PAIR.gs()"),(0,l.kt)("p",null,"Galbraith & Scott Method"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#PAIR"},(0,l.kt)("code",null,"PAIR")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}PAIR{"}"}'),"  "),(0,l.kt)("a",{name:"PAIR.G1mul"}),(0,l.kt)("h3",{id:"pairg1mulp-e-"},"PAIR.G1mul(P, e) \u21d2"),(0,l.kt)("p",null,"Fast point multiplication of a member of the group G1 by a BIG number"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#PAIR"},(0,l.kt)("code",null,"PAIR")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": R Member of G1 R=e.P",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}PAIR{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"P"),(0,l.kt)("td",{parentName:"tr",align:null},"Member of G1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"e"),(0,l.kt)("td",{parentName:"tr",align:null},"BIG multiplier")))),(0,l.kt)("a",{name:"PAIR.G2mul"}),(0,l.kt)("h3",{id:"pairg2mulp-e-"},"PAIR.G2mul(P, e) \u21d2"),(0,l.kt)("p",null,"Multiply P by e in group G2"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#PAIR"},(0,l.kt)("code",null,"PAIR")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": R Member of G2 R=e.P",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}PAIR{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"P"),(0,l.kt)("td",{parentName:"tr",align:null},"Member of G2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"e"),(0,l.kt)("td",{parentName:"tr",align:null},"BIG multiplier")))),(0,l.kt)("a",{name:"PAIR.GTpow"}),(0,l.kt)("h3",{id:"pairgtpowd-e-"},"PAIR.GTpow(d, e) \u21d2"),(0,l.kt)("p",null,"Fast raising of a member of GT to a BIG power"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#PAIR"},(0,l.kt)("code",null,"PAIR")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": r d^e",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}PAIR{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"d"),(0,l.kt)("td",{parentName:"tr",align:null},"Member of GT")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"e"),(0,l.kt)("td",{parentName:"tr",align:null},"BIG exponent")))))}N.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/ccb1012d.73ac21dd.js b/assets/js/ccb1012d.73ac21dd.js
new file mode 100644
index 0000000..499efd1
--- /dev/null
+++ b/assets/js/ccb1012d.73ac21dd.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8145],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>b});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 p=n.createContext({}),u=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=u(e.components);return n.createElement(p.Provider,{value:t},e.children)},m="mdxType",s={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,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),m=u(r),d=a,b=m["".concat(p,".").concat(d)]||m[d]||s[d]||o;return r?n.createElement(b,i(i({ref:t},c),{},{components:r})):n.createElement(b,i({ref:t},c))}));function b(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 p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[m]="string"==typeof e?e:a,i[1]=l;for(var u=2;u<o;u++)i[u]=r[u];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}d.displayName="MDXCreateElement"},5797:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>p,default:()=>d,frontMatter:()=>l,metadata:()=>u,toc:()=>m});var n=r(7462),a=r(3366),o=(r(7294),r(3905)),i=["components"],l={id:"mpc-api-0.1",title:"Multi-Party Computation (MPC) Library 0.1 (libmpc)",sidebar_label:"Multi-Party Computation Library 0.1"},p=void 0,u={unversionedId:"mpc-api-0.1",id:"mpc-api-0.1",title:"Multi-Party Computation (MPC) Library 0.1 (libmpc)",description:"Apache Milagro's Multi-Party Computation library (libmpc) is the latest addition to the project (as of June 2022), and uses the Apache Milagro C Library to implement Multi-Party Computation. It offers and API to allow for customs computations to be perfomed.",source:"@site/../docs/mpc-api-0.1.md",sourceDirName:".",slug:"/mpc-api-0.1",permalink:"/docs/mpc-api-0.1",draft:!1,tags:[],version:"current",frontMatter:{id:"mpc-api-0.1",title:"Multi-Party Computation (MPC) Library 0.1 (libmpc)",sidebar_label:"Multi-Party Computation Library 0.1"},sidebar:"docs",previous:{title:"Authentication",permalink:"/docs/dta-details/authentication"},next:{title:"ZKP-MFA Overview",permalink:"/docs/zkp-mfa-overview"}},c={},m=[{value:"Building and running libmpc",id:"building-and-running-libmpc",level:2},{value:"API Documentation",id:"api-documentation",level:2}],s={toc:m};function d(e){var t=e.components,r=(0,a.Z)(e,i);return(0,o.kt)("wrapper",(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Apache Milagro's Multi-Party Computation library (libmpc) is the latest addition to the project (as of June 2022), and uses the ",(0,o.kt)("a",{parentName:"p",href:"/docs/amcl-c-api-2.0.0"},"Apache Milagro C Library")," to implement Multi-Party Computation. It offers and API to allow for customs computations to be perfomed."),(0,o.kt)("h2",{id:"building-and-running-libmpc"},"Building and running libmpc"),(0,o.kt)("p",null,"The preferred way to get libmpc built and tested is through the use of docker."),(0,o.kt)("p",null,"Once your docker installation is correctly set-up, simply run:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," git clone https://github.com/apache/incubator-milagro-MPC.git && cd incubator-milagro-MPC\n")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," docker build -t libmpc .\n")),(0,o.kt)("p",null,"If you want to run tests and ensure all routines perform as expected, run:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"docker run --cap-add SYS_PTRACE --rm libmpc\n")),(0,o.kt)("p",null,"This procedure has been tested on all major platforms (Linux, Mac OS, Windows) on arm64 and x86_64 platforms. If your build or execution fails, please open a bug."),(0,o.kt)("p",null,"You can also build and run libmpc natively, and you can build the docker image for multiple platforms. To know more, check out ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/apache/incubator-milagro-MPC"},"the readme in the GitHub repository"),"."),(0,o.kt)("h2",{id:"api-documentation"},"API Documentation"),(0,o.kt)("p",null,"Doxygen support is available for Apache Milagro Multi-Party Computation (MPC) Library."),(0,o.kt)("p",null,"If you build libmpc, you can generate the documentation by running"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"make doc\n")),(0,o.kt)("p",null,"in the build directory. If you use Docker, and you want the build to generate the documentation, make sure ",(0,o.kt)("inlineCode",{parentName:"p"},"build_doc")," is set to ",(0,o.kt)("inlineCode",{parentName:"p"},"true"),"."),(0,o.kt)("p",null,"An online version of the Doxygen output is available for viewing in a web browser ",(0,o.kt)("a",{href:"/mpcdocs/index.html",target:"_blank"},"here"),"."),(0,o.kt)("p",null,"Supported admonition types are: caution, note, important, tip, warning."))}d.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/ccc49370.73dfd116.js b/assets/js/ccc49370.73dfd116.js
new file mode 100644
index 0000000..ab49fce
--- /dev/null
+++ b/assets/js/ccc49370.73dfd116.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6103],{5203:(e,t,n)=>{n.r(t),n.d(t,{default:()=>h});var a=n(7294),r=n(6010),l=n(1944),i=n(5281),o=n(9460),c=n(9058),s=n(756),m=n(7462),u=n(5999),d=n(2244);function v(e){var t=e.nextItem,n=e.prevItem;return a.createElement("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,u.I)({id:"theme.blog.post.paginator.navAriaLabel",message:"Blog post page navigation",description:"The ARIA label for the blog posts pagination"})},n&&a.createElement(d.Z,(0,m.Z)({},n,{subLabel:a.createElement(u.Z,{id:"theme.blog.post.paginator.newerPost",description:"The blog post button label to navigate to the newer/previous post"},"Newer Post")})),t&&a.createElement(d.Z,(0,m.Z)({},t,{subLabel:a.createElement(u.Z,{id:"theme.blog.post.paginator.olderPost",description:"The blog post button label to navigate to the older/next post"},"Older Post"),isNext:!0})))}function f(){var e,t=(0,o.C)(),n=t.assets,r=t.metadata,i=r.title,c=r.description,s=r.date,m=r.tags,u=r.authors,d=r.frontMatter,v=d.keywords,f=null!=(e=n.image)?e:d.image;return a.createElement(l.d,{title:i,description:c,keywords:v,image:f},a.createElement("meta",{property:"og:type",content:"article"}),a.createElement("meta",{property:"article:published_time",content:s}),u.some((function(e){return e.url}))&&a.createElement("meta",{property:"article:author",content:u.map((function(e){return e.url})).filter(Boolean).join(",")}),m.length>0&&a.createElement("meta",{property:"article:tag",content:m.map((function(e){return e.label})).join(",")}))}var g=n(9407);function p(e){var t=e.sidebar,n=e.children,r=(0,o.C)(),l=r.metadata,i=r.toc,m=l.nextItem,u=l.prevItem,d=l.frontMatter,f=d.hide_table_of_contents,p=d.toc_min_heading_level,h=d.toc_max_heading_level;return a.createElement(c.Z,{sidebar:t,toc:!f&&i.length>0?a.createElement(g.Z,{toc:i,minHeadingLevel:p,maxHeadingLevel:h}):void 0},a.createElement(s.Z,null,n),(m||u)&&a.createElement(v,{nextItem:m,prevItem:u}))}function h(e){var t=e.content;return a.createElement(o.n,{content:e.content,isBlogPostPage:!0},a.createElement(l.FG,{className:(0,r.Z)(i.k.wrapper.blogPages,i.k.page.blogPostPage)},a.createElement(f,null),a.createElement(p,{sidebar:e.sidebar},a.createElement(t,null))))}},9407:(e,t,n)=>{n.d(t,{Z:()=>m});var a=n(7462),r=n(3366),l=n(7294),i=n(6010),o=n(3743);const c="tableOfContents_bqdL";var s=["className"];function m(e){var t=e.className,n=(0,r.Z)(e,s);return l.createElement("div",{className:(0,i.Z)(c,"thin-scrollbar",t)},l.createElement(o.Z,(0,a.Z)({},n,{linkClassName:"table-of-contents__link toc-highlight",linkActiveClassName:"table-of-contents__link--active"})))}},3743:(e,t,n)=>{n.d(t,{Z:()=>h});var a=n(7462),r=n(3366),l=n(7294),i=n(6668),o=["parentIndex"];function c(e){var t=e.map((function(e){return Object.assign({},e,{parentIndex:-1,children:[]})})),n=Array(7).fill(-1);t.forEach((function(e,t){var a=n.slice(2,e.level);e.parentIndex=Math.max.apply(Math,a),n[e.level]=t}));var a=[];return t.forEach((function(e){var n=e.parentIndex,l=(0,r.Z)(e,o);n>=0?t[n].children.push(l):a.push(l)})),a}function s(e){var t=e.toc,n=e.minHeadingLevel,a=e.maxHeadingLevel;return t.flatMap((function(e){var t=s({toc:e.children,minHeadingLevel:n,maxHeadingLevel:a});return function(e){return e.level>=n&&e.level<=a}(e)?[Object.assign({},e,{children:t})]:t}))}function m(e){var t=e.getBoundingClientRect();return t.top===t.bottom?m(e.parentNode):t}function u(e,t){var n,a,r=t.anchorTopOffset,l=e.find((function(e){return m(e).top>=r}));return l?function(e){return e.top>0&&e.bottom<window.innerHeight/2}(m(l))?l:null!=(a=e[e.indexOf(l)-1])?a:null:null!=(n=e[e.length-1])?n:null}function d(){var e=(0,l.useRef)(0),t=(0,i.L)().navbar.hideOnScroll;return(0,l.useEffect)((function(){e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function v(e){var t=(0,l.useRef)(void 0),n=d();(0,l.useEffect)((function(){if(!e)return function(){};var a=e.linkClassName,r=e.linkActiveClassName,l=e.minHeadingLevel,i=e.maxHeadingLevel;function o(){var e=function(e){return Array.from(document.getElementsByClassName(e))}(a),o=function(e){for(var t=e.minHeadingLevel,n=e.maxHeadingLevel,a=[],r=t;r<=n;r+=1)a.push("h"+r+".anchor");return Array.from(document.querySelectorAll(a.join()))}({minHeadingLevel:l,maxHeadingLevel:i}),c=u(o,{anchorTopOffset:n.current}),s=e.find((function(e){return c&&c.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)}));e.forEach((function(e){!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(r),e.classList.add(r),t.current=e):e.classList.remove(r)}(e,e===s)}))}return document.addEventListener("scroll",o),document.addEventListener("resize",o),o(),function(){document.removeEventListener("scroll",o),document.removeEventListener("resize",o)}}),[e,n])}function f(e){var t=e.toc,n=e.className,a=e.linkClassName,r=e.isChild;return t.length?l.createElement("ul",{className:r?void 0:n},t.map((function(e){return l.createElement("li",{key:e.id},l.createElement("a",{href:"#"+e.id,className:null!=a?a:void 0,dangerouslySetInnerHTML:{__html:e.value}}),l.createElement(f,{isChild:!0,toc:e.children,className:n,linkClassName:a}))}))):null}const g=l.memo(f);var p=["toc","className","linkClassName","linkActiveClassName","minHeadingLevel","maxHeadingLevel"];function h(e){var t=e.toc,n=e.className,o=void 0===n?"table-of-contents table-of-contents__left-border":n,m=e.linkClassName,u=void 0===m?"table-of-contents__link":m,d=e.linkActiveClassName,f=void 0===d?void 0:d,h=e.minHeadingLevel,b=e.maxHeadingLevel,L=(0,r.Z)(e,p),E=(0,i.L)(),H=null!=h?h:E.tableOfContents.minHeadingLevel,N=null!=b?b:E.tableOfContents.maxHeadingLevel,x=function(e){var t=e.toc,n=e.minHeadingLevel,a=e.maxHeadingLevel;return(0,l.useMemo)((function(){return s({toc:c(t),minHeadingLevel:n,maxHeadingLevel:a})}),[t,n,a])}({toc:t,minHeadingLevel:H,maxHeadingLevel:N});return v((0,l.useMemo)((function(){if(u&&f)return{linkClassName:u,linkActiveClassName:f,minHeadingLevel:H,maxHeadingLevel:N}}),[u,f,H,N])),l.createElement(g,(0,a.Z)({toc:x,className:o,linkClassName:u},L))}}}]);
\ No newline at end of file
diff --git a/assets/js/d4bf336d.5c9be230.js b/assets/js/d4bf336d.5c9be230.js
new file mode 100644
index 0000000..dad889d
--- /dev/null
+++ b/assets/js/d4bf336d.5c9be230.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[6401],{3905:(e,t,a)=>{a.d(t,{Zo:()=>m,kt:()=>s});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 l(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 p(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?l(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):l(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={},l=Object.keys(e);for(n=0;n<l.length;n++)a=l[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n<l.length;n++)a=l[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var o=n.createContext({}),k=function(e){var t=n.useContext(o),a=t;return e&&(a="function"==typeof e?e(t):p(p({},t),e)),a},m=function(e){var t=k(e.components);return n.createElement(o.Provider,{value:t},e.children)},c="mdxType",u={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,r=e.mdxType,l=e.originalType,o=e.parentName,m=i(e,["components","mdxType","originalType","parentName"]),c=k(a),d=r,s=c["".concat(o,".").concat(d)]||c[d]||u[d]||l;return a?n.createElement(s,p(p({ref:t},m),{},{components:a})):n.createElement(s,p({ref:t},m))}));function s(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=a.length,p=new Array(l);p[0]=d;var i={};for(var o in t)hasOwnProperty.call(t,o)&&(i[o]=t[o]);i.originalType=e,i[c]="string"==typeof e?e:r,p[1]=i;for(var k=2;k<l;k++)p[k]=a[k];return n.createElement.apply(null,p)}return n.createElement.apply(null,a)}d.displayName="MDXCreateElement"},3954:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>m,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>k,toc:()=>c});var n=a(7462),r=a(3366),l=(a(7294),a(3905)),p=["components"],i={id:"aes",title:"AES",sidebar_label:"AES"},o=void 0,k={unversionedId:"cryptojs/aes",id:"cryptojs/aes",title:"AES",description:"AES",source:"@site/../docs/cryptojs/aes.md",sourceDirName:"cryptojs",slug:"/cryptojs/aes",permalink:"/docs/cryptojs/aes",draft:!1,tags:[],version:"current",frontMatter:{id:"aes",title:"AES",sidebar_label:"AES"},sidebar:"docs",previous:{title:"AMCL JavaScript API",permalink:"/docs/cryptojs/amcl-javascript-api"},next:{title:"BIG",permalink:"/docs/cryptojs/big"}},m={},c=[{value:"AES",id:"aes",level:2},{value:"new AES()",id:"new-aes",level:3},{value:"aeS.reset(m, iv)",id:"aesresetm-iv",level:3},{value:"aeS.getreg() \u21d2",id:"aesgetreg-",level:3},{value:"aeS.init(m, n, key, iv)",id:"aesinitm-n-key-iv",level:3},{value:"aeS.ecb_encrypt(buff)",id:"aesecb_encryptbuff",level:3},{value:"aeS.ecb_decrypt(buff)",id:"aesecb_decryptbuff",level:3},{value:"aeS.encrypt(buff)",id:"aesencryptbuff",level:3},{value:"aeS.decrypt(buff)",id:"aesdecryptbuff",level:3},{value:"aeS.end()",id:"aesend",level:3}],u={toc:c};function d(e){var t=e.components,a=(0,r.Z)(e,p);return(0,l.kt)("wrapper",(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("a",{name:"AES"}),(0,l.kt)("h2",{id:"aes"},"AES"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": global class",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}AES{"}"}'),"  "),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#AES"},"AES"),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#new_AES_new"},"new AES()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#AES+reset"},".reset(m, iv)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#AES+getreg"},".getreg()")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#AES+init"},".init(m, n, key, iv)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#AES+ecb_encrypt"},".ecb_encrypt(buff)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#AES+ecb_decrypt"},".ecb_decrypt(buff)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#AES+encrypt"},".encrypt(buff)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#AES+decrypt"},".decrypt(buff)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#AES+end"},".end()"))))),(0,l.kt)("a",{name:"new_AES_new"}),(0,l.kt)("h3",{id:"new-aes"},"new AES()"),(0,l.kt)("p",null,"Creates an instance of AES."),(0,l.kt)("a",{name:"AES+reset"}),(0,l.kt)("h3",{id:"aesresetm-iv"},"aeS.reset(m, iv)"),(0,l.kt)("p",null,"Reset AES mode or IV"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#AES"},(0,l.kt)("code",null,"AES")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}AES{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"m"),(0,l.kt)("td",{parentName:"tr",align:null},"The new active mode of operation (ECB, CBC, OFB, CFB etc)")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"iv"),(0,l.kt)("td",{parentName:"tr",align:null},"The new Initialisation Vector")))),(0,l.kt)("a",{name:"AES+getreg"}),(0,l.kt)("h3",{id:"aesgetreg-"},"aeS.getreg() \u21d2"),(0,l.kt)("p",null,"Reset Extract chaining vector"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#AES"},(0,l.kt)("code",null,"AES")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": f the extracted chaining vector",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}AES{"}"}'),"  "),(0,l.kt)("a",{name:"AES+init"}),(0,l.kt)("h3",{id:"aesinitm-n-key-iv"},"aeS.init(m, n, key, iv)"),(0,l.kt)("p",null,"Initialise an instance of AES and its mode of operation"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#AES"},(0,l.kt)("code",null,"AES")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}AES{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"m"),(0,l.kt)("td",{parentName:"tr",align:null},"is the active mode of operation (ECB, CBC, OFB, CFB etc)")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"n"),(0,l.kt)("td",{parentName:"tr",align:null},"is the key length in bytes, 16, 24 or 32")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"key"),(0,l.kt)("td",{parentName:"tr",align:null},"the AES key as an array of 16 bytes")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"iv"),(0,l.kt)("td",{parentName:"tr",align:null},"the Initialisation Vector")))),(0,l.kt)("a",{name:"AES+ecb_encrypt"}),(0,l.kt)("h3",{id:"aesecb_encryptbuff"},"aeS.ecb_encrypt(buff)"),(0,l.kt)("p",null,"Encrypt a single 16 byte block in ECB mode"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#AES"},(0,l.kt)("code",null,"AES")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}AES{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"buff"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("code",null,"string")),(0,l.kt)("td",{parentName:"tr",align:null},"is an array of 16 plaintext bytes, on exit becomes ciphertext")))),(0,l.kt)("a",{name:"AES+ecb_decrypt"}),(0,l.kt)("h3",{id:"aesecb_decryptbuff"},"aeS.ecb_decrypt(buff)"),(0,l.kt)("p",null,"Decrypt a single 16 byte block in ECB mode"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#AES"},(0,l.kt)("code",null,"AES")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}AES{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"buff"),(0,l.kt)("td",{parentName:"tr",align:null},"is an array of 16 cipherext bytes, on exit becomes plaintext")))),(0,l.kt)("a",{name:"AES+encrypt"}),(0,l.kt)("h3",{id:"aesencryptbuff"},"aeS.encrypt(buff)"),(0,l.kt)("p",null,"Encrypt using selected mode of operation"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#AES"},(0,l.kt)("code",null,"AES")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}AES{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"buff"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("code",null,"string")),(0,l.kt)("td",{parentName:"tr",align:null},"is an array of 16 plaintext bytes, on exit becomes ciphertext")))),(0,l.kt)("a",{name:"AES+decrypt"}),(0,l.kt)("h3",{id:"aesdecryptbuff"},"aeS.decrypt(buff)"),(0,l.kt)("p",null,"Decrypt using selected mode of operation"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#AES"},(0,l.kt)("code",null,"AES")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}AES{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"buff"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("code",null,"string")),(0,l.kt)("td",{parentName:"tr",align:null},"is an array of 16 cipherext bytes, on exit becomes plaintext")))),(0,l.kt)("a",{name:"AES+end"}),(0,l.kt)("h3",{id:"aesend"},"aeS.end()"),(0,l.kt)("p",null,"Clean up and delete left-overs"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#AES"},(0,l.kt)("code",null,"AES")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}AES{"}"}')))}d.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/da541cae.ce5e416a.js b/assets/js/da541cae.ce5e416a.js
new file mode 100644
index 0000000..68e9873
--- /dev/null
+++ b/assets/js/da541cae.ce5e416a.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4591],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,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({}),p=function(e){var t=a.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 a.createElement(l.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,i=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=p(r),m=n,h=u["".concat(l,".").concat(m)]||u[m]||d[m]||i;return r?a.createElement(h,o(o({ref:t},c),{},{components:r})):a.createElement(h,o({ref:t},c))}));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]=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:n,o[1]=s;for(var p=2;p<i;p++)o[p]=r[p];return a.createElement.apply(null,o)}return a.createElement.apply(null,r)}m.displayName="MDXCreateElement"},3353:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>m,frontMatter:()=>s,metadata:()=>p,toc:()=>u});var a=r(7462),n=r(3366),i=(r(7294),r(3905)),o=["components"],s={id:"plugins-overview",title:"D-TA Plugins Overview",sidebar_label:"Plugins Overview"},l=void 0,p={unversionedId:"dta-details/plugins-overview",id:"dta-details/plugins-overview",title:"D-TA Plugins Overview",description:"The out-of-the-box Milagro D-TA doesn't do much: a Principal's D-TA gets a public key from a Fiduciary's D-TA, and at a later date, can request the corresponding secret key. It is simple conceptually, but the core operation does this in a hard-to-hack, and fully auditable way.",source:"@site/../docs/dta-details/d-ta-plugins.md",sourceDirName:"dta-details",slug:"/dta-details/plugins-overview",permalink:"/docs/dta-details/plugins-overview",draft:!1,tags:[],version:"current",frontMatter:{id:"plugins-overview",title:"D-TA Plugins Overview",sidebar_label:"Plugins Overview"},sidebar:"docs",previous:{title:"IPFS",permalink:"/docs/dta-details/ipfs"},next:{title:"Authentication",permalink:"/docs/dta-details/authentication"}},c={},u=[{value:"Approach",id:"approach",level:2}],d={toc:u};function m(e){var t=e.components,r=(0,n.Z)(e,o);return(0,i.kt)("wrapper",(0,a.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"The out-of-the-box Milagro D-TA doesn't do much: a Principal's D-TA gets a public key from a Fiduciary's D-TA, and at a later date, can request the corresponding secret key. It is simple conceptually, but the core operation does this in a hard-to-hack, and fully auditable way. "),(0,i.kt)("p",null,"However, this basic capability unlocks a huge range of potential uses cases. Some use cases relate to the Principal i.e. what the keys can be used for, and some relate to the Fiduciary i.e. how the secret key is kept safe (a.k.a. custody). "),(0,i.kt)("p",null,'The open source "vanilla" Milagro is an attempt to engage a wider community to make the communication between these parties as robust as possible, and the plugin framework enables developers to extend the Milagro D-TA\'s core capability and apply it to solve real world problems.'),(0,i.kt)("p",null,"Out of the box the Milagro D-TA comes with two plugins:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Safeguard Secret")," - allows the Principal to use a public key obtained from the Fiduciary's D-TA to encrypt a string using ECIES, then obtain the secret key back from the Fiduciary's D-TA to decrypt the same string.")),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Bitcoin Wallet Security")," - uses the public key to generate a Bitcoin address and then constructs the corresponding secret key only when it is needed (this is a neat trick using elliptic curve magic)."))),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},(0,i.kt)("em",{parentName:"strong"},"A Note About Security"))),(0,i.kt)("p",null,"The point of these plugins is to show you how the framework works and encourage you to develop your own. They do not (out of the box) provide a secure way to store your secret keys. The key pair seed is stored only in the Fiduciary's onboard database - this is not how you should be doing it in production. Future releases will provide guidance on securing these seeds via PKCS#11 integrations and tie-ins to service providers."),(0,i.kt)("h2",{id:"approach"},"Approach"),(0,i.kt)("p",null,"The Milagro D-TA plugin framework has been designed with following assumptions:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Compile-Time")),(0,i.kt)("p",{parentName:"li"},"  Milagro D-TA plugins are compiled into the Milagro D-TA - to include one you simply clone the plugin into to the pkg directory and pass a reference to the plugin as a build directive like this..."),(0,i.kt)("pre",{parentName:"li"},(0,i.kt)("code",{parentName:"pre"},'\ngo build -tags "plugin encryptAThing" -o target/service github.com/apache/incubator-milagro-dta/cmd/service\n\n')),(0,i.kt)("p",{parentName:"li"},"  We considered run-time plugins using shared objects via the ",(0,i.kt)("a",{parentName:"p",href:"https://golang.org/pkg/plugin/"},"Go Plugin Package")," however this presented significant security challenges. We would very much like explore this idea further with the developer community.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"One-at-a-Time")),(0,i.kt)("p",{parentName:"li"}," Each Milagro D-TA server can only run one plugin at a time. We considered how to allow multiple plugins to interoperate but this produces significant operational and security concerns. Of course if you run a pair of servers, (example: as Principal and Fiduciary) then they can each run different plugins.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"No New Endpoints")),(0,i.kt)("p",{parentName:"li"},"  You can only write plugins to support the ",(0,i.kt)("a",{parentName:"p",href:"http://localhost:3000/swagger/"},"Standard Endpoints"),". This probably seems quite restrictive but we think it is important that Milagro D-TA operates within a defined scope and in a predictable way. The Milagro D-TA is about the distributed management of key pairs, we are concerned that if the plugin framework allowed developers to add endpoints such as ",(0,i.kt)("em",{parentName:"p"},"GET fastfood/burger?orderby=mostTasty")," then Milagro would just become a cool implementation of ",(0,i.kt)("a",{parentName:"p",href:"https://gokit.io/"},"Go kit")," and it would become impossible for users and integrators to predict what it will do. ",(0,i.kt)("strong",{parentName:"p"},"However...")),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Let's Talk"),": As a community we're excited to add new features to the Milagro D-TA. Propose your new endpoint as a feature (or even submit a PR) and we'll collectively consider adding it."),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("strong",{parentName:"li"},"Let's Fork"),": Go ahead and fork the Milagro D-TA. (But remember that the Milagro D-TA is basically a communication protocol so keep it compatible with other Milagro users)."))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("strong",{parentName:"p"},"Extensions")," "),(0,i.kt)("p",{parentName:"li"}," Although we restrict what endpoints Milagro provides we give you a highly flexible way to define what data each endpoint accepts and returns via the ",(0,i.kt)("strong",{parentName:"p"},"extensions")," JSON prop. For example the Safeguard Secret plugin extends the POST /order endpoint like this:"),(0,i.kt)("pre",{parentName:"li"},(0,i.kt)("code",{parentName:"pre"},'\n POST /order\n \n Request    \n {\n     "beneficiaryIDDocumentCID" : "IPFSAddress",\n     "extensions" : {\n         "plainText":"encryptme"\n         }\n }\n\n Response\n {\n    "orderPart1CID" : "IPFSAddress",\n   "orderPart2CID" : "IPFSAddress",\n   "commitment"    : "IPFSAddress",\n   "createdAt"     : 1563982017,\n     "extensions" : {\n         "cypherText":"iAmEncrypted"\n     }      \n }\n\n')))))}m.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/dd16e380.023b9f21.js b/assets/js/dd16e380.023b9f21.js
new file mode 100644
index 0000000..af3aa53
--- /dev/null
+++ b/assets/js/dd16e380.023b9f21.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9779],{3905:(e,t,a)=>{a.d(t,{Zo:()=>i,kt:()=>E});var r=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 p(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function m(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?p(Object(a),!0).forEach((function(t){n(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):p(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,r,n=function(e,t){if(null==e)return{};var a,r,n={},p=Object.keys(e);for(r=0;r<p.length;r++)a=p[r],t.indexOf(a)>=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var p=Object.getOwnPropertySymbols(e);for(r=0;r<p.length;r++)a=p[r],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var k=r.createContext({}),s=function(e){var t=r.useContext(k),a=t;return e&&(a="function"==typeof e?e(t):m(m({},t),e)),a},i=function(e){var t=s(e.components);return r.createElement(k.Provider,{value:t},e.children)},l="mdxType",N={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},c=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,p=e.originalType,k=e.parentName,i=o(e,["components","mdxType","originalType","parentName"]),l=s(a),c=n,E=l["".concat(k,".").concat(c)]||l[c]||N[c]||p;return a?r.createElement(E,m(m({ref:t},i),{},{components:a})):r.createElement(E,m({ref:t},i))}));function E(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var p=a.length,m=new Array(p);m[0]=c;var o={};for(var k in t)hasOwnProperty.call(t,k)&&(o[k]=t[k]);o.originalType=e,o[l]="string"==typeof e?e:n,m[1]=o;for(var s=2;s<p;s++)m[s]=a[s];return r.createElement.apply(null,m)}return r.createElement.apply(null,a)}c.displayName="MDXCreateElement"},7146:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>i,contentTitle:()=>k,default:()=>c,frontMatter:()=>o,metadata:()=>s,toc:()=>l});var r=a(7462),n=a(3366),p=(a(7294),a(3905)),m=["components"],o={id:"ecdh",title:"ECDH",sidebar_label:"ECDH"},k=void 0,s={unversionedId:"cryptojs/ecdh",id:"cryptojs/ecdh",title:"ECDH",description:"ECDH",source:"@site/../docs/cryptojs/ecdh.md",sourceDirName:"cryptojs",slug:"/cryptojs/ecdh",permalink:"/docs/cryptojs/ecdh",draft:!1,tags:[],version:"current",frontMatter:{id:"ecdh",title:"ECDH",sidebar_label:"ECDH"},sidebar:"docs",previous:{title:"DBIG",permalink:"/docs/cryptojs/dbig"},next:{title:"ECP",permalink:"/docs/cryptojs/ecp"}},i={},l=[{value:"ECDH",id:"ecdh",level:2},{value:"new ECDH()",id:"new-ecdh",level:3},{value:"ECDH.inttobytes() \u21d2",id:"ecdhinttobytes-",level:3},{value:"ECDH.bytestostring() \u21d2",id:"ecdhbytestostring-",level:3},{value:"ECDH.stringtobytes() \u21d2",id:"ecdhstringtobytes-",level:3},{value:"ECDH.hashit() \u21d2",id:"ecdhhashit-",level:3},{value:"ECDH.KDF2() \u21d2",id:"ecdhkdf2-",level:3},{value:"ECDH.PBKDF2() \u21d2",id:"ecdhpbkdf2-",level:3},{value:"ECDH.HMAC() \u21d2",id:"ecdhhmac-",level:3},{value:"ECDH.AES_CBC_IV0_ENCRYPT() \u21d2",id:"ecdhaes_cbc_iv0_encrypt-",level:3},{value:"ECDH.AES_CBC_IV0_DECRYPT() \u21d2",id:"ecdhaes_cbc_iv0_decrypt-",level:3},{value:"ECDH.KEY_PAIR_GENERATE() \u21d2",id:"ecdhkey_pair_generate-",level:3},{value:"ECDH.PUBLIC_KEY_VALIDATE() \u21d2",id:"ecdhpublic_key_validate-",level:3},{value:"ECDH.ECPSVDP_DH() \u21d2",id:"ecdhecpsvdp_dh-",level:3},{value:"ECDH.ECPSP_DSA() \u21d2",id:"ecdhecpsp_dsa-",level:3},{value:"ECDH.ECPVP_DSA() \u21d2",id:"ecdhecpvp_dsa-",level:3},{value:"ECDH.ECIES_ENCRYPT() \u21d2",id:"ecdhecies_encrypt-",level:3},{value:"ECDH.ECIES_DECRYPT() \u21d2",id:"ecdhecies_decrypt-",level:3}],N={toc:l};function c(e){var t=e.components,a=(0,n.Z)(e,m);return(0,p.kt)("wrapper",(0,r.Z)({},N,a,{components:t,mdxType:"MDXLayout"}),(0,p.kt)("a",{name:"ECDH"}),(0,p.kt)("h2",{id:"ecdh"},"ECDH"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": global class",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}ECDH{"}"}'),"  "),(0,p.kt)("ul",null,(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#ECDH"},"ECDH"),(0,p.kt)("ul",{parentName:"li"},(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#new_ECDH_new"},"new ECDH()")),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#ECDH.inttobytes"},".inttobytes()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#ECDH.bytestostring"},".bytestostring()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#ECDH.stringtobytes"},".stringtobytes()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#ECDH.hashit"},".hashit()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#ECDH.KDF2"},".KDF2()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#ECDH.PBKDF2"},".PBKDF2()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#ECDH.HMAC"},".HMAC()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#ECDH.AES_CBC_IV0_ENCRYPT"},".AES_CBC_IV0_ENCRYPT()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#ECDH.AES_CBC_IV0_DECRYPT"},".AES_CBC_IV0_DECRYPT()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#ECDH.KEY_PAIR_GENERATE"},".KEY_PAIR_GENERATE()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#ECDH.PUBLIC_KEY_VALIDATE"},".PUBLIC_KEY_VALIDATE()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#ECDH.ECPSVDP_DH"},".ECPSVDP_DH()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#ECDH.ECPSP_DSA"},".ECPSP_DSA()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#ECDH.ECPVP_DSA"},".ECPVP_DSA()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#ECDH.ECIES_ENCRYPT"},".ECIES_ENCRYPT()")," \u21d2"),(0,p.kt)("li",{parentName:"ul"},(0,p.kt)("a",{parentName:"li",href:"#ECDH.ECIES_DECRYPT"},".ECIES_DECRYPT()")," \u21d2")))),(0,p.kt)("a",{name:"new_ECDH_new"}),(0,p.kt)("h3",{id:"new-ecdh"},"new ECDH()"),(0,p.kt)("p",null,"Creates an instance of ECDH"),(0,p.kt)("a",{name:"ECDH.inttobytes"}),(0,p.kt)("h3",{id:"ecdhinttobytes-"},"ECDH.inttobytes() \u21d2"),(0,p.kt)("p",null,"Convert Integer to n-byte array"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#ECDH"},(0,p.kt)("code",null,"ECDH")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": byte array",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}ECDH{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": n integer",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": len integer length  "),(0,p.kt)("a",{name:"ECDH.bytestostring"}),(0,p.kt)("h3",{id:"ecdhbytestostring-"},"ECDH.bytestostring() \u21d2"),(0,p.kt)("p",null,"Convert byte array to string"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#ECDH"},(0,p.kt)("code",null,"ECDH")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": string",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}ECDH{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": b byte array  "),(0,p.kt)("a",{name:"ECDH.stringtobytes"}),(0,p.kt)("h3",{id:"ecdhstringtobytes-"},"ECDH.stringtobytes() \u21d2"),(0,p.kt)("p",null,"Convert string to byte array"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#ECDH"},(0,p.kt)("code",null,"ECDH")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": byte array",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}ECDH{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": s string  "),(0,p.kt)("a",{name:"ECDH.hashit"}),(0,p.kt)("h3",{id:"ecdhhashit-"},"ECDH.hashit() \u21d2"),(0,p.kt)("p",null,"general purpose hash function w=hash(B|n)"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#ECDH"},(0,p.kt)("code",null,"ECDH")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": w output",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}ECDH{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": sha is the hash type",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": A byte array involved in the hash",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": n integer involved in the hash",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": pad padding  "),(0,p.kt)("a",{name:"ECDH.KDF2"}),(0,p.kt)("h3",{id:"ecdhkdf2-"},"ECDH.KDF2() \u21d2"),(0,p.kt)("p",null,"IEEE-1363 Key Derivation Function - generates key K from inputs Z and P"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#ECDH"},(0,p.kt)("code",null,"ECDH")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": K derived key",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}ECDH{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": sha is the hash type",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": Z input byte array",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": P input key derivation parameters - can be NULL",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": 0len is output desired length of key  "),(0,p.kt)("a",{name:"ECDH.PBKDF2"}),(0,p.kt)("h3",{id:"ecdhpbkdf2-"},"ECDH.PBKDF2() \u21d2"),(0,p.kt)("p",null,"Password Based Key Derivation Function - generates key K from password, salt and repeat counter"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#ECDH"},(0,p.kt)("code",null,"ECDH")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": key derived key",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}ECDH{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": sha is the hash type",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": Pass input password",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": Salt salt value",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": rep Number of times to be iterated.",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": 0len is output desired length of key  "),(0,p.kt)("a",{name:"ECDH.HMAC"}),(0,p.kt)("h3",{id:"ecdhhmac-"},"ECDH.HMAC() \u21d2"),(0,p.kt)("p",null,"HMAC of message M using key K to create tag of length tag.length"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#ECDH"},(0,p.kt)("code",null,"ECDH")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": error code",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}ECDH{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": sha is the hash type",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": M input message",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": K input encryption key",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": tag is the output HMAC  "),(0,p.kt)("a",{name:"ECDH.AES_CBC_IV0_ENCRYPT"}),(0,p.kt)("h3",{id:"ecdhaes_cbc_iv0_encrypt-"},"ECDH.AES_CBC_IV0_ENCRYPT() \u21d2"),(0,p.kt)("p",null,"AES encrypts a plaintext to a ciphtertext"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#ECDH"},(0,p.kt)("code",null,"ECDH")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": C Ciphertext",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}ECDH{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": M input message",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": K AES key  "),(0,p.kt)("a",{name:"ECDH.AES_CBC_IV0_DECRYPT"}),(0,p.kt)("h3",{id:"ecdhaes_cbc_iv0_decrypt-"},"ECDH.AES_CBC_IV0_DECRYPT() \u21d2"),(0,p.kt)("p",null,"AES encrypts a plaintext to a ciphtertext"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#ECDH"},(0,p.kt)("code",null,"ECDH")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": P Plaintext",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}ECDH{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": C Ciphertext",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": K AES key  "),(0,p.kt)("a",{name:"ECDH.KEY_PAIR_GENERATE"}),(0,p.kt)("h3",{id:"ecdhkey_pair_generate-"},"ECDH.KEY_PAIR_GENERATE() \u21d2"),(0,p.kt)("p",null,"Generate an ECC public/private key pair"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#ECDH"},(0,p.kt)("code",null,"ECDH")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": 0 or an error code",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}ECDH{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": rng Cryptographically Secure Random Number Generator",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": S the private key",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": W the output public key, which is s.G, where G is a fixed generator  "),(0,p.kt)("a",{name:"ECDH.PUBLIC_KEY_VALIDATE"}),(0,p.kt)("h3",{id:"ecdhpublic_key_validate-"},"ECDH.PUBLIC_KEY_VALIDATE() \u21d2"),(0,p.kt)("p",null,"Generate an ECC public/private key pair"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#ECDH"},(0,p.kt)("code",null,"ECDH")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": 0 or an error code",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}ECDH{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": W the input public key to be validated  "),(0,p.kt)("a",{name:"ECDH.ECPSVDP_DH"}),(0,p.kt)("h3",{id:"ecdhecpsvdp_dh-"},"ECDH.ECPSVDP_DH() \u21d2"),(0,p.kt)("p",null,"Generate Diffie-Hellman shared key"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#ECDH"},(0,p.kt)("code",null,"ECDH")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": 0 or an error code",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}ECDH{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": S the private key",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": W the output public key, which is s.G, where G is a fixed generator",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": K the output shared key, in fact the x-coordinate of s.W  "),(0,p.kt)("a",{name:"ECDH.ECPSP_DSA"}),(0,p.kt)("h3",{id:"ecdhecpsp_dsa-"},"ECDH.ECPSP_DSA() \u21d2"),(0,p.kt)("p",null,"ECDSA Signature"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#ECDH"},(0,p.kt)("code",null,"ECDH")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": 0 or an error code",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}ECDH{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": sha is the hash type",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": RNG Cryptographically Secure Random Number Generator",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": S the private key",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": F the input message to be signed",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": C component of the output signature",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": D component of the output signature  "),(0,p.kt)("a",{name:"ECDH.ECPVP_DSA"}),(0,p.kt)("h3",{id:"ecdhecpvp_dsa-"},"ECDH.ECPVP_DSA() \u21d2"),(0,p.kt)("p",null,"ECDSA Signature Verification"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#ECDH"},(0,p.kt)("code",null,"ECDH")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": 0 or an error code",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}ECDH{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": sha is the hash type",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": W the public key",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": F the input message to be signed",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": C component of the output signature",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": D component of the output signature  "),(0,p.kt)("a",{name:"ECDH.ECIES_ENCRYPT"}),(0,p.kt)("h3",{id:"ecdhecies_encrypt-"},"ECDH.ECIES_ENCRYPT() \u21d2"),(0,p.kt)("p",null,"ECIES Encryption"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#ECDH"},(0,p.kt)("code",null,"ECDH")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": C ciphertext",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}ECDH{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": sha is the hash type",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": P1 input Key Derivation parameters",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": P2 input Encoding parameters",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": RNG Cryptographically Secure Random Number Generator",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": W the public key",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": M the input message to be encrypted",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": V component of the output ciphertext",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": T the output HMAC tag, part of the ciphertext  "),(0,p.kt)("a",{name:"ECDH.ECIES_DECRYPT"}),(0,p.kt)("h3",{id:"ecdhecies_decrypt-"},"ECDH.ECIES_DECRYPT() \u21d2"),(0,p.kt)("p",null,"ECIES Encryption"),(0,p.kt)("p",null,(0,p.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,p.kt)("a",{parentName:"p",href:"#ECDH"},(0,p.kt)("code",null,"ECDH")),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Returns"),": M plaintext",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"this"),": ",(0,p.kt)("code",null,'{"{"}ECDH{"}"}'),(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": sha is the hash type",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": P1 input Key Derivation parameters",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": P2 input Encoding parameters",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": V component of the output ciphertext",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": C Ciphertext",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": T the output HMAC tag, part of the ciphertext",(0,p.kt)("br",{parentName:"p"}),"\n",(0,p.kt)("strong",{parentName:"p"},"Parameter"),": U the private key"))}c.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/e12d15a2.dfb9d7ea.js b/assets/js/e12d15a2.dfb9d7ea.js
new file mode 100644
index 0000000..7aa0ea6
--- /dev/null
+++ b/assets/js/e12d15a2.dfb9d7ea.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4941],{3905:(t,e,a)=>{a.d(e,{Zo:()=>k,kt:()=>s});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 p(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 i(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 m=n.createContext({}),N=function(t){var e=n.useContext(m),a=e;return t&&(a="function"==typeof t?t(e):p(p({},e),t)),a},k=function(t){var e=N(t.components);return n.createElement(m.Provider,{value:e},t.children)},d="mdxType",u={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},o=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,l=t.originalType,m=t.parentName,k=i(t,["components","mdxType","originalType","parentName"]),d=N(a),o=r,s=d["".concat(m,".").concat(o)]||d[o]||u[o]||l;return a?n.createElement(s,p(p({ref:e},k),{},{components:a})):n.createElement(s,p({ref:e},k))}));function s(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=a.length,p=new Array(l);p[0]=o;var i={};for(var m in e)hasOwnProperty.call(e,m)&&(i[m]=e[m]);i.originalType=t,i[d]="string"==typeof t?t:r,p[1]=i;for(var N=2;N<l;N++)p[N]=a[N];return n.createElement.apply(null,p)}return n.createElement.apply(null,a)}o.displayName="MDXCreateElement"},2126:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>k,contentTitle:()=>m,default:()=>o,frontMatter:()=>i,metadata:()=>N,toc:()=>d});var n=a(7462),r=a(3366),l=(a(7294),a(3905)),p=["components"],i={id:"mpin",title:"MPIN",sidebar_label:"MPIN"},m=void 0,N={unversionedId:"cryptojs/mpin",id:"cryptojs/mpin",title:"MPIN",description:"MPIN",source:"@site/../docs/cryptojs/mpin.md",sourceDirName:"cryptojs",slug:"/cryptojs/mpin",permalink:"/docs/cryptojs/mpin",draft:!1,tags:[],version:"current",frontMatter:{id:"mpin",title:"MPIN",sidebar_label:"MPIN"},sidebar:"docs",previous:{title:"HASH512",permalink:"/docs/cryptojs/hash512"},next:{title:"MPIN192",permalink:"/docs/cryptojs/mpin192"}},k={},d=[{value:"MPIN",id:"mpin",level:2},{value:"new MPIN()",id:"new-mpin",level:3},{value:"MPIN.today() \u21d2",id:"mpintoday-",level:3},{value:"MPIN.bytestostring(b) \u21d2",id:"mpinbytestostringb-",level:3},{value:"MPIN.stringtobytes(s) \u21d2",id:"mpinstringtobytess-",level:3},{value:"MPIN.comparebytes(a, b) \u21d2",id:"mpincomparebytesa-b-",level:3},{value:"MPIN.mpin_hash(c, U) \u21d2",id:"mpinmpin_hashc-u-",level:3},{value:"MPIN.hashit(sha, n, B) \u21d2",id:"mpinhashitsha-n-b-",level:3},{value:"MPIN.map(u, cb) \u21d2",id:"mpinmapu-cb-",level:3},{value:"MPIN.unmap(u, P) \u21d2",id:"mpinunmapu-p-",level:3},{value:"MPIN.RECOMBINE_G1(R1, R2, R) \u21d2",id:"mpinrecombine_g1r1-r2-r-",level:3},{value:"MPIN.RECOMBINE_G2(W1, W2, W) \u21d2",id:"mpinrecombine_g2w1-w2-w-",level:3},{value:"MPIN.HASH_ID(sha, ID) \u21d2",id:"mpinhash_idsha-id-",level:3},{value:"MPIN.RANDOM_GENERATE(rng, S) \u21d2",id:"mpinrandom_generaterng-s-",level:3},{value:"MPIN.EXTRACT_PIN() \u21d2",id:"mpinextract_pin-",level:3},{value:"MPIN.EXTRACT_FACTOR() \u21d2",id:"mpinextract_factor-",level:3},{value:"MPIN.RESTORE_FACTOR() \u21d2",id:"mpinrestore_factor-",level:3},{value:"MPIN.GET_SERVER_SECRET(S, SST) \u21d2",id:"mpinget_server_secrets-sst-",level:3},{value:"MPIN.GET_G1_MULTIPLE(type, x, G, W) \u21d2",id:"mpinget_g1_multipletype-x-g-w-",level:3},{value:"MPIN.GET_CLIENT_SECRET(S, CID, CST) \u21d2",id:"mpinget_client_secrets-cid-cst-",level:3},{value:"MPIN.GET_CLIENT_PERMIT(sha, date, S, CID, CTT) \u21d2",id:"mpinget_client_permitsha-date-s-cid-ctt-",level:3},{value:"MPIN.CLIENT_1(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT) \u21d2",id:"mpinclient_1sha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-",level:3},{value:"MPIN.CLIENT_2(X, Y, SEC) \u21d2",id:"mpinclient_2x-y-sec-",level:3},{value:"MPIN.SERVER_1(sha, date, CID, HID, HTID) \u21d2",id:"mpinserver_1sha-date-cid-hid-htid-",level:3},{value:"MPIN.SERVER_2(date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, Pa) \u21d2",id:"mpinserver_2date-hid-htid-y-sst-xid-xcid-msec-e-f-pa-",level:3},{value:"MPIN.KANGAROO(E, F) \u21d2",id:"mpinkangarooe-f-",level:3},{value:"MPIN.GET_TIME() \u21d2",id:"mpinget_time-",level:3},{value:"MPIN.GET_Y(sha, TimeValue, xCID, Y) \u21d2",id:"mpinget_ysha-timevalue-xcid-y-",level:3},{value:"MPIN.CLIENT(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT, TimeValue, Y, Message) \u21d2",id:"mpinclientsha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-timevalue-y-message-",level:3},{value:"MPIN.SERVER(sha, date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, CID, TimeValue, MESSAGE, Pa) \u21d2",id:"mpinserversha-date-hid-htid-y-sst-xid-xcid-msec-e-f-cid-timevalue-message-pa-",level:3},{value:"MPIN.PRECOMPUTE(TOKEN, CID, G1, G2) \u21d2",id:"mpinprecomputetoken-cid-g1-g2-",level:3},{value:"MPIN.HASH_ALL(sha, HID, xID, xCID, SEC, Y, R, W) \u21d2",id:"mpinhash_allsha-hid-xid-xcid-sec-y-r-w-",level:3},{value:"MPIN.CLIENT_KEY(sha, G1, G2, pin, R, X, H, wCID, CK) \u21d2",id:"mpinclient_keysha-g1-g2-pin-r-x-h-wcid-ck-",level:3},{value:"MPIN.SERVER_KEY(h, Z, SST, W, H, HID, xID, xCID, SK) \u21d2",id:"mpinserver_keyh-z-sst-w-h-hid-xid-xcid-sk-",level:3},{value:"MPIN.GET_DVS_KEYPAIR(rng, Z, Pa) \u21d2",id:"mpinget_dvs_keypairrng-z-pa-",level:3}],u={toc:d};function o(t){var e=t.components,a=(0,r.Z)(t,p);return(0,l.kt)("wrapper",(0,n.Z)({},u,a,{components:e,mdxType:"MDXLayout"}),(0,l.kt)("a",{name:"MPIN"}),(0,l.kt)("h2",{id:"mpin"},"MPIN"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": global class",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}'),"  "),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN"},"MPIN"),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#new_MPIN_new"},"new MPIN()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.today"},".today()")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.bytestostring"},".bytestostring(b)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.stringtobytes"},".stringtobytes(s)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.comparebytes"},".comparebytes(a, b)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.mpin_hash"},".mpin_hash(c, U)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.hashit"},".hashit(sha, n, B)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.map"},".map(u, cb)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.unmap"},".unmap(u, P)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.RECOMBINE_G1"},".RECOMBINE_G1(R1, R2, R)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.RECOMBINE_G2"},".RECOMBINE_G2(W1, W2, W)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.HASH_ID"},".HASH_ID(sha, ID)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.RANDOM_GENERATE"},".RANDOM_GENERATE(rng, S)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.EXTRACT_PIN"},".EXTRACT_PIN()")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.EXTRACT_FACTOR"},".EXTRACT_FACTOR()")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.RESTORE_FACTOR"},".RESTORE_FACTOR()")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.GET_SERVER_SECRET"},".GET_SERVER_SECRET(S, SST)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.GET_G1_MULTIPLE"},".GET_G1_MULTIPLE(type, x, G, W)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.GET_CLIENT_SECRET"},".GET_CLIENT_SECRET(S, CID, CST)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.GET_CLIENT_PERMIT"},".GET_CLIENT_PERMIT(sha, date, S, CID, CTT)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.CLIENT_1"},".CLIENT_1(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.CLIENT_2"},".CLIENT_2(X, Y, SEC)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.SERVER_1"},".SERVER_1(sha, date, CID, HID, HTID)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.SERVER_2"},".SERVER_2(date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, Pa)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.KANGAROO"},".KANGAROO(E, F)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.GET_TIME"},".GET_TIME()")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.GET_Y"},".GET_Y(sha, TimeValue, xCID, Y)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.CLIENT"},".CLIENT(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT, TimeValue, Y, Message)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.SERVER"},".SERVER(sha, date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, CID, TimeValue, MESSAGE, Pa)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.PRECOMPUTE"},".PRECOMPUTE(TOKEN, CID, G1, G2)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.HASH_ALL"},".HASH_ALL(sha, HID, xID, xCID, SEC, Y, R, W)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.CLIENT_KEY"},".CLIENT_KEY(sha, G1, G2, pin, R, X, H, wCID, CK)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.SERVER_KEY"},".SERVER_KEY(h, Z, SST, W, H, HID, xID, xCID, SK)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#MPIN.GET_DVS_KEYPAIR"},".GET_DVS_KEYPAIR(rng, Z, Pa)")," \u21d2")))),(0,l.kt)("a",{name:"new_MPIN_new"}),(0,l.kt)("h3",{id:"new-mpin"},"new MPIN()"),(0,l.kt)("p",null,"Creates an instance of MPIN"),(0,l.kt)("a",{name:"MPIN.today"}),(0,l.kt)("h3",{id:"mpintoday-"},"MPIN.today() \u21d2"),(0,l.kt)("p",null,"Get epoch time for today"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": time in slots since epoch",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}'),"  "),(0,l.kt)("a",{name:"MPIN.bytestostring"}),(0,l.kt)("h3",{id:"mpinbytestostringb-"},"MPIN.bytestostring(b) \u21d2"),(0,l.kt)("p",null,"Convert byte array to string"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": s string",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"b"),(0,l.kt)("td",{parentName:"tr",align:null},"byte array")))),(0,l.kt)("a",{name:"MPIN.stringtobytes"}),(0,l.kt)("h3",{id:"mpinstringtobytess-"},"MPIN.stringtobytes(s) \u21d2"),(0,l.kt)("p",null,"Convert a string to byte array"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": b byte array",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"s"),(0,l.kt)("td",{parentName:"tr",align:null},"string")))),(0,l.kt)("a",{name:"MPIN.comparebytes"}),(0,l.kt)("h3",{id:"mpincomparebytesa-b-"},"MPIN.comparebytes(a, b) \u21d2"),(0,l.kt)("p",null,"Convert byte arrays"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": true if equal",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"a"),(0,l.kt)("td",{parentName:"tr",align:null},"byte array")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"b"),(0,l.kt)("td",{parentName:"tr",align:null},"byte array")))),(0,l.kt)("a",{name:"MPIN.mpin_hash"}),(0,l.kt)("h3",{id:"mpinmpin_hashc-u-"},"MPIN.mpin_hash(c, U) \u21d2"),(0,l.kt)("p",null,"Hash values"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": R hash value",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"c"),(0,l.kt)("td",{parentName:"tr",align:null},"FP8 instance")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"U"),(0,l.kt)("td",{parentName:"tr",align:null},"ECP unstancebyte array")))),(0,l.kt)("a",{name:"MPIN.hashit"}),(0,l.kt)("h3",{id:"mpinhashitsha-n-b-"},"MPIN.hashit(sha, n, B) \u21d2"),(0,l.kt)("p",null,"General purpose hash function"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": R hash value",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sha"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"n"),(0,l.kt)("td",{parentName:"tr",align:null},"Integer")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"B"),(0,l.kt)("td",{parentName:"tr",align:null},"byte array")))),(0,l.kt)("a",{name:"MPIN.map"}),(0,l.kt)("h3",{id:"mpinmapu-cb-"},"MPIN.map(u, cb) \u21d2"),(0,l.kt)("p",null,"maps a random u to a point on the curve"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": P ECP pointhash value",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"u"),(0,l.kt)("td",{parentName:"tr",align:null},"BIG numberInteger")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"cb"),(0,l.kt)("td",{parentName:"tr",align:null},'an integer representing the "sign" of y, in fact its least significant bit.')))),(0,l.kt)("a",{name:"MPIN.unmap"}),(0,l.kt)("h3",{id:"mpinunmapu-p-"},"MPIN.unmap(u, P) \u21d2"),(0,l.kt)("p",null,"returns u derived from P. Random value in range 1 to return value should then be added to u"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": r Value that should be added to u to derive P",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"u"),(0,l.kt)("td",{parentName:"tr",align:null},"BIG numberInteger")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"P"),(0,l.kt)("td",{parentName:"tr",align:null},"ECP pointhash value")))),(0,l.kt)("a",{name:"MPIN.RECOMBINE_G1"}),(0,l.kt)("h3",{id:"mpinrecombine_g1r1-r2-r-"},"MPIN.RECOMBINE_G1(R1, R2, R) \u21d2"),(0,l.kt)("p",null,"Add two members from the group G1"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": 0 or an error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"R1"),(0,l.kt)("td",{parentName:"tr",align:null},"Input member of G1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"R2"),(0,l.kt)("td",{parentName:"tr",align:null},"Input member of G1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"R"),(0,l.kt)("td",{parentName:"tr",align:null},"Output member of G1. R=R1+R2")))),(0,l.kt)("a",{name:"MPIN.RECOMBINE_G2"}),(0,l.kt)("h3",{id:"mpinrecombine_g2w1-w2-w-"},"MPIN.RECOMBINE_G2(W1, W2, W) \u21d2"),(0,l.kt)("p",null,"Add two members from the group G2"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": 0 or an error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"W1"),(0,l.kt)("td",{parentName:"tr",align:null},"Input member of G2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"W2"),(0,l.kt)("td",{parentName:"tr",align:null},"Input member of G2")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"W"),(0,l.kt)("td",{parentName:"tr",align:null},"Output member of G2. W=W1+W2")))),(0,l.kt)("a",{name:"MPIN.HASH_ID"}),(0,l.kt)("h3",{id:"mpinhash_idsha-id-"},"MPIN.HASH_ID(sha, ID) \u21d2"),(0,l.kt)("p",null,"Hash the identity"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": hash value",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sha"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ID"),(0,l.kt)("td",{parentName:"tr",align:null},"Identity as byte array")))),(0,l.kt)("a",{name:"MPIN.RANDOM_GENERATE"}),(0,l.kt)("h3",{id:"mpinrandom_generaterng-s-"},"MPIN.RANDOM_GENERATE(rng, S) \u21d2"),(0,l.kt)("p",null,"Create random secret"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"rng"),(0,l.kt)("td",{parentName:"tr",align:null},"cryptographically secure random number generator")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"S"),(0,l.kt)("td",{parentName:"tr",align:null},"Random secret value")))),(0,l.kt)("a",{name:"MPIN.EXTRACT_PIN"}),(0,l.kt)("h3",{id:"mpinextract_pin-"},"MPIN.EXTRACT_PIN() \u21d2"),(0,l.kt)("p",null,"Extract a PIN number from a client secret"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": token",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}'),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": sha hash type",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": CID Client identity",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": pin PIN value",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": TOKEN Client secret  "),(0,l.kt)("a",{name:"MPIN.EXTRACT_FACTOR"}),(0,l.kt)("h3",{id:"mpinextract_factor-"},"MPIN.EXTRACT_FACTOR() \u21d2"),(0,l.kt)("p",null,"Extract factor from TOKEN for identity CID"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": token",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}'),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": sha hash type",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": CID Client identity",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": factor Value to extract",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": facbits Number of bits in factor",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": TOKEN Token value  "),(0,l.kt)("a",{name:"MPIN.RESTORE_FACTOR"}),(0,l.kt)("h3",{id:"mpinrestore_factor-"},"MPIN.RESTORE_FACTOR() \u21d2"),(0,l.kt)("p",null,"Restore factor to TOKEN for identity CID"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": token",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}'),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": sha hash type",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": CID Client identity",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": factor Value to extract",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": facbits Number of bits in factor",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": TOKEN Token value  "),(0,l.kt)("a",{name:"MPIN.GET_SERVER_SECRET"}),(0,l.kt)("h3",{id:"mpinget_server_secrets-sst-"},"MPIN.GET_SERVER_SECRET(S, SST) \u21d2"),(0,l.kt)("p",null,"Create a server secret in G2 from a master secret"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"S"),(0,l.kt)("td",{parentName:"tr",align:null},"Master secret")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SST"),(0,l.kt)("td",{parentName:"tr",align:null},"Server secret = s.Q where Q is a fixed generator of G2")))),(0,l.kt)("a",{name:"MPIN.GET_G1_MULTIPLE"}),(0,l.kt)("h3",{id:"mpinget_g1_multipletype-x-g-w-"},"MPIN.GET_G1_MULTIPLE(type, x, G, W) \u21d2"),(0,l.kt)("p",null,"Find a random multiple of a point in G1"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}'),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Parameter"),": rng cryptographically secure random number generator  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"type"),(0,l.kt)("td",{parentName:"tr",align:null},"determines type of action to be taken")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"x"),(0,l.kt)("td",{parentName:"tr",align:null},"an output internally randomly generated if R!=NULL, otherwise must be provided as an input")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"G"),(0,l.kt)("td",{parentName:"tr",align:null},"if type=0 a point in G1, else an octet to be mapped to G1")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"W"),(0,l.kt)("td",{parentName:"tr",align:null},"the output =x.G or x.M(G), where M(.) is a mapping")))),(0,l.kt)("a",{name:"MPIN.GET_CLIENT_SECRET"}),(0,l.kt)("h3",{id:"mpinget_client_secrets-cid-cst-"},"MPIN.GET_CLIENT_SECRET(S, CID, CST) \u21d2"),(0,l.kt)("p",null,"Create a client secret in G1 from a master secret and the client ID"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"S"),(0,l.kt)("td",{parentName:"tr",align:null},"is an input master secret")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"CID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input client identity")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"CST"),(0,l.kt)("td",{parentName:"tr",align:null},"is the full client secret = s.H(ID)")))),(0,l.kt)("a",{name:"MPIN.GET_CLIENT_PERMIT"}),(0,l.kt)("h3",{id:"mpinget_client_permitsha-date-s-cid-ctt-"},"MPIN.GET_CLIENT_PERMIT(sha, date, S, CID, CTT) \u21d2"),(0,l.kt)("p",null,"Create a Time Permit in G1 from a master secret and the client ID"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null}))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sha"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"date"),(0,l.kt)("td",{parentName:"tr",align:null},"is input date, in days since the epoch."),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"S"),(0,l.kt)("td",{parentName:"tr",align:null},"is an input master secret"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"CID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input client identity"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"CTT"),(0,l.kt)("td",{parentName:"tr",align:null},"is a Time Permit for the given date = s.H(d"),(0,l.kt)("td",{parentName:"tr",align:null},"H(ID))")))),(0,l.kt)("a",{name:"MPIN.CLIENT_1"}),(0,l.kt)("h3",{id:"mpinclient_1sha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-"},"MPIN.CLIENT_1(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT) \u21d2"),(0,l.kt)("p",null,"Perform first pass of the client side of the 3-pass version of the M-Pin protocol"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null}))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sha"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"date"),(0,l.kt)("td",{parentName:"tr",align:null},"is input date, in days since the epoch. Set to 0 if Time permits disabled"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"CLIENT_ID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input client identity"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"rng"),(0,l.kt)("td",{parentName:"tr",align:null},"is a pointer to a cryptographically secure random number generator"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"X"),(0,l.kt)("td",{parentName:"tr",align:null},"an output internally randomly generated if R!=NULL, otherwise must be provided as an input"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"pin"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input PIN number"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"TOKEN"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input M-Pin token (the client secret with PIN portion removed)"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SEC"),(0,l.kt)("td",{parentName:"tr",align:null},"is output = CS+TP, where CS=is the reconstructed client secret, and TP is the time permit"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xID"),(0,l.kt)("td",{parentName:"tr",align:null},"is output = x.H(ID)"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xCID"),(0,l.kt)("td",{parentName:"tr",align:null},"is output = x.(H(ID)+H(d"),(0,l.kt)("td",{parentName:"tr",align:null},"H(ID)))")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"PERMIT"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input time permit"),(0,l.kt)("td",{parentName:"tr",align:null})))),(0,l.kt)("a",{name:"MPIN.CLIENT_2"}),(0,l.kt)("h3",{id:"mpinclient_2x-y-sec-"},"MPIN.CLIENT_2(X, Y, SEC) \u21d2"),(0,l.kt)("p",null,"Perform second pass of the client side of the 3-pass version of the M-Pin protocol"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"X"),(0,l.kt)("td",{parentName:"tr",align:null},"an input, a locally generated random number")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Y"),(0,l.kt)("td",{parentName:"tr",align:null},"an input random challenge from the server")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SEC"),(0,l.kt)("td",{parentName:"tr",align:null},"on output = -(x+y).V")))),(0,l.kt)("a",{name:"MPIN.SERVER_1"}),(0,l.kt)("h3",{id:"mpinserver_1sha-date-cid-hid-htid-"},"MPIN.SERVER_1(sha, date, CID, HID, HTID) \u21d2"),(0,l.kt)("p",null,"Perform first pass of the server side of the 3-pass version of the M-Pin protocol"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null}))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sha"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"date"),(0,l.kt)("td",{parentName:"tr",align:null},"is input date, in days since the epoch. Set to 0 if Time permits disabled"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"CID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input claimed client identity"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"HID"),(0,l.kt)("td",{parentName:"tr",align:null},"is output H(ID), a hash of the client ID"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"HTID"),(0,l.kt)("td",{parentName:"tr",align:null},"is output H(ID)+H(d"),(0,l.kt)("td",{parentName:"tr",align:null},"H(ID))")))),(0,l.kt)("a",{name:"MPIN.SERVER_2"}),(0,l.kt)("h3",{id:"mpinserver_2date-hid-htid-y-sst-xid-xcid-msec-e-f-pa-"},"MPIN.SERVER_2(date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, Pa) \u21d2"),(0,l.kt)("p",null,"Perform third pass on the server side of the 3-pass version of the M-Pin protocol"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null}))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"date"),(0,l.kt)("td",{parentName:"tr",align:null},"is input date, in days since the epoch. Set to 0 if Time permits disabled"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"HID"),(0,l.kt)("td",{parentName:"tr",align:null},"is input H(ID), a hash of the client ID"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"HTID"),(0,l.kt)("td",{parentName:"tr",align:null},"is input H(ID)+H(d"),(0,l.kt)("td",{parentName:"tr",align:null},"H(ID))")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Y"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input server's randomly generated challenge"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SST"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input server secret"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xID"),(0,l.kt)("td",{parentName:"tr",align:null},"is input from the client = x.H(ID)"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xCID"),(0,l.kt)("td",{parentName:"tr",align:null},"is input from the client= x.(H(ID)+H(d"),(0,l.kt)("td",{parentName:"tr",align:null},"H(ID)))")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"mSEC"),(0,l.kt)("td",{parentName:"tr",align:null},"is an input from the client"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"E"),(0,l.kt)("td",{parentName:"tr",align:null},"is an output to help the Kangaroos to find the PIN error, or NULL if not required"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"F"),(0,l.kt)("td",{parentName:"tr",align:null},"is an output to help the Kangaroos to find the PIN error, or NULL if not required"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Pa"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input public key from the client, z.Q or NULL if the client uses regular mpin"),(0,l.kt)("td",{parentName:"tr",align:null})))),(0,l.kt)("a",{name:"MPIN.KANGAROO"}),(0,l.kt)("h3",{id:"mpinkangarooe-f-"},"MPIN.KANGAROO(E, F) \u21d2"),(0,l.kt)("p",null,"Use Kangaroos to find PIN error"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": 0 if Kangaroos failed, or the PIN error e",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"E"),(0,l.kt)("td",{parentName:"tr",align:null},"a member of the group GT")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"F"),(0,l.kt)("td",{parentName:"tr",align:null},"a member of the group GT =  E^e")))),(0,l.kt)("a",{name:"MPIN.GET_TIME"}),(0,l.kt)("h3",{id:"mpinget_time-"},"MPIN.GET_TIME() \u21d2"),(0,l.kt)("p",null,"Time since epoch"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": time since epoch",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}'),"  "),(0,l.kt)("a",{name:"MPIN.GET_Y"}),(0,l.kt)("h3",{id:"mpinget_ysha-timevalue-xcid-y-"},"MPIN.GET_Y(sha, TimeValue, xCID, Y) \u21d2"),(0,l.kt)("p",null,"Generate Y=H(s,O), where s is epoch time, O is a byte array, and H(.) is a hash function"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sha"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"TimeValue"),(0,l.kt)("td",{parentName:"tr",align:null},"is epoch time in seconds")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xCID"),(0,l.kt)("td",{parentName:"tr",align:null},"input bytearray is an input octet")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Y"),(0,l.kt)("td",{parentName:"tr",align:null},"output value")))),(0,l.kt)("a",{name:"MPIN.CLIENT"}),(0,l.kt)("h3",{id:"mpinclientsha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-timevalue-y-message-"},"MPIN.CLIENT(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT, TimeValue, Y, Message) \u21d2"),(0,l.kt)("p",null,"Perform client side of the one-pass version of the M-Pin protocol"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null}),(0,l.kt)("th",{parentName:"tr",align:null}))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sha"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type"),(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},"date"),(0,l.kt)("td",{parentName:"tr",align:null},"is input date, in days since the epoch. Set to 0 if Time permits disabled"),(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},"CLIENT_ID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input client identity"),(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},"rng"),(0,l.kt)("td",{parentName:"tr",align:null},"is a pointer to a cryptographically secure random number generator"),(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},"X"),(0,l.kt)("td",{parentName:"tr",align:null},"an output internally randomly generated if R!=NULL, otherwise must be provided as an input"),(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},"pin"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input PIN number"),(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},"TOKEN"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input M-Pin token (the client secret with PIN portion removed)"),(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},"SEC"),(0,l.kt)("td",{parentName:"tr",align:null},"is output = -(x+y)(CS+TP), where CS is the reconstructed client secret, and TP is the time permit"),(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},"xID"),(0,l.kt)("td",{parentName:"tr",align:null},"is output = x.H(ID)"),(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},"xCID"),(0,l.kt)("td",{parentName:"tr",align:null},"is output = x.(H(ID)+H(d"),(0,l.kt)("td",{parentName:"tr",align:null},"H(ID)))"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"PERMIT"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input time permit"),(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},"TimeValue"),(0,l.kt)("td",{parentName:"tr",align:null},"is input epoch time in seconds - a timestamp"),(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},"Y"),(0,l.kt)("td",{parentName:"tr",align:null},"is output H(t"),(0,l.kt)("td",{parentName:"tr",align:null},"U) or H(t"),(0,l.kt)("td",{parentName:"tr",align:null},"UT) if Time Permits enabled")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Message"),(0,l.kt)("td",{parentName:"tr",align:null},"is the message to be signed"),(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null})))),(0,l.kt)("a",{name:"MPIN.SERVER"}),(0,l.kt)("h3",{id:"mpinserversha-date-hid-htid-y-sst-xid-xcid-msec-e-f-cid-timevalue-message-pa-"},"MPIN.SERVER(sha, date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, CID, TimeValue, MESSAGE, Pa) \u21d2"),(0,l.kt)("p",null,"Perform server side of the one-pass version of the M-Pin protocol"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null}),(0,l.kt)("th",{parentName:"tr",align:null}))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sha"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type"),(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},"date"),(0,l.kt)("td",{parentName:"tr",align:null},"is input date, in days since the epoch. Set to 0 if Time permits disabled"),(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},"HID"),(0,l.kt)("td",{parentName:"tr",align:null},"is output H(ID), a hash of the client ID"),(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},"HTID"),(0,l.kt)("td",{parentName:"tr",align:null},"is output H(ID)+H(d"),(0,l.kt)("td",{parentName:"tr",align:null},"H(ID))"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Y"),(0,l.kt)("td",{parentName:"tr",align:null},"is output H(t"),(0,l.kt)("td",{parentName:"tr",align:null},"U) or H(t"),(0,l.kt)("td",{parentName:"tr",align:null},"UT) if Time Permits enabled")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SST"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input server secret"),(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},"xID"),(0,l.kt)("td",{parentName:"tr",align:null},"is input from the client = x.H(ID)"),(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},"xCID"),(0,l.kt)("td",{parentName:"tr",align:null},"is input from the client= x.(H(ID)+H(d"),(0,l.kt)("td",{parentName:"tr",align:null},"H(ID)))"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"mSEC"),(0,l.kt)("td",{parentName:"tr",align:null},"is an input from the client"),(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},"E"),(0,l.kt)("td",{parentName:"tr",align:null},"is an output to help the Kangaroos to find the PIN error, or NULL if not required"),(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},"F"),(0,l.kt)("td",{parentName:"tr",align:null},"is an output to help the Kangaroos to find the PIN error, or NULL if not required"),(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},"CID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input claimed client identity"),(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},"TimeValue"),(0,l.kt)("td",{parentName:"tr",align:null},"is input epoch time in seconds - a timestamp"),(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},"MESSAGE"),(0,l.kt)("td",{parentName:"tr",align:null},"is the message to be signed"),(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},"Pa"),(0,l.kt)("td",{parentName:"tr",align:null},"is input from the client z.Q or NULL if the key-escrow less scheme is not used"),(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null})))),(0,l.kt)("a",{name:"MPIN.PRECOMPUTE"}),(0,l.kt)("h3",{id:"mpinprecomputetoken-cid-g1-g2-"},"MPIN.PRECOMPUTE(TOKEN, CID, G1, G2) \u21d2"),(0,l.kt)("p",null,"Precompute values for use by the client side of M-Pin Full"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": O for success or else error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"TOKEN"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input M-Pin token (the client secret with PIN portion removed)")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"CID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input client identity")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"G1"),(0,l.kt)("td",{parentName:"tr",align:null},"precomputed output")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"G2"),(0,l.kt)("td",{parentName:"tr",align:null},"precomputed output")))),(0,l.kt)("a",{name:"MPIN.HASH_ALL"}),(0,l.kt)("h3",{id:"mpinhash_allsha-hid-xid-xcid-sec-y-r-w-"},"MPIN.HASH_ALL(sha, HID, xID, xCID, SEC, Y, R, W) \u21d2"),(0,l.kt)("p",null,"Hash the session transcript"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": H the output is the hash of all of the above that apply",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null}))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sha"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"HID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hashed input client ID = H(ID)"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the client output = x.H(ID)"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xCID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the client output = x.(H(ID)+H(T"),(0,l.kt)("td",{parentName:"tr",align:null},"H(ID)))")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SEC"),(0,l.kt)("td",{parentName:"tr",align:null},"is the client part response"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Y"),(0,l.kt)("td",{parentName:"tr",align:null},"is the server challenge"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"R"),(0,l.kt)("td",{parentName:"tr",align:null},"is the client part response"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"W"),(0,l.kt)("td",{parentName:"tr",align:null},"is the server part response"),(0,l.kt)("td",{parentName:"tr",align:null})))),(0,l.kt)("a",{name:"MPIN.CLIENT_KEY"}),(0,l.kt)("h3",{id:"mpinclient_keysha-g1-g2-pin-r-x-h-wcid-ck-"},"MPIN.CLIENT_KEY(sha, G1, G2, pin, R, X, H, wCID, CK) \u21d2"),(0,l.kt)("p",null,"Calculate Key on Client side for M-Pin Full"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": 0 or an error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"sha"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"G1"),(0,l.kt)("td",{parentName:"tr",align:null},"precomputed input")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"G2"),(0,l.kt)("td",{parentName:"tr",align:null},"precomputed input")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"pin"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input PIN number")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"R"),(0,l.kt)("td",{parentName:"tr",align:null},"is an input, a locally generated random number")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"X"),(0,l.kt)("td",{parentName:"tr",align:null},"is an input, a locally generated random number")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"H"),(0,l.kt)("td",{parentName:"tr",align:null},"is an input, hash of the protocol transcript")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"wCID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input Server-side Diffie-Hellman component")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"CK"),(0,l.kt)("td",{parentName:"tr",align:null},"is the output calculated shared key")))),(0,l.kt)("a",{name:"MPIN.SERVER_KEY"}),(0,l.kt)("h3",{id:"mpinserver_keyh-z-sst-w-h-hid-xid-xcid-sk-"},"MPIN.SERVER_KEY(h, Z, SST, W, H, HID, xID, xCID, SK) \u21d2"),(0,l.kt)("p",null,"Calculate Key on Server side for M-Pin Full"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": 0 or an error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"),(0,l.kt)("th",{parentName:"tr",align:null}))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"h"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hash type"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Z"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input Client-side Diffie-Hellman component"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SST"),(0,l.kt)("td",{parentName:"tr",align:null},"is the input server secret"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"W"),(0,l.kt)("td",{parentName:"tr",align:null},"is an input random number generated by the server"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"H"),(0,l.kt)("td",{parentName:"tr",align:null},"is an input, hash of the protocol transcript"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"HID"),(0,l.kt)("td",{parentName:"tr",align:null},"is the hashed input client ID = H(ID)"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xID"),(0,l.kt)("td",{parentName:"tr",align:null},"is input from the client = x.H(ID)"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"xCID"),(0,l.kt)("td",{parentName:"tr",align:null},"is input from the client= x.(H(ID)+H(d"),(0,l.kt)("td",{parentName:"tr",align:null},"H(ID)))")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"SK"),(0,l.kt)("td",{parentName:"tr",align:null},"is the output calculated shared key"),(0,l.kt)("td",{parentName:"tr",align:null})))),(0,l.kt)("a",{name:"MPIN.GET_DVS_KEYPAIR"}),(0,l.kt)("h3",{id:"mpinget_dvs_keypairrng-z-pa-"},"MPIN.GET_DVS_KEYPAIR(rng, Z, Pa) \u21d2"),(0,l.kt)("p",null,"Generates a random public key for the client z.Q"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#MPIN"},(0,l.kt)("code",null,"MPIN")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": 0 or an error code",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}MPIN{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"rng"),(0,l.kt)("td",{parentName:"tr",align:null},"cryptographically secure random number generator")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Z"),(0,l.kt)("td",{parentName:"tr",align:null},"an output internally randomly generated if R!=NULL, otherwise it must be provided as an input")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Pa"),(0,l.kt)("td",{parentName:"tr",align:null},"the output public key for the client")))))}o.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/e2e92e73.17f6f8c6.js b/assets/js/e2e92e73.17f6f8c6.js
new file mode 100644
index 0000000..74330d7
--- /dev/null
+++ b/assets/js/e2e92e73.17f6f8c6.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2050],{3905:(e,n,t)=>{t.d(n,{Zo:()=>u,kt:()=>f});var i=t(7294);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,i)}return t}function o(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?r(Object(t),!0).forEach((function(n){a(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):r(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function l(e,n){if(null==e)return{};var t,i,a=function(e,n){if(null==e)return{};var t,i,a={},r=Object.keys(e);for(i=0;i<r.length;i++)t=r[i],n.indexOf(t)>=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(i=0;i<r.length;i++)t=r[i],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var s=i.createContext({}),d=function(e){var n=i.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},u=function(e){var n=d(e.components);return i.createElement(s.Provider,{value:n},e.children)},c="mdxType",p={inlineCode:"code",wrapper:function(e){var n=e.children;return i.createElement(i.Fragment,{},n)}},m=i.forwardRef((function(e,n){var t=e.components,a=e.mdxType,r=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),c=d(t),m=a,f=c["".concat(s,".").concat(m)]||c[m]||p[m]||r;return t?i.createElement(f,o(o({ref:n},u),{},{components:t})):i.createElement(f,o({ref:n},u))}));function f(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var r=t.length,o=new Array(r);o[0]=m;var l={};for(var s in n)hasOwnProperty.call(n,s)&&(l[s]=n[s]);l.originalType=e,l[c]="string"==typeof e?e:a,o[1]=l;for(var d=2;d<r;d++)o[d]=t[d];return i.createElement.apply(null,o)}return i.createElement.apply(null,t)}m.displayName="MDXCreateElement"},6788:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>u,contentTitle:()=>s,default:()=>m,frontMatter:()=>l,metadata:()=>d,toc:()=>c});var i=t(7462),a=t(3366),r=(t(7294),t(3905)),o=["components"],l={id:"configuration",title:"Configuration",sidebar_label:"Configuration"},s=void 0,d={unversionedId:"dta-details/configuration",id:"dta-details/configuration",title:"Configuration",description:"The Milagro D-TA can be configured either by editing its configuration file or using command line flags.",source:"@site/../docs/dta-details/configuration.md",sourceDirName:"dta-details",slug:"/dta-details/configuration",permalink:"/docs/dta-details/configuration",draft:!1,tags:[],version:"current",frontMatter:{id:"configuration",title:"Configuration",sidebar_label:"Configuration"},sidebar:"docs",previous:{title:"API",permalink:"/docs/dta-details/api"},next:{title:"Identity Documents",permalink:"/docs/dta-details/identity-documents"}},u={},c=[{value:"Configuration File",id:"configuration-file",level:2},{value:"Command Line Flags",id:"command-line-flags",level:2},{value:"INIT",id:"init",level:3},{value:"DAEMON",id:"daemon",level:3}],p={toc:c};function m(e){var n=e.components,t=(0,a.Z)(e,o);return(0,r.kt)("wrapper",(0,i.Z)({},p,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("p",null,"The Milagro D-TA can be configured either by editing its configuration file or using command line flags.   "),(0,r.kt)("admonition",{title:"running a D-TA as a principal with an external master fiduciary (as described below) is not currently supported but will be in the next release.",type:"important"}),(0,r.kt)("h2",{id:"configuration-file"},"Configuration File"),(0,r.kt)("p",null,"The config file is located in ",(0,r.kt)("inlineCode",{parentName:"p"},"~/.milagro/config.yaml")),(0,r.kt)("admonition",{title:"this configuration method is not yet supported when running in Docker.  Please use the command line flags described below.",type:"important"}),(0,r.kt)("p",null,"The default values are shown below with some explanatory comments:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json"},'\n// http ports\nhttp:\n  listenAddr: :5556\n  metricsAddr: :5557\n\n// You can secure the endpoints with an oAuth 2.0 compatible identity provider\n  oidcProvider: ""\n  oidcClientID: ""\n  oidcClientKey: ""\n\n// If the endpoints are accessed from a web app put address here\n  corsAllow: http://localhost:3000\n\nnode:\n\n// D-TA can be "principal", "master fiduciary" or "multi" \n  nodeType: multi\n\n// If D-TA is running as principal tell it where its Master Fiduciary is \n// (if nodeType is "multi" use localhost on same port)\n  masterFiduciaryServer: http://localhost:5556\n\n// IPFS Hash Address of Master Fiduciary\'s Identity document \n// (if nodeType is "multi"use nodeID (see below))\n  masterFiduciaryNodeID: QmfZkZ8WR9N2nVg8rktbR2n7hBFN3HmYuFJeVuS3gcT3Mz\n\n// IPFS Hash Address of this node\'s identity document\n// (created and logged to stdout on startup)\n  nodeID: QmfZkZ8WR9N2nVg8rktbR2n7hBFN3HmYuFJeVuS3gcT3Mz\n\n// String used to refer to this node\n  nodeName: 17c9f630d2e098e4\n\n// Uses embedded "bolt" DB by defaultD-TA \n// (In productiion you should use external highly available database)\n  dataStore: embedded\n\n// configure logs\nlog:\n  format: text\n  level: info\n\n// IPFS - by default D-TA connects to private IPFS network\n  connector: embedded\n  bootstrap:\n  - /ip4/34.252.47.231/tcp/4001/ipfs/QmcEPkctfqQs6vbvTD8EdJmzy4zouAtrV8AwjLbGhbURep\n  listenAddress: /ip4/0.0.0.0/tcp/4001\n  apiAddress: http://localhost:5001\n\n// Define the plugin to be used.  Default is "milagro".  Currently available alternative plugins are "bitcoinwallet" and "safeguardsecret"\nplugins:\n  service: milagro\n\n')),(0,r.kt)("h2",{id:"command-line-flags"},"Command Line Flags"),(0,r.kt)("p",null,"To view available service commands:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json"},"\n ./milagro\nMilagro DTA\nUSAGE\n    milagro <command> [options]\n    \nCOMMANDS\n    init    Initialize configuration\n    daemon  Starts the milagro daemon\n\n")),(0,r.kt)("p",null,"To view the available initialization option flags, use the ",(0,r.kt)("inlineCode",{parentName:"p"},"-help")," flag:"),(0,r.kt)("h3",{id:"init"},"INIT"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json"},'\n./milagro init -help\nUsage of init:\n  -interactive\n        Interactive setup\n  -masterfiduciarynode string\n        Master fiduciary node\n  -nodename string\n        Node name\n  -service string\n        Service plugin (default "milagro")\n\n')),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"masterfiduciarynode")," - if you want to use an external master fiduciary, use this flag to set its identity (nodeID) and endpoint separated with a comma. For example:")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json"},"\nQmR7JfvEwTbSkBZuRLdDcRTpZik2ZAuHnn9BA7giX7oJNK,http://123.456.789.1:5556\n\n")),(0,r.kt)("admonition",{title:"By default a D-TA will be both a principal and master fiduciary. ",type:"note"}),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"nodename")," - set your DT-A node name (nodeName) here.  By default, a random name with be generated if none is specified.   "),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"service"),' - use this flag to set which plugin to use.  Default is "milagro".  Currently available plugins are "bitcoinwallet" and "safeguardsecret".'),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"interactive"),' - use this flag to prompt for values for the other flags.  For example, to set the name (nodeName) of this DT-A to "alice", the identity (nodeID) of the external fiduciary to "QmR7JfvEwTbSkBZuRLdDcRTpZik2ZAuHnn9BA7giX7oJNK", the endpoint of the master fiduciary to "http: and to use the "bitcoinwallet" plugin: ')),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json"},"\n\n\n")),(0,r.kt)("h3",{id:"daemon"},"DAEMON"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json"},"\n\n\n")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"service"),' - use this flag to set which plugin to use.  Default is "milagro".  Currently available plugins are "bitcoinwallet" and "safeguardsecret".')))}m.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/e361dc62.f90e83b4.js b/assets/js/e361dc62.f90e83b4.js
new file mode 100644
index 0000000..556be11
--- /dev/null
+++ b/assets/js/e361dc62.f90e83b4.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[5309],{3905:(t,e,a)=>{a.d(e,{Zo:()=>o,kt:()=>N});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 p(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 i(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 k=n.createContext({}),m=function(t){var e=n.useContext(k),a=e;return t&&(a="function"==typeof t?t(e):p(p({},e),t)),a},o=function(t){var e=m(t.components);return n.createElement(k.Provider,{value:e},t.children)},u="mdxType",d={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},s=n.forwardRef((function(t,e){var a=t.components,l=t.mdxType,r=t.originalType,k=t.parentName,o=i(t,["components","mdxType","originalType","parentName"]),u=m(a),s=l,N=u["".concat(k,".").concat(s)]||u[s]||d[s]||r;return a?n.createElement(N,p(p({ref:e},o),{},{components:a})):n.createElement(N,p({ref:e},o))}));function N(t,e){var a=arguments,l=e&&e.mdxType;if("string"==typeof t||l){var r=a.length,p=new Array(r);p[0]=s;var i={};for(var k in e)hasOwnProperty.call(e,k)&&(i[k]=e[k]);i.originalType=t,i[u]="string"==typeof t?t:l,p[1]=i;for(var m=2;m<r;m++)p[m]=a[m];return n.createElement.apply(null,p)}return n.createElement.apply(null,a)}s.displayName="MDXCreateElement"},3848:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>o,contentTitle:()=>k,default:()=>s,frontMatter:()=>i,metadata:()=>m,toc:()=>u});var n=a(7462),l=a(3366),r=(a(7294),a(3905)),p=["components"],i={id:"fp2",title:"FP2",sidebar_label:"FP2"},k=void 0,m={unversionedId:"cryptojs/fp2",id:"cryptojs/fp2",title:"FP2",description:"FP2",source:"@site/../docs/cryptojs/fp2.md",sourceDirName:"cryptojs",slug:"/cryptojs/fp2",permalink:"/docs/cryptojs/fp2",draft:!1,tags:[],version:"current",frontMatter:{id:"fp2",title:"FP2",sidebar_label:"FP2"},sidebar:"docs",previous:{title:"FP",permalink:"/docs/cryptojs/fp"},next:{title:"FP4",permalink:"/docs/cryptojs/fp4"}},o={},u=[{value:"FP2",id:"fp2",level:2},{value:"new FP2()",id:"new-fp2",level:3},{value:"fP2.reduce()",id:"fp2reduce",level:3},{value:"fP2.norm()",id:"fp2norm",level:3},{value:"fP2.iszilch()",id:"fp2iszilch",level:3},{value:"fP2.isunity()",id:"fp2isunity",level:3},{value:"fP2.cmove(g, d)",id:"fp2cmoveg-d",level:3},{value:"fP2.equals(x)",id:"fp2equalsx",level:3},{value:"fP2.getA()",id:"fp2geta",level:3},{value:"fP2.getB()",id:"fp2getb",level:3},{value:"fP2.set(c, d)",id:"fp2setc-d",level:3},{value:"fP2.seta(c)",id:"fp2setac",level:3},{value:"fP2.bset(c, d)",id:"fp2bsetc-d",level:3},{value:"fP2.bseta(c)",id:"fp2bsetac",level:3},{value:"fP2.copy(x)",id:"fp2copyx",level:3},{value:"fP2.zero()",id:"fp2zero",level:3},{value:"fP2.one(x)",id:"fp2onex",level:3},{value:"fP2.neg(x)",id:"fp2negx",level:3},{value:"fP2.conj()",id:"fp2conj",level:3},{value:"fP2.add(x)",id:"fp2addx",level:3},{value:"fP2.sub(x)",id:"fp2subx",level:3},{value:"fP2.pmul(s)",id:"fp2pmuls",level:3},{value:"fP2.imul(s)",id:"fp2imuls",level:3},{value:"fP2.sqr()",id:"fp2sqr",level:3},{value:"fP2.mul(y)",id:"fp2muly",level:3},{value:"fP2.sqrt() \u21d2",id:"fp2sqrt-",level:3},{value:"fP2.toString()",id:"fp2tostring",level:3},{value:"fP2.inverse()",id:"fp2inverse",level:3},{value:"fP2.div2()",id:"fp2div2",level:3},{value:"fP2.times_i()",id:"fp2times_i",level:3},{value:"fP2.mul_ip()",id:"fp2mul_ip",level:3},{value:"fP2.div_ip2()",id:"fp2div_ip2",level:3},{value:"fP2.div_ip()",id:"fp2div_ip",level:3},{value:"fP2.pow(e)",id:"fp2powe",level:3}],d={toc:u};function s(t){var e=t.components,a=(0,l.Z)(t,p);return(0,r.kt)("wrapper",(0,n.Z)({},d,a,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("a",{name:"FP2"}),(0,r.kt)("h2",{id:"fp2"},"FP2"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": global class",(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP2{"}"}'),"  "),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP2"},"FP2"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#new_FP2_new"},"new FP2()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP2+reduce"},".reduce()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP2+norm"},".norm()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP2+iszilch"},".iszilch()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP2+isunity"},".isunity()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP2+cmove"},".cmove(g, d)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP2+equals"},".equals(x)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP2+getA"},".getA()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP2+getB"},".getB()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP2+set"},".set(c, d)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP2+seta"},".seta(c)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP2+bset"},".bset(c, d)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP2+bseta"},".bseta(c)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP2+copy"},".copy(x)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP2+zero"},".zero()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP2+one"},".one(x)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP2+neg"},".neg(x)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP2+conj"},".conj()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP2+add"},".add(x)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP2+sub"},".sub(x)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP2+pmul"},".pmul(s)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP2+imul"},".imul(s)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP2+sqr"},".sqr()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP2+mul"},".mul(y)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP2+sqrt"},".sqrt()")," \u21d2"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP2+toString"},".toString()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP2+inverse"},".inverse()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP2+div2"},".div2()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP2+times_i"},".times_i()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP2+mul_ip"},".mul_ip()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP2+div_ip2"},".div_ip2()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP2+div_ip"},".div_ip()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP2+pow"},".pow(e)"))))),(0,r.kt)("a",{name:"new_FP2_new"}),(0,r.kt)("h3",{id:"new-fp2"},"new FP2()"),(0,r.kt)("p",null,"Creates an instance of FP2."),(0,r.kt)("a",{name:"FP2+reduce"}),(0,r.kt)("h3",{id:"fp2reduce"},"fP2.reduce()"),(0,r.kt)("p",null,"Reduces all components of possibly unreduced FP2 mod Modulus"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP2"},(0,r.kt)("code",null,"FP2")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP2{"}"}'),"  "),(0,r.kt)("a",{name:"FP2+norm"}),(0,r.kt)("h3",{id:"fp2norm"},"fP2.norm()"),(0,r.kt)("p",null,"Normalises the components of an FP2"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP2"},(0,r.kt)("code",null,"FP2")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP2{"}"}'),"  "),(0,r.kt)("a",{name:"FP2+iszilch"}),(0,r.kt)("h3",{id:"fp2iszilch"},"fP2.iszilch()"),(0,r.kt)("p",null,"Tests for FP2 equal to zero"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP2"},(0,r.kt)("code",null,"FP2")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP2{"}"}'),"  "),(0,r.kt)("a",{name:"FP2+isunity"}),(0,r.kt)("h3",{id:"fp2isunity"},"fP2.isunity()"),(0,r.kt)("p",null,"Tests for FP2 equal to unity"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP2"},(0,r.kt)("code",null,"FP2")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP2{"}"}'),"  "),(0,r.kt)("a",{name:"FP2+cmove"}),(0,r.kt)("h3",{id:"fp2cmoveg-d"},"fP2.cmove(g, d)"),(0,r.kt)("p",null,"Conditional copy of FP2 number"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP2"},(0,r.kt)("code",null,"FP2")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP2{"}"}'),"  "),(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},"Param"),(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},"g"),(0,r.kt)("td",{parentName:"tr",align:null},"FP2 instance")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"d"),(0,r.kt)("td",{parentName:"tr",align:null},"copy depends on this value")))),(0,r.kt)("a",{name:"FP2+equals"}),(0,r.kt)("h3",{id:"fp2equalsx"},"fP2.equals(x)"),(0,r.kt)("p",null,"Tests for equality of two FP2 instances"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP2"},(0,r.kt)("code",null,"FP2")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP2{"}"}'),"  "),(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},"Param"),(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},"x"),(0,r.kt)("td",{parentName:"tr",align:null},"FP2 instance to compare")))),(0,r.kt)("a",{name:"FP2+getA"}),(0,r.kt)("h3",{id:"fp2geta"},"fP2.getA()"),(0,r.kt)("p",null,"extract a from this"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP2"},(0,r.kt)("code",null,"FP2")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP2{"}"}'),"  "),(0,r.kt)("a",{name:"FP2+getB"}),(0,r.kt)("h3",{id:"fp2getb"},"fP2.getB()"),(0,r.kt)("p",null,"extract b from this"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP2"},(0,r.kt)("code",null,"FP2")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP2{"}"}'),"  "),(0,r.kt)("a",{name:"FP2+set"}),(0,r.kt)("h3",{id:"fp2setc-d"},"fP2.set(c, d)"),(0,r.kt)("p",null,"Set FP2 from two FP values"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP2"},(0,r.kt)("code",null,"FP2")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP2{"}"}'),"  "),(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},"Param"),(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},"c"),(0,r.kt)("td",{parentName:"tr",align:null},"FP instance")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"d"),(0,r.kt)("td",{parentName:"tr",align:null},"FP instance")))),(0,r.kt)("a",{name:"FP2+seta"}),(0,r.kt)("h3",{id:"fp2setac"},"fP2.seta(c)"),(0,r.kt)("p",null,"Set FP2 from one FP value"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP2"},(0,r.kt)("code",null,"FP2")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP2{"}"}'),"  "),(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},"Param"),(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},"c"),(0,r.kt)("td",{parentName:"tr",align:null},"FP instance")))),(0,r.kt)("a",{name:"FP2+bset"}),(0,r.kt)("h3",{id:"fp2bsetc-d"},"fP2.bset(c, d)"),(0,r.kt)("p",null,"Set FP2 from two BIG values"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP2"},(0,r.kt)("code",null,"FP2")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP2{"}"}'),"  "),(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},"Param"),(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},"c"),(0,r.kt)("td",{parentName:"tr",align:null},"BIG instance")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"d"),(0,r.kt)("td",{parentName:"tr",align:null},"BIG instance")))),(0,r.kt)("a",{name:"FP2+bseta"}),(0,r.kt)("h3",{id:"fp2bsetac"},"fP2.bseta(c)"),(0,r.kt)("p",null,"Set FP2 from one BIG value"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP2"},(0,r.kt)("code",null,"FP2")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP2{"}"}'),"  "),(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},"Param"),(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},"c"),(0,r.kt)("td",{parentName:"tr",align:null},"BIG instance")))),(0,r.kt)("a",{name:"FP2+copy"}),(0,r.kt)("h3",{id:"fp2copyx"},"fP2.copy(x)"),(0,r.kt)("p",null,"Copy FP2 to another FP2"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP2"},(0,r.kt)("code",null,"FP2")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP2{"}"}'),"  "),(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},"Param"),(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},"x"),(0,r.kt)("td",{parentName:"tr",align:null},"FP2 instance to be copied")))),(0,r.kt)("a",{name:"FP2+zero"}),(0,r.kt)("h3",{id:"fp2zero"},"fP2.zero()"),(0,r.kt)("p",null,"Set FP2 to zero"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP2"},(0,r.kt)("code",null,"FP2")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP2{"}"}'),"  "),(0,r.kt)("a",{name:"FP2+one"}),(0,r.kt)("h3",{id:"fp2onex"},"fP2.one(x)"),(0,r.kt)("p",null,"Set FP2 to unity"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP2"},(0,r.kt)("code",null,"FP2")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP2{"}"}'),"  "),(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},"Param"),(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},"x"),(0,r.kt)("td",{parentName:"tr",align:null},"FP2 instance to be set to one")))),(0,r.kt)("a",{name:"FP2+neg"}),(0,r.kt)("h3",{id:"fp2negx"},"fP2.neg(x)"),(0,r.kt)("p",null,"negate this"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP2"},(0,r.kt)("code",null,"FP2")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP2{"}"}'),"  "),(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},"Param"),(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},"x"),(0,r.kt)("td",{parentName:"tr",align:null},"FP2 instance to be set to one")))),(0,r.kt)("a",{name:"FP2+conj"}),(0,r.kt)("h3",{id:"fp2conj"},"fP2.conj()"),(0,r.kt)("p",null,"Conjugation of FP2"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP2"},(0,r.kt)("code",null,"FP2")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP2{"}"}'),"  "),(0,r.kt)("a",{name:"FP2+add"}),(0,r.kt)("h3",{id:"fp2addx"},"fP2.add(x)"),(0,r.kt)("p",null,"addition of two FP2s"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP2"},(0,r.kt)("code",null,"FP2")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP2{"}"}'),"  "),(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},"Param"),(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},"x"),(0,r.kt)("td",{parentName:"tr",align:null},"FP2 instance")))),(0,r.kt)("a",{name:"FP2+sub"}),(0,r.kt)("h3",{id:"fp2subx"},"fP2.sub(x)"),(0,r.kt)("p",null,"subtraction of two FP2s"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP2"},(0,r.kt)("code",null,"FP2")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP2{"}"}'),"  "),(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},"Param"),(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},"x"),(0,r.kt)("td",{parentName:"tr",align:null},"FP2 instance")))),(0,r.kt)("a",{name:"FP2+pmul"}),(0,r.kt)("h3",{id:"fp2pmuls"},"fP2.pmul(s)"),(0,r.kt)("p",null,"Multiplication of an FP2 by an FP8"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP2"},(0,r.kt)("code",null,"FP2")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP2{"}"}'),"  "),(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},"Param"),(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},"s"),(0,r.kt)("td",{parentName:"tr",align:null},"FP8 instance")))),(0,r.kt)("a",{name:"FP2+imul"}),(0,r.kt)("h3",{id:"fp2imuls"},"fP2.imul(s)"),(0,r.kt)("p",null,"Multiplication of an FP2 by a small integer"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP2"},(0,r.kt)("code",null,"FP2")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP2{"}"}'),"  "),(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},"Param"),(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},"s"),(0,r.kt)("td",{parentName:"tr",align:null},"integer")))),(0,r.kt)("a",{name:"FP2+sqr"}),(0,r.kt)("h3",{id:"fp2sqr"},"fP2.sqr()"),(0,r.kt)("p",null,"Fast Squaring of an FP2"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP2"},(0,r.kt)("code",null,"FP2")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP2{"}"}'),"  "),(0,r.kt)("a",{name:"FP2+mul"}),(0,r.kt)("h3",{id:"fp2muly"},"fP2.mul(y)"),(0,r.kt)("p",null,"Full unconditional Multiplication of two FP2s"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP2"},(0,r.kt)("code",null,"FP2")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP2{"}"}'),"  "),(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},"Param"),(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},"y"),(0,r.kt)("td",{parentName:"tr",align:null},"FP2 instance, the multiplier")))),(0,r.kt)("a",{name:"FP2+sqrt"}),(0,r.kt)("h3",{id:"fp2sqrt-"},"fP2.sqrt() \u21d2"),(0,r.kt)("p",null,"sqrt(a+ib) = sqrt(a+sqrt(a_a-n_b_b)/2)+ib/(2_sqrt(a+sqrt(a_a-n_b","*","b)/2))"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP2"},(0,r.kt)("code",null,"FP2")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"Returns"),": true if this is QR",(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP2{"}"}'),"  "),(0,r.kt)("a",{name:"FP2+toString"}),(0,r.kt)("h3",{id:"fp2tostring"},"fP2.toString()"),(0,r.kt)("p",null,"convert this to hex string"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP2"},(0,r.kt)("code",null,"FP2")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP2{"}"}'),"  "),(0,r.kt)("a",{name:"FP2+inverse"}),(0,r.kt)("h3",{id:"fp2inverse"},"fP2.inverse()"),(0,r.kt)("p",null,"Inverting an FP2"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP2"},(0,r.kt)("code",null,"FP2")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP2{"}"}'),"  "),(0,r.kt)("a",{name:"FP2+div2"}),(0,r.kt)("h3",{id:"fp2div2"},"fP2.div2()"),(0,r.kt)("p",null,"Divide an FP2 by 2"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP2"},(0,r.kt)("code",null,"FP2")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP2{"}"}'),"  "),(0,r.kt)("a",{name:"FP2+times_i"}),(0,r.kt)("h3",{id:"fp2times_i"},"fP2.times_i()"),(0,r.kt)("p",null,"Multiply an FP2 by sqrt(-1)"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP2"},(0,r.kt)("code",null,"FP2")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP2{"}"}'),"  "),(0,r.kt)("a",{name:"FP2+mul_ip"}),(0,r.kt)("h3",{id:"fp2mul_ip"},"fP2.mul_ip()"),(0,r.kt)("p",null,"Multiply an FP2 by (1+sqrt(-1))"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP2"},(0,r.kt)("code",null,"FP2")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP2{"}"}'),"  "),(0,r.kt)("a",{name:"FP2+div_ip2"}),(0,r.kt)("h3",{id:"fp2div_ip2"},"fP2.div_ip2()"),(0,r.kt)("p",null,"Divide an FP2 by (1+sqrt(-1))/2"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP2"},(0,r.kt)("code",null,"FP2")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP2{"}"}'),"  "),(0,r.kt)("a",{name:"FP2+div_ip"}),(0,r.kt)("h3",{id:"fp2div_ip"},"fP2.div_ip()"),(0,r.kt)("p",null,"Divide an FP2 by (1+sqrt(-1))"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP2"},(0,r.kt)("code",null,"FP2")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP2{"}"}'),"  "),(0,r.kt)("a",{name:"FP2+pow"}),(0,r.kt)("h3",{id:"fp2powe"},"fP2.pow(e)"),(0,r.kt)("p",null,"Raises an FP2 to the power of a BIG"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP2"},(0,r.kt)("code",null,"FP2")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP2{"}"}'),"  "),(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},"Param"),(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},"e"),(0,r.kt)("td",{parentName:"tr",align:null},"BIG instance exponent")))))}s.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/e577dddf.8c93a335.js b/assets/js/e577dddf.8c93a335.js
new file mode 100644
index 0000000..a05a9cb
--- /dev/null
+++ b/assets/js/e577dddf.8c93a335.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[4809],{3905:(a,e,t)=>{t.d(e,{Zo:()=>o,kt:()=>k});var s=t(7294);function n(a,e,t){return e in a?Object.defineProperty(a,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):a[e]=t,a}function m(a,e){var t=Object.keys(a);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(a);e&&(s=s.filter((function(e){return Object.getOwnPropertyDescriptor(a,e).enumerable}))),t.push.apply(t,s)}return t}function p(a){for(var e=1;e<arguments.length;e++){var t=null!=arguments[e]?arguments[e]:{};e%2?m(Object(t),!0).forEach((function(e){n(a,e,t[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(t)):m(Object(t)).forEach((function(e){Object.defineProperty(a,e,Object.getOwnPropertyDescriptor(t,e))}))}return a}function r(a,e){if(null==a)return{};var t,s,n=function(a,e){if(null==a)return{};var t,s,n={},m=Object.keys(a);for(s=0;s<m.length;s++)t=m[s],e.indexOf(t)>=0||(n[t]=a[t]);return n}(a,e);if(Object.getOwnPropertySymbols){var m=Object.getOwnPropertySymbols(a);for(s=0;s<m.length;s++)t=m[s],e.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(a,t)&&(n[t]=a[t])}return n}var i=s.createContext({}),l=function(a){var e=s.useContext(i),t=e;return a&&(t="function"==typeof a?a(e):p(p({},e),a)),t},o=function(a){var e=l(a.components);return s.createElement(i.Provider,{value:e},a.children)},N="mdxType",c={inlineCode:"code",wrapper:function(a){var e=a.children;return s.createElement(s.Fragment,{},e)}},h=s.forwardRef((function(a,e){var t=a.components,n=a.mdxType,m=a.originalType,i=a.parentName,o=r(a,["components","mdxType","originalType","parentName"]),N=l(t),h=n,k=N["".concat(i,".").concat(h)]||N[h]||c[h]||m;return t?s.createElement(k,p(p({ref:e},o),{},{components:t})):s.createElement(k,p({ref:e},o))}));function k(a,e){var t=arguments,n=e&&e.mdxType;if("string"==typeof a||n){var m=t.length,p=new Array(m);p[0]=h;var r={};for(var i in e)hasOwnProperty.call(e,i)&&(r[i]=e[i]);r.originalType=a,r[N]="string"==typeof a?a:n,p[1]=r;for(var l=2;l<m;l++)p[l]=t[l];return s.createElement.apply(null,p)}return s.createElement.apply(null,t)}h.displayName="MDXCreateElement"},894:(a,e,t)=>{t.r(e),t.d(e,{assets:()=>o,contentTitle:()=>i,default:()=>h,frontMatter:()=>r,metadata:()=>l,toc:()=>N});var s=t(7462),n=t(3366),m=(t(7294),t(3905)),p=["components"],r={id:"amcl-overview",title:"Apache Milagro Crypto Library (AMCL)",sidebar_label:"AMCL Overview"},i=void 0,l={unversionedId:"amcl-overview",id:"amcl-overview",title:"Apache Milagro Crypto Library (AMCL)",description:"Introduction",source:"@site/../docs/amcl-overview.md",sourceDirName:".",slug:"/amcl-overview",permalink:"/docs/amcl-overview",draft:!1,tags:[],version:"current",frontMatter:{id:"amcl-overview",title:"Apache Milagro Crypto Library (AMCL)",sidebar_label:"AMCL Overview"},sidebar:"docs",previous:{title:"Milagro Design",permalink:"/docs/milagro-design"},next:{title:"AMCL C API 2.0.0",permalink:"/docs/amcl-c-api-2.0.0"}},o={},N=[{value:"Introduction",id:"introduction",level:2},{value:"Library Structure",id:"library-structure",level:2},{value:"Handling <strong>BIG</strong> Numbers",id:"handling-big-numbers",level:2},{value:"Representation",id:"representation",level:3},{value:"Addition and Subtraction",id:"addition-and-subtraction",level:3},{value:"Multiplication and Reduction",id:"multiplication-and-reduction",level:3},{value:"Extension Field arithmetic",id:"extension-field-arithmetic",level:2},{value:"Elliptic Curves",id:"elliptic-curves",level:2},{value:"Support for classic Finite Field Methods",id:"support-for-classic-finite-field-methods",level:2},{value:"Multi-Lingual support",id:"multi-lingual-support",level:2},{value:"Discussion",id:"discussion",level:2}],c={toc:N};function h(a){var e=a.components,r=(0,n.Z)(a,p);return(0,m.kt)("wrapper",(0,s.Z)({},c,r,{components:e,mdxType:"MDXLayout"}),(0,m.kt)("h2",{id:"introduction"},"Introduction"),(0,m.kt)("p",null,"One of the major mysteries in the real-world of crypto is resistance to the exploitation of new research ideas. Its not that cryptographic research has failed to throw up new ideas that have the potential for commercial exploitation -- far from it. But in the real-world, 1970's crypto rules supreme, and very little happens that isn't PKI/RSA based. The reasons for this are many and varied. However one part of the puzzle might be the non-availability of easy-to-use open source cryptographic tools, that do not require in depth cryptographic expertise to deploy."),(0,m.kt)("p",null,"There are many crypto libraries out there. Many offer a bewildering variety of cryptographic primitives, at different levels of security. Many use extensive assembly language in order to be as fast as possible. Many are very ",(0,m.kt)("strong",{parentName:"p"},"BIG"),", even bloated. Some rely on other external libraries. Many were designed by academics for academics, and so are not really suitable for commercial use. Many are otherwise excellent, but not written in our favorite language."),(0,m.kt)("p",null,"The Apache Milagro Crypto Library (AMCL) is different; AMCL is completely self-contained, except for the requirement for an external entropy source for random number generation."),(0,m.kt)("p",null,"AMCL is portable - there is no assembly language. The original version is written in C, Java, Javascript, Go and Swift using only generic programming constructs, but AMCL is truly multi-lingual, as compatible  versions will be available in many other languages. These versions will be identical in that for the same inputs they will not only produce the same outputs, but all internal calculations will also be the same."),(0,m.kt)("p",null,'AMCL is fast, but does not attempt to set speed records (a particular academic obsession). There are of course contexts where speed is of the essence; for example for a server farm which must handle multiple SSL connections, and where a 10% speed increase implies the need for 10% less servers, with a a 10% saving on electricity. But in the Internet of Things we would suggest that this is less important. In general the speed is expected to be "good enough". However AMCL is small. Some libraries boast of having hundreds of thousands of lines of code - AMCL has less than 10,000. AMCL takes up the minimum of ROM/RAM resources in order to fit into the smallest possible embedded footprint, consistent with other design constraints. It is expected that this will be vital for implementations that support security in the Internet of Things. AMCL (the C version) only uses stack memory, and is thus natively multi-threaded.'),(0,m.kt)("p",null,"The C version of AMCL is configured at compile time for 16, 32 or 64 bit processors, and for a specific elliptic curve. The Java and Javascript versions are (obviously) processor agnostic, but the same choices of elliptic curve are available."),(0,m.kt)("p",null,"AMCL is written with an awareness of the abilities of modern pipelined processors. In particular there was an awareness that the unpredictable program branch should be avoided at all costs, not only as it slows down the processor, but as it may open the door to side-channel attacks. The innocuous looking ",(0,m.kt)("inlineCode",{parentName:"p"},"if")," statement - unless its outcome can be accurately predicted - is the enemy of quality crypto software."),(0,m.kt)("p",null,"In the sequel we refer to the C version of AMCL, unless otherwise specified. We emphasis that all AMCL versions are completely self-contained. No external libraries or packages are required to implement all of the supported cryptographic functionality (other than for an external entropy source)."),(0,m.kt)("h2",{id:"library-structure"},"Library Structure"),(0,m.kt)("p",null,"The modules that make up AMCL are shown below, with some indication of how they interact. Several example APIs will be provided to implement common protocols. Note that all interaction with the API is via machine-independent endian-indifferent arrays of bytes (a.k.a. octet strings). Therefore the underlying workings of the library are invisible to the consumer of its services."),(0,m.kt)("p",null,(0,m.kt)("img",{alt:"client",src:t(3436).Z,width:"9242",height:"6167"})),(0,m.kt)("figure",null,(0,m.kt)("strong",null,"Figure 1.")," AMCL Library"),(0,m.kt)("h2",{id:"handling-big-numbers"},"Handling ",(0,m.kt)("strong",{parentName:"h2"},"BIG")," Numbers"),(0,m.kt)("h3",{id:"representation"},"Representation"),(0,m.kt)("p",null,"One of the major design decisions is how to represent the 256-bit field elements required for the elliptic curve and pairing-based cryptography. Here there are two different approaches."),(0,m.kt)("p",null,"One is to pack the bits as tightly as possible into computer words. For example on a 64-bit computer 256-bit numbers can be stored in just 4 words. However to manipulate numbers in this form, even for simple addition, requires handling of carry bits if overflow is to be avoided, and a high-level language does not have direct access to carry flags. It is possible to emulate the flags, but this would be inefficient. In fact this approach is only really suitable for an assembly language implementation."),(0,m.kt)("p",null,'The alternative idea is to use extra words for the representation, and then try to offset the additional cost by taking full advantage of the "spare" bits in every word. This idea follows a "corner of the literature"',(0,m.kt)("sup",{parentName:"p",id:"fnref-first"},(0,m.kt)("a",{parentName:"sup",href:"#fn-first",className:"footnote-ref"},"first"))," which has been promoted by Bernstein and his collaborators in several publications. Refer to Figure 2, where each digit of the representation is stored as a signed integer which is the size of the processor word-length."),(0,m.kt)("p",null,"Note that almost all arithmetic takes place modulo a 256-bit prime number, the modulus representing the field over which the elliptic curve is defined, here denoted as ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"p")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"p")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"p"))))),"."),(0,m.kt)("p",null,"On 64-bit processors, AMCL represents numbers to the base ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msup",{parentName:"mrow"},(0,m.kt)("mn",{parentName:"msup"},"2"),(0,m.kt)("mn",{parentName:"msup"},"56"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"2^{56}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8141em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord"},"2"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.8141em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"56")))))))))))))," in a 5 element array, the Word Excess is 7 bits, and for a 256-bit modulus the Field Excess is 24 bits."),(0,m.kt)("p",null,"On 32-bit processors, AMCL represents numbers to the base ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msup",{parentName:"mrow"},(0,m.kt)("mn",{parentName:"msup"},"2"),(0,m.kt)("mn",{parentName:"msup"},"29"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"2^{29}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8141em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord"},"2"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.8141em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"29")))))))))))))," in a 9 element array, the Word Excess is 2 bits, and for a 256-bit modulus the Field Excess is 5 bits."),(0,m.kt)("p",null,"On 16-bit processors, AMCL represents numbers to the base ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msup",{parentName:"mrow"},(0,m.kt)("mn",{parentName:"msup"},"2"),(0,m.kt)("mn",{parentName:"msup"},"13"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"2^{13}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8141em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord"},"2"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.8141em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"13")))))))))))))," in a 20 element array, the Word Excess is 2 bits, and for a 256-bit modulus the Field Excess is 4 bits."),(0,m.kt)("p",null,"Such a representation of a 256-bit number is referred to as a ",(0,m.kt)("strong",{parentName:"p"},"BIG"),". Addition or subtraction of a pair of ",(0,m.kt)("strong",{parentName:"p"},"BIG"),"s, results in another ",(0,m.kt)("strong",{parentName:"p"},"BIG"),"."),(0,m.kt)("p",null,"The Java version uses exactly the same 32-bit representation as above."),(0,m.kt)("p",null,"For Javascript (where all numbers are stored as 64-bit floating point with a 52-bit mantissa, but mostly manipulated as 32-bit integers), numbers are represented to the base ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msup",{parentName:"mrow"},(0,m.kt)("mn",{parentName:"msup"},"2"),(0,m.kt)("mn",{parentName:"msup"},"24"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"2^{24}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8141em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord"},"2"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.8141em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"24")))))))))))))," in an 11 element array, the Word Excess is 7 bits, and the Field Excess for a 256-bit modulus is 8 bits."),(0,m.kt)("h3",{id:"addition-and-subtraction"},"Addition and Subtraction"),(0,m.kt)("p",null,"The existence of a word excess means for example that multiple field elements can be added together digit by digit, without processing of carries, before overflow can occur."),(0,m.kt)("p",null,"Only occasionally will there be a requirement to ",(0,m.kt)("em",{parentName:"p"},"normalize")," these ",(0,m.kt)("em",{parentName:"p"},"extended")," values, that is to force them back into the original format. Note that this is independent of the modulus."),(0,m.kt)("p",null,"The existence of a field excess means that, independent of the word excess, multiple field elements can be added together before it is required to reduce the sum with respect to the modulus. In the literature this is referred to as lazy, or delayed, reduction. In fact we allow the modulus to be as small as 254 bits, which obviously increases the field excess."),(0,m.kt)("p",null,"Note that these two mechanisms associated with the word excess and the field excess (often confused in the literature) operate largely independently of each other."),(0,m.kt)("p",null,"AMCL has no support for negative numbers. Therefore subtraction will be implemented as field negation followed by addition. However a field element ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"x")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"x")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"x")))))," can be negated by simply calculating ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mo",{parentName:"mrow"},"\u2212"),(0,m.kt)("mi",{parentName:"mrow"},"x"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"."),(0,m.kt)("mi",{parentName:"mrow"},"p"),(0,m.kt)("mo",{parentName:"mrow"},"\u2212"),(0,m.kt)("mi",{parentName:"mrow"},"x")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\u2212x = e.p \u2212 x")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6667em",verticalAlign:"-0.0833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},"\u2212"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.7778em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.kt)("span",{parentName:"span",className:"mord"},"."),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"p"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"\u2212"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"x"))))),", where ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"e")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"e")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e")))))," is the current excess associated with ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"x")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"x")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"x"))))),". Therefore subtraction will be implemented as field negation followed by addition. In practice it is more convenient to round ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"e")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"e")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e")))))," up to next highest power of 2, in which case ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"."),(0,m.kt)("mi",{parentName:"mrow"},"p")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"e.p")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.kt)("span",{parentName:"span",className:"mord"},"."),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"p")))))," can be calculated by a simple shift."),(0,m.kt)("p",null,(0,m.kt)("img",{alt:"client",src:t(6051).Z,width:"8050",height:"2075"})),(0,m.kt)("figure",null,(0,m.kt)("strong",null,"Figure 2.")," AMCL Library"),(0,m.kt)("br",null),"Normalization of extended numbers requires the word excess of each digit to be shifted right by the number of base bits, and added to the next digit, working right to left. Note that when numbers are subtracted digit-by-digit individual digits may become negative. However since we are avoiding using the sign bit, due to the magic of 2's complement arithmetic, this all works fine without any conditional branches.",(0,m.kt)("p",null,"Final full reduction of unreduced field elements is carried out using a simple shift-and-subtract of the modulus, with one subtraction needed for every bit in the actual field excess. Such reductions will rarely be required, as they are slow and hard to do in constant time. Ideally it should only be required at the end of a complex operation like an elliptic curve point multiplication. "),(0,m.kt)("p",null,"So with careful programming we avoid any unpredictable program branches. Since the length of field elements is fixed at compile time, it is expected that the compiler will unroll most of the time-critical loops. In any case the conditional branch required at the foot of a fixed-size loop can be accurately predicted by modern hardware."),(0,m.kt)("p",null,"Worst case field excesses are easy to calculate. If two elements ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"a")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"a")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"a")))))," and ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"b")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"b")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"b")))))," are to be added, and if their current field excesses are ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"e"),(0,m.kt)("mi",{parentName:"msub"},"a"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"e_{a}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.5806em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.1514em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"a"))))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"}))))))))))," and ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"e"),(0,m.kt)("mi",{parentName:"msub"},"b"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"e_{b}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.5806em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3361em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"b"))))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"}))))))))))," respectively, then clearly their sum will have a worst-case field excess of ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"e"),(0,m.kt)("mi",{parentName:"msub"},"a")),(0,m.kt)("mo",{parentName:"mrow"},"+"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"e"),(0,m.kt)("mi",{parentName:"msub"},"b"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"e_{a}+e_{b}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.7333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.1514em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"a"))))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.5806em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3361em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"b"))))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))))))),". By careful programming and choice of number base, full reductions can be largely eliminated",(0,m.kt)("sup",{parentName:"p",id:"fnref-second"},(0,m.kt)("a",{parentName:"sup",href:"#fn-second",className:"footnote-ref"},"second")),"."),(0,m.kt)("h3",{id:"multiplication-and-reduction"},"Multiplication and Reduction"),(0,m.kt)("p",null,"To support multiplication of ",(0,m.kt)("strong",{parentName:"p"},"BIG"),"s, we will require a double-length ",(0,m.kt)("strong",{parentName:"p"},(0,m.kt)("em",{parentName:"strong"},"DBIG")),' type. Also the partial products that arise in the process of long multiplication will require a double-length data type. Fortunately many popular C compilers, like Gnu GCC, always support an integer type that is double the native word-length. For Java the "int" type is 32-bits and there is a double-length "long" type which is 64-bit. Of course for Javascript a double length type is not possible, and so the partial products must be accommodated within the 52-bit mantissa.'),(0,m.kt)("p",null,"Multiprecision multiplication is performed column by column, propagating the carries, working from right-to-left, but using the fast method described in",(0,m.kt)("sup",{parentName:"p",id:"fnref-third"},(0,m.kt)("a",{parentName:"sup",href:"#fn-third",className:"footnote-ref"},"third")),". At the foot of each column the total is split into the sum for that column, and the carry to the next column. If the numbers are normalized prior to the multiplication, then with the word excesses that we have chosen, this will not result in overflow. The DBIG product will be automatically normalized as a result of this process. Squaring can be done in a similar fashion but at a slightly lower cost."),(0,m.kt)("p",null,"The method used for full reduction of a ",(0,m.kt)("strong",{parentName:"p"},"DBIG")," back to a ",(0,m.kt)("strong",{parentName:"p"},"BIG")," depends on the form of the modulus. We choose to support three distinct types of modulus, (a) pseudo Mersenne of the form ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msup",{parentName:"mrow"},(0,m.kt)("mn",{parentName:"msup"},"2"),(0,m.kt)("mi",{parentName:"msup"},"n")),(0,m.kt)("mo",{parentName:"mrow"},"\u2212"),(0,m.kt)("mi",{parentName:"mrow"},"c")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"2^n-c")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.7477em",verticalAlign:"-0.0833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord"},"2"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.6644em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"n")))))))),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"\u2212"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"c")))))," where ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"c")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"c")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"c")))))," is small and ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"n")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"n")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"n")))))," is the size of the modulus in bits, (b) Montgomery-friendly of the form ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"k"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"."),(0,m.kt)("msup",{parentName:"mrow"},(0,m.kt)("mn",{parentName:"msup"},"2"),(0,m.kt)("mi",{parentName:"msup"},"n")),(0,m.kt)("mo",{parentName:"mrow"},"\u2212"),(0,m.kt)("mn",{parentName:"mrow"},"1")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"k.2^n-1")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.7778em",verticalAlign:"-0.0833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03148em"}},"k"),(0,m.kt)("span",{parentName:"span",className:"mord"},"."),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord"},"2"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.6644em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"n")))))))),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"\u2212"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6444em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},"1"))))),", and (c) moduli of no special form. For cases (b) and (c) we convert all field elements to Montgomery's ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"n")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"n")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"n"))))),"-residue form, and use Montgomery's fast method for modular reduction."),(0,m.kt)("p",null,"In all cases the ",(0,m.kt)("strong",{parentName:"p"},"DBIG")," number to be reduced ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"y")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"y")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y")))))," must be in the range ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex-error",title:"ParseError: KaTeX parse error: Expected 'EOF', got '&' at position 2: 0&\u0332lt;y&lt;pR",style:{color:"#cc0000"}},"0&lt;y&lt;pR"))," (a requirement of Montgomery's method), and the result ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"x")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"x")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"x")))))," is guaranteed to be in the range ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex-error",title:"ParseError: KaTeX parse error: Expected 'EOF', got '&' at position 2: 0&\u0332lt;x&lt;2p",style:{color:"#cc0000"}},"0&lt;x&lt;2p"))," , where ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"R"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("msup",{parentName:"mrow"},(0,m.kt)("mn",{parentName:"msup"},"2"),(0,m.kt)("mrow",{parentName:"msup"},(0,m.kt)("mn",{parentName:"mrow"},"256"),(0,m.kt)("mo",{parentName:"mrow"},"+"),(0,m.kt)("mi",{parentName:"mrow"},"F"),(0,m.kt)("mi",{parentName:"mrow"},"E")))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"R=2^{256+FE}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.00773em"}},"R"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8413em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord"},"2"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.8413em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"256"),(0,m.kt)("span",{parentName:"span",className:"mbin mtight"},"+"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.05764em"}},"FE")))))))))))))," for a 256-bit modulus. Note that the ",(0,m.kt)("strong",{parentName:"p"},"BIG")," result will be (nearly) fully reduced. The fact than we allow ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"x")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"x")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"x")))))," to be larger than ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"p")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"p")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"p"))))),' means that we can avoid the notorious Montgomery "final subtraction". Independent of the method used for reduction, we have found that it is much easier to obtain reduction in constant time to a value less than ',(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mn",{parentName:"mrow"},"2"),(0,m.kt)("mi",{parentName:"mrow"},"p")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"2p")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8389em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},"2"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"p"))))),", than a full reduction to less than ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"p")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"p")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"p"))))),"."),(0,m.kt)("p",null,"Observe how unreduced numbers involved in complex calculations tend to be (nearly fully) reduced if they are involved in a modular multiplication. So for example if field element ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"x")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"x")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"x")))))," has a large field excess, and if we calculate ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"x"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mi",{parentName:"mrow"},"x"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"."),(0,m.kt)("mi",{parentName:"mrow"},"y")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"x=x.y")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,m.kt)("span",{parentName:"span",className:"mord"},"."),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"))))),", then as long as the unreduced product is less than ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"p"),(0,m.kt)("mi",{parentName:"mrow"},"R")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"pR")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8778em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.00773em"}},"pR"))))),", the result will be a nearly fully reduced ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"x")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"x")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"x"))))),". So in many cases there is a natural tendency for field excesses not to grow without limit, and not to overflow, without requiring explicit action on our part."),(0,m.kt)("p",null,"Consider now a sequence of code that adds, subtracts and multiplies field elements, as might arise in elliptic curve additions and doublings. Assume that the code has been analysed and that normalisation code has been inserted where needed. Assume that the reduction code that activates if there is a possibility of an element overflowing its field excess, while present, never in fact is triggered (due to the behaviour described above). Then we assert that once a program has initialised no unpredicted branches will occur during field arithmetic, and therefore the code will execute in constant time."),(0,m.kt)("h2",{id:"extension-field-arithmetic"},"Extension Field arithmetic"),(0,m.kt)("p",null,"To support cryptographic pairings we will need support for extension fields. We use a towering of extensions as required for BN curves and as required for higher security BLS curves. An element of the quadratic extension field will be represented as ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"f"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mi",{parentName:"mrow"},"a"),(0,m.kt)("mo",{parentName:"mrow"},"+"),(0,m.kt)("mi",{parentName:"mrow"},"i"),(0,m.kt)("mi",{parentName:"mrow"},"b")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"f=a+ib")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8889em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10764em"}},"f"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6667em",verticalAlign:"-0.0833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"a"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"ib"))))),", where ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"i")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"i")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6595em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"i")))))," is the square root of the quadratic non-residue -1. To add, subtract and multiply them we use the obvious methods."),(0,m.kt)("p",null,"However for negation we can construct ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mo",{parentName:"mrow"},"\u2212"),(0,m.kt)("mi",{parentName:"mrow"},"f"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mo",{parentName:"mrow"},"\u2212"),(0,m.kt)("mi",{parentName:"mrow"},"a"),(0,m.kt)("mo",{parentName:"mrow"},"\u2212"),(0,m.kt)("mi",{parentName:"mrow"},"i"),(0,m.kt)("mi",{parentName:"mrow"},"b")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"-f=-a-ib")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8889em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},"\u2212"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10764em"}},"f"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6667em",verticalAlign:"-0.0833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},"\u2212"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"a"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"\u2212"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"ib")))))," as ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"b"),(0,m.kt)("mo",{parentName:"mrow"},"\u2212"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"a"),(0,m.kt)("mo",{parentName:"mrow"},"+"),(0,m.kt)("mi",{parentName:"mrow"},"b"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,m.kt)("mo",{parentName:"mrow"},"+"),(0,m.kt)("mi",{parentName:"mrow"},"i"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"."),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"a"),(0,m.kt)("mo",{parentName:"mrow"},"\u2212"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"a"),(0,m.kt)("mo",{parentName:"mrow"},"+"),(0,m.kt)("mi",{parentName:"mrow"},"b"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"b-(a+b)+i.(a-(a+b)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.7778em",verticalAlign:"-0.0833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"b"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"\u2212"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"a"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"b"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"i"),(0,m.kt)("span",{parentName:"span",className:"mord"},"."),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"a"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"\u2212"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"a"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"b"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")")))))," which requires only one base field negation. A similar idea can be used recursively for higher order extensions, so that only one base field negation is ever required."),(0,m.kt)("h2",{id:"elliptic-curves"},"Elliptic Curves"),(0,m.kt)("p",null,"Three types of Elliptic curve are supported for the implementation of Elliptic Curve Cryptography (ECC), but curves are limited to popular families that support faster implementation. Weierstrass curves are supported using the Short Weierstrass representation:"),(0,m.kt)("p",null,(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msup",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msup"},"y"),(0,m.kt)("mn",{parentName:"msup"},"2")),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("msup",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msup"},"x"),(0,m.kt)("mn",{parentName:"msup"},"3")),(0,m.kt)("mo",{parentName:"mrow"},"+"),(0,m.kt)("mi",{parentName:"mrow"},"A"),(0,m.kt)("mi",{parentName:"mrow"},"x"),(0,m.kt)("mo",{parentName:"mrow"},"+"),(0,m.kt)("mi",{parentName:"mrow"},"B")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"y^2=x^3+Ax+B")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1.0085em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.8141em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"2")))))))),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8974em",verticalAlign:"-0.0833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.8141em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"3")))))))),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.7667em",verticalAlign:"-0.0833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05017em"}},"B")))))),(0,m.kt)("p",null,"where ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"A"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mn",{parentName:"mrow"},"0")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"A=0")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6444em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},"0")))))," or ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"A"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mo",{parentName:"mrow"},"\u2212"),(0,m.kt)("mn",{parentName:"mrow"},"3")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"A=-3")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.7278em",verticalAlign:"-0.0833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},"\u2212"),(0,m.kt)("span",{parentName:"span",className:"mord"},"3"))))),". Edwards curves are supported using both regular and twisted Edwards format:"),(0,m.kt)("p",null,(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"A"),(0,m.kt)("msup",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msup"},"x"),(0,m.kt)("mn",{parentName:"msup"},"2")),(0,m.kt)("mo",{parentName:"mrow"},"+"),(0,m.kt)("msup",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msup"},"y"),(0,m.kt)("mn",{parentName:"msup"},"2")),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mn",{parentName:"mrow"},"1"),(0,m.kt)("mo",{parentName:"mrow"},"+"),(0,m.kt)("mi",{parentName:"mrow"},"B"),(0,m.kt)("msup",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msup"},"x"),(0,m.kt)("mn",{parentName:"msup"},"2")),(0,m.kt)("msup",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msup"},"y"),(0,m.kt)("mn",{parentName:"msup"},"2"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"Ax^2+y^2=1+Bx^2y^2")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8974em",verticalAlign:"-0.0833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.8141em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"2")))))))),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1.0085em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.8141em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"2")))))))),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.7278em",verticalAlign:"-0.0833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},"1"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1.0085em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05017em"}},"B"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.8141em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"2")))))))),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.8141em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"2"))))))))))))),(0,m.kt)("p",null,"where ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"A"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mn",{parentName:"mrow"},"1")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"A=1")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6444em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},"1")))))," or ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"A"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mo",{parentName:"mrow"},"\u2212"),(0,m.kt)("mn",{parentName:"mrow"},"1")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"A=-1")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.7278em",verticalAlign:"-0.0833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},"\u2212"),(0,m.kt)("span",{parentName:"span",className:"mord"},"1"))))),". Montgomery curves are represented as:"),(0,m.kt)("p",null,(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msup",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msup"},"y"),(0,m.kt)("mn",{parentName:"msup"},"2")),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("msup",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msup"},"x"),(0,m.kt)("mn",{parentName:"msup"},"3")),(0,m.kt)("mo",{parentName:"mrow"},"+"),(0,m.kt)("mi",{parentName:"mrow"},"A"),(0,m.kt)("msup",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msup"},"x"),(0,m.kt)("mn",{parentName:"msup"},"2")),(0,m.kt)("mo",{parentName:"mrow"},"+"),(0,m.kt)("mi",{parentName:"mrow"},"x")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"y^2=x^3+Ax^2+x")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1.0085em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.8141em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"2")))))))),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8974em",verticalAlign:"-0.0833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.8141em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"3")))))))),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8974em",verticalAlign:"-0.0833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.8141em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"2")))))))),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"x")))))),(0,m.kt)("p",null,"where ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"A")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"A")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"A")))))," must be small. As mentioned in the introduction, in all cases we use exception-free formulae if available, as this facilitates constant time imple- mentation, even if this invokes a significant performance penalty."),(0,m.kt)("p",null,"In the particular case of elliptic curve point multiplication, there are potentially a myriad of very dangerous side-channel attacks that arise from using the classic double-and-add algorithm and its variants. Vulnerabilities arise if branches are taken that depend on secret bits, or if data is even accessed using secret values as indices. Many types of counter-measures have been suggested. The simplest solution is to use a constant-time algorithm like the Montgomery ladder, which has a very simple structure, uses very little  memory and has no key-bit-dependent branches."),(0,m.kt)("p",null,"If using a Montgomery representation of the elliptic curve the Montgomery ladder is in fact the optimal algorithm for point multiplication. For other representations we use a fixed-sized signed window method. "),(0,m.kt)("p",null,"AMCL has built-in support for most standardised elliptic curves, along with many curves that have been proposed for standardisation. Specifically it supports the NIST256 curve, the well known Curve25519, the 256-bit Brain- pool curve, the ANSSI curve, and six NUMS (Nothing-Up-My-Sleeve) curves proposed by Bos et al. At higher levels of security the NIST384 and NIST521 curves are supported, also Curve41417 as well as the Goldilocks curve, and our own HiFive curve.\nSome of these proposals support only a Weierstrass representation, but many also allow an Edwards or Montgomery form. Tools are provided to allow easy integration of more curves."),(0,m.kt)("h2",{id:"support-for-classic-finite-field-methods"},"Support for classic Finite Field Methods"),(0,m.kt)("p",null,"Before Elliptic Curves, cryptography depended on methods based on simple finite fields. The most famous of these would be the well known RSA method. These methods have the advantage of being effectively parameterless, and therefore the issue of trust in parameters that arises for elliptic curves, is not an issue."),(0,m.kt)("p",null,"However these methods are subject to index calculus based methods of cryptanalysis, and so fields and keys are typically much larger. So how to support for example a 2048-bit implementation of RSA based on a library designed for optimized 256-bit operations? The idea is simple; use AMCL as a virtual 256-bit machine, and build 2048-bit arithmetic on top of that."),(0,m.kt)("p",null,"And to claw back some decent performance use the Karatsuba method so that for example 2048-bit multiplication recurses efficiently right down to 256-bit operations. Of course the downside of the Karatsuba method is that while it saves on multiplications, the number of additions and subtractions is greatly increased.  However the existence of generous word excesses in our representation makes this less of a problem, as most additions can be carried out without normalization."),(0,m.kt)("p",null,"Secret key operations like RSA decryption use the Montgomery ladder to achieve side-channel-attack resistance."),(0,m.kt)("p",null,"The implementation can currently support ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mn",{parentName:"mrow"},"1024."),(0,m.kt)("msup",{parentName:"mrow"},(0,m.kt)("mn",{parentName:"msup"},"2"),(0,m.kt)("mi",{parentName:"msup"},"n"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"1024.2^n")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6644em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},"1024."),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord"},"2"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.6644em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"n"))))))))))))," bit fields, so for example 2048-bit RSA can be used to get reasonably close to the AES-128-bit level of security, and if desired 4096 bit RSA can be used to comfortably exceed it."),(0,m.kt)("p",null,"Note that this code is supported independently of the elliptic curve code. So for example RSA and ECC can be run together within a single application."),(0,m.kt)("p",null,'However we regard these methods as "legacy" as in our view ECC based methods are a much better fit for the IoT.'),(0,m.kt)("h2",{id:"multi-lingual-support"},"Multi-Lingual support"),(0,m.kt)("p",null,"It is a ",(0,m.kt)("strong",{parentName:"p"},"BIG")," ask to develop and maintain multiple versions of a crypto library written in radically different languages such as C, Java, Javascript, Go and Swift. This has discouraged the use of language specific methods (which are in any case of little relevance here), and strongly encouraged the use of simple, generic computer language constructs."),(0,m.kt)("p",null,"This approach brings a surprising bonus: AMCL can be automatically converted to many other languages using available translator tools. For example Tangible Software Solutions market a Java to C# converter. This generated an efficient fully functional C# version of AMCL within minutes. The same company market a Java to Visual Basic converter."),(0,m.kt)("p",null,"Google have a Java to Objective C converter specifically designed to convert Android apps developed in Java, to iOS apps written in Objective C."),(0,m.kt)("p",null,"Of course not all languages can be supported in this way, so support for some will be developed manually. In particular a Rust version is currently under development."),(0,m.kt)("h2",{id:"discussion"},"Discussion"),(0,m.kt)("p",null,"We found in our code that, with few exceptions, reductions due to possible overflow of the field excess of a ",(0,m.kt)("strong",{parentName:"p"},"BIG")," were very rare, especially for the 64-bit version of the library. Similarly normalization was rarely needed for the 64-bit code. This is due to the much greater excesses that apply in the 64-bit representation. In some experiments we calculated thousands of random pairings, and reduction due to field excess overflow detection never happened."),(0,m.kt)("p",null,"In general in developing AMCL we tried to use optimal methods, without going to what we (very subjectively) regarded as extremes in order to maximize performance.  Algorithms that require less memory were generally preferred if the impact on performance was not large. Some optimizations, while perfectly valid, are hard to implement without having a significant impact on program readability and maintainability. Deciding which optimizations to use and which to reject (on the grounds of code size and negative impact on code\nreadability and maintainability) is admittedly rather arbitrary!"),(0,m.kt)("p",null,"One notable omission from AMCL is the use of pre-computation on fixed parameters in order to speed up certain calculations. We try to justify this, rather unconvincingly, by pointing out that pre-computation must of necessity increase code size. Furthermore such methods are more sensitive to side-channel attacks and much of their speed advantage will be lost if they are to be fully side-channel protected. Also pre-computation on secret values clearly increases the amount of secret data that needs to be protected."),(0,m.kt)("p",null,"However the development roadmap view might change in later versions depending on the project supporters in-the-field experiences of using AMCL."),(0,m.kt)("hr",null),(0,m.kt)("admonition",{title:"See an error in this documentation? ",type:"note"},(0,m.kt)("p",{parentName:"admonition"},"Submit a pull request on the development branch of ",(0,m.kt)("a",{parentName:"p",href:"https://github.com/apache/incubator-milagro"},"Milagro Website Repo"),".")),(0,m.kt)("p",null,"Supported admonition types are: caution, note, important, tip, warning."),(0,m.kt)("div",{className:"footnotes"},(0,m.kt)("hr",{parentName:"div"}),(0,m.kt)("ol",{parentName:"div"},(0,m.kt)("li",{parentName:"ol",id:"fn-first"},(0,m.kt)("a",{parentName:"li",href:"http://eprint.iacr.org/2014/526"},"Curve41417 Karatsuba revisited"),(0,m.kt)("a",{parentName:"li",href:"#fnref-first",className:"footnote-backref"},"\u21a9")),(0,m.kt)("li",{parentName:"ol",id:"fn-second"},(0,m.kt)("a",{parentName:"li",href:"http://eprint.iacr.org/2017/437"},"Slothful Reduction"),(0,m.kt)("a",{parentName:"li",href:"#fnref-second",className:"footnote-backref"},"\u21a9")),(0,m.kt)("li",{parentName:"ol",id:"fn-third"},(0,m.kt)("a",{parentName:"li",href:"http://eprint.iacr.org/2015/1247"},"Missing a trick: Karatsuba variations"),(0,m.kt)("a",{parentName:"li",href:"#fnref-third",className:"footnote-backref"},"\u21a9")))))}h.isMDXComponent=!0},3436:(a,e,t)=>{t.d(e,{Z:()=>s});const s=t.p+"assets/images/clint.eps-f86b0b1b33fb4f1bde48330c4fa8db8a.jpg"},6051:(a,e,t)=>{t.d(e,{Z:()=>s});const s=t.p+"assets/images/words.eps-5a2c0be3376e91f68e1b4abf760f24bb.jpg"}}]);
\ No newline at end of file
diff --git a/assets/js/e6851893.36b6ad27.js b/assets/js/e6851893.36b6ad27.js
new file mode 100644
index 0000000..26db808
--- /dev/null
+++ b/assets/js/e6851893.36b6ad27.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8732],{3905:(a,e,t)=>{t.d(e,{Zo:()=>i,kt:()=>h});var s=t(7294);function n(a,e,t){return e in a?Object.defineProperty(a,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):a[e]=t,a}function m(a,e){var t=Object.keys(a);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(a);e&&(s=s.filter((function(e){return Object.getOwnPropertyDescriptor(a,e).enumerable}))),t.push.apply(t,s)}return t}function p(a){for(var e=1;e<arguments.length;e++){var t=null!=arguments[e]?arguments[e]:{};e%2?m(Object(t),!0).forEach((function(e){n(a,e,t[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(t)):m(Object(t)).forEach((function(e){Object.defineProperty(a,e,Object.getOwnPropertyDescriptor(t,e))}))}return a}function r(a,e){if(null==a)return{};var t,s,n=function(a,e){if(null==a)return{};var t,s,n={},m=Object.keys(a);for(s=0;s<m.length;s++)t=m[s],e.indexOf(t)>=0||(n[t]=a[t]);return n}(a,e);if(Object.getOwnPropertySymbols){var m=Object.getOwnPropertySymbols(a);for(s=0;s<m.length;s++)t=m[s],e.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(a,t)&&(n[t]=a[t])}return n}var N=s.createContext({}),l=function(a){var e=s.useContext(N),t=e;return a&&(t="function"==typeof a?a(e):p(p({},e),a)),t},i=function(a){var e=l(a.components);return s.createElement(N.Provider,{value:e},a.children)},k="mdxType",c={inlineCode:"code",wrapper:function(a){var e=a.children;return s.createElement(s.Fragment,{},e)}},o=s.forwardRef((function(a,e){var t=a.components,n=a.mdxType,m=a.originalType,N=a.parentName,i=r(a,["components","mdxType","originalType","parentName"]),k=l(t),o=n,h=k["".concat(N,".").concat(o)]||k[o]||c[o]||m;return t?s.createElement(h,p(p({ref:e},i),{},{components:t})):s.createElement(h,p({ref:e},i))}));function h(a,e){var t=arguments,n=e&&e.mdxType;if("string"==typeof a||n){var m=t.length,p=new Array(m);p[0]=o;var r={};for(var N in e)hasOwnProperty.call(e,N)&&(r[N]=e[N]);r.originalType=a,r[k]="string"==typeof a?a:n,p[1]=r;for(var l=2;l<m;l++)p[l]=t[l];return s.createElement.apply(null,p)}return s.createElement.apply(null,t)}o.displayName="MDXCreateElement"},3261:(a,e,t)=>{t.r(e),t.d(e,{assets:()=>i,contentTitle:()=>N,default:()=>o,frontMatter:()=>r,metadata:()=>l,toc:()=>k});var s=t(7462),n=t(3366),m=(t(7294),t(3905)),p=["components"],r={id:"milagro-protocols",title:"Milagro Protocols",sidebar_label:"Milagro Protocols"},N=void 0,l={unversionedId:"milagro-protocols",id:"milagro-protocols",title:"Milagro Protocols",description:"The Apache Milagro crypto libraries contain an (almost) overwhelming choice of algorithms and cryptographic primitives for robust and rapid application development. This section focuses specifically on a few protocols that are used extensively as key building blocks within the Milagro Zero-Knowledge Proof Multi-Factor Authentication (ZKP-MFA) server and clients, and Milagro Decentralized Trust Authority (D-TA) applications. Both applications implement these protocols using the Milagro crypto libraries.",source:"@site/../docs/milagro-protocols.md",sourceDirName:".",slug:"/milagro-protocols",permalink:"/docs/milagro-protocols",draft:!1,tags:[],version:"current",frontMatter:{id:"milagro-protocols",title:"Milagro Protocols",sidebar_label:"Milagro Protocols"},sidebar:"docs",previous:{title:"Milagro Crypto",permalink:"/docs/milagro-crypto"},next:{title:"Milagro Design",permalink:"/docs/milagro-design"}},i={},k=[{value:"M-Pin Protocol - Introduction",id:"m-pin-protocol---introduction",level:2},{value:"Chow-Choo Protocol - Introduction",id:"chow-choo-protocol---introduction",level:2},{value:"BLS Signatures - Introduction",id:"bls-signatures---introduction",level:2},{value:"Supersingular Isogeny Key Encapsulation - Introduction",id:"supersingular-isogeny-key-encapsulation---introduction",level:2},{value:"Protocols In Depth",id:"protocols-in-depth",level:2},{value:"M-Pin 1-Pass",id:"m-pin-1-pass",level:3},{value:"M-Pin 2-Pass",id:"m-pin-2-pass",level:3},{value:"M-Pin FULL",id:"m-pin-full",level:3},{value:"Chow-Choo Protocol",id:"chow-choo-protocol",level:3},{value:"Secret Revocation",id:"secret-revocation",level:3},{value:"BLS Subgroup Multi-Signatures",id:"bls-subgroup-multi-signatures",level:3},{value:"Supersingular Isogeny Key Encapsulation (SIKE)",id:"supersingular-isogeny-key-encapsulation-sike",level:3}],c={toc:k};function o(a){var e=a.components,r=(0,n.Z)(a,p);return(0,m.kt)("wrapper",(0,s.Z)({},c,r,{components:e,mdxType:"MDXLayout"}),(0,m.kt)("p",null,"The Apache Milagro crypto libraries contain an (almost) overwhelming choice of algorithms and cryptographic primitives for robust and rapid application development. This section focuses specifically on a few protocols that are used extensively as key building blocks within the Milagro Zero-Knowledge Proof Multi-Factor Authentication (ZKP-MFA) server and clients, and Milagro Decentralized Trust Authority (D-TA) applications. Both applications implement these protocols using the Milagro crypto libraries."),(0,m.kt)("h2",{id:"m-pin-protocol---introduction"},"M-Pin Protocol - Introduction"),(0,m.kt)("p",null,"The genesis of the M-Pin Protocol was first put forward in a research paper by ",(0,m.kt)("a",{parentName:"p",href:"https://scholar.google.com/citations?user=GsM-aeEAAAAJ&hl=en"},"Dr. Michael Scott")," in 2002",(0,m.kt)("sup",{parentName:"p",id:"fnref-first"},(0,m.kt)("a",{parentName:"sup",href:"#fn-first",className:"footnote-ref"},"first")),"."),(0,m.kt)("p",null,"The M-Pin Protocol has been iterated on several times over the years since, to develop three distinct modes, which will be explored in the following sections."),(0,m.kt)("p",null,"Because of the characteristics that M-Pin inherits from the four techniques above, the M-Pin Protocol and its variants are able to deliver:"),(0,m.kt)("ul",null,(0,m.kt)("li",{parentName:"ul"},"Multi-factor authentication (MFA) using Zero Knowledge Proof"),(0,m.kt)("li",{parentName:"ul"},"Authenticated Key Agreement"),(0,m.kt)("li",{parentName:"ul"},"Distribution, or splitting, of Trust Authorities"),(0,m.kt)("li",{parentName:"ul"},(0,m.kt)("a",{parentName:"li",href:"https://en.wikipedia.org/wiki/Subliminal_channel"},"Subliminal Channel Communication"),(0,m.kt)("sup",{parentName:"li",id:"fnref-second"},(0,m.kt)("a",{parentName:"sup",href:"#fn-second",className:"footnote-ref"},"second")))),(0,m.kt)("p",null,"The three modes of operation of the M-Pin Protocol are as follows:"),(0,m.kt)("ul",null,(0,m.kt)("li",{parentName:"ul"},(0,m.kt)("strong",{parentName:"li"},"M-Pin 1-pass"),": Client to server authentication via digital signature, this mode implements a ",(0,m.kt)("em",{parentName:"li"},"non-interactive")," zero knowledge proof and is resistant to ",(0,m.kt)("a",{parentName:"li",href:"https://en.wikipedia.org/wiki/Man-in-the-middle_attack"},"MITM (man in the middle)")," attacks."),(0,m.kt)("li",{parentName:"ul"},(0,m.kt)("strong",{parentName:"li"},"M-Pin 2-pass"),": Client to server authentication via a ",(0,m.kt)("em",{parentName:"li"},"interactive")," zero knowledge proof, resistant to ",(0,m.kt)("a",{parentName:"li",href:"https://en.wikipedia.org/wiki/Man-in-the-middle_attack"},"MITM")," and ",(0,m.kt)("a",{parentName:"li",href:"https://kcitls.org"},"KCI (Key Compromise Impersonation)")," attacks."),(0,m.kt)("li",{parentName:"ul"},(0,m.kt)("strong",{parentName:"li"},"M-Pin FULL"),": Mutual client to server authentication via a ",(0,m.kt)("em",{parentName:"li"},"interactive")," zero knowledge proof, resistant to MITM and KCI attacks and able to drive an Authenticated ",(0,m.kt)("a",{parentName:"li",href:"https://en.wikipedia.org/wiki/Key-agreement_protocol"},"Key Agreement")," between client and server, resulting in 128 bit shared secret key.")),(0,m.kt)("p",null,"Note that the M-Pin Full Authenticated Key Agreement possesses the quality of ",(0,m.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Forward_secrecy"},"perfect forward secrecy (PFS)"),", meaning, even if the client and server long term keys are compromised, the past session keys (used to encrypt TLS traffic, for example) are not compromised."),(0,m.kt)("h2",{id:"chow-choo-protocol---introduction"},"Chow-Choo Protocol - Introduction"),(0,m.kt)("p",null,"The Chow-Choo Protocol was developed by Sherman S.M. Chow and Kim-Kwang Raymond Choo and published in 2007 via a research paper titled Strongly-Secure Identity-based Key Agreement",(0,m.kt)("sup",{parentName:"p",id:"fnref-third"},(0,m.kt)("a",{parentName:"sup",href:"#fn-third",className:"footnote-ref"},"third")),".  The Chow-Choo Protocol can be technically described as an identity-based key agreement protocol."),(0,m.kt)("p",null,"The Chow-Choo Protocol is of these classifications and exploits the features of:"),(0,m.kt)("ul",null,(0,m.kt)("li",{parentName:"ul"},"Elliptic Curve Cryptography"),(0,m.kt)("li",{parentName:"ul"},"Pairing Based Cryptography"),(0,m.kt)("li",{parentName:"ul"},"Identity Based Encryption")),(0,m.kt)("p",null,"Because of the characteristics that Chow-Choo inherits from the three techniques above, the Chow-Choo Protocol can deliver:"),(0,m.kt)("ul",null,(0,m.kt)("li",{parentName:"ul"},"Authenticated Key Agreement"),(0,m.kt)("li",{parentName:"ul"},"Distribution, or splitting, of Trust Authorities")),(0,m.kt)("p",null,"Note that the Chow-Choo Protocol is not a Zero Knowledge Proof protocol."),(0,m.kt)("h2",{id:"bls-signatures---introduction"},"BLS Signatures - Introduction"),(0,m.kt)("p",null,"The BLS signature (Boneh-Lynn-Schacham) scheme",(0,m.kt)("sup",{parentName:"p",id:"fnref-fourth"},(0,m.kt)("a",{parentName:"sup",href:"#fn-fourth",className:"footnote-ref"},"fourth"))," uses a bilinear pairing for verification, and signatures are elements of an elliptic curve group. Working in an elliptic curve group provides some defense against index calculus attacks (with the caveat that such attacks are still possible in the target group ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"G"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"_"),(0,m.kt)("mi",{parentName:"mrow"},"T")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"G\\_{T}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.9933em",verticalAlign:"-0.31em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"G"),(0,m.kt)("span",{parentName:"span",className:"mord",style:{marginRight:"0.02778em"}},"_"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"T"))))))," of the pairing), allowing shorter signatures than other systems for similar levels of security. "),(0,m.kt)("p",null,"BLS signatures have become the subject of much work as they are seen as being a possible way forward to solve privacy issues within cryptocurrencies through a process of signature aggregation. Apache Milagro uses signature aggregation and key splitting, and further aggregation of signatures from those split keys, as a key component of the Milagro Custody Node digital asset safekeeping protocol."),(0,m.kt)("h2",{id:"supersingular-isogeny-key-encapsulation---introduction"},"Supersingular Isogeny Key Encapsulation - Introduction"),(0,m.kt)("p",null,"Supersingular isogeny Diffie\u2013Hellman key exchange (SIDH) and the key encapsulation protocol, SIKE",(0,m.kt)("sup",{parentName:"p",id:"fnref-fifth"},(0,m.kt)("a",{parentName:"sup",href:"#fn-fifth",className:"footnote-ref"},"fifth"))," ","(","derived from SIDH), are post-quantum cryptographic algorithms used to establish a secret key between two parties over an otherwise insecure communications channel. SIKE boasts one of the smallest key sizes of all post-quantum key encapsulations; with compression, SIKE uses 2688-bit public keys at a 128-bit quantum security level. "),(0,m.kt)("p",null,"SIKE also distinguishes itself from similar systems such as NTRU and Ring-LWE by supporting perfect forward secrecy, a property that prevents compromised long-term keys from compromising the confidentiality of old communication sessions. These properties make SIKE a natural candidate to replace Diffie\u2013Hellman (DHE and elliptic curve Diffie\u2013Hellman (ECDHE), which are widely used in Internet communication."),(0,m.kt)("p",null,"Since it is the only post-quantum cryptography protocol which is constructed on elliptic curves, hybrid cryptography protocols can be derived from SIKE and classical elliptic curve cryptography (ECC) to make the transition towards post-quantum cryptography more convenient and practical."),(0,m.kt)("p",null,"Milagro Custody Node implements SIKE for key encapsulation within Milagro's encrypted envelope format."),(0,m.kt)("hr",null),(0,m.kt)("table",null,(0,m.kt)("thead",{parentName:"table"},(0,m.kt)("tr",{parentName:"thead"},(0,m.kt)("th",{parentName:"tr",align:null},"Protocols"),(0,m.kt)("th",{parentName:"tr",align:null},"Use Cases"))),(0,m.kt)("tbody",{parentName:"table"},(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:null},"M-Pin 1-Pass"),(0,m.kt)("td",{parentName:"tr",align:null},"Digital signature authentication in battery or bandwidth constrained environments such as IoT devices, embedded applications and mobile apps. ",(0,m.kt)("br",null),"This should be considered the default implementation for client to server authentication suitable for almost all use cases.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:null},"M-Pin 1-Pass + ",(0,m.kt)("br",null),"M-Pin 2-Pass"),(0,m.kt)("td",{parentName:"tr",align:null},"Digital signature and client to server authentication in smartphones apps, desktop browsers and software applications.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:null},"M-Pin 2-Pass"),(0,m.kt)("td",{parentName:"tr",align:null},"Client to server authentication in smartphone apps, desktop browsers and software applications.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:null},"M-Pin FULL"),(0,m.kt)("td",{parentName:"tr",align:null},"Mutual client and server authentication with authenticated key agreement for use in smartphone apps, hardware and software applications. ",(0,m.kt)("br",null),"Authenticated Key Agreement with PFS can be used as the basis for TLS sessions between clients and servers.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:null},"Chow-Choo"),(0,m.kt)("td",{parentName:"tr",align:null},"Mutual peer to peer authentication with authenticated key agreement for use in smartphone apps, hardware and software applications. ",(0,m.kt)("br",null),"Authenticated Key Agreement with PFS can be used as the basis for TLS sessions between clients and servers and peer to peer.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:null},"BLS Signing + ",(0,m.kt)("br",null),"Key Splitting + ",(0,m.kt)("br",null),"Signature Aggregation"),(0,m.kt)("td",{parentName:"tr",align:null},"A simple approach for splitting keys and aggregating many BLS signatures (from the shares of keys acting as signing keys) on a common message. Public keys are not needed for verifying the multi-signature. ",(0,m.kt)("br",null),"An important property of the construction is that the scheme is secure against a rogue public-key attack without requiring users to prove knowledge of their secret keys.")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:null},"SIKE (Key Encapsulation)"),(0,m.kt)("td",{parentName:"tr",align:null},"SIKE is a family of post-quantum key encapsulation mechanisms based on the Supersingular Isogeny Diffie-Hellman (SIDH) key exchange protocol. ",(0,m.kt)("br",null),"The algorithms use arithmetic operations on elliptic curves defined over finite fields and compute maps, so-called isogenies, between such curves. ",(0,m.kt)("br",null),"SIKE can also delivery perfect forward secrecy.")))),(0,m.kt)("hr",null),(0,m.kt)("h2",{id:"protocols-in-depth"},"Protocols In Depth"),(0,m.kt)("h3",{id:"m-pin-1-pass"},"M-Pin 1-Pass"),(0,m.kt)("p",null,"As opposed to Chow-Choo, which can be used in a client to server as well as a peer to peer setting, M-Pin is strictly a client-server protocol."),(0,m.kt)("p",null,"To embellish the security of the client-server protocol, it is important that client and server secrets should be kept distinct."),(0,m.kt)("p",null,"A simple way to do this is to exploit the structure of a Type-3 pairing and put client secrets in ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"G"),(0,m.kt)("mn",{parentName:"msub"},"1"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"G_1")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"G"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"1")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"}))))))))))," and the server secret in ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"G"),(0,m.kt)("mn",{parentName:"msub"},"2"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"G_2")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"G"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"2")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"}))))))))))," as previously noted in the preceding section."),(0,m.kt)("p",null,"For a Type-3 pairing there is assumed to be no computable isomorphism between these groups, even though both are of the same order."),(0,m.kt)("p",null,"In the original implementation, the client was supplied with a challenge by the server as part of the second step within the protocol, after the first step whereby the client announced her identity to the server."),(0,m.kt)("p",null,"In a later proposal, it was realised that an M-Pin 1-Pass Protocol could be obtained if the client itself derived the challenge as ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"y")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"y")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y")))))," as ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"y"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mi",{parentName:"mrow"},"H"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"U"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"\u2223"),(0,m.kt)("mi",{parentName:"mrow"},"T"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"y=H(U|T)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.08125em"}},"H"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"U"),(0,m.kt)("span",{parentName:"span",className:"mord"},"\u2223"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"T"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")")))))," where ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"T")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"T")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"T")))))," is a time-stamp transmitted by the Client along her claimed identity, ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"U")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"U")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"U")))))," and ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"V")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"V")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.22222em"}},"V"))))),"."),(0,m.kt)("p",null,"The protocol could then be reduced in an obvious way to a secure 1-pass protocol. However, this assumes that the Server checks the accuracy of the time-stamp before completing the protocol."),(0,m.kt)("p",null,"This all works thanks to the pairing function ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"."),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"."),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"e(.,.)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord"},"."),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},"."),(0,m.kt)("span",{parentName:"span",className:"mclose"},")")))))," and its remarkable bilinearity property ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"a"),(0,m.kt)("mi",{parentName:"mrow"},"P"),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("mi",{parentName:"mrow"},"Q"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"P"),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("mi",{parentName:"mrow"},"a"),(0,m.kt)("mi",{parentName:"mrow"},"Q"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"P"),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("mi",{parentName:"mrow"},"Q"),(0,m.kt)("msup",{parentName:"mrow"},(0,m.kt)("mo",{parentName:"msup",stretchy:"false"},")"),(0,m.kt)("mi",{parentName:"msup"},"a"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"e(aP,Q) = e(P,aQ) = e(P,Q)^{a}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"a"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"P"),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"Q"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"P"),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"a"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"Q"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"P"),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"Q"),(0,m.kt)("span",{parentName:"span",className:"mclose"},(0,m.kt)("span",{parentName:"span",className:"mclose"},")"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.6644em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"a"))))))))))))),"."),(0,m.kt)("hr",null),(0,m.kt)("table",null,(0,m.kt)("thead",{parentName:"table"},(0,m.kt)("tr",{parentName:"thead"},(0,m.kt)("th",{parentName:"tr",align:"center"},"Alice - identity ",(0,m.kt)("span",{parentName:"th",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"I"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"D"),(0,m.kt)("mi",{parentName:"msub"},"a"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"ID_a")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07847em"}},"I"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"D"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.1514em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0278em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"a")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"}))))))))))),(0,m.kt)("th",{parentName:"tr",align:"center"},"Server"))),(0,m.kt)("tbody",{parentName:"table"},(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},"Generates random ",(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"x"),(0,m.kt)("mo",{parentName:"mrow"},"<"),(0,m.kt)("mi",{parentName:"mrow"},"q")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"x<q")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.5782em",verticalAlign:"-0.0391em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"<"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"q")))))),(0,m.kt)("td",{parentName:"tr",align:"center"})),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"A"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mi",{parentName:"mrow"},"H"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"I"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"D"),(0,m.kt)("mi",{parentName:"msub"},"a")),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"A=H(ID_a)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.08125em"}},"H"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07847em"}},"I"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"D"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.1514em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0278em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"a")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mclose"},")")))))),(0,m.kt)("td",{parentName:"tr",align:"center"})),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"U"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mi",{parentName:"mrow"},"x"),(0,m.kt)("mi",{parentName:"mrow"},"A")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"U=x{A}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"U"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"))))))),(0,m.kt)("td",{parentName:"tr",align:"center"})),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"I"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"D"),(0,m.kt)("mi",{parentName:"msub"},"a"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"ID_a")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07847em"}},"I"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"D"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.1514em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0278em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"a")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))))))),", ",(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"U"),(0,m.kt)("mover",{parentName:"mrow",accent:"true"},(0,m.kt)("mtext",{parentName:"mover"},"\xa0"),(0,m.kt)("mo",{parentName:"mover"},"\u02dc"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"U\\~~")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"U"),(0,m.kt)("span",{parentName:"span",className:"mord accent"},(0,m.kt)("span",{parentName:"span",className:"vlist-t"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.6679em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-3em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.kt)("span",{parentName:"span",className:"mspace nobreak"},"\xa0")),(0,m.kt)("span",{parentName:"span",style:{top:"-3em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.kt)("span",{parentName:"span",className:"accent-body",style:{left:"-0.25em"}},(0,m.kt)("span",{parentName:"span",className:"mord"},"\u02dc")))))))))))),(0,m.kt)("td",{parentName:"tr",align:"center"})),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"y"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mi",{parentName:"mrow"},"H"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"U")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"y=H(U")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.08125em"}},"H"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"U")))))," ","|"," ",(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"T"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"T)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"T"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")")))))),(0,m.kt)("td",{parentName:"tr",align:"center"})),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"V"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mo",{parentName:"mrow"},"\u2212"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"x"),(0,m.kt)("mo",{parentName:"mrow"},"+"),(0,m.kt)("mi",{parentName:"mrow"},"y"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,m.kt)("mrow",{parentName:"mrow"},(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mo",{parentName:"mrow"},"\u2212"),(0,m.kt)("mi",{parentName:"mrow"},"\u03b1"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,m.kt)("mi",{parentName:"mrow"},"A"),(0,m.kt)("mo",{parentName:"mrow"},"+"),(0,m.kt)("mi",{parentName:"mrow"},"\u03b1"),(0,m.kt)("mi",{parentName:"mrow"},"A"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("mo",{parentName:"mrow"},"\u2192")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"V=-(x+y){((s-\\alpha)A+\\alpha A)} \\rightarrow")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.22222em"}},"V"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},"\u2212"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mopen"},"(("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"\u2212"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.0037em"}},"\u03b1"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.0037em"}},"\u03b1"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")")),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"\u2192")))))),(0,m.kt)("td",{parentName:"tr",align:"center"})),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"A"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mi",{parentName:"mrow"},"H"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"I"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"D"),(0,m.kt)("mi",{parentName:"msub"},"a")),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"A=H(ID_a)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.08125em"}},"H"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07847em"}},"I"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"D"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.1514em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0278em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"a")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"))))))),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"g"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"V"),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("mi",{parentName:"mrow"},"Q"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"."),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"U"),(0,m.kt)("mo",{parentName:"mrow"},"+"),(0,m.kt)("mi",{parentName:"mrow"},"y"),(0,m.kt)("mi",{parentName:"mrow"},"A"),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mi",{parentName:"mrow"},"Q"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"g=e(V,Q).e(U+yA,sQ)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"g"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.22222em"}},"V"),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"Q"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"),(0,m.kt)("span",{parentName:"span",className:"mord"},"."),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"U"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"Q"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"))))))),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"center"},"if ",(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"g"),(0,m.kt)("mo",{parentName:"mrow",mathvariant:"normal"},"\u2260"),(0,m.kt)("mn",{parentName:"mrow"},"1")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"g \\ne 1")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8889em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"g"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},(0,m.kt)("span",{parentName:"span",className:"mrel"},(0,m.kt)("span",{parentName:"span",className:"mord vbox"},(0,m.kt)("span",{parentName:"span",className:"thinbox"},(0,m.kt)("span",{parentName:"span",className:"rlap"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8889em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"inner"},(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mrel"},"\ue020"))),(0,m.kt)("span",{parentName:"span",className:"fix"}))))),(0,m.kt)("span",{parentName:"span",className:"mrel"},"=")),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6444em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},"1"))))),", reject the connection")))),(0,m.kt)("figure",null,(0,m.kt)("strong",null,"Figure 1.")," M-Pin 1-Pass"),(0,m.kt)("h3",{id:"m-pin-2-pass"},"M-Pin 2-Pass"),(0,m.kt)("p",null,"As you can see below in Fig 2., M-Pin in the two pass operation operates in a challenge (from the Server) to client, who responds to challenge. This implementation obviates the any risk of Key Compromise Impersonation attack vector, at the cost of of a full roundtrip."),(0,m.kt)("hr",null),(0,m.kt)("table",null,(0,m.kt)("thead",{parentName:"table"},(0,m.kt)("tr",{parentName:"thead"},(0,m.kt)("th",{parentName:"tr",align:"center"},"Alice - identity ",(0,m.kt)("span",{parentName:"th",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"I"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"D"),(0,m.kt)("mi",{parentName:"msub"},"a"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"ID_a")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07847em"}},"I"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"D"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.1514em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0278em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"a")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"}))))))))))),(0,m.kt)("th",{parentName:"tr",align:"center"},"Server"))),(0,m.kt)("tbody",{parentName:"table"},(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},"Generates random ",(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"x"),(0,m.kt)("mo",{parentName:"mrow"},"<"),(0,m.kt)("mi",{parentName:"mrow"},"q")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"x<q")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.5782em",verticalAlign:"-0.0391em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"<"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"q")))))),(0,m.kt)("td",{parentName:"tr",align:"center"},"Generates random ",(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"y"),(0,m.kt)("mo",{parentName:"mrow"},"<"),(0,m.kt)("mi",{parentName:"mrow"},"q")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"y<q")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.7335em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"<"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"q"))))))),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"A"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mi",{parentName:"mrow"},"H"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"I"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"D"),(0,m.kt)("mi",{parentName:"msub"},"a")),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"A=H(ID_a)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.08125em"}},"H"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07847em"}},"I"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"D"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.1514em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0278em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"a")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mclose"},")")))))),(0,m.kt)("td",{parentName:"tr",align:"center"})),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"U"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mi",{parentName:"mrow"},"x"),(0,m.kt)("mi",{parentName:"mrow"},"A")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"U=x{A}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"U"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"))))))),(0,m.kt)("td",{parentName:"tr",align:"center"})),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"I"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"D"),(0,m.kt)("mi",{parentName:"msub"},"a"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"ID_a")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07847em"}},"I"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"D"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.1514em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0278em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"a")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))))))),", ",(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"U"),(0,m.kt)("mover",{parentName:"mrow",accent:"true"},(0,m.kt)("mtext",{parentName:"mover"},"\xa0"),(0,m.kt)("mo",{parentName:"mover"},"\u02dc")),(0,m.kt)("mo",{parentName:"mrow"},"\u2192")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"U\\~~ \\rightarrow")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"U"),(0,m.kt)("span",{parentName:"span",className:"mord accent"},(0,m.kt)("span",{parentName:"span",className:"vlist-t"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.6679em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-3em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.kt)("span",{parentName:"span",className:"mspace nobreak"},"\xa0")),(0,m.kt)("span",{parentName:"span",style:{top:"-3em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.kt)("span",{parentName:"span",className:"accent-body",style:{left:"-0.25em"}},(0,m.kt)("span",{parentName:"span",className:"mord"},"\u02dc"))))))),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"\u2192")))))),(0,m.kt)("td",{parentName:"tr",align:"center"})),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mo",{parentName:"mrow"},"\u2190"),(0,m.kt)("mi",{parentName:"mrow"},"y")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\leftarrow y")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.3669em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"\u2190"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"))))))),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"V"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mo",{parentName:"mrow"},"\u2212"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"x"),(0,m.kt)("mo",{parentName:"mrow"},"+"),(0,m.kt)("mi",{parentName:"mrow"},"y"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,m.kt)("mrow",{parentName:"mrow"},(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mo",{parentName:"mrow"},"\u2212"),(0,m.kt)("mi",{parentName:"mrow"},"\u03b1"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,m.kt)("mi",{parentName:"mrow"},"A"),(0,m.kt)("mo",{parentName:"mrow"},"+"),(0,m.kt)("mi",{parentName:"mrow"},"\u03b1"),(0,m.kt)("mi",{parentName:"mrow"},"A"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("mo",{parentName:"mrow"},"\u2192")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"V=-(x+y){((s-\\alpha)A+\\alpha A)} \\rightarrow")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.22222em"}},"V"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},"\u2212"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mopen"},"(("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"\u2212"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.0037em"}},"\u03b1"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.0037em"}},"\u03b1"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")")),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"\u2192")))))),(0,m.kt)("td",{parentName:"tr",align:"center"})),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"A"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mi",{parentName:"mrow"},"H"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"I"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"D"),(0,m.kt)("mi",{parentName:"msub"},"a")),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"A=H(ID_a)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.08125em"}},"H"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07847em"}},"I"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"D"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.1514em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0278em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"a")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"))))))),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"g"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"V"),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("mi",{parentName:"mrow"},"Q"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"."),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"U"),(0,m.kt)("mo",{parentName:"mrow"},"+"),(0,m.kt)("mi",{parentName:"mrow"},"y"),(0,m.kt)("mi",{parentName:"mrow"},"A"),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mi",{parentName:"mrow"},"Q"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"g=e(V,Q).e(U+yA,sQ)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"g"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.22222em"}},"V"),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"Q"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"),(0,m.kt)("span",{parentName:"span",className:"mord"},"."),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"U"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"Q"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"))))))),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"center"},"if ",(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"g"),(0,m.kt)("mo",{parentName:"mrow",mathvariant:"normal"},"\u2260"),(0,m.kt)("mn",{parentName:"mrow"},"1")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"g \\ne 1")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8889em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"g"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},(0,m.kt)("span",{parentName:"span",className:"mrel"},(0,m.kt)("span",{parentName:"span",className:"mord vbox"},(0,m.kt)("span",{parentName:"span",className:"thinbox"},(0,m.kt)("span",{parentName:"span",className:"rlap"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8889em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"inner"},(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mrel"},"\ue020"))),(0,m.kt)("span",{parentName:"span",className:"fix"}))))),(0,m.kt)("span",{parentName:"span",className:"mrel"},"=")),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6444em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},"1"))))),", reject the connection")))),(0,m.kt)("figure",null,(0,m.kt)("strong",null,"Figure 2.")," M-Pin 2-Pass"),(0,m.kt)("h3",{id:"m-pin-full"},"M-Pin FULL"),(0,m.kt)("p",null,"This more elaborate protocol not only replaces Username/Password, but replaces the functionality of digital certificates being utilised to drive key agreement for TLS or VPN protocols as well."),(0,m.kt)("p",null,"Our starting point is the M-Pin protocol as described above."),(0,m.kt)("p",null,"The idea is to run it first (to authenticate the client to the server), and then proceed to authenticate the server to the client via an authenticated key exchange, which also establishes the agreed key of 128 bits."),(0,m.kt)("p",null,"The first thing to note is that both the client and the server can already calculate a mutual authenticated encryption key!"),(0,m.kt)("p",null,"This protocol requires another general hash function ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"H"),(0,m.kt)("mi",{parentName:"msub"},"g")),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"."),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"H_g(.)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1.0361em",verticalAlign:"-0.2861em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.08125em"}},"H"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.1514em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0813em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.03588em"}},"g")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.2861em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord"},"."),(0,m.kt)("span",{parentName:"span",className:"mclose"},")")))))," which serializes, and hashes its input to a 256-bit value. Both sides can then extract a key from this value ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"K")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"K")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07153em"}},"K"))))),"."),(0,m.kt)("p",null,"It is left as a simple exercise for the reader to confirm that both client and server end up with the same key."),(0,m.kt)("p",null,"Note that since the first part of the protocol is just the original M-Pin protocol, all of its features and extensions still apply."),(0,m.kt)("hr",null),(0,m.kt)("table",null,(0,m.kt)("thead",{parentName:"table"},(0,m.kt)("tr",{parentName:"thead"},(0,m.kt)("th",{parentName:"tr",align:"center"},"Alice - identity ",(0,m.kt)("span",{parentName:"th",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"I"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"D"),(0,m.kt)("mi",{parentName:"msub"},"a"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"ID_a")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07847em"}},"I"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"D"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.1514em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0278em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"a")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"}))))))))))),(0,m.kt)("th",{parentName:"tr",align:"center"},"Server"))),(0,m.kt)("tbody",{parentName:"table"},(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},"Generates random ",(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"x"),(0,m.kt)("mo",{parentName:"mrow"},"<"),(0,m.kt)("mi",{parentName:"mrow"},"q")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"x<q")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.5782em",verticalAlign:"-0.0391em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"<"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"q")))))),(0,m.kt)("td",{parentName:"tr",align:"center"},"Generates random ",(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"y"),(0,m.kt)("mo",{parentName:"mrow"},"<"),(0,m.kt)("mi",{parentName:"mrow"},"q")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"y<q")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.7335em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"<"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"q"))))))),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"A"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mi",{parentName:"mrow"},"H"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"I"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"D"),(0,m.kt)("mi",{parentName:"msub"},"a")),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"A=H(ID_a)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.08125em"}},"H"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07847em"}},"I"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"D"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.1514em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0278em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"a")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mclose"},")")))))),(0,m.kt)("td",{parentName:"tr",align:"center"})),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"U"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mi",{parentName:"mrow"},"x"),(0,m.kt)("mi",{parentName:"mrow"},"A")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"U=x{A}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"U"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"))))))),(0,m.kt)("td",{parentName:"tr",align:"center"})),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"I"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"D"),(0,m.kt)("mi",{parentName:"msub"},"a"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"ID_a")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07847em"}},"I"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"D"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.1514em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0278em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"a")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))))))),", ",(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"U"),(0,m.kt)("mover",{parentName:"mrow",accent:"true"},(0,m.kt)("mtext",{parentName:"mover"},"\xa0"),(0,m.kt)("mo",{parentName:"mover"},"\u02dc")),(0,m.kt)("mo",{parentName:"mrow"},"\u2192")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"U\\~~ \\rightarrow")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"U"),(0,m.kt)("span",{parentName:"span",className:"mord accent"},(0,m.kt)("span",{parentName:"span",className:"vlist-t"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.6679em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-3em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.kt)("span",{parentName:"span",className:"mspace nobreak"},"\xa0")),(0,m.kt)("span",{parentName:"span",style:{top:"-3em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.kt)("span",{parentName:"span",className:"accent-body",style:{left:"-0.25em"}},(0,m.kt)("span",{parentName:"span",className:"mord"},"\u02dc"))))))),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"\u2192")))))),(0,m.kt)("td",{parentName:"tr",align:"center"})),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mo",{parentName:"mrow"},"\u2190"),(0,m.kt)("mi",{parentName:"mrow"},"y")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\leftarrow y")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.3669em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"\u2190"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"))))))),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"V"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mo",{parentName:"mrow"},"\u2212"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"x"),(0,m.kt)("mo",{parentName:"mrow"},"+"),(0,m.kt)("mi",{parentName:"mrow"},"y"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,m.kt)("mrow",{parentName:"mrow"},(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mo",{parentName:"mrow"},"\u2212"),(0,m.kt)("mi",{parentName:"mrow"},"\u03b1"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,m.kt)("mi",{parentName:"mrow"},"A"),(0,m.kt)("mo",{parentName:"mrow"},"+"),(0,m.kt)("mi",{parentName:"mrow"},"\u03b1"),(0,m.kt)("mi",{parentName:"mrow"},"A"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("mo",{parentName:"mrow"},"\u2192")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"V=-(x+y){( (s-\\alpha)A+\\alpha A)} \\rightarrow")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.22222em"}},"V"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},"\u2212"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mopen"},"(("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"\u2212"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.0037em"}},"\u03b1"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.0037em"}},"\u03b1"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")")),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"\u2192")))))),(0,m.kt)("td",{parentName:"tr",align:"center"})),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"A"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mi",{parentName:"mrow"},"H"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"I"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"D"),(0,m.kt)("mi",{parentName:"msub"},"a")),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"A=H(ID_a)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.08125em"}},"H"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07847em"}},"I"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"D"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.1514em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0278em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"a")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"))))))),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"g"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"V"),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("mi",{parentName:"mrow"},"Q"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"."),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"U"),(0,m.kt)("mo",{parentName:"mrow"},"+"),(0,m.kt)("mi",{parentName:"mrow"},"y"),(0,m.kt)("mi",{parentName:"mrow"},"A"),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mi",{parentName:"mrow"},"Q"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"g=e(V,Q).e(U+yA,sQ)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"g"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.22222em"}},"V"),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"Q"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"),(0,m.kt)("span",{parentName:"span",className:"mord"},"."),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"U"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"Q"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"))))))),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"}),(0,m.kt)("td",{parentName:"tr",align:"center"},"if ",(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"g"),(0,m.kt)("mo",{parentName:"mrow",mathvariant:"normal"},"\u2260"),(0,m.kt)("mn",{parentName:"mrow"},"1")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"g \\ne 1")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8889em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"g"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},(0,m.kt)("span",{parentName:"span",className:"mrel"},(0,m.kt)("span",{parentName:"span",className:"mord vbox"},(0,m.kt)("span",{parentName:"span",className:"thinbox"},(0,m.kt)("span",{parentName:"span",className:"rlap"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8889em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"inner"},(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mrel"},"\ue020"))),(0,m.kt)("span",{parentName:"span",className:"fix"}))))),(0,m.kt)("span",{parentName:"span",className:"mrel"},"=")),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6444em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},"1"))))),", reject the connection")),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"R"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mi",{parentName:"mrow"},"r"),(0,m.kt)("mi",{parentName:"mrow"},"A"),(0,m.kt)("mo",{parentName:"mrow"},"\u2192")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"R=r{A} \\rightarrow")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.00773em"}},"R"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"r"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"A")),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"\u2192")))))),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mo",{parentName:"mrow"},"\u2190"),(0,m.kt)("mi",{parentName:"mrow"},"W"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mi",{parentName:"mrow"},"w"),(0,m.kt)("mi",{parentName:"mrow"},"A")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\leftarrow W=w{A}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.3669em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"\u2190"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"W"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02691em"}},"w"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"A")))))))),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"h"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mi",{parentName:"mrow"},"H"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"A"),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("mi",{parentName:"mrow"},"U"),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("mi",{parentName:"mrow"},"y"),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("mi",{parentName:"mrow"},"V"),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("mi",{parentName:"mrow"},"R"),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("mi",{parentName:"mrow"},"W"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"h=H(A,U,y,V,R,W)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"h"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.08125em"}},"H"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"U"),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.22222em"}},"V"),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.00773em"}},"R"),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"W"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")")))))),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"h"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mi",{parentName:"mrow"},"H"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"A"),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("mi",{parentName:"mrow"},"U"),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("mi",{parentName:"mrow"},"y"),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("mi",{parentName:"mrow"},"V"),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("mi",{parentName:"mrow"},"R"),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("mi",{parentName:"mrow"},"W"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"h=H(A,U,y,V,R,W)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"h"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.08125em"}},"H"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"U"),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y"),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.22222em"}},"V"),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.00773em"}},"R"),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"W"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"))))))),(0,m.kt)("tr",{parentName:"tbody"},(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"K"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"H"),(0,m.kt)("mi",{parentName:"msub"},"g")),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"g"),(0,m.kt)("mn",{parentName:"msub"},"1")),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"."),(0,m.kt)("msup",{parentName:"mrow"},(0,m.kt)("msub",{parentName:"msup"},(0,m.kt)("mi",{parentName:"msub"},"g"),(0,m.kt)("mn",{parentName:"msub"},"2")),(0,m.kt)("mi",{parentName:"msup"},"\u03b1")),(0,m.kt)("msup",{parentName:"mrow"},(0,m.kt)("mo",{parentName:"msup",stretchy:"false"},")"),(0,m.kt)("mrow",{parentName:"msup"},(0,m.kt)("mi",{parentName:"mrow"},"r"),(0,m.kt)("mo",{parentName:"mrow"},"+"),(0,m.kt)("mi",{parentName:"mrow"},"h"))),(0,m.kt)("mspace",{parentName:"mrow",linebreak:"newline"})),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"K=H_g( (g_1.{g_2}^\\alpha)^{r+h} \\\\")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07153em"}},"K"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1.1352em",verticalAlign:"-0.2861em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.08125em"}},"H"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.1514em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0813em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.03588em"}},"g")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.2861em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mopen"},"(("),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"g"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0359em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"1")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mord"},"."),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"g"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0359em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"2")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"}))))))),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.6644em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.0037em"}},"\u03b1")))))))),(0,m.kt)("span",{parentName:"span",className:"mclose"},(0,m.kt)("span",{parentName:"span",className:"mclose"},")"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.8491em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.02778em"}},"r"),(0,m.kt)("span",{parentName:"span",className:"mbin mtight"},"+"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"h")))))))))),(0,m.kt)("span",{parentName:"span",className:"mspace newline"}))))," ","|"," ",(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"x"),(0,m.kt)("mi",{parentName:"mrow"},"W"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"x{W})")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"x"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"W")),(0,m.kt)("span",{parentName:"span",className:"mclose"},")")))))),(0,m.kt)("td",{parentName:"tr",align:"center"},(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"K"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"H"),(0,m.kt)("mi",{parentName:"msub"},"g")),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"R"),(0,m.kt)("mo",{parentName:"mrow"},"+"),(0,m.kt)("mi",{parentName:"mrow"},"h"),(0,m.kt)("mi",{parentName:"mrow"},"A"),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mi",{parentName:"mrow"},"Q"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,m.kt)("mspace",{parentName:"mrow",linebreak:"newline"})),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"K=H_g(e(R+hA,sQ) \\\\")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07153em"}},"K"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1.0361em",verticalAlign:"-0.2861em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.08125em"}},"H"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.1514em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0813em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.03588em"}},"g")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.2861em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.00773em"}},"R"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"h"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"Q"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")")),(0,m.kt)("span",{parentName:"span",className:"mspace newline"}))))," ","|"," ",(0,m.kt)("span",{parentName:"td",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"w"),(0,m.kt)("mi",{parentName:"mrow"},"U"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"w{U})")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02691em"}},"w"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.10903em"}},"U")),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"))))))))),(0,m.kt)("figure",null,(0,m.kt)("strong",null,"Figure 3.")," M-Pin FULL"),(0,m.kt)("hr",null),(0,m.kt)("p",null,"Note that the transmission of ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"R")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"R")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.00773em"}},"R")))))," from the client to the server can be done at the same time as ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"V")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"V")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.22222em"}},"V")))))," is transmitted, and the transmission of ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"W")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"W")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"W")))))," from the server to the client can be done at the same time as  ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"y")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"y")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"y")))))," is transmitted, to avoid introducing any extra flows into the protocol."),(0,m.kt)("h3",{id:"chow-choo-protocol"},"Chow-Choo Protocol"),(0,m.kt)("p",null,"As initially proposed, the Chow-Choo Protocol was based on a type-1 pairing. Note that in the Milagro framework, the Chow-Choo Protocol is made to work in a Type-3 setting."),(0,m.kt)("p",null,"Pairings are usually written as functions of the form ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"g"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"A"),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("mi",{parentName:"mrow"},"B"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"g=e(A,B)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"g"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05017em"}},"B"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"))))),", where ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"A"),(0,m.kt)("mo",{parentName:"mrow"},"\u2208"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"G"),(0,m.kt)("mn",{parentName:"msub"},"1"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"A \\in G_1")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.7224em",verticalAlign:"-0.0391em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"\u2208"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"G"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"1")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))))))),", ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"g"),(0,m.kt)("mo",{parentName:"mrow"},"\u2208"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"G"),(0,m.kt)("mi",{parentName:"msub"},"T"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"g \\in G_T")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.7335em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"g"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"\u2208"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"G"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3283em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.13889em"}},"T")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))))))),", and for a Type-1 pairing ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"B"),(0,m.kt)("mo",{parentName:"mrow"},"\u2208"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"G"),(0,m.kt)("mn",{parentName:"msub"},"1"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"B \\in G_1")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.7224em",verticalAlign:"-0.0391em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05017em"}},"B"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"\u2208"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"G"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"1")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"}))))))))))," and for Type-3 ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"B"),(0,m.kt)("mo",{parentName:"mrow"},"\u2208"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"G"),(0,m.kt)("mn",{parentName:"msub"},"2"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"B \\in G_2")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.7224em",verticalAlign:"-0.0391em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05017em"}},"B"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"\u2208"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"G"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"2")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))))))),"."),(0,m.kt)("p",null,"Consider now an application of this protocol to an imagined Internet of Things (IoT) setting."),(0,m.kt)("p",null,"Each 'Thing' is issued with a serial number and its own Chow-Choo key (which can double as an M-Pin Key) based on that serial number as an identity."),(0,m.kt)("p",null,"These keys may be embedded at the time of manufacture, by the manufacturer acting as a naturally trusted authority."),(0,m.kt)("p",null,"When a Thing needs to communicate with another Thing, an action which requires knowing only the identity of the other, both parties can activate the Chow-Choo Protocol to calculate the same key to encrypt their communication."),(0,m.kt)("p",null,"For both sending and receiving, Alice is issued with ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"A"),(0,m.kt)("mn",{parentName:"msub"},"1"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"sA_1")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"1")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"}))))))))))," and ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"A"),(0,m.kt)("mn",{parentName:"msub"},"2"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"sA_2")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"2")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))))))),", where ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"A"),(0,m.kt)("mn",{parentName:"msub"},"1")),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"H"),(0,m.kt)("mn",{parentName:"msub"},"1"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"A_1=H_1")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"1")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.08125em"}},"H"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0813em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"1")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"}))))))))))," and ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"A"),(0,m.kt)("mn",{parentName:"msub"},"2")),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"H"),(0,m.kt)("mn",{parentName:"msub"},"2"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"A_2=H_2")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"2")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.08125em"}},"H"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0813em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"2")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"}))))))))))," both in the ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"I"),(0,m.kt)("mi",{parentName:"mrow"},"D"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mtext",{parentName:"mrow"},"Alice")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"ID = \\text{Alice}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07847em"}},"I"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"D"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord text"},(0,m.kt)("span",{parentName:"span",className:"mord"},"Alice")))))),"."),(0,m.kt)("p",null,"Similarly Bob is issued with ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"B"),(0,m.kt)("mn",{parentName:"msub"},"1"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"sB_1")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05017em"}},"B"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0502em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"1")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"}))))))))))," and ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"B"),(0,m.kt)("mn",{parentName:"msub"},"2"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"sB_2")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05017em"}},"B"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0502em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"2")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))))))),". Now if Alice initiates and Bob responds, Alice calculates the key as ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"A"),(0,m.kt)("mn",{parentName:"msub"},"1")),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"B"),(0,m.kt)("mn",{parentName:"msub"},"2")),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"e(sA_1,B_2)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"1")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05017em"}},"B"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0502em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"2")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mclose"},")")))))," and Bob can calculate the same key as ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"A"),(0,m.kt)("mn",{parentName:"msub"},"1")),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"B"),(0,m.kt)("mn",{parentName:"msub"},"2")),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"e(A_1,sB_2)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"A"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"1")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05017em"}},"B"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0502em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"2")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"))))),", where by convention the initiator uses their ",(0,m.kt)("em",{parentName:"p"},"sender")," key and the responder uses their ",(0,m.kt)("em",{parentName:"p"},"receiver")," key."),(0,m.kt)("p",null,"One thing we can exploit -- in any communication context there is an initiator and a responder, or a ",(0,m.kt)("em",{parentName:"p"},"sender")," and ",(0,m.kt)("em",{parentName:"p"},"receiver"),", if you will."),(0,m.kt)("p",null,"In the above example, Alice and Bob both were issued ",(0,m.kt)("em",{parentName:"p"},"sender")," and ",(0,m.kt)("em",{parentName:"p"},"receiver")," keys respectively, as this describes where they can appear in the pairing."),(0,m.kt)("p",null,"An obvious advantage is to issue each Thing with two keys, one in ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"G"),(0,m.kt)("mn",{parentName:"msub"},"1"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"G_1")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"G"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"1")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"}))))))))))," and the other in ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"G"),(0,m.kt)("mn",{parentName:"msub"},"2"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"G_2")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"G"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"2")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))))))),", ",(0,m.kt)("strong",{parentName:"p"},"if")," the Thing is approved to send and receive."),(0,m.kt)("p",null,"However, the capability exists to cryptographically bound Things to only receiving information, or only sending information, based upon whether or not a Thing has been issued a sender and / or a receiver key."),(0,m.kt)("p",null,"This capability is exploited in the Milagro framework to enable peer to peer authenticated key agreement."),(0,m.kt)("hr",null),(0,m.kt)("p",null,(0,m.kt)("img",{alt:"Alt text",src:t(6349).Z,width:"1362",height:"1056"})),(0,m.kt)("hr",null),(0,m.kt)("p",null,(0,m.kt)("strong",{parentName:"p"},"Notes on Chow-Choo Protocol:")),(0,m.kt)("ul",null,(0,m.kt)("li",{parentName:"ul"},(0,m.kt)("span",{parentName:"li",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"G"),(0,m.kt)("mn",{parentName:"msub"},"1"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"G_1")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"G"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"1")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))))))),": a ",(0,m.kt)("span",{parentName:"li",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"r")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"r")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"r"))))),"-order cyclic subgroup of ",(0,m.kt)("span",{parentName:"li",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"E"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"F"),(0,m.kt)("mi",{parentName:"msub"},"p")),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"E(F_p)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1.0361em",verticalAlign:"-0.2861em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05764em"}},"E"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"F"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.1514em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"p")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.2861em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"))))),"."),(0,m.kt)("li",{parentName:"ul"},(0,m.kt)("span",{parentName:"li",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"G"),(0,m.kt)("mn",{parentName:"msub"},"2"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"G_2")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"G"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"2")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))))))),": a subgroup of ",(0,m.kt)("span",{parentName:"li",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"E"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"F"),(0,m.kt)("msup",{parentName:"msub"},(0,m.kt)("mi",{parentName:"msup"},"p"),(0,m.kt)("mi",{parentName:"msup"},"k"))),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"E(F_{p^k})")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1.0887em",verticalAlign:"-0.3387em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05764em"}},"E"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"F"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3448em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.4974em",marginLeft:"-0.1389em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"p"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.782em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.786em",marginRight:"0.0714em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.5em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size3 size1 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.03148em"}},"k")))))))))))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3387em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"))))),", where ",(0,m.kt)("span",{parentName:"li",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"k")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"k")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03148em"}},"k")))))," is the embedding degree of the Curve."),(0,m.kt)("li",{parentName:"ul"},(0,m.kt)("span",{parentName:"li",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"H"),(0,m.kt)("mn",{parentName:"mrow"},"1")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"H1")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.08125em"}},"H"),(0,m.kt)("span",{parentName:"span",className:"mord"},"1"))))),": Maps string value to a point on the curve in ",(0,m.kt)("span",{parentName:"li",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"G"),(0,m.kt)("mn",{parentName:"msub"},"1"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"G_1")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"G"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"1")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))))))),"."),(0,m.kt)("li",{parentName:"ul"},(0,m.kt)("span",{parentName:"li",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"H"),(0,m.kt)("mn",{parentName:"mrow"},"2")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"H2")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.08125em"}},"H"),(0,m.kt)("span",{parentName:"span",className:"mord"},"2"))))),": Maps string value to a point on the curve in ",(0,m.kt)("span",{parentName:"li",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"G"),(0,m.kt)("mn",{parentName:"msub"},"2"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"G_2")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"G"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3011em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"0em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"2")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))))))),"."),(0,m.kt)("li",{parentName:"ul"},(0,m.kt)("span",{parentName:"li",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"H"),(0,m.kt)("mi",{parentName:"mrow"},"q")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"Hq")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8778em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.08125em"}},"H"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"q"))))),": Hashes inputs to an integer modulo the curve order ",(0,m.kt)("span",{parentName:"li",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"q")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"q")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"q"))))),".When run in the simple SIDH "),(0,m.kt)("li",{parentName:"ul"},"H(): Hash function."),(0,m.kt)("li",{parentName:"ul"},(0,m.kt)("span",{parentName:"li",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"\u2223"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"\u2223")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"||")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},"\u2223\u2223"))))),": denotes the concatenation of messages.")),(0,m.kt)("hr",null),(0,m.kt)("h3",{id:"secret-revocation"},"Secret Revocation"),(0,m.kt)("p",null,"We introduce Time Permits to handle the revocation issue. Normally in Identity-Based Encryption the problem of client revocation is solved by date-stamping identities so that the private key issued for an identity becomes useless once the time period expires. Now a new private key must be issued, and we will simply not issue one to a revoked client."),(0,m.kt)("p",null,"Milagro achieves a much more immediate revocation capability through the use of Time Permits. The D-TA that is controlled by the application owner is envisioned to be the controlling D-TA to issue Time Permits at the point where a client needs to authenticate to a server, or create an authenticated key agreement between client and server or peer to peer."),(0,m.kt)("p",null,'The idea is that the server includes an explicitly described time slot in its construction of Alice\'s hashed identity. Unless Alice has a corresponding "Time permit" for the same time slot, she cannot complete the protocol.'),(0,m.kt)("p",null,"In the protocol above we instead calculate ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"H"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"I"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"D"),(0,m.kt)("mi",{parentName:"msub"},"a")),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,m.kt)("mo",{parentName:"mrow"},"+"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"H"),(0,m.kt)("mi",{parentName:"msub"},"T")),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"T"),(0,m.kt)("mi",{parentName:"msub"},"i")),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"\u2223"),(0,m.kt)("mi",{parentName:"mrow"},"I"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"D"),(0,m.kt)("mi",{parentName:"msub"},"a")),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"H(ID_a) + H_T(T_i|ID_a)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.08125em"}},"H"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07847em"}},"I"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"D"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.1514em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0278em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"a")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"+"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.08125em"}},"H"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3283em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0813em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.13889em"}},"T")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"T"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3117em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"i")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mord"},"\u2223"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07847em"}},"I"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"D"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.1514em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0278em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"a")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mclose"},")")))))," on both sides of the protocol where ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"T"),(0,m.kt)("mi",{parentName:"msub"},"i"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"T_i")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8333em",verticalAlign:"-0.15em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"T"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3117em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"i")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"}))))))))))," is a textual description of the ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"i")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"i")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6595em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"i"))))),"-th time slot and ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"H"),(0,m.kt)("mi",{parentName:"msub"},"T")),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"."),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"H_T(.)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.08125em"}},"H"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3283em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0813em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.13889em"}},"T")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord"},"."),(0,m.kt)("span",{parentName:"span",className:"mclose"},")")))))," is a hash function distinct from ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"H"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"."),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"H(.)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.08125em"}},"H"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord"},"."),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"))))),"."),(0,m.kt)("p",null,"For the protocol to work correctly Alice must be issued by the Trusted Authority with a permit ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"."),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"H"),(0,m.kt)("mi",{parentName:"msub"},"T")),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"T"),(0,m.kt)("mi",{parentName:"msub"},"i")),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"\u2223"),(0,m.kt)("mi",{parentName:"mrow"},"I"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"D"),(0,m.kt)("mi",{parentName:"msub"},"a")),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"s.H_T(T_i|ID_a)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"mord"},"."),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.08125em"}},"H"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3283em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0813em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.13889em"}},"T")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.13889em"}},"T"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3117em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.1389em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"i")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mord"},"\u2223"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07847em"}},"I"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"D"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.1514em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0278em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"a")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mclose"},")")))))," which gets added to her combined PIN-plus-token secret ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"."),(0,m.kt)("mi",{parentName:"mrow"},"H"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"I"),(0,m.kt)("msub",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msub"},"D"),(0,m.kt)("mi",{parentName:"msub"},"a")),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"s.H(ID_a)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"mord"},"."),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.08125em"}},"H"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07847em"}},"I"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.02778em"}},"D"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.1514em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.55em",marginLeft:"-0.0278em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"a")))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.15em"}},(0,m.kt)("span",{parentName:"span"})))))),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"))))),"."),(0,m.kt)("p",null,"Observe that the permit is of no use to any other party, and hence can be issued publicly, uploaded to a public cloud data store (AWS S3), or delivered via the server directly."),(0,m.kt)("p",null,"A proof of security for this idea in the context of Boneh and Franklin IBE can be found in Tseng",(0,m.kt)("sup",{parentName:"p",id:"fnref-ninth"},(0,m.kt)("a",{parentName:"sup",href:"#fn-ninth",className:"footnote-ref"},"ninth"))," et al."),(0,m.kt)("hr",null),(0,m.kt)("h3",{id:"bls-subgroup-multi-signatures"},"BLS Subgroup Multi-Signatures"),(0,m.kt)("p",null,'Dan Boneh, Ben Lynn and Hovav Schacham introduced their paper entitled "Short Signatures from the Weil Pairing" in 2001',(0,m.kt)("sup",{parentName:"p",id:"fnref-fourth"},(0,m.kt)("a",{parentName:"sup",href:"#fn-fourth",className:"footnote-ref"},"fourth")),". The paper described a short signature scheme based on the computational Diffie-Hellman assumption on certain elliptic and hyper-elliptic curves. "),(0,m.kt)("p",null,"In a simple instantiation, given a secret key ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mi",{parentName:"mrow"},"k")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"sk")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03148em"}},"k"))))),", a public key ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"p"),(0,m.kt)("mi",{parentName:"mrow"},"k"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("msup",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msup"},"g"),(0,m.kt)("mrow",{parentName:"msup"},(0,m.kt)("mi",{parentName:"mrow"},"S"),(0,m.kt)("mi",{parentName:"mrow"},"k")))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"p k=g^{S k}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8889em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"p"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03148em"}},"k"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1.0435em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"g"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.8491em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.05764em"}},"S"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.03148em"}},"k"))))))))))))),", a message ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"m")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"m")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"m"))))),", a hashing-into-the-curve function ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"H")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"H")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.08125em"}},"H"))))),", and a bilinear pairing ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"e")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"e")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"))))),":"),(0,m.kt)("ul",null,(0,m.kt)("li",{parentName:"ul"},"Key Generation: ",(0,m.kt)("span",{parentName:"li",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mi",{parentName:"mrow"},"k")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"sk")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03148em"}},"k")))))," is a random integer over the field, ",(0,m.kt)("span",{parentName:"li",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"p"),(0,m.kt)("mi",{parentName:"mrow"},"k"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("msup",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msup"},"g"),(0,m.kt)("mrow",{parentName:"msup"},(0,m.kt)("mi",{parentName:"mrow"},"S"),(0,m.kt)("mi",{parentName:"mrow"},"k")))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"p k=g^{S k}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8889em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"p"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03148em"}},"k"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1.0435em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"g"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.8491em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.05764em"}},"S"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.03148em"}},"k")))))))))))))),(0,m.kt)("li",{parentName:"ul"},"Signature: ",(0,m.kt)("span",{parentName:"li",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"S"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mi",{parentName:"mrow"},"H"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"m"),(0,m.kt)("msup",{parentName:"mrow"},(0,m.kt)("mo",{parentName:"msup",stretchy:"false"},")"),(0,m.kt)("mrow",{parentName:"msup"},(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mi",{parentName:"mrow"},"k")))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"S=H(m)^{s k}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05764em"}},"S"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1.0991em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.08125em"}},"H"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"m"),(0,m.kt)("span",{parentName:"span",className:"mclose"},(0,m.kt)("span",{parentName:"span",className:"mclose"},")"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.8491em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"s"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.03148em"}},"k")))))))))))))),(0,m.kt)("li",{parentName:"ul"},"Verify: ",(0,m.kt)("span",{parentName:"li",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"H"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"m"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("mi",{parentName:"mrow"},"p"),(0,m.kt)("mi",{parentName:"mrow"},"k"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"S"),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("mi",{parentName:"mrow"},"g"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"e(H(m), p k)=e(S, g)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.08125em"}},"H"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"m"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"p"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03148em"}},"k"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05764em"}},"S"),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"g"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"))))))),(0,m.kt)("p",null,"Biliniarity is on display as the signature "),(0,m.kt)("div",{className:"math math-display"},(0,m.kt)("span",{parentName:"div",className:"katex-display"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML",display:"block"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mtable",{parentName:"semantics",rowspacing:"0.16em",columnalign:"center",columnspacing:"1em"},(0,m.kt)("mtr",{parentName:"mtable"},(0,m.kt)("mtd",{parentName:"mtr"},(0,m.kt)("mstyle",{parentName:"mtd",scriptlevel:"0",displaystyle:"false"},(0,m.kt)("mrow",{parentName:"mstyle"},(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"H"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"m"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("mi",{parentName:"mrow"},"p"),(0,m.kt)("mi",{parentName:"mrow"},"k"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mrow",{parentName:"mrow"},(0,m.kt)("mo",{parentName:"mrow",fence:"true"},"("),(0,m.kt)("mi",{parentName:"mrow"},"H"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"m"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("msup",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msup"},"g"),(0,m.kt)("mrow",{parentName:"msup"},(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mi",{parentName:"mrow"},"k"))),(0,m.kt)("mo",{parentName:"mrow",fence:"true"},")")),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"H"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"m"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")"),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("mi",{parentName:"mrow"},"g"),(0,m.kt)("msup",{parentName:"mrow"},(0,m.kt)("mo",{parentName:"msup",stretchy:"false"},")"),(0,m.kt)("mrow",{parentName:"msup"},(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mi",{parentName:"mrow"},"k"))),(0,m.kt)("mo",{parentName:"mrow"},"="))))),(0,m.kt)("mtr",{parentName:"mtable"},(0,m.kt)("mtd",{parentName:"mtr"},(0,m.kt)("mstyle",{parentName:"mtd",scriptlevel:"0",displaystyle:"false"},(0,m.kt)("mrow",{parentName:"mstyle"},(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mrow",{parentName:"mrow"},(0,m.kt)("mo",{parentName:"mrow",fence:"true"},"("),(0,m.kt)("mi",{parentName:"mrow"},"H"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"m"),(0,m.kt)("msup",{parentName:"mrow"},(0,m.kt)("mo",{parentName:"msup",stretchy:"false"},")"),(0,m.kt)("mrow",{parentName:"msup"},(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mi",{parentName:"mrow"},"k"))),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("mi",{parentName:"mrow"},"g"),(0,m.kt)("mo",{parentName:"mrow",fence:"true"},")")),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("mi",{parentName:"mrow"},"e"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"S"),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("mi",{parentName:"mrow"},"g"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")))))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\begin{array}{c}{e(H(m), p k)=e\\left(H(m), g^{s k}\\right)=e(H(m), g)^{s k}=} \\\\ {=e\\left(H(m)^{s k}, g\\right)=e(S, g)}\\end{array}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"2.42em",verticalAlign:"-0.96em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mtable"},(0,m.kt)("span",{parentName:"span",className:"arraycolsep",style:{width:"0.5em"}}),(0,m.kt)("span",{parentName:"span",className:"col-align-c"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"1.46em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-3.61em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.08125em"}},"H"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"m"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"p"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03148em"}},"k"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"minner"},(0,m.kt)("span",{parentName:"span",className:"mopen delimcenter",style:{top:"0em"}},(0,m.kt)("span",{parentName:"span",className:"delimsizing size1"},"(")),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.08125em"}},"H"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"m"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"g"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.8491em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"s"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.03148em"}},"k"))))))))),(0,m.kt)("span",{parentName:"span",className:"mclose delimcenter",style:{top:"0em"}},(0,m.kt)("span",{parentName:"span",className:"delimsizing size1"},")"))),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.08125em"}},"H"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"m"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"g"),(0,m.kt)("span",{parentName:"span",className:"mclose"},(0,m.kt)("span",{parentName:"span",className:"mclose"},")"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.8491em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"s"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.03148em"}},"k"))))))))),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"=")))),(0,m.kt)("span",{parentName:"span",style:{top:"-2.4em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"3em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"minner"},(0,m.kt)("span",{parentName:"span",className:"mopen delimcenter",style:{top:"0em"}},(0,m.kt)("span",{parentName:"span",className:"delimsizing size1"},"(")),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.08125em"}},"H"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"m"),(0,m.kt)("span",{parentName:"span",className:"mclose"},(0,m.kt)("span",{parentName:"span",className:"mclose"},")"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.8491em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"s"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight",style:{marginRight:"0.03148em"}},"k"))))))))),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"g"),(0,m.kt)("span",{parentName:"span",className:"mclose delimcenter",style:{top:"0em"}},(0,m.kt)("span",{parentName:"span",className:"delimsizing size1"},")"))),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"e"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05764em"}},"S"),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03588em"}},"g"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"))))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.96em"}},(0,m.kt)("span",{parentName:"span"}))))),(0,m.kt)("span",{parentName:"span",className:"arraycolsep",style:{width:"0.5em"}})))))))),(0,m.kt)("p",null,"but is also unique and deterministic, something missing from ECDSA. "),(0,m.kt)("p",null,"In June of 2018 Dan Boneh, Manu Drijvers and Gregory Neven released research that constructs the first practical, short accountable-subgroup multi-signature (ASM) scheme based on BLS signatures",(0,m.kt)("sup",{parentName:"p",id:"fnref-sixth"},(0,m.kt)("a",{parentName:"sup",href:"#fn-sixth",className:"footnote-ref"},"sixth")),"."),(0,m.kt)("p",null,"An ASM scheme enables any subset ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"S")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"S")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05764em"}},"S")))))," of a set of ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"n")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"n")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"n")))))," parties to sign a message ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"m")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"m")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"m")))))," so that a valid signature discloses which subset generated the signature (hence the subset ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"S")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"S")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05764em"}},"S")))))," is accountable for signing ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"m")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"m")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"m"))))),")."),(0,m.kt)("p",null,"In addition to the ASM scheme, Milagro exploits a unique property of BLS signatures: Signing Keys can be split using Shamir's Secret Sharing",(0,m.kt)("sup",{parentName:"p",id:"fnref-seventh"},(0,m.kt)("a",{parentName:"sup",href:"#fn-seventh",className:"footnote-ref"},"seventh"))," in which the 'shares' of the keys, when distributed to signers, themselves become signing keys. By using a 'key splitter' and 'signature aggregator' role who also performs the Shamir Secret Sharing (SSS) dealer function, several benefits emerge."),(0,m.kt)("p",null,"Thresholds can be set on the distribution of key shares just as in a normal SSS routine. So once the shares of the original signing key are distributed, the original signing key can be securely deleted, and is never re-created again. Instead, signatures derived from the shares of the original signing key are created. Again, the properties of BLS enable these shares of signature keys to be themselves used a signature keys. The object of the exercise is for the signature aggregator, who is collecting the signatures created from these shares, to complete the threshold and achieve the signature that the original signature would have created, which can be validated by its original public key component."),(0,m.kt)("p",null,"In other words, if the aggregator takes m-of-n of these signature shares, and perform the same polynomial interpolation as one would usually do with the secret shares, you\u2019ll recover a complete signature which is identical to what would have been created if the original complete private key would have been used."),(0,m.kt)("p",null,"In this context, signing is a single round protocol and is non-interactive."),(0,m.kt)("hr",null),(0,m.kt)("h3",{id:"supersingular-isogeny-key-encapsulation-sike"},"Supersingular Isogeny Key Encapsulation (SIKE)"),(0,m.kt)("p",null,"A key encapsulation mechanism (KEM) is a set of three algorithms."),(0,m.kt)("ul",null,(0,m.kt)("li",{parentName:"ul"},"key generation (KeyGen)"),(0,m.kt)("li",{parentName:"ul"},"encapsulation (Encaps)"),(0,m.kt)("li",{parentName:"ul"},"decapsulation (Decaps)")),(0,m.kt)("p",null,"and a defined key space, where"),(0,m.kt)("ul",null,(0,m.kt)("li",{parentName:"ul"},"KeyGen(): returns a public and a secret key ",(0,m.kt)("span",{parentName:"li",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"p"),(0,m.kt)("mi",{parentName:"mrow"},"k"),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mi",{parentName:"mrow"},"k"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"(pk, sk)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"p"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03148em"}},"k"),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03148em"}},"k"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"))))),"."),(0,m.kt)("li",{parentName:"ul"},"Encaps",(0,m.kt)("span",{parentName:"li",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"p"),(0,m.kt)("mi",{parentName:"mrow"},"k"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"(pk)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"p"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03148em"}},"k"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"))))),": takes pk as input and outputs ciphertext ",(0,m.kt)("span",{parentName:"li",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"c")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"c")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"c")))))," and a key ",(0,m.kt)("span",{parentName:"li",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"K")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"K")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07153em"}},"K")))))," from the key space."),(0,m.kt)("li",{parentName:"ul"},"Decaps",(0,m.kt)("span",{parentName:"li",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"("),(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mi",{parentName:"mrow"},"k"),(0,m.kt)("mo",{parentName:"mrow",separator:"true"},","),(0,m.kt)("mi",{parentName:"mrow"},"c"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},")")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"(sk, c)")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mopen"},"("),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03148em"}},"k"),(0,m.kt)("span",{parentName:"span",className:"mpunct"},","),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.1667em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"c"),(0,m.kt)("span",{parentName:"span",className:"mclose"},")"))))),": takes ",(0,m.kt)("span",{parentName:"li",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"s"),(0,m.kt)("mi",{parentName:"mrow"},"k")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"sk")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"s"),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.03148em"}},"k")))))," and ",(0,m.kt)("span",{parentName:"li",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"c")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"c")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.4306em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"c")))))," as input, and returns a key ",(0,m.kt)("span",{parentName:"li",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"K")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"K")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07153em"}},"K")))))," or ERROR. ",(0,m.kt)("span",{parentName:"li",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"K")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"K")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.07153em"}},"K")))))," is called the session key.")),(0,m.kt)("p",null,"SIKE uses Hofheinz transformation on SIDH to achieve CCA security. Let ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"p"),(0,m.kt)("mo",{parentName:"mrow"},"="),(0,m.kt)("msup",{parentName:"mrow"},(0,m.kt)("mn",{parentName:"msup"},"2"),(0,m.kt)("msub",{parentName:"msup"},(0,m.kt)("mi",{parentName:"msub"},"e"),(0,m.kt)("mi",{parentName:"msub"},"A"))),(0,m.kt)("msup",{parentName:"mrow"},(0,m.kt)("mn",{parentName:"msup"},"3"),(0,m.kt)("msub",{parentName:"msup"},(0,m.kt)("mi",{parentName:"msub"},"e"),(0,m.kt)("mn",{parentName:"msub"},"3"))),(0,m.kt)("mo",{parentName:"mrow"},"\u2212"),(0,m.kt)("mn",{parentName:"mrow"},"1")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"p=2^{e_{A}} 3^{e_{3}}-1")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"p"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"="),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.7477em",verticalAlign:"-0.0833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord"},"2"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.6644em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"e"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3448em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.3567em",marginLeft:"0em",marginRight:"0.0714em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.5em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size3 size1 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"A"))))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.1433em"}},(0,m.kt)("span",{parentName:"span"})))))))))))))),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord"},"3"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.6644em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal mtight"},"e"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t vlist-t2"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.3173em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-2.357em",marginLeft:"0em",marginRight:"0.0714em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.5em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size3 size1 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"3"))))),(0,m.kt)("span",{parentName:"span",className:"vlist-s"},"\u200b")),(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.143em"}},(0,m.kt)("span",{parentName:"span"})))))))))))))),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}}),(0,m.kt)("span",{parentName:"span",className:"mbin"},"\u2212"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2222em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6444em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},"1"))))),", and let ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"E")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"E")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05764em"}},"E")))))," be a supersingular elliptic curve defined over a field of characteristic ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"p")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"p")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.625em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"p"))))),". ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"E")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"E")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05764em"}},"E")))))," can also be defined over ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow",mathvariant:"double-struck"},"F"),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"_"),(0,m.kt)("msup",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msup"},"p"),(0,m.kt)("mn",{parentName:"msup"},"2"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\mathbb{F}\\_{p^{2}}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1.1241em",verticalAlign:"-0.31em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathbb"},"F"),(0,m.kt)("span",{parentName:"span",className:"mord",style:{marginRight:"0.02778em"}},"_"),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"p"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.8141em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"2"))))))))))))))," up to its isomorphism. An isogeny ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"\u03d5"),(0,m.kt)("mo",{parentName:"mrow"},":"),(0,m.kt)("mi",{parentName:"mrow"},"E"),(0,m.kt)("mo",{parentName:"mrow"},"\u2192"),(0,m.kt)("msup",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msup"},"E"),(0,m.kt)("mo",{parentName:"msup",mathvariant:"normal",lspace:"0em",rspace:"0em"},"\u2032"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\phi : E \\rightarrow E^{\\prime}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.8889em",verticalAlign:"-0.1944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"\u03d5"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},":"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05764em"}},"E"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}}),(0,m.kt)("span",{parentName:"span",className:"mrel"},"\u2192"),(0,m.kt)("span",{parentName:"span",className:"mspace",style:{marginRight:"0.2778em"}})),(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.7519em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05764em"}},"E"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.7519em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"\u2032")))))))))))))," is a non-constant map from ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"E")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"E")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05764em"}},"E")))))," to ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("msup",{parentName:"mrow"},(0,m.kt)("mi",{parentName:"msup"},"E"),(0,m.kt)("mo",{parentName:"msup",mathvariant:"normal",lspace:"0em",rspace:"0em"},"\u2032"))),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"E^{\\prime}")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.7519em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05764em"}},"E"),(0,m.kt)("span",{parentName:"span",className:"msupsub"},(0,m.kt)("span",{parentName:"span",className:"vlist-t"},(0,m.kt)("span",{parentName:"span",className:"vlist-r"},(0,m.kt)("span",{parentName:"span",className:"vlist",style:{height:"0.7519em"}},(0,m.kt)("span",{parentName:"span",style:{top:"-3.063em",marginRight:"0.05em"}},(0,m.kt)("span",{parentName:"span",className:"pstrut",style:{height:"2.7em"}}),(0,m.kt)("span",{parentName:"span",className:"sizing reset-size6 size3 mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},(0,m.kt)("span",{parentName:"span",className:"mord mtight"},"\u2032")))))))))))))," which translates the identity into the identity. "),(0,m.kt)("p",null,"An isogeny map is defined by its degree and kernel. The degree of an isogeny is its degree as morphism. An isogeny with degree ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"\u2113")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\ell")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},"\u2113")))))," map is called ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"\u2113")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\ell")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},"\u2113"))))),"-isogeny. Let ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"G")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"G")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"G")))))," be a subgroup of points on ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"E")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"E")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05764em"}},"E")))))," which contains ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"\u2113")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\ell")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},"\u2113")))))," + 1 cyclic subgroups of order ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"\u2113")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\ell")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},"\u2113"))))),". This subgroup is the torsion group ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"E"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"["),(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"\u2113"),(0,m.kt)("mo",{parentName:"mrow",stretchy:"false"},"]")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"E[\\ell]")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"1em",verticalAlign:"-0.25em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal",style:{marginRight:"0.05764em"}},"E"),(0,m.kt)("span",{parentName:"span",className:"mopen"},"["),(0,m.kt)("span",{parentName:"span",className:"mord"},"\u2113"),(0,m.kt)("span",{parentName:"span",className:"mclose"},"]")))))," and each element of this group is corresponding to an isogeny of degree ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow",mathvariant:"normal"},"\u2113")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"\\ell")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6944em"}}),(0,m.kt)("span",{parentName:"span",className:"mord"},"\u2113"))))),"; accordingly, an isogeny also can be identified by ",(0,m.kt)("span",{parentName:"p",className:"math math-inline"},(0,m.kt)("span",{parentName:"span",className:"katex"},(0,m.kt)("span",{parentName:"span",className:"katex-mathml"},(0,m.kt)("math",{parentName:"span",xmlns:"http://www.w3.org/1998/Math/MathML"},(0,m.kt)("semantics",{parentName:"math"},(0,m.kt)("mrow",{parentName:"semantics"},(0,m.kt)("mi",{parentName:"mrow"},"G")),(0,m.kt)("annotation",{parentName:"semantics",encoding:"application/x-tex"},"G")))),(0,m.kt)("span",{parentName:"span",className:"katex-html","aria-hidden":"true"},(0,m.kt)("span",{parentName:"span",className:"base"},(0,m.kt)("span",{parentName:"span",className:"strut",style:{height:"0.6833em"}}),(0,m.kt)("span",{parentName:"span",className:"mord mathnormal"},"G"))))),", i.e., the kernel of isogeny."),(0,m.kt)("p",null,"This section provides a brief presentation of the SIKE protocol. We refer readers to ",(0,m.kt)("sup",{parentName:"p",id:"fnref-eighth"},(0,m.kt)("a",{parentName:"sup",href:"#fn-eighth",className:"footnote-ref"},"eighth"))," and ",(0,m.kt)("sup",{parentName:"p",id:"fnref-fifth"},(0,m.kt)("a",{parentName:"sup",href:"#fn-fifth",className:"footnote-ref"},"fifth"))," for more detailed explanation of the supersignular isogeny problem and the base key-exchange protocol which the SIKE is constructed upon."),(0,m.kt)("admonition",{title:"See an error in this documentation? ",type:"tip"},(0,m.kt)("p",{parentName:"admonition"},"Submit a pull request on the development branch of ",(0,m.kt)("a",{parentName:"p",href:"https://github.com/apache/incubator-milagro"},"Milagro Website Repo"),".")),(0,m.kt)("div",{className:"footnotes"},(0,m.kt)("hr",{parentName:"div"}),(0,m.kt)("ol",{parentName:"div"},(0,m.kt)("li",{parentName:"ol",id:"fn-first"},(0,m.kt)("p",{parentName:"li"},(0,m.kt)("a",{parentName:"p",href:"https://eprint.iacr.org/2002/164"},"M-Pin protocol"),". As noted in ",(0,m.kt)("a",{parentName:"p",href:"milagro-crypto"},"Milagro Crypto"),", the M-Pin Protocol is of these classifications and exploits the features of:"),(0,m.kt)("ul",{parentName:"li"},(0,m.kt)("li",{parentName:"ul"},"Elliptic Curve Cryptography"),(0,m.kt)("li",{parentName:"ul"},"Pairing Based Cryptography"),(0,m.kt)("li",{parentName:"ul"},"Identity Based Encryption"),(0,m.kt)("li",{parentName:"ul"},"Zero Knowledge Proof")),(0,m.kt)("p",{parentName:"li"},(0,m.kt)("a",{parentName:"p",href:"#fnref-first",className:"footnote-backref"},"\u21a9"))),(0,m.kt)("li",{parentName:"ol",id:"fn-second"},(0,m.kt)("p",{parentName:"li"},(0,m.kt)("a",{parentName:"p",href:"https://eprint.iacr.org/2015/576"},"The Carnac protocol -- or how to read the contents of a sealed envelope"),(0,m.kt)("a",{parentName:"p",href:"#fnref-second",className:"footnote-backref"},"\u21a9"))),(0,m.kt)("li",{parentName:"ol",id:"fn-third"},(0,m.kt)("p",{parentName:"li"},(0,m.kt)("a",{parentName:"p",href:"https://eprint.iacr.org/2007/018.pdf"},"Strongly-Secure Identity-based Key Agreement and Anonymous Extension"),(0,m.kt)("a",{parentName:"p",href:"#fnref-third",className:"footnote-backref"},"\u21a9"))),(0,m.kt)("li",{parentName:"ol",id:"fn-fourth"},(0,m.kt)("p",{parentName:"li"},(0,m.kt)("a",{parentName:"p",href:"https://www.iacr.org/archive/asiacrypt2001/22480516.pdf"},"Short Signatures from the Weil Pairing"),(0,m.kt)("a",{parentName:"p",href:"#fnref-fourth",className:"footnote-backref"},"\u21a9"))),(0,m.kt)("li",{parentName:"ol",id:"fn-fifth"},(0,m.kt)("p",{parentName:"li"},(0,m.kt)("a",{parentName:"p",href:"https://sike.org/"},"Supersingular isogeny key encapsulation - NIST Submission"),(0,m.kt)("a",{parentName:"p",href:"#fnref-fifth",className:"footnote-backref"},"\u21a9"))),(0,m.kt)("li",{parentName:"ol",id:"fn-ninth"},(0,m.kt)("p",{parentName:"li"},(0,m.kt)("a",{parentName:"p",href:"https://reader.elsevier.com/reader/sd/pii/S2213020915000592?token=5C2E08C17803B9549FB79F3A91A1ED2382360D3E840087C8C065BD06EFCABB55C4A5A300566388A2920786DCC63E631E"},"A brief review of revocable ID-based public key cryptosystem"),(0,m.kt)("a",{parentName:"p",href:"#fnref-ninth",className:"footnote-backref"},"\u21a9"))),(0,m.kt)("li",{parentName:"ol",id:"fn-sixth"},(0,m.kt)("p",{parentName:"li"},(0,m.kt)("a",{parentName:"p",href:"https://eprint.iacr.org/2018/483"},"Compact Multi-Signatures for Smaller Blockchains"),(0,m.kt)("a",{parentName:"p",href:"#fnref-sixth",className:"footnote-backref"},"\u21a9"))),(0,m.kt)("li",{parentName:"ol",id:"fn-seventh"},(0,m.kt)("p",{parentName:"li"},(0,m.kt)("a",{parentName:"p",href:"https://cs.jhu.edu/~sdoshi/crypto/papers/shamirturing.pdf"},"How to Share a Secret"),(0,m.kt)("a",{parentName:"p",href:"#fnref-seventh",className:"footnote-backref"},"\u21a9"))),(0,m.kt)("li",{parentName:"ol",id:"fn-eighth"},(0,m.kt)("p",{parentName:"li"},(0,m.kt)("a",{parentName:"p",href:"https://eprint.iacr.org/2011/506.pdf"},"Towards quantum-resistant cryptosystems from supersingular elliptic curve isogenies"),(0,m.kt)("a",{parentName:"p",href:"#fnref-eighth",className:"footnote-backref"},"\u21a9"))))))}o.isMDXComponent=!0},6349:(a,e,t)=>{t.d(e,{Z:()=>s});const s=t.p+"assets/images/Chow-ChooProtocol-1aa57e8d61146f9a9a0741dd614493be.png"}}]);
\ No newline at end of file
diff --git a/assets/js/ef5324a4.fdb4aa2b.js b/assets/js/ef5324a4.fdb4aa2b.js
new file mode 100644
index 0000000..06e5783
--- /dev/null
+++ b/assets/js/ef5324a4.fdb4aa2b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1514],{3905:(e,r,t)=>{t.d(r,{Zo:()=>u,kt:()=>v});var n=t(7294);function o(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function i(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,n)}return t}function a(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?i(Object(t),!0).forEach((function(r){o(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):i(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}function p(e,r){if(null==e)return{};var t,n,o=function(e,r){if(null==e)return{};var t,n,o={},i=Object.keys(e);for(n=0;n<i.length;n++)t=i[n],r.indexOf(t)>=0||(o[t]=e[t]);return o}(e,r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)t=i[n],r.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var c=n.createContext({}),l=function(e){var r=n.useContext(c),t=r;return e&&(t="function"==typeof e?e(r):a(a({},r),e)),t},u=function(e){var r=l(e.components);return n.createElement(c.Provider,{value:r},e.children)},f="mdxType",s={inlineCode:"code",wrapper:function(e){var r=e.children;return n.createElement(n.Fragment,{},r)}},m=n.forwardRef((function(e,r){var t=e.components,o=e.mdxType,i=e.originalType,c=e.parentName,u=p(e,["components","mdxType","originalType","parentName"]),f=l(t),m=o,v=f["".concat(c,".").concat(m)]||f[m]||s[m]||i;return t?n.createElement(v,a(a({ref:r},u),{},{components:t})):n.createElement(v,a({ref:r},u))}));function v(e,r){var t=arguments,o=r&&r.mdxType;if("string"==typeof e||o){var i=t.length,a=new Array(i);a[0]=m;var p={};for(var c in r)hasOwnProperty.call(r,c)&&(p[c]=r[c]);p.originalType=e,p[f]="string"==typeof e?e:o,a[1]=p;for(var l=2;l<i;l++)a[l]=t[l];return n.createElement.apply(null,a)}return n.createElement.apply(null,t)}m.displayName="MDXCreateElement"},4750:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>u,contentTitle:()=>c,default:()=>m,frontMatter:()=>p,metadata:()=>l,toc:()=>f});var n=t(7462),o=t(3366),i=(t(7294),t(3905)),a=["components"],p={id:"zkp-mfa-overview",title:"Zero Knowledge Proof MFA Overview",sidebar_label:"ZKP-MFA Overview"},c=void 0,l={unversionedId:"zkp-mfa-overview",id:"zkp-mfa-overview",title:"Zero Knowledge Proof MFA Overview",description:"Interested in becoming a contributor? Milagro is looking for you.",source:"@site/../docs/zkp-mfa-overview.md",sourceDirName:".",slug:"/zkp-mfa-overview",permalink:"/docs/zkp-mfa-overview",draft:!1,tags:[],version:"current",frontMatter:{id:"zkp-mfa-overview",title:"Zero Knowledge Proof MFA Overview",sidebar_label:"ZKP-MFA Overview"},sidebar:"docs",previous:{title:"Multi-Party Computation Library 0.1",permalink:"/docs/mpc-api-0.1"},next:{title:"ZKP-MFA API",permalink:"/docs/zkp-mfa-api"}},u={},f=[],s={toc:f};function m(e){var r=e.components,t=(0,o.Z)(e,a);return(0,i.kt)("wrapper",(0,n.Z)({},s,t,{components:r,mdxType:"MDXLayout"}),(0,i.kt)("admonition",{title:"WE NEED HELP DOCUMENTING!",type:"tip"},(0,i.kt)("p",{parentName:"admonition"},"Interested in becoming a contributor? Milagro is looking for you.\n",(0,i.kt)("a",{parentName:"p",href:"/docs/contributor-guide"},"CONTRIBUTOR'S GUIDE"),".")),(0,i.kt)("p",null,"Supported admonition types are: caution, note, important, tip, warning."))}m.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/f2723ab8.c90d2a3c.js b/assets/js/f2723ab8.c90d2a3c.js
new file mode 100644
index 0000000..90d137d
--- /dev/null
+++ b/assets/js/f2723ab8.c90d2a3c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2517],{3905:(t,e,a)=>{a.d(e,{Zo:()=>i,kt:()=>s});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 p(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 m(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 k=n.createContext({}),o=function(t){var e=n.useContext(k),a=e;return t&&(a="function"==typeof t?t(e):p(p({},e),t)),a},i=function(t){var e=o(t.components);return n.createElement(k.Provider,{value:e},t.children)},F="mdxType",d={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},u=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,l=t.originalType,k=t.parentName,i=m(t,["components","mdxType","originalType","parentName"]),F=o(a),u=r,s=F["".concat(k,".").concat(u)]||F[u]||d[u]||l;return a?n.createElement(s,p(p({ref:e},i),{},{components:a})):n.createElement(s,p({ref:e},i))}));function s(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=a.length,p=new Array(l);p[0]=u;var m={};for(var k in e)hasOwnProperty.call(e,k)&&(m[k]=e[k]);m.originalType=t,m[F]="string"==typeof t?t:r,p[1]=m;for(var o=2;o<l;o++)p[o]=a[o];return n.createElement.apply(null,p)}return n.createElement.apply(null,a)}u.displayName="MDXCreateElement"},7149:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>i,contentTitle:()=>k,default:()=>u,frontMatter:()=>m,metadata:()=>o,toc:()=>F});var n=a(7462),r=a(3366),l=(a(7294),a(3905)),p=["components"],m={id:"ff",title:"FF",sidebar_label:"FF"},k=void 0,o={unversionedId:"cryptojs/ff",id:"cryptojs/ff",title:"FF",description:"FF",source:"@site/../docs/cryptojs/ff.md",sourceDirName:"cryptojs",slug:"/cryptojs/ff",permalink:"/docs/cryptojs/ff",draft:!1,tags:[],version:"current",frontMatter:{id:"ff",title:"FF",sidebar_label:"FF"},sidebar:"docs",previous:{title:"ECP8",permalink:"/docs/cryptojs/ecp8"},next:{title:"FP",permalink:"/docs/cryptojs/fp"}},i={},F=[{value:"FF",id:"ff",level:2},{value:"new FF()",id:"new-ff",level:3},{value:"fF.set(m)",id:"ffsetm",level:3},{value:"fF.copy(b)",id:"ffcopyb",level:3},{value:"fF.rcopy(b)",id:"ffrcopyb",level:3},{value:"fF.dsucopy()",id:"ffdsucopy",level:3},{value:"fF.dscopy()",id:"ffdscopy",level:3},{value:"fF.sducopy()",id:"ffsducopy",level:3},{value:"fF.iszilch()",id:"ffiszilch",level:3},{value:"fF.shrw()",id:"ffshrw",level:3},{value:"fF.shlw()",id:"ffshlw",level:3},{value:"fF.parity()",id:"ffparity",level:3},{value:"fF.radd()",id:"ffradd",level:3},{value:"fF.rinc()",id:"ffrinc",level:3},{value:"fF.rsub()",id:"ffrsub",level:3},{value:"fF.rdec()",id:"ffrdec",level:3},{value:"fF.add()",id:"ffadd",level:3},{value:"fF.sub()",id:"ffsub",level:3},{value:"fF.revsub()",id:"ffrevsub",level:3},{value:"fF.inc()",id:"ffinc",level:3},{value:"fF.rnorm()",id:"ffrnorm",level:3},{value:"fF.shl()",id:"ffshl",level:3},{value:"fF.shr()",id:"ffshr",level:3},{value:"fF.toString()",id:"fftostring",level:3},{value:"fF.toBytes()",id:"fftobytes",level:3},{value:"fF.karmul()",id:"ffkarmul",level:3},{value:"fF.lmul()",id:"fflmul",level:3},{value:"fF.mod()",id:"ffmod",level:3},{value:"fF.reduce(N, ND) \u21d2",id:"ffreducen-nd-",level:3},{value:"fF.dmod(b) \u21d2",id:"ffdmodb-",level:3},{value:"fF.invmodp()",id:"ffinvmodp",level:3},{value:"fF.nres()",id:"ffnres",level:3},{value:"fF.invmod2m()",id:"ffinvmod2m",level:3},{value:"fF.randomnum()",id:"ffrandomnum",level:3},{value:"fF.modmul()",id:"ffmodmul",level:3},{value:"fF.modsqr()",id:"ffmodsqr",level:3},{value:"fF.skpow(e, p)",id:"ffskpowe-p",level:3},{value:"fF.skspow(e, p)",id:"ffskspowe-p",level:3},{value:"fF.power(e, p)",id:"ffpowere-p",level:3},{value:"fF.pow(e, p)",id:"ffpowe-p",level:3},{value:"fF.pow2(e, y, f, p)",id:"ffpow2e-y-f-p",level:3},{value:"fF.cfactor(s) \u21d2",id:"ffcfactors-",level:3},{value:"FF.comp(a, b) \u21d2",id:"ffcompa-b-",level:3},{value:"FF.cswap()",id:"ffcswap",level:3},{value:"FF.mul()",id:"ffmul",level:3},{value:"FF.sqr()",id:"ffsqr",level:3},{value:"FF.prime(p, rmg)",id:"ffprimep-rmg",level:3}],d={toc:F};function u(t){var e=t.components,a=(0,r.Z)(t,p);return(0,l.kt)("wrapper",(0,n.Z)({},d,a,{components:e,mdxType:"MDXLayout"}),(0,l.kt)("a",{name:"FF"}),(0,l.kt)("h2",{id:"ff"},"FF"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": global class",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF"},"FF"),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#new_FF_new"},"new FF()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("em",{parentName:"li"},"instance"),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF+set"},".set(m)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF+copy"},".copy(b)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF+rcopy"},".rcopy(b)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF+dsucopy"},".dsucopy()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF+dscopy"},".dscopy()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF+sducopy"},".sducopy()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF+iszilch"},".iszilch()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF+shrw"},".shrw()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF+shlw"},".shlw()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF+parity"},".parity()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF+radd"},".radd()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF+rinc"},".rinc()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF+rsub"},".rsub()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF+rdec"},".rdec()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF+add"},".add()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF+sub"},".sub()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF+revsub"},".revsub()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF+inc"},".inc()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF+rnorm"},".rnorm()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF+shl"},".shl()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF+shr"},".shr()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF+toString"},".toString()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF+toBytes"},".toBytes()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF+karmul"},".karmul()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF+lmul"},".lmul()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF+mod"},".mod()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF+reduce"},".reduce(N, ND)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF+dmod"},".dmod(b)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF+invmodp"},".invmodp()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF+nres"},".nres()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF+invmod2m"},".invmod2m()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF+randomnum"},".randomnum()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF+modmul"},".modmul()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF+modsqr"},".modsqr()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF+skpow"},".skpow(e, p)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF+skspow"},".skspow(e, p)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF+power"},".power(e, p)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF+pow"},".pow(e, p)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF+pow2"},".pow2(e, y, f, p)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF+cfactor"},".cfactor(s)")," \u21d2"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("em",{parentName:"li"},"static"),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF.comp"},".comp(a, b)")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF.cswap"},".cswap()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF.mul"},".mul()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF.sqr"},".sqr()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FF.prime"},".prime(p, rmg)"))))))),(0,l.kt)("a",{name:"new_FF_new"}),(0,l.kt)("h3",{id:"new-ff"},"new FF()"),(0,l.kt)("p",null,"Creates an instance of FF."),(0,l.kt)("a",{name:"FF+set"}),(0,l.kt)("h3",{id:"ffsetm"},"fF.set(m)"),(0,l.kt)("p",null,"set to integer"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"m"),(0,l.kt)("td",{parentName:"tr",align:null},"Integer value to be set to")))),(0,l.kt)("a",{name:"FF+copy"}),(0,l.kt)("h3",{id:"ffcopyb"},"fF.copy(b)"),(0,l.kt)("p",null,"copy from FF b"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"b"),(0,l.kt)("td",{parentName:"tr",align:null},"FF element to copy from")))),(0,l.kt)("a",{name:"FF+rcopy"}),(0,l.kt)("h3",{id:"ffrcopyb"},"fF.rcopy(b)"),(0,l.kt)("p",null,"copy from FF b"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"b"),(0,l.kt)("td",{parentName:"tr",align:null},"FF element to copy from")))),(0,l.kt)("a",{name:"FF+dsucopy"}),(0,l.kt)("h3",{id:"ffdsucopy"},"fF.dsucopy()"),(0,l.kt)("p",null,"x=y","<","<","n"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(0,l.kt)("a",{name:"FF+dscopy"}),(0,l.kt)("h3",{id:"ffdscopy"},"fF.dscopy()"),(0,l.kt)("p",null,"x=y"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(0,l.kt)("a",{name:"FF+sducopy"}),(0,l.kt)("h3",{id:"ffsducopy"},"fF.sducopy()"),(0,l.kt)("p",null,"x=y",">",">","n"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(0,l.kt)("a",{name:"FF+iszilch"}),(0,l.kt)("h3",{id:"ffiszilch"},"fF.iszilch()"),(0,l.kt)("p",null,"test equals 0"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(0,l.kt)("a",{name:"FF+shrw"}),(0,l.kt)("h3",{id:"ffshrw"},"fF.shrw()"),(0,l.kt)("p",null,"shift right by BIGBITS-bit words"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(0,l.kt)("a",{name:"FF+shlw"}),(0,l.kt)("h3",{id:"ffshlw"},"fF.shlw()"),(0,l.kt)("p",null,"shift left by BIGBITS-bit words"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(0,l.kt)("a",{name:"FF+parity"}),(0,l.kt)("h3",{id:"ffparity"},"fF.parity()"),(0,l.kt)("p",null,"extract last bit"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(0,l.kt)("a",{name:"FF+radd"}),(0,l.kt)("h3",{id:"ffradd"},"fF.radd()"),(0,l.kt)("p",null,"recursive add"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(0,l.kt)("a",{name:"FF+rinc"}),(0,l.kt)("h3",{id:"ffrinc"},"fF.rinc()"),(0,l.kt)("p",null,"recursive inc"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(0,l.kt)("a",{name:"FF+rsub"}),(0,l.kt)("h3",{id:"ffrsub"},"fF.rsub()"),(0,l.kt)("p",null,"recursive sub"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(0,l.kt)("a",{name:"FF+rdec"}),(0,l.kt)("h3",{id:"ffrdec"},"fF.rdec()"),(0,l.kt)("p",null,"recursive dec"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(0,l.kt)("a",{name:"FF+add"}),(0,l.kt)("h3",{id:"ffadd"},"fF.add()"),(0,l.kt)("p",null,"simple add"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(0,l.kt)("a",{name:"FF+sub"}),(0,l.kt)("h3",{id:"ffsub"},"fF.sub()"),(0,l.kt)("p",null,"simple sub"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(0,l.kt)("a",{name:"FF+revsub"}),(0,l.kt)("h3",{id:"ffrevsub"},"fF.revsub()"),(0,l.kt)("p",null,"reverse sub"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(0,l.kt)("a",{name:"FF+inc"}),(0,l.kt)("h3",{id:"ffinc"},"fF.inc()"),(0,l.kt)("p",null,"increment/decrement by a small integer"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(0,l.kt)("a",{name:"FF+rnorm"}),(0,l.kt)("h3",{id:"ffrnorm"},"fF.rnorm()"),(0,l.kt)("p",null,"normalise - but hold any overflow in top part unless n","<","0"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(0,l.kt)("a",{name:"FF+shl"}),(0,l.kt)("h3",{id:"ffshl"},"fF.shl()"),(0,l.kt)("p",null,"shift left by one bit"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(0,l.kt)("a",{name:"FF+shr"}),(0,l.kt)("h3",{id:"ffshr"},"fF.shr()"),(0,l.kt)("p",null,"shift right by one bit"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(0,l.kt)("a",{name:"FF+toString"}),(0,l.kt)("h3",{id:"fftostring"},"fF.toString()"),(0,l.kt)("p",null,"Convert to Hex String"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(0,l.kt)("a",{name:"FF+toBytes"}),(0,l.kt)("h3",{id:"fftobytes"},"fF.toBytes()"),(0,l.kt)("p",null,"Convert FFs to/from byte arrays"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(0,l.kt)("a",{name:"FF+karmul"}),(0,l.kt)("h3",{id:"ffkarmul"},"fF.karmul()"),(0,l.kt)("p",null,"z=x","*","y, t is workspace"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(0,l.kt)("a",{name:"FF+lmul"}),(0,l.kt)("h3",{id:"fflmul"},"fF.lmul()"),(0,l.kt)("p",null,"return low part of product this","*","y"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(0,l.kt)("a",{name:"FF+mod"}),(0,l.kt)("h3",{id:"ffmod"},"fF.mod()"),(0,l.kt)("p",null,"Set b=b mod c"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(0,l.kt)("a",{name:"FF+reduce"}),(0,l.kt)("h3",{id:"ffreducen-nd-"},"fF.reduce(N, ND) \u21d2"),(0,l.kt)("p",null,"return this mod modulus"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": this mod N",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"N"),(0,l.kt)("td",{parentName:"tr",align:null},"Mmodulus")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ND"),(0,l.kt)("td",{parentName:"tr",align:null},"Montgomery Constant")))),(0,l.kt)("a",{name:"FF+dmod"}),(0,l.kt)("h3",{id:"ffdmodb-"},"fF.dmod(b) \u21d2"),(0,l.kt)("p",null,"Reduces a double-length FF with respect to a given modulus"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": this mod N",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"b"),(0,l.kt)("td",{parentName:"tr",align:null},"Mmodulus")))),(0,l.kt)("a",{name:"FF+invmodp"}),(0,l.kt)("h3",{id:"ffinvmodp"},"fF.invmodp()"),(0,l.kt)("p",null,"Set return=1/this mod p. Binary method - a","<","p on entry"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(0,l.kt)("a",{name:"FF+nres"}),(0,l.kt)("h3",{id:"ffnres"},"fF.nres()"),(0,l.kt)("p",null,"nresidue mod m"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(0,l.kt)("a",{name:"FF+invmod2m"}),(0,l.kt)("h3",{id:"ffinvmod2m"},"fF.invmod2m()"),(0,l.kt)("p",null,"U=1/a mod 2^m - Arazi & Qi"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(0,l.kt)("a",{name:"FF+randomnum"}),(0,l.kt)("h3",{id:"ffrandomnum"},"fF.randomnum()"),(0,l.kt)("p",null,"generate random x"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(0,l.kt)("a",{name:"FF+modmul"}),(0,l.kt)("h3",{id:"ffmodmul"},"fF.modmul()"),(0,l.kt)("p",null,"this","*","=y mod p"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(0,l.kt)("a",{name:"FF+modsqr"}),(0,l.kt)("h3",{id:"ffmodsqr"},"fF.modsqr()"),(0,l.kt)("p",null,"this","*","=y mod p"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(0,l.kt)("a",{name:"FF+skpow"}),(0,l.kt)("h3",{id:"ffskpowe-p"},"fF.skpow(e, p)"),(0,l.kt)("p",null,"this=this^e mod p using side-channel resistant Montgomery Ladder, for large e"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"e"),(0,l.kt)("td",{parentName:"tr",align:null},"exponent")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"p"),(0,l.kt)("td",{parentName:"tr",align:null},"modulus")))),(0,l.kt)("a",{name:"FF+skspow"}),(0,l.kt)("h3",{id:"ffskspowe-p"},"fF.skspow(e, p)"),(0,l.kt)("p",null,"this=this^e mod p using side-channel resistant Montgomery Ladder, for short e"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"e"),(0,l.kt)("td",{parentName:"tr",align:null},"exponent")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"p"),(0,l.kt)("td",{parentName:"tr",align:null},"modulus")))),(0,l.kt)("a",{name:"FF+power"}),(0,l.kt)("h3",{id:"ffpowere-p"},"fF.power(e, p)"),(0,l.kt)("p",null,"raise to an integer power - right-to-left method"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"e"),(0,l.kt)("td",{parentName:"tr",align:null},"exponent")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"p"),(0,l.kt)("td",{parentName:"tr",align:null},"modulus")))),(0,l.kt)("a",{name:"FF+pow"}),(0,l.kt)("h3",{id:"ffpowe-p"},"fF.pow(e, p)"),(0,l.kt)("p",null,"this=this^e mod p, faster but not side channel resistant"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"e"),(0,l.kt)("td",{parentName:"tr",align:null},"exponent")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"p"),(0,l.kt)("td",{parentName:"tr",align:null},"modulus")))),(0,l.kt)("a",{name:"FF+pow2"}),(0,l.kt)("h3",{id:"ffpow2e-y-f-p"},"fF.pow2(e, y, f, p)"),(0,l.kt)("p",null,"double exponentiation r=x^e.y^f mod p"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"e"),(0,l.kt)("td",{parentName:"tr",align:null},"exponent")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"y"),(0,l.kt)("td",{parentName:"tr",align:null},"FF instance")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"f"),(0,l.kt)("td",{parentName:"tr",align:null},"exponent")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"p"),(0,l.kt)("td",{parentName:"tr",align:null},"modulus")))),(0,l.kt)("a",{name:"FF+cfactor"}),(0,l.kt)("h3",{id:"ffcfactors-"},"fF.cfactor(s) \u21d2"),(0,l.kt)("p",null,"Test if an FF has factor in common with integer s"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": true or false",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"s"),(0,l.kt)("td",{parentName:"tr",align:null},"integerexponent")))),(0,l.kt)("a",{name:"FF.comp"}),(0,l.kt)("h3",{id:"ffcompa-b-"},"FF.comp(a, b) \u21d2"),(0,l.kt)("p",null,"compare a and b - must be normalised, and of same length"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": zero of error codetrue or false",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"a"),(0,l.kt)("td",{parentName:"tr",align:null},"FF number")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"b"),(0,l.kt)("td",{parentName:"tr",align:null},"FF number")))),(0,l.kt)("a",{name:"FF.cswap"}),(0,l.kt)("h3",{id:"ffcswap"},"FF.cswap()"),(0,l.kt)("p",null,"in-place swapping using xor - side channel resistant - lengths must be the same"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(0,l.kt)("a",{name:"FF.mul"}),(0,l.kt)("h3",{id:"ffmul"},"FF.mul()"),(0,l.kt)("p",null,"z=x","*","y. Assumes x and y are of same length."),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(0,l.kt)("a",{name:"FF.sqr"}),(0,l.kt)("h3",{id:"ffsqr"},"FF.sqr()"),(0,l.kt)("p",null,"z=x^2"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(0,l.kt)("a",{name:"FF.prime"}),(0,l.kt)("h3",{id:"ffprimep-rmg"},"FF.prime(p, rmg)"),(0,l.kt)("p",null,"Miller-Rabin test for primality."),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#FF"},(0,l.kt)("code",null,"FF")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FF{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"p"),(0,l.kt)("td",{parentName:"tr",align:null},"FF instance to be tested")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"rmg"),(0,l.kt)("td",{parentName:"tr",align:null},"an instance of a Cryptographically Secure Random Number Generator")))))}u.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/f2859be3.d48e8aab.js b/assets/js/f2859be3.d48e8aab.js
new file mode 100644
index 0000000..823ce0e
--- /dev/null
+++ b/assets/js/f2859be3.d48e8aab.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[8108],{3905:(t,e,r)=>{r.d(e,{Zo:()=>p,kt:()=>g});var a=r(7294);function i(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function o(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,a)}return r}function n(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?o(Object(r),!0).forEach((function(e){i(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}function c(t,e){if(null==t)return{};var r,a,i=function(t,e){if(null==t)return{};var r,a,i={},o=Object.keys(t);for(a=0;a<o.length;a++)r=o[a],e.indexOf(r)>=0||(i[r]=t[r]);return i}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(a=0;a<o.length;a++)r=o[a],e.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(t,r)&&(i[r]=t[r])}return i}var l=a.createContext({}),u=function(t){var e=a.useContext(l),r=e;return t&&(r="function"==typeof t?t(e):n(n({},e),t)),r},p=function(t){var e=u(t.components);return a.createElement(l.Provider,{value:e},t.children)},s="mdxType",b={inlineCode:"code",wrapper:function(t){var e=t.children;return a.createElement(a.Fragment,{},e)}},m=a.forwardRef((function(t,e){var r=t.components,i=t.mdxType,o=t.originalType,l=t.parentName,p=c(t,["components","mdxType","originalType","parentName"]),s=u(r),m=i,g=s["".concat(l,".").concat(m)]||s[m]||b[m]||o;return r?a.createElement(g,n(n({ref:e},p),{},{components:r})):a.createElement(g,n({ref:e},p))}));function g(t,e){var r=arguments,i=e&&e.mdxType;if("string"==typeof t||i){var o=r.length,n=new Array(o);n[0]=m;var c={};for(var l in e)hasOwnProperty.call(e,l)&&(c[l]=e[l]);c.originalType=t,c[s]="string"==typeof t?t:i,n[1]=c;for(var u=2;u<o;u++)n[u]=r[u];return a.createElement.apply(null,n)}return a.createElement.apply(null,r)}m.displayName="MDXCreateElement"},9875:(t,e,r)=>{r.r(e),r.d(e,{assets:()=>p,contentTitle:()=>l,default:()=>m,frontMatter:()=>c,metadata:()=>u,toc:()=>s});var a=r(7462),i=r(3366),o=(r(7294),r(3905)),n=["components"],c={id:"contributor-guide",title:"Contributor's Guide",sidebar_label:"Contributor's Guide"},l="Become a contributor",u={unversionedId:"contributor-guide",id:"contributor-guide",title:"Contributor's Guide",description:"Apache Milagro Mailing List",source:"@site/../docs/contributor-guide.md",sourceDirName:".",slug:"/contributor-guide",permalink:"/docs/contributor-guide",draft:!1,tags:[],version:"current",frontMatter:{id:"contributor-guide",title:"Contributor's Guide",sidebar_label:"Contributor's Guide"},sidebar:"docs",previous:{title:"ZKP-MFA API",permalink:"/docs/zkp-mfa-api"},next:{title:"Downloads",permalink:"/docs/downloads"}},p={},s=[{value:"Apache Milagro Mailing List",id:"apache-milagro-mailing-list",level:2},{value:"Repositories",id:"repositories",level:2}],b={toc:s};function m(t){var e=t.components,r=(0,i.Z)(t,n);return(0,o.kt)("wrapper",(0,a.Z)({},b,r,{components:e,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"become-a-contributor"},"Become a contributor"),(0,o.kt)("h2",{id:"apache-milagro-mailing-list"},"Apache Milagro Mailing List"),(0,o.kt)("p",null,"If you'd like to contribute, the first step is to subscribe to our developer's mailing list. Please send an email to:"),(0,o.kt)("a",{href:"mailto:dev-subscribe@milagro.apache.org?Subject=Subscribe",target:"_top"},"dev-subscribe @ milagro.apache.org"),(0,o.kt)("h2",{id:"repositories"},"Repositories"),(0,o.kt)("p",null,"Our current GitHub repositories are:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/apache/incubator-milagro"},"https://github.com/apache/incubator-milagro")," - used to build this website.   "),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/apache/incubator-milagro-crypto-c"},"https://github.com/apache/incubator-milagro-crypto-c")," - standards compliant cryptographic library written in C.   "),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/apache/incubator-milagro-MPC"},"https://github.com/apache/incubator-milagro-MPC")," - Multi-Party Computation library (libmpc).   "),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/apache/incubator-milagro-crypto-js"},"https://github.com/apache/incubator-milagro-crypto-js")," - standards compliant cryptographic library written in JavaScript.   "),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/apache/incubator-milagro-crypto-rust"},"https://github.com/apache/incubator-milagro-crypto-rust")," - standards compliant cryptographic library written in Rust.   "),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/apache/incubator-milagro-dta"},"https://github.com/apache/incubator-milagro-dta")," - Milagro Decentralized Trust Authority (D-TA) - a collaborative key management server.     ")),(0,o.kt)("p",null,'Please use the "Issues" tab on these repos to report any bugs or feature requests.'))}m.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/f498ea0f.ed0d5a82.js b/assets/js/f498ea0f.ed0d5a82.js
new file mode 100644
index 0000000..66514b2
--- /dev/null
+++ b/assets/js/f498ea0f.ed0d5a82.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[9880],{3905:(t,e,a)=>{a.d(e,{Zo:()=>m,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 p(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 k(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({}),i=function(t){var e=n.useContext(o),a=e;return t&&(a="function"==typeof t?t(e):p(p({},e),t)),a},m=function(t){var e=i(t.components);return n.createElement(o.Provider,{value:e},t.children)},u="mdxType",s={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},d=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,l=t.originalType,o=t.parentName,m=k(t,["components","mdxType","originalType","parentName"]),u=i(a),d=r,N=u["".concat(o,".").concat(d)]||u[d]||s[d]||l;return a?n.createElement(N,p(p({ref:e},m),{},{components:a})):n.createElement(N,p({ref:e},m))}));function N(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=a.length,p=new Array(l);p[0]=d;var k={};for(var o in e)hasOwnProperty.call(e,o)&&(k[o]=e[o]);k.originalType=t,k[u]="string"==typeof t?t:r,p[1]=k;for(var i=2;i<l;i++)p[i]=a[i];return n.createElement.apply(null,p)}return n.createElement.apply(null,a)}d.displayName="MDXCreateElement"},3060:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>m,contentTitle:()=>o,default:()=>d,frontMatter:()=>k,metadata:()=>i,toc:()=>u});var n=a(7462),r=a(3366),l=(a(7294),a(3905)),p=["components"],k={id:"fp12",title:"FP12",sidebar_label:"FP12"},o=void 0,i={unversionedId:"cryptojs/fp12",id:"cryptojs/fp12",title:"FP12",description:"FP12",source:"@site/../docs/cryptojs/fp12.md",sourceDirName:"cryptojs",slug:"/cryptojs/fp12",permalink:"/docs/cryptojs/fp12",draft:!1,tags:[],version:"current",frontMatter:{id:"fp12",title:"FP12",sidebar_label:"FP12"},sidebar:"docs",previous:{title:"FP8",permalink:"/docs/cryptojs/fp8"},next:{title:"FP16",permalink:"/docs/cryptojs/fp16"}},m={},u=[{value:"FP12",id:"fp12",level:2},{value:"new FP12()",id:"new-fp12",level:3},{value:"fP12.reduce()",id:"fp12reduce",level:3},{value:"fP12.norm()",id:"fp12norm",level:3},{value:"fP12.iszilch()",id:"fp12iszilch",level:3},{value:"fP12.isunity()",id:"fp12isunity",level:3},{value:"fP12.cmove(g, d)",id:"fp12cmoveg-d",level:3},{value:"fP12.select()",id:"fp12select",level:3},{value:"fP12.geta()",id:"fp12geta",level:3},{value:"fP12.getb()",id:"fp12getb",level:3},{value:"fP12.getc()",id:"fp12getc",level:3},{value:"fP12.equals(x)",id:"fp12equalsx",level:3},{value:"fP12.copy(x)",id:"fp12copyx",level:3},{value:"fP12.one(x)",id:"fp12onex",level:3},{value:"fP12.zero()",id:"fp12zero",level:3},{value:"fP12.conj()",id:"fp12conj",level:3},{value:"fP12.set(d, e, f)",id:"fp12setd-e-f",level:3},{value:"fP12.seta(d)",id:"fp12setad",level:3},{value:"fP12.usqr()",id:"fp12usqr",level:3},{value:"fP12.sqr()",id:"fp12sqr",level:3},{value:"fP12.mul(y)",id:"fp12muly",level:3},{value:"fP12.smul(y)",id:"fp12smuly",level:3},{value:"fP12.ssmul(y)",id:"fp12ssmuly",level:3},{value:"fP12.inverse()",id:"fp12inverse",level:3},{value:"fP12.frob(f)",id:"fp12frobf",level:3},{value:"fP12.trace()",id:"fp12trace",level:3},{value:"fP12.toString()",id:"fp12tostring",level:3},{value:"fP12.toBytes(w)",id:"fp12tobytesw",level:3},{value:"fP12.pow(e)",id:"fp12powe",level:3},{value:"fP12.pinpow(e, bts)",id:"fp12pinpowe-bts",level:3},{value:"fP12.compow(e, r)",id:"fp12compowe-r",level:3},{value:"FP12.fromBytes(w)",id:"fp12frombytesw",level:3},{value:"FP12.teq()",id:"fp12teq",level:3},{value:"FP12.pow4()",id:"fp12pow4",level:3}],s={toc:u};function d(t){var e=t.components,a=(0,r.Z)(t,p);return(0,l.kt)("wrapper",(0,n.Z)({},s,a,{components:e,mdxType:"MDXLayout"}),(0,l.kt)("a",{name:"FP12"}),(0,l.kt)("h2",{id:"fp12"},"FP12"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": global class",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP12{"}"}'),"  "),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP12"},"FP12"),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#new_FP12_new"},"new FP12()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("em",{parentName:"li"},"instance"),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP12+reduce"},".reduce()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP12+norm"},".norm()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP12+iszilch"},".iszilch()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP12+isunity"},".isunity()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP12+cmove"},".cmove(g, d)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP12+select"},".select()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP12+geta"},".geta()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP12+getb"},".getb()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP12+getc"},".getc()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP12+equals"},".equals(x)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP12+copy"},".copy(x)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP12+one"},".one(x)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP12+zero"},".zero()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP12+conj"},".conj()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP12+set"},".set(d, e, f)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP12+seta"},".seta(d)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP12+usqr"},".usqr()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP12+sqr"},".sqr()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP12+mul"},".mul(y)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP12+smul"},".smul(y)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP12+ssmul"},".ssmul(y)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP12+inverse"},".inverse()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP12+frob"},".frob(f)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP12+trace"},".trace()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP12+toString"},".toString()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP12+toBytes"},".toBytes(w)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP12+pow"},".pow(e)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP12+pinpow"},".pinpow(e, bts)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP12+compow"},".compow(e, r)")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("em",{parentName:"li"},"static"),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP12.fromBytes"},".fromBytes(w)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP12.teq"},".teq()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#FP12.pow4"},".pow4()"))))))),(0,l.kt)("a",{name:"new_FP12_new"}),(0,l.kt)("h3",{id:"new-fp12"},"new FP12()"),(0,l.kt)("p",null,"Creates an instance of FP12."),(0,l.kt)("a",{name:"FP12+reduce"}),(0,l.kt)("h3",{id:"fp12reduce"},"fP12.reduce()"),(0,l.kt)("p",null,"Reduces all components of possibly unreduced FP12 mod Modulus"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP12"},(0,l.kt)("code",null,"FP12")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP12{"}"}'),"  "),(0,l.kt)("a",{name:"FP12+norm"}),(0,l.kt)("h3",{id:"fp12norm"},"fP12.norm()"),(0,l.kt)("p",null,"Normalises the components of an FP12"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP12"},(0,l.kt)("code",null,"FP12")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP12{"}"}'),"  "),(0,l.kt)("a",{name:"FP12+iszilch"}),(0,l.kt)("h3",{id:"fp12iszilch"},"fP12.iszilch()"),(0,l.kt)("p",null,"Tests for FP12 equal to zero"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP12"},(0,l.kt)("code",null,"FP12")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP12{"}"}'),"  "),(0,l.kt)("a",{name:"FP12+isunity"}),(0,l.kt)("h3",{id:"fp12isunity"},"fP12.isunity()"),(0,l.kt)("p",null,"Tests for FP12 equal to unity"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP12"},(0,l.kt)("code",null,"FP12")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP12{"}"}'),"  "),(0,l.kt)("a",{name:"FP12+cmove"}),(0,l.kt)("h3",{id:"fp12cmoveg-d"},"fP12.cmove(g, d)"),(0,l.kt)("p",null,"Conditional copy of FP12 number"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP12"},(0,l.kt)("code",null,"FP12")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP12{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"g"),(0,l.kt)("td",{parentName:"tr",align:null},"FP12 instance")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"d"),(0,l.kt)("td",{parentName:"tr",align:null},"copy depends on this value")))),(0,l.kt)("a",{name:"FP12+select"}),(0,l.kt)("h3",{id:"fp12select"},"fP12.select()"),(0,l.kt)("p",null,"Constant time select from pre-computed table"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP12"},(0,l.kt)("code",null,"FP12")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP12{"}"}'),"  "),(0,l.kt)("a",{name:"FP12+geta"}),(0,l.kt)("h3",{id:"fp12geta"},"fP12.geta()"),(0,l.kt)("p",null,"extract a from this"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP12"},(0,l.kt)("code",null,"FP12")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP12{"}"}'),"  "),(0,l.kt)("a",{name:"FP12+getb"}),(0,l.kt)("h3",{id:"fp12getb"},"fP12.getb()"),(0,l.kt)("p",null,"extract b from this"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP12"},(0,l.kt)("code",null,"FP12")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP12{"}"}'),"  "),(0,l.kt)("a",{name:"FP12+getc"}),(0,l.kt)("h3",{id:"fp12getc"},"fP12.getc()"),(0,l.kt)("p",null,"extract c from this"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP12"},(0,l.kt)("code",null,"FP12")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP12{"}"}'),"  "),(0,l.kt)("a",{name:"FP12+equals"}),(0,l.kt)("h3",{id:"fp12equalsx"},"fP12.equals(x)"),(0,l.kt)("p",null,"Tests for equality of two FP12s"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP12"},(0,l.kt)("code",null,"FP12")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP12{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"x"),(0,l.kt)("td",{parentName:"tr",align:null},"FP12 instance to compare")))),(0,l.kt)("a",{name:"FP12+copy"}),(0,l.kt)("h3",{id:"fp12copyx"},"fP12.copy(x)"),(0,l.kt)("p",null,"Copy FP12 to another FP12"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP12"},(0,l.kt)("code",null,"FP12")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP12{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"x"),(0,l.kt)("td",{parentName:"tr",align:null},"FP12 instance to be copied")))),(0,l.kt)("a",{name:"FP12+one"}),(0,l.kt)("h3",{id:"fp12onex"},"fP12.one(x)"),(0,l.kt)("p",null,"Set FP12 to unity"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP12"},(0,l.kt)("code",null,"FP12")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP12{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"x"),(0,l.kt)("td",{parentName:"tr",align:null},"FP12 instance to be set to one")))),(0,l.kt)("a",{name:"FP12+zero"}),(0,l.kt)("h3",{id:"fp12zero"},"fP12.zero()"),(0,l.kt)("p",null,"Set FP12 to zero"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP12"},(0,l.kt)("code",null,"FP12")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP12{"}"}'),"  "),(0,l.kt)("a",{name:"FP12+conj"}),(0,l.kt)("h3",{id:"fp12conj"},"fP12.conj()"),(0,l.kt)("p",null,"Conjugation of FP12"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP12"},(0,l.kt)("code",null,"FP12")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP12{"}"}'),"  "),(0,l.kt)("a",{name:"FP12+set"}),(0,l.kt)("h3",{id:"fp12setd-e-f"},"fP12.set(d, e, f)"),(0,l.kt)("p",null,"Set FP12 from three FP4 values"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP12"},(0,l.kt)("code",null,"FP12")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP12{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"d"),(0,l.kt)("td",{parentName:"tr",align:null},"FP4 instance")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"e"),(0,l.kt)("td",{parentName:"tr",align:null},"FP4 instance")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"f"),(0,l.kt)("td",{parentName:"tr",align:null},"FP4 instance")))),(0,l.kt)("a",{name:"FP12+seta"}),(0,l.kt)("h3",{id:"fp12setad"},"fP12.seta(d)"),(0,l.kt)("p",null,"Set FP12 from one FP4 value"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP12"},(0,l.kt)("code",null,"FP12")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP12{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"d"),(0,l.kt)("td",{parentName:"tr",align:null},"FP4 instance")))),(0,l.kt)("a",{name:"FP12+usqr"}),(0,l.kt)("h3",{id:"fp12usqr"},"fP12.usqr()"),(0,l.kt)("p",null,'Fast Squaring of an FP12 in "unitary" form'),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP12"},(0,l.kt)("code",null,"FP12")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP12{"}"}'),"  "),(0,l.kt)("a",{name:"FP12+sqr"}),(0,l.kt)("h3",{id:"fp12sqr"},"fP12.sqr()"),(0,l.kt)("p",null,"Fast Squaring of an FP12"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP12"},(0,l.kt)("code",null,"FP12")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP12{"}"}'),"  "),(0,l.kt)("a",{name:"FP12+mul"}),(0,l.kt)("h3",{id:"fp12muly"},"fP12.mul(y)"),(0,l.kt)("p",null,"Full unconditional Multiplication of two FP12s"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP12"},(0,l.kt)("code",null,"FP12")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP12{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"y"),(0,l.kt)("td",{parentName:"tr",align:null},"FP12 instance, the multiplier")))),(0,l.kt)("a",{name:"FP12+smul"}),(0,l.kt)("h3",{id:"fp12smuly"},"fP12.smul(y)"),(0,l.kt)("p",null,"Fast multiplication of two sparse FP12s that arises from ATE pairing line functions"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP12"},(0,l.kt)("code",null,"FP12")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP12{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"y"),(0,l.kt)("td",{parentName:"tr",align:null},"FP12 instance, the multiplier")))),(0,l.kt)("a",{name:"FP12+ssmul"}),(0,l.kt)("h3",{id:"fp12ssmuly"},"fP12.ssmul(y)"),(0,l.kt)("p",null,"Fast multiplication of what may be sparse multiplicands"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP12"},(0,l.kt)("code",null,"FP12")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP12{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"y"),(0,l.kt)("td",{parentName:"tr",align:null},"FP12 instance, the multiplier")))),(0,l.kt)("a",{name:"FP12+inverse"}),(0,l.kt)("h3",{id:"fp12inverse"},"fP12.inverse()"),(0,l.kt)("p",null,"Inverting an FP12"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP12"},(0,l.kt)("code",null,"FP12")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP12{"}"}'),"  "),(0,l.kt)("a",{name:"FP12+frob"}),(0,l.kt)("h3",{id:"fp12frobf"},"fP12.frob(f)"),(0,l.kt)("p",null,"Raises an FP12 to the power of the internal modulus p, using the Frobenius"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP12"},(0,l.kt)("code",null,"FP12")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP12{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"f"),(0,l.kt)("td",{parentName:"tr",align:null},"Modulus")))),(0,l.kt)("a",{name:"FP12+trace"}),(0,l.kt)("h3",{id:"fp12trace"},"fP12.trace()"),(0,l.kt)("p",null,"Calculate the trace of an FP12"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP12"},(0,l.kt)("code",null,"FP12")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP12{"}"}'),"  "),(0,l.kt)("a",{name:"FP12+toString"}),(0,l.kt)("h3",{id:"fp12tostring"},"fP12.toString()"),(0,l.kt)("p",null,"convert this to hex string"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP12"},(0,l.kt)("code",null,"FP12")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP12{"}"}'),"  "),(0,l.kt)("a",{name:"FP12+toBytes"}),(0,l.kt)("h3",{id:"fp12tobytesw"},"fP12.toBytes(w)"),(0,l.kt)("p",null,"convert this to byte array"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP12"},(0,l.kt)("code",null,"FP12")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP12{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"w"),(0,l.kt)("td",{parentName:"tr",align:null},"Byte array")))),(0,l.kt)("a",{name:"FP12+pow"}),(0,l.kt)("h3",{id:"fp12powe"},"fP12.pow(e)"),(0,l.kt)("p",null,"Raises an FP12 to the power of a BIG"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP12"},(0,l.kt)("code",null,"FP12")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP12{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"e"),(0,l.kt)("td",{parentName:"tr",align:null},"BIG instance exponent")))),(0,l.kt)("a",{name:"FP12+pinpow"}),(0,l.kt)("h3",{id:"fp12pinpowe-bts"},"fP12.pinpow(e, bts)"),(0,l.kt)("p",null,"Raises an FP12 instance x to a small integer power, side-channel resistant"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP12"},(0,l.kt)("code",null,"FP12")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP12{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"e"),(0,l.kt)("td",{parentName:"tr",align:null},"small integer exponent")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"bts"),(0,l.kt)("td",{parentName:"tr",align:null},"maximum number of bits in exponent")))),(0,l.kt)("a",{name:"FP12+compow"}),(0,l.kt)("h3",{id:"fp12compowe-r"},"fP12.compow(e, r)"),(0,l.kt)("p",null,"Raises an FP12 instance to a BIG power, compressed to FP4"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#FP12"},(0,l.kt)("code",null,"FP12")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP12{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"e"),(0,l.kt)("td",{parentName:"tr",align:null},"BIG exponent")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"r"),(0,l.kt)("td",{parentName:"tr",align:null},"BIG group order")))),(0,l.kt)("a",{name:"FP12.fromBytes"}),(0,l.kt)("h3",{id:"fp12frombytesw"},"FP12.fromBytes(w)"),(0,l.kt)("p",null,"convert from byte array to FP12"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#FP12"},(0,l.kt)("code",null,"FP12")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP12{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"w"),(0,l.kt)("td",{parentName:"tr",align:null},"Byte array")))),(0,l.kt)("a",{name:"FP12.teq"}),(0,l.kt)("h3",{id:"fp12teq"},"FP12.teq()"),(0,l.kt)("p",null,"return 1 if b==c, no branching"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#FP12"},(0,l.kt)("code",null,"FP12")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP12{"}"}'),"  "),(0,l.kt)("a",{name:"FP12.pow4"}),(0,l.kt)("h3",{id:"fp12pow4"},"FP12.pow4()"),(0,l.kt)("p",null,"p=q0^u0.q1^u1.q2^u2.q3^u3"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#FP12"},(0,l.kt)("code",null,"FP12")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}FP12{"}"}')))}d.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/f6345755.52d301ce.js b/assets/js/f6345755.52d301ce.js
new file mode 100644
index 0000000..2e0bcd7
--- /dev/null
+++ b/assets/js/f6345755.52d301ce.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[3222],{3905:(t,e,a)=>{a.d(e,{Zo:()=>o,kt:()=>s});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 p(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 i(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 k=n.createContext({}),m=function(t){var e=n.useContext(k),a=e;return t&&(a="function"==typeof t?t(e):p(p({},e),t)),a},o=function(t){var e=m(t.components);return n.createElement(k.Provider,{value:e},t.children)},c="mdxType",u={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},d=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,l=t.originalType,k=t.parentName,o=i(t,["components","mdxType","originalType","parentName"]),c=m(a),d=r,s=c["".concat(k,".").concat(d)]||c[d]||u[d]||l;return a?n.createElement(s,p(p({ref:e},o),{},{components:a})):n.createElement(s,p({ref:e},o))}));function s(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=a.length,p=new Array(l);p[0]=d;var i={};for(var k in e)hasOwnProperty.call(e,k)&&(i[k]=e[k]);i.originalType=t,i[c]="string"==typeof t?t:r,p[1]=i;for(var m=2;m<l;m++)p[m]=a[m];return n.createElement.apply(null,p)}return n.createElement.apply(null,a)}d.displayName="MDXCreateElement"},2847:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>o,contentTitle:()=>k,default:()=>d,frontMatter:()=>i,metadata:()=>m,toc:()=>c});var n=a(7462),r=a(3366),l=(a(7294),a(3905)),p=["components"],i={id:"ecp4",title:"ECP4",sidebar_label:"ECP4"},k=void 0,m={unversionedId:"cryptojs/ecp4",id:"cryptojs/ecp4",title:"ECP4",description:"ECP4",source:"@site/../docs/cryptojs/ecp4.md",sourceDirName:"cryptojs",slug:"/cryptojs/ecp4",permalink:"/docs/cryptojs/ecp4",draft:!1,tags:[],version:"current",frontMatter:{id:"ecp4",title:"ECP4",sidebar_label:"ECP4"},sidebar:"docs",previous:{title:"ECP2",permalink:"/docs/cryptojs/ecp2"},next:{title:"ECP8",permalink:"/docs/cryptojs/ecp8"}},o={},c=[{value:"ECP4",id:"ecp4",level:2},{value:"new ECP4()",id:"new-ecp4",level:3},{value:"ecP4.is_infinity(1)",id:"ecp4is_infinity1",level:3},{value:"ecP4.copy(P)",id:"ecp4copyp",level:3},{value:"ecP4.inf()",id:"ecp4inf",level:3},{value:"ecP4.cmove()",id:"ecp4cmove",level:3},{value:"ecP4.select()",id:"ecp4select",level:3},{value:"ecP4.equals(Q)",id:"ecp4equalsq",level:3},{value:"ecP4.neg()",id:"ecp4neg",level:3},{value:"ecP4.affine()",id:"ecp4affine",level:3},{value:"ecP4.getX()",id:"ecp4getx",level:3},{value:"ecP4.getY()",id:"ecp4gety",level:3},{value:"ecP4.getx()",id:"ecp4getx-1",level:3},{value:"ecP4.gety()",id:"ecp4gety-1",level:3},{value:"ecP4.getz()",id:"ecp4getz",level:3},{value:"ecP4.toBytes(b)",id:"ecp4tobytesb",level:3},{value:"ecP4.toString() \u21d2",id:"ecp4tostring-",level:3},{value:"ecP4.setxy(ix, iy)",id:"ecp4setxyix-iy",level:3},{value:"ecP4.setx(ix)",id:"ecp4setxix",level:3},{value:"ecP4.frob()",id:"ecp4frob",level:3},{value:"ecP4.dbl()",id:"ecp4dbl",level:3},{value:"ecP4.add()",id:"ecp4add",level:3},{value:"ecP4.sub(Q)",id:"ecp4subq",level:3},{value:"ecP4.mul(e)",id:"ecp4mule",level:3},{value:"ECP4.generator()",id:"ecp4generator",level:3},{value:"ECP4.fromBytes(b)",id:"ecp4frombytesb",level:3},{value:"ECP4.RHS(x)",id:"ecp4rhsx",level:3},{value:"ECP4.mul8()",id:"ecp4mul8",level:3}],u={toc:c};function d(t){var e=t.components,a=(0,r.Z)(t,p);return(0,l.kt)("wrapper",(0,n.Z)({},u,a,{components:e,mdxType:"MDXLayout"}),(0,l.kt)("a",{name:"ECP4"}),(0,l.kt)("h2",{id:"ecp4"},"ECP4"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": global class",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP4{"}"}'),"  "),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP4"},"ECP4"),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#new_ECP4_new"},"new ECP4()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("em",{parentName:"li"},"instance"),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP4+is_infinity"},".is_infinity(1)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP4+copy"},".copy(P)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP4+inf"},".inf()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP4+cmove"},".cmove()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP4+select"},".select()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP4+equals"},".equals(Q)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP4+neg"},".neg()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP4+affine"},".affine()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP4+getX"},".getX()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP4+getY"},".getY()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP4+getx"},".getx()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP4+gety"},".gety()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP4+getz"},".getz()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP4+toBytes"},".toBytes(b)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP4+toString"},".toString()")," \u21d2"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP4+setxy"},".setxy(ix, iy)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP4+setx"},".setx(ix)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP4+frob"},".frob()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP4+dbl"},".dbl()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP4+add"},".add()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP4+sub"},".sub(Q)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP4+mul"},".mul(e)")))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("em",{parentName:"li"},"static"),(0,l.kt)("ul",{parentName:"li"},(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP4.generator"},".generator()")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP4.fromBytes"},".fromBytes(b)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP4.RHS"},".RHS(x)")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#ECP4.mul8"},".mul8()"))))))),(0,l.kt)("a",{name:"new_ECP4_new"}),(0,l.kt)("h3",{id:"new-ecp4"},"new ECP4()"),(0,l.kt)("p",null,"Creates an instance of ECP4"),(0,l.kt)("a",{name:"ECP4+is_infinity"}),(0,l.kt)("h3",{id:"ecp4is_infinity1"},"ecP4.is_infinity(1)"),(0,l.kt)("p",null,"Tests for ECP4 point equal to infinity"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP4"},(0,l.kt)("code",null,"ECP4")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP4{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(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},"if infinity, else returns 0")))),(0,l.kt)("a",{name:"ECP4+copy"}),(0,l.kt)("h3",{id:"ecp4copyp"},"ecP4.copy(P)"),(0,l.kt)("p",null,"Copy ECP4 point to another ECP4 point"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP4"},(0,l.kt)("code",null,"ECP4")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP4{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"P"),(0,l.kt)("td",{parentName:"tr",align:null},"ECP4 instance")))),(0,l.kt)("a",{name:"ECP4+inf"}),(0,l.kt)("h3",{id:"ecp4inf"},"ecP4.inf()"),(0,l.kt)("p",null,"conditional move of Q to P dependant on d"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP4"},(0,l.kt)("code",null,"ECP4")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP4{"}"}'),"  "),(0,l.kt)("a",{name:"ECP4+cmove"}),(0,l.kt)("h3",{id:"ecp4cmove"},"ecP4.cmove()"),(0,l.kt)("p",null,"conditional move of Q to P dependant on d"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP4"},(0,l.kt)("code",null,"ECP4")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP4{"}"}'),"  "),(0,l.kt)("a",{name:"ECP4+select"}),(0,l.kt)("h3",{id:"ecp4select"},"ecP4.select()"),(0,l.kt)("p",null,"Constant time select from pre-computed table"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP4"},(0,l.kt)("code",null,"ECP4")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP4{"}"}'),"  "),(0,l.kt)("a",{name:"ECP4+equals"}),(0,l.kt)("h3",{id:"ecp4equalsq"},"ecP4.equals(Q)"),(0,l.kt)("p",null,"Test P == Q"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP4"},(0,l.kt)("code",null,"ECP4")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP4{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Q"),(0,l.kt)("td",{parentName:"tr",align:null},"ECP4 instance")))),(0,l.kt)("a",{name:"ECP4+neg"}),(0,l.kt)("h3",{id:"ecp4neg"},"ecP4.neg()"),(0,l.kt)("p",null,"set this=-this"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP4"},(0,l.kt)("code",null,"ECP4")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP4{"}"}'),"  "),(0,l.kt)("a",{name:"ECP4+affine"}),(0,l.kt)("h3",{id:"ecp4affine"},"ecP4.affine()"),(0,l.kt)("p",null,"convert this to affine, from (x,y,z) to (x,y)"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP4"},(0,l.kt)("code",null,"ECP4")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP4{"}"}'),"  "),(0,l.kt)("a",{name:"ECP4+getX"}),(0,l.kt)("h3",{id:"ecp4getx"},"ecP4.getX()"),(0,l.kt)("p",null,"extract affine x as ctx.FP2"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP4"},(0,l.kt)("code",null,"ECP4")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP4{"}"}'),"  "),(0,l.kt)("a",{name:"ECP4+getY"}),(0,l.kt)("h3",{id:"ecp4gety"},"ecP4.getY()"),(0,l.kt)("p",null,"extract affine y as ctx.FP2"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP4"},(0,l.kt)("code",null,"ECP4")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP4{"}"}'),"  "),(0,l.kt)("a",{name:"ECP4+getx"}),(0,l.kt)("h3",{id:"ecp4getx-1"},"ecP4.getx()"),(0,l.kt)("p",null,"extract projective x"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP4"},(0,l.kt)("code",null,"ECP4")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP4{"}"}'),"  "),(0,l.kt)("a",{name:"ECP4+gety"}),(0,l.kt)("h3",{id:"ecp4gety-1"},"ecP4.gety()"),(0,l.kt)("p",null,"extract projective y"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP4"},(0,l.kt)("code",null,"ECP4")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP4{"}"}'),"  "),(0,l.kt)("a",{name:"ECP4+getz"}),(0,l.kt)("h3",{id:"ecp4getz"},"ecP4.getz()"),(0,l.kt)("p",null,"extract projective z"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP4"},(0,l.kt)("code",null,"ECP4")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP4{"}"}'),"  "),(0,l.kt)("a",{name:"ECP4+toBytes"}),(0,l.kt)("h3",{id:"ecp4tobytesb"},"ecP4.toBytes(b)"),(0,l.kt)("p",null,"convert this to byte arrayextract projective x"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP4"},(0,l.kt)("code",null,"ECP4")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP4{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"b"),(0,l.kt)("td",{parentName:"tr",align:null},"byte array output")))),(0,l.kt)("a",{name:"ECP4+toString"}),(0,l.kt)("h3",{id:"ecp4tostring-"},"ecP4.toString() \u21d2"),(0,l.kt)("p",null,"convert this to hex string"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP4"},(0,l.kt)("code",null,"ECP4")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"Returns"),": hex string",(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP4{"}"}'),"  "),(0,l.kt)("a",{name:"ECP4+setxy"}),(0,l.kt)("h3",{id:"ecp4setxyix-iy"},"ecP4.setxy(ix, iy)"),(0,l.kt)("p",null,"set this=(x,y)"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP4"},(0,l.kt)("code",null,"ECP4")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP4{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ix"),(0,l.kt)("td",{parentName:"tr",align:null},"x-value")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"iy"),(0,l.kt)("td",{parentName:"tr",align:null},"y-value")))),(0,l.kt)("a",{name:"ECP4+setx"}),(0,l.kt)("h3",{id:"ecp4setxix"},"ecP4.setx(ix)"),(0,l.kt)("p",null,"set this=(x,.)"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP4"},(0,l.kt)("code",null,"ECP4")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP4{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"ix"),(0,l.kt)("td",{parentName:"tr",align:null},"x-value")))),(0,l.kt)("a",{name:"ECP4+frob"}),(0,l.kt)("h3",{id:"ecp4frob"},"ecP4.frob()"),(0,l.kt)("p",null,"set this","*","=q, where q is Modulus, using Frobenius"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP4"},(0,l.kt)("code",null,"ECP4")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP4{"}"}'),"  "),(0,l.kt)("a",{name:"ECP4+dbl"}),(0,l.kt)("h3",{id:"ecp4dbl"},"ecP4.dbl()"),(0,l.kt)("p",null,"this+=this"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP4"},(0,l.kt)("code",null,"ECP4")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP4{"}"}'),"  "),(0,l.kt)("a",{name:"ECP4+add"}),(0,l.kt)("h3",{id:"ecp4add"},"ecP4.add()"),(0,l.kt)("p",null,"Adds ECP4 instances"),(0,l.kt)("p",null,"param Q ECP4 instance"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP4"},(0,l.kt)("code",null,"ECP4")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP4{"}"}'),"  "),(0,l.kt)("a",{name:"ECP4+sub"}),(0,l.kt)("h3",{id:"ecp4subq"},"ecP4.sub(Q)"),(0,l.kt)("p",null,"Subtracts ECP instance Q  from this"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP4"},(0,l.kt)("code",null,"ECP4")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP4{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Q"),(0,l.kt)("td",{parentName:"tr",align:null},"ECP4 instance")))),(0,l.kt)("a",{name:"ECP4+mul"}),(0,l.kt)("h3",{id:"ecp4mule"},"ecP4.mul(e)"),(0,l.kt)("p",null,"Multiplies an ECP4 instance P by a BIG, side-channel resistant"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP4"},(0,l.kt)("code",null,"ECP4")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP4{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"e"),(0,l.kt)("td",{parentName:"tr",align:null},"BIG number multiplier")))),(0,l.kt)("a",{name:"ECP4.generator"}),(0,l.kt)("h3",{id:"ecp4generator"},"ECP4.generator()"),(0,l.kt)("p",null,"Set group generator"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP4"},(0,l.kt)("code",null,"ECP4")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP4{"}"}'),"  "),(0,l.kt)("a",{name:"ECP4.fromBytes"}),(0,l.kt)("h3",{id:"ecp4frombytesb"},"ECP4.fromBytes(b)"),(0,l.kt)("p",null,"convert from byte array to point"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP4"},(0,l.kt)("code",null,"ECP4")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP4{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"b"),(0,l.kt)("td",{parentName:"tr",align:null},"input byte array")))),(0,l.kt)("a",{name:"ECP4.RHS"}),(0,l.kt)("h3",{id:"ecp4rhsx"},"ECP4.RHS(x)"),(0,l.kt)("p",null,"Calculate RHS of curve equation x^3+B"),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP4"},(0,l.kt)("code",null,"ECP4")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP4{"}"}'),"  "),(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},"Param"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"x"),(0,l.kt)("td",{parentName:"tr",align:null},"x-value")))),(0,l.kt)("a",{name:"ECP4.mul8"}),(0,l.kt)("h3",{id:"ecp4mul8"},"ECP4.mul8()"),(0,l.kt)("p",null,"Calculate P=u0.Q0+u1_Q1+u2_Q2+u3","*","Q3..."),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"Kind"),": static method of ",(0,l.kt)("a",{parentName:"p",href:"#ECP4"},(0,l.kt)("code",null,"ECP4")),(0,l.kt)("br",{parentName:"p"}),"\n",(0,l.kt)("strong",{parentName:"p"},"this"),": ",(0,l.kt)("code",null,'{"{"}ECP4{"}"}')))}d.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/fc6c3e65.d43a3fa2.js b/assets/js/fc6c3e65.d43a3fa2.js
new file mode 100644
index 0000000..2845c75
--- /dev/null
+++ b/assets/js/fc6c3e65.d43a3fa2.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[1383],{3905:(t,e,a)=>{a.d(e,{Zo:()=>o,kt:()=>N});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 p(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 i(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 k=n.createContext({}),m=function(t){var e=n.useContext(k),a=e;return t&&(a="function"==typeof t?t(e):p(p({},e),t)),a},o=function(t){var e=m(t.components);return n.createElement(k.Provider,{value:e},t.children)},u="mdxType",d={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},s=n.forwardRef((function(t,e){var a=t.components,l=t.mdxType,r=t.originalType,k=t.parentName,o=i(t,["components","mdxType","originalType","parentName"]),u=m(a),s=l,N=u["".concat(k,".").concat(s)]||u[s]||d[s]||r;return a?n.createElement(N,p(p({ref:e},o),{},{components:a})):n.createElement(N,p({ref:e},o))}));function N(t,e){var a=arguments,l=e&&e.mdxType;if("string"==typeof t||l){var r=a.length,p=new Array(r);p[0]=s;var i={};for(var k in e)hasOwnProperty.call(e,k)&&(i[k]=e[k]);i.originalType=t,i[u]="string"==typeof t?t:l,p[1]=i;for(var m=2;m<r;m++)p[m]=a[m];return n.createElement.apply(null,p)}return n.createElement.apply(null,a)}s.displayName="MDXCreateElement"},2695:(t,e,a)=>{a.r(e),a.d(e,{assets:()=>o,contentTitle:()=>k,default:()=>s,frontMatter:()=>i,metadata:()=>m,toc:()=>u});var n=a(7462),l=a(3366),r=(a(7294),a(3905)),p=["components"],i={id:"fp16",title:"FP16",sidebar_label:"FP16"},k=void 0,m={unversionedId:"cryptojs/fp16",id:"cryptojs/fp16",title:"FP16",description:"FP16",source:"@site/../docs/cryptojs/fp16.md",sourceDirName:"cryptojs",slug:"/cryptojs/fp16",permalink:"/docs/cryptojs/fp16",draft:!1,tags:[],version:"current",frontMatter:{id:"fp16",title:"FP16",sidebar_label:"FP16"},sidebar:"docs",previous:{title:"FP12",permalink:"/docs/cryptojs/fp12"},next:{title:"FP24",permalink:"/docs/cryptojs/fp24"}},o={},u=[{value:"FP16",id:"fp16",level:2},{value:"new FP16()",id:"new-fp16",level:3},{value:"fP16.reduce()",id:"fp16reduce",level:3},{value:"fP16.norm()",id:"fp16norm",level:3},{value:"fP16.iszilch()",id:"fp16iszilch",level:3},{value:"fP16.isunity()",id:"fp16isunity",level:3},{value:"fP16.cmove(g, d)",id:"fp16cmoveg-d",level:3},{value:"fP16.isreal()",id:"fp16isreal",level:3},{value:"fP16.real()",id:"fp16real",level:3},{value:"fP16.geta()",id:"fp16geta",level:3},{value:"fP16.getb()",id:"fp16getb",level:3},{value:"fP16.equals(x)",id:"fp16equalsx",level:3},{value:"fP16.copy(x)",id:"fp16copyx",level:3},{value:"fP16.zero()",id:"fp16zero",level:3},{value:"fP16.one(x)",id:"fp16onex",level:3},{value:"fP16.set(c, d)",id:"fp16setc-d",level:3},{value:"fP16.seta(c)",id:"fp16setac",level:3},{value:"fP16.neg()",id:"fp16neg",level:3},{value:"fP16.conj()",id:"fp16conj",level:3},{value:"fP16.nconj()",id:"fp16nconj",level:3},{value:"fP16.add(x)",id:"fp16addx",level:3},{value:"fP16.sub(x)",id:"fp16subx",level:3},{value:"fP16.pmul(s)",id:"fp16pmuls",level:3},{value:"fP16.qmul(s)",id:"fp16qmuls",level:3},{value:"fP16.imul(s)",id:"fp16imuls",level:3},{value:"fP16.sqr()",id:"fp16sqr",level:3},{value:"fP16.mul(y)",id:"fp16muly",level:3},{value:"fP16.toString()",id:"fp16tostring",level:3},{value:"fP16.inverse()",id:"fp16inverse",level:3},{value:"fP16.times_i()",id:"fp16times_i",level:3},{value:"fP16.times_i2()",id:"fp16times_i2",level:3},{value:"fP16.times_i4()",id:"fp16times_i4",level:3},{value:"fP16.frob(f)",id:"fp16frobf",level:3},{value:"fP16.pow(e)",id:"fp16powe",level:3},{value:"fP16.xtr_A(w, y, z)",id:"fp16xtr_aw-y-z",level:3},{value:"fP16.xtr_D()",id:"fp16xtr_d",level:3},{value:"fP16.xtr_pow(n)",id:"fp16xtr_pown",level:3},{value:"fP16.xtr_pow2()",id:"fp16xtr_pow2",level:3}],d={toc:u};function s(t){var e=t.components,a=(0,l.Z)(t,p);return(0,r.kt)("wrapper",(0,n.Z)({},d,a,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("a",{name:"FP16"}),(0,r.kt)("h2",{id:"fp16"},"FP16"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": global class",(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP16{"}"}'),"  "),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP16"},"FP16"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#new_FP16_new"},"new FP16()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP16+reduce"},".reduce()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP16+norm"},".norm()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP16+iszilch"},".iszilch()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP16+isunity"},".isunity()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP16+cmove"},".cmove(g, d)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP16+isreal"},".isreal()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP16+real"},".real()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP16+geta"},".geta()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP16+getb"},".getb()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP16+equals"},".equals(x)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP16+copy"},".copy(x)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP16+zero"},".zero()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP16+one"},".one(x)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP16+set"},".set(c, d)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP16+seta"},".seta(c)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP16+neg"},".neg()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP16+conj"},".conj()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP16+nconj"},".nconj()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP16+add"},".add(x)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP16+sub"},".sub(x)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP16+pmul"},".pmul(s)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP16+qmul"},".qmul(s)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP16+imul"},".imul(s)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP16+sqr"},".sqr()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP16+mul"},".mul(y)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP16+toString"},".toString()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP16+inverse"},".inverse()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP16+times_i"},".times_i()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP16+times_i2"},".times_i2()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP16+times_i4"},".times_i4()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP16+frob"},".frob(f)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP16+pow"},".pow(e)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP16+xtr_A"},".xtr_A(w, y, z)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP16+xtr_D"},".xtr_D()")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP16+xtr_pow"},".xtr_pow(n)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"#FP16+xtr_pow2"},".xtr_pow2()"))))),(0,r.kt)("a",{name:"new_FP16_new"}),(0,r.kt)("h3",{id:"new-fp16"},"new FP16()"),(0,r.kt)("p",null,"Creates an instance of FP16."),(0,r.kt)("a",{name:"FP16+reduce"}),(0,r.kt)("h3",{id:"fp16reduce"},"fP16.reduce()"),(0,r.kt)("p",null,"Reduces all components of possibly unreduced FP16 mod Modulus"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP16"},(0,r.kt)("code",null,"FP16")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP16{"}"}'),"  "),(0,r.kt)("a",{name:"FP16+norm"}),(0,r.kt)("h3",{id:"fp16norm"},"fP16.norm()"),(0,r.kt)("p",null,"Normalises the components of an FP16"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP16"},(0,r.kt)("code",null,"FP16")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP16{"}"}'),"  "),(0,r.kt)("a",{name:"FP16+iszilch"}),(0,r.kt)("h3",{id:"fp16iszilch"},"fP16.iszilch()"),(0,r.kt)("p",null,"Tests for FP16 equal to zero"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP16"},(0,r.kt)("code",null,"FP16")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP16{"}"}'),"  "),(0,r.kt)("a",{name:"FP16+isunity"}),(0,r.kt)("h3",{id:"fp16isunity"},"fP16.isunity()"),(0,r.kt)("p",null,"Tests for FP16 equal to unity"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP16"},(0,r.kt)("code",null,"FP16")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP16{"}"}'),"  "),(0,r.kt)("a",{name:"FP16+cmove"}),(0,r.kt)("h3",{id:"fp16cmoveg-d"},"fP16.cmove(g, d)"),(0,r.kt)("p",null,"Conditional copy of FP16 number"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP16"},(0,r.kt)("code",null,"FP16")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP16{"}"}'),"  "),(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},"Param"),(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},"g"),(0,r.kt)("td",{parentName:"tr",align:null},"FP16 instance")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"d"),(0,r.kt)("td",{parentName:"tr",align:null},"copy depends on this value")))),(0,r.kt)("a",{name:"FP16+isreal"}),(0,r.kt)("h3",{id:"fp16isreal"},"fP16.isreal()"),(0,r.kt)("p",null,"test is w real? That is in a+ib test b is zero"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP16"},(0,r.kt)("code",null,"FP16")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP16{"}"}'),"  "),(0,r.kt)("a",{name:"FP16+real"}),(0,r.kt)("h3",{id:"fp16real"},"fP16.real()"),(0,r.kt)("p",null,"extract real part a"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP16"},(0,r.kt)("code",null,"FP16")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP16{"}"}'),"  "),(0,r.kt)("a",{name:"FP16+geta"}),(0,r.kt)("h3",{id:"fp16geta"},"fP16.geta()"),(0,r.kt)("p",null,"extract a from this"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP16"},(0,r.kt)("code",null,"FP16")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP16{"}"}'),"  "),(0,r.kt)("a",{name:"FP16+getb"}),(0,r.kt)("h3",{id:"fp16getb"},"fP16.getb()"),(0,r.kt)("p",null,"extract b from this"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP16"},(0,r.kt)("code",null,"FP16")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP16{"}"}'),"  "),(0,r.kt)("a",{name:"FP16+equals"}),(0,r.kt)("h3",{id:"fp16equalsx"},"fP16.equals(x)"),(0,r.kt)("p",null,"Tests for equality of two FP16s"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP16"},(0,r.kt)("code",null,"FP16")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP16{"}"}'),"  "),(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},"Param"),(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},"x"),(0,r.kt)("td",{parentName:"tr",align:null},"FP16 instance to compare")))),(0,r.kt)("a",{name:"FP16+copy"}),(0,r.kt)("h3",{id:"fp16copyx"},"fP16.copy(x)"),(0,r.kt)("p",null,"Copy FP16 to another FP16"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP16"},(0,r.kt)("code",null,"FP16")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP16{"}"}'),"  "),(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},"Param"),(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},"x"),(0,r.kt)("td",{parentName:"tr",align:null},"FP16 instance to be copied")))),(0,r.kt)("a",{name:"FP16+zero"}),(0,r.kt)("h3",{id:"fp16zero"},"fP16.zero()"),(0,r.kt)("p",null,"Set FP16 to zero"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP16"},(0,r.kt)("code",null,"FP16")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP16{"}"}'),"  "),(0,r.kt)("a",{name:"FP16+one"}),(0,r.kt)("h3",{id:"fp16onex"},"fP16.one(x)"),(0,r.kt)("p",null,"Set FP16 to unity"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP16"},(0,r.kt)("code",null,"FP16")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP16{"}"}'),"  "),(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},"Param"),(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},"x"),(0,r.kt)("td",{parentName:"tr",align:null},"FP16 instance to be set to one")))),(0,r.kt)("a",{name:"FP16+set"}),(0,r.kt)("h3",{id:"fp16setc-d"},"fP16.set(c, d)"),(0,r.kt)("p",null,"Set FP16 from two FP8 values"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP16"},(0,r.kt)("code",null,"FP16")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP16{"}"}'),"  "),(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},"Param"),(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},"c"),(0,r.kt)("td",{parentName:"tr",align:null},"FP8 instance")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"d"),(0,r.kt)("td",{parentName:"tr",align:null},"FP8 instance")))),(0,r.kt)("a",{name:"FP16+seta"}),(0,r.kt)("h3",{id:"fp16setac"},"fP16.seta(c)"),(0,r.kt)("p",null,"Set FP16 from one FP8 value"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP16"},(0,r.kt)("code",null,"FP16")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP16{"}"}'),"  "),(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},"Param"),(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},"c"),(0,r.kt)("td",{parentName:"tr",align:null},"FP8 instance")))),(0,r.kt)("a",{name:"FP16+neg"}),(0,r.kt)("h3",{id:"fp16neg"},"fP16.neg()"),(0,r.kt)("p",null,"this=-this"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP16"},(0,r.kt)("code",null,"FP16")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP16{"}"}'),"  "),(0,r.kt)("a",{name:"FP16+conj"}),(0,r.kt)("h3",{id:"fp16conj"},"fP16.conj()"),(0,r.kt)("p",null,"Conjugation of FP16"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP16"},(0,r.kt)("code",null,"FP16")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP16{"}"}'),"  "),(0,r.kt)("a",{name:"FP16+nconj"}),(0,r.kt)("h3",{id:"fp16nconj"},"fP16.nconj()"),(0,r.kt)("p",null,"Negative conjugation of FP16"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP16"},(0,r.kt)("code",null,"FP16")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP16{"}"}'),"  "),(0,r.kt)("a",{name:"FP16+add"}),(0,r.kt)("h3",{id:"fp16addx"},"fP16.add(x)"),(0,r.kt)("p",null,"addition of two FP16s"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP16"},(0,r.kt)("code",null,"FP16")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP16{"}"}'),"  "),(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},"Param"),(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},"x"),(0,r.kt)("td",{parentName:"tr",align:null},"FP16 instance")))),(0,r.kt)("a",{name:"FP16+sub"}),(0,r.kt)("h3",{id:"fp16subx"},"fP16.sub(x)"),(0,r.kt)("p",null,"subtraction of two FP16s"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP16"},(0,r.kt)("code",null,"FP16")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP16{"}"}'),"  "),(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},"Param"),(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},"x"),(0,r.kt)("td",{parentName:"tr",align:null},"FP16 instance")))),(0,r.kt)("a",{name:"FP16+pmul"}),(0,r.kt)("h3",{id:"fp16pmuls"},"fP16.pmul(s)"),(0,r.kt)("p",null,"Multiplication of an FP16 by an FP8"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP16"},(0,r.kt)("code",null,"FP16")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP16{"}"}'),"  "),(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},"Param"),(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},"s"),(0,r.kt)("td",{parentName:"tr",align:null},"FP8 instance")))),(0,r.kt)("a",{name:"FP16+qmul"}),(0,r.kt)("h3",{id:"fp16qmuls"},"fP16.qmul(s)"),(0,r.kt)("p",null,"Multiplication of an FP16 by an FP2"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP16"},(0,r.kt)("code",null,"FP16")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP16{"}"}'),"  "),(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},"Param"),(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},"s"),(0,r.kt)("td",{parentName:"tr",align:null},"FP2 instance")))),(0,r.kt)("a",{name:"FP16+imul"}),(0,r.kt)("h3",{id:"fp16imuls"},"fP16.imul(s)"),(0,r.kt)("p",null,"Multiplication of an FP16 by a small integer"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP16"},(0,r.kt)("code",null,"FP16")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP16{"}"}'),"  "),(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},"Param"),(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},"s"),(0,r.kt)("td",{parentName:"tr",align:null},"integer")))),(0,r.kt)("a",{name:"FP16+sqr"}),(0,r.kt)("h3",{id:"fp16sqr"},"fP16.sqr()"),(0,r.kt)("p",null,"Fast Squaring of an FP16"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP16"},(0,r.kt)("code",null,"FP16")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP16{"}"}'),"  "),(0,r.kt)("a",{name:"FP16+mul"}),(0,r.kt)("h3",{id:"fp16muly"},"fP16.mul(y)"),(0,r.kt)("p",null,"Full unconditional Multiplication of two FP16s"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP16"},(0,r.kt)("code",null,"FP16")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP16{"}"}'),"  "),(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},"Param"),(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},"y"),(0,r.kt)("td",{parentName:"tr",align:null},"FP16 instance, the multiplier")))),(0,r.kt)("a",{name:"FP16+toString"}),(0,r.kt)("h3",{id:"fp16tostring"},"fP16.toString()"),(0,r.kt)("p",null,"convert this to hex string"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP16"},(0,r.kt)("code",null,"FP16")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP16{"}"}'),"  "),(0,r.kt)("a",{name:"FP16+inverse"}),(0,r.kt)("h3",{id:"fp16inverse"},"fP16.inverse()"),(0,r.kt)("p",null,"Inverting an FP16"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP16"},(0,r.kt)("code",null,"FP16")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP16{"}"}'),"  "),(0,r.kt)("a",{name:"FP16+times_i"}),(0,r.kt)("h3",{id:"fp16times_i"},"fP16.times_i()"),(0,r.kt)("p",null,"multiplies an FP16 instance by irreducible polynomial sqrt(1+sqrt(-1))"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP16"},(0,r.kt)("code",null,"FP16")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP16{"}"}'),"  "),(0,r.kt)("a",{name:"FP16+times_i2"}),(0,r.kt)("h3",{id:"fp16times_i2"},"fP16.times_i2()"),(0,r.kt)("p",null,"multiplies an FP16 instance by irreducible polynomial (1+sqrt(-1))"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP16"},(0,r.kt)("code",null,"FP16")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP16{"}"}'),"  "),(0,r.kt)("a",{name:"FP16+times_i4"}),(0,r.kt)("h3",{id:"fp16times_i4"},"fP16.times_i4()"),(0,r.kt)("p",null,"multiplies an FP16 instance by irreducible polynomial (1+sqrt(-1))"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP16"},(0,r.kt)("code",null,"FP16")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP16{"}"}'),"  "),(0,r.kt)("a",{name:"FP16+frob"}),(0,r.kt)("h3",{id:"fp16frobf"},"fP16.frob(f)"),(0,r.kt)("p",null,"Raises an FP16 to the power of the internal modulus p, using the Frobenius"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP16"},(0,r.kt)("code",null,"FP16")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP16{"}"}'),"  "),(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},"Param"),(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},"f"),(0,r.kt)("td",{parentName:"tr",align:null},"Modulus")))),(0,r.kt)("a",{name:"FP16+pow"}),(0,r.kt)("h3",{id:"fp16powe"},"fP16.pow(e)"),(0,r.kt)("p",null,"Raises an FP16 to the power of a BIG"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP16"},(0,r.kt)("code",null,"FP16")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP16{"}"}'),"  "),(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},"Param"),(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},"e"),(0,r.kt)("td",{parentName:"tr",align:null},"BIG instance exponent")))),(0,r.kt)("a",{name:"FP16+xtr_A"}),(0,r.kt)("h3",{id:"fp16xtr_aw-y-z"},"fP16.xtr_A(w, y, z)"),(0,r.kt)("p",null,"Calculates the XTR addition function r=w_x-conj(x)_y+z"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP16"},(0,r.kt)("code",null,"FP16")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP16{"}"}'),"  "),(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},"Param"),(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},"w"),(0,r.kt)("td",{parentName:"tr",align:null},"FP16 instance")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"y"),(0,r.kt)("td",{parentName:"tr",align:null},"FP16 instance")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"z"),(0,r.kt)("td",{parentName:"tr",align:null},"FP16 instance")))),(0,r.kt)("a",{name:"FP16+xtr_D"}),(0,r.kt)("h3",{id:"fp16xtr_d"},"fP16.xtr_D()"),(0,r.kt)("p",null,"Calculates the XTR doubling function r=x^2-2","*","conj(x)"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP16"},(0,r.kt)("code",null,"FP16")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP16{"}"}'),"  "),(0,r.kt)("a",{name:"FP16+xtr_pow"}),(0,r.kt)("h3",{id:"fp16xtr_pown"},"fP16.xtr_pow(n)"),(0,r.kt)("p",null,"Calculates FP16 trace of an FP16 raised to the power of a BIG number"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP16"},(0,r.kt)("code",null,"FP16")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP16{"}"}'),"  "),(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},"Param"),(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},"n"),(0,r.kt)("td",{parentName:"tr",align:null},"Big number")))),(0,r.kt)("a",{name:"FP16+xtr_pow2"}),(0,r.kt)("h3",{id:"fp16xtr_pow2"},"fP16.xtr_pow2()"),(0,r.kt)("p",null,"Calculates FP16 trace of c^a.d^b, where c and d are derived from FP16 traces of FP16s"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Kind"),": instance method of ",(0,r.kt)("a",{parentName:"p",href:"#FP16"},(0,r.kt)("code",null,"FP16")),(0,r.kt)("br",{parentName:"p"}),"\n",(0,r.kt)("strong",{parentName:"p"},"this"),": ",(0,r.kt)("code",null,'{"{"}FP16{"}"}')))}s.isMDXComponent=!0}}]);
\ No newline at end of file
diff --git a/assets/js/main.98efe6b5.js b/assets/js/main.98efe6b5.js
new file mode 100644
index 0000000..3e8ab77
--- /dev/null
+++ b/assets/js/main.98efe6b5.js
@@ -0,0 +1,2 @@
+/*! For license information please see main.98efe6b5.js.LICENSE.txt */
+(self.webpackChunk=self.webpackChunk||[]).push([[179],{8726:(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 l=n(7294),s=n(5697),u=[],c=[];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 f(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 p(e,t){return l.createElement((n=e)&&n.__esModule?n.default:n,t);var n}function m(e,t){var d,f;if(!t.loading)throw new Error("react-loadable requires a `loading` component");var m=i({loader:null,loading:null,delay:200,timeout:null,render:p,webpack:null,modules:null},t),h=null;function g(){return h||(h=e(m.loader)),h.promise}return u.push(g),"function"==typeof m.webpack&&c.push((function(){if((0,m.webpack)().every((function(e){return void 0!==e&&void 0!==n.m[e]})))return g()})),f=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}),h=e(m.loader),r._loadModule()})),g(),r.state={error:h.error,pastDelay:!1,timedOut:!1,loading:h.loading,loaded:h.loaded},r}r(n,t),n.preload=function(){return g()};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)})),h.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:h.error,loaded:h.loaded,loading:h.loading}),e._clearTimeouts()};h.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?l.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}(l.Component),o(d,"contextTypes",{loadable:s.shape({report:s.func.isRequired})}),f}function h(e){return m(d,e)}h.Map=function(e){if("function"!=typeof e.render)throw new Error("LoadableMap requires a `render(loaded, props)` function");return m(f,e)};var g=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 l.Children.only(this.props.children)},t}(l.Component);function v(e){for(var t=[];e.length;){var n=e.pop();t.push(n())}return Promise.all(t).then((function(){if(e.length)return v(e)}))}o(g,"propTypes",{report:s.func.isRequired}),o(g,"childContextTypes",{loadable:s.shape({report:s.func.isRequired}).isRequired}),h.Capture=g,h.preloadAll=function(){return new Promise((function(e,t){v(u).then(e,t)}))},h.preloadReady=function(){return new Promise((function(e,t){v(c).then(e,e)}))},e.exports=h},723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),a=n(7462),o=n(8726),i=n.n(o),l=n(6887);const s={"01cea0f3":[function(){return n.e(9449).then(n.bind(n,1316))},"@site/../docs/cryptojs/amcl-javascript-api.md",1316],"04b79425":[function(){return n.e(2161).then(n.bind(n,8434))},"@site/../docs/downloads.md",8434],"07d4c24f":[function(){return n.e(5962).then(n.t.bind(n,5804,19))},"/app/website/.docusaurus/docusaurus-plugin-content-blog/blog/plugin-route-context-module-100.json",5804],"08c494e0":[function(){return n.e(6944).then(n.bind(n,2721))},"@site/../docs/dta-details/plugin-dev-guide.md",2721],"0aae0fe2":[function(){return n.e(2569).then(n.bind(n,3579))},"@site/../docs/d-ta-api.md",3579],"0f3e38c0":[function(){return n.e(9839).then(n.bind(n,7094))},"@site/../docs/cryptojs/dbig.md",7094],"1056678c":[function(){return n.e(7454).then(n.bind(n,9354))},"@site/../docs/cryptojs/fp24.md",9354],17896441:[function(){return Promise.all([n.e(532),n.e(1271),n.e(7918)]).then(n.bind(n,9055))},"@theme/DocItem",9055],"1be78505":[function(){return Promise.all([n.e(532),n.e(9514)]).then(n.bind(n,9963))},"@theme/DocPage",9963],"1f3f8b8d":[function(){return n.e(3590).then(n.bind(n,6640))},"@site/../docs/cryptojs/fp4.md",6640],"2034d24c":[function(){return n.e(4075).then(n.bind(n,9661))},"@site/../docs/cryptojs/fp.md",9661],"2042cb3f":[function(){return n.e(1599).then(n.bind(n,21))},"@site/../docs/cryptojs/hash256.md",21],"20cdd429":[function(){return n.e(4926).then(n.bind(n,8605))},"@site/../docs/cryptojs/fp48.md",8605],"2374c105":[function(){return n.e(6755).then(n.bind(n,842))},"@site/../docs/cryptojs/fp8.md",842],"263768e1":[function(){return n.e(3074).then(n.bind(n,1604))},"@site/../docs/dta-details/identity-documents.md",1604],"2797bd38":[function(){return n.e(4913).then(n.bind(n,7525))},"@site/../docs/amcl-c-api-2.0.0.md",7525],"2dbc89af":[function(){return n.e(9753).then(n.bind(n,2401))},"@site/../docs/cryptojs/rand.md",2401],"31ac37dd":[function(){return n.e(4054).then(n.bind(n,2279))},"@site/blog/2019-06-10-miss-me.md?truncated=true",2279],"3512b277":[function(){return n.e(9602).then(n.bind(n,1596))},"@site/../docs/cryptojs/hash512.md",1596],"3a69e0cd":[function(){return n.e(7735).then(n.bind(n,2727))},"@site/src/pages/index.js-old.js",2727],"4200b1a9":[function(){return n.e(866).then(n.t.bind(n,4612,19))},"~blog/blog/blog-archive-80c.json",4612],42231959:[function(){return n.e(4975).then(n.bind(n,5193))},"@site/../docs/cryptojs/bls192.md",5193],"492e7179":[function(){return n.e(6409).then(n.bind(n,2979))},"@site/../docs/dta-details/encrypted-envelope.md",2979],"510581aa":[function(){return n.e(1478).then(n.t.bind(n,3769,19))},"/app/website/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",3769],"5400f75f":[function(){return n.e(1605).then(n.bind(n,3394))},"@site/../docs/cryptojs/ecp8.md",3394],"54a18fe8":[function(){return n.e(5580).then(n.bind(n,6220))},"@site/../docs/cryptojs/uint64.md",6220],"598fef50":[function(){return n.e(4279).then(n.bind(n,6499))},"@site/../docs/cryptojs/sha3.md",6499],"5abf2286":[function(){return n.e(9215).then(n.bind(n,5086))},"@site/blog/2019-06-10-miss-me.md",5086],"5e9f5e1a":[function(){return Promise.resolve().then(n.bind(n,6809))},"@generated/docusaurus.config",6809],"63bfaece":[function(){return n.e(4758).then(n.bind(n,764))},"@site/../docs/dta-details/authentication.md",764],"6b470099":[function(){return n.e(8483).then(n.t.bind(n,5745,19))},"/app/website/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",5745],"6b73894e":[function(){return n.e(4441).then(n.bind(n,6394))},"@site/../docs/dta-details/quickstart.md",6394],"6d6ade50":[function(){return n.e(9809).then(n.bind(n,1671))},"@site/../docs/cryptojs/bls.md",1671],"76b96e45":[function(){return n.e(761).then(n.bind(n,6738))},"@site/../docs/cryptojs/mpin192.md",6738],"76b9cd24":[function(){return n.e(9784).then(n.bind(n,1065))},"@site/../docs/amcl-javascript-api.md",1065],"7e37206e":[function(){return n.e(2740).then(n.bind(n,5401))},"@site/src/pages/help.js",5401],"83ec89a5":[function(){return n.e(8421).then(n.bind(n,6269))},"@site/../docs/cryptojs/big.md",6269],"899bffd7":[function(){return n.e(4356).then(n.bind(n,6059))},"@site/../docs/cryptojs/rsa.md",6059],"8cfa73c0":[function(){return n.e(2144).then(n.bind(n,845))},"@site/../docs/zkp-mfa-api.md",845],"8d622fb0":[function(){return n.e(3678).then(n.bind(n,6232))},"@site/../docs/dta-details/ipfs.md",6232],"8d8b4e4d":[function(){return n.e(626).then(n.bind(n,1056))},"@site/../docs/cryptojs/gcm.md",1056],"928c7886":[function(){return n.e(9009).then(n.bind(n,3122))},"@site/../docs/cryptojs/bls256.md",3122],"935f2afb":[function(){return n.e(53).then(n.t.bind(n,1109,19))},"~docs/default/version-current-metadata-prop-751.json",1109],"947b45f9":[function(){return n.e(722).then(n.bind(n,2205))},"@site/../docs/milagro-intro.md",2205],"948a189c":[function(){return n.e(4655).then(n.bind(n,3823))},"@site/../docs/support.md",3823],"95b96bb9":[function(){return n.e(3561).then(n.t.bind(n,4577,19))},"~blog/blog/blog-post-list-prop-blog.json",4577],"9e4087bc":[function(){return n.e(3608).then(n.bind(n,3169))},"@theme/BlogArchivePage",3169],a6aa9e1f:[function(){return Promise.all([n.e(532),n.e(1271),n.e(8218),n.e(3089)]).then(n.bind(n,3269))},"@theme/BlogListPage",3269],a6f36191:[function(){return n.e(6525).then(n.bind(n,8226))},"@site/../docs/cryptojs/hash384.md",8226],a7098721:[function(){return n.e(1050).then(n.t.bind(n,6615,19))},"~blog/blog/blog-c06.json",6615],aa39f157:[function(){return n.e(8278).then(n.bind(n,79))},"@site/../docs/cryptojs/ecp.md",79],abda4bac:[function(){return n.e(875).then(n.bind(n,9095))},"@site/../docs/cryptojs/pair256.md",9095],b0cc1135:[function(){return n.e(1426).then(n.bind(n,5316))},"@site/../docs/milagro-crypto.md",5316],b1f0173d:[function(){return n.e(6605).then(n.bind(n,4522))},"@site/../docs/milagro-design.md",4522],b8f83f70:[function(){return n.e(3972).then(n.bind(n,9520))},"@site/../docs/cryptojs/pair192.md",9520],c11c5242:[function(){return n.e(1838).then(n.bind(n,5845))},"@site/../docs/d-ta-overview.md",5845],c2075afd:[function(){return n.e(9290).then(n.bind(n,1196))},"@site/../docs/cryptojs/ecp2.md",1196],c21e361c:[function(){return n.e(9634).then(n.bind(n,1475))},"@site/../docs/dta-details/api.md",1475],c4f5d8e4:[function(){return Promise.all([n.e(5423),n.e(4195)]).then(n.bind(n,2841))},"@site/src/pages/index.js",2841],c511d3db:[function(){return n.e(1334).then(n.bind(n,5467))},"@site/../docs/cryptojs/mpin256.md",5467],c5928a60:[function(){return n.e(1370).then(n.bind(n,351))},"@site/../docs/cryptojs/pair.md",351],ccb1012d:[function(){return n.e(8145).then(n.bind(n,5797))},"@site/../docs/mpc-api-0.1.md",5797],ccc49370:[function(){return Promise.all([n.e(532),n.e(1271),n.e(8218),n.e(6103)]).then(n.bind(n,5203))},"@theme/BlogPostPage",5203],d4bf336d:[function(){return n.e(6401).then(n.bind(n,3954))},"@site/../docs/cryptojs/aes.md",3954],da541cae:[function(){return n.e(4591).then(n.bind(n,3353))},"@site/../docs/dta-details/d-ta-plugins.md",3353],dd16e380:[function(){return n.e(9779).then(n.bind(n,7146))},"@site/../docs/cryptojs/ecdh.md",7146],e12d15a2:[function(){return n.e(4941).then(n.bind(n,2126))},"@site/../docs/cryptojs/mpin.md",2126],e2e92e73:[function(){return n.e(2050).then(n.bind(n,6788))},"@site/../docs/dta-details/configuration.md",6788],e361dc62:[function(){return n.e(5309).then(n.bind(n,3848))},"@site/../docs/cryptojs/fp2.md",3848],e577dddf:[function(){return n.e(4809).then(n.bind(n,894))},"@site/../docs/amcl-overview.md",894],e6851893:[function(){return n.e(8732).then(n.bind(n,3261))},"@site/../docs/milagro-protocols.md",3261],ef5324a4:[function(){return n.e(1514).then(n.bind(n,4750))},"@site/../docs/zkp-mfa-overview.md",4750],f2723ab8:[function(){return n.e(2517).then(n.bind(n,7149))},"@site/../docs/cryptojs/ff.md",7149],f2859be3:[function(){return n.e(8108).then(n.bind(n,9875))},"@site/../docs/contributor-guide.md",9875],f498ea0f:[function(){return n.e(9880).then(n.bind(n,3060))},"@site/../docs/cryptojs/fp12.md",3060],f6345755:[function(){return n.e(3222).then(n.bind(n,2847))},"@site/../docs/cryptojs/ecp4.md",2847],fc6c3e65:[function(){return n.e(1383).then(n.bind(n,2695))},"@site/../docs/cryptojs/fp16.md",2695]};function u(e){var t=e.error,n=e.retry,a=e.pastDelay;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 c=n(9670),d=n(226);function f(e,t){if("*"===e)return i()({loading:u,loader:function(){return n.e(4972).then(n.bind(n,4972))},modules:["@theme/NotFound"],webpack:function(){return[4972]},render:function(e,t){var n=e.default;return r.createElement(d.z,{value:{plugin:{name:"native",id:"default"}}},r.createElement(n,t))}});var o=l[e+"-"+t],f={},p=[],m=[],h=(0,c.Z)(o);return Object.entries(h).forEach((function(e){var t=e[0],n=e[1],r=s[n];r&&(f[t]=r[0],p.push(r[1]),m.push(r[2]))})),i().Map({loading:u,loader:f,modules:p,webpack:function(){return m},render:function(t,n){var i=JSON.parse(JSON.stringify(o));Object.entries(t).forEach((function(t){var n=t[0],r=t[1],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((function(e){return"default"!==e})).forEach((function(e){a[e]=r[e]}));var o=i,l=n.split(".");l.slice(0,-1).forEach((function(e){o=o[e]})),o[l[l.length-1]]=a}));var l=i.__comp;delete i.__comp;var s=i.__context;return delete i.__context,r.createElement(d.z,{value:s},r.createElement(l,(0,a.Z)({},i,n)))}})}const p=[{path:"/blog",component:f("/blog","c97"),exact:!0},{path:"/blog/2019/06/10/miss-me",component:f("/blog/2019/06/10/miss-me","c3b"),exact:!0},{path:"/blog/archive",component:f("/blog/archive","bb4"),exact:!0},{path:"/help",component:f("/help","bc4"),exact:!0},{path:"/index.js-old",component:f("/index.js-old","7d9"),exact:!0},{path:"/docs",component:f("/docs","5ed"),routes:[{path:"/docs/amcl-c-api-2.0.0",component:f("/docs/amcl-c-api-2.0.0","cc2"),exact:!0,sidebar:"docs"},{path:"/docs/amcl-javascript-api",component:f("/docs/amcl-javascript-api","0fd"),exact:!0},{path:"/docs/amcl-overview",component:f("/docs/amcl-overview","f59"),exact:!0,sidebar:"docs"},{path:"/docs/contributor-guide",component:f("/docs/contributor-guide","44a"),exact:!0,sidebar:"docs"},{path:"/docs/cryptojs/aes",component:f("/docs/cryptojs/aes","f56"),exact:!0,sidebar:"docs"},{path:"/docs/cryptojs/amcl-javascript-api",component:f("/docs/cryptojs/amcl-javascript-api","7ae"),exact:!0,sidebar:"docs"},{path:"/docs/cryptojs/big",component:f("/docs/cryptojs/big","0d7"),exact:!0,sidebar:"docs"},{path:"/docs/cryptojs/bls",component:f("/docs/cryptojs/bls","96d"),exact:!0,sidebar:"docs"},{path:"/docs/cryptojs/bls192",component:f("/docs/cryptojs/bls192","d4a"),exact:!0,sidebar:"docs"},{path:"/docs/cryptojs/bls256",component:f("/docs/cryptojs/bls256","5b3"),exact:!0,sidebar:"docs"},{path:"/docs/cryptojs/dbig",component:f("/docs/cryptojs/dbig","946"),exact:!0,sidebar:"docs"},{path:"/docs/cryptojs/ecdh",component:f("/docs/cryptojs/ecdh","337"),exact:!0,sidebar:"docs"},{path:"/docs/cryptojs/ecp",component:f("/docs/cryptojs/ecp","267"),exact:!0,sidebar:"docs"},{path:"/docs/cryptojs/ecp2",component:f("/docs/cryptojs/ecp2","2f4"),exact:!0,sidebar:"docs"},{path:"/docs/cryptojs/ecp4",component:f("/docs/cryptojs/ecp4","eb9"),exact:!0,sidebar:"docs"},{path:"/docs/cryptojs/ecp8",component:f("/docs/cryptojs/ecp8","f14"),exact:!0,sidebar:"docs"},{path:"/docs/cryptojs/ff",component:f("/docs/cryptojs/ff","0ec"),exact:!0,sidebar:"docs"},{path:"/docs/cryptojs/fp",component:f("/docs/cryptojs/fp","452"),exact:!0,sidebar:"docs"},{path:"/docs/cryptojs/fp12",component:f("/docs/cryptojs/fp12","524"),exact:!0,sidebar:"docs"},{path:"/docs/cryptojs/fp16",component:f("/docs/cryptojs/fp16","273"),exact:!0,sidebar:"docs"},{path:"/docs/cryptojs/fp2",component:f("/docs/cryptojs/fp2","986"),exact:!0,sidebar:"docs"},{path:"/docs/cryptojs/fp24",component:f("/docs/cryptojs/fp24","919"),exact:!0,sidebar:"docs"},{path:"/docs/cryptojs/fp4",component:f("/docs/cryptojs/fp4","b32"),exact:!0,sidebar:"docs"},{path:"/docs/cryptojs/fp48",component:f("/docs/cryptojs/fp48","90d"),exact:!0,sidebar:"docs"},{path:"/docs/cryptojs/fp8",component:f("/docs/cryptojs/fp8","49e"),exact:!0,sidebar:"docs"},{path:"/docs/cryptojs/gcm",component:f("/docs/cryptojs/gcm","864"),exact:!0,sidebar:"docs"},{path:"/docs/cryptojs/hash256",component:f("/docs/cryptojs/hash256","a81"),exact:!0,sidebar:"docs"},{path:"/docs/cryptojs/hash384",component:f("/docs/cryptojs/hash384","47c"),exact:!0,sidebar:"docs"},{path:"/docs/cryptojs/hash512",component:f("/docs/cryptojs/hash512","78f"),exact:!0,sidebar:"docs"},{path:"/docs/cryptojs/mpin",component:f("/docs/cryptojs/mpin","7df"),exact:!0,sidebar:"docs"},{path:"/docs/cryptojs/mpin192",component:f("/docs/cryptojs/mpin192","d7b"),exact:!0,sidebar:"docs"},{path:"/docs/cryptojs/mpin256",component:f("/docs/cryptojs/mpin256","432"),exact:!0,sidebar:"docs"},{path:"/docs/cryptojs/pair",component:f("/docs/cryptojs/pair","6dd"),exact:!0,sidebar:"docs"},{path:"/docs/cryptojs/pair192",component:f("/docs/cryptojs/pair192","ea5"),exact:!0,sidebar:"docs"},{path:"/docs/cryptojs/pair256",component:f("/docs/cryptojs/pair256","f49"),exact:!0,sidebar:"docs"},{path:"/docs/cryptojs/rand",component:f("/docs/cryptojs/rand","aa0"),exact:!0,sidebar:"docs"},{path:"/docs/cryptojs/rsa",component:f("/docs/cryptojs/rsa","340"),exact:!0,sidebar:"docs"},{path:"/docs/cryptojs/sha3",component:f("/docs/cryptojs/sha3","054"),exact:!0,sidebar:"docs"},{path:"/docs/cryptojs/unit64",component:f("/docs/cryptojs/unit64","662"),exact:!0,sidebar:"docs"},{path:"/docs/d-ta-api",component:f("/docs/d-ta-api","5fc"),exact:!0},{path:"/docs/d-ta-overview",component:f("/docs/d-ta-overview","0a9"),exact:!0,sidebar:"docs"},{path:"/docs/downloads",component:f("/docs/downloads","aff"),exact:!0,sidebar:"docs"},{path:"/docs/dta-details/api",component:f("/docs/dta-details/api","8e4"),exact:!0,sidebar:"docs"},{path:"/docs/dta-details/authentication",component:f("/docs/dta-details/authentication","ebe"),exact:!0,sidebar:"docs"},{path:"/docs/dta-details/configuration",component:f("/docs/dta-details/configuration","084"),exact:!0,sidebar:"docs"},{path:"/docs/dta-details/encrypted-envelope",component:f("/docs/dta-details/encrypted-envelope","055"),exact:!0,sidebar:"docs"},{path:"/docs/dta-details/identity-documents",component:f("/docs/dta-details/identity-documents","d77"),exact:!0,sidebar:"docs"},{path:"/docs/dta-details/ipfs",component:f("/docs/dta-details/ipfs","5f1"),exact:!0,sidebar:"docs"},{path:"/docs/dta-details/plugin-dev-guide",component:f("/docs/dta-details/plugin-dev-guide","8fe"),exact:!0},{path:"/docs/dta-details/plugins-overview",component:f("/docs/dta-details/plugins-overview","d97"),exact:!0,sidebar:"docs"},{path:"/docs/dta-details/quickstart",component:f("/docs/dta-details/quickstart","932"),exact:!0,sidebar:"docs"},{path:"/docs/milagro-crypto",component:f("/docs/milagro-crypto","834"),exact:!0,sidebar:"docs"},{path:"/docs/milagro-design",component:f("/docs/milagro-design","bde"),exact:!0,sidebar:"docs"},{path:"/docs/milagro-intro",component:f("/docs/milagro-intro","183"),exact:!0,sidebar:"docs"},{path:"/docs/milagro-protocols",component:f("/docs/milagro-protocols","bdb"),exact:!0,sidebar:"docs"},{path:"/docs/mpc-api-0.1",component:f("/docs/mpc-api-0.1","e9b"),exact:!0,sidebar:"docs"},{path:"/docs/support",component:f("/docs/support","a1f"),exact:!0,sidebar:"docs"},{path:"/docs/zkp-mfa-api",component:f("/docs/zkp-mfa-api","8e2"),exact:!0,sidebar:"docs"},{path:"/docs/zkp-mfa-overview",component:f("/docs/zkp-mfa-overview","d7e"),exact:!0,sidebar:"docs"}]},{path:"/",component:f("/","ddd"),exact:!0},{path:"*",component:f("*")}]},8934:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,t:()=>o});var r=n(7294),a=r.createContext(!1);function o(e){var t=e.children,n=(0,r.useState)(!1),o=n[0],i=n[1];return(0,r.useEffect)((function(){i(!0)}),[]),r.createElement(a.Provider,{value:o},t)}},9383:(e,t,n)=>{"use strict";var r=n(7294),a=n(3935),o=n(3727),i=n(405),l=n(412);const s=[n(2497),n(3310),n(8320),n(7253)];var u=n(723),c=n(6550),d=n(8790);function f(e){var t=e.children;return r.createElement(r.Fragment,null,t)}var p=n(7462),m=n(5742),h=n(2263),g=n(4996),v=n(6668),b=n(1944),y=n(4711),w=n(9727),k=n(3320),E=n(197);function S(){var e=(0,h.Z)().i18n,t=e.defaultLocale,n=e.localeConfigs,a=(0,y.l)();return r.createElement(m.Z,null,Object.entries(n).map((function(e){var t=e[0],n=e[1].htmlLang;return r.createElement("link",{key:t,rel:"alternate",href:a.createUrl({locale:t,fullyQualified:!0}),hrefLang:n})})),r.createElement("link",{rel:"alternate",href:a.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}))}function x(e){var t=e.permalink,n=(0,h.Z)().siteConfig.url,a=function(){var e=(0,h.Z)().siteConfig.url,t=(0,c.TH)().pathname;return e+(0,g.Z)(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 _(){var e=(0,h.Z)().i18n.currentLocale,t=(0,v.L)(),n=t.metadata,a=t.image;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})),a&&r.createElement(b.d,{image:a}),r.createElement(x,null),r.createElement(S,null),r.createElement(E.Z,{tag:k.HX,locale:e}),r.createElement(m.Z,null,n.map((function(e,t){return r.createElement("meta",(0,p.Z)({key:t},e))}))))}var C=new Map;function T(e){if(C.has(e.pathname))return Object.assign({},e,{pathname:C.get(e.pathname)});if((0,d.f)(u.Z,e.pathname).some((function(e){return!0===e.route.exact})))return C.set(e.pathname,e.pathname),e;var t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return C.set(e.pathname,t),Object.assign({},e,{pathname:t})}var A=n(8934),L=n(8940),R=n(4578);function O(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];var a=s.map((function(t){var r,a,o=null!=(r=null==(a=t.default)?void 0:a[e])?r:t[e];return null==o?void 0:o.apply(void 0,n)}));return function(){return a.forEach((function(e){return null==e?void 0:e()}))}}const N=function(e){var t=e.children,n=e.location,a=e.previousLocation;return(0,r.useLayoutEffect)((function(){a!==n&&(a&&function(e){var t=e.hash;if(t){var n=decodeURIComponent(t.substring(1)),r=document.getElementById(n);null==r||r.scrollIntoView()}else window.scrollTo(0,0)}(n),O("onRouteDidUpdate",{previousLocation:a,location:n}))}),[a,n]),t};function P(e){var t=Array.from(new Set([e,decodeURI(e)])).map((function(e){return(0,d.f)(u.Z,e)})).flat();return Promise.all(t.map((function(e){return null==e.route.component.preload?void 0:e.route.component.preload()})))}const j=function(e){function t(t){var n;return(n=e.call(this,t)||this).previousLocation=void 0,n.routeUpdateCleanupCb=void 0,n.previousLocation=null,n.routeUpdateCleanupCb=l.Z.canUseDOM?O("onRouteUpdate",{previousLocation:null,location:n.props.location}):function(){},n.state={nextRouteHasLoaded:!0},n}(0,R.Z)(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e,t){var n=this;if(e.location===this.props.location)return t.nextRouteHasLoaded;var r=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=O("onRouteUpdate",{previousLocation:this.previousLocation,location:r}),P(r.pathname).then((function(){n.routeUpdateCleanupCb(),n.setState({nextRouteHasLoaded:!0})})).catch((function(e){console.warn(e),window.location.reload()})),!1},n.render=function(){var e=this.props,t=e.children,n=e.location;return r.createElement(N,{previousLocation:this.previousLocation,location:n},r.createElement(c.AW,{location:n,render:function(){return t}}))},t}(r.Component);var I="docusaurus-base-url-issue-banner-container",D="docusaurus-base-url-issue-banner-suggestion-container",M="__DOCUSAURUS_INSERT_BASEURL_BANNER";function F(e){return"\nwindow['"+M+"'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n  var shouldInsert = window['"+M+"'];\n  shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n  var bannerContainer = document.getElementById('"+I+"');\n  if (!bannerContainer) {\n    return;\n  }\n  var bannerHtml = "+JSON.stringify(function(e){return'\n<div id="docusaurus-base-url-issue-banner" 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="'+D+'" style="font-weight: bold; color: green;"></span></p>\n</div>\n'}(e)).replace(/</g,"\\<")+";\n  bannerContainer.innerHTML = bannerHtml;\n  var suggestionContainer = document.getElementById('"+D+"');\n  var actualHomePagePath = window.location.pathname;\n  var suggestedBaseUrl = actualHomePagePath.substr(-1) === '/'\n        ? actualHomePagePath\n        : actualHomePagePath + '/';\n  suggestionContainer.innerHTML = suggestedBaseUrl;\n}\n"}function B(){var e=(0,h.Z)().siteConfig.baseUrl;return(0,r.useLayoutEffect)((function(){window[M]=!1}),[]),r.createElement(r.Fragment,null,!l.Z.canUseDOM&&r.createElement(m.Z,null,r.createElement("script",null,F(e))),r.createElement("div",{id:I}))}function z(){var e=(0,h.Z)().siteConfig,t=e.baseUrl,n=e.baseUrlIssueBanner,a=(0,c.TH)().pathname;return n&&a===t?r.createElement(B,null):null}function U(){var e=(0,h.Z)(),t=e.siteConfig,n=t.favicon,a=t.title,o=t.noIndex,i=e.i18n,l=i.currentLocale,s=i.localeConfigs,u=(0,g.Z)(n),c=s[l],d=c.htmlLang,f=c.direction;return r.createElement(m.Z,null,r.createElement("html",{lang:d,dir:f}),r.createElement("title",null,a),r.createElement("meta",{property:"og:title",content:a}),r.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),o&&r.createElement("meta",{name:"robots",content:"noindex, nofollow"}),n&&r.createElement("link",{rel:"icon",href:u}))}var $=n(4763);function Z(){var e=(0,d.H)(u.Z),t=(0,c.TH)();return r.createElement($.Z,null,r.createElement(L.M,null,r.createElement(A.t,null,r.createElement(f,null,r.createElement(U,null),r.createElement(_,null),r.createElement(z,null),r.createElement(j,{location:T(t)},e)))))}var q=n(6887);var H=function(e){try{return document.createElement("link").relList.supports(e)}catch(t){return!1}}("prefetch")?function(e){return new Promise((function(t,n){var r,a;if("undefined"!=typeof document){var o=document.createElement("link");o.setAttribute("rel","prefetch"),o.setAttribute("href",e),o.onload=function(){return t()},o.onerror=function(){return n()};var i=null!=(r=document.getElementsByTagName("head")[0])?r:null==(a=document.getElementsByName("script")[0])?void 0:a.parentNode;null==i||i.appendChild(o)}else n()}))}:function(e){return new Promise((function(t,n){var r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=function(){200===r.status?t():n()},r.send(null)}))};var G=n(9670),V=new Set,W=new Set,Y=function(){var e,t;return(null==(e=navigator.connection)?void 0:e.effectiveType.includes("2g"))||(null==(t=navigator.connection)?void 0:t.saveData)},K={prefetch:function(e){if(!function(e){return!Y()&&!W.has(e)&&!V.has(e)}(e))return!1;V.add(e);var t=(0,d.f)(u.Z,e).flatMap((function(e){return t=e.route.path,Object.entries(q).filter((function(e){return e[0].replace(/-[^-]+$/,"")===t})).flatMap((function(e){var t=e[1];return Object.values((0,G.Z)(t))}));var t}));return Promise.all(t.map((function(e){var t=n.gca(e);return t&&!t.includes("undefined")?H(t).catch((function(){})):Promise.resolve()})))},preload:function(e){return!!function(e){return!Y()&&!W.has(e)}(e)&&(W.add(e),P(e))}};const Q=Object.freeze(K);if(l.Z.canUseDOM){window.docusaurus=Q;var X=a.hydrate;P(window.location.pathname).then((function(){X(r.createElement(i.B6,null,r.createElement(o.VK,null,r.createElement(Z,null))),document.getElementById("__docusaurus"))}))}},8940:(e,t,n)=>{"use strict";n.d(t,{_:()=>c,M:()=>d});var r=n(7294),a=n(6809);const o=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"milagro-intro","docs":[{"id":"amcl-c-api-2.0.0","path":"/docs/amcl-c-api-2.0.0","sidebar":"docs"},{"id":"amcl-javascript-api","path":"/docs/amcl-javascript-api"},{"id":"amcl-overview","path":"/docs/amcl-overview","sidebar":"docs"},{"id":"contributor-guide","path":"/docs/contributor-guide","sidebar":"docs"},{"id":"cryptojs/aes","path":"/docs/cryptojs/aes","sidebar":"docs"},{"id":"cryptojs/amcl-javascript-api","path":"/docs/cryptojs/amcl-javascript-api","sidebar":"docs"},{"id":"cryptojs/big","path":"/docs/cryptojs/big","sidebar":"docs"},{"id":"cryptojs/bls","path":"/docs/cryptojs/bls","sidebar":"docs"},{"id":"cryptojs/bls192","path":"/docs/cryptojs/bls192","sidebar":"docs"},{"id":"cryptojs/bls256","path":"/docs/cryptojs/bls256","sidebar":"docs"},{"id":"cryptojs/dbig","path":"/docs/cryptojs/dbig","sidebar":"docs"},{"id":"cryptojs/ecdh","path":"/docs/cryptojs/ecdh","sidebar":"docs"},{"id":"cryptojs/ecp","path":"/docs/cryptojs/ecp","sidebar":"docs"},{"id":"cryptojs/ecp2","path":"/docs/cryptojs/ecp2","sidebar":"docs"},{"id":"cryptojs/ecp4","path":"/docs/cryptojs/ecp4","sidebar":"docs"},{"id":"cryptojs/ecp8","path":"/docs/cryptojs/ecp8","sidebar":"docs"},{"id":"cryptojs/ff","path":"/docs/cryptojs/ff","sidebar":"docs"},{"id":"cryptojs/fp","path":"/docs/cryptojs/fp","sidebar":"docs"},{"id":"cryptojs/fp12","path":"/docs/cryptojs/fp12","sidebar":"docs"},{"id":"cryptojs/fp16","path":"/docs/cryptojs/fp16","sidebar":"docs"},{"id":"cryptojs/fp2","path":"/docs/cryptojs/fp2","sidebar":"docs"},{"id":"cryptojs/fp24","path":"/docs/cryptojs/fp24","sidebar":"docs"},{"id":"cryptojs/fp4","path":"/docs/cryptojs/fp4","sidebar":"docs"},{"id":"cryptojs/fp48","path":"/docs/cryptojs/fp48","sidebar":"docs"},{"id":"cryptojs/fp8","path":"/docs/cryptojs/fp8","sidebar":"docs"},{"id":"cryptojs/gcm","path":"/docs/cryptojs/gcm","sidebar":"docs"},{"id":"cryptojs/hash256","path":"/docs/cryptojs/hash256","sidebar":"docs"},{"id":"cryptojs/hash384","path":"/docs/cryptojs/hash384","sidebar":"docs"},{"id":"cryptojs/hash512","path":"/docs/cryptojs/hash512","sidebar":"docs"},{"id":"cryptojs/mpin","path":"/docs/cryptojs/mpin","sidebar":"docs"},{"id":"cryptojs/mpin192","path":"/docs/cryptojs/mpin192","sidebar":"docs"},{"id":"cryptojs/mpin256","path":"/docs/cryptojs/mpin256","sidebar":"docs"},{"id":"cryptojs/pair","path":"/docs/cryptojs/pair","sidebar":"docs"},{"id":"cryptojs/pair192","path":"/docs/cryptojs/pair192","sidebar":"docs"},{"id":"cryptojs/pair256","path":"/docs/cryptojs/pair256","sidebar":"docs"},{"id":"cryptojs/rand","path":"/docs/cryptojs/rand","sidebar":"docs"},{"id":"cryptojs/rsa","path":"/docs/cryptojs/rsa","sidebar":"docs"},{"id":"cryptojs/sha3","path":"/docs/cryptojs/sha3","sidebar":"docs"},{"id":"cryptojs/unit64","path":"/docs/cryptojs/unit64","sidebar":"docs"},{"id":"d-ta-api","path":"/docs/d-ta-api"},{"id":"d-ta-overview","path":"/docs/d-ta-overview","sidebar":"docs"},{"id":"downloads","path":"/docs/downloads","sidebar":"docs"},{"id":"dta-details/api","path":"/docs/dta-details/api","sidebar":"docs"},{"id":"dta-details/authentication","path":"/docs/dta-details/authentication","sidebar":"docs"},{"id":"dta-details/configuration","path":"/docs/dta-details/configuration","sidebar":"docs"},{"id":"dta-details/encrypted-envelope","path":"/docs/dta-details/encrypted-envelope","sidebar":"docs"},{"id":"dta-details/identity-documents","path":"/docs/dta-details/identity-documents","sidebar":"docs"},{"id":"dta-details/ipfs","path":"/docs/dta-details/ipfs","sidebar":"docs"},{"id":"dta-details/plugin-dev-guide","path":"/docs/dta-details/plugin-dev-guide"},{"id":"dta-details/plugins-overview","path":"/docs/dta-details/plugins-overview","sidebar":"docs"},{"id":"dta-details/quickstart","path":"/docs/dta-details/quickstart","sidebar":"docs"},{"id":"milagro-crypto","path":"/docs/milagro-crypto","sidebar":"docs"},{"id":"milagro-design","path":"/docs/milagro-design","sidebar":"docs"},{"id":"milagro-intro","path":"/docs/milagro-intro","sidebar":"docs"},{"id":"milagro-protocols","path":"/docs/milagro-protocols","sidebar":"docs"},{"id":"mpc-api-0.1","path":"/docs/mpc-api-0.1","sidebar":"docs"},{"id":"support","path":"/docs/support","sidebar":"docs"},{"id":"zkp-mfa-api","path":"/docs/zkp-mfa-api","sidebar":"docs"},{"id":"zkp-mfa-overview","path":"/docs/zkp-mfa-overview","sidebar":"docs"}],"draftIds":[],"sidebars":{"docs":{"link":{"path":"/docs/milagro-intro","label":"milagro-intro"}}}}],"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 l=n(7529);const s=JSON.parse('{"docusaurusVersion":"2.2.0","siteVersion":"2.1.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.2.0"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.2.0"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.2.0"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.2.0"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.2.0"}}}');var u={siteConfig:a.default,siteMetadata:s,globalData:o,i18n:i,codeTranslations:l},c=r.createContext(u);function d(e){var t=e.children;return r.createElement(c.Provider,{value:u},t)}},4763:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var r=n(4578),a=n(7294),o=n(412),i=n(5742),l=n(3285);function s(e){var t=e.error,n=e.tryAgain;return a.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",height:"50vh",width:"100%",fontSize:"20px"}},a.createElement("h1",null,"This page crashed."),a.createElement("p",null,t.message),a.createElement("button",{type:"button",onClick:n},"Try again"))}function u(e){var t=e.error,n=e.tryAgain;return a.createElement(d,{fallback:function(){return a.createElement(s,{error:t,tryAgain:n})}},a.createElement(i.Z,null,a.createElement("title",null,"Page Error")),a.createElement(l.Z,null,a.createElement(s,{error:t,tryAgain:n})))}var c=function(e){return a.createElement(u,e)},d=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={error:null},n}(0,r.Z)(t,e);var n=t.prototype;return n.componentDidCatch=function(e){o.Z.canUseDOM&&this.setState({error:e})},n.render=function(){var e=this,t=this.props.children,n=this.state.error;if(n){var r,a={error:n,tryAgain:function(){return e.setState({error:null})}};return(null!=(r=this.props.fallback)?r:c)(a)}return null!=t?t:null},t}(a.Component)},412:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document;const a={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},5742:(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)}},9960:(e,t,n)=>{"use strict";n.d(t,{Z:()=>h});var r=n(7462),a=n(3366),o=n(7294),i=n(3727),l=n(8780),s=n(2263),u=n(3919),c=n(412),d=o.createContext({collectLink:function(){}});var f=n(4996),p=["isNavLink","to","href","activeClassName","isActive","data-noBrokenLinkCheck","autoAddBaseUrl"];function m(e,t){var n,m,h=e.isNavLink,g=e.to,v=e.href,b=e.activeClassName,y=e.isActive,w=e["data-noBrokenLinkCheck"],k=e.autoAddBaseUrl,E=void 0===k||k,S=(0,a.Z)(e,p),x=(0,s.Z)().siteConfig,_=x.trailingSlash,C=x.baseUrl,T=(0,f.C)().withBaseUrl,A=(0,o.useContext)(d),L=(0,o.useRef)(null);(0,o.useImperativeHandle)(t,(function(){return L.current}));var R=g||v;var O,N=(0,u.Z)(R),P=null==R?void 0:R.replace("pathname://",""),j=void 0!==P?(O=P,E&&function(e){return e.startsWith("/")}(O)?T(O):O):void 0;j&&N&&(j=(0,l.applyTrailingSlash)(j,{trailingSlash:_,baseUrl:C}));var I=(0,o.useRef)(!1),D=h?i.OL:i.rU,M=c.Z.canUseIntersectionObserver,F=(0,o.useRef)(),B=function(){I.current||null==j||(window.docusaurus.preload(j),I.current=!0)};(0,o.useEffect)((function(){return!M&&N&&null!=j&&window.docusaurus.prefetch(j),function(){M&&F.current&&F.current.disconnect()}}),[F,j,M,N]);var z=null!=(n=null==(m=j)?void 0:m.startsWith("#"))&&n,U=!j||!N||z;return U||w||A.collectLink(j),U?o.createElement("a",(0,r.Z)({ref:L,href:j},R&&!N&&{target:"_blank",rel:"noopener noreferrer"},S)):o.createElement(D,(0,r.Z)({},S,{onMouseEnter:B,onTouchStart:B,innerRef:function(e){L.current=e,M&&e&&N&&(F.current=new window.IntersectionObserver((function(t){t.forEach((function(t){e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(F.current.unobserve(e),F.current.disconnect(),null!=j&&window.docusaurus.prefetch(j))}))})),F.current.observe(e))},to:j},h&&{isActive:y,activeClassName:b}))}const h=o.forwardRef(m)},1875:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=function(){return null}},5999:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s,I:()=>l});var r=n(7294);function a(e,t){var n=e.split(/(\{\w+\})/).map((function(e,n){if(n%2==1){var r=null==t?void 0:t[e.slice(1,-1)];if(void 0!==r)return r}return e}));return n.some((function(e){return(0,r.isValidElement)(e)}))?n.map((function(e,t){return(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e})).filter((function(e){return""!==e})):n.join("")}var o=n(7529);function i(e){var t,n,r=e.id,a=e.message;if(void 0===r&&void 0===a)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return null!=(t=null!=(n=o[null!=r?r:a])?n:a)?t:r}function l(e,t){return a(i({message:e.message,id:e.id}),t)}function s(e){var t=e.children,n=e.id,o=e.values;if(t&&"string"!=typeof t)throw console.warn("Illegal <Translate> children",t),new Error("The Docusaurus <Translate> component only accept simple string values");var l=i({message:t,id:n});return r.createElement(r.Fragment,null,a(l,o))}},9935:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});var r="default"},3919:(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})},4996:(e,t,n)=>{"use strict";n.d(t,{C:()=>o,Z:()=>i});var r=n(2263),a=n(3919);function o(){var e=(0,r.Z)().siteConfig,t=e.baseUrl,n=e.url;return{withBaseUrl:function(e,r){return function(e,t,n,r){var o=void 0===r?{}:r,i=o.forcePrependBaseUrl,l=void 0!==i&&i,s=o.absolute,u=void 0!==s&&s;if(!n||n.startsWith("#")||(0,a.b)(n))return n;if(l)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;var c=n.startsWith(t)?n:t+n.replace(/^\//,"");return u?e+c:c}(n,t,e,r)}}}function i(e,t){return void 0===t&&(t={}),(0,o().withBaseUrl)(e,t)}},2263:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(8940);function o(){return(0,r.useContext)(a._)}},2389:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(8934);function o(){return(0,r.useContext)(a._)}},9670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});function r(e){var t={};return function e(n,r){Object.entries(n).forEach((function(n){var a,o=n[0],i=n[1],l=r?r+"."+o:o;"object"==typeof(a=i)&&a&&Object.keys(a).length>0?e(i,l):t[l]=i}))}(e),t}},226:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,z:()=>o});var r=n(7294),a=r.createContext(null);function o(e){var t=e.children,n=e.value,o=r.useContext(a),i=(0,r.useMemo)((function(){return function(e){var t=e.parent,n=e.value;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}var r=Object.assign({},t.data,null==n?void 0:n.data);return{plugin:t.plugin,data:r}}({parent:o,value:n})}),[o,n]);return r.createElement(a.Provider,{value:i},t)}},143:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>h,gA:()=>f,_r:()=>c,Jo:()=>g,zh:()=>d,yW:()=>m,gB:()=>p});var r=n(6550),a=n(2263),o=n(9935);function i(e,t){void 0===t&&(t={});var n=(0,a.Z)().globalData[e];if(!n&&t.failfast)throw new Error('Docusaurus plugin global data not found for "'+e+'" plugin.');return n}var l=function(e){return e.versions.find((function(e){return e.isLast}))};function s(e,t){var n,a,o=function(e,t){var n=l(e);return[].concat(e.versions.filter((function(e){return e!==n})),[n]).find((function(e){return!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})}))}(e,t),i=null==o?void 0:o.docs.find((function(e){return!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})}));return{activeVersion:o,activeDoc:i,alternateDocVersions:i?(n=i.id,a={},e.versions.forEach((function(e){e.docs.forEach((function(t){t.id===n&&(a[e.name]=t)}))})),a):{}}}var u={},c=function(){var e;return null!=(e=i("docusaurus-plugin-content-docs"))?e:u},d=function(e){return function(e,t,n){void 0===t&&(t=o.m),void 0===n&&(n={});var r=i(e),a=null==r?void 0: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){return void 0===e&&(e={}),function(e,t,n){void 0===n&&(n={});var a=Object.entries(e).sort((function(e,t){return t[1].path.localeCompare(e[1].path)})).find((function(e){var n=e[1];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((function(e){return e.path})).join(", "));return o}(c(),(0,r.TH)().pathname,e)}function p(e){return d(e).versions}function m(e){var t=d(e);return l(t)}function h(e){return s(d(e),(0,r.TH)().pathname)}function g(e){return function(e,t){var n=l(e);return{latestDocSuggestion:s(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(d(e),(0,r.TH)().pathname)}},8320:(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:function(e){var t=e.location,n=e.previousLocation;if(n&&t.pathname!==n.pathname){var r=window.setTimeout((function(){a().start()}),200);return function(){return window.clearTimeout(r)}}},onRouteDidUpdate:function(){a().done()}}},3310:(e,t,n)=>{"use strict";n.r(t);var r,a,o=n(7410),i=n(6809);r=o.Z,a=i.default.themeConfig.prism.additionalLanguages,globalThis.Prism=r,a.forEach((function(e){n(6726)("./prism-"+e)})),delete globalThis.Prism},9471:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294);const a="iconExternalLink_nPIU";function o(e){var t=e.width,n=void 0===t?13.5:t,o=e.height,i=void 0===o?13.5:o;return r.createElement("svg",{width:n,height:i,"aria-hidden":"true",viewBox:"0 0 24 24",className:a},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"}))}},3285:(e,t,n)=>{"use strict";n.d(t,{Z:()=>Lt});var r=n(7294),a=n(6010),o=n(4763),i=n(1944),l=n(7462),s=n(6550),u=n(5999),c=n(5936),d="docusaurus_skipToContent_fallback";function f(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function p(){var e=(0,r.useRef)(null),t=(0,s.k6)().action,n=(0,r.useCallback)((function(e){e.preventDefault();var t,n=null!=(t=document.querySelector("main:first-of-type"))?t:document.getElementById(d);n&&f(n)}),[]);return(0,c.S)((function(n){var r=n.location;e.current&&!r.hash&&"PUSH"===t&&f(e.current)})),{containerRef:e,onClick:n}}var m=(0,u.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 h(e){var t,n=null!=(t=e.children)?t:m,a=p(),o=a.containerRef,i=a.onClick;return r.createElement("div",{ref:o,role:"region","aria-label":m},r.createElement("a",(0,l.Z)({},e,{href:"#"+d,onClick:i}),n))}var g=n(5281),v=n(9727);const b="skipToContent_fXgn";function y(){return r.createElement(h,{className:b})}var w=n(6668),k=n(9689),E=n(3366),S=["width","height","color","strokeWidth","className"];function x(e){var t=e.width,n=void 0===t?21:t,a=e.height,o=void 0===a?21:a,i=e.color,s=void 0===i?"currentColor":i,u=e.strokeWidth,c=void 0===u?1.2:u,d=(e.className,(0,E.Z)(e,S));return r.createElement("svg",(0,l.Z)({viewBox:"0 0 15 15",width:n,height:o},d),r.createElement("g",{stroke:s,strokeWidth:c},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const _="closeButton_CVFx";function C(e){return r.createElement("button",(0,l.Z)({type:"button","aria-label":(0,u.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",_,e.className)}),r.createElement(x,{width:14,height:14,strokeWidth:3.1}))}const T="content_knG7";function A(e){var t=(0,w.L)().announcementBar.content;return r.createElement("div",(0,l.Z)({},e,{className:(0,a.Z)(T,e.className),dangerouslySetInnerHTML:{__html:t}}))}const L="announcementBar_mb4j",R="announcementBarPlaceholder_vyr4",O="announcementBarClose_gvF7",N="announcementBarContent_xLdY";function P(){var e=(0,w.L)().announcementBar,t=(0,k.nT)(),n=t.isActive,a=t.close;if(!n)return null;var o=e.backgroundColor,i=e.textColor,l=e.isCloseable;return r.createElement("div",{className:L,style:{backgroundColor:o,color:i},role:"banner"},l&&r.createElement("div",{className:R}),r.createElement(A,{className:N}),l&&r.createElement(C,{onClick:a,className:O}))}var j=n(2961),I=n(2466);var D=n(9688),M=n(3102),F=r.createContext(null);function B(e){var t,n,a,o,i,l,s,u=e.children,c=(t=(0,j.e)(),n=(0,M.HY)(),a=(0,r.useState)(!1),o=a[0],i=a[1],l=null!==n.component,s=(0,D.D9)(l),(0,r.useEffect)((function(){l&&!s&&i(!0)}),[l,s]),(0,r.useEffect)((function(){l?t.shown||i(!0):i(!1)}),[t.shown,l]),(0,r.useMemo)((function(){return[o,i]}),[o]));return r.createElement(F.Provider,{value:c},u)}function z(e){if(e.component){var t=e.component;return r.createElement(t,e.props)}}function U(){var e=(0,r.useContext)(F);if(!e)throw new D.i6("NavbarSecondaryMenuDisplayProvider");var t=e[0],n=e[1],a=(0,r.useCallback)((function(){return n(!1)}),[n]),o=(0,M.HY)();return(0,r.useMemo)((function(){return{shown:t,hide:a,content:z(o)}}),[a,o,t])}function $(e){var t=e.header,n=e.primaryMenu,o=e.secondaryMenu,i=U().shown;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 Z=n(2949),q=n(2389);function H(e){return r.createElement("svg",(0,l.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 G(e){return r.createElement("svg",(0,l.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 V={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function W(e){var t=e.className,n=e.value,o=e.onChange,i=(0,q.Z)(),l=(0,u.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"===n?(0,u.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,u.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)(V.toggle,t)},r.createElement("button",{className:(0,a.Z)("clean-btn",V.toggleButton,!i&&V.toggleButtonDisabled),type:"button",onClick:function(){return o("dark"===n?"light":"dark")},disabled:!i,title:l,"aria-label":l,"aria-live":"polite"},r.createElement(H,{className:(0,a.Z)(V.toggleIcon,V.lightToggleIcon)}),r.createElement(G,{className:(0,a.Z)(V.toggleIcon,V.darkToggleIcon)})))}const Y=r.memo(W);function K(e){var t=e.className,n=(0,w.L)().colorMode.disableSwitch,a=(0,Z.I)(),o=a.colorMode,i=a.setColorMode;return n?null:r.createElement(Y,{className:t,value:o,onChange:i})}var Q=n(1327);function X(){return r.createElement(Q.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function J(){var e=(0,j.e)();return r.createElement("button",{type:"button","aria-label":(0,u.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:function(){return e.toggle()}},r.createElement(x,{color:"var(--ifm-color-emphasis-600)"}))}function ee(){return r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(X,null),r.createElement(K,{className:"margin-right--md"}),r.createElement(J,null))}var te=n(9960),ne=n(4996),re=n(3919);function ae(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var oe=n(9471),ie=["activeBasePath","activeBaseRegex","to","href","label","html","isDropdownLink","prependBaseUrlToHref"];function le(e){var t=e.activeBasePath,n=e.activeBaseRegex,a=e.to,o=e.href,i=e.label,s=e.html,u=e.isDropdownLink,c=e.prependBaseUrlToHref,d=(0,E.Z)(e,ie),f=(0,ne.Z)(a),p=(0,ne.Z)(t),m=(0,ne.Z)(o,{forcePrependBaseUrl:!0}),h=i&&o&&!(0,re.Z)(o),g=s?{dangerouslySetInnerHTML:{__html:s}}:{children:r.createElement(r.Fragment,null,i,h&&r.createElement(oe.Z,u&&{width:12,height:12}))};return o?r.createElement(te.Z,(0,l.Z)({href:c?m:o},d,g)):r.createElement(te.Z,(0,l.Z)({to:f,isNavLink:!0},(t||n)&&{isActive:function(e,t){return n?ae(n,t.pathname):t.pathname.startsWith(p)}},d,g))}var se=["className","isDropdownItem"],ue=["className","isDropdownItem"],ce=["mobile","position"];function de(e){var t=e.className,n=e.isDropdownItem,o=void 0!==n&&n,i=(0,E.Z)(e,se),s=r.createElement(le,(0,l.Z)({className:(0,a.Z)(o?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:o},i));return o?r.createElement("li",null,s):s}function fe(e){var t=e.className,n=(e.isDropdownItem,(0,E.Z)(e,ue));return r.createElement("li",{className:"menu__list-item"},r.createElement(le,(0,l.Z)({className:(0,a.Z)("menu__link",t)},n)))}function pe(e){var t,n=e.mobile,a=void 0!==n&&n,o=(e.position,(0,E.Z)(e,ce)),i=a?fe:de;return r.createElement(i,(0,l.Z)({},o,{activeClassName:null!=(t=o.activeClassName)?t:a?"menu__link--active":"navbar__link--active"}))}var me=n(6043),he=n(8596),ge=n(2263);var ve=["items","position","className","onClick"],be=["items","className","position","onClick"],ye=["mobile"];function we(e,t){return e.some((function(e){return function(e,t){return!!(0,he.Mg)(e.to,t)||!!ae(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)}))}function ke(e){var t,n=e.items,o=e.position,i=e.className,s=(e.onClick,(0,E.Z)(e,ve)),u=(0,r.useRef)(null),c=(0,r.useState)(!1),d=c[0],f=c[1];return(0,r.useEffect)((function(){var e=function(e){u.current&&!u.current.contains(e.target)&&f(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),function(){document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e)}}),[u]),r.createElement("div",{ref:u,className:(0,a.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===o,"dropdown--show":d})},r.createElement(le,(0,l.Z)({"aria-haspopup":"true","aria-expanded":d,role:"button",href:s.to?void 0:"#",className:(0,a.Z)("navbar__link",i)},s,{onClick:s.to?void 0:function(e){return e.preventDefault()},onKeyDown:function(e){"Enter"===e.key&&(e.preventDefault(),f(!d))}}),null!=(t=s.children)?t:s.label),r.createElement("ul",{className:"dropdown__menu"},n.map((function(e,t){return r.createElement($e,(0,l.Z)({isDropdownItem:!0,onKeyDown:function(e){if(t===n.length-1&&"Tab"===e.key){e.preventDefault(),f(!1);var r=u.current.nextElementSibling;if(r)(r instanceof HTMLAnchorElement?r:r.querySelector("a")).focus()}},activeClassName:"dropdown__link--active"},e,{key:t}))}))))}function Ee(e){var t,n,o=e.items,i=e.className,u=(e.position,e.onClick),c=(0,E.Z)(e,be),d=(n=(0,ge.Z)().siteConfig.baseUrl,(0,s.TH)().pathname.replace(n,"/")),f=we(o,d),p=(0,me.u)({initialState:function(){return!f}}),m=p.collapsed,h=p.toggleCollapsed,g=p.setCollapsed;return(0,r.useEffect)((function(){f&&g(!f)}),[d,f,g]),r.createElement("li",{className:(0,a.Z)("menu__list-item",{"menu__list-item--collapsed":m})},r.createElement(le,(0,l.Z)({role:"button",className:(0,a.Z)("menu__link menu__link--sublist menu__link--sublist-caret",i)},c,{onClick:function(e){e.preventDefault(),h()}}),null!=(t=c.children)?t:c.label),r.createElement(me.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:m},o.map((function(e,t){return r.createElement($e,(0,l.Z)({mobile:!0,isDropdownItem:!0,onClick:u,activeClassName:"menu__link--active"},e,{key:t}))}))))}function Se(e){var t=e.mobile,n=void 0!==t&&t,a=(0,E.Z)(e,ye),o=n?Ee:ke;return r.createElement(o,a)}var xe=n(4711),_e=["width","height"];function Ce(e){var t=e.width,n=void 0===t?20:t,a=e.height,o=void 0===a?20:a,i=(0,E.Z)(e,_e);return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:n,height:o,"aria-hidden":!0},i),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 Te="iconLanguage_nlXk";var Ae=["mobile","dropdownItemsBefore","dropdownItemsAfter"];var Le=n(1875);const Re="searchBox_ZlJk";function Oe(e){var t=e.children,n=e.className;return r.createElement("div",{className:(0,a.Z)(n,Re)},t)}var Ne=n(143),Pe=n(8425),je=["docId","label","docsPluginId"];var Ie=["sidebarId","label","docsPluginId"];var De=["label","to","docsPluginId"];var Me=n(373),Fe=["mobile","docsPluginId","dropdownActiveClassDisabled","dropdownItemsBefore","dropdownItemsAfter"],Be=function(e){return e.docs.find((function(t){return t.id===e.mainDocId}))};const ze={default:pe,localeDropdown:function(e){var t=e.mobile,n=e.dropdownItemsBefore,a=e.dropdownItemsAfter,o=(0,E.Z)(e,Ae),i=(0,ge.Z)().i18n,c=i.currentLocale,d=i.locales,f=i.localeConfigs,p=(0,xe.l)(),m=(0,s.TH)(),h=m.search,g=m.hash,v=d.map((function(e){var n=""+("pathname://"+p.createUrl({locale:e,fullyQualified:!1}))+h+g;return{label:f[e].label,lang:f[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===c?t?"menu__link--active":"dropdown__link--active":""}})),b=[].concat(n,v,a),y=t?(0,u.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):f[c].label;return r.createElement(Se,(0,l.Z)({},o,{mobile:t,label:r.createElement(r.Fragment,null,r.createElement(Ce,{className:Te}),y),items:b}))},search:function(e){var t=e.mobile,n=e.className;return t?null:r.createElement(Oe,{className:n},r.createElement(Le.Z,null))},dropdown:Se,html:function(e){var t=e.value,n=e.className,o=e.mobile,i=void 0!==o&&o,l=e.isDropdownItem,s=void 0!==l&&l,u=s?"li":"div";return r.createElement(u,{className:(0,a.Z)({navbar__item:!i&&!s,"menu__list-item":i},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){var t=e.docId,n=e.label,a=e.docsPluginId,o=(0,E.Z)(e,je),i=(0,Ne.Iw)(a).activeDoc,s=(0,Pe.vY)(t,a);return null===s?null:r.createElement(pe,(0,l.Z)({exact:!0},o,{isActive:function(){return(null==i?void 0:i.path)===s.path||!(null==i||!i.sidebar)&&i.sidebar===s.sidebar},label:null!=n?n:s.id,to:s.path}))},docSidebar:function(e){var t=e.sidebarId,n=e.label,a=e.docsPluginId,o=(0,E.Z)(e,Ie),i=(0,Ne.Iw)(a).activeDoc,s=(0,Pe.oz)(t,a).link;if(!s)throw new Error('DocSidebarNavbarItem: Sidebar with ID "'+t+"\" doesn't have anything to be linked to.");return r.createElement(pe,(0,l.Z)({exact:!0},o,{isActive:function(){return(null==i?void 0:i.sidebar)===t},label:null!=n?n:s.label,to:s.path}))},docsVersion:function(e){var t=e.label,n=e.to,a=e.docsPluginId,o=(0,E.Z)(e,De),i=(0,Pe.lO)(a)[0],s=null!=t?t:i.label,u=null!=n?n:function(e){return e.docs.find((function(t){return t.id===e.mainDocId}))}(i).path;return r.createElement(pe,(0,l.Z)({},o,{label:s,to:u}))},docsVersionDropdown:function(e){var t=e.mobile,n=e.docsPluginId,a=e.dropdownActiveClassDisabled,o=e.dropdownItemsBefore,i=e.dropdownItemsAfter,c=(0,E.Z)(e,Fe),d=(0,s.TH)(),f=d.search,p=d.hash,m=(0,Ne.Iw)(n),h=(0,Ne.gB)(n),g=(0,Me.J)(n).savePreferredVersionName,v=h.map((function(e){var t,n=null!=(t=m.alternateDocVersions[e.name])?t:Be(e);return{label:e.label,to:""+n.path+f+p,isActive:function(){return e===m.activeVersion},onClick:function(){return g(e.name)}}})),b=[].concat(o,v,i),y=(0,Pe.lO)(n)[0],w=t&&b.length>1?(0,u.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):y.label,k=t&&b.length>1?void 0:Be(y).path;return b.length<=1?r.createElement(pe,(0,l.Z)({},c,{mobile:t,label:w,to:k,isActive:a?function(){return!1}:void 0})):r.createElement(Se,(0,l.Z)({},c,{mobile:t,label:w,to:k,items:b,isActive:a?function(){return!1}:void 0}))}};var Ue=["type"];function $e(e){var t=e.type,n=(0,E.Z)(e,Ue),a=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),o=ze[a];if(!o)throw new Error('No NavbarItem component found for type "'+t+'".');return r.createElement(o,n)}function Ze(){var e=(0,j.e)(),t=(0,w.L)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map((function(t,n){return r.createElement($e,(0,l.Z)({mobile:!0},t,{onClick:function(){return e.toggle()},key:n}))})))}function qe(e){return r.createElement("button",(0,l.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),r.createElement(u.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 He(){var e=0===(0,w.L)().navbar.items.length,t=U();return r.createElement(r.Fragment,null,!e&&r.createElement(qe,{onClick:function(){return t.hide()}}),t.content)}function Ge(){var e,t=(0,j.e)();return void 0===(e=t.shown)&&(e=!0),(0,r.useEffect)((function(){return document.body.style.overflow=e?"hidden":"visible",function(){document.body.style.overflow="visible"}}),[e]),t.shouldRender?r.createElement($,{header:r.createElement(ee,null),primaryMenu:r.createElement(Ze,null),secondaryMenu:r.createElement(He,null)}):null}const Ve="navbarHideable_m1mJ",We="navbarHidden_jGov";function Ye(e){return r.createElement("div",(0,l.Z)({role:"presentation"},e,{className:(0,a.Z)("navbar-sidebar__backdrop",e.className)}))}function Ke(e){var t=e.children,n=(0,w.L)().navbar,o=n.hideOnScroll,i=n.style,l=(0,j.e)(),s=function(e){var t=(0,r.useState)(e),n=t[0],a=t[1],o=(0,r.useRef)(!1),i=(0,r.useRef)(0),l=(0,r.useCallback)((function(e){null!==e&&(i.current=e.getBoundingClientRect().height)}),[]);return(0,I.RF)((function(t,n){var r=t.scrollY;if(e)if(r<i.current)a(!0);else if(o.current)o.current=!1;else{var l=null==n?void 0:n.scrollY,s=document.documentElement.scrollHeight-i.current,u=window.innerHeight;l&&r>=l?a(!1):r+u<s&&a(!0)}})),(0,c.S)((function(t){if(e){var n=t.location.hash;if(n?document.getElementById(n.substring(1)):void 0)return o.current=!0,void a(!1);a(!0)}})),{navbarRef:l,isNavbarVisible:n}}(o),u=s.navbarRef,d=s.isNavbarVisible;return r.createElement("nav",{ref:u,className:(0,a.Z)("navbar","navbar--fixed-top",o&&[Ve,!d&&We],{"navbar--dark":"dark"===i,"navbar--primary":"primary"===i,"navbar-sidebar--show":l.shown})},t,r.createElement(Ye,{onClick:l.toggle}),r.createElement(Ge,null))}var Qe=["width","height","className"];function Xe(e){var t=e.width,n=void 0===t?30:t,a=e.height,o=void 0===a?30:a,i=e.className,s=(0,E.Z)(e,Qe);return r.createElement("svg",(0,l.Z)({className:i,width:n,height:o,viewBox:"0 0 30 30","aria-hidden":"true"},s),r.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function Je(){var e=(0,j.e)(),t=e.toggle,n=e.shown;return r.createElement("button",{onClick:t,"aria-label":(0,u.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":n,className:"navbar__toggle clean-btn",type:"button"},r.createElement(Xe,null))}const et="colorModeToggle_DEke";function tt(e){var t=e.items;return r.createElement(r.Fragment,null,t.map((function(e,t){return r.createElement($e,(0,l.Z)({},e,{key:t}))})))}function nt(e){var t=e.left,n=e.right;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 rt(){var e=(0,j.e)(),t=(0,w.L)().navbar.items,n=function(e){function t(e){var t;return"left"===(null!=(t=e.position)?t:"right")}return[e.filter(t),e.filter((function(e){return!t(e)}))]}(t),a=n[0],o=n[1],i=t.find((function(e){return"search"===e.type}));return r.createElement(nt,{left:r.createElement(r.Fragment,null,!e.disabled&&r.createElement(Je,null),r.createElement(X,null),r.createElement(tt,{items:a})),right:r.createElement(r.Fragment,null,r.createElement(tt,{items:o}),r.createElement(K,{className:et}),!i&&r.createElement(Oe,null,r.createElement(Le.Z,null)))})}function at(){return r.createElement(Ke,null,r.createElement(rt,null))}var ot=["to","href","label","prependBaseUrlToHref"];function it(e){var t=e.item,n=t.to,a=t.href,o=t.label,i=t.prependBaseUrlToHref,s=(0,E.Z)(t,ot),u=(0,ne.Z)(n),c=(0,ne.Z)(a,{forcePrependBaseUrl:!0});return r.createElement(te.Z,(0,l.Z)({className:"footer__link-item"},a?{href:i?c:a}:{to:u},s),o,a&&!(0,re.Z)(a)&&r.createElement(oe.Z,null))}function lt(e){var t,n=e.item;return n.html?r.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:n.html}}):r.createElement("li",{key:null!=(t=n.href)?t:n.to,className:"footer__item"},r.createElement(it,{item:n}))}function st(e){var t=e.column;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((function(e,t){return r.createElement(lt,{key:t,item:e})}))))}function ut(e){var t=e.columns;return r.createElement("div",{className:"row footer__links"},t.map((function(e,t){return r.createElement(st,{key:t,column:e})})))}function ct(){return r.createElement("span",{className:"footer__link-separator"},"\xb7")}function dt(e){var t=e.item;return t.html?r.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement(it,{item:t})}function ft(e){var t=e.links;return r.createElement("div",{className:"footer__links text--center"},r.createElement("div",{className:"footer__links"},t.map((function(e,n){return r.createElement(r.Fragment,{key:n},r.createElement(dt,{item:e}),t.length!==n+1&&r.createElement(ct,null))}))))}function pt(e){var t=e.links;return function(e){return"title"in e[0]}(t)?r.createElement(ut,{columns:t}):r.createElement(ft,{links:t})}var mt=n(941);const ht="footerLogoLink_BH7S";function gt(e){var t,n=e.logo,o=(0,ne.C)().withBaseUrl,i={light:o(n.src),dark:o(null!=(t=n.srcDark)?t:n.src)};return r.createElement(mt.Z,{className:(0,a.Z)("footer__logo",n.className),alt:n.alt,sources:i,width:n.width,height:n.height,style:n.style})}function vt(e){var t=e.logo;return t.href?r.createElement(te.Z,{href:t.href,className:ht,target:t.target},r.createElement(gt,{logo:t})):r.createElement(gt,{logo:t})}function bt(e){var t=e.copyright;return r.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function yt(e){var t=e.style,n=e.links,o=e.logo,i=e.copyright;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 wt(){var e=(0,w.L)().footer;if(!e)return null;var t=e.copyright,n=e.links,a=e.logo,o=e.style;return r.createElement(yt,{style:o,links:n&&n.length>0&&r.createElement(pt,{links:n}),logo:a&&r.createElement(vt,{logo:a}),copyright:t&&r.createElement(bt,{copyright:t})})}const kt=r.memo(wt);var Et=n(12),St="docusaurus.tab.",xt=r.createContext(void 0);var _t=(0,D.Qc)([Z.S,k.pl,function(e){var t=e.children,n=function(){var e=(0,r.useState)({}),t=e[0],n=e[1],a=(0,r.useCallback)((function(e,t){(0,Et.W)(""+St+e).set(t)}),[]);(0,r.useEffect)((function(){try{var e={};(0,Et._)().forEach((function(t){if(t.startsWith(St)){var n=t.substring(St.length);e[n]=(0,Et.W)(t).get()}})),n(e)}catch(t){console.error(t)}}),[]);var o=(0,r.useCallback)((function(e,t){n((function(n){var r;return Object.assign({},n,((r={})[e]=t,r))})),a(e,t)}),[a]);return(0,r.useMemo)((function(){return{tabGroupChoices:t,setTabGroupChoices:o}}),[t,o])}();return r.createElement(xt.Provider,{value:n},t)},I.OC,Me.L5,i.VC,function(e){var t=e.children;return r.createElement(M.n2,null,r.createElement(j.M,null,r.createElement(B,null,t)))}]);function Ct(e){var t=e.children;return r.createElement(_t,null,t)}function Tt(e){var t=e.error,n=e.tryAgain;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(u.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("p",null,t.message),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},r.createElement(u.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again when the page crashed"},"Try again"))))))}const At="mainWrapper_z2l0";function Lt(e){var t=e.children,n=e.noFooter,l=e.wrapperClassName,s=e.title,u=e.description;return(0,v.t)(),r.createElement(Ct,null,r.createElement(i.d,{title:s,description:u}),r.createElement(y,null),r.createElement(P,null),r.createElement(at,null),r.createElement("div",{id:d,className:(0,a.Z)(g.k.wrapper.main,At,l)},r.createElement(o.Z,{fallback:function(e){return r.createElement(Tt,e)}},t)),!n&&r.createElement(kt,null))}},1327:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7462),a=n(3366),o=n(7294),i=n(9960),l=n(4996),s=n(2263),u=n(6668),c=n(941),d=["imageClassName","titleClassName"];function f(e){var t=e.logo,n=e.alt,r=e.imageClassName,a={light:(0,l.Z)(t.src),dark:(0,l.Z)(t.srcDark||t.src)},i=o.createElement(c.Z,{className:t.className,sources:a,height:t.height,width:t.width,alt:n,style:t.style});return r?o.createElement("div",{className:r},i):i}function p(e){var t,n=(0,s.Z)().siteConfig.title,c=(0,u.L)().navbar,p=c.title,m=c.logo,h=e.imageClassName,g=e.titleClassName,v=(0,a.Z)(e,d),b=(0,l.Z)((null==m?void 0:m.href)||"/"),y=p?"":n,w=null!=(t=null==m?void 0:m.alt)?t:y;return o.createElement(i.Z,(0,r.Z)({to:b},v,(null==m?void 0:m.target)&&{target:m.target}),m&&o.createElement(f,{logo:m,alt:w,imageClassName:h}),null!=p&&o.createElement("b",{className:g},p))}},197:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(5742);function o(e){var t=e.locale,n=e.version,o=e.tag,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}))}},941:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var r=n(7462),a=n(3366),o=n(7294),i=n(6010),l=n(2389),s=n(2949);const u={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};var c=["sources","className","alt"];function d(e){var t=(0,l.Z)(),n=(0,s.I)().colorMode,d=e.sources,f=e.className,p=e.alt,m=(0,a.Z)(e,c),h=t?"dark"===n?["dark"]:["light"]:["light","dark"];return o.createElement(o.Fragment,null,h.map((function(e){return o.createElement("img",(0,r.Z)({key:e,src:d[e],alt:p,className:(0,i.Z)(u.themedImage,u["themedImage--"+e],f)},m))})))}},6043:(e,t,n)=>{"use strict";n.d(t,{u:()=>u,z:()=>v});var r=n(7462),a=n(3366),o=n(7294),i=n(412),l=["collapsed"],s=["lazy"];function u(e){var t=e.initialState,n=(0,o.useState)(null!=t&&t),r=n[0],a=n[1],i=(0,o.useCallback)((function(){a((function(e){return!e}))}),[]);return{collapsed:r,setCollapsed:a,toggleCollapsed:i}}var c={display:"none",overflow:"hidden",height:"0px"},d={display:"block",overflow:"visible",height:"auto"};function f(e,t){var n=t?c:d;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function p(e){var t=e.collapsibleRef,n=e.collapsed,r=e.animation,a=(0,o.useRef)(!1);(0,o.useEffect)((function(){var e,o=t.current;function i(){var e,t,n=o.scrollHeight,a=null!=(e=null==r?void 0:r.duration)?e:function(e){var t=e/36;return Math.round(10*(4+15*Math.pow(t,.25)+t/5))}(n);return{transition:"height "+a+"ms "+(null!=(t=null==r?void 0:r.easing)?t:"ease-in-out"),height:n+"px"}}function l(){var e=i();o.style.transition=e.transition,o.style.height=e.height}if(!a.current)return f(o,n),void(a.current=!0);return o.style.willChange="height",e=requestAnimationFrame((function(){n?(l(),requestAnimationFrame((function(){o.style.height=c.height,o.style.overflow=c.overflow}))):(o.style.display="block",requestAnimationFrame((function(){l()})))})),function(){return cancelAnimationFrame(e)}}),[t,n,r])}function m(e){if(!i.Z.canUseDOM)return e?c:d}function h(e){var t=e.as,n=void 0===t?"div":t,r=e.collapsed,a=e.children,i=e.animation,l=e.onCollapseTransitionEnd,s=e.className,u=e.disableSSRStyle,c=(0,o.useRef)(null);return p({collapsibleRef:c,collapsed:r,animation:i}),o.createElement(n,{ref:c,style:u?void 0:m(r),onTransitionEnd:function(e){"height"===e.propertyName&&(f(c.current,r),null==l||l(r))},className:s},a)}function g(e){var t=e.collapsed,n=(0,a.Z)(e,l),i=(0,o.useState)(!t),s=i[0],u=i[1],c=(0,o.useState)(t),d=c[0],f=c[1];return(0,o.useLayoutEffect)((function(){t||u(!0)}),[t]),(0,o.useLayoutEffect)((function(){s&&f(t)}),[s,t]),s?o.createElement(h,(0,r.Z)({},n,{collapsed:d})):null}function v(e){var t=e.lazy,n=(0,a.Z)(e,s),r=t?g:h;return o.createElement(r,n)}},9689:(e,t,n)=>{"use strict";n.d(t,{nT:()=>m,pl:()=>p});var r=n(7294),a=n(2389),o=n(12),i=n(9688),l=n(6668),s=(0,o.W)("docusaurus.announcement.dismiss"),u=(0,o.W)("docusaurus.announcement.id"),c=function(){return"true"===s.get()},d=function(e){return s.set(String(e))},f=r.createContext(null);function p(e){var t=e.children,n=function(){var e=(0,l.L)().announcementBar,t=(0,a.Z)(),n=(0,r.useState)((function(){return!!t&&c()})),o=n[0],i=n[1];(0,r.useEffect)((function(){i(c())}),[]);var s=(0,r.useCallback)((function(){d(!0),i(!0)}),[]);return(0,r.useEffect)((function(){if(e){var t=e.id,n=u.get();"annoucement-bar"===n&&(n="announcement-bar");var r=t!==n;u.set(t),r&&d(!1),!r&&c()||i(!1)}}),[e]),(0,r.useMemo)((function(){return{isActive:!!e&&!o,close:s}}),[e,o,s])}();return r.createElement(f.Provider,{value:n},t)}function m(){var e=(0,r.useContext)(f);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},2949:(e,t,n)=>{"use strict";n.d(t,{I:()=>g,S:()=>h});var r=n(7294),a=n(412),o=n(9688),i=n(12),l=n(6668),s=r.createContext(void 0),u="theme",c=(0,i.W)(u),d="light",f="dark",p=function(e){return e===f?f:d};function m(){var e=(0,l.L)().colorMode,t=e.defaultMode,n=e.disableSwitch,o=e.respectPrefersColorScheme,i=(0,r.useState)(function(e){return a.Z.canUseDOM?p(document.documentElement.getAttribute("data-theme")):p(e)}(t)),s=i[0],m=i[1];(0,r.useEffect)((function(){n&&c.del()}),[n]);var h=(0,r.useCallback)((function(e,n){void 0===n&&(n={});var r=n.persist,a=void 0===r||r;e?(m(e),a&&function(e){c.set(p(e))}(e)):(m(o?window.matchMedia("(prefers-color-scheme: dark)").matches?f:d:t),c.del())}),[o,t]);(0,r.useEffect)((function(){document.documentElement.setAttribute("data-theme",p(s))}),[s]),(0,r.useEffect)((function(){if(!n){var e=function(e){if(e.key===u){var t=c.get();null!==t&&h(p(t))}};return window.addEventListener("storage",e),function(){return window.removeEventListener("storage",e)}}}),[n,h]);var g=(0,r.useRef)(!1);return(0,r.useEffect)((function(){if(!n||o){var e=window.matchMedia("(prefers-color-scheme: dark)"),t=function(){window.matchMedia("print").matches||g.current?g.current=window.matchMedia("print").matches:h(null)};return e.addListener(t),function(){return e.removeListener(t)}}}),[h,n,o]),(0,r.useMemo)((function(){return{colorMode:s,setColorMode:h,get isDarkTheme(){return s===f},setLightTheme:function(){h(d)},setDarkTheme:function(){h(f)}}}),[s,h])}function h(e){var t=e.children,n=m();return r.createElement(s.Provider,{value:n},t)}function g(){var e=(0,r.useContext)(s);if(null==e)throw new o.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},373:(e,t,n)=>{"use strict";n.d(t,{J:()=>y,L5:()=>v});var r=n(7294),a=n(143),o=n(9935),i=n(6668),l=n(8425),s=n(9688),u=n(12),c=function(e){return"docs-preferred-version-"+e},d=function(e,t,n){(0,u.W)(c(e),{persistence:t}).set(n)},f=function(e,t){return(0,u.W)(c(e),{persistence:t}).get()},p=function(e,t){(0,u.W)(c(e),{persistence:t}).del()};var m=r.createContext(null);function h(){var e=(0,a._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((function(){return Object.keys(e)}),[e]),o=(0,r.useState)((function(){return function(e){return Object.fromEntries(e.map((function(e){return[e,{preferredVersionName:null}]})))}(n)})),l=o[0],s=o[1];return(0,r.useEffect)((function(){s(function(e){var t=e.pluginIds,n=e.versionPersistence,r=e.allDocsData;return Object.fromEntries(t.map((function(e){return[e,(t=e,a=f(t,n),r[t].versions.some((function(e){return e.name===a}))?{preferredVersionName:a}:(p(t,n),{preferredVersionName:null}))];var t,a})))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]),[l,(0,r.useMemo)((function(){return{savePreferredVersion:function(e,n){d(e,t,n),s((function(t){var r;return Object.assign({},t,((r={})[e]={preferredVersionName:n},r))}))}}}),[t])]}function g(e){var t=e.children,n=h();return r.createElement(m.Provider,{value:n},t)}function v(e){var t=e.children;return l.cE?r.createElement(g,null,t):r.createElement(r.Fragment,null,t)}function b(){var e=(0,r.useContext)(m);if(!e)throw new s.i6("DocsPreferredVersionContextProvider");return e}function y(e){var t;void 0===e&&(e=o.m);var n=(0,a.zh)(e),i=b(),l=i[0],s=i[1],u=l[e].preferredVersionName;return{preferredVersion:null!=(t=n.versions.find((function(e){return e.name===u})))?t:null,savePreferredVersionName:(0,r.useCallback)((function(t){s.savePreferredVersion(e,t)}),[s,e])}}},1116:(e,t,n)=>{"use strict";n.d(t,{V:()=>s,b:()=>l});var r=n(7294),a=n(9688),o=Symbol("EmptyContext"),i=r.createContext(o);function l(e){var t=e.children,n=e.name,a=e.items,o=(0,r.useMemo)((function(){return n&&a?{name:n,items:a}:null}),[n,a]);return r.createElement(i.Provider,{value:o},t)}function s(){var e=(0,r.useContext)(i);if(e===o)throw new a.i6("DocsSidebarProvider");return e}},2961:(e,t,n)=>{"use strict";n.d(t,{M:()=>f,e:()=>p});var r=n(7294),a=n(3102),o=n(7524),i=n(6550),l=n(9688);function s(e){!function(e){var t=(0,i.k6)(),n=(0,l.zX)(e);(0,r.useEffect)((function(){return t.block((function(e,t){return n(e,t)}))}),[t,n])}((function(t,n){if("POP"===n)return e(t,n)}))}var u=n(6668),c=r.createContext(void 0);function d(){var e,t=(e=(0,a.HY)(),0===(0,u.L)().navbar.items.length&&!e.component),n=(0,o.i)(),i=!t&&"mobile"===n,l=(0,r.useState)(!1),c=l[0],d=l[1];s((function(){if(c)return d(!1),!1}));var f=(0,r.useCallback)((function(){d((function(e){return!e}))}),[]);return(0,r.useEffect)((function(){"desktop"===n&&d(!1)}),[n]),(0,r.useMemo)((function(){return{disabled:t,shouldRender:i,toggle:f,shown:c}}),[t,i,f,c])}function f(e){var t=e.children,n=d();return r.createElement(c.Provider,{value:n},t)}function p(){var e=r.useContext(c);if(void 0===e)throw new l.i6("NavbarMobileSidebarProvider");return e}},3102:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>s,n2:()=>i});var r=n(7294),a=n(9688),o=r.createContext(null);function i(e){var t=e.children,n=(0,r.useState)({component:null,props:null});return r.createElement(o.Provider,{value:n},t)}function l(){var e=(0,r.useContext)(o);if(!e)throw new a.i6("NavbarSecondaryMenuContentProvider");return e[0]}function s(e){var t=e.component,n=e.props,i=(0,r.useContext)(o);if(!i)throw new a.i6("NavbarSecondaryMenuContentProvider");var l=i[1],s=(0,a.Ql)(n);return(0,r.useEffect)((function(){l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((function(){return function(){return l({component:null,props:null})}}),[l]),null}},9727:(e,t,n)=>{"use strict";n.d(t,{h:()=>a,t:()=>o});var r=n(7294),a="navigation-with-keyboard";function o(){(0,r.useEffect)((function(){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),function(){document.body.classList.remove(a),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},7524:(e,t,n)=>{"use strict";n.d(t,{i:()=>u});var r=n(7294),a=n(412),o="desktop",i="mobile",l="ssr";function s(){return a.Z.canUseDOM?window.innerWidth>996?o:i:l}function u(){var e=(0,r.useState)((function(){return s()})),t=e[0],n=e[1];return(0,r.useEffect)((function(){function e(){n(s())}return window.addEventListener("resize",e),function(){window.removeEventListener("resize",e),clearTimeout(undefined)}}),[]),t}},5281:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});var 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:function(e){return"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:function(e){return"theme-doc-sidebar-item-category-level-"+e},docSidebarItemLinkLevel:function(e){return"theme-doc-sidebar-item-link-level-"+e}},blog:{}}},8425:(e,t,n)=>{"use strict";function r(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 a(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return r(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)?r(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var a=0;return function(){return a>=e.length?{done:!0}:{done:!1,value:e[a++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}n.d(t,{Wl:()=>m,_F:()=>g,cE:()=>p,hI:()=>E,lO:()=>y,vY:()=>k,oz:()=>w,s1:()=>b});var o=n(7294),i=n(6550),l=n(8790),s=n(143),u=n(373),c=n(1116);function d(e){return Array.from(new Set(e))}var f=n(8596),p=!!s._r;function m(e){if(e.href)return e.href;for(var t,n=a(e.items);!(t=n()).done;){var r=t.value;if("link"===r.type)return r.href;if("category"===r.type){var o=m(r);if(o)return o}}}var h=function(e,t){return void 0!==e&&(0,f.Mg)(e,t)};function g(e,t){return"link"===e.type?h(e.href,t):"category"===e.type&&(h(e.href,t)||function(e,t){return e.some((function(e){return g(e,t)}))}(e.items,t))}function v(e){var t=e.sidebarItems,n=e.pathname,r=e.onlyCategories,o=void 0!==r&&r,i=[];return function e(t){for(var r,l=a(t);!(r=l()).done;){var s=r.value;if("category"===s.type&&((0,f.Mg)(s.href,n)||e(s.items))||"link"===s.type&&(0,f.Mg)(s.href,n))return o&&"category"!==s.type||i.unshift(s),!0}return!1}(t),i}function b(){var e,t=(0,c.V)(),n=(0,i.TH)().pathname;return!1!==(null==(e=(0,s.gA)())?void 0:e.pluginData.breadcrumbs)&&t?v({sidebarItems:t.items,pathname:n}):null}function y(e){var t=(0,s.Iw)(e).activeVersion,n=(0,u.J)(e).preferredVersion,r=(0,s.yW)(e);return(0,o.useMemo)((function(){return d([t,n,r].filter(Boolean))}),[t,n,r])}function w(e,t){var n=y(t);return(0,o.useMemo)((function(){var t=n.flatMap((function(e){return e.sidebars?Object.entries(e.sidebars):[]})),r=t.find((function(t){return t[0]===e}));if(!r)throw new Error("Can't find any sidebar with id \""+e+'" in version'+(n.length>1?"s":"")+" "+n.map((function(e){return e.name})).join(", ")+'".\n  Available sidebar ids are:\n  - '+Object.keys(t).join("\n- "));return r[1]}),[e,n])}function k(e,t){var n=y(t);return(0,o.useMemo)((function(){var t=n.flatMap((function(e){return e.docs})),r=t.find((function(t){return t.id===e}));if(!r){if(n.flatMap((function(e){return e.draftIds})).includes(e))return null;throw new Error("DocNavbarItem: couldn't find any doc with id \""+e+'" in version'+(n.length>1?"s":"")+" "+n.map((function(e){return e.name})).join(", ")+'".\nAvailable doc ids are:\n- '+d(t.map((function(e){return e.id}))).join("\n- "))}return r}),[e,n])}function E(e){var t=e.route,n=e.versionMetadata,r=(0,i.TH)(),a=t.routes,o=a.find((function(e){return(0,i.LX)(r.pathname,e)}));if(!o)return null;var s=o.sidebar,u=s?n.docsSidebars[s]:void 0;return{docElement:(0,l.H)(a),sidebarName:s,sidebarItems:u}}},1944:(e,t,n)=>{"use strict";n.d(t,{FG:()=>f,d:()=>c,VC:()=>p});var r=n(7294),a=n(6010),o=n(5742),i=n(226);function l(){var e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(4996),u=n(2263);function c(e){var t=e.title,n=e.description,a=e.keywords,i=e.image,l=e.children,c=function(e){var t=(0,u.Z)().siteConfig,n=t.title,r=t.titleDelimiter;return null!=e&&e.trim().length?e.trim()+" "+r+" "+n:n}(t),d=(0,s.C)().withBaseUrl,f=i?d(i,{absolute:!0}):void 0;return r.createElement(o.Z,null,t&&r.createElement("title",null,c),t&&r.createElement("meta",{property:"og:title",content:c}),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}),f&&r.createElement("meta",{property:"og:image",content:f}),f&&r.createElement("meta",{name:"twitter:image",content:f}),l)}var d=r.createContext(void 0);function f(e){var t=e.className,n=e.children,i=r.useContext(d),l=(0,a.Z)(i,t);return r.createElement(d.Provider,{value:l},r.createElement(o.Z,null,r.createElement("html",{className:l})),n)}function p(e){var t=e.children,n=l(),o="plugin-"+n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,""),i="plugin-id-"+n.plugin.id;return r.createElement(f,{className:(0,a.Z)(o,i)},t)}},9688:(e,t,n)=>{"use strict";n.d(t,{i6:()=>m,Qc:()=>g,zX:()=>f,D9:()=>p,Ql:()=>h});var r=n(6528),a=n(4578);function o(e){return o=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},o(e)}var i=n(9611);function l(){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(e){return!1}}function s(e,t,n){return s=l()?Reflect.construct.bind():function(e,t,n){var r=[null];r.push.apply(r,t);var a=new(Function.bind.apply(e,r));return n&&(0,i.Z)(a,n.prototype),a},s.apply(null,arguments)}function u(e){var t="function"==typeof Map?new Map:void 0;return u=function(e){if(null===e||(n=e,-1===Function.toString.call(n).indexOf("[native code]")))return e;var n;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,r)}function r(){return s(e,arguments,o(this).constructor)}return r.prototype=Object.create(e.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),(0,i.Z)(r,e)},u(e)}var c=n(7294),d=n(412).Z.canUseDOM?c.useLayoutEffect:c.useEffect;function f(e){var t=(0,c.useRef)(e);return d((function(){t.current=e}),[e]),(0,c.useCallback)((function(){return t.current.apply(t,arguments)}),[])}function p(e){var t=(0,c.useRef)();return d((function(){t.current=e})),t.current}var m=function(e){function t(t,n){var a,o,i,l,s;return(s=e.call(this)||this).name="ReactContextError",s.message="Hook "+(null!=(a=null==(o=s.stack)||null==(i=o.split("\n")[1])||null==(l=i.match((0,r.Z)(/at (?:\w+\.)?(\w+)/,{name:1})))?void 0:l.groups.name)?a:"")+" is called outside the <"+t+">. "+(null!=n?n:""),s}return(0,a.Z)(t,e),t}(u(Error));function h(e){var t=Object.entries(e);return t.sort((function(e,t){return e[0].localeCompare(t[0])})),(0,c.useMemo)((function(){return e}),t.flat())}function g(e){return function(t){var n=t.children;return c.createElement(c.Fragment,null,e.reduceRight((function(e,t){return c.createElement(t,null,e)}),n))}}},8596:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>l});var r=n(7294),a=n(723),o=n(2263);function i(e,t){var n=function(e){var t;return null==(t=!e||e.endsWith("/")?e:e+"/")?void 0:t.toLowerCase()};return n(e)===n(t)}function l(){var e=(0,o.Z)().siteConfig.baseUrl;return(0,r.useMemo)((function(){return function(e){var t=e.baseUrl;function n(e){return e.path===t&&!0===e.exact}function r(e){return e.path===t&&!e.exact}return function e(t){if(0!==t.length)return t.find(n)||e(t.filter(r).flatMap((function(e){var t;return null!=(t=e.routes)?t:[]})))}(e.routes)}({routes:a.Z,baseUrl:e})}),[e])}},2466:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>f,OC:()=>s,RF:()=>d});var r=n(7294),a=n(412),o=n(2389),i=n(9688);var l=r.createContext(void 0);function s(e){var t,n=e.children,a=(t=(0,r.useRef)(!0),(0,r.useMemo)((function(){return{scrollEventsEnabledRef:t,enableScrollEvents:function(){t.current=!0},disableScrollEvents:function(){t.current=!1}}}),[]));return r.createElement(l.Provider,{value:a},n)}function u(){var e=(0,r.useContext)(l);if(null==e)throw new i.i6("ScrollControllerProvider");return e}var c=function(){return a.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null};function d(e,t){void 0===t&&(t=[]);var n=u().scrollEventsEnabledRef,a=(0,r.useRef)(c()),o=(0,i.zX)(e);(0,r.useEffect)((function(){var e=function(){if(n.current){var e=c();o(e,a.current),a.current=e}},t={passive:!0};return e(),window.addEventListener("scroll",e,t),function(){return window.removeEventListener("scroll",e,t)}}),[o,n].concat(t))}function f(){var e=(0,r.useRef)(null),t=(0,o.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:function(n){e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),function(){}}(n):function(e){var t=null,n=document.documentElement.scrollTop>e;return function r(){var a=document.documentElement.scrollTop;(n&&a>e||!n&&a<e)&&(t=requestAnimationFrame(r),window.scrollTo(0,Math.floor(.85*(a-e))+e))}(),function(){return t&&cancelAnimationFrame(t)}}(n)},cancelScroll:function(){return null==e.current?void 0:e.current()}}}},3320:(e,t,n)=>{"use strict";n.d(t,{HX:()=>r,os:()=>a});n(2263);var r="default";function a(e,t){return"docs-"+e+"-"+t}},12:(e,t,n)=>{"use strict";n.d(t,{W:()=>l,_:()=>s});var r="localStorage";function a(e){if(void 0===e&&(e=r),"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,o||(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),o=!0),null}var t}var o=!1;var i={get:function(){return null},set:function(){},del:function(){}};function l(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}}(e);var n=a(null==t?void 0:t.persistence);return null===n?i:{get:function(){try{return n.getItem(e)}catch(t){return console.error("Docusaurus storage error, can't get key="+e,t),null}},set:function(t){try{n.setItem(e,t)}catch(r){console.error("Docusaurus storage error, can't set "+e+"="+t,r)}},del:function(){try{n.removeItem(e)}catch(t){console.error("Docusaurus storage error, can't delete key="+e,t)}}}}function s(e){void 0===e&&(e=r);var t=a(e);if(!t)return[];for(var n=[],o=0;o<t.length;o+=1){var i=t.key(o);null!==i&&n.push(i)}return n}},4711:(e,t,n)=>{"use strict";n.d(t,{l:()=>o});var r=n(2263),a=n(6550);function o(){var e=(0,r.Z)(),t=e.siteConfig,n=t.baseUrl,o=t.url,i=e.i18n,l=i.defaultLocale,s=i.currentLocale,u=(0,a.TH)().pathname,c=s===l?n:n.replace("/"+s+"/","/"),d=u.replace(n,"");return{createUrl:function(e){var t=e.locale;return""+(e.fullyQualified?o:"")+function(e){return e===l?""+c:""+c+e+"/"}(t)+d}}}},5936:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(7294),a=n(6550),o=n(9688);function i(e){var t=(0,a.TH)(),n=(0,o.D9)(t),i=(0,o.zX)(e);(0,r.useEffect)((function(){n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},6668:(e,t,n)=>{"use strict";n.d(t,{L:()=>a});var r=n(2263);function a(){return(0,r.Z)().siteConfig.themeConfig}},8802:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){var n=t.trailingSlash,r=t.baseUrl;if(e.startsWith("#"))return e;if(void 0===n)return e;var a,o=e.split(/[#?]/)[0],i="/"===o||o===r?o:(a=o,n?function(e){return e.endsWith("/")?e:e+"/"}(a):function(e){return e.endsWith("/")?e.slice(0,-1):e}(a));return e.replace(o,i)}},8780: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.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="post-content";var a=n(8802);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(a).default}})},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:()=>p,PP:()=>A,Ep:()=>f});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("/")||[],l=e&&a(e),s=t&&a(t),u=l||s;if(e&&a(e)?i=r:r.length&&(i.pop(),i=i.concat(r)),!i.length)return"/";if(i.length){var c=i[i.length-1];n="."===c||".."===c||""===c}else n=!1;for(var d=0,f=i.length;f>=0;f--){var p=i[f];"."===p?o(i,f):".."===p?(o(i,f),d++):d&&(o(i,f),d--)}if(!u)for(;d--;d)i.unshift("..");!u||""===i[0]||i[0]&&a(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var l=n(8776);function s(e){return"/"===e.charAt(0)?e:"/"+e}function u(e){return"/"===e.charAt(0)?e.substr(1):e}function c(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 f(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 p(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(l){throw l instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}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 h=!("undefined"==typeof window||!window.document||!window.document.createElement);function g(e,t){t(window.confirm(e))}var v="popstate",b="hashchange";function y(){try{return window.history.state||{}}catch(e){return{}}}function w(e){void 0===e&&(e={}),h||(0,l.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,u=i.forceRefresh,w=void 0!==u&&u,k=i.getUserConfirmation,E=void 0===k?g:k,S=i.keyLength,x=void 0===S?6:S,_=e.basename?d(s(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=c(o,_)),p(o,r,n)}function T(){return Math.random().toString(36).substr(2,x)}var A=m();function L(e){(0,r.Z)(U,e),U.length=n.length,A.notifyListeners(U.location,U.action)}function R(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||P(C(e.state))}function O(){P(C(y()))}var N=!1;function P(e){if(N)N=!1,L();else{A.confirmTransitionTo(e,"POP",E,(function(t){t?L({action:"POP",location:e}):function(e){var t=U.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 j=C(y()),I=[j.key];function D(e){return _+f(e)}function M(e){n.go(e)}var F=0;function B(e){1===(F+=e)&&1===e?(window.addEventListener(v,R),o&&window.addEventListener(b,O)):0===F&&(window.removeEventListener(v,R),o&&window.removeEventListener(b,O))}var z=!1;var U={length:n.length,action:"POP",location:j,createHref:D,push:function(e,t){var r="PUSH",o=p(e,t,T(),U.location);A.confirmTransitionTo(o,r,E,(function(e){if(e){var t=D(o),i=o.key,l=o.state;if(a)if(n.pushState({key:i,state:l},null,t),w)window.location.href=t;else{var s=I.indexOf(U.location.key),u=I.slice(0,s+1);u.push(o.key),I=u,L({action:r,location:o})}else window.location.href=t}}))},replace:function(e,t){var r="REPLACE",o=p(e,t,T(),U.location);A.confirmTransitionTo(o,r,E,(function(e){if(e){var t=D(o),i=o.key,l=o.state;if(a)if(n.replaceState({key:i,state:l},null,t),w)window.location.replace(t);else{var s=I.indexOf(U.location.key);-1!==s&&(I[s]=o.key),L({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 z||(B(1),z=!0),function(){return z&&(z=!1,B(-1)),t()}},listen:function(e){var t=A.appendListener(e);return B(1),function(){B(-1),t()}}};return U}var k="hashchange",E={hashbang:{encodePath:function(e){return"!"===e.charAt(0)?e:"!/"+u(e)},decodePath:function(e){return"!"===e.charAt(0)?e.substr(1):e}},noslash:{encodePath:u,decodePath:s},slash:{encodePath:s,decodePath:s}};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={}),h||(0,l.Z)(!1);var t=window.history,n=(window.navigator.userAgent.indexOf("Firefox"),e),a=n.getUserConfirmation,o=void 0===a?g:a,i=n.hashType,u=void 0===i?"slash":i,v=e.basename?d(s(e.basename)):"",b=E[u],y=b.encodePath,w=b.decodePath;function C(){var e=w(x());return v&&(e=c(e,v)),p(e)}var T=m();function A(e){(0,r.Z)(z,e),z.length=t.length,T.notifyListeners(z.location,z.action)}var L=!1,R=null;function O(){var e,t,n=x(),r=y(n);if(n!==r)_(r);else{var a=C(),i=z.location;if(!L&&(t=a,(e=i).pathname===t.pathname&&e.search===t.search&&e.hash===t.hash))return;if(R===f(a))return;R=null,function(e){if(L)L=!1,A();else{var t="POP";T.confirmTransitionTo(e,t,o,(function(n){n?A({action:t,location:e}):function(e){var t=z.location,n=I.lastIndexOf(f(t));-1===n&&(n=0);var r=I.lastIndexOf(f(e));-1===r&&(r=0);var a=n-r;a&&(L=!0,D(a))}(e)}))}}(a)}}var N=x(),P=y(N);N!==P&&_(P);var j=C(),I=[f(j)];function D(e){t.go(e)}var M=0;function F(e){1===(M+=e)&&1===e?window.addEventListener(k,O):0===M&&window.removeEventListener(k,O)}var B=!1;var z={length:t.length,action:"POP",location:j,createHref:function(e){var t=document.querySelector("base"),n="";return t&&t.getAttribute("href")&&(n=S(window.location.href)),n+"#"+y(v+f(e))},push:function(e,t){var n="PUSH",r=p(e,void 0,void 0,z.location);T.confirmTransitionTo(r,n,o,(function(e){if(e){var t=f(r),a=y(v+t);if(x()!==a){R=t,function(e){window.location.hash=e}(a);var o=I.lastIndexOf(f(z.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=p(e,void 0,void 0,z.location);T.confirmTransitionTo(r,n,o,(function(e){if(e){var t=f(r),a=y(v+t);x()!==a&&(R=t,_(a));var o=I.indexOf(f(z.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 B||(F(1),B=!0),function(){return B&&(B=!1,F(-1)),t()}},listen:function(e){var t=T.appendListener(e);return F(1),function(){F(-1),t()}}};return z}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,l=void 0===i?0:i,s=t.keyLength,u=void 0===s?6:s,c=m();function d(e){(0,r.Z)(w,e),w.length=w.entries.length,c.notifyListeners(w.location,w.action)}function h(){return Math.random().toString(36).substr(2,u)}var g=T(l,0,o.length-1),v=o.map((function(e){return p(e,void 0,"string"==typeof e?h():e.key||h())})),b=f;function y(e){var t=T(w.index+e,0,w.entries.length-1),r=w.entries[t];c.confirmTransitionTo(r,"POP",n,(function(e){e?d({action:"POP",location:r,index:t}):d()}))}var w={length:v.length,action:"POP",location:v[g],index:g,entries:v,createHref:b,push:function(e,t){var r="PUSH",a=p(e,t,h(),w.location);c.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=p(e,t,h(),w.location);c.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),c.setPrompt(e)},listen:function(e){return c.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},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||a}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var a=p(n);a&&a!==m&&e(t,a,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var l=s(t),h=s(n),g=0;g<i.length;++g){var v=i[g];if(!(o[v]||r&&r[v]||h&&h[v]||l&&l[v])){var b=f(n,v);try{u(t,v,b)}catch(y){}}}}return t}},1143:e=>{"use strict";e.exports=function(e,t,n,r,a,o,i,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[n,r,a,o,i,l],c=0;(s=new Error(t.replace(/%s/g,(function(){return u[c++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},2497:(e,t,n)=>{"use strict";n.r(t)},7253:(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),u=o.querySelector(r.barSelector),c=r.speed,d=r.easing;return o.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(u,i(e,c,d)),1===e?(s(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){s(o,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),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");c(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var a,i=t.querySelector(r.barSelector),l=e?"-100":o(n.status||0),u=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&p(a),u!=document.body&&c(u,"nprogress-custom-parent"),u.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&&p(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 l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=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 u(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=f(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);u(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(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;function a(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}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,o){for(var i,l,s=a(e),u=1;u<arguments.length;u++){for(var c in i=Object(arguments[u]))n.call(i,c)&&(s[c]=i[c]);if(t){l=t(i);for(var d=0;d<l.length;d++)r.call(i,l[d])&&(s[l[d]]=i[l[d]])}}return s}},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,"&amp;").replace(/</g,"&lt;").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 l in o)if(o.hasOwnProperty(l)){if(l==t)for(var s in n)n.hasOwnProperty(s)&&(i[s]=n[s]);n.hasOwnProperty(l)||(i[l]=o[l])}var u=a[e];return a[e]=i,r.languages.DFS(r.languages,(function(t,n){n===u&&t!=e&&(this[t]=i)})),i},DFS:function e(t,n,a,o){o=o||{};var i=r.util.objId;for(var l in t)if(t.hasOwnProperty(l)){n.call(t,l,t[l],a||l);var s=t[l],u=r.util.type(s);"Object"!==u||o[i(s)]?"Array"!==u||o[i(s)]||(o[i(s)]=!0,e(s,n,l,o)):(o[i(s)]=!0,e(s,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 l;return s(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,l,c,d){for(var f in n)if(n.hasOwnProperty(f)&&n[f]){var p=n[f];p=Array.isArray(p)?p:[p];for(var m=0;m<p.length;++m){if(d&&d.cause==f+","+m)return;var h=p[m],g=h.inside,v=!!h.lookbehind,b=!!h.greedy,y=h.alias;if(b&&!h.pattern.global){var w=h.pattern.toString().match(/[imsuy]*$/)[0];h.pattern=RegExp(h.pattern.source,w+"g")}for(var k=h.pattern||h,E=l.next,S=c;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(b){if(!(_=o(k,S,e,v))||_.index>=e.length)break;var T=_.index,A=_.index+_[0].length,L=S;for(L+=E.value.length;T>=L;)L+=(E=E.next).value.length;if(S=L-=E.value.length,E.value instanceof a)continue;for(var R=E;R!==t.tail&&(L<A||"string"==typeof R.value);R=R.next)C++,L+=R.value.length;C--,x=e.slice(S,L),_.index-=S}else if(!(_=o(k,0,x,v)))continue;T=_.index;var O=_[0],N=x.slice(0,T),P=x.slice(T+O.length),j=S+x.length;d&&j>d.reach&&(d.reach=j);var I=E.prev;if(N&&(I=s(t,I,N),S+=N.length),u(t,I,C),E=s(t,I,new a(f,g?r.tokenize(O,g):O,y,O)),P&&s(t,E,P),C>1){var D={cause:f+","+m,reach:j};i(e,t,n,E.prev,S,D),d&&D.reach>d.reach&&(d.reach=D.reach)}}}}}}function l(){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 s(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 u(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 l="";for(var s in o.attributes)l+=" "+s+'="'+(o.attributes[s]||"").replace(/"/g,"&quot;")+'"';return"<"+o.tag+' class="'+o.classes.join(" ")+'"'+l+">"+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(/&amp;/,"&"))})),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 l=o.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),s="language-"+(l=(/[a-z][\w-]*/i.exec(l)||[""])[0].toLowerCase());i.alias?"string"==typeof i.alias?i.alias=[i.alias,s]:i.alias.push(s):i.alias=[s]}}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],u=/language-(.+)/.exec(o);if(u){n=u[1];break}}var c,d=e.languages[n];if(d)t.content=e.highlight((c=t.content,c.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)),s(n);var r=l[t];return r||e}))),d,n);else if(n&&"none"!==n&&e.plugins.autoloader){var f="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random());t.attributes.id=f,e.plugins.autoloader.loadLanguages(n,(function(){var t=document.getElementById(f);t&&(t.innerHTML=e.highlight(t.textContent,e.languages[n],n))}))}}}));var i=RegExp(e.languages.markup.tag.pattern.source,"gi"),l={amp:"&",lt:"<",gt:">",quot:'"'},s=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"])&&"("===c(1).content){n+=2;var o=f(/^\($/,/^\)$/);if(-1===o)continue;for(;n<o;n++){var i=c(0);"variable"===i.type&&(p(i,"variable-input"),a.push(i.content))}n=o+1}if(d(["punctuation","property-query"])&&"{"===c(0).content&&(n++,p(c(0),"property-mutation"),a.length>0)){var l=f(/^\{$/,/^\}$/);if(-1===l)continue;for(var s=n;s<l;s++){var u=t[s];"variable"===u.type&&a.indexOf(u.content)>=0&&p(u,"variable-input")}}}}function c(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n<e.length;n++){var r=c(n+t);if(!r||r.type!==e[n])return!1}return!0}function f(e,r){for(var a=1,o=n;o<t.length;o++){var i=t[o],l=i.content;if("punctuation"===i.type&&"string"==typeof l)if(e.test(l))a++;else if(r.test(l)&&0===--a)return o}return-1}function p(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 l(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function s(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 u(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,s(o[1],e.languages.javascript,"javascript")),o.splice.apply(o,i)}return new e.Token("interpolation",o,r.alias,t)}function c(t,n,r){var a=e.tokenize(t,{interpolation:{pattern:RegExp(o),lookbehind:!0}}),i=0,c={},d=s(a.map((function(e){if("string"==typeof e)return e;for(var n,a=e.content;-1!==t.indexOf(n=l(i++,r)););return c[n]=a,n})).join(""),n,r),f=Object.keys(c);return i=0,function e(t){for(var n=0;n<t.length;n++){if(i>=f.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var a=f[i],o="string"==typeof r?r:r.content,l=o.indexOf(a);if(-1!==l){++i;var s=o.substring(0,l),d=u(c[a]),p=o.substring(l+a.length),m=[];if(s&&m.push(s),m.push(d),p){var h=[p];e(h),m.push.apply(m,h)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):r.content=m}}else{var g=r.content;Array.isArray(g)?e(g):e([g])}}}(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 f(e){return"string"==typeof e?e:Array.isArray(e)?e.map(f).join(""):f(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 l=i[1];if(3===i.length&&"string"!=typeof l&&"embedded-code"===l.type){var s=f(l),u=l.alias,d=Array.isArray(u)?u[0]:u,p=e.languages[d];if(!p)continue;i[1]=c(s,p,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(""):""},l=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 s=i(a);r<t.length-1&&("string"==typeof t[r+1]||"plain-text"===t[r+1].type)&&(s+=i(t[r+1]),t.splice(r+1,1)),r>0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(s=i(t[r-1])+s,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",s,null,s)}a.content&&"string"!=typeof a.content&&l(a.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||l(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,l=i.length;-1!==n.code.indexOf(a=t(r,l));)++l;return i[l]=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(l){for(var s=0;s<l.length&&!(a>=o.length);s++){var u=l[s];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=o[a],d=n.tokenStack[c],f="string"==typeof u?u:u.content,p=t(r,c),m=f.indexOf(p);if(m>-1){++a;var h=f.substring(0,m),g=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),v=f.substring(m+p.length),b=[];h&&b.push.apply(b,i([h])),b.push(g),v&&b.push.apply(b,i([v])),"string"==typeof u?l.splice.apply(l,[s,1].concat(b)):u.content=b}}else u.content&&i(u.content)}return l}(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 l={},s=e[r];if(s){function u(t){if(!(t in e))throw new Error(r+" depends on an unknown component "+t);if(!(t in l))for(var i in a(t,o),l[t]=!0,n[t])l[i]=!0}t(s.require,u),t(s.optional,u),t(s.modify,u)}n[r]=l,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,l){var s=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),u=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}}(s);i=i.map(u),l=(l||[]).map(u);var c=n(i),d=n(l);i.forEach((function e(n){var r=s[n];t(r&&r.require,(function(t){t in d||(c[t]=!0,e(t))}))}));for(var f,p=r(s),m=c;a(m);){for(var h in f={},m){var g=s[h];t(g&&g.modify,(function(e){e in d&&(f[e]=!0)}))}for(var v in d)if(!(v in c))for(var b in p(v))if(b in c){f[v]=!0;break}for(var y in m=f)c[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,l={},s={};function u(e){if(e in l)return l[e];s[e]=!0;var a,c=[];for(var d in t(e))d in n&&c.push(d);if(0===c.length)a=r(e);else{var f=i(c.map((function(e){var t=u(e);return delete s[e],t})));o?a=o(f,(function(){return r(e)})):r(e)}return l[e]=a}for(var c in n)u(c);var d=[];for(var f in s)d.push(l[f]);return i(d)}(p,c,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 l=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 l.name="Invariant Violation",l}}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 l=new Set,s={};function u(e,t){c(e,t),c(e+"Capture",t)}function c(e,t){for(s[e]=t,e=0;e<t.length;e++)l.add(t[e])}var d=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),f=/^[: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]*$/,p=Object.prototype.hasOwnProperty,m={},h={};function g(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 v={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){v[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];v[t]=new g(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){v[e]=new g(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){v[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){v[e]=new g(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){v[e]=new g(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){v[e]=new g(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){v[e]=new g(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){v[e]=new g(e,5,!1,e.toLowerCase(),null,!1,!1)}));var b=/[\-:]([a-z])/g;function y(e){return e[1].toUpperCase()}function w(e,t,n,r){var a=v.hasOwnProperty(t)?v[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!!p.call(h,e)||!p.call(m,e)&&(f.test(e)?h[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(b,y);v[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);v[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);v[t]=new g(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){v[e]=new g(e,1,!1,e.toLowerCase(),null,!1,!1)})),v.xlinkHref=new g("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){v[e]=new g(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,L=60112,R=60113,O=60120,N=60115,P=60116,j=60121,I=60128,D=60129,M=60130,F=60131;if("function"==typeof Symbol&&Symbol.for){var B=Symbol.for;E=B("react.element"),S=B("react.portal"),x=B("react.fragment"),_=B("react.strict_mode"),C=B("react.profiler"),T=B("react.provider"),A=B("react.context"),L=B("react.forward_ref"),R=B("react.suspense"),O=B("react.suspense_list"),N=B("react.memo"),P=B("react.lazy"),j=B("react.block"),B("react.scope"),I=B("react.opaque.id"),D=B("react.debug_trace_mode"),M=B("react.offscreen"),F=B("react.legacy_hidden")}var z,U="function"==typeof Symbol&&Symbol.iterator;function $(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=U&&e[U]||e["@@iterator"])?e:null}function Z(e){if(void 0===z)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);z=t&&t[1]||""}return"\n"+z+e}var q=!1;function H(e,t){if(!e||q)return"";q=!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(s){var r=s}Reflect.construct(e,[],t)}else{try{t.call()}catch(s){r=s}e.call(t.prototype)}else{try{throw Error()}catch(s){r=s}e()}}catch(s){if(s&&r&&"string"==typeof s.stack){for(var a=s.stack.split("\n"),o=r.stack.split("\n"),i=a.length-1,l=o.length-1;1<=i&&0<=l&&a[i]!==o[l];)l--;for(;1<=i&&0<=l;i--,l--)if(a[i]!==o[l]){if(1!==i||1!==l)do{if(i--,0>--l||a[i]!==o[l])return"\n"+a[i].replace(" at new "," at ")}while(1<=i&&0<=l);break}}}finally{q=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?Z(e):""}function G(e){switch(e.tag){case 5:return Z(e.type);case 16:return Z("Lazy");case 13:return Z("Suspense");case 19:return Z("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 R:return"Suspense";case O: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 L:var t=e.render;return t=t.displayName||t.name||"",e.displayName||(""!==t?"ForwardRef("+t+")":"ForwardRef");case N:return V(e.type);case j:return V(e._render);case P: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 Y(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function K(e){e._valueTracker||(e._valueTracker=function(e){var t=Y(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=Y(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 le(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(i(91));return a({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function se(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 ue(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 ce(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}var de="http://www.w3.org/1999/xhtml",fe="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 me(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 he,ge,ve=(ge=function(e,t){if(e.namespaceURI!==fe||"innerHTML"in e)e.innerHTML=t;else{for((he=he||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=he.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 ye={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},we=["Webkit","ms","Moz","O"];function ke(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||ye.hasOwnProperty(e)&&ye[e]?(""+t).trim():t+"px"}function Ee(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),a=ke(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,a):e[n]=a}}Object.keys(ye).forEach((function(e){we.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),ye[t]=ye[e]}))}));var Se=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 xe(e,t){if(t){if(Se[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 _e(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 Ce(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var Te=null,Ae=null,Le=null;function Re(e){if(e=ra(e)){if("function"!=typeof Te)throw Error(i(280));var t=e.stateNode;t&&(t=oa(t),Te(e.stateNode,e.type,t))}}function Oe(e){Ae?Le?Le.push(e):Le=[e]:Ae=e}function Ne(){if(Ae){var e=Ae,t=Le;if(Le=Ae=null,Re(e),t)for(e=0;e<t.length;e++)Re(t[e])}}function Pe(e,t){return e(t)}function je(e,t,n,r,a){return e(t,n,r,a)}function Ie(){}var De=Pe,Me=!1,Fe=!1;function Be(){null===Ae&&null===Le||(Ie(),Ne())}function ze(e,t){var n=e.stateNode;if(null===n)return null;var r=oa(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 Ue=!1;if(d)try{var $e={};Object.defineProperty($e,"passive",{get:function(){Ue=!0}}),window.addEventListener("test",$e,$e),window.removeEventListener("test",$e,$e)}catch(ge){Ue=!1}function Ze(e,t,n,r,a,o,i,l,s){var u=Array.prototype.slice.call(arguments,3);try{t.apply(n,u)}catch(c){this.onError(c)}}var qe=!1,He=null,Ge=!1,Ve=null,We={onError:function(e){qe=!0,He=e}};function Ye(e,t,n,r,a,o,i,l,s){qe=!1,He=null,Ze.apply(We,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 Qe(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 Xe(e){if(Ke(e)!==e)throw Error(i(188))}function Je(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 Xe(a),e;if(o===r)return Xe(a),t;o=o.sibling}throw Error(i(188))}if(n.return!==r.return)n=a,r=o;else{for(var l=!1,s=a.child;s;){if(s===n){l=!0,n=a,r=o;break}if(s===r){l=!0,r=a,n=o;break}s=s.sibling}if(!l){for(s=o.child;s;){if(s===n){l=!0,n=o,r=a;break}if(s===r){l=!0,r=o,n=a;break}s=s.sibling}if(!l)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 et(e,t){for(var n=e.alternate;null!==t;){if(t===e||t===n)return!0;t=t.return}return!1}var tt,nt,rt,at,ot=!1,it=[],lt=null,st=null,ut=null,ct=new Map,dt=new Map,ft=[],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 mt(e,t,n,r,a){return{blockedOn:e,domEventName:t,eventSystemFlags:16|n,nativeEvent:a,targetContainers:[r]}}function ht(e,t){switch(e){case"focusin":case"focusout":lt=null;break;case"dragenter":case"dragleave":st=null;break;case"mouseover":case"mouseout":ut=null;break;case"pointerover":case"pointerout":ct.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":dt.delete(t.pointerId)}}function gt(e,t,n,r,a,o){return null===e||e.nativeEvent!==o?(e=mt(t,n,r,a,o),null!==t&&(null!==(t=ra(t))&&nt(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==a&&-1===t.indexOf(a)&&t.push(a),e)}function vt(e){var t=na(e.target);if(null!==t){var n=Ke(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=Qe(n)))return e.blockedOn=t,void at(e.lanePriority,(function(){o.unstable_runWithPriority(e.priority,(function(){rt(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=Jt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n)return null!==(t=ra(n))&&nt(t),e.blockedOn=n,!1;t.shift()}return!0}function yt(e,t,n){bt(e)&&n.delete(t)}function wt(){for(ot=!1;0<it.length;){var e=it[0];if(null!==e.blockedOn){null!==(e=ra(e.blockedOn))&&tt(e);break}for(var t=e.targetContainers;0<t.length;){var n=Jt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n){e.blockedOn=n;break}t.shift()}null===e.blockedOn&&it.shift()}null!==lt&&bt(lt)&&(lt=null),null!==st&&bt(st)&&(st=null),null!==ut&&bt(ut)&&(ut=null),ct.forEach(yt),dt.forEach(yt)}function kt(e,t){e.blockedOn===t&&(e.blockedOn=null,ot||(ot=!0,o.unstable_scheduleCallback(o.unstable_NormalPriority,wt)))}function Et(e){function t(t){return kt(t,e)}if(0<it.length){kt(it[0],e);for(var n=1;n<it.length;n++){var r=it[n];r.blockedOn===e&&(r.blockedOn=null)}}for(null!==lt&&kt(lt,e),null!==st&&kt(st,e),null!==ut&&kt(ut,e),ct.forEach(t),dt.forEach(t),n=0;n<ft.length;n++)(r=ft[n]).blockedOn===e&&(r.blockedOn=null);for(;0<ft.length&&null===(n=ft[0]).blockedOn;)vt(n),null===n.blockedOn&&ft.shift()}function St(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var xt={animationend:St("Animation","AnimationEnd"),animationiteration:St("Animation","AnimationIteration"),animationstart:St("Animation","AnimationStart"),transitionend:St("Transition","TransitionEnd")},_t={},Ct={};function Tt(e){if(_t[e])return _t[e];if(!xt[e])return e;var t,n=xt[e];for(t in n)if(n.hasOwnProperty(t)&&t in Ct)return _t[e]=n[t];return e}d&&(Ct=document.createElement("div").style,"AnimationEvent"in window||(delete xt.animationend.animation,delete xt.animationiteration.animation,delete xt.animationstart.animation),"TransitionEvent"in window||delete xt.transitionend.transition);var At=Tt("animationend"),Lt=Tt("animationiteration"),Rt=Tt("animationstart"),Ot=Tt("transitionend"),Nt=new Map,Pt=new Map,jt=["abort","abort",At,"animationEnd",Lt,"animationIteration",Rt,"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",Ot,"transitionEnd","waiting","waiting"];function It(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)),Pt.set(r,t),Nt.set(r,a),u(a,[r])}}(0,o.unstable_now)();var Dt=8;function Mt(e){if(0!=(1&e))return Dt=15,1;if(0!=(2&e))return Dt=14,2;if(0!=(4&e))return Dt=13,4;var t=24&e;return 0!==t?(Dt=12,t):0!=(32&e)?(Dt=11,32):0!==(t=192&e)?(Dt=10,t):0!=(256&e)?(Dt=9,256):0!==(t=3584&e)?(Dt=8,t):0!=(4096&e)?(Dt=7,4096):0!==(t=4186112&e)?(Dt=6,t):0!==(t=62914560&e)?(Dt=5,t):67108864&e?(Dt=4,67108864):0!=(134217728&e)?(Dt=3,134217728):0!==(t=805306368&e)?(Dt=2,t):0!=(1073741824&e)?(Dt=1,1073741824):(Dt=8,e)}function Ft(e,t){var n=e.pendingLanes;if(0===n)return Dt=0;var r=0,a=0,o=e.expiredLanes,i=e.suspendedLanes,l=e.pingedLanes;if(0!==o)r=o,a=Dt=15;else if(0!==(o=134217727&n)){var s=o&~i;0!==s?(r=Mt(s),a=Dt):0!==(l&=o)&&(r=Mt(l),a=Dt)}else 0!==(o=n&~i)?(r=Mt(o),a=Dt):0!==l&&(r=Mt(l),a=Dt);if(0===r)return 0;if(r=n&((0>(r=31-qt(r))?0:1<<r)<<1)-1,0!==t&&t!==r&&0==(t&i)){if(Mt(t),a<=Dt)return t;Dt=a}if(0!==(t=e.entangledLanes))for(e=e.entanglements,t&=r;0<t;)a=1<<(n=31-qt(t)),r|=e[n],t&=~a;return r}function Bt(e){return 0!==(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function zt(e,t){switch(e){case 15:return 1;case 14:return 2;case 12:return 0===(e=Ut(24&~t))?zt(10,t):e;case 10:return 0===(e=Ut(192&~t))?zt(8,t):e;case 8:return 0===(e=Ut(3584&~t))&&(0===(e=Ut(4186112&~t))&&(e=512)),e;case 2:return 0===(t=Ut(805306368&~t))&&(t=268435456),t}throw Error(i(358,e))}function Ut(e){return e&-e}function $t(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function Zt(e,t,n){e.pendingLanes|=t;var r=t-1;e.suspendedLanes&=r,e.pingedLanes&=r,(e=e.eventTimes)[t=31-qt(t)]=n}var qt=Math.clz32?Math.clz32:function(e){return 0===e?32:31-(Ht(e)/Gt|0)|0},Ht=Math.log,Gt=Math.LN2;var Vt=o.unstable_UserBlockingPriority,Wt=o.unstable_runWithPriority,Yt=!0;function Kt(e,t,n,r){Me||Ie();var a=Xt,o=Me;Me=!0;try{je(a,e,t,n,r)}finally{(Me=o)||Be()}}function Qt(e,t,n,r){Wt(Vt,Xt.bind(null,e,t,n,r))}function Xt(e,t,n,r){var a;if(Yt)if((a=0==(4&t))&&0<it.length&&-1<pt.indexOf(e))e=mt(null,e,t,n,r),it.push(e);else{var o=Jt(e,t,n,r);if(null===o)a&&ht(e,r);else{if(a){if(-1<pt.indexOf(e))return e=mt(o,e,t,n,r),void it.push(e);if(function(e,t,n,r,a){switch(t){case"focusin":return lt=gt(lt,e,t,n,r,a),!0;case"dragenter":return st=gt(st,e,t,n,r,a),!0;case"mouseover":return ut=gt(ut,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,dt.set(o,gt(dt.get(o)||null,e,t,n,r,a)),!0}return!1}(o,e,t,n,r))return;ht(e,r)}Ir(e,t,r,null,n)}}}function Jt(e,t,n,r){var a=Ce(r);if(null!==(a=na(a))){var o=Ke(a);if(null===o)a=null;else{var i=o.tag;if(13===i){if(null!==(a=Qe(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 Ir(e,t,r,a,n),null}var en=null,tn=null,nn=null;function rn(){if(nn)return nn;var e,t,n=tn,r=n.length,a="value"in en?en.value:en.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 nn=a.slice(e,1<t?1-t:void 0)}function an(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 on(){return!0}function ln(){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)?on:ln,this.isPropagationStopped=ln,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=on)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=on)},persist:function(){},isPersistent:on}),t}var un,cn,dn,fn={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},pn=sn(fn),mn=a({},fn,{view:0,detail:0}),hn=sn(mn),gn=a({},mn,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:An,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!==dn&&(dn&&"mousemove"===e.type?(un=e.screenX-dn.screenX,cn=e.screenY-dn.screenY):cn=un=0,dn=e),un)},movementY:function(e){return"movementY"in e?e.movementY:cn}}),vn=sn(gn),bn=sn(a({},gn,{dataTransfer:0})),yn=sn(a({},mn,{relatedTarget:0})),wn=sn(a({},fn,{animationName:0,elapsedTime:0,pseudoElement:0})),kn=a({},fn,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),En=sn(kn),Sn=sn(a({},fn,{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"},_n={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"},Cn={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function Tn(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=Cn[e])&&!!t[e]}function An(){return Tn}var Ln=a({},mn,{key:function(e){if(e.key){var t=xn[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=an(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?_n[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:An,charCode:function(e){return"keypress"===e.type?an(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?an(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),Rn=sn(Ln),On=sn(a({},gn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),Nn=sn(a({},mn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:An})),Pn=sn(a({},fn,{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}),In=sn(jn),Dn=[9,13,27,32],Mn=d&&"CompositionEvent"in window,Fn=null;d&&"documentMode"in document&&(Fn=document.documentMode);var Bn=d&&"TextEvent"in window&&!Fn,zn=d&&(!Mn||Fn&&8<Fn&&11>=Fn),Un=String.fromCharCode(32),$n=!1;function Zn(e,t){switch(e){case"keyup":return-1!==Dn.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function qn(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var Hn=!1;var Gn={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 Vn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!Gn[e.type]:"textarea"===t}function Wn(e,t,n,r){Oe(r),0<(t=Mr(t,"onChange")).length&&(n=new pn("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var Yn=null,Kn=null;function Qn(e){Lr(e,0)}function Xn(e){if(Q(aa(e)))return e}function Jn(e,t){if("change"===e)return t}var er=!1;if(d){var tr;if(d){var nr="oninput"in document;if(!nr){var rr=document.createElement("div");rr.setAttribute("oninput","return;"),nr="function"==typeof rr.oninput}tr=nr}else tr=!1;er=tr&&(!document.documentMode||9<document.documentMode)}function ar(){Yn&&(Yn.detachEvent("onpropertychange",or),Kn=Yn=null)}function or(e){if("value"===e.propertyName&&Xn(Kn)){var t=[];if(Wn(t,Kn,e,Ce(e)),e=Qn,Me)e(t);else{Me=!0;try{Pe(e,t)}finally{Me=!1,Be()}}}}function ir(e,t,n){"focusin"===e?(ar(),Kn=n,(Yn=t).attachEvent("onpropertychange",or)):"focusout"===e&&ar()}function lr(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Xn(Kn)}function sr(e,t){if("click"===e)return Xn(t)}function ur(e,t){if("input"===e||"change"===e)return Xn(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},dr=Object.prototype.hasOwnProperty;function fr(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(!dr.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 mr(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 hr(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?hr(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 vr(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,yr=null,wr=null,kr=null,Er=!1;function Sr(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;Er||null==yr||yr!==X(r)||("selectionStart"in(r=yr)&&vr(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},kr&&fr(kr,r)||(kr=r,0<(r=Mr(wr,"onSelect")).length&&(t=new pn("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=yr)))}It("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),It("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),It(jt,2);for(var xr="change selectionchange textInput compositionstart compositionend compositionupdate".split(" "),_r=0;_r<xr.length;_r++)Pt.set(xr[_r],0);c("onMouseEnter",["mouseout","mouseover"]),c("onMouseLeave",["mouseout","mouseover"]),c("onPointerEnter",["pointerout","pointerover"]),c("onPointerLeave",["pointerout","pointerover"]),u("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),u("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),u("onBeforeInput",["compositionend","keypress","textInput","paste"]),u("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),u("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),u("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var Cr="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Tr=new Set("cancel close invalid load scroll toggle".split(" ").concat(Cr));function Ar(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,function(e,t,n,r,a,o,l,s,u){if(Ye.apply(this,arguments),qe){if(!qe)throw Error(i(198));var c=He;qe=!1,He=null,Ge||(Ge=!0,Ve=c)}}(r,t,void 0,e),e.currentTarget=null}function Lr(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 l=r[i],s=l.instance,u=l.currentTarget;if(l=l.listener,s!==o&&a.isPropagationStopped())break e;Ar(a,l,u),o=s}else for(i=0;i<r.length;i++){if(s=(l=r[i]).instance,u=l.currentTarget,l=l.listener,s!==o&&a.isPropagationStopped())break e;Ar(a,l,u),o=s}}}if(Ge)throw e=Ve,Ge=!1,Ve=null,e}function Rr(e,t){var n=ia(t),r=e+"__bubble";n.has(r)||(jr(t,e,2,!1),n.add(r))}var Or="_reactListening"+Math.random().toString(36).slice(2);function Nr(e){e[Or]||(e[Or]=!0,l.forEach((function(t){Tr.has(t)||Pr(t,!1,e,null),Pr(t,!0,e,null)})))}function Pr(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&&Tr.has(e)){if("scroll"!==e)return;a|=2,o=r}var i=ia(o),l=e+"__"+(t?"capture":"bubble");i.has(l)||(t&&(a|=4),jr(o,e,a,t),i.add(l))}function jr(e,t,n,r){var a=Pt.get(t);switch(void 0===a?2:a){case 0:a=Kt;break;case 1:a=Qt;break;default:a=Xt}n=a.bind(null,t,n,e),a=void 0,!Ue||"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 Ir(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 l=r.stateNode.containerInfo;if(l===a||8===l.nodeType&&l.parentNode===a)break;if(4===i)for(i=r.return;null!==i;){var s=i.tag;if((3===s||4===s)&&((s=i.stateNode.containerInfo)===a||8===s.nodeType&&s.parentNode===a))return;i=i.return}for(;null!==l;){if(null===(i=na(l)))return;if(5===(s=i.tag)||6===s){r=o=i;continue e}l=l.parentNode}}r=r.return}!function(e,t,n){if(Fe)return e(t,n);Fe=!0;try{De(e,t,n)}finally{Fe=!1,Be()}}((function(){var r=o,a=Ce(n),i=[];e:{var l=Nt.get(e);if(void 0!==l){var s=pn,u=e;switch(e){case"keypress":if(0===an(n))break e;case"keydown":case"keyup":s=Rn;break;case"focusin":u="focus",s=yn;break;case"focusout":u="blur",s=yn;break;case"beforeblur":case"afterblur":s=yn;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":s=vn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":s=bn;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":s=Nn;break;case At:case Lt:case Rt:s=wn;break;case Ot:s=Pn;break;case"scroll":s=hn;break;case"wheel":s=In;break;case"copy":case"cut":case"paste":s=En;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":s=On}var c=0!=(4&t),d=!c&&"scroll"===e,f=c?null!==l?l+"Capture":null:l;c=[];for(var p,m=r;null!==m;){var h=(p=m).stateNode;if(5===p.tag&&null!==h&&(p=h,null!==f&&(null!=(h=ze(m,f))&&c.push(Dr(m,h,p)))),d)break;m=m.return}0<c.length&&(l=new s(l,u,null,n,a),i.push({event:l,listeners:c}))}}if(0==(7&t)){if(s="mouseout"===e||"pointerout"===e,(!(l="mouseover"===e||"pointerover"===e)||0!=(16&t)||!(u=n.relatedTarget||n.fromElement)||!na(u)&&!u[ea])&&(s||l)&&(l=a.window===a?a:(l=a.ownerDocument)?l.defaultView||l.parentWindow:window,s?(s=r,null!==(u=(u=n.relatedTarget||n.toElement)?na(u):null)&&(u!==(d=Ke(u))||5!==u.tag&&6!==u.tag)&&(u=null)):(s=null,u=r),s!==u)){if(c=vn,h="onMouseLeave",f="onMouseEnter",m="mouse","pointerout"!==e&&"pointerover"!==e||(c=On,h="onPointerLeave",f="onPointerEnter",m="pointer"),d=null==s?l:aa(s),p=null==u?l:aa(u),(l=new c(h,m+"leave",s,n,a)).target=d,l.relatedTarget=p,h=null,na(a)===r&&((c=new c(f,m+"enter",u,n,a)).target=p,c.relatedTarget=d,h=c),d=h,s&&u)e:{for(f=u,m=0,p=c=s;p;p=Fr(p))m++;for(p=0,h=f;h;h=Fr(h))p++;for(;0<m-p;)c=Fr(c),m--;for(;0<p-m;)f=Fr(f),p--;for(;m--;){if(c===f||null!==f&&c===f.alternate)break e;c=Fr(c),f=Fr(f)}c=null}else c=null;null!==s&&Br(i,l,s,c,!1),null!==u&&null!==d&&Br(i,d,u,c,!0)}if("select"===(s=(l=r?aa(r):window).nodeName&&l.nodeName.toLowerCase())||"input"===s&&"file"===l.type)var g=Jn;else if(Vn(l))if(er)g=ur;else{g=lr;var v=ir}else(s=l.nodeName)&&"input"===s.toLowerCase()&&("checkbox"===l.type||"radio"===l.type)&&(g=sr);switch(g&&(g=g(e,r))?Wn(i,g,n,a):(v&&v(e,l,r),"focusout"===e&&(v=l._wrapperState)&&v.controlled&&"number"===l.type&&ae(l,"number",l.value)),v=r?aa(r):window,e){case"focusin":(Vn(v)||"true"===v.contentEditable)&&(yr=v,wr=r,kr=null);break;case"focusout":kr=wr=yr=null;break;case"mousedown":Er=!0;break;case"contextmenu":case"mouseup":case"dragend":Er=!1,Sr(i,n,a);break;case"selectionchange":if(br)break;case"keydown":case"keyup":Sr(i,n,a)}var b;if(Mn)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 Hn?Zn(e,n)&&(y="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(y="onCompositionStart");y&&(zn&&"ko"!==n.locale&&(Hn||"onCompositionStart"!==y?"onCompositionEnd"===y&&Hn&&(b=rn()):(tn="value"in(en=a)?en.value:en.textContent,Hn=!0)),0<(v=Mr(r,y)).length&&(y=new Sn(y,e,null,n,a),i.push({event:y,listeners:v}),b?y.data=b:null!==(b=qn(n))&&(y.data=b))),(b=Bn?function(e,t){switch(e){case"compositionend":return qn(t);case"keypress":return 32!==t.which?null:($n=!0,Un);case"textInput":return(e=t.data)===Un&&$n?null:e;default:return null}}(e,n):function(e,t){if(Hn)return"compositionend"===e||!Mn&&Zn(e,t)?(e=rn(),nn=tn=en=null,Hn=!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 zn&&"ko"!==t.locale?null:t.data}}(e,n))&&(0<(r=Mr(r,"onBeforeInput")).length&&(a=new Sn("onBeforeInput","beforeinput",null,n,a),i.push({event:a,listeners:r}),a.data=b))}Lr(i,t)}))}function Dr(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Mr(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=ze(e,n))&&r.unshift(Dr(e,o,a)),null!=(o=ze(e,t))&&r.push(Dr(e,o,a))),e=e.return}return r}function Fr(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function Br(e,t,n,r,a){for(var o=t._reactName,i=[];null!==n&&n!==r;){var l=n,s=l.alternate,u=l.stateNode;if(null!==s&&s===r)break;5===l.tag&&null!==u&&(l=u,a?null!=(s=ze(n,o))&&i.unshift(Dr(n,s,l)):a||null!=(s=ze(n,o))&&i.push(Dr(n,s,l))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}function zr(){}var Ur=null,$r=null;function Zr(e,t){switch(e){case"button":case"input":case"select":case"textarea":return!!t.autoFocus}return!1}function qr(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 Hr="function"==typeof setTimeout?setTimeout:void 0,Gr="function"==typeof clearTimeout?clearTimeout:void 0;function Vr(e){1===e.nodeType?e.textContent="":9===e.nodeType&&(null!=(e=e.body)&&(e.textContent=""))}function Wr(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break}return e}function Yr(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 Qr=Math.random().toString(36).slice(2),Xr="__reactFiber$"+Qr,Jr="__reactProps$"+Qr,ea="__reactContainer$"+Qr,ta="__reactEvents$"+Qr;function na(e){var t=e[Xr];if(t)return t;for(var n=e.parentNode;n;){if(t=n[ea]||n[Xr]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=Yr(e);null!==e;){if(n=e[Xr])return n;e=Yr(e)}return t}n=(e=n).parentNode}return null}function ra(e){return!(e=e[Xr]||e[ea])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function aa(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(i(33))}function oa(e){return e[Jr]||null}function ia(e){var t=e[ta];return void 0===t&&(t=e[ta]=new Set),t}var la=[],sa=-1;function ua(e){return{current:e}}function ca(e){0>sa||(e.current=la[sa],la[sa]=null,sa--)}function da(e,t){sa++,la[sa]=e.current,e.current=t}var fa={},pa=ua(fa),ma=ua(!1),ha=fa;function ga(e,t){var n=e.type.contextTypes;if(!n)return fa;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 va(e){return null!=(e=e.childContextTypes)}function ba(){ca(ma),ca(pa)}function ya(e,t,n){if(pa.current!==fa)throw Error(i(168));da(pa,t),da(ma,n)}function wa(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 ka(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||fa,ha=pa.current,da(pa,e),da(ma,ma.current),!0}function Ea(e,t,n){var r=e.stateNode;if(!r)throw Error(i(169));n?(e=wa(e,t,ha),r.__reactInternalMemoizedMergedChildContext=e,ca(ma),ca(pa),da(pa,e)):ca(ma),da(ma,n)}var Sa=null,xa=null,_a=o.unstable_runWithPriority,Ca=o.unstable_scheduleCallback,Ta=o.unstable_cancelCallback,Aa=o.unstable_shouldYield,La=o.unstable_requestPaint,Ra=o.unstable_now,Oa=o.unstable_getCurrentPriorityLevel,Na=o.unstable_ImmediatePriority,Pa=o.unstable_UserBlockingPriority,ja=o.unstable_NormalPriority,Ia=o.unstable_LowPriority,Da=o.unstable_IdlePriority,Ma={},Fa=void 0!==La?La:function(){},Ba=null,za=null,Ua=!1,$a=Ra(),Za=1e4>$a?Ra:function(){return Ra()-$a};function qa(){switch(Oa()){case Na:return 99;case Pa:return 98;case ja:return 97;case Ia:return 96;case Da:return 95;default:throw Error(i(332))}}function Ha(e){switch(e){case 99:return Na;case 98:return Pa;case 97:return ja;case 96:return Ia;case 95:return Da;default:throw Error(i(332))}}function Ga(e,t){return e=Ha(e),_a(e,t)}function Va(e,t,n){return e=Ha(e),Ca(e,t,n)}function Wa(){if(null!==za){var e=za;za=null,Ta(e)}Ya()}function Ya(){if(!Ua&&null!==Ba){Ua=!0;var e=0;try{var t=Ba;Ga(99,(function(){for(;e<t.length;e++){var n=t[e];do{n=n(!0)}while(null!==n)}})),Ba=null}catch(n){throw null!==Ba&&(Ba=Ba.slice(e+1)),Ca(Na,Wa),n}finally{Ua=!1}}}var Ka=k.ReactCurrentBatchConfig;function Qa(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 Xa=ua(null),Ja=null,eo=null,to=null;function no(){to=eo=Ja=null}function ro(e){var t=Xa.current;ca(Xa),e.type._context._currentValue=t}function ao(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 oo(e,t){Ja=e,to=eo=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(Mi=!0),e.firstContext=null)}function io(e,t){if(to!==e&&!1!==t&&0!==t)if("number"==typeof t&&1073741823!==t||(to=e,t=1073741823),t={context:e,observedBits:t,next:null},null===eo){if(null===Ja)throw Error(i(308));eo=t,Ja.dependencies={lanes:0,firstContext:t,responders:null}}else eo=eo.next=t;return e._currentValue}var lo=!1;function so(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null},effects:null}}function uo(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 fo(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 mo(e,t,n,r){var o=e.updateQueue;lo=!1;var i=o.firstBaseUpdate,l=o.lastBaseUpdate,s=o.shared.pending;if(null!==s){o.shared.pending=null;var u=s,c=u.next;u.next=null,null===l?i=c:l.next=c,l=u;var d=e.alternate;if(null!==d){var f=(d=d.updateQueue).lastBaseUpdate;f!==l&&(null===f?d.firstBaseUpdate=c:f.next=c,d.lastBaseUpdate=u)}}if(null!==i){for(f=o.baseState,l=0,d=c=u=null;;){s=i.lane;var p=i.eventTime;if((r&s)===s){null!==d&&(d=d.next={eventTime:p,lane:0,tag:i.tag,payload:i.payload,callback:i.callback,next:null});e:{var m=e,h=i;switch(s=t,p=n,h.tag){case 1:if("function"==typeof(m=h.payload)){f=m.call(p,f,s);break e}f=m;break e;case 3:m.flags=-4097&m.flags|64;case 0:if(null==(s="function"==typeof(m=h.payload)?m.call(p,f,s):m))break e;f=a({},f,s);break e;case 2:lo=!0}}null!==i.callback&&(e.flags|=32,null===(s=o.effects)?o.effects=[i]:s.push(i))}else p={eventTime:p,lane:s,tag:i.tag,payload:i.payload,callback:i.callback,next:null},null===d?(c=d=p,u=f):d=d.next=p,l|=s;if(null===(i=i.next)){if(null===(s=o.shared.pending))break;i=s.next,s.next=null,o.lastBaseUpdate=s,o.shared.pending=null}}null===d&&(u=f),o.baseState=u,o.firstBaseUpdate=c,o.lastBaseUpdate=d,Ul|=l,e.lanes=l,e.memoizedState=f}}function ho(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 vo(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=fs(),a=ps(e),o=co(r,a);o.payload=t,null!=n&&(o.callback=n),fo(e,o),ms(e,a,r)},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=fs(),a=ps(e),o=co(r,a);o.tag=1,o.payload=t,null!=n&&(o.callback=n),fo(e,o),ms(e,a,r)},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=fs(),r=ps(e),a=co(n,r);a.tag=2,null!=t&&(a.callback=t),fo(e,a),ms(e,r,n)}};function yo(e,t,n,r,a,o,i){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,o,i):!t.prototype||!t.prototype.isPureReactComponent||(!fr(n,r)||!fr(a,o))}function wo(e,t,n){var r=!1,a=fa,o=t.contextType;return"object"==typeof o&&null!==o?o=io(o):(a=va(t)?ha:pa.current,o=(r=null!=(r=t.contextTypes))?ga(e,a):fa),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 ko(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 Eo(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=io(o):(o=va(t)?ha:pa.current,a.context=ga(e,o)),mo(e,n,a,r),a.state=e.memoizedState,"function"==typeof(o=t.getDerivedStateFromProps)&&(vo(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),mo(e,n,a,r),a.state=e.memoizedState),"function"==typeof a.componentDidMount&&(e.flags|=4)}var So=Array.isArray;function xo(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 _o(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 Co(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=Gs(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 l(t){return e&&null===t.alternate&&(t.flags=2),t}function s(e,t,n,r){return null===t||6!==t.tag?((t=Ks(n,e.mode,r)).return=e,t):((t=a(t,n)).return=e,t)}function u(e,t,n,r){return null!==t&&t.elementType===n.type?((r=a(t,n.props)).ref=xo(e,t,n),r.return=e,r):((r=Vs(n.type,n.key,n.props,null,e.mode,r)).ref=xo(e,t,n),r.return=e,r)}function c(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Qs(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=Ws(n,e.mode,r,o)).return=e,t):((t=a(t,n)).return=e,t)}function f(e,t,n){if("string"==typeof t||"number"==typeof t)return(t=Ks(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case E:return(n=Vs(t.type,t.key,t.props,null,e.mode,n)).ref=xo(e,null,t),n.return=e,n;case S:return(t=Qs(t,e.mode,n)).return=e,t}if(So(t)||$(t))return(t=Ws(t,e.mode,n,null)).return=e,t;_o(e,t)}return null}function p(e,t,n,r){var a=null!==t?t.key:null;if("string"==typeof n||"number"==typeof n)return null!==a?null:s(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):u(e,t,n,r):null;case S:return n.key===a?c(e,t,n,r):null}if(So(n)||$(n))return null!==a?null:d(e,t,n,r,null);_o(e,n)}return null}function m(e,t,n,r,a){if("string"==typeof r||"number"==typeof r)return s(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):u(t,e,r,a);case S:return c(t,e=e.get(null===r.key?n:r.key)||null,r,a)}if(So(r)||$(r))return d(t,e=e.get(n)||null,r,a,null);_o(t,r)}return null}function h(a,i,l,s){for(var u=null,c=null,d=i,h=i=0,g=null;null!==d&&h<l.length;h++){d.index>h?(g=d,d=null):g=d.sibling;var v=p(a,d,l[h],s);if(null===v){null===d&&(d=g);break}e&&d&&null===v.alternate&&t(a,d),i=o(v,i,h),null===c?u=v:c.sibling=v,c=v,d=g}if(h===l.length)return n(a,d),u;if(null===d){for(;h<l.length;h++)null!==(d=f(a,l[h],s))&&(i=o(d,i,h),null===c?u=d:c.sibling=d,c=d);return u}for(d=r(a,d);h<l.length;h++)null!==(g=m(d,a,h,l[h],s))&&(e&&null!==g.alternate&&d.delete(null===g.key?h:g.key),i=o(g,i,h),null===c?u=g:c.sibling=g,c=g);return e&&d.forEach((function(e){return t(a,e)})),u}function g(a,l,s,u){var c=$(s);if("function"!=typeof c)throw Error(i(150));if(null==(s=c.call(s)))throw Error(i(151));for(var d=c=null,h=l,g=l=0,v=null,b=s.next();null!==h&&!b.done;g++,b=s.next()){h.index>g?(v=h,h=null):v=h.sibling;var y=p(a,h,b.value,u);if(null===y){null===h&&(h=v);break}e&&h&&null===y.alternate&&t(a,h),l=o(y,l,g),null===d?c=y:d.sibling=y,d=y,h=v}if(b.done)return n(a,h),c;if(null===h){for(;!b.done;g++,b=s.next())null!==(b=f(a,b.value,u))&&(l=o(b,l,g),null===d?c=b:d.sibling=b,d=b);return c}for(h=r(a,h);!b.done;g++,b=s.next())null!==(b=m(h,a,g,b.value,u))&&(e&&null!==b.alternate&&h.delete(null===b.key?g:b.key),l=o(b,l,g),null===d?c=b:d.sibling=b,d=b);return e&&h.forEach((function(e){return t(a,e)})),c}return function(e,r,o,s){var u="object"==typeof o&&null!==o&&o.type===x&&null===o.key;u&&(o=o.props.children);var c="object"==typeof o&&null!==o;if(c)switch(o.$$typeof){case E:e:{for(c=o.key,u=r;null!==u;){if(u.key===c){if(7===u.tag){if(o.type===x){n(e,u.sibling),(r=a(u,o.props.children)).return=e,e=r;break e}}else if(u.elementType===o.type){n(e,u.sibling),(r=a(u,o.props)).ref=xo(e,u,o),r.return=e,e=r;break e}n(e,u);break}t(e,u),u=u.sibling}o.type===x?((r=Ws(o.props.children,e.mode,s,o.key)).return=e,e=r):((s=Vs(o.type,o.key,o.props,null,e.mode,s)).ref=xo(e,r,o),s.return=e,e=s)}return l(e);case S:e:{for(u=o.key;null!==r;){if(r.key===u){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=Qs(o,e.mode,s)).return=e,e=r}return l(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=Ks(o,e.mode,s)).return=e,e=r),l(e);if(So(o))return h(e,r,o,s);if($(o))return g(e,r,o,s);if(c&&_o(e,o),void 0===o&&!u)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 To=Co(!0),Ao=Co(!1),Lo={},Ro=ua(Lo),Oo=ua(Lo),No=ua(Lo);function Po(e){if(e===Lo)throw Error(i(174));return e}function jo(e,t){switch(da(No,t),da(Oo,e),da(Ro,Lo),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:me(null,"");break;default:t=me(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}ca(Ro),da(Ro,t)}function Io(){ca(Ro),ca(Oo),ca(No)}function Do(e){Po(No.current);var t=Po(Ro.current),n=me(t,e.type);t!==n&&(da(Oo,e),da(Ro,n))}function Mo(e){Oo.current===e&&(ca(Ro),ca(Oo))}var Fo=ua(0);function Bo(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 zo=null,Uo=null,$o=!1;function Zo(e,t){var n=qs(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 qo(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 Ho(e){if($o){var t=Uo;if(t){var n=t;if(!qo(e,t)){if(!(t=Wr(n.nextSibling))||!qo(e,t))return e.flags=-1025&e.flags|2,$o=!1,void(zo=e);Zo(zo,n)}zo=e,Uo=Wr(t.firstChild)}else e.flags=-1025&e.flags|2,$o=!1,zo=e}}function Go(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;zo=e}function Vo(e){if(e!==zo)return!1;if(!$o)return Go(e),$o=!0,!1;var t=e.type;if(5!==e.tag||"head"!==t&&"body"!==t&&!qr(t,e.memoizedProps))for(t=Uo;t;)Zo(e,t),t=Wr(t.nextSibling);if(Go(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){Uo=Wr(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}Uo=null}}else Uo=zo?Wr(e.stateNode.nextSibling):null;return!0}function Wo(){Uo=zo=null,$o=!1}var Yo=[];function Ko(){for(var e=0;e<Yo.length;e++)Yo[e]._workInProgressVersionPrimary=null;Yo.length=0}var Qo=k.ReactCurrentDispatcher,Xo=k.ReactCurrentBatchConfig,Jo=0,ei=null,ti=null,ni=null,ri=!1,ai=!1;function oi(){throw Error(i(321))}function ii(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 li(e,t,n,r,a,o){if(Jo=o,ei=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,Qo.current=null===e||null===e.memoizedState?Pi:ji,e=n(r,a),ai){o=0;do{if(ai=!1,!(25>o))throw Error(i(301));o+=1,ni=ti=null,t.updateQueue=null,Qo.current=Ii,e=n(r,a)}while(ai)}if(Qo.current=Ni,t=null!==ti&&null!==ti.next,Jo=0,ni=ti=ei=null,ri=!1,t)throw Error(i(300));return e}function si(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===ni?ei.memoizedState=ni=e:ni=ni.next=e,ni}function ui(){if(null===ti){var e=ei.alternate;e=null!==e?e.memoizedState:null}else e=ti.next;var t=null===ni?ei.memoizedState:ni.next;if(null!==t)ni=t,ti=e;else{if(null===e)throw Error(i(310));e={memoizedState:(ti=e).memoizedState,baseState:ti.baseState,baseQueue:ti.baseQueue,queue:ti.queue,next:null},null===ni?ei.memoizedState=ni=e:ni=ni.next=e}return ni}function ci(e,t){return"function"==typeof t?t(e):t}function di(e){var t=ui(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=ti,a=r.baseQueue,o=n.pending;if(null!==o){if(null!==a){var l=a.next;a.next=o.next,o.next=l}r.baseQueue=a=o,n.pending=null}if(null!==a){a=a.next,r=r.baseState;var s=l=o=null,u=a;do{var c=u.lane;if((Jo&c)===c)null!==s&&(s=s.next={lane:0,action:u.action,eagerReducer:u.eagerReducer,eagerState:u.eagerState,next:null}),r=u.eagerReducer===e?u.eagerState:e(r,u.action);else{var d={lane:c,action:u.action,eagerReducer:u.eagerReducer,eagerState:u.eagerState,next:null};null===s?(l=s=d,o=r):s=s.next=d,ei.lanes|=c,Ul|=c}u=u.next}while(null!==u&&u!==a);null===s?o=r:s.next=l,cr(r,t.memoizedState)||(Mi=!0),t.memoizedState=r,t.baseState=o,t.baseQueue=s,n.lastRenderedState=r}return[t.memoizedState,n.dispatch]}function fi(e){var t=ui(),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 l=a=a.next;do{o=e(o,l.action),l=l.next}while(l!==a);cr(o,t.memoizedState)||(Mi=!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=(Jo&e)===e)&&(t._workInProgressVersionPrimary=r,Yo.push(t))),e)return n(t._source);throw Yo.push(t),Error(i(350))}function mi(e,t,n,r){var a=Pl;if(null===a)throw Error(i(349));var o=t._getVersion,l=o(t._source),s=Qo.current,u=s.useState((function(){return pi(a,t,n)})),c=u[1],d=u[0];u=ni;var f=e.memoizedState,p=f.refs,m=p.getSnapshot,h=f.source;f=f.subscribe;var g=ei;return e.memoizedState={refs:p,source:t,subscribe:r},s.useEffect((function(){p.getSnapshot=n,p.setSnapshot=c;var e=o(t._source);if(!cr(l,e)){e=n(t._source),cr(d,e)||(c(e),e=ps(g),a.mutableReadLanes|=e&a.pendingLanes),e=a.mutableReadLanes,a.entangledLanes|=e;for(var r=a.entanglements,i=e;0<i;){var s=31-qt(i),u=1<<s;r[s]|=e,i&=~u}}}),[n,t,r]),s.useEffect((function(){return r(t._source,(function(){var e=p.getSnapshot,n=p.setSnapshot;try{n(e(t._source));var r=ps(g);a.mutableReadLanes|=r&a.pendingLanes}catch(o){n((function(){throw o}))}}))}),[t,r]),cr(m,n)&&cr(h,t)&&cr(f,r)||((e={pending:null,dispatch:null,lastRenderedReducer:ci,lastRenderedState:d}).dispatch=c=Oi.bind(null,ei,e),u.queue=e,u.baseQueue=null,d=pi(a,t,n),u.memoizedState=u.baseState=d),d}function hi(e,t,n){return mi(ui(),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=Oi.bind(null,ei,e),[t.memoizedState,e]}function vi(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===(t=ei.updateQueue)?(t={lastEffect:null},ei.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 yi(){return ui().memoizedState}function wi(e,t,n,r){var a=si();ei.flags|=e,a.memoizedState=vi(1|t,n,void 0,void 0===r?null:r)}function ki(e,t,n,r){var a=ui();r=void 0===r?null:r;var o=void 0;if(null!==ti){var i=ti.memoizedState;if(o=i.destroy,null!==r&&ii(r,i.deps))return void vi(t,n,o,r)}ei.flags|=e,a.memoizedState=vi(1|t,n,o,r)}function Ei(e,t){return wi(516,4,e,t)}function Si(e,t){return ki(516,4,e,t)}function xi(e,t){return ki(4,2,e,t)}function _i(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 Ci(e,t,n){return n=null!=n?n.concat([e]):null,ki(4,2,_i.bind(null,t,e),n)}function Ti(){}function Ai(e,t){var n=ui();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&ii(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function Li(e,t){var n=ui();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&ii(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function Ri(e,t){var n=qa();Ga(98>n?98:n,(function(){e(!0)})),Ga(97<n?97:n,(function(){var n=Xo.transition;Xo.transition=1;try{e(!1),t()}finally{Xo.transition=n}}))}function Oi(e,t,n){var r=fs(),a=ps(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===ei||null!==i&&i===ei)ai=ri=!0;else{if(0===e.lanes&&(null===i||0===i.lanes)&&null!==(i=t.lastRenderedReducer))try{var l=t.lastRenderedState,s=i(l,n);if(o.eagerReducer=i,o.eagerState=s,cr(s,l))return}catch(u){}ms(e,a,r)}}var Ni={readContext:io,useCallback:oi,useContext:oi,useEffect:oi,useImperativeHandle:oi,useLayoutEffect:oi,useMemo:oi,useReducer:oi,useRef:oi,useState:oi,useDebugValue:oi,useDeferredValue:oi,useTransition:oi,useMutableSource:oi,useOpaqueIdentifier:oi,unstable_isNewReconciler:!1},Pi={readContext:io,useCallback:function(e,t){return si().memoizedState=[e,void 0===t?null:t],e},useContext:io,useEffect:Ei,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,wi(4,2,_i.bind(null,t,e),n)},useLayoutEffect:function(e,t){return wi(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=Oi.bind(null,ei,e),[r.memoizedState,e]},useRef:bi,useState:gi,useDebugValue:Ti,useDeferredValue:function(e){var t=gi(e),n=t[0],r=t[1];return Ei((function(){var t=Xo.transition;Xo.transition=1;try{r(e)}finally{Xo.transition=t}}),[e]),n},useTransition:function(){var e=gi(!1),t=e[0];return bi(e=Ri.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},mi(r,e,t,n)},useOpaqueIdentifier:function(){if($o){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&ei.mode)&&(ei.flags|=516,vi(5,(function(){n("r:"+(Kr++).toString(36))}),void 0,null)),t}return gi(t="r:"+(Kr++).toString(36)),t},unstable_isNewReconciler:!1},ji={readContext:io,useCallback:Ai,useContext:io,useEffect:Si,useImperativeHandle:Ci,useLayoutEffect:xi,useMemo:Li,useReducer:di,useRef:yi,useState:function(){return di(ci)},useDebugValue:Ti,useDeferredValue:function(e){var t=di(ci),n=t[0],r=t[1];return Si((function(){var t=Xo.transition;Xo.transition=1;try{r(e)}finally{Xo.transition=t}}),[e]),n},useTransition:function(){var e=di(ci)[0];return[yi().current,e]},useMutableSource:hi,useOpaqueIdentifier:function(){return di(ci)[0]},unstable_isNewReconciler:!1},Ii={readContext:io,useCallback:Ai,useContext:io,useEffect:Si,useImperativeHandle:Ci,useLayoutEffect:xi,useMemo:Li,useReducer:fi,useRef:yi,useState:function(){return fi(ci)},useDebugValue:Ti,useDeferredValue:function(e){var t=fi(ci),n=t[0],r=t[1];return Si((function(){var t=Xo.transition;Xo.transition=1;try{r(e)}finally{Xo.transition=t}}),[e]),n},useTransition:function(){var e=fi(ci)[0];return[yi().current,e]},useMutableSource:hi,useOpaqueIdentifier:function(){return fi(ci)[0]},unstable_isNewReconciler:!1},Di=k.ReactCurrentOwner,Mi=!1;function Fi(e,t,n,r){t.child=null===e?Ao(t,null,n,r):To(t,e.child,n,r)}function Bi(e,t,n,r,a){n=n.render;var o=t.ref;return oo(t,a),r=li(e,t,n,r,o,a),null===e||Mi?(t.flags|=1,Fi(e,t,r,a),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~a,ol(e,t,a))}function zi(e,t,n,r,a,o){if(null===e){var i=n.type;return"function"!=typeof i||Hs(i)||void 0!==i.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Vs(n.type,null,r,t,t.mode,o)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=i,Ui(e,t,i,r,a,o))}return i=e.child,0==(a&o)&&(a=i.memoizedProps,(n=null!==(n=n.compare)?n:fr)(a,r)&&e.ref===t.ref)?ol(e,t,o):(t.flags|=1,(e=Gs(i,r)).ref=t.ref,e.return=t,t.child=e)}function Ui(e,t,n,r,a,o){if(null!==e&&fr(e.memoizedProps,r)&&e.ref===t.ref){if(Mi=!1,0==(o&a))return t.lanes=e.lanes,ol(e,t,o);0!=(16384&e.flags)&&(Mi=!0)}return qi(e,t,n,r,o)}function $i(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},Es(t,n);else{if(0==(1073741824&n))return e=null!==o?o.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e},Es(t,e),null;t.memoizedState={baseLanes:0},Es(t,null!==o?o.baseLanes:n)}else null!==o?(r=o.baseLanes|n,t.memoizedState=null):r=n,Es(t,r);return Fi(e,t,a,n),t.child}function Zi(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=128)}function qi(e,t,n,r,a){var o=va(n)?ha:pa.current;return o=ga(t,o),oo(t,a),n=li(e,t,n,r,o,a),null===e||Mi?(t.flags|=1,Fi(e,t,n,a),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~a,ol(e,t,a))}function Hi(e,t,n,r,a){if(va(n)){var o=!0;ka(t)}else o=!1;if(oo(t,a),null===t.stateNode)null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),wo(t,n,r),Eo(t,n,r,a),r=!0;else if(null===e){var i=t.stateNode,l=t.memoizedProps;i.props=l;var s=i.context,u=n.contextType;"object"==typeof u&&null!==u?u=io(u):u=ga(t,u=va(n)?ha:pa.current);var c=n.getDerivedStateFromProps,d="function"==typeof c||"function"==typeof i.getSnapshotBeforeUpdate;d||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(l!==r||s!==u)&&ko(t,i,r,u),lo=!1;var f=t.memoizedState;i.state=f,mo(t,r,i,a),s=t.memoizedState,l!==r||f!==s||ma.current||lo?("function"==typeof c&&(vo(t,n,c,r),s=t.memoizedState),(l=lo||yo(t,n,l,r,f,s,u))?(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=s),i.props=r,i.state=s,i.context=u,r=l):("function"==typeof i.componentDidMount&&(t.flags|=4),r=!1)}else{i=t.stateNode,uo(e,t),l=t.memoizedProps,u=t.type===t.elementType?l:Qa(t.type,l),i.props=u,d=t.pendingProps,f=i.context,"object"==typeof(s=n.contextType)&&null!==s?s=io(s):s=ga(t,s=va(n)?ha:pa.current);var p=n.getDerivedStateFromProps;(c="function"==typeof p||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(l!==d||f!==s)&&ko(t,i,r,s),lo=!1,f=t.memoizedState,i.state=f,mo(t,r,i,a);var m=t.memoizedState;l!==d||f!==m||ma.current||lo?("function"==typeof p&&(vo(t,n,p,r),m=t.memoizedState),(u=lo||yo(t,n,u,r,f,m,s))?(c||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(r,m,s),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(r,m,s)),"function"==typeof i.componentDidUpdate&&(t.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(t.flags|=256)):("function"!=typeof i.componentDidUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=256),t.memoizedProps=r,t.memoizedState=m),i.props=r,i.state=m,i.context=s,r=u):("function"!=typeof i.componentDidUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=256),r=!1)}return Gi(e,t,n,r,o,a)}function Gi(e,t,n,r,a,o){Zi(e,t);var i=0!=(64&t.flags);if(!r&&!i)return a&&Ea(t,n,!1),ol(e,t,o);r=t.stateNode,Di.current=t;var l=i&&"function"!=typeof n.getDerivedStateFromError?null:r.render();return t.flags|=1,null!==e&&i?(t.child=To(t,e.child,null,o),t.child=To(t,null,l,o)):Fi(e,t,l,o),t.memoizedState=r.state,a&&Ea(t,n,!0),t.child}function Vi(e){var t=e.stateNode;t.pendingContext?ya(0,t.pendingContext,t.pendingContext!==t.context):t.context&&ya(0,t.context,!1),jo(e,t.containerInfo)}var Wi,Yi,Ki,Qi={dehydrated:null,retryLane:0};function Xi(e,t,n){var r,a=t.pendingProps,o=Fo.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),da(Fo,1&o),null===e?(void 0!==a.fallback&&Ho(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=Ys({mode:"visible",children:e},t.mode,n,null)).return=t,t.child=n)):(e.memoizedState,i?(a=tl(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=el(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=Ys(t,a,0,null),n=Ws(n,a,r,null),o.return=e,n.return=e,o.sibling=n,e.child=o,n}function el(e,t,n,r){var a=e.child;return e=a.sibling,n=Gs(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 tl(e,t,n,r,a){var o=t.mode,i=e.child;e=i.sibling;var l={mode:"hidden",children:n};return 0==(2&o)&&t.child!==i?((n=t.child).childLanes=0,n.pendingProps=l,null!==(i=n.lastEffect)?(t.firstEffect=n.firstEffect,t.lastEffect=i,i.nextEffect=null):t.firstEffect=t.lastEffect=null):n=Gs(i,l),null!==e?r=Gs(e,r):(r=Ws(r,o,a,null)).flags|=2,r.return=t,n.return=t,n.sibling=r,t.child=n,r}function nl(e,t){e.lanes|=t;var n=e.alternate;null!==n&&(n.lanes|=t),ao(e.return,t)}function rl(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 al(e,t,n){var r=t.pendingProps,a=r.revealOrder,o=r.tail;if(Fi(e,t,r.children,n),0!=(2&(r=Fo.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&&nl(e,n);else if(19===e.tag)nl(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(da(Fo,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===Bo(e)&&(a=n),n=n.sibling;null===(n=a)?(a=t.child,t.child=null):(a=n.sibling,n.sibling=null),rl(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===Bo(e)){t.child=a;break}e=a.sibling,a.sibling=n,n=a,a=e}rl(t,!0,n,null,o,t.lastEffect);break;case"together":rl(t,!1,null,null,void 0,t.lastEffect);break;default:t.memoizedState=null}return t.child}function ol(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),Ul|=t.lanes,0!=(n&t.childLanes)){if(null!==e&&t.child!==e.child)throw Error(i(153));if(null!==t.child){for(n=Gs(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Gs(e,e.pendingProps)).return=t;n.sibling=null}return t.child}return null}function il(e,t){if(!$o)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 ll(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 va(t.type)&&ba(),null;case 3:return Io(),ca(ma),ca(pa),Ko(),(r=t.stateNode).pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||(Vo(t)?t.flags|=4:r.hydrate||(t.flags|=256)),null;case 5:Mo(t);var o=Po(No.current);if(n=t.type,null!==e&&null!=t.stateNode)Yi(e,t,n,r),e.ref!==t.ref&&(t.flags|=128);else{if(!r){if(null===t.stateNode)throw Error(i(166));return null}if(e=Po(Ro.current),Vo(t)){r=t.stateNode,n=t.type;var l=t.memoizedProps;switch(r[Xr]=t,r[Jr]=l,n){case"dialog":Rr("cancel",r),Rr("close",r);break;case"iframe":case"object":case"embed":Rr("load",r);break;case"video":case"audio":for(e=0;e<Cr.length;e++)Rr(Cr[e],r);break;case"source":Rr("error",r);break;case"img":case"image":case"link":Rr("error",r),Rr("load",r);break;case"details":Rr("toggle",r);break;case"input":ee(r,l),Rr("invalid",r);break;case"select":r._wrapperState={wasMultiple:!!l.multiple},Rr("invalid",r);break;case"textarea":se(r,l),Rr("invalid",r)}for(var u in xe(n,l),e=null,l)l.hasOwnProperty(u)&&(o=l[u],"children"===u?"string"==typeof o?r.textContent!==o&&(e=["children",o]):"number"==typeof o&&r.textContent!==""+o&&(e=["children",""+o]):s.hasOwnProperty(u)&&null!=o&&"onScroll"===u&&Rr("scroll",r));switch(n){case"input":K(r),re(r,l,!0);break;case"textarea":K(r),ce(r);break;case"select":case"option":break;default:"function"==typeof l.onClick&&(r.onclick=zr)}r=e,t.updateQueue=r,null!==r&&(t.flags|=4)}else{switch(u=9===o.nodeType?o:o.ownerDocument,e===de&&(e=pe(n)),e===de?"script"===n?((e=u.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof r.is?e=u.createElement(n,{is:r.is}):(e=u.createElement(n),"select"===n&&(u=e,r.multiple?u.multiple=!0:r.size&&(u.size=r.size))):e=u.createElementNS(e,n),e[Xr]=t,e[Jr]=r,Wi(e,t),t.stateNode=e,u=_e(n,r),n){case"dialog":Rr("cancel",e),Rr("close",e),o=r;break;case"iframe":case"object":case"embed":Rr("load",e),o=r;break;case"video":case"audio":for(o=0;o<Cr.length;o++)Rr(Cr[o],e);o=r;break;case"source":Rr("error",e),o=r;break;case"img":case"image":case"link":Rr("error",e),Rr("load",e),o=r;break;case"details":Rr("toggle",e),o=r;break;case"input":ee(e,r),o=J(e,r),Rr("invalid",e);break;case"option":o=oe(e,r);break;case"select":e._wrapperState={wasMultiple:!!r.multiple},o=a({},r,{value:void 0}),Rr("invalid",e);break;case"textarea":se(e,r),o=le(e,r),Rr("invalid",e);break;default:o=r}xe(n,o);var c=o;for(l in c)if(c.hasOwnProperty(l)){var d=c[l];"style"===l?Ee(e,d):"dangerouslySetInnerHTML"===l?null!=(d=d?d.__html:void 0)&&ve(e,d):"children"===l?"string"==typeof d?("textarea"!==n||""!==d)&&be(e,d):"number"==typeof d&&be(e,""+d):"suppressContentEditableWarning"!==l&&"suppressHydrationWarning"!==l&&"autoFocus"!==l&&(s.hasOwnProperty(l)?null!=d&&"onScroll"===l&&Rr("scroll",e):null!=d&&w(e,l,d,u))}switch(n){case"input":K(e),re(e,r,!1);break;case"textarea":K(e),ce(e);break;case"option":null!=r.value&&e.setAttribute("value",""+W(r.value));break;case"select":e.multiple=!!r.multiple,null!=(l=r.value)?ie(e,!!r.multiple,l,!1):null!=r.defaultValue&&ie(e,!!r.multiple,r.defaultValue,!0);break;default:"function"==typeof o.onClick&&(e.onclick=zr)}Zr(n,r)&&(t.flags|=4)}null!==t.ref&&(t.flags|=128)}return null;case 6:if(e&&null!=t.stateNode)Ki(0,t,e.memoizedProps,r);else{if("string"!=typeof r&&null===t.stateNode)throw Error(i(166));n=Po(No.current),Po(Ro.current),Vo(t)?(r=t.stateNode,n=t.memoizedProps,r[Xr]=t,r.nodeValue!==n&&(t.flags|=4)):((r=(9===n.nodeType?n:n.ownerDocument).createTextNode(r))[Xr]=t,t.stateNode=r)}return null;case 13:return ca(Fo),r=t.memoizedState,0!=(64&t.flags)?(t.lanes=n,t):(r=null!==r,n=!1,null===e?void 0!==t.memoizedProps.fallback&&Vo(t):n=null!==e.memoizedState,r&&!n&&0!=(2&t.mode)&&(null===e&&!0!==t.memoizedProps.unstable_avoidThisFallback||0!=(1&Fo.current)?0===Fl&&(Fl=3):(0!==Fl&&3!==Fl||(Fl=4),null===Pl||0==(134217727&Ul)&&0==(134217727&$l)||bs(Pl,Il))),(r||n)&&(t.flags|=4),null);case 4:return Io(),null===e&&Nr(t.stateNode.containerInfo),null;case 10:return ro(t),null;case 19:if(ca(Fo),null===(r=t.memoizedState))return null;if(l=0!=(64&t.flags),null===(u=r.rendering))if(l)il(r,!1);else{if(0!==Fl||null!==e&&0!=(64&e.flags))for(e=t.child;null!==e;){if(null!==(u=Bo(e))){for(t.flags|=64,il(r,!1),null!==(l=u.updateQueue)&&(t.updateQueue=l,t.flags|=4),null===r.lastEffect&&(t.firstEffect=null),t.lastEffect=r.lastEffect,r=n,n=t.child;null!==n;)e=r,(l=n).flags&=2,l.nextEffect=null,l.firstEffect=null,l.lastEffect=null,null===(u=l.alternate)?(l.childLanes=0,l.lanes=e,l.child=null,l.memoizedProps=null,l.memoizedState=null,l.updateQueue=null,l.dependencies=null,l.stateNode=null):(l.childLanes=u.childLanes,l.lanes=u.lanes,l.child=u.child,l.memoizedProps=u.memoizedProps,l.memoizedState=u.memoizedState,l.updateQueue=u.updateQueue,l.type=u.type,e=u.dependencies,l.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return da(Fo,1&Fo.current|2),t.child}e=e.sibling}null!==r.tail&&Za()>Gl&&(t.flags|=64,l=!0,il(r,!1),t.lanes=33554432)}else{if(!l)if(null!==(e=Bo(u))){if(t.flags|=64,l=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),il(r,!0),null===r.tail&&"hidden"===r.tailMode&&!u.alternate&&!$o)return null!==(t=t.lastEffect=r.lastEffect)&&(t.nextEffect=null),null}else 2*Za()-r.renderingStartTime>Gl&&1073741824!==n&&(t.flags|=64,l=!0,il(r,!1),t.lanes=33554432);r.isBackwards?(u.sibling=t.child,t.child=u):(null!==(n=r.last)?n.sibling=u:t.child=u,r.last=u)}return null!==r.tail?(n=r.tail,r.rendering=n,r.tail=n.sibling,r.lastEffect=t.lastEffect,r.renderingStartTime=Za(),n.sibling=null,t=Fo.current,da(Fo,l?1&t|2:1&t),n):null;case 23:case 24:return Ss(),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 sl(e){switch(e.tag){case 1:va(e.type)&&ba();var t=e.flags;return 4096&t?(e.flags=-4097&t|64,e):null;case 3:if(Io(),ca(ma),ca(pa),Ko(),0!=(64&(t=e.flags)))throw Error(i(285));return e.flags=-4097&t|64,e;case 5:return Mo(e),null;case 13:return ca(Fo),4096&(t=e.flags)?(e.flags=-4097&t|64,e):null;case 19:return ca(Fo),null;case 4:return Io(),null;case 10:return ro(e),null;case 23:case 24:return Ss(),null;default:return null}}function ul(e,t){try{var n="",r=t;do{n+=G(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 cl(e,t){try{console.error(t.value)}catch(n){setTimeout((function(){throw n}))}}Wi=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}},Yi=function(e,t,n,r){var o=e.memoizedProps;if(o!==r){e=t.stateNode,Po(Ro.current);var i,l=null;switch(n){case"input":o=J(e,o),r=J(e,r),l=[];break;case"option":o=oe(e,o),r=oe(e,r),l=[];break;case"select":o=a({},o,{value:void 0}),r=a({},r,{value:void 0}),l=[];break;case"textarea":o=le(e,o),r=le(e,r),l=[];break;default:"function"!=typeof o.onClick&&"function"==typeof r.onClick&&(e.onclick=zr)}for(d in xe(n,r),n=null,o)if(!r.hasOwnProperty(d)&&o.hasOwnProperty(d)&&null!=o[d])if("style"===d){var u=o[d];for(i in u)u.hasOwnProperty(i)&&(n||(n={}),n[i]="")}else"dangerouslySetInnerHTML"!==d&&"children"!==d&&"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&"autoFocus"!==d&&(s.hasOwnProperty(d)?l||(l=[]):(l=l||[]).push(d,null));for(d in r){var c=r[d];if(u=null!=o?o[d]:void 0,r.hasOwnProperty(d)&&c!==u&&(null!=c||null!=u))if("style"===d)if(u){for(i in u)!u.hasOwnProperty(i)||c&&c.hasOwnProperty(i)||(n||(n={}),n[i]="");for(i in c)c.hasOwnProperty(i)&&u[i]!==c[i]&&(n||(n={}),n[i]=c[i])}else n||(l||(l=[]),l.push(d,n)),n=c;else"dangerouslySetInnerHTML"===d?(c=c?c.__html:void 0,u=u?u.__html:void 0,null!=c&&u!==c&&(l=l||[]).push(d,c)):"children"===d?"string"!=typeof c&&"number"!=typeof c||(l=l||[]).push(d,""+c):"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&(s.hasOwnProperty(d)?(null!=c&&"onScroll"===d&&Rr("scroll",e),l||u===c||(l=[])):"object"==typeof c&&null!==c&&c.$$typeof===I?c.toString():(l=l||[]).push(d,c))}n&&(l=l||[]).push("style",n);var d=l;(t.updateQueue=d)&&(t.flags|=4)}},Ki=function(e,t,n,r){n!==r&&(t.flags|=4)};var dl="function"==typeof WeakMap?WeakMap:Map;function fl(e,t,n){(n=co(-1,n)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Kl||(Kl=!0,Ql=r),cl(0,t)},n}function pl(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 cl(0,t),r(a)}}var o=e.stateNode;return null!==o&&"function"==typeof o.componentDidCatch&&(n.callback=function(){"function"!=typeof r&&(null===Xl?Xl=new Set([this]):Xl.add(this),cl(0,t));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),n}var ml="function"==typeof WeakSet?WeakSet:Set;function hl(e){var t=e.ref;if(null!==t)if("function"==typeof t)try{t(null)}catch(n){zs(e,n)}else t.current=null}function gl(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:Qa(t.type,n),r),e.__reactInternalSnapshotBeforeUpdate=t}return;case 3:return void(256&t.flags&&Vr(t.stateNode.containerInfo))}throw Error(i(163))}function vl(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)&&(Ms(n,e),Ds(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:Qa(n.type,t.memoizedProps),e.componentDidUpdate(r,t.memoizedState,e.__reactInternalSnapshotBeforeUpdate))),void(null!==(t=n.updateQueue)&&ho(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}ho(n,t,e)}return;case 5:return e=n.stateNode,void(null===t&&4&n.flags&&Zr(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&&Et(n)))))}throw Error(i(163))}function bl(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=ke("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 yl(e,t){if(xa&&"function"==typeof xa.onCommitFiberUnmount)try{xa.onCommitFiberUnmount(Sa,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))Ms(t,n);else{r=t;try{a()}catch(o){zs(r,o)}}n=n.next}while(n!==e)}break;case 1:if(hl(t),"function"==typeof(e=t.stateNode).componentWillUnmount)try{e.props=t.memoizedProps,e.state=t.memoizedState,e.componentWillUnmount()}catch(o){zs(t,o)}break;case 5:hl(t);break;case 4:_l(e,t)}}function wl(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 kl(e){return 5===e.tag||3===e.tag||4===e.tag}function El(e){e:{for(var t=e.return;null!==t;){if(kl(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||kl(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?Sl(e,n,t):xl(e,n,t)}function Sl(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=zr));else if(4!==r&&null!==(e=e.child))for(Sl(e,t,n),e=e.sibling;null!==e;)Sl(e,t,n),e=e.sibling}function xl(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(xl(e,t,n),e=e.sibling;null!==e;)xl(e,t,n),e=e.sibling}function _l(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 l=e,s=a,u=s;;)if(yl(l,u),null!==u.child&&4!==u.tag)u.child.return=u,u=u.child;else{if(u===s)break e;for(;null===u.sibling;){if(null===u.return||u.return===s)break e;u=u.return}u.sibling.return=u.return,u=u.sibling}r?(l=n,s=a.stateNode,8===l.nodeType?l.parentNode.removeChild(s):l.removeChild(s)):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(yl(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 Cl(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[Jr]=r,"input"===e&&"radio"===r.type&&null!=r.name&&te(n,r),_e(e,a),t=_e(e,r),a=0;a<o.length;a+=2){var l=o[a],s=o[a+1];"style"===l?Ee(n,s):"dangerouslySetInnerHTML"===l?ve(n,s):"children"===l?be(n,s):w(n,l,s,t)}switch(e){case"input":ne(n,r);break;case"textarea":ue(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,Et(n.containerInfo)));case 13:return null!==t.memoizedState&&(Hl=Za(),bl(t.child,!0)),void Tl(t);case 19:return void Tl(t);case 23:case 24:return void bl(t,null!==t.memoizedState)}throw Error(i(163))}function Tl(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new ml),t.forEach((function(t){var r=$s.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}function Al(e,t){return null!==e&&(null===(e=e.memoizedState)||null!==e.dehydrated)&&(null!==(t=t.memoizedState)&&null===t.dehydrated)}var Ll=Math.ceil,Rl=k.ReactCurrentDispatcher,Ol=k.ReactCurrentOwner,Nl=0,Pl=null,jl=null,Il=0,Dl=0,Ml=ua(0),Fl=0,Bl=null,zl=0,Ul=0,$l=0,Zl=0,ql=null,Hl=0,Gl=1/0;function Vl(){Gl=Za()+500}var Wl,Yl=null,Kl=!1,Ql=null,Xl=null,Jl=!1,es=null,ts=90,ns=[],rs=[],as=null,os=0,is=null,ls=-1,ss=0,us=0,cs=null,ds=!1;function fs(){return 0!=(48&Nl)?Za():-1!==ls?ls:ls=Za()}function ps(e){if(0==(2&(e=e.mode)))return 1;if(0==(4&e))return 99===qa()?1:2;if(0===ss&&(ss=zl),0!==Ka.transition){0!==us&&(us=null!==ql?ql.pendingLanes:0),e=ss;var t=4186112&~us;return 0===(t&=-t)&&(0===(t=(e=4186112&~e)&-e)&&(t=8192)),t}return e=qa(),0!=(4&Nl)&&98===e?e=zt(12,ss):e=zt(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),ss),e}function ms(e,t,n){if(50<os)throw os=0,is=null,Error(i(185));if(null===(e=hs(e,t)))return null;Zt(e,t,n),e===Pl&&($l|=t,4===Fl&&bs(e,Il));var r=qa();1===t?0!=(8&Nl)&&0==(48&Nl)?ys(e):(gs(e,n),0===Nl&&(Vl(),Wa())):(0==(4&Nl)||98!==r&&99!==r||(null===as?as=new Set([e]):as.add(e)),gs(e,n)),ql=e}function hs(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 gs(e,t){for(var n=e.callbackNode,r=e.suspendedLanes,a=e.pingedLanes,o=e.expirationTimes,l=e.pendingLanes;0<l;){var s=31-qt(l),u=1<<s,c=o[s];if(-1===c){if(0==(u&r)||0!=(u&a)){c=t,Mt(u);var d=Dt;o[s]=10<=d?c+250:6<=d?c+5e3:-1}}else c<=t&&(e.expiredLanes|=u);l&=~u}if(r=Ft(e,e===Pl?Il:0),t=Dt,0===r)null!==n&&(n!==Ma&&Ta(n),e.callbackNode=null,e.callbackPriority=0);else{if(null!==n){if(e.callbackPriority===t)return;n!==Ma&&Ta(n)}15===t?(n=ys.bind(null,e),null===Ba?(Ba=[n],za=Ca(Na,Ya)):Ba.push(n),n=Ma):14===t?n=Va(99,ys.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=Va(n,vs.bind(null,e))),e.callbackPriority=t,e.callbackNode=n}}function vs(e){if(ls=-1,us=ss=0,0!=(48&Nl))throw Error(i(327));var t=e.callbackNode;if(Is()&&e.callbackNode!==t)return null;var n=Ft(e,e===Pl?Il:0);if(0===n)return null;var r=n,a=Nl;Nl|=16;var o=Cs();for(Pl===e&&Il===r||(Vl(),xs(e,r));;)try{Ls();break}catch(s){_s(e,s)}if(no(),Rl.current=o,Nl=a,null!==jl?r=0:(Pl=null,Il=0,r=Fl),0!=(zl&$l))xs(e,0);else if(0!==r){if(2===r&&(Nl|=64,e.hydrate&&(e.hydrate=!1,Vr(e.containerInfo)),0!==(n=Bt(e))&&(r=Ts(e,n))),1===r)throw t=Bl,xs(e,0),bs(e,n),gs(e,Za()),t;switch(e.finishedWork=e.current.alternate,e.finishedLanes=n,r){case 0:case 1:throw Error(i(345));case 2:case 5:Ns(e);break;case 3:if(bs(e,n),(62914560&n)===n&&10<(r=Hl+500-Za())){if(0!==Ft(e,0))break;if(((a=e.suspendedLanes)&n)!==n){fs(),e.pingedLanes|=e.suspendedLanes&a;break}e.timeoutHandle=Hr(Ns.bind(null,e),r);break}Ns(e);break;case 4:if(bs(e,n),(4186112&n)===n)break;for(r=e.eventTimes,a=-1;0<n;){var l=31-qt(n);o=1<<l,(l=r[l])>a&&(a=l),n&=~o}if(n=a,10<(n=(120>(n=Za()-n)?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*Ll(n/1960))-n)){e.timeoutHandle=Hr(Ns.bind(null,e),n);break}Ns(e);break;default:throw Error(i(329))}}return gs(e,Za()),e.callbackNode===t?vs.bind(null,e):null}function bs(e,t){for(t&=~Zl,t&=~$l,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-qt(t),r=1<<n;e[n]=-1,t&=~r}}function ys(e){if(0!=(48&Nl))throw Error(i(327));if(Is(),e===Pl&&0!=(e.expiredLanes&Il)){var t=Il,n=Ts(e,t);0!=(zl&$l)&&(n=Ts(e,t=Ft(e,t)))}else n=Ts(e,t=Ft(e,0));if(0!==e.tag&&2===n&&(Nl|=64,e.hydrate&&(e.hydrate=!1,Vr(e.containerInfo)),0!==(t=Bt(e))&&(n=Ts(e,t))),1===n)throw n=Bl,xs(e,0),bs(e,t),gs(e,Za()),n;return e.finishedWork=e.current.alternate,e.finishedLanes=t,Ns(e),gs(e,Za()),null}function ws(e,t){var n=Nl;Nl|=1;try{return e(t)}finally{0===(Nl=n)&&(Vl(),Wa())}}function ks(e,t){var n=Nl;Nl&=-2,Nl|=8;try{return e(t)}finally{0===(Nl=n)&&(Vl(),Wa())}}function Es(e,t){da(Ml,Dl),Dl|=t,zl|=t}function Ss(){Dl=Ml.current,ca(Ml)}function xs(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,Gr(n)),null!==jl)for(n=jl.return;null!==n;){var r=n;switch(r.tag){case 1:null!=(r=r.type.childContextTypes)&&ba();break;case 3:Io(),ca(ma),ca(pa),Ko();break;case 5:Mo(r);break;case 4:Io();break;case 13:case 19:ca(Fo);break;case 10:ro(r);break;case 23:case 24:Ss()}n=n.return}Pl=e,jl=Gs(e.current,null),Il=Dl=zl=t,Fl=0,Bl=null,Zl=$l=Ul=0}function _s(e,t){for(;;){var n=jl;try{if(no(),Qo.current=Ni,ri){for(var r=ei.memoizedState;null!==r;){var a=r.queue;null!==a&&(a.pending=null),r=r.next}ri=!1}if(Jo=0,ni=ti=ei=null,ai=!1,Ol.current=null,null===n||null===n.return){Fl=1,Bl=t,jl=null;break}e:{var o=e,i=n.return,l=n,s=t;if(t=Il,l.flags|=2048,l.firstEffect=l.lastEffect=null,null!==s&&"object"==typeof s&&"function"==typeof s.then){var u=s;if(0==(2&l.mode)){var c=l.alternate;c?(l.updateQueue=c.updateQueue,l.memoizedState=c.memoizedState,l.lanes=c.lanes):(l.updateQueue=null,l.memoizedState=null)}var d=0!=(1&Fo.current),f=i;do{var p;if(p=13===f.tag){var m=f.memoizedState;if(null!==m)p=null!==m.dehydrated;else{var h=f.memoizedProps;p=void 0!==h.fallback&&(!0!==h.unstable_avoidThisFallback||!d)}}if(p){var g=f.updateQueue;if(null===g){var v=new Set;v.add(u),f.updateQueue=v}else g.add(u);if(0==(2&f.mode)){if(f.flags|=64,l.flags|=16384,l.flags&=-2981,1===l.tag)if(null===l.alternate)l.tag=17;else{var b=co(-1,1);b.tag=2,fo(l,b)}l.lanes|=1;break e}s=void 0,l=t;var y=o.pingCache;if(null===y?(y=o.pingCache=new dl,s=new Set,y.set(u,s)):void 0===(s=y.get(u))&&(s=new Set,y.set(u,s)),!s.has(l)){s.add(l);var w=Us.bind(null,o,u,l);u.then(w,w)}f.flags|=4096,f.lanes=t;break e}f=f.return}while(null!==f);s=Error((V(l.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!==Fl&&(Fl=2),s=ul(s,l),f=i;do{switch(f.tag){case 3:o=s,f.flags|=4096,t&=-t,f.lanes|=t,po(f,fl(0,o,t));break e;case 1:o=s;var k=f.type,E=f.stateNode;if(0==(64&f.flags)&&("function"==typeof k.getDerivedStateFromError||null!==E&&"function"==typeof E.componentDidCatch&&(null===Xl||!Xl.has(E)))){f.flags|=4096,t&=-t,f.lanes|=t,po(f,pl(f,o,t));break e}}f=f.return}while(null!==f)}Os(n)}catch(S){t=S,jl===n&&null!==n&&(jl=n=n.return);continue}break}}function Cs(){var e=Rl.current;return Rl.current=Ni,null===e?Ni:e}function Ts(e,t){var n=Nl;Nl|=16;var r=Cs();for(Pl===e&&Il===t||xs(e,t);;)try{As();break}catch(a){_s(e,a)}if(no(),Nl=n,Rl.current=r,null!==jl)throw Error(i(261));return Pl=null,Il=0,Fl}function As(){for(;null!==jl;)Rs(jl)}function Ls(){for(;null!==jl&&!Aa();)Rs(jl)}function Rs(e){var t=Wl(e.alternate,e,Dl);e.memoizedProps=e.pendingProps,null===t?Os(e):jl=t,Ol.current=null}function Os(e){var t=e;do{var n=t.alternate;if(e=t.return,0==(2048&t.flags)){if(null!==(n=ll(n,t,Dl)))return void(jl=n);if(24!==(n=t).tag&&23!==n.tag||null===n.memoizedState||0!=(1073741824&Dl)||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=sl(t)))return n.flags&=2047,void(jl=n);null!==e&&(e.firstEffect=e.lastEffect=null,e.flags|=2048)}if(null!==(t=t.sibling))return void(jl=t);jl=t=e}while(null!==t);0===Fl&&(Fl=5)}function Ns(e){var t=qa();return Ga(99,Ps.bind(null,e,t)),null}function Ps(e,t){do{Is()}while(null!==es);if(0!=(48&Nl))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 l=e.eventTimes,s=e.expirationTimes;0<o;){var u=31-qt(o),c=1<<u;a[u]=0,l[u]=-1,s[u]=-1,o&=~c}if(null!==as&&0==(24&r)&&as.has(e)&&as.delete(e),e===Pl&&(jl=Pl=null,Il=0),1<n.flags?null!==n.lastEffect?(n.lastEffect.nextEffect=n,r=n.firstEffect):r=n:r=n.firstEffect,null!==r){if(a=Nl,Nl|=32,Ol.current=null,Ur=Yt,vr(l=gr())){if("selectionStart"in l)s={start:l.selectionStart,end:l.selectionEnd};else e:if(s=(s=l.ownerDocument)&&s.defaultView||window,(c=s.getSelection&&s.getSelection())&&0!==c.rangeCount){s=c.anchorNode,o=c.anchorOffset,u=c.focusNode,c=c.focusOffset;try{s.nodeType,u.nodeType}catch(C){s=null;break e}var d=0,f=-1,p=-1,m=0,h=0,g=l,v=null;t:for(;;){for(var b;g!==s||0!==o&&3!==g.nodeType||(f=d+o),g!==u||0!==c&&3!==g.nodeType||(p=d+c),3===g.nodeType&&(d+=g.nodeValue.length),null!==(b=g.firstChild);)v=g,g=b;for(;;){if(g===l)break t;if(v===s&&++m===o&&(f=d),v===u&&++h===c&&(p=d),null!==(b=g.nextSibling))break;v=(g=v).parentNode}g=b}s=-1===f||-1===p?null:{start:f,end:p}}else s=null;s=s||{start:0,end:0}}else s=null;$r={focusedElem:l,selectionRange:s},Yt=!1,cs=null,ds=!1,Yl=r;do{try{js()}catch(C){if(null===Yl)throw Error(i(330));zs(Yl,C),Yl=Yl.nextEffect}}while(null!==Yl);cs=null,Yl=r;do{try{for(l=e;null!==Yl;){var y=Yl.flags;if(16&y&&be(Yl.stateNode,""),128&y){var w=Yl.alternate;if(null!==w){var k=w.ref;null!==k&&("function"==typeof k?k(null):k.current=null)}}switch(1038&y){case 2:El(Yl),Yl.flags&=-3;break;case 6:El(Yl),Yl.flags&=-3,Cl(Yl.alternate,Yl);break;case 1024:Yl.flags&=-1025;break;case 1028:Yl.flags&=-1025,Cl(Yl.alternate,Yl);break;case 4:Cl(Yl.alternate,Yl);break;case 8:_l(l,s=Yl);var E=s.alternate;wl(s),null!==E&&wl(E)}Yl=Yl.nextEffect}}catch(C){if(null===Yl)throw Error(i(330));zs(Yl,C),Yl=Yl.nextEffect}}while(null!==Yl);if(k=$r,w=gr(),y=k.focusedElem,l=k.selectionRange,w!==y&&y&&y.ownerDocument&&hr(y.ownerDocument.documentElement,y)){null!==l&&vr(y)&&(w=l.start,void 0===(k=l.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(),s=y.textContent.length,E=Math.min(l.start,s),l=void 0===l.end?E:Math.min(l.end,s),!k.extend&&E>l&&(s=l,l=E,E=s),s=mr(y,E),o=mr(y,l),s&&o&&(1!==k.rangeCount||k.anchorNode!==s.node||k.anchorOffset!==s.offset||k.focusNode!==o.node||k.focusOffset!==o.offset)&&((w=w.createRange()).setStart(s.node,s.offset),k.removeAllRanges(),E>l?(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}Yt=!!Ur,$r=Ur=null,e.current=n,Yl=r;do{try{for(y=e;null!==Yl;){var S=Yl.flags;if(36&S&&vl(y,Yl.alternate,Yl),128&S){w=void 0;var x=Yl.ref;if(null!==x){var _=Yl.stateNode;Yl.tag,w=_,"function"==typeof x?x(w):x.current=w}}Yl=Yl.nextEffect}}catch(C){if(null===Yl)throw Error(i(330));zs(Yl,C),Yl=Yl.nextEffect}}while(null!==Yl);Yl=null,Fa(),Nl=a}else e.current=n;if(Jl)Jl=!1,es=e,ts=t;else for(Yl=r;null!==Yl;)t=Yl.nextEffect,Yl.nextEffect=null,8&Yl.flags&&((S=Yl).sibling=null,S.stateNode=null),Yl=t;if(0===(r=e.pendingLanes)&&(Xl=null),1===r?e===is?os++:(os=0,is=e):os=0,n=n.stateNode,xa&&"function"==typeof xa.onCommitFiberRoot)try{xa.onCommitFiberRoot(Sa,n,void 0,64==(64&n.current.flags))}catch(C){}if(gs(e,Za()),Kl)throw Kl=!1,e=Ql,Ql=null,e;return 0!=(8&Nl)||Wa(),null}function js(){for(;null!==Yl;){var e=Yl.alternate;ds||null===cs||(0!=(8&Yl.flags)?et(Yl,cs)&&(ds=!0):13===Yl.tag&&Al(e,Yl)&&et(Yl,cs)&&(ds=!0));var t=Yl.flags;0!=(256&t)&&gl(e,Yl),0==(512&t)||Jl||(Jl=!0,Va(97,(function(){return Is(),null}))),Yl=Yl.nextEffect}}function Is(){if(90!==ts){var e=97<ts?97:ts;return ts=90,Ga(e,Fs)}return!1}function Ds(e,t){ns.push(t,e),Jl||(Jl=!0,Va(97,(function(){return Is(),null})))}function Ms(e,t){rs.push(t,e),Jl||(Jl=!0,Va(97,(function(){return Is(),null})))}function Fs(){if(null===es)return!1;var e=es;if(es=null,0!=(48&Nl))throw Error(i(331));var t=Nl;Nl|=32;var n=rs;rs=[];for(var r=0;r<n.length;r+=2){var a=n[r],o=n[r+1],l=a.destroy;if(a.destroy=void 0,"function"==typeof l)try{l()}catch(u){if(null===o)throw Error(i(330));zs(o,u)}}for(n=ns,ns=[],r=0;r<n.length;r+=2){a=n[r],o=n[r+1];try{var s=a.create;a.destroy=s()}catch(u){if(null===o)throw Error(i(330));zs(o,u)}}for(s=e.current.firstEffect;null!==s;)e=s.nextEffect,s.nextEffect=null,8&s.flags&&(s.sibling=null,s.stateNode=null),s=e;return Nl=t,Wa(),!0}function Bs(e,t,n){fo(e,t=fl(0,t=ul(n,t),1)),t=fs(),null!==(e=hs(e,1))&&(Zt(e,1,t),gs(e,t))}function zs(e,t){if(3===e.tag)Bs(e,e,t);else for(var n=e.return;null!==n;){if(3===n.tag){Bs(n,e,t);break}if(1===n.tag){var r=n.stateNode;if("function"==typeof n.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===Xl||!Xl.has(r))){var a=pl(n,e=ul(t,e),1);if(fo(n,a),a=fs(),null!==(n=hs(n,1)))Zt(n,1,a),gs(n,a);else if("function"==typeof r.componentDidCatch&&(null===Xl||!Xl.has(r)))try{r.componentDidCatch(t,e)}catch(o){}break}}n=n.return}}function Us(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),t=fs(),e.pingedLanes|=e.suspendedLanes&n,Pl===e&&(Il&n)===n&&(4===Fl||3===Fl&&(62914560&Il)===Il&&500>Za()-Hl?xs(e,0):Zl|=n),gs(e,t)}function $s(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===qa()?1:2:(0===ss&&(ss=zl),0===(t=Ut(62914560&~ss))&&(t=4194304))),n=fs(),null!==(e=hs(e,t))&&(Zt(e,t,n),gs(e,n))}function Zs(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 qs(e,t,n,r){return new Zs(e,t,n,r)}function Hs(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Gs(e,t){var n=e.alternate;return null===n?((n=qs(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 Vs(e,t,n,r,a,o){var l=2;if(r=e,"function"==typeof e)Hs(e)&&(l=1);else if("string"==typeof e)l=5;else e:switch(e){case x:return Ws(n.children,a,o,t);case D:l=8,a|=16;break;case _:l=8,a|=1;break;case C:return(e=qs(12,n,t,8|a)).elementType=C,e.type=C,e.lanes=o,e;case R:return(e=qs(13,n,t,a)).type=R,e.elementType=R,e.lanes=o,e;case O:return(e=qs(19,n,t,a)).elementType=O,e.lanes=o,e;case M:return Ys(n,a,o,t);case F:return(e=qs(24,n,t,a)).elementType=F,e.lanes=o,e;default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case T:l=10;break e;case A:l=9;break e;case L:l=11;break e;case N:l=14;break e;case P:l=16,r=null;break e;case j:l=22;break e}throw Error(i(130,null==e?e:typeof e,""))}return(t=qs(l,n,t,a)).elementType=e,t.type=r,t.lanes=o,t}function Ws(e,t,n,r){return(e=qs(7,e,r,t)).lanes=n,e}function Ys(e,t,n,r){return(e=qs(23,e,r,t)).elementType=M,e.lanes=n,e}function Ks(e,t,n){return(e=qs(6,e,null,t)).lanes=n,e}function Qs(e,t,n){return(t=qs(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Xs(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=$t(0),this.expirationTimes=$t(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=$t(0),this.mutableSourceEagerHydrationData=null}function Js(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}}function eu(e,t,n,r){var a=t.current,o=fs(),l=ps(a);e:if(n){t:{if(Ke(n=n._reactInternals)!==n||1!==n.tag)throw Error(i(170));var s=n;do{switch(s.tag){case 3:s=s.stateNode.context;break t;case 1:if(va(s.type)){s=s.stateNode.__reactInternalMemoizedMergedChildContext;break t}}s=s.return}while(null!==s);throw Error(i(171))}if(1===n.tag){var u=n.type;if(va(u)){n=wa(n,u,s);break e}}n=s}else n=fa;return null===t.context?t.context=n:t.pendingContext=n,(t=co(o,l)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),fo(a,t),ms(a,l,o),l}function tu(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function nu(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function ru(e,t){nu(e,t),(e=e.alternate)&&nu(e,t)}function au(e,t,n){var r=null!=n&&null!=n.hydrationOptions&&n.hydrationOptions.mutableSources||null;if(n=new Xs(e,t,null!=n&&!0===n.hydrate),t=qs(3,null,null,2===t?7:1===t?3:0),n.current=t,t.stateNode=n,so(t),e[ea]=n.current,Nr(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 ou(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function iu(e,t,n,r,a){var o=n._reactRootContainer;if(o){var i=o._internalRoot;if("function"==typeof a){var l=a;a=function(){var e=tu(i);l.call(e)}}eu(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 au(e,0,t?{hydrate:!0}:void 0)}(n,r),i=o._internalRoot,"function"==typeof a){var s=a;a=function(){var e=tu(i);s.call(e)}}ks((function(){eu(t,i,e,a)}))}return tu(i)}function lu(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!ou(t))throw Error(i(200));return Js(e,t,null,n)}Wl=function(e,t,n){var r=t.lanes;if(null!==e)if(e.memoizedProps!==t.pendingProps||ma.current)Mi=!0;else{if(0==(n&r)){switch(Mi=!1,t.tag){case 3:Vi(t),Wo();break;case 5:Do(t);break;case 1:va(t.type)&&ka(t);break;case 4:jo(t,t.stateNode.containerInfo);break;case 10:r=t.memoizedProps.value;var a=t.type._context;da(Xa,a._currentValue),a._currentValue=r;break;case 13:if(null!==t.memoizedState)return 0!=(n&t.child.childLanes)?Xi(e,t,n):(da(Fo,1&Fo.current),null!==(t=ol(e,t,n))?t.sibling:null);da(Fo,1&Fo.current);break;case 19:if(r=0!=(n&t.childLanes),0!=(64&e.flags)){if(r)return al(e,t,n);t.flags|=64}if(null!==(a=t.memoizedState)&&(a.rendering=null,a.tail=null,a.lastEffect=null),da(Fo,Fo.current),r)break;return null;case 23:case 24:return t.lanes=0,$i(e,t,n)}return ol(e,t,n)}Mi=0!=(16384&e.flags)}else Mi=!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),oo(t,n),a=li(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,va(r)){var o=!0;ka(t)}else o=!1;t.memoizedState=null!==a.state&&void 0!==a.state?a.state:null,so(t);var l=r.getDerivedStateFromProps;"function"==typeof l&&vo(t,r,l,e),a.updater=bo,t.stateNode=a,a._reactInternals=t,Eo(t,r,e,n),t=Gi(null,t,r,!0,o,n)}else t.tag=0,Fi(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 Hs(e)?1:0;if(null!=e){if((e=e.$$typeof)===L)return 11;if(e===N)return 14}return 2}(a),e=Qa(a,e),o){case 0:t=qi(null,t,a,e,n);break e;case 1:t=Hi(null,t,a,e,n);break e;case 11:t=Bi(null,t,a,e,n);break e;case 14:t=zi(null,t,a,Qa(a.type,e),r,n);break e}throw Error(i(306,a,""))}return t;case 0:return r=t.type,a=t.pendingProps,qi(e,t,r,a=t.elementType===r?a:Qa(r,a),n);case 1:return r=t.type,a=t.pendingProps,Hi(e,t,r,a=t.elementType===r?a:Qa(r,a),n);case 3:if(Vi(t),r=t.updateQueue,null===e||null===r)throw Error(i(282));if(r=t.pendingProps,a=null!==(a=t.memoizedState)?a.element:null,uo(e,t),mo(t,r,null,n),(r=t.memoizedState.element)===a)Wo(),t=ol(e,t,n);else{if((o=(a=t.stateNode).hydrate)&&(Uo=Wr(t.stateNode.containerInfo.firstChild),zo=t,o=$o=!0),o){if(null!=(e=a.mutableSourceEagerHydrationData))for(a=0;a<e.length;a+=2)(o=e[a])._workInProgressVersionPrimary=e[a+1],Yo.push(o);for(n=Ao(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|1024,n=n.sibling}else Fi(e,t,r,n),Wo();t=t.child}return t;case 5:return Do(t),null===e&&Ho(t),r=t.type,a=t.pendingProps,o=null!==e?e.memoizedProps:null,l=a.children,qr(r,a)?l=null:null!==o&&qr(r,o)&&(t.flags|=16),Zi(e,t),Fi(e,t,l,n),t.child;case 6:return null===e&&Ho(t),null;case 13:return Xi(e,t,n);case 4:return jo(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=To(t,null,r,n):Fi(e,t,r,n),t.child;case 11:return r=t.type,a=t.pendingProps,Bi(e,t,r,a=t.elementType===r?a:Qa(r,a),n);case 7:return Fi(e,t,t.pendingProps,n),t.child;case 8:case 12:return Fi(e,t,t.pendingProps.children,n),t.child;case 10:e:{r=t.type._context,a=t.pendingProps,l=t.memoizedProps,o=a.value;var s=t.type._context;if(da(Xa,s._currentValue),s._currentValue=o,null!==l)if(s=l.value,0===(o=cr(s,o)?0:0|("function"==typeof r._calculateChangedBits?r._calculateChangedBits(s,o):1073741823))){if(l.children===a.children&&!ma.current){t=ol(e,t,n);break e}}else for(null!==(s=t.child)&&(s.return=t);null!==s;){var u=s.dependencies;if(null!==u){l=s.child;for(var c=u.firstContext;null!==c;){if(c.context===r&&0!=(c.observedBits&o)){1===s.tag&&((c=co(-1,n&-n)).tag=2,fo(s,c)),s.lanes|=n,null!==(c=s.alternate)&&(c.lanes|=n),ao(s.return,n),u.lanes|=n;break}c=c.next}}else l=10===s.tag&&s.type===t.type?null:s.child;if(null!==l)l.return=s;else for(l=s;null!==l;){if(l===t){l=null;break}if(null!==(s=l.sibling)){s.return=l.return,l=s;break}l=l.return}s=l}Fi(e,t,a.children,n),t=t.child}return t;case 9:return a=t.type,r=(o=t.pendingProps).children,oo(t,n),r=r(a=io(a,o.unstable_observedBits)),t.flags|=1,Fi(e,t,r,n),t.child;case 14:return o=Qa(a=t.type,t.pendingProps),zi(e,t,a,o=Qa(a.type,o),r,n);case 15:return Ui(e,t,t.type,t.pendingProps,r,n);case 17:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:Qa(r,a),null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),t.tag=1,va(r)?(e=!0,ka(t)):e=!1,oo(t,n),wo(t,r,a),Eo(t,r,a,n),Gi(null,t,r,!0,e,n);case 19:return al(e,t,n);case 23:case 24:return $i(e,t,n)}throw Error(i(156,t.tag))},au.prototype.render=function(e){eu(e,this._internalRoot,null,null)},au.prototype.unmount=function(){var e=this._internalRoot,t=e.containerInfo;eu(null,e,null,(function(){t[ea]=null}))},tt=function(e){13===e.tag&&(ms(e,4,fs()),ru(e,4))},nt=function(e){13===e.tag&&(ms(e,67108864,fs()),ru(e,67108864))},rt=function(e){if(13===e.tag){var t=fs(),n=ps(e);ms(e,n,t),ru(e,n)}},at=function(e,t){return t()},Te=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=oa(r);if(!a)throw Error(i(90));Q(r),ne(r,a)}}}break;case"textarea":ue(e,n);break;case"select":null!=(t=n.value)&&ie(e,!!n.multiple,t,!1)}},Pe=ws,je=function(e,t,n,r,a){var o=Nl;Nl|=4;try{return Ga(98,e.bind(null,t,n,r,a))}finally{0===(Nl=o)&&(Vl(),Wa())}},Ie=function(){0==(49&Nl)&&(function(){if(null!==as){var e=as;as=null,e.forEach((function(e){e.expiredLanes|=24&e.pendingLanes,gs(e,Za())}))}Wa()}(),Is())},De=function(e,t){var n=Nl;Nl|=2;try{return e(t)}finally{0===(Nl=n)&&(Vl(),Wa())}};var su={Events:[ra,aa,oa,Oe,Ne,Is,{current:!1}]},uu={findFiberByHostInstance:na,bundleType:0,version:"17.0.2",rendererPackageName:"react-dom"},cu={bundleType:uu.bundleType,version:uu.version,rendererPackageName:uu.rendererPackageName,rendererConfig:uu.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=Je(e))?null:e.stateNode},findFiberByHostInstance:uu.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var du=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!du.isDisabled&&du.supportsFiber)try{Sa=du.inject(cu),xa=du}catch(ge){}}t.hydrate=function(e,t,n){if(!ou(t))throw Error(i(200));return iu(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 l,s,u,c;if(Array.isArray(e)){if((l=e.length)!=i.length)return!1;for(s=l;0!=s--;)if(!o(e[s],i[s]))return!1;return!0}if(n&&e instanceof Map&&i instanceof Map){if(e.size!==i.size)return!1;for(c=e.entries();!(s=c.next()).done;)if(!i.has(s.value[0]))return!1;for(c=e.entries();!(s=c.next()).done;)if(!o(s.value[1],i.get(s.value[0])))return!1;return!0}if(r&&e instanceof Set&&i instanceof Set){if(e.size!==i.size)return!1;for(c=e.entries();!(s=c.next()).done;)if(!i.has(s.value[0]))return!1;return!0}if(a&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(i)){if((l=e.length)!=i.length)return!1;for(s=l;0!=s--;)if(e[s]!==i[s])return!1;return!0}if(e.constructor===RegExp)return e.source===i.source&&e.flags===i.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===i.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===i.toString();if((l=(u=Object.keys(e)).length)!==Object.keys(i).length)return!1;for(s=l;0!=s--;)if(!Object.prototype.hasOwnProperty.call(i,u[s]))return!1;if(t&&e instanceof Element)return!1;for(s=l;0!=s--;)if(("_owner"!==u[s]&&"__v"!==u[s]&&"__o"!==u[s]||!e.$$typeof)&&!o(e[u[s]],i[u[s]]))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),l=n.n(i),s=n(1143),u=n.n(s),c=n(6774),d=n.n(c);function f(){return f=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},f.apply(this,arguments)}function p(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 h(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 g={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},v={rel:["amphtml","canonical","alternate"]},b={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(g).map((function(e){return g[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,g.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 f({},e,t)}),{})},T=function(e,t){return t.filter((function(e){return void 0!==e[g.BASE]})).map((function(e){return e[g.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 l=o[i],s=l.toLowerCase();-1===t.indexOf(s)||"rel"===n&&"canonical"===e[n].toLowerCase()||"rel"===s&&"stylesheet"===e[s].toLowerCase()||(n=s),-1===t.indexOf(l)||"innerHTML"!==l&&"cssText"!==l&&"itemprop"!==l||(n=l)}if(!n||!e[n])return!1;var u=e[n].toLowerCase();return r[n]||(r[n]={}),a[n]||(a[n]={}),!r[n][u]&&(a[n][u]=!0,!0)})).reverse().forEach((function(t){return e.push(t)}));for(var o=Object.keys(a),i=0;i<o.length;i+=1){var l=o[i],s=f({},r[l],a[l]);r[l]=s}return e}),[]).reverse()},L=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},R=function(e){return Array.isArray(e)?e.join(""):e},O=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 f({},e,((n={})[t]=void 0,n))},P=[g.NOSCRIPT,g.SCRIPT,g.STYLE],j=function(e,t){return void 0===t&&(t=!0),!1===t?String(e):String(e).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;")},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)}))},F=function(e,t,n){switch(e){case g.TITLE:return{toComponent:function(){return n=t.titleAttributes,(a={key:e=t.title})["data-rh"]=!0,o=D(n,a),[r.createElement(g.TITLE,o,e)];var e,n,a,o},toString:function(){return function(e,t,n,r){var a=I(n),o=R(t);return a?"<"+e+' data-rh="true" '+a+">"+j(o,r)+"</"+e+">":"<"+e+' data-rh="true">'+j(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+'="'+j(r[t],n)+'"';return e?e+" "+a:a}),""),o=r.innerHTML||r.cssText||"",i=-1===P.indexOf(e);return t+"<"+e+' data-rh="true" '+a+(i?"/>":">"+o+"</"+e+">")}),"")}(e,t,n)}}}},B=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,a=e.htmlAttributes,o=e.noscriptTags,i=e.styleTags,l=e.title,s=void 0===l?"":l,u=e.titleAttributes,c=e.linkTags,d=e.metaTags,f=e.scriptTags,p={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var m=function(e){var t=e.linkTags,n=e.scriptTags,r=e.encode,a=O(e.metaTags,y),o=O(t,v),i=O(n,b);return{priorityMethods:{toComponent:function(){return[].concat(M(g.META,a.priority),M(g.LINK,o.priority),M(g.SCRIPT,i.priority))},toString:function(){return F(g.META,a.priority,r)+" "+F(g.LINK,o.priority,r)+" "+F(g.SCRIPT,i.priority,r)}},metaTags:a.default,linkTags:o.default,scriptTags:i.default}}(e);p=m.priorityMethods,c=m.linkTags,d=m.metaTags,f=m.scriptTags}return{priority:p,base:F(g.BASE,t,r),bodyAttributes:F("bodyAttributes",n,r),htmlAttributes:F("htmlAttributes",a,r),link:F(g.LINK,c,r),meta:F(g.META,d,r),noscript:F(g.NOSCRIPT,o,r),script:F(g.SCRIPT,f,r),style:F(g.STYLE,i,r),title:F(g.TITLE,{title:s,titleAttributes:u},r)}},z=[],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?z:n.instances},add:function(e){(n.canUseDOM?z:n.instances).push(e)},remove:function(e){var t=(n.canUseDOM?z:n.instances).indexOf(e);(n.canUseDOM?z:n.instances).splice(t,1)}}},this.context=e,this.canUseDOM=t,t||(e.helmet=B({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},$=r.createContext({}),Z=o().shape({setHelmet:o().func,helmetInstances:o().shape({get:o().func,add:o().func,remove:o().func})}),q="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 p(t,e),t.prototype.render=function(){return r.createElement($.Provider,{value:this.helmetData.value},this.props.children)},t}(r.Component);H.canUseDOM=q,H.propTypes={context:o().shape({helmet:o().shape()}),children:o().node.isRequired},H.defaultProps={context:{}},H.displayName="HelmetProvider";var G=function(e,t){var n,r=document.head||document.querySelector(g.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),l=0;l<i.length;l+=1){var s=i[l],u=t[s]||"";n.getAttribute(s)!==u&&n.setAttribute(s,u),-1===a.indexOf(s)&&a.push(s);var c=o.indexOf(s);-1!==c&&o.splice(c,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,l=e.onChangeClientState,s=e.scriptTags,u=e.styleTags,c=e.title,d=e.titleAttributes;V(g.BODY,e.bodyAttributes),V(g.HTML,r),function(e,t){void 0!==e&&document.title!==e&&(document.title=R(e)),V(g.TITLE,t)}(c,d);var f={baseTag:G(g.BASE,n),linkTags:G(g.LINK,a),metaTags:G(g.META,o),noscriptTags:G(g.NOSCRIPT,i),scriptTags:G(g.SCRIPT,s),styleTags:G(g.STYLE,u)},p={},m={};Object.keys(f).forEach((function(e){var t=f[e],n=t.newTags,r=t.oldTags;n.length&&(p[e]=n),r.length&&(m[e]=f[e].oldTags)})),t&&t(),l(e,p,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}p(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=f({},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(g.LINK,["rel","href"],e),metaTags:A(g.META,["name","charset","http-equiv","property","itemprop"],e),noscriptTags:A(g.NOSCRIPT,["innerHTML"],e),onChangeClientState:_(e),scriptTags:A(g.SCRIPT,["src","innerHTML"],e),styleTags:A(g.STYLE,["cssText"],e),title:x(e),titleAttributes:C("titleAttributes",e),prioritizeSeoTags:L(e,"prioritizeSeoTags")});H.canUseDOM?(t=o,Y&&cancelAnimationFrame(Y),t.defer?Y=requestAnimationFrame((function(){W(t,(function(){Y=null}))})):(W(t),Y=null)):B&&(a=B(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:Z.isRequired},K.displayName="HelmetDispatcher";var Q=["children"],X=["children"],J=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!l()(N(this.props,"helmetData"),N(e,"helmetData"))},n.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case g.SCRIPT:case g.NOSCRIPT:return{innerHTML:t};case g.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 f({},r,((t={})[n.type]=[].concat(r[n.type]||[],[f({},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 g.TITLE:return f({},a,((t={})[r.type]=i,t.titleAttributes=f({},o),t));case g.BODY:return f({},a,{bodyAttributes:f({},o)});case g.HTML:return f({},a,{htmlAttributes:f({},o)});default:return f({},a,((n={})[r.type]=f({},o),n))}},n.mapArrayTypeChildrenToProps=function(e,t){var n=f({},t);return Object.keys(e).forEach((function(t){var r;n=f({},n,((r={})[t]=e[t],r))})),n},n.warnOnInvalidChildren=function(e,t){return u()(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."),u()(!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=h(r,Q),l=Object.keys(i).reduce((function(e,t){return e[E[t]||t]=i[t],e}),{}),s=e.type;switch("symbol"==typeof s?s=s.toString():n.warnOnInvalidChildren(e,o),s){case g.FRAGMENT:t=n.mapChildrenToProps(o,t);break;case g.LINK:case g.META:case g.NOSCRIPT:case g.SCRIPT:case g.STYLE:a=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:a,newChildProps:l,nestedChildren:o});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:l,nestedChildren:o})}}})),this.mapArrayTypeChildrenToProps(a,t)},n.render=function(){var e=this.props,t=e.children,n=h(e,X),a=f({},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,f({},a,{context:o.value,helmetData:void 0})):r.createElement($.Consumer,null,(function(e){return r.createElement(K,f({},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,l=n?Symbol.for("react.profiler"):60114,s=n?Symbol.for("react.provider"):60109,u=n?Symbol.for("react.context"):60110,c=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,f=n?Symbol.for("react.forward_ref"):60112,p=n?Symbol.for("react.suspense"):60113,m=n?Symbol.for("react.suspense_list"):60120,h=n?Symbol.for("react.memo"):60115,g=n?Symbol.for("react.lazy"):60116,v=n?Symbol.for("react.block"):60121,b=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 c:case d:case o:case l:case i:case p:return e;default:switch(e=e&&e.$$typeof){case u:case f:case g:case h:case s:return e;default:return t}}case a:return t}}}function E(e){return k(e)===d}t.AsyncMode=c,t.ConcurrentMode=d,t.ContextConsumer=u,t.ContextProvider=s,t.Element=r,t.ForwardRef=f,t.Fragment=o,t.Lazy=g,t.Memo=h,t.Portal=a,t.Profiler=l,t.StrictMode=i,t.Suspense=p,t.isAsyncMode=function(e){return E(e)||k(e)===c},t.isConcurrentMode=E,t.isContextConsumer=function(e){return k(e)===u},t.isContextProvider=function(e){return k(e)===s},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return k(e)===f},t.isFragment=function(e){return k(e)===o},t.isLazy=function(e){return k(e)===g},t.isMemo=function(e){return k(e)===h},t.isPortal=function(e){return k(e)===a},t.isProfiler=function(e){return k(e)===l},t.isStrictMode=function(e){return k(e)===i},t.isSuspense=function(e){return k(e)===p},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===o||e===d||e===l||e===i||e===p||e===m||"object"==typeof e&&null!==e&&(e.$$typeof===g||e.$$typeof===h||e.$$typeof===s||e.$$typeof===u||e.$$typeof===f||e.$$typeof===b||e.$$typeof===y||e.$$typeof===w||e.$$typeof===v)},t.typeOf=k},9864:(e,t,n)=>{"use strict";e.exports=n(9921)},8790:(e,t,n)=>{"use strict";n.d(t,{H:()=>l,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 l(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:()=>c,rU:()=>g});var r=n(6550),a=n(4578),o=n(7294),i=n(9318),l=n(7462),s=n(3366),u=n(8776),c=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},f=function(e,t){return"string"==typeof e?(0,i.ob)(e,null,null,t):e},p=function(e){return e},m=o.forwardRef;void 0===m&&(m=p);var h=m((function(e,t){var n=e.innerRef,r=e.navigate,a=e.onClick,i=(0,s.Z)(e,["innerRef","navigate","onClick"]),u=i.target,c=(0,l.Z)({},i,{onClick:function(e){try{a&&a(e)}catch(t){throw e.preventDefault(),t}e.defaultPrevented||0!==e.button||u&&"_self"!==u||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)||(e.preventDefault(),r())}});return c.ref=p!==m&&t||n,o.createElement("a",c)}));var g=m((function(e,t){var n=e.component,a=void 0===n?h:n,c=e.replace,g=e.to,v=e.innerRef,b=(0,s.Z)(e,["component","replace","to","innerRef"]);return o.createElement(r.s6.Consumer,null,(function(e){e||(0,u.Z)(!1);var n=e.history,r=f(d(g,e.location),e.location),s=r?n.createHref(r):"",h=(0,l.Z)({},b,{href:s,navigate:function(){var t=d(g,e.location),r=(0,i.Ep)(e.location)===(0,i.Ep)(f(t));(c||r?n.replace:n.push)(t)}});return p!==m?h.ref=t||v:h.innerRef=v,o.createElement(a,h)}))})),v=function(e){return e},b=o.forwardRef;void 0===b&&(b=v);var y=b((function(e,t){var n=e["aria-current"],a=void 0===n?"page":n,i=e.activeClassName,c=void 0===i?"active":i,p=e.activeStyle,m=e.className,h=e.exact,y=e.isActive,w=e.location,k=e.sensitive,E=e.strict,S=e.style,x=e.to,_=e.innerRef,C=(0,s.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,u.Z)(!1);var n=w||e.location,i=f(d(x,n),n),s=i.pathname,T=s&&s.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),A=T?(0,r.LX)(n.pathname,{path:T,exact:h,sensitive:k,strict:E}):null,L=!!(y?y(A,n):A),R="function"==typeof m?m(L):m,O="function"==typeof S?S(L):S;L&&(R=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(" ")}(R,c),O=(0,l.Z)({},O,p));var N=(0,l.Z)({"aria-current":L&&a||null,className:R,style:O,to:i},C);return v!==b?N.ref=t||_:N.innerRef=_,o.createElement(g,N)}))}))},6550:(e,t,n)=>{"use strict";n.d(t,{AW:()=>x,F0:()=>w,LX:()=>S,TH:()=>P,k6:()=>N,rs:()=>R,s6:()=>y});var r=n(4578),a=n(7294),o=n(5697),i=n.n(o),l=n(9318),s=n(8776),u=n(7462),c=n(9658),d=n.n(c),f=(n(9864),n(3366)),p=(n(8679),1073741823),m="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:{};function h(e){var t=[];return{on:function(e){t.push(e)},off:function(e){t=t.filter((function(t){return t!==e}))},get:function(){return e},set:function(n,r){e=n,t.forEach((function(t){return t(e,r)}))}}}var g=a.createContext||function(e,t){var n,o,l="__create-react-context-"+function(){var e="__global_unique_id__";return m[e]=(m[e]||0)+1}()+"__",s=function(e){function n(){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).emitter=h(t.props.value),t}(0,r.Z)(n,e);var a=n.prototype;return a.getChildContext=function(){var e;return(e={})[l]=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):p,0!==(n|=0)&&this.emitter.set(e.value,n))}var o,i},a.render=function(){return this.props.children},n}(a.Component);s.childContextTypes=((n={})[l]=i().object.isRequired,n);var u=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?p:t},a.componentDidMount=function(){this.context[l]&&this.context[l].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?p:e},a.componentWillUnmount=function(){this.context[l]&&this.context[l].off(this.onUpdate)},a.getValue=function(){return this.context[l]?this.context[l].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 u.contextTypes=((o={})[l]=i().object,o),{Provider:s,Consumer:u}},v=function(e){var t=g();return t.displayName=e,t},b=v("Router-History"),y=v("Router"),w=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 k={},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,l=void 0!==i&&i,s=n.sensitive,u=void 0!==s&&s;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=k[n]||(k[n]={});if(r[e])return r[e];var a=[],o={regexp:d()(e,a,t),keys:a};return E<1e4&&(r[e]=o,E++),o}(n,{end:o,strict:l,sensitive:u}),a=r.regexp,i=r.keys,s=a.exec(e);if(!s)return null;var c=s[0],f=s.slice(1),p=e===c;return o&&!p?null:{path:n,url:"/"===n&&""===c?"/":c,isExact:p,params:i.reduce((function(e,t,n){return e[t.name]=f[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(y.Consumer,null,(function(t){t||(0,s.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,u.Z)({},t,{location:n,match:r}),i=e.props,l=i.children,c=i.component,d=i.render;return Array.isArray(l)&&function(e){return 0===a.Children.count(e)}(l)&&(l=null),a.createElement(y.Provider,{value:o},o.match?l?"function"==typeof l?l(o):l:c?a.createElement(c,o):d?d(o):null:"function"==typeof l?l(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,u.Z)({},t,{pathname:t.pathname.substr(n.length)})}function T(e){return"string"==typeof e?e:(0,l.Ep)(e)}function A(e){return function(){(0,s.Z)(!1)}}function L(){}a.Component;var R=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,s.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,u.Z)({},e.props,{path:i})):t.match}})),r?a.cloneElement(n,{location:o,computedMatch:r}):null}))},t}(a.Component);var O=a.useContext;function N(){return O(b)}function P(){return O(y).location}},9658:(e,t,n)=>{var r=n(5826);e.exports=p,e.exports.parse=o,e.exports.compile=function(e,t){return l(o(e,t),t)},e.exports.tokensToFunction=l,e.exports.tokensToRegExp=f;var a=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function o(e,t){for(var n,r=[],o=0,i=0,l="",c=t&&t.delimiter||"/";null!=(n=a.exec(e));){var d=n[0],f=n[1],p=n.index;if(l+=e.slice(i,p),i=p+d.length,f)l+=f[1];else{var m=e[i],h=n[2],g=n[3],v=n[4],b=n[5],y=n[6],w=n[7];l&&(r.push(l),l="");var k=null!=h&&null!=m&&m!==h,E="+"===y||"*"===y,S="?"===y||"*"===y,x=n[2]||c,_=v||b;r.push({name:g||o++,prefix:h||"",delimiter:x,optional:S,repeat:E,partial:k,asterisk:!!w,pattern:_?u(_):w?".*":"[^"+s(x)+"]+?"})}}return i<e.length&&(l+=e.substr(i)),l&&r.push(l),r}function i(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function l(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="",l=t||{},s=(a||{}).pretty?i:encodeURIComponent,u=0;u<e.length;u++){var c=e[u];if("string"!=typeof c){var d,f=l[c.name];if(null==f){if(c.optional){c.partial&&(o+=c.prefix);continue}throw new TypeError('Expected "'+c.name+'" to be defined')}if(r(f)){if(!c.repeat)throw new TypeError('Expected "'+c.name+'" to not repeat, but received `'+JSON.stringify(f)+"`");if(0===f.length){if(c.optional)continue;throw new TypeError('Expected "'+c.name+'" to not be empty')}for(var p=0;p<f.length;p++){if(d=s(f[p]),!n[u].test(d))throw new TypeError('Expected all "'+c.name+'" to match "'+c.pattern+'", but received `'+JSON.stringify(d)+"`");o+=(0===p?c.prefix:c.delimiter)+d}}else{if(d=c.asterisk?encodeURI(f).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):s(f),!n[u].test(d))throw new TypeError('Expected "'+c.name+'" to match "'+c.pattern+'", but received "'+d+'"');o+=c.prefix+d}}else o+=c}return o}}function s(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function u(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function c(e,t){return e.keys=t,e}function d(e){return e&&e.sensitive?"":"i"}function f(e,t,n){r(t)||(n=t||n,t=[]);for(var a=(n=n||{}).strict,o=!1!==n.end,i="",l=0;l<e.length;l++){var u=e[l];if("string"==typeof u)i+=s(u);else{var f=s(u.prefix),p="(?:"+u.pattern+")";t.push(u),u.repeat&&(p+="(?:"+f+p+")*"),i+=p=u.optional?u.partial?f+"("+p+")?":"(?:"+f+"("+p+"))?":f+"("+p+")"}}var m=s(n.delimiter||"/"),h=i.slice(-m.length)===m;return a||(i=(h?i.slice(0,-m.length):i)+"(?:"+m+"(?=$))?"),i+=o?"$":a&&h?"":"(?="+m+"|$)",c(new RegExp("^"+i,d(n)),t)}function p(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 c(e,t)}(e,t):r(e)?function(e,t,n){for(var r=[],a=0;a<e.length;a++)r.push(p(e[a],t,n).source);return c(new RegExp("(?:"+r.join("|")+")",d(n)),t)}(e,t,n):function(e,t,n){return f(o(e,n),t,n)}(e,t,n)}},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,l=60110,s=60112;t.Suspense=60113;var u=60115,c=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"),l=d("react.context"),s=d("react.forward_ref"),t.Suspense=d("react.suspense"),u=d("react.memo"),c=d("react.lazy")}var f="function"==typeof Symbol&&Symbol.iterator;function p(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(){}},h={};function g(e,t,n){this.props=e,this.context=t,this.refs=h,this.updater=n||m}function v(){}function b(e,t,n){this.props=e,this.context=t,this.refs=h,this.updater=n||m}g.prototype.isReactComponent={},g.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error(p(85));this.updater.enqueueSetState(this,e,t,"setState")},g.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},v.prototype=g.prototype;var y=b.prototype=new v;y.constructor=b,r(y,g.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,l=null;if(null!=t)for(r in void 0!==t.ref&&(l=t.ref),void 0!==t.key&&(i=""+t.key),t)k.call(t,r)&&!E.hasOwnProperty(r)&&(o[r]=t[r]);var s=arguments.length-2;if(1===s)o.children=n;else if(1<s){for(var u=Array(s),c=0;c<s;c++)u[c]=arguments[c+2];o.children=u}if(e&&e.defaultProps)for(r in s=e.defaultProps)void 0===o[r]&&(o[r]=s[r]);return{$$typeof:a,type:e,key:i,ref:l,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 l=typeof e;"undefined"!==l&&"boolean"!==l||(e=null);var s=!1;if(null===e)s=!0;else switch(l){case"string":case"number":s=!0;break;case"object":switch(e.$$typeof){case a:case o:s=!0}}if(s)return i=i(s=e),e=""===r?"."+C(s,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||s&&s.key===i.key?"":(""+i.key).replace(_,"$&/")+"/")+e)),t.push(i)),1;if(s=0,r=""===r?".":r+":",Array.isArray(e))for(var u=0;u<e.length;u++){var c=r+C(l=e[u],u);s+=T(l,t,n,c,i)}else if(c=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=f&&e[f]||e["@@iterator"])?e:null}(e),"function"==typeof c)for(e=c.call(e),u=0;!(l=e.next()).done;)s+=T(l=l.value,t,n,c=r+C(l,u++),i);else if("object"===l)throw t=""+e,Error(p(31,"[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t));return s}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 L(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 R={current:null};function O(){var e=R.current;if(null===e)throw Error(p(321));return e}var N={ReactCurrentDispatcher:R,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(p(143));return e}},t.Component=g,t.PureComponent=b,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=N,t.cloneElement=function(e,t,n){if(null==e)throw Error(p(267,e));var o=r({},e.props),i=e.key,l=e.ref,s=e._owner;if(null!=t){if(void 0!==t.ref&&(l=t.ref,s=w.current),void 0!==t.key&&(i=""+t.key),e.type&&e.type.defaultProps)var u=e.type.defaultProps;for(c in t)k.call(t,c)&&!E.hasOwnProperty(c)&&(o[c]=void 0===t[c]&&void 0!==u?u[c]:t[c])}var c=arguments.length-2;if(1===c)o.children=n;else if(1<c){u=Array(c);for(var d=0;d<c;d++)u[d]=arguments[d+2];o.children=u}return{$$typeof:a,type:e.type,key:i,ref:l,props:o,_owner:s}},t.createContext=function(e,t){return void 0===t&&(t=null),(e={$$typeof:l,_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:s,render:e}},t.isValidElement=x,t.lazy=function(e){return{$$typeof:c,_payload:{_status:-1,_result:e},_init:L}},t.memo=function(e,t){return{$$typeof:u,type:e,compare:void 0===t?null:t}},t.useCallback=function(e,t){return O().useCallback(e,t)},t.useContext=function(e,t){return O().useContext(e,t)},t.useDebugValue=function(){},t.useEffect=function(e,t){return O().useEffect(e,t)},t.useImperativeHandle=function(e,t,n){return O().useImperativeHandle(e,t,n)},t.useLayoutEffect=function(e,t){return O().useLayoutEffect(e,t)},t.useMemo=function(e,t){return O().useMemo(e,t)},t.useReducer=function(e,t,n){return O().useReducer(e,t,n)},t.useRef=function(e){return O().useRef(e)},t.useState=function(e){return O().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 l=Date,s=l.now();t.unstable_now=function(){return l.now()-s}}if("undefined"==typeof window||"function"!=typeof MessageChannel){var u=null,c=null,d=function(){if(null!==u)try{var e=t.unstable_now();u(!0,e),u=null}catch(n){throw setTimeout(d,0),n}};n=function(e){null!==u?setTimeout(n,0,e):(u=e,setTimeout(d,0))},r=function(e,t){c=setTimeout(e,t)},a=function(){clearTimeout(c)},t.unstable_shouldYield=function(){return!1},o=t.unstable_forceFrameRate=function(){}}else{var f=window.setTimeout,p=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 h=!1,g=null,v=-1,b=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"):b=0<e?Math.floor(1e3/e):5};var w=new MessageChannel,k=w.port2;w.port1.onmessage=function(){if(null!==g){var e=t.unstable_now();y=e+b;try{g(!0,e)?k.postMessage(null):(h=!1,g=null)}catch(n){throw k.postMessage(null),n}}else h=!1},n=function(e){g=e,h||(h=!0,k.postMessage(null))},r=function(e,n){v=f((function(){e(t.unstable_now())}),n)},a=function(){p(v),v=-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],l=o+1,s=e[l];if(void 0!==i&&0>_(i,n))void 0!==s&&0>_(s,i)?(e[r]=s,e[l]=n,r=l):(e[r]=i,e[o]=n,r=o);else{if(!(void 0!==s&&0>_(s,n)))break e;e[r]=s,e[l]=n,r=l}}}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,L=null,R=3,O=!1,N=!1,P=!1;function j(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(P=!1,j(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,P&&(P=!1,a()),O=!0;var o=R;try{for(j(n),L=S(C);null!==L&&(!(L.expirationTime>n)||e&&!t.unstable_shouldYield());){var i=L.callback;if("function"==typeof i){L.callback=null,R=L.priorityLevel;var l=i(L.expirationTime<=n);n=t.unstable_now(),"function"==typeof l?L.callback=l:L===S(C)&&x(C),j(n)}else x(C);L=S(C)}if(null!==L)var s=!0;else{var u=S(T);null!==u&&r(I,u.startTime-n),s=!1}return s}finally{L=null,R=o,O=!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||O||(N=!0,n(D))},t.unstable_getCurrentPriorityLevel=function(){return R},t.unstable_getFirstCallbackNode=function(){return S(C)},t.unstable_next=function(e){switch(R){case 1:case 2:case 3:var t=3;break;default:t=R}var n=R;R=t;try{return e()}finally{R=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=R;R=e;try{return t()}finally{R=n}},t.unstable_scheduleCallback=function(e,o,i){var l=t.unstable_now();switch("object"==typeof i&&null!==i?i="number"==typeof(i=i.delay)&&0<i?l+i:l:i=l,e){case 1:var s=-1;break;case 2:s=250;break;case 5:s=1073741823;break;case 4:s=1e4;break;default:s=5e3}return e={id:A++,callback:o,priorityLevel:e,startTime:i,expirationTime:s=i+s,sortIndex:-1},i>l?(e.sortIndex=i,E(T,e),null===S(C)&&e===S(T)&&(P?a():P=!0,r(I,i-l))):(e.sortIndex=s,E(C,e),N||O||(N=!0,n(D))),e},t.unstable_wrapCallback=function(e){var t=R;return function(){var n=R;R=t;try{return e.apply(this,arguments)}finally{R=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 l=Object.prototype.hasOwnProperty.bind(t),s=0;s<o.length;s++){var u=o[s];if(!l(u))return!1;var c=e[u],d=t[u];if(!1===(a=n?n.call(r,c,d,u):void 0)||void 0===a&&c!==d)return!1}return!0}},6809:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={title:"Apache Milagro",tagline:"Core security infrastructure for decentralized networks",url:"https://milagro.apache.org",baseUrl:"/",organizationName:"apache",projectName:"incubator-milagro",scripts:["https://buttons.github.io/buttons.js"],favicon:"img/favicon.ico",customFields:{separateCss:["/cdocs","/swagger","/mpcdocs"],users:[{caption:"User1",image:"/img/MILAGRO_emblem.svg",infoLink:"https://milagro.apache.org",pinned:!0}],fonts:{myFont:["Open Sans","Roboto"],myOtherFont:["-apple-system","system-ui"]},repoUrl:"https://github.com/apache/incubator-milagro",markdownPlugins:[null]},onBrokenLinks:"log",onBrokenMarkdownLinks:"log",presets:[["@docusaurus/preset-classic",{docs:{showLastUpdateAuthor:!0,showLastUpdateTime:!0,path:"../docs",sidebarPath:"sidebars.json",remarkPlugins:[null],rehypePlugins:[null]},blog:{path:"blog",id:"blog"},theme:{customCss:"src/css/customTheme.css"}}]],plugins:[],themeConfig:{navbar:{title:"Apache Milagro",logo:{src:"img/milagro.svg"},items:[{to:"docs/milagro-intro",label:"Docs",position:"left"},{to:"docs/support",label:"Support",position:"left"},{to:"docs/contributor-guide",label:"Contributing",position:"left"},{to:"docs/downloads",label:"Downloads",position:"left"}],hideOnScroll:!1},footer:{links:[],copyright:"Copyright \xa9 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.",logo:{src:"img/milagro.svg"},style:"light"},colorMode:{defaultMode:"light",disableSwitch:!1,respectPrefersColorScheme:!1},docs:{versionPersistence:"localStorage",sidebar:{hideable:!1,autoCollapseCategories:!1}},metadata:[],prism:{additionalLanguages:[],theme:{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)"}}]},magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}}]},tableOfContents:{minHeadingLevel:2,maxHeadingLevel:3}},stylesheets:[{href:"https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css",type:"text/css",integrity:"sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM",crossorigin:"anonymous"}],baseUrlIssueBanner:!0,i18n:{defaultLocale:"en",path:"i18n",locales:["en"],localeConfigs:{}},onDuplicateRoutes:"warn",staticDirectories:["static"],themes:[],headTags:[],clientModules:[],titleDelimiter:"|",noIndex:!1,markdown:{mermaid:!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})},4578:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(9611);function a(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,(0,r.Z)(e,t)}},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})},9611:(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)}n.d(t,{Z:()=>r})},6528:(e,t,n)=>{"use strict";function r(e){return 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},r(e)}n.d(t,{Z:()=>i});var a=n(9611);function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&(0,a.Z)(e,t)}function i(){i=function(e,t){return new n(e,void 0,t)};var e=RegExp.prototype,t=new WeakMap;function n(e,r,o){var i=new RegExp(e,r);return t.set(i,o||t.get(e)),(0,a.Z)(i,n.prototype)}function l(e,n){var r=t.get(n);return Object.keys(r).reduce((function(t,n){var a=r[n];if("number"==typeof a)t[n]=e[a];else{for(var o=0;void 0===e[a[o]]&&o+1<a.length;)o++;t[n]=e[a[o]]}return t}),Object.create(null))}return o(n,RegExp),n.prototype.exec=function(t){var n=e.exec.call(this,t);if(n){n.groups=l(n,this);var r=n.indices;r&&(r.groups=l(r,this))}return n},n.prototype[Symbol.replace]=function(n,a){if("string"==typeof a){var o=t.get(this);return e[Symbol.replace].call(this,n,a.replace(/\$<([^>]+)>/g,(function(e,t){var n=o[t];return"$"+(Array.isArray(n)?n.join("$"):n)})))}if("function"==typeof a){var i=this;return e[Symbol.replace].call(this,n,(function(){var e=arguments;return"object"!=r(e[e.length-1])&&(e=[].slice.call(e)).push(l(e,i)),a.apply(this,e)}))}return e[Symbol.replace].call(this,n,a)},i.apply(this,arguments)}},8776:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r="Invariant failed";function a(e,t){if(!e)throw new Error(r)}},7529:e=>{"use strict";e.exports={}},6887:e=>{"use strict";e.exports=JSON.parse('{"/blog-c97":{"__comp":"a6aa9e1f","__context":{"plugin":"07d4c24f"},"sidebar":"95b96bb9","items":[{"content":"31ac37dd"}],"metadata":"a7098721"},"/blog/2019/06/10/miss-me-c3b":{"__comp":"ccc49370","__context":{"plugin":"07d4c24f"},"sidebar":"95b96bb9","content":"5abf2286"},"/blog/archive-bb4":{"__comp":"9e4087bc","__context":{"plugin":"07d4c24f"},"archive":"4200b1a9"},"/help-bc4":{"__comp":"7e37206e","__context":{"plugin":"6b470099"},"config":"5e9f5e1a"},"/index.js-old-7d9":{"__comp":"3a69e0cd","__context":{"plugin":"6b470099"},"config":"5e9f5e1a"},"/docs-5ed":{"__comp":"1be78505","__context":{"plugin":"510581aa"},"versionMetadata":"935f2afb"},"/docs/amcl-c-api-2.0.0-cc2":{"__comp":"17896441","content":"2797bd38"},"/docs/amcl-javascript-api-0fd":{"__comp":"17896441","content":"76b9cd24"},"/docs/amcl-overview-f59":{"__comp":"17896441","content":"e577dddf"},"/docs/contributor-guide-44a":{"__comp":"17896441","content":"f2859be3"},"/docs/cryptojs/aes-f56":{"__comp":"17896441","content":"d4bf336d"},"/docs/cryptojs/amcl-javascript-api-7ae":{"__comp":"17896441","content":"01cea0f3"},"/docs/cryptojs/big-0d7":{"__comp":"17896441","content":"83ec89a5"},"/docs/cryptojs/bls-96d":{"__comp":"17896441","content":"6d6ade50"},"/docs/cryptojs/bls192-d4a":{"__comp":"17896441","content":"42231959"},"/docs/cryptojs/bls256-5b3":{"__comp":"17896441","content":"928c7886"},"/docs/cryptojs/dbig-946":{"__comp":"17896441","content":"0f3e38c0"},"/docs/cryptojs/ecdh-337":{"__comp":"17896441","content":"dd16e380"},"/docs/cryptojs/ecp-267":{"__comp":"17896441","content":"aa39f157"},"/docs/cryptojs/ecp2-2f4":{"__comp":"17896441","content":"c2075afd"},"/docs/cryptojs/ecp4-eb9":{"__comp":"17896441","content":"f6345755"},"/docs/cryptojs/ecp8-f14":{"__comp":"17896441","content":"5400f75f"},"/docs/cryptojs/ff-0ec":{"__comp":"17896441","content":"f2723ab8"},"/docs/cryptojs/fp-452":{"__comp":"17896441","content":"2034d24c"},"/docs/cryptojs/fp12-524":{"__comp":"17896441","content":"f498ea0f"},"/docs/cryptojs/fp16-273":{"__comp":"17896441","content":"fc6c3e65"},"/docs/cryptojs/fp2-986":{"__comp":"17896441","content":"e361dc62"},"/docs/cryptojs/fp24-919":{"__comp":"17896441","content":"1056678c"},"/docs/cryptojs/fp4-b32":{"__comp":"17896441","content":"1f3f8b8d"},"/docs/cryptojs/fp48-90d":{"__comp":"17896441","content":"20cdd429"},"/docs/cryptojs/fp8-49e":{"__comp":"17896441","content":"2374c105"},"/docs/cryptojs/gcm-864":{"__comp":"17896441","content":"8d8b4e4d"},"/docs/cryptojs/hash256-a81":{"__comp":"17896441","content":"2042cb3f"},"/docs/cryptojs/hash384-47c":{"__comp":"17896441","content":"a6f36191"},"/docs/cryptojs/hash512-78f":{"__comp":"17896441","content":"3512b277"},"/docs/cryptojs/mpin-7df":{"__comp":"17896441","content":"e12d15a2"},"/docs/cryptojs/mpin192-d7b":{"__comp":"17896441","content":"76b96e45"},"/docs/cryptojs/mpin256-432":{"__comp":"17896441","content":"c511d3db"},"/docs/cryptojs/pair-6dd":{"__comp":"17896441","content":"c5928a60"},"/docs/cryptojs/pair192-ea5":{"__comp":"17896441","content":"b8f83f70"},"/docs/cryptojs/pair256-f49":{"__comp":"17896441","content":"abda4bac"},"/docs/cryptojs/rand-aa0":{"__comp":"17896441","content":"2dbc89af"},"/docs/cryptojs/rsa-340":{"__comp":"17896441","content":"899bffd7"},"/docs/cryptojs/sha3-054":{"__comp":"17896441","content":"598fef50"},"/docs/cryptojs/unit64-662":{"__comp":"17896441","content":"54a18fe8"},"/docs/d-ta-api-5fc":{"__comp":"17896441","content":"0aae0fe2"},"/docs/d-ta-overview-0a9":{"__comp":"17896441","content":"c11c5242"},"/docs/downloads-aff":{"__comp":"17896441","content":"04b79425"},"/docs/dta-details/api-8e4":{"__comp":"17896441","content":"c21e361c"},"/docs/dta-details/authentication-ebe":{"__comp":"17896441","content":"63bfaece"},"/docs/dta-details/configuration-084":{"__comp":"17896441","content":"e2e92e73"},"/docs/dta-details/encrypted-envelope-055":{"__comp":"17896441","content":"492e7179"},"/docs/dta-details/identity-documents-d77":{"__comp":"17896441","content":"263768e1"},"/docs/dta-details/ipfs-5f1":{"__comp":"17896441","content":"8d622fb0"},"/docs/dta-details/plugin-dev-guide-8fe":{"__comp":"17896441","content":"08c494e0"},"/docs/dta-details/plugins-overview-d97":{"__comp":"17896441","content":"da541cae"},"/docs/dta-details/quickstart-932":{"__comp":"17896441","content":"6b73894e"},"/docs/milagro-crypto-834":{"__comp":"17896441","content":"b0cc1135"},"/docs/milagro-design-bde":{"__comp":"17896441","content":"b1f0173d"},"/docs/milagro-intro-183":{"__comp":"17896441","content":"947b45f9"},"/docs/milagro-protocols-bdb":{"__comp":"17896441","content":"e6851893"},"/docs/mpc-api-0.1-e9b":{"__comp":"17896441","content":"ccb1012d"},"/docs/support-a1f":{"__comp":"17896441","content":"948a189c"},"/docs/zkp-mfa-api-8e2":{"__comp":"17896441","content":"8cfa73c0"},"/docs/zkp-mfa-overview-d7e":{"__comp":"17896441","content":"ef5324a4"},"/-ddd":{"__comp":"c4f5d8e4","__context":{"plugin":"6b470099"},"config":"5e9f5e1a"}}')}},e=>{e.O(0,[532],(()=>{return t=9383,e(e.s=t);var t}));e.O()}]);
\ No newline at end of file
diff --git a/assets/js/main.98efe6b5.js.LICENSE.txt b/assets/js/main.98efe6b5.js.LICENSE.txt
new file mode 100644
index 0000000..6e08db2
--- /dev/null
+++ b/assets/js/main.98efe6b5.js.LICENSE.txt
@@ -0,0 +1,53 @@
+/*
+object-assign
+(c) Sindre Sorhus
+@license MIT
+*/
+
+/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress
+ * @license MIT */
+
+/**
+ * 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
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/** @license React v16.13.1
+ * react-is.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/** @license React v17.0.2
+ * react-dom.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+/** @license React v17.0.2
+ * react.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
diff --git a/assets/js/runtime~main.2c187651.js b/assets/js/runtime~main.2c187651.js
new file mode 100644
index 0000000..d1d2a03
--- /dev/null
+++ b/assets/js/runtime~main.2c187651.js
@@ -0,0 +1 @@
+(()=>{"use strict";var e,a,f,c,d={},b={};function r(e){var a=b[e];if(void 0!==a)return a.exports;var f=b[e]={id:e,loaded:!1,exports:{}};return d[e].call(f.exports,f,f.exports,r),f.loaded=!0,f.exports}r.m=d,r.c=b,e=[],r.O=(a,f,c,d)=>{if(!f){var b=1/0;for(i=0;i<e.length;i++){for(var[f,c,d]=e[i],t=!0,o=0;o<f.length;o++)(!1&d||b>=d)&&Object.keys(r.O).every((e=>r.O[e](f[o])))?f.splice(o--,1):(t=!1,d<b&&(b=d));if(t){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]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},f=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.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);r.r(d);var b={};a=a||[null,f({}),f([]),f(f)];for(var t=2&c&&e;"object"==typeof t&&!~a.indexOf(t);t=f(t))Object.getOwnPropertyNames(t).forEach((a=>b[a]=()=>e[a]));return b.default=()=>e,r.d(d,b),d},r.d=(e,a)=>{for(var f in a)r.o(a,f)&&!r.o(e,f)&&Object.defineProperty(e,f,{enumerable:!0,get:a[f]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,f)=>(r.f[f](e,a),a)),[])),r.u=e=>"assets/js/"+({53:"935f2afb",626:"8d8b4e4d",722:"947b45f9",761:"76b96e45",866:"4200b1a9",875:"abda4bac",1050:"a7098721",1334:"c511d3db",1370:"c5928a60",1383:"fc6c3e65",1426:"b0cc1135",1478:"510581aa",1514:"ef5324a4",1599:"2042cb3f",1605:"5400f75f",1838:"c11c5242",2050:"e2e92e73",2144:"8cfa73c0",2161:"04b79425",2517:"f2723ab8",2569:"0aae0fe2",2740:"7e37206e",3074:"263768e1",3089:"a6aa9e1f",3222:"f6345755",3561:"95b96bb9",3590:"1f3f8b8d",3608:"9e4087bc",3678:"8d622fb0",3972:"b8f83f70",4054:"31ac37dd",4075:"2034d24c",4195:"c4f5d8e4",4279:"598fef50",4356:"899bffd7",4441:"6b73894e",4591:"da541cae",4655:"948a189c",4758:"63bfaece",4809:"e577dddf",4913:"2797bd38",4926:"20cdd429",4941:"e12d15a2",4975:"42231959",5309:"e361dc62",5580:"54a18fe8",5962:"07d4c24f",6103:"ccc49370",6401:"d4bf336d",6409:"492e7179",6525:"a6f36191",6605:"b1f0173d",6755:"2374c105",6944:"08c494e0",7454:"1056678c",7735:"3a69e0cd",7918:"17896441",8108:"f2859be3",8145:"ccb1012d",8278:"aa39f157",8421:"83ec89a5",8483:"6b470099",8732:"e6851893",9009:"928c7886",9215:"5abf2286",9290:"c2075afd",9449:"01cea0f3",9514:"1be78505",9602:"3512b277",9634:"c21e361c",9753:"2dbc89af",9779:"dd16e380",9784:"76b9cd24",9809:"6d6ade50",9839:"0f3e38c0",9880:"f498ea0f"}[e]||e)+"."+{53:"d4022c38",626:"5b6f1186",722:"e6d16fb5",761:"0c9c696f",866:"78b4ed6f",875:"ea08378e",1050:"225b93dc",1271:"3089a1a2",1334:"b177362f",1370:"a55e51da",1383:"d43a3fa2",1426:"c5891ee2",1478:"b4a34d92",1514:"fdb4aa2b",1599:"676a8636",1605:"11e02cec",1838:"9c21f4f8",2050:"17f6f8c6",2144:"e67b6530",2161:"3e88f1f6",2517:"c90d2a3c",2569:"80df566f",2740:"593907d1",3074:"7de5aad9",3089:"3ffbb1d8",3222:"52d301ce",3561:"88819a76",3590:"b5a0f515",3608:"1ed553d2",3678:"c7a2e8dc",3972:"93ab5f6a",4054:"1199d7fb",4075:"869f46ab",4195:"dd05c200",4279:"908cd3ff",4356:"7761a6d6",4441:"c335836c",4591:"ce5e416a",4655:"8679b8a7",4758:"00c51657",4809:"8c93a335",4913:"5d8e48a7",4926:"99859669",4941:"dfb9d7ea",4972:"2177a3a5",4975:"f1044068",5309:"f90e83b4",5423:"f5acf638",5580:"fd648bf5",5962:"73a9da8c",6103:"73dfd116",6401:"5c9be230",6409:"46f9d13b",6525:"dd828e22",6605:"2ca42697",6755:"f49d0982",6944:"0af470b4",7454:"caf18304",7735:"e5b74282",7918:"c1ba8144",8108:"d48e8aab",8145:"73ac21dd",8218:"ebcaf7ac",8278:"444dccd1",8421:"564fe5ef",8483:"2eaabadf",8732:"36b6ad27",9009:"838c054a",9215:"2050f369",9290:"6d411f80",9449:"f0c39ced",9514:"1ada61e8",9602:"fc607c19",9634:"49396231",9753:"1297ece8",9779:"023b9f21",9784:"60662dea",9809:"a73bb6db",9839:"12e6a23f",9880:"ed0d5a82"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),c={},r.l=(e,a,f,d)=>{if(c[e])c[e].push(a);else{var b,t;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){b=i;break}}b||(t=!0,(b=document.createElement("script")).charset="utf-8",b.timeout=120,r.nc&&b.setAttribute("nonce",r.nc),b.src=e),c[e]=[a];var l=(a,f)=>{b.onerror=b.onload=null,clearTimeout(u);var d=c[e];if(delete c[e],b.parentNode&&b.parentNode.removeChild(b),d&&d.forEach((e=>e(f))),a)return a(f)},u=setTimeout(l.bind(null,void 0,{type:"timeout",target:b}),12e4);b.onerror=l.bind(null,b.onerror),b.onload=l.bind(null,b.onload),t&&document.head.appendChild(b)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/",r.gca=function(e){return e={17896441:"7918",42231959:"4975","935f2afb":"53","8d8b4e4d":"626","947b45f9":"722","76b96e45":"761","4200b1a9":"866",abda4bac:"875",a7098721:"1050",c511d3db:"1334",c5928a60:"1370",fc6c3e65:"1383",b0cc1135:"1426","510581aa":"1478",ef5324a4:"1514","2042cb3f":"1599","5400f75f":"1605",c11c5242:"1838",e2e92e73:"2050","8cfa73c0":"2144","04b79425":"2161",f2723ab8:"2517","0aae0fe2":"2569","7e37206e":"2740","263768e1":"3074",a6aa9e1f:"3089",f6345755:"3222","95b96bb9":"3561","1f3f8b8d":"3590","9e4087bc":"3608","8d622fb0":"3678",b8f83f70:"3972","31ac37dd":"4054","2034d24c":"4075",c4f5d8e4:"4195","598fef50":"4279","899bffd7":"4356","6b73894e":"4441",da541cae:"4591","948a189c":"4655","63bfaece":"4758",e577dddf:"4809","2797bd38":"4913","20cdd429":"4926",e12d15a2:"4941",e361dc62:"5309","54a18fe8":"5580","07d4c24f":"5962",ccc49370:"6103",d4bf336d:"6401","492e7179":"6409",a6f36191:"6525",b1f0173d:"6605","2374c105":"6755","08c494e0":"6944","1056678c":"7454","3a69e0cd":"7735",f2859be3:"8108",ccb1012d:"8145",aa39f157:"8278","83ec89a5":"8421","6b470099":"8483",e6851893:"8732","928c7886":"9009","5abf2286":"9215",c2075afd:"9290","01cea0f3":"9449","1be78505":"9514","3512b277":"9602",c21e361c:"9634","2dbc89af":"9753",dd16e380:"9779","76b9cd24":"9784","6d6ade50":"9809","0f3e38c0":"9839",f498ea0f:"9880"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(a,f)=>{var c=r.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=r.p+r.u(a),t=new Error;r.l(b,(f=>{if(r.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;t.message="Loading chunk "+a+" failed.\n("+d+": "+b+")",t.name="ChunkLoadError",t.type=d,t.request=b,c[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,f)=>{var c,d,[b,t,o]=f,n=0;if(b.some((a=>0!==e[a]))){for(c in t)r.o(t,c)&&(r.m[c]=t[c]);if(o)var i=o(r)}for(a&&a(f);n<b.length;n++)d=b[n],r.o(e,d)&&e[d]&&e[d][0](),e[d]=0;return r.O(i)},f=self.webpackChunk=self.webpackChunk||[];f.forEach(a.bind(null,0)),f.push=a.bind(null,f.push.bind(f))})()})();
\ No newline at end of file
diff --git a/blog/2019/06/10/miss-me/index.html b/blog/2019/06/10/miss-me/index.html
index 0791591..b63501e 100644
--- a/blog/2019/06/10/miss-me/index.html
+++ b/blog/2019/06/10/miss-me/index.html
@@ -1,59 +1,22 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Miss us? We missed you. · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="It&#x27;s not often that Apache Incubation projects start, lay dormant for three years, and then spring to life. Yet, it&#x27;s really happening. I pleased to report that in the past two weeks Milagro has added three new contributors, one new PPMC member and one new mentor. We launched a spartan, yet esthetically pleasing, project website. And, we have a roadmap....."/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Miss us? We missed you. · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/blog/2019/06/10/miss-me"/><meta property="og:description" content="It&#x27;s not often that Apache Incubation projects start, lay dormant for three years, and then spring to life. Yet, it&#x27;s really happening. I pleased to report that in the past two weeks Milagro has added three new contributors, one new PPMC member and one new mentor. We launched a spartan, yet esthetically pleasing, project website. And, we have a roadmap....."/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class=""><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class=""><a href="/docs/support" target="_self">Support</a></li><li class=""><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class=""><a href="/docs/downloads" target="_self">Downloads</a></li><li class="siteNavGroupActive"><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>Recent Posts</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle">Recent Posts</h3><ul class=""><li class="navListItem navListItemActive"><a class="navItem" href="/blog/2019/06/10/miss-me">Miss us? We missed you.</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="blog-wrapper blog-post-page plugin-blog plugin-id-blog">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">Miss us? We missed you. | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/blog/2019/06/10/miss-me"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="Miss us? We missed you. | Apache Milagro"><meta data-rh="true" name="description" content="It&#x27;s not often that Apache Incubation projects start, lay dormant for three years, and then spring to life. Yet, it&#x27;s really happening. I pleased to report that in the past two weeks Milagro has added three new contributors, one new PPMC member and one new mentor. We launched a spartan, yet esthetically pleasing, project website. And, we have a roadmap....."><meta data-rh="true" property="og:description" content="It&#x27;s not often that Apache Incubation projects start, lay dormant for three years, and then spring to life. Yet, it&#x27;s really happening. I pleased to report that in the past two weeks Milagro has added three new contributors, one new PPMC member and one new mentor. We launched a spartan, yet esthetically pleasing, project website. And, we have a roadmap....."><meta data-rh="true" property="og:type" content="article"><meta data-rh="true" property="article:published_time" content="2019-06-10T00:00:00.000Z"><meta data-rh="true" property="article:author" content="http://twitter.com/bspector"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/blog/2019/06/10/miss-me"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/blog/2019/06/10/miss-me" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/blog/2019/06/10/miss-me" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="lonePost"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/blog/2019/06/10/miss-me">Miss us? We missed you.</a></h1><p class="post-meta">June 10, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/bspector" target="_blank" rel="noreferrer noopener">Brian Spector</a></p></div></header><div><span><p>It's not often that Apache Incubation projects start, lay dormant for three years, and then spring to life. Yet, it's really happening. I pleased to report that in the past two weeks Milagro has added three new contributors, one new PPMC member and one new mentor. We launched a spartan, yet esthetically pleasing, project website. And, we have a roadmap.....</p>
-<p>More details soon.</p>
-</span></div></div><div class="blogSocialSection"></div></div><div class="blog-recent"><a class="button" href="/blog/">Recent Posts</a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><div class="container margin-vert--lg"><div class="row"><aside class="col col--3"><nav class="sidebar_re4s thin-scrollbar" aria-label="Blog recent posts navigation"><div class="sidebarItemTitle_pO2u margin-bottom--md">Recent posts</div><ul class="sidebarItemList_Yudw clean-list"><li class="sidebarItem__DBe"><a aria-current="page" class="sidebarItemLink_mo7H sidebarItemLinkActive_I1ZP" href="/blog/2019/06/10/miss-me">Miss us? We missed you.</a></li></ul></nav></aside><main class="col col--7" itemscope="" itemtype="http://schema.org/Blog"><article itemprop="blogPost" itemscope="" itemtype="http://schema.org/BlogPosting"><header><h1 class="title_f1Hy" itemprop="headline">Miss us? We missed you.</h1><div class="container_mt6G margin-vert--md"><time datetime="2019-06-10T00:00:00.000Z" itemprop="datePublished">June 10, 2019</time> · <!-- -->One min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--6 authorCol_Hf19"><div class="avatar margin-bottom--sm"><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="http://twitter.com/bspector" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Brian Spector</span></a></div></div></div></div></div></header><div id="post-content" class="markdown" itemprop="articleBody"><p>It&#x27;s not often that Apache Incubation projects start, lay dormant for three years, and then spring to life. Yet, it&#x27;s really happening. I pleased to report that in the past two weeks Milagro has added three new contributors, one new PPMC member and one new mentor. We launched a spartan, yet esthetically pleasing, project website. And, we have a roadmap.....</p><p>More details soon.</p></div></article></main></div></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/blog/archive/index.html b/blog/archive/index.html
new file mode 100644
index 0000000..3151afb
--- /dev/null
+++ b/blog/archive/index.html
@@ -0,0 +1,22 @@
+<!doctype html>
+<html lang="en" dir="ltr" class="plugin-blog plugin-id-blog">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">Archive | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/blog/archive"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="Archive | Apache Milagro"><meta data-rh="true" name="description" content="Archive"><meta data-rh="true" property="og:description" content="Archive"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/blog/archive"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/blog/archive" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/blog/archive" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
+
+
+
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><header class="hero hero--primary"><div class="container"><h1 class="hero__title">Archive</h1><p class="hero__subtitle">Archive</p></div></header><main><section class="margin-vert--lg"><div class="container"><div class="row"><div class="col col--4 margin-vert--lg"><h3>2019</h3><ul><li><a href="/blog/2019/06/10/miss-me">June 10, 2019<!-- --> - <!-- -->Miss us? We missed you.</a></li></ul></div></div></div></section></main></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/blog/atom.xml b/blog/atom.xml
index 4822c38..55b44cc 100644
--- a/blog/atom.xml
+++ b/blog/atom.xml
@@ -2,18 +2,18 @@
 <feed xmlns="http://www.w3.org/2005/Atom">
     <id>https://milagro.apache.org/blog</id>
     <title>Apache Milagro Blog</title>
-    <updated>2019-06-10T06:00:00.000Z</updated>
+    <updated>2019-06-10T00:00:00.000Z</updated>
     <generator>https://github.com/jpmonette/feed</generator>
     <link rel="alternate" href="https://milagro.apache.org/blog"/>
-    <subtitle>The best place to stay up-to-date with the latest Apache Milagro news and events.</subtitle>
-    <logo>https://milagro.apache.org/img/milagro.svg</logo>
-    <rights>Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</rights>
+    <subtitle>Apache Milagro Blog</subtitle>
+    <icon>https://milagro.apache.org/img/favicon.ico</icon>
     <entry>
         <title type="html"><![CDATA[Miss us? We missed you.]]></title>
-        <id>https://milagro.apache.org/blog/2019/06/10/miss-me.html</id>
-        <link href="https://milagro.apache.org/blog/2019/06/10/miss-me.html"/>
-        <updated>2019-06-10T06:00:00.000Z</updated>
-        <summary type="html"><![CDATA[<p>It's not often that Apache Incubation projects start, lay dormant for three years, and then spring to life. Yet, it's really happening. I pleased to report that in the past two weeks Milagro has added three new contributors, one new PPMC member and o...</p>]]></summary>
+        <id>/2019/06/10/miss-me</id>
+        <link href="https://milagro.apache.org/blog/2019/06/10/miss-me"/>
+        <updated>2019-06-10T00:00:00.000Z</updated>
+        <summary type="html"><![CDATA[It's not often that Apache Incubation projects start, lay dormant for three years, and then spring to life. Yet, it's really happening. I pleased to report that in the past two weeks Milagro has added three new contributors, one new PPMC member and one new mentor. We launched a spartan, yet esthetically pleasing, project website. And, we have a roadmap.....]]></summary>
+        <content type="html"><![CDATA[<p>It's not often that Apache Incubation projects start, lay dormant for three years, and then spring to life. Yet, it's really happening. I pleased to report that in the past two weeks Milagro has added three new contributors, one new PPMC member and one new mentor. We launched a spartan, yet esthetically pleasing, project website. And, we have a roadmap.....</p><p>More details soon.</p>]]></content>
         <author>
             <name>Brian Spector</name>
             <uri>http://twitter.com/bspector</uri>
diff --git a/blog/index.html b/blog/index.html
index 2ba7e59..0faa647 100644
--- a/blog/index.html
+++ b/blog/index.html
@@ -1,59 +1,22 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Blog · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Core security infrastructure for decentralized networks"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Blog · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="Core security infrastructure for decentralized networks"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="blog"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class=""><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class=""><a href="/docs/support" target="_self">Support</a></li><li class=""><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class=""><a href="/docs/downloads" target="_self">Downloads</a></li><li class="siteNavGroupActive siteNavItemActive"><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>Recent Posts</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle">Recent Posts</h3><ul class=""><li class="navListItem"><a class="navItem" href="/blog/2019/06/10/miss-me">Miss us? We missed you.</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="blog-wrapper blog-list-page plugin-blog plugin-id-blog">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">Blog | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/blog"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" property="og:title" content="Blog | Apache Milagro"><meta data-rh="true" name="description" content="Blog"><meta data-rh="true" property="og:description" content="Blog"><meta data-rh="true" name="docusaurus_tag" content="blog_posts_list"><meta data-rh="true" name="docsearch:docusaurus_tag" content="blog_posts_list"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/blog"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/blog" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/blog" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer postContainer blogContainer"><div class="wrapper"><div class="posts"><div class="post"><header class="postHeader"><h1 class="postHeaderTitle"><a href="/blog/2019/06/10/miss-me">Miss us? We missed you.</a></h1><p class="post-meta">June 10, 2019</p><div class="authorBlock"><p class="post-authorName"><a href="http://twitter.com/bspector" target="_blank" rel="noreferrer noopener">Brian Spector</a></p></div></header><article class="post-content"><div><span><p>It's not often that Apache Incubation projects start, lay dormant for three years, and then spring to life. Yet, it's really happening. I pleased to report that in the past two weeks Milagro has added three new contributors, one new PPMC member and one new mentor. We launched a spartan, yet esthetically pleasing, project website. And, we have a roadmap.....</p>
-<p>More details soon.</p>
-</span></div></article></div><div class="docs-prevnext"></div></div></div></div></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><div class="container margin-vert--lg"><div class="row"><aside class="col col--3"><nav class="sidebar_re4s thin-scrollbar" aria-label="Blog recent posts navigation"><div class="sidebarItemTitle_pO2u margin-bottom--md">Recent posts</div><ul class="sidebarItemList_Yudw clean-list"><li class="sidebarItem__DBe"><a class="sidebarItemLink_mo7H" href="/blog/2019/06/10/miss-me">Miss us? We missed you.</a></li></ul></nav></aside><main class="col col--7" itemscope="" itemtype="http://schema.org/Blog"><article class="margin-bottom--xl" itemprop="blogPost" itemscope="" itemtype="http://schema.org/BlogPosting"><header><h2 class="title_f1Hy" itemprop="headline"><a itemprop="url" href="/blog/2019/06/10/miss-me">Miss us? We missed you.</a></h2><div class="container_mt6G margin-vert--md"><time datetime="2019-06-10T00:00:00.000Z" itemprop="datePublished">June 10, 2019</time> · <!-- -->One min read</div><div class="margin-top--md margin-bottom--sm row"><div class="col col--6 authorCol_Hf19"><div class="avatar margin-bottom--sm"><div class="avatar__intro" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><div class="avatar__name"><a href="http://twitter.com/bspector" target="_blank" rel="noopener noreferrer" itemprop="url"><span itemprop="name">Brian Spector</span></a></div></div></div></div></div></header><div class="markdown" itemprop="articleBody"><p>It&#x27;s not often that Apache Incubation projects start, lay dormant for three years, and then spring to life. Yet, it&#x27;s really happening. I pleased to report that in the past two weeks Milagro has added three new contributors, one new PPMC member and one new mentor. We launched a spartan, yet esthetically pleasing, project website. And, we have a roadmap.....</p><p>More details soon.</p></div></article><nav class="pagination-nav" aria-label="Blog list page navigation"></nav></main></div></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/blog/rss.xml b/blog/rss.xml
new file mode 100644
index 0000000..25573e5
--- /dev/null
+++ b/blog/rss.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
+    <channel>
+        <title>Apache Milagro Blog</title>
+        <link>https://milagro.apache.org/blog</link>
+        <description>Apache Milagro Blog</description>
+        <lastBuildDate>Mon, 10 Jun 2019 00:00:00 GMT</lastBuildDate>
+        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
+        <generator>https://github.com/jpmonette/feed</generator>
+        <language>en</language>
+        <item>
+            <title><![CDATA[Miss us? We missed you.]]></title>
+            <link>https://milagro.apache.org/blog/2019/06/10/miss-me</link>
+            <guid>/2019/06/10/miss-me</guid>
+            <pubDate>Mon, 10 Jun 2019 00:00:00 GMT</pubDate>
+            <description><![CDATA[It's not often that Apache Incubation projects start, lay dormant for three years, and then spring to life. Yet, it's really happening. I pleased to report that in the past two weeks Milagro has added three new contributors, one new PPMC member and one new mentor. We launched a spartan, yet esthetically pleasing, project website. And, we have a roadmap.....]]></description>
+            <content:encoded><![CDATA[<p>It's not often that Apache Incubation projects start, lay dormant for three years, and then spring to life. Yet, it's really happening. I pleased to report that in the past two weeks Milagro has added three new contributors, one new PPMC member and one new mentor. We launched a spartan, yet esthetically pleasing, project website. And, we have a roadmap.....</p><p>More details soon.</p>]]></content:encoded>
+        </item>
+    </channel>
+</rss>
\ No newline at end of file
diff --git a/build-date.txt b/build-date.txt
index bb5c2d0..8f41b44 100644
--- a/build-date.txt
+++ b/build-date.txt
@@ -1 +1 @@
-Fri Nov 11 11:48:46 UTC 2022
+Fri Dec 16 13:56:15 UTC 2022
diff --git a/cdocs/bdwn.png b/cdocs/bdwn.png
index f23272a..940a0b9 100644
--- a/cdocs/bdwn.png
+++ b/cdocs/bdwn.png
Binary files differ
diff --git a/cdocs/closed.png b/cdocs/closed.png
index 39c7e41..98cc2c9 100644
--- a/cdocs/closed.png
+++ b/cdocs/closed.png
Binary files differ
diff --git a/cdocs/doc.png b/cdocs/doc.png
index 12aa850..17edabf 100644
--- a/cdocs/doc.png
+++ b/cdocs/doc.png
Binary files differ
diff --git a/cdocs/doxygen.png b/cdocs/doxygen.png
index 89acd12..3ff17d8 100644
--- a/cdocs/doxygen.png
+++ b/cdocs/doxygen.png
Binary files differ
diff --git a/cdocs/folderclosed.png b/cdocs/folderclosed.png
index ed0abaf..bb8ab35 100644
--- a/cdocs/folderclosed.png
+++ b/cdocs/folderclosed.png
Binary files differ
diff --git a/cdocs/folderopen.png b/cdocs/folderopen.png
index cf4a936..d6c7f67 100644
--- a/cdocs/folderopen.png
+++ b/cdocs/folderopen.png
Binary files differ
diff --git a/cdocs/nav_g.png b/cdocs/nav_g.png
index 8700057..2093a23 100644
--- a/cdocs/nav_g.png
+++ b/cdocs/nav_g.png
Binary files differ
diff --git a/cdocs/nav_h.png b/cdocs/nav_h.png
index bab86c0..33389b1 100644
--- a/cdocs/nav_h.png
+++ b/cdocs/nav_h.png
Binary files differ
diff --git a/cdocs/open.png b/cdocs/open.png
index a3b9af1..30f75c7 100644
--- a/cdocs/open.png
+++ b/cdocs/open.png
Binary files differ
diff --git a/cdocs/search/close.png b/cdocs/search/close.png
index 3940f43..9342d3d 100644
--- a/cdocs/search/close.png
+++ b/cdocs/search/close.png
Binary files differ
diff --git a/cdocs/search/mag_sel.png b/cdocs/search/mag_sel.png
index b2afb44..81f6040 100644
--- a/cdocs/search/mag_sel.png
+++ b/cdocs/search/mag_sel.png
Binary files differ
diff --git a/cdocs/search/search_l.png b/cdocs/search/search_l.png
index 12fc8e5..c872f4d 100644
--- a/cdocs/search/search_l.png
+++ b/cdocs/search/search_l.png
Binary files differ
diff --git a/cdocs/search/search_m.png b/cdocs/search/search_m.png
index e72744f..b429a16 100644
--- a/cdocs/search/search_m.png
+++ b/cdocs/search/search_m.png
Binary files differ
diff --git a/cdocs/search/search_r.png b/cdocs/search/search_r.png
index 96f34e9..97ee8b4 100644
--- a/cdocs/search/search_r.png
+++ b/cdocs/search/search_r.png
Binary files differ
diff --git a/cdocs/splitbar.png b/cdocs/splitbar.png
index cc3953a..fe895f2 100644
--- a/cdocs/splitbar.png
+++ b/cdocs/splitbar.png
Binary files differ
diff --git a/cdocs/sync_off.png b/cdocs/sync_off.png
index 87acaa6..3b443fc 100644
--- a/cdocs/sync_off.png
+++ b/cdocs/sync_off.png
Binary files differ
diff --git a/cdocs/sync_on.png b/cdocs/sync_on.png
index 59490bd..e08320f 100644
--- a/cdocs/sync_on.png
+++ b/cdocs/sync_on.png
Binary files differ
diff --git a/cdocs/tab_a.png b/cdocs/tab_a.png
index a09fd9d..3b725c4 100644
--- a/cdocs/tab_a.png
+++ b/cdocs/tab_a.png
Binary files differ
diff --git a/cdocs/tab_b.png b/cdocs/tab_b.png
index 134a6c6..e2b4a86 100644
--- a/cdocs/tab_b.png
+++ b/cdocs/tab_b.png
Binary files differ
diff --git a/cdocs/tab_h.png b/cdocs/tab_h.png
index 66c5649..fd5cb70 100644
--- a/cdocs/tab_h.png
+++ b/cdocs/tab_h.png
Binary files differ
diff --git a/cdocs/tab_s.png b/cdocs/tab_s.png
index 990149e..ab478c9 100644
--- a/cdocs/tab_s.png
+++ b/cdocs/tab_s.png
Binary files differ
diff --git a/css/custom.css b/css/custom.css
new file mode 100644
index 0000000..220c1dd
--- /dev/null
+++ b/css/custom.css
@@ -0,0 +1,16 @@
+/* your custom css */
+
+@media only screen and (min-device-width: 360px) and (max-device-width: 736px) {
+}
+
+@media only screen and (min-width: 1024px) {
+}
+
+@media only screen and (max-width: 1023px) {
+}
+
+@media only screen and (min-width: 1400px) {
+}
+
+@media only screen and (min-width: 1500px) {
+}
\ No newline at end of file
diff --git a/css/custom/docusaurus-admonitions.css b/css/custom/docusaurus-admonitions.css
new file mode 100644
index 0000000..c15ee68
--- /dev/null
+++ b/css/custom/docusaurus-admonitions.css
@@ -0,0 +1,102 @@
+/**
+ Docusaurus-like styling for `remarkable-admonitions` blocks
+ */
+
+.admonition {
+  margin-bottom: 1em;
+  padding: 15px 30px 15px 15px;
+}
+
+.admonition h5 {
+  margin-top: 0;
+  margin-bottom: 8px;
+  text-transform: uppercase;
+}
+
+.admonition-icon {
+  display: inline-block;
+  vertical-align: middle;
+  margin-right: 0.2em;
+}
+
+.admonition-icon svg {
+  display: inline-block;
+  width: 22px;
+  height: 22px;
+  stroke-width: 0;
+}
+
+.admonition-content > :last-child {
+  margin-bottom: 0;
+}
+
+/** Customization */
+.admonition-warning {
+  background-color: rgba(230, 126, 34, 0.1);
+  border-left: 8px solid #e67e22;
+}
+
+.admonition-warning h5 {
+  color: #e67e22;
+}
+
+.admonition-warning .admonition-icon svg {
+  stroke: #e67e22;
+  fill: #e67e22;
+}
+
+.admonition-tip {
+  background-color: rgba(46, 204, 113, 0.1);
+  border-left: 8px solid #2ecc71;
+}
+
+.admonition-tip h5 {
+  color: #2ecc71;
+}
+
+.admonition-tip .admonition-icon svg {
+  stroke: #2ecc71;
+  fill: #2ecc71;
+}
+
+.admonition-caution {
+  background-color: rgba(231, 76, 60, 0.1);
+  border-left: 8px solid #e74c3c;
+}
+
+.admonition-caution h5 {
+  color: #e74c3c;
+}
+
+.admonition-caution .admonition-icon svg {
+  stroke: #e74c3c;
+  fill: #e74c3c;
+}
+
+.admonition-important {
+  background-color: rgba(52, 152, 219, 0.1);
+  border-left: 8px solid #3498db;
+}
+
+.admonition-important h5 {
+  color: #3498db;
+}
+
+.admonition-important .admonition-icon svg {
+  stroke: #3498db;
+  fill: #3498db;
+}
+
+.admonition-note {
+  background-color: rgba(241, 196, 15, 0.1);
+  border-left: 8px solid #f1c40f;
+}
+
+.admonition-note h5 {
+  color: #f1c40f;
+}
+
+.admonition-note .admonition-icon svg {
+  stroke: #f1c40f;
+  fill: #f1c40f;
+}
\ No newline at end of file
diff --git a/docs/amcl-c-api-2.0.0/index.html b/docs/amcl-c-api-2.0.0/index.html
index ecf988b..c5655cf 100644
--- a/docs/amcl-c-api-2.0.0/index.html
+++ b/docs/amcl-c-api-2.0.0/index.html
@@ -1,63 +1,22 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>AMCL C API 2.0.0 · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Doxygen support is available for Milagro Crypto Library."/><meta name="docsearch:language" content="en"/><meta property="og:title" content="AMCL C API 2.0.0 · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="Doxygen support is available for Milagro Crypto Library."/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>AMCL Library</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-amcl-c-api-2.0.0">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">AMCL C API 2.0.0 | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/amcl-c-api-2.0.0"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="AMCL C API 2.0.0 | Apache Milagro"><meta data-rh="true" name="description" content="Doxygen support is available for Milagro Crypto Library."><meta data-rh="true" property="og:description" content="Doxygen support is available for Milagro Crypto Library."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/amcl-c-api-2.0.0"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/amcl-c-api-2.0.0" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/amcl-c-api-2.0.0" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">AMCL C API 2.0.0</h1></header><article><div><span><p>Doxygen support is available for Milagro Crypto Library.</p>
-<p>An online version of the Doxygen output is available for viewing in a web browser <a href="/cdocs/index.html" target="_blank">here</a>.</p>
-<p>PDF of the Doxygen output is available for download <a href="/files/amcl-doxygen-2.0.0.pdf" target="_blank">here</a>.</p>
-<!--
-Supported admonition types are: caution, note, important, tip, warning.
--->
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/amcl-overview"><span class="arrow-prev">← </span><span>AMCL Overview</span></a><a class="docs-next button" href="/docs/cryptojs/amcl-javascript-api-1.0.0"><span>Next</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/amcl-overview">AMCL Library</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-overview">AMCL Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API 1.0.0</a></div></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL Library</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">AMCL C API 2.0.0</span><meta itemprop="position" content="2"></li></ul></nav><div class="theme-doc-markdown markdown"><header><h1>AMCL C API 2.0.0</h1></header><p>Doxygen support is available for Milagro Crypto Library.</p><p>An online version of the Doxygen output is available for viewing in a web browser <a target="_blank" href="/cdocs/index.html">here</a>.</p><p>PDF of the Doxygen output is available for download <a target="_blank" href="/files/amcl-doxygen-2.0.0.pdf">here</a>.</p><p>Supported admonition types are: caution, note, important, tip, warning.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/amcl-overview"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">AMCL Overview</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/cryptojs/amcl-javascript-api"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">AMCL JavaScript API</div></a></nav></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/amcl-javascript-api/index.html b/docs/amcl-javascript-api/index.html
index 5ecd5f3..d7d3255 100644
--- a/docs/amcl-javascript-api/index.html
+++ b/docs/amcl-javascript-api/index.html
@@ -1,12 +1,27 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>AMCL JavaScript API · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="*MCJS - Milagro Crypto JavaScript*"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="AMCL JavaScript API · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="*MCJS - Milagro Crypto JavaScript*"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class=""><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class=""><a href="/docs/support" target="_self">Support</a></li><li class=""><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class=""><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">AMCL JavaScript API</h1></header><article><div><span><p><em>MCJS - Milagro Crypto JavaScript</em></p>
-<ul>
-<li><p>MCJS is a standards compliant JavaScript cryptographic library with no
-external dependencies except for the random seed source.</p></li>
-<li><p>MCJS supports the standards for RSA, ECDH, ECIES, ECDSA and M-PIN, AES-GCM
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-amcl-javascript-api">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">AMCL JavaScript API | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/amcl-javascript-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="AMCL JavaScript API | Apache Milagro"><meta data-rh="true" name="description" content="MCJS - Milagro Crypto JavaScript"><meta data-rh="true" property="og:description" content="MCJS - Milagro Crypto JavaScript"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/amcl-javascript-api"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/amcl-javascript-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/amcl-javascript-api" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
+
+
+
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><div class="theme-doc-markdown markdown"><header><h1>AMCL JavaScript API</h1></header><p><em>MCJS - Milagro Crypto JavaScript</em></p><ul><li><p>MCJS is a standards compliant JavaScript cryptographic library with no
+external dependencies except for the random seed source.</p></li><li><p>MCJS supports the standards for RSA, ECDH, ECIES, ECDSA and M-PIN, AES-GCM
 encryption/decryption, SHA256, SHA384, SHA512 and SHA3 hash functions and a
 cryptographically secure random number generator. Furthermore we recently
-added New Hope, a post-quantum key exchange.</p></li>
-<li><p>MCJS is <a href="https://nodejs.org/en/">Node.js</a> compatible and browser compatible
-(see some examples by going to the next page).</p></li>
-</ul>
-</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+added New Hope, a post-quantum key exchange.</p></li><li><p>MCJS is <a href="https://nodejs.org/en/" target="_blank" rel="noopener noreferrer">Node.js</a> compatible and browser compatible
+(see some examples by going to the next page).</p></li></ul></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/amcl-overview/index.html b/docs/amcl-overview/index.html
index 68c0a5e..7711156 100644
--- a/docs/amcl-overview/index.html
+++ b/docs/amcl-overview/index.html
@@ -1,161 +1,24 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Apache Milagro Crypto Library (AMCL) · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="## Introduction"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Apache Milagro Crypto Library (AMCL) · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="## Introduction"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>AMCL Library</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem navListItemActive"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-amcl-overview">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">Apache Milagro Crypto Library (AMCL) | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/amcl-overview"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Apache Milagro Crypto Library (AMCL) | Apache Milagro"><meta data-rh="true" name="description" content="Introduction"><meta data-rh="true" property="og:description" content="Introduction"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/amcl-overview"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/amcl-overview" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/amcl-overview" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">Apache Milagro Crypto Library (AMCL)</h1></header><article><div><span><h2><a class="anchor" aria-hidden="true" id="introduction"></a><a href="#introduction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Introduction</h2>
-<p>One of the major mysteries in the real-world of crypto is resistance to the exploitation of new research ideas. Its not that cryptographic research has failed to throw up new ideas that have the potential for commercial exploitation -- far from it. But in the real-world, 1970's crypto rules supreme, and very little happens that isn't PKI/RSA based. The reasons for this are many and varied. However one part of the puzzle might be the non-availability of easy-to-use open source cryptographic tools, that do not require in depth cryptographic expertise to deploy.</p>
-<p>There are many crypto libraries out there. Many offer a bewildering variety of cryptographic primitives, at different levels of security. Many use extensive assembly language in order to be as fast as possible. Many are very <strong>BIG</strong>, even bloated. Some rely on other external libraries. Many were designed by academics for academics, and so are not really suitable for commercial use. Many are otherwise excellent, but not written in our favorite language.</p>
-<p>The Apache Milagro Crypto Library (AMCL) is different; AMCL is completely self-contained, except for the requirement for an external entropy source for random number generation.</p>
-<p>AMCL is portable - there is no assembly language. The original version is written in C, Java, Javascript, Go and Swift using only generic programming constructs, but AMCL is truly multi-lingual, as compatible  versions will be available in many other languages. These versions will be identical in that for the same inputs they will not only produce the same outputs, but all internal calculations will also be the same.</p>
-<p>AMCL is fast, but does not attempt to set speed records (a particular academic obsession). There are of course contexts where speed is of the essence; for example for a server farm which must handle multiple SSL connections, and where a 10% speed increase implies the need for 10% less servers, with a a 10% saving on electricity. But in the Internet of Things we would suggest that this is less important. In general the speed is expected to be &quot;good enough&quot;. However AMCL is small. Some libraries boast of having hundreds of thousands of lines of code - AMCL has less than 10,000. AMCL takes up the minimum of ROM/RAM resources in order to fit into the smallest possible embedded footprint, consistent with other design constraints. It is expected that this will be vital for implementations that support security in the Internet of Things. AMCL (the C version) only uses stack memory, and is thus natively multi-threaded.</p>
-<p>The C version of AMCL is configured at compile time for 16, 32 or 64 bit processors, and for a specific elliptic curve. The Java and Javascript versions are (obviously) processor agnostic, but the same choices of elliptic curve are available.</p>
-<p>AMCL is written with an awareness of the abilities of modern pipelined processors. In particular there was an awareness that the unpredictable program branch should be avoided at all costs, not only as it slows down the processor, but as it may open the door to side-channel attacks. The innocuous looking <code>if</code> statement - unless its outcome can be accurately predicted - is the enemy of quality crypto software.</p>
-<p>In the sequel we refer to the C version of AMCL, unless otherwise specified. We emphasis that all AMCL versions are completely self-contained. No external libraries or packages are required to implement all of the supported cryptographic functionality (other than for an external entropy source).</p>
-<h2><a class="anchor" aria-hidden="true" id="library-structure"></a><a href="#library-structure" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Library Structure</h2>
-<p>The modules that make up AMCL are shown below, with some indication of how they interact. Several example APIs will be provided to implement common protocols. Note that all interaction with the API is via machine-independent endian-indifferent arrays of bytes (a.k.a. octet strings). Therefore the underlying workings of the library are invisible to the consumer of its services.</p>
-<p><img src="/img/clint.eps.jpg" alt="client"></p>
-<figure>
-  <caption><strong>Figure 1.</strong> AMCL Library  </caption>
-</figure>
-<h2><a class="anchor" aria-hidden="true" id="handling-big-numbers"></a><a href="#handling-big-numbers" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Handling <strong>BIG</strong> Numbers</h2>
-<h3><a class="anchor" aria-hidden="true" id="representation"></a><a href="#representation" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Representation</h3>
-<p>One of the major design decisions is how to represent the 256-bit field elements required for the elliptic curve and pairing-based cryptography. Here there are two different approaches.</p>
-<p>One is to pack the bits as tightly as possible into computer words. For example on a 64-bit computer 256-bit numbers can be stored in just 4 words. However to manipulate numbers in this form, even for simple addition, requires handling of carry bits if overflow is to be avoided, and a high-level language does not have direct access to carry flags. It is possible to emulate the flags, but this would be inefficient. In fact this approach is only really suitable for an assembly language implementation.</p>
-<p>The alternative idea is to use extra words for the representation, and then try to offset the additional cost by taking full advantage of the &quot;spare&quot; bits in every word. This idea follows a &quot;corner of the literature&quot;<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup> which has been promoted by Bernstein and his collaborators in several publications. Refer to Figure 2, where each digit of the representation is stored as a signed integer which is the size of the processor word-length.</p>
-<p>Note that almost all arithmetic takes place modulo a 256-bit prime number, the modulus representing the field over which the elliptic curve is defined, here denoted as \( p \).</p>
-<p>On 64-bit processors, AMCL represents numbers to the base \( 2^{56} \) in a 5 element array, the Word Excess is 7 bits, and for a 256-bit modulus the Field Excess is 24 bits.</p>
-<p>On 32-bit processors, AMCL represents numbers to the base \( 2^{29} \) in a 9 element array, the Word Excess is 2 bits, and for a 256-bit modulus the Field Excess is 5 bits.</p>
-<p>On 16-bit processors, AMCL represents numbers to the base \( 2^{13} \) in a 20 element array, the Word Excess is 2 bits, and for a 256-bit modulus the Field Excess is 4 bits.</p>
-<p>Such a representation of a 256-bit number is referred to as a <strong>BIG</strong>. Addition or subtraction of a pair of <strong>BIG</strong>s, results in another <strong>BIG</strong>.</p>
-<p>The Java version uses exactly the same 32-bit representation as above.</p>
-<p>For Javascript (where all numbers are stored as 64-bit floating point with a 52-bit mantissa, but mostly manipulated as 32-bit integers), numbers are represented to the base \( 2^{24} \) in an 11 element array, the Word Excess is 7 bits, and the Field Excess for a 256-bit modulus is 8 bits.</p>
-<h3><a class="anchor" aria-hidden="true" id="addition-and-subtraction"></a><a href="#addition-and-subtraction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Addition and Subtraction</h3>
-<p>The existence of a word excess means for example that multiple field elements can be added together digit by digit, without processing of carries, before overflow can occur.</p>
-<p>Only occasionally will there be a requirement to <em>normalize</em> these <em>extended</em> values, that is to force them back into the original format. Note that this is independent of the modulus.</p>
-<p>The existence of a field excess means that, independent of the word excess, multiple field elements can be added together before it is required to reduce the sum with respect to the modulus. In the literature this is referred to as lazy, or delayed, reduction. In fact we allow the modulus to be as small as 254 bits, which obviously increases the field excess.</p>
-<p>Note that these two mechanisms associated with the word excess and the field excess (often confused in the literature) operate largely independently of each other.</p>
-<p>AMCL has no support for negative numbers. Therefore subtraction will be implemented as field negation followed by addition. However a field element \( x \) can be negated by simply calculating \( −x = e.p − x \), where \( e \) is the current excess associated with \( x \). Therefore subtraction will be implemented as field negation followed by addition. In practice it is more convenient to round \( e \) up to next highest power of 2, in which case \( e.p \) can be calculated by a simple shift.</p>
-<p><img src="/img/words.eps.jpg" alt="client"></p>
-<figure>
-  <caption><strong>Figure 2.</strong> AMCL Library</caption>
-</figure>
-<br>
-Normalization of extended numbers requires the word excess of each digit to be shifted right by the number of base bits, and added to the next digit, working right to left. Note that when numbers are subtracted digit-by-digit individual digits may become negative. However since we are avoiding using the sign bit, due to the magic of 2's complement arithmetic, this all works fine without any conditional branches.
-<p>Final full reduction of unreduced field elements is carried out using a simple shift-and-subtract of the modulus, with one subtraction needed for every bit in the actual field excess. Such reductions will rarely be required, as they are slow and hard to do in constant time. Ideally it should only be required at the end of a complex operation like an elliptic curve point multiplication.</p>
-<p>So with careful programming we avoid any unpredictable program branches. Since the length of field elements is fixed at compile time, it is expected that the compiler will unroll most of the time-critical loops. In any case the conditional branch required at the foot of a fixed-size loop can be accurately predicted by modern hardware.</p>
-<p>Worst case field excesses are easy to calculate. If two elements \( a \) and \( b \) are to be added, and if their current field excesses are \( e_{a} \) and \( e_{b} \) respectively, then clearly their sum will have a worst-case field excess of \( e_{a}+e_{b} \). By careful programming and choice of number base, full reductions can be largely eliminated<sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup>.</p>
-<h3><a class="anchor" aria-hidden="true" id="multiplication-and-reduction"></a><a href="#multiplication-and-reduction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Multiplication and Reduction</h3>
-<p>To support multiplication of <strong>BIG</strong>s, we will require a double-length <strong><em>DBIG</em></strong> type. Also the partial products that arise in the process of long multiplication will require a double-length data type. Fortunately many popular C compilers, like Gnu GCC, always support an integer type that is double the native word-length. For Java the &quot;int&quot; type is 32-bits and there is a double-length &quot;long&quot; type which is 64-bit. Of course for Javascript a double length type is not possible, and so the partial products must be accommodated within the 52-bit mantissa.</p>
-<p>Multiprecision multiplication is performed column by column, propagating the carries, working from right-to-left, but using the fast method described in<sup class="footnote-ref"><a href="#fn3" id="fnref3">[3]</a></sup>. At the foot of each column the total is split into the sum for that column, and the carry to the next column. If the numbers are normalized prior to the multiplication, then with the word excesses that we have chosen, this will not result in overflow. The DBIG product will be automatically normalized as a result of this process. Squaring can be done in a similar fashion but at a slightly lower cost.</p>
-<p>The method used for full reduction of a <strong>DBIG</strong> back to a <strong>BIG</strong> depends on the form of the modulus. We choose to support three distinct types of modulus, (a) pseudo Mersenne of the form \( 2^n-c \) where \( c \) is small and $n$ is the size of the modulus in bits, (b) Montgomery-friendly of the form \( k.2^n-1 \), and (c) moduli of no special form. For cases (b) and (c) we convert all field elements to Montgomery's \( n \)-residue form, and use Montgomery's fast method for modular reduction.</p>
-<p>In all cases the <strong>DBIG</strong> number to be reduced \( y \) must be in the range \( 0&lt;y&lt;pR \) (a requirement of Montgomery's method), and the result \( x \) is guaranteed to be in the range \( 0&lt;x&lt;2p \) , where \( R=2^{256+FE} \) for a 256-bit modulus. Note that the <strong>BIG</strong> result will be (nearly) fully reduced. The fact than we allow \( x \) to be larger than \( p \) means that we can avoid the notorious Montgomery &quot;final subtraction&quot;. Independent of the method used for reduction, we have found that it is much easier to obtain reduction in constant time to a value less than \( 2p \), than a full reduction to less than \( p \).</p>
-<p>Observe how unreduced numbers involved in complex calculations tend to be (nearly fully) reduced if they are involved in a modular multiplication. So for example if field element \( x \) has a large field excess, and if we calculate \( x=x.y \), then as long as the unreduced product is less than \( pR \), the result will be a nearly fully reduced \( x \). So in many cases there is a natural tendency for field excesses not to grow without limit, and not to overflow, without requiring explicit action on our part.</p>
-<p>Consider now a sequence of code that adds, subtracts and multiplies field elements, as might arise in elliptic curve additions and doublings. Assume that the code has been analysed and that normalisation code has been inserted where needed. Assume that the reduction code that activates if there is a possibility of an element overflowing its field excess, while present, never in fact is triggered (due to the behaviour described above). Then we assert that once a program has initialised no unpredicted branches will occur during field arithmetic, and therefore the code will execute in constant time.</p>
-<h2><a class="anchor" aria-hidden="true" id="extension-field-arithmetic"></a><a href="#extension-field-arithmetic" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Extension Field arithmetic</h2>
-<p>To support cryptographic pairings we will need support for extension fields. We use a towering of extensions as required for BN curves and as required for higher security BLS curves. An element of the quadratic extension field will be represented as \( f=a+ib \), where \( i \) is the square root of the quadratic non-residue -1. To add, subtract and multiply them we use the obvious methods.</p>
-<p>However for negation we can construct \( -f=-a-ib \) as \( b-(a+b)+i.(a-(a+b) \) which requires only one base field negation. A similar idea can be used recursively for higher order extensions, so that only one base field negation is ever required.</p>
-<h2><a class="anchor" aria-hidden="true" id="elliptic-curves"></a><a href="#elliptic-curves" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Elliptic Curves</h2>
-<p>Three types of Elliptic curve are supported for the implementation of Elliptic Curve Cryptography (ECC), but curves are limited to popular families that support faster implementation. Weierstrass curves are supported using the Short Weierstrass representation:</p>
-<p>$$y^2=x^3+Ax+B$$</p>
-<p>where \( A=0 \) or \( A=-3 \). Edwards curves are supported using both regular and twisted Edwards format:</p>
-<p>$$Ax^2+y^2=1+Bx^2y^2$$</p>
-<p>where \( A=1 \) or \( A=-1 \). Montgomery curves are represented as:</p>
-<p>$$y^2=x^3+Ax^2+x$$</p>
-<p>where \( A \) must be small. As mentioned in the introduction, in all cases we use exception-free formulae if available, as this facilitates constant time imple- mentation, even if this invokes a significant performance penalty.</p>
-<p>In the particular case of elliptic curve point multiplication, there are potentially a myriad of very dangerous side-channel attacks that arise from using the classic double-and-add algorithm and its variants. Vulnerabilities arise if branches are taken that depend on secret bits, or if data is even accessed using secret values as indices. Many types of counter-measures have been suggested. The simplest solution is to use a constant-time algorithm like the Montgomery ladder, which has a very simple structure, uses very little  memory and has no key-bit-dependent branches.</p>
-<p>If using a Montgomery representation of the elliptic curve the Montgomery ladder is in fact the optimal algorithm for point multiplication. For other representations we use a fixed-sized signed window method.</p>
-<p>AMCL has built-in support for most standardised elliptic curves, along with many curves that have been proposed for standardisation. Specifically it supports the NIST256 curve, the well known Curve25519, the 256-bit Brain- pool curve, the ANSSI curve, and six NUMS (Nothing-Up-My-Sleeve) curves proposed by Bos et al. At higher levels of security the NIST384 and NIST521 curves are supported, also Curve41417 as well as the Goldilocks curve, and our own HiFive curve.
-Some of these proposals support only a Weierstrass representation, but many also allow an Edwards or Montgomery form. Tools are provided to allow easy integration of more curves.</p>
-<h2><a class="anchor" aria-hidden="true" id="support-for-classic-finite-field-methods"></a><a href="#support-for-classic-finite-field-methods" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Support for classic Finite Field Methods</h2>
-<p>Before Elliptic Curves, cryptography depended on methods based on simple finite fields. The most famous of these would be the well known RSA method. These methods have the advantage of being effectively parameterless, and therefore the issue of trust in parameters that arises for elliptic curves, is not an issue.</p>
-<p>However these methods are subject to index calculus based methods of cryptanalysis, and so fields and keys are typically much larger. So how to support for example a 2048-bit implementation of RSA based on a library designed for optimized 256-bit operations? The idea is simple; use AMCL as a virtual 256-bit machine, and build 2048-bit arithmetic on top of that.</p>
-<p>And to claw back some decent performance use the Karatsuba method so that for example 2048-bit multiplication recurses efficiently right down to 256-bit operations. Of course the downside of the Karatsuba method is that while it saves on multiplications, the number of additions and subtractions is greatly increased.  However the existence of generous word excesses in our representation makes this less of a problem, as most additions can be carried out without normalization.</p>
-<p>Secret key operations like RSA decryption use the Montgomery ladder to achieve side-channel-attack resistance.</p>
-<p>The implementation can currently support \( 1024.2^n \) bit fields, so for example 2048-bit RSA can be used to get reasonably close to the AES-128-bit level of security, and if desired 4096 bit RSA can be used to comfortably exceed it.</p>
-<p>Note that this code is supported independently of the elliptic curve code. So for example RSA and ECC can be run together within a single application.</p>
-<p>However we regard these methods as &quot;legacy&quot; as in our view ECC based methods are a much better fit for the IoT.</p>
-<h2><a class="anchor" aria-hidden="true" id="multi-lingual-support"></a><a href="#multi-lingual-support" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Multi-Lingual support</h2>
-<p>It is a <strong>BIG</strong> ask to develop and maintain multiple versions of a crypto library written in radically different languages such as C, Java, Javascript, Go and Swift. This has discouraged the use of language specific methods (which are in any case of little relevance here), and strongly encouraged the use of simple, generic computer language constructs.</p>
-<p>This approach brings a surprising bonus: AMCL can be automatically converted to many other languages using available translator tools. For example Tangible Software Solutions market a Java to C# converter. This generated an efficient fully functional C# version of AMCL within minutes. The same company market a Java to Visual Basic converter.</p>
-<p>Google have a Java to Objective C converter specifically designed to convert Android apps developed in Java, to iOS apps written in Objective C.</p>
-<p>Of course not all languages can be supported in this way, so support for some will be developed manually. In particular a Rust version is currently under development.</p>
-<h2><a class="anchor" aria-hidden="true" id="discussion"></a><a href="#discussion" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Discussion</h2>
-<p>We found in our code that, with few exceptions, reductions due to possible overflow of the field excess of a <strong>BIG</strong> were very rare, especially for the 64-bit version of the library. Similarly normalization was rarely needed for the 64-bit code. This is due to the much greater excesses that apply in the 64-bit representation. In some experiments we calculated thousands of random pairings, and reduction due to field excess overflow detection never happened.</p>
-<p>In general in developing AMCL we tried to use optimal methods, without going to what we (very subjectively) regarded as extremes in order to maximize performance.  Algorithms that require less memory were generally preferred if the impact on performance was not large. Some optimizations, while perfectly valid, are hard to implement without having a significant impact on program readability and maintainability. Deciding which optimizations to use and which to reject (on the grounds of code size and negative impact on code
-readability and maintainability) is admittedly rather arbitrary!</p>
-<p>One notable omission from AMCL is the use of pre-computation on fixed parameters in order to speed up certain calculations. We try to justify this, rather unconvincingly, by pointing out that pre-computation must of necessity increase code size. Furthermore such methods are more sensitive to side-channel attacks and much of their speed advantage will be lost if they are to be fully side-channel protected. Also pre-computation on secret values clearly increases the amount of secret data that needs to be protected.</p>
-<p>However the development roadmap view might change in later versions depending on the project supporters in-the-field experiences of using AMCL.</p>
-<hr>
-
-    <div class="admonition admonition-note">
-      <div class="admonition-heading">
-        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="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"/></svg></div>  See an error in this documentation?</h5>
-      </div>
-      <div class="admonition-content">
-    <p>Submit a pull request on the development branch of <a href="https://github.com/apache/incubator-milagro">Milagro Website Repo</a>.</p>
-</div></div><!--
-Supported admonition types are: caution, note, important, tip, warning.
---><hr class="footnotes-sep">
-<section class="footnotes">
-<ol class="footnotes-list">
-<li id="fn1"  class="footnote-item"><p><a href="http://eprint.iacr.org/2014/526">Curve41417 Karatsuba revisited</a> <a href="#fnref1" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn2"  class="footnote-item"><p><a href="http://eprint.iacr.org/2017/437">Slothful Reduction</a> <a href="#fnref2" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn3"  class="footnote-item"><p><a href="http://eprint.iacr.org/2015/1247">Missing a trick: Karatsuba variations</a> <a href="#fnref3" class="footnote-backref">↩</a></p>
-</li>
-</ol>
-</section>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/milagro-design"><span class="arrow-prev">← </span><span>Milagro Design</span></a><a class="docs-next button" href="/docs/amcl-c-api-2.0.0"><span>AMCL C API 2.0.0</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#introduction">Introduction</a></li><li><a href="#library-structure">Library Structure</a></li><li><a href="#handling-big-numbers">Handling <strong>BIG</strong> Numbers</a><ul class="toc-headings"><li><a href="#representation">Representation</a></li><li><a href="#addition-and-subtraction">Addition and Subtraction</a></li><li><a href="#multiplication-and-reduction">Multiplication and Reduction</a></li></ul></li><li><a href="#extension-field-arithmetic">Extension Field arithmetic</a></li><li><a href="#elliptic-curves">Elliptic Curves</a></li><li><a href="#support-for-classic-finite-field-methods">Support for classic Finite Field Methods</a></li><li><a href="#multi-lingual-support">Multi-Lingual support</a></li><li><a href="#discussion">Discussion</a></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/amcl-overview">AMCL Library</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/amcl-overview">AMCL Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API 1.0.0</a></div></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL Library</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">AMCL Overview</span><meta itemprop="position" content="2"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Apache Milagro Crypto Library (AMCL)</h1></header><h2 class="anchor anchorWithStickyNavbar_LWe7" id="introduction">Introduction<a class="hash-link" href="#introduction" title="Direct link to heading">​</a></h2><p>One of the major mysteries in the real-world of crypto is resistance to the exploitation of new research ideas. Its not that cryptographic research has failed to throw up new ideas that have the potential for commercial exploitation -- far from it. But in the real-world, 1970&#x27;s crypto rules supreme, and very little happens that isn&#x27;t PKI/RSA based. The reasons for this are many and varied. However one part of the puzzle might be the non-availability of easy-to-use open source cryptographic tools, that do not require in depth cryptographic expertise to deploy.</p><p>There are many crypto libraries out there. Many offer a bewildering variety of cryptographic primitives, at different levels of security. Many use extensive assembly language in order to be as fast as possible. Many are very <strong>BIG</strong>, even bloated. Some rely on other external libraries. Many were designed by academics for academics, and so are not really suitable for commercial use. Many are otherwise excellent, but not written in our favorite language.</p><p>The Apache Milagro Crypto Library (AMCL) is different; AMCL is completely self-contained, except for the requirement for an external entropy source for random number generation.</p><p>AMCL is portable - there is no assembly language. The original version is written in C, Java, Javascript, Go and Swift using only generic programming constructs, but AMCL is truly multi-lingual, as compatible  versions will be available in many other languages. These versions will be identical in that for the same inputs they will not only produce the same outputs, but all internal calculations will also be the same.</p><p>AMCL is fast, but does not attempt to set speed records (a particular academic obsession). There are of course contexts where speed is of the essence; for example for a server farm which must handle multiple SSL connections, and where a 10% speed increase implies the need for 10% less servers, with a a 10% saving on electricity. But in the Internet of Things we would suggest that this is less important. In general the speed is expected to be &quot;good enough&quot;. However AMCL is small. Some libraries boast of having hundreds of thousands of lines of code - AMCL has less than 10,000. AMCL takes up the minimum of ROM/RAM resources in order to fit into the smallest possible embedded footprint, consistent with other design constraints. It is expected that this will be vital for implementations that support security in the Internet of Things. AMCL (the C version) only uses stack memory, and is thus natively multi-threaded.</p><p>The C version of AMCL is configured at compile time for 16, 32 or 64 bit processors, and for a specific elliptic curve. The Java and Javascript versions are (obviously) processor agnostic, but the same choices of elliptic curve are available.</p><p>AMCL is written with an awareness of the abilities of modern pipelined processors. In particular there was an awareness that the unpredictable program branch should be avoided at all costs, not only as it slows down the processor, but as it may open the door to side-channel attacks. The innocuous looking <code>if</code> statement - unless its outcome can be accurately predicted - is the enemy of quality crypto software.</p><p>In the sequel we refer to the C version of AMCL, unless otherwise specified. We emphasis that all AMCL versions are completely self-contained. No external libraries or packages are required to implement all of the supported cryptographic functionality (other than for an external entropy source).</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="library-structure">Library Structure<a class="hash-link" href="#library-structure" title="Direct link to heading">​</a></h2><p>The modules that make up AMCL are shown below, with some indication of how they interact. Several example APIs will be provided to implement common protocols. Note that all interaction with the API is via machine-independent endian-indifferent arrays of bytes (a.k.a. octet strings). Therefore the underlying workings of the library are invisible to the consumer of its services.</p><p><img loading="lazy" alt="client" src="/assets/images/clint.eps-f86b0b1b33fb4f1bde48330c4fa8db8a.jpg" width="9242" height="6167" class="img_ev3q"></p><figure><strong>Figure 1.</strong> AMCL Library</figure><h2 class="anchor anchorWithStickyNavbar_LWe7" id="handling-big-numbers">Handling <strong>BIG</strong> Numbers<a class="hash-link" href="#handling-big-numbers" title="Direct link to heading">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="representation">Representation<a class="hash-link" href="#representation" title="Direct link to heading">​</a></h3><p>One of the major design decisions is how to represent the 256-bit field elements required for the elliptic curve and pairing-based cryptography. Here there are two different approaches.</p><p>One is to pack the bits as tightly as possible into computer words. For example on a 64-bit computer 256-bit numbers can be stored in just 4 words. However to manipulate numbers in this form, even for simple addition, requires handling of carry bits if overflow is to be avoided, and a high-level language does not have direct access to carry flags. It is possible to emulate the flags, but this would be inefficient. In fact this approach is only really suitable for an assembly language implementation.</p><p>The alternative idea is to use extra words for the representation, and then try to offset the additional cost by taking full advantage of the &quot;spare&quot; bits in every word. This idea follows a &quot;corner of the literature&quot;<sup id="fnref-first"><a href="#fn-first" class="footnote-ref">first</a></sup> which has been promoted by Bernstein and his collaborators in several publications. Refer to Figure 2, where each digit of the representation is stored as a signed integer which is the size of the processor word-length.</p><p>Note that almost all arithmetic takes place modulo a 256-bit prime number, the modulus representing the field over which the elliptic curve is defined, here denoted as <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi></mrow><annotation encoding="application/x-tex">p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em"></span><span class="mord mathnormal">p</span></span></span></span></span>.</p><p>On 64-bit processors, AMCL represents numbers to the base <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>56</mn></msup></mrow><annotation encoding="application/x-tex">2^{56}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">56</span></span></span></span></span></span></span></span></span></span></span></span></span> in a 5 element array, the Word Excess is 7 bits, and for a 256-bit modulus the Field Excess is 24 bits.</p><p>On 32-bit processors, AMCL represents numbers to the base <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>29</mn></msup></mrow><annotation encoding="application/x-tex">2^{29}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">29</span></span></span></span></span></span></span></span></span></span></span></span></span> in a 9 element array, the Word Excess is 2 bits, and for a 256-bit modulus the Field Excess is 5 bits.</p><p>On 16-bit processors, AMCL represents numbers to the base <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>13</mn></msup></mrow><annotation encoding="application/x-tex">2^{13}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">13</span></span></span></span></span></span></span></span></span></span></span></span></span> in a 20 element array, the Word Excess is 2 bits, and for a 256-bit modulus the Field Excess is 4 bits.</p><p>Such a representation of a 256-bit number is referred to as a <strong>BIG</strong>. Addition or subtraction of a pair of <strong>BIG</strong>s, results in another <strong>BIG</strong>.</p><p>The Java version uses exactly the same 32-bit representation as above.</p><p>For Javascript (where all numbers are stored as 64-bit floating point with a 52-bit mantissa, but mostly manipulated as 32-bit integers), numbers are represented to the base <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mn>24</mn></msup></mrow><annotation encoding="application/x-tex">2^{24}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8141em"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">24</span></span></span></span></span></span></span></span></span></span></span></span></span> in an 11 element array, the Word Excess is 7 bits, and the Field Excess for a 256-bit modulus is 8 bits.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="addition-and-subtraction">Addition and Subtraction<a class="hash-link" href="#addition-and-subtraction" title="Direct link to heading">​</a></h3><p>The existence of a word excess means for example that multiple field elements can be added together digit by digit, without processing of carries, before overflow can occur.</p><p>Only occasionally will there be a requirement to <em>normalize</em> these <em>extended</em> values, that is to force them back into the original format. Note that this is independent of the modulus.</p><p>The existence of a field excess means that, independent of the word excess, multiple field elements can be added together before it is required to reduce the sum with respect to the modulus. In the literature this is referred to as lazy, or delayed, reduction. In fact we allow the modulus to be as small as 254 bits, which obviously increases the field excess.</p><p>Note that these two mechanisms associated with the word excess and the field excess (often confused in the literature) operate largely independently of each other.</p><p>AMCL has no support for negative numbers. Therefore subtraction will be implemented as field negation followed by addition. However a field element <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal">x</span></span></span></span></span> can be negated by simply calculating <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>−</mo><mi>x</mi><mo>=</mo><mi>e</mi><mi mathvariant="normal">.</mi><mi>p</mi><mo>−</mo><mi>x</mi></mrow><annotation encoding="application/x-tex">−x = e.p − x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em"></span><span class="mord">−</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.7778em;vertical-align:-0.1944em"></span><span class="mord mathnormal">e</span><span class="mord">.</span><span class="mord mathnormal">p</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal">x</span></span></span></span></span>, where <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>e</mi></mrow><annotation encoding="application/x-tex">e</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal">e</span></span></span></span></span> is the current excess associated with <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal">x</span></span></span></span></span>. Therefore subtraction will be implemented as field negation followed by addition. In practice it is more convenient to round <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>e</mi></mrow><annotation encoding="application/x-tex">e</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal">e</span></span></span></span></span> up to next highest power of 2, in which case <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>e</mi><mi mathvariant="normal">.</mi><mi>p</mi></mrow><annotation encoding="application/x-tex">e.p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em"></span><span class="mord mathnormal">e</span><span class="mord">.</span><span class="mord mathnormal">p</span></span></span></span></span> can be calculated by a simple shift.</p><p><img loading="lazy" alt="client" src="/assets/images/words.eps-5a2c0be3376e91f68e1b4abf760f24bb.jpg" width="8050" height="2075" class="img_ev3q"></p><figure><strong>Figure 2.</strong> AMCL Library</figure><br>Normalization of extended numbers requires the word excess of each digit to be shifted right by the number of base bits, and added to the next digit, working right to left. Note that when numbers are subtracted digit-by-digit individual digits may become negative. However since we are avoiding using the sign bit, due to the magic of 2&#x27;s complement arithmetic, this all works fine without any conditional branches.<p>Final full reduction of unreduced field elements is carried out using a simple shift-and-subtract of the modulus, with one subtraction needed for every bit in the actual field excess. Such reductions will rarely be required, as they are slow and hard to do in constant time. Ideally it should only be required at the end of a complex operation like an elliptic curve point multiplication. </p><p>So with careful programming we avoid any unpredictable program branches. Since the length of field elements is fixed at compile time, it is expected that the compiler will unroll most of the time-critical loops. In any case the conditional branch required at the foot of a fixed-size loop can be accurately predicted by modern hardware.</p><p>Worst case field excesses are easy to calculate. If two elements <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>a</mi></mrow><annotation encoding="application/x-tex">a</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal">a</span></span></span></span></span> and <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>b</mi></mrow><annotation encoding="application/x-tex">b</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em"></span><span class="mord mathnormal">b</span></span></span></span></span> are to be added, and if their current field excesses are <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>e</mi><mi>a</mi></msub></mrow><annotation encoding="application/x-tex">e_{a}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal">e</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></span> and <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>e</mi><mi>b</mi></msub></mrow><annotation encoding="application/x-tex">e_{b}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal">e</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></span> respectively, then clearly their sum will have a worst-case field excess of <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>e</mi><mi>a</mi></msub><mo>+</mo><msub><mi>e</mi><mi>b</mi></msub></mrow><annotation encoding="application/x-tex">e_{a}+e_{b}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal">e</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal">e</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">b</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></span>. By careful programming and choice of number base, full reductions can be largely eliminated<sup id="fnref-second"><a href="#fn-second" class="footnote-ref">second</a></sup>.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="multiplication-and-reduction">Multiplication and Reduction<a class="hash-link" href="#multiplication-and-reduction" title="Direct link to heading">​</a></h3><p>To support multiplication of <strong>BIG</strong>s, we will require a double-length <strong><em>DBIG</em></strong> type. Also the partial products that arise in the process of long multiplication will require a double-length data type. Fortunately many popular C compilers, like Gnu GCC, always support an integer type that is double the native word-length. For Java the &quot;int&quot; type is 32-bits and there is a double-length &quot;long&quot; type which is 64-bit. Of course for Javascript a double length type is not possible, and so the partial products must be accommodated within the 52-bit mantissa.</p><p>Multiprecision multiplication is performed column by column, propagating the carries, working from right-to-left, but using the fast method described in<sup id="fnref-third"><a href="#fn-third" class="footnote-ref">third</a></sup>. At the foot of each column the total is split into the sum for that column, and the carry to the next column. If the numbers are normalized prior to the multiplication, then with the word excesses that we have chosen, this will not result in overflow. The DBIG product will be automatically normalized as a result of this process. Squaring can be done in a similar fashion but at a slightly lower cost.</p><p>The method used for full reduction of a <strong>DBIG</strong> back to a <strong>BIG</strong> depends on the form of the modulus. We choose to support three distinct types of modulus, (a) pseudo Mersenne of the form <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>2</mn><mi>n</mi></msup><mo>−</mo><mi>c</mi></mrow><annotation encoding="application/x-tex">2^n-c</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7477em;vertical-align:-0.0833em"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6644em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal">c</span></span></span></span></span> where <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>c</mi></mrow><annotation encoding="application/x-tex">c</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal">c</span></span></span></span></span> is small and <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal">n</span></span></span></span></span> is the size of the modulus in bits, (b) Montgomery-friendly of the form <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi><mi mathvariant="normal">.</mi><msup><mn>2</mn><mi>n</mi></msup><mo>−</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">k.2^n-1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7778em;vertical-align:-0.0833em"></span><span class="mord mathnormal" style="margin-right:0.03148em">k</span><span class="mord">.</span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6644em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:0.6444em"></span><span class="mord">1</span></span></span></span></span>, and (c) moduli of no special form. For cases (b) and (c) we convert all field elements to Montgomery&#x27;s <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal">n</span></span></span></span></span>-residue form, and use Montgomery&#x27;s fast method for modular reduction.</p><p>In all cases the <strong>DBIG</strong> number to be reduced <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>y</mi></mrow><annotation encoding="application/x-tex">y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em"></span><span class="mord mathnormal" style="margin-right:0.03588em">y</span></span></span></span></span> must be in the range <span class="math math-inline"><span class="katex-error" title="ParseError: KaTeX parse error: Expected &#x27;EOF&#x27;, got &#x27;&amp;&#x27; at position 2: 0&amp;̲lt;y&amp;lt;pR" style="color:#cc0000">0&amp;lt;y&amp;lt;pR</span></span> (a requirement of Montgomery&#x27;s method), and the result <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal">x</span></span></span></span></span> is guaranteed to be in the range <span class="math math-inline"><span class="katex-error" title="ParseError: KaTeX parse error: Expected &#x27;EOF&#x27;, got &#x27;&amp;&#x27; at position 2: 0&amp;̲lt;x&amp;lt;2p" style="color:#cc0000">0&amp;lt;x&amp;lt;2p</span></span> , where <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>R</mi><mo>=</mo><msup><mn>2</mn><mrow><mn>256</mn><mo>+</mo><mi>F</mi><mi>E</mi></mrow></msup></mrow><annotation encoding="application/x-tex">R=2^{256+FE}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.00773em">R</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.8413em"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8413em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">256</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight" style="margin-right:0.05764em">FE</span></span></span></span></span></span></span></span></span></span></span></span></span> for a 256-bit modulus. Note that the <strong>BIG</strong> result will be (nearly) fully reduced. The fact than we allow <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal">x</span></span></span></span></span> to be larger than <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi></mrow><annotation encoding="application/x-tex">p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em"></span><span class="mord mathnormal">p</span></span></span></span></span> means that we can avoid the notorious Montgomery &quot;final subtraction&quot;. Independent of the method used for reduction, we have found that it is much easier to obtain reduction in constant time to a value less than <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>2</mn><mi>p</mi></mrow><annotation encoding="application/x-tex">2p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8389em;vertical-align:-0.1944em"></span><span class="mord">2</span><span class="mord mathnormal">p</span></span></span></span></span>, than a full reduction to less than <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi></mrow><annotation encoding="application/x-tex">p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em"></span><span class="mord mathnormal">p</span></span></span></span></span>.</p><p>Observe how unreduced numbers involved in complex calculations tend to be (nearly fully) reduced if they are involved in a modular multiplication. So for example if field element <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal">x</span></span></span></span></span> has a large field excess, and if we calculate <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>=</mo><mi>x</mi><mi mathvariant="normal">.</mi><mi>y</mi></mrow><annotation encoding="application/x-tex">x=x.y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em"></span><span class="mord mathnormal">x</span><span class="mord">.</span><span class="mord mathnormal" style="margin-right:0.03588em">y</span></span></span></span></span>, then as long as the unreduced product is less than <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi><mi>R</mi></mrow><annotation encoding="application/x-tex">pR</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8778em;vertical-align:-0.1944em"></span><span class="mord mathnormal" style="margin-right:0.00773em">pR</span></span></span></span></span>, the result will be a nearly fully reduced <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi></mrow><annotation encoding="application/x-tex">x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal">x</span></span></span></span></span>. So in many cases there is a natural tendency for field excesses not to grow without limit, and not to overflow, without requiring explicit action on our part.</p><p>Consider now a sequence of code that adds, subtracts and multiplies field elements, as might arise in elliptic curve additions and doublings. Assume that the code has been analysed and that normalisation code has been inserted where needed. Assume that the reduction code that activates if there is a possibility of an element overflowing its field excess, while present, never in fact is triggered (due to the behaviour described above). Then we assert that once a program has initialised no unpredicted branches will occur during field arithmetic, and therefore the code will execute in constant time.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="extension-field-arithmetic">Extension Field arithmetic<a class="hash-link" href="#extension-field-arithmetic" title="Direct link to heading">​</a></h2><p>To support cryptographic pairings we will need support for extension fields. We use a towering of extensions as required for BN curves and as required for higher security BLS curves. An element of the quadratic extension field will be represented as <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi><mo>=</mo><mi>a</mi><mo>+</mo><mi>i</mi><mi>b</mi></mrow><annotation encoding="application/x-tex">f=a+ib</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em"></span><span class="mord mathnormal" style="margin-right:0.10764em">f</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em"></span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:0.6944em"></span><span class="mord mathnormal">ib</span></span></span></span></span>, where <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em"></span><span class="mord mathnormal">i</span></span></span></span></span> is the square root of the quadratic non-residue -1. To add, subtract and multiply them we use the obvious methods.</p><p>However for negation we can construct <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>−</mo><mi>f</mi><mo>=</mo><mo>−</mo><mi>a</mi><mo>−</mo><mi>i</mi><mi>b</mi></mrow><annotation encoding="application/x-tex">-f=-a-ib</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em"></span><span class="mord">−</span><span class="mord mathnormal" style="margin-right:0.10764em">f</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.6667em;vertical-align:-0.0833em"></span><span class="mord">−</span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:0.6944em"></span><span class="mord mathnormal">ib</span></span></span></span></span> as <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>b</mi><mo>−</mo><mo stretchy="false">(</mo><mi>a</mi><mo>+</mo><mi>b</mi><mo stretchy="false">)</mo><mo>+</mo><mi>i</mi><mi mathvariant="normal">.</mi><mo stretchy="false">(</mo><mi>a</mi><mo>−</mo><mo stretchy="false">(</mo><mi>a</mi><mo>+</mo><mi>b</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">b-(a+b)+i.(a-(a+b)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7778em;vertical-align:-0.0833em"></span><span class="mord mathnormal">b</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal">b</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal">i</span><span class="mord">.</span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal">b</span><span class="mclose">)</span></span></span></span></span> which requires only one base field negation. A similar idea can be used recursively for higher order extensions, so that only one base field negation is ever required.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="elliptic-curves">Elliptic Curves<a class="hash-link" href="#elliptic-curves" title="Direct link to heading">​</a></h2><p>Three types of Elliptic curve are supported for the implementation of Elliptic Curve Cryptography (ECC), but curves are limited to popular families that support faster implementation. Weierstrass curves are supported using the Short Weierstrass representation:</p><p><span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>y</mi><mn>2</mn></msup><mo>=</mo><msup><mi>x</mi><mn>3</mn></msup><mo>+</mo><mi>A</mi><mi>x</mi><mo>+</mo><mi>B</mi></mrow><annotation encoding="application/x-tex">y^2=x^3+Ax+B</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0085em;vertical-align:-0.1944em"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.8974em;vertical-align:-0.0833em"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:0.7667em;vertical-align:-0.0833em"></span><span class="mord mathnormal">A</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.05017em">B</span></span></span></span></span></p><p>where <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>A</mi><mo>=</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">A=0</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal">A</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.6444em"></span><span class="mord">0</span></span></span></span></span> or <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>A</mi><mo>=</mo><mo>−</mo><mn>3</mn></mrow><annotation encoding="application/x-tex">A=-3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal">A</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em"></span><span class="mord">−</span><span class="mord">3</span></span></span></span></span>. Edwards curves are supported using both regular and twisted Edwards format:</p><p><span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>A</mi><msup><mi>x</mi><mn>2</mn></msup><mo>+</mo><msup><mi>y</mi><mn>2</mn></msup><mo>=</mo><mn>1</mn><mo>+</mo><mi>B</mi><msup><mi>x</mi><mn>2</mn></msup><msup><mi>y</mi><mn>2</mn></msup></mrow><annotation encoding="application/x-tex">Ax^2+y^2=1+Bx^2y^2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8974em;vertical-align:-0.0833em"></span><span class="mord mathnormal">A</span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:1.0085em;vertical-align:-0.1944em"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em"></span><span class="mord">1</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:1.0085em;vertical-align:-0.1944em"></span><span class="mord mathnormal" style="margin-right:0.05017em">B</span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span></p><p>where <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>A</mi><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">A=1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal">A</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.6444em"></span><span class="mord">1</span></span></span></span></span> or <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>A</mi><mo>=</mo><mo>−</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">A=-1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal">A</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em"></span><span class="mord">−</span><span class="mord">1</span></span></span></span></span>. Montgomery curves are represented as:</p><p><span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>y</mi><mn>2</mn></msup><mo>=</mo><msup><mi>x</mi><mn>3</mn></msup><mo>+</mo><mi>A</mi><msup><mi>x</mi><mn>2</mn></msup><mo>+</mo><mi>x</mi></mrow><annotation encoding="application/x-tex">y^2=x^3+Ax^2+x</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0085em;vertical-align:-0.1944em"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em">y</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.8974em;vertical-align:-0.0833em"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:0.8974em;vertical-align:-0.0833em"></span><span class="mord mathnormal">A</span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal">x</span></span></span></span></span></p><p>where <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>A</mi></mrow><annotation encoding="application/x-tex">A</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal">A</span></span></span></span></span> must be small. As mentioned in the introduction, in all cases we use exception-free formulae if available, as this facilitates constant time imple- mentation, even if this invokes a significant performance penalty.</p><p>In the particular case of elliptic curve point multiplication, there are potentially a myriad of very dangerous side-channel attacks that arise from using the classic double-and-add algorithm and its variants. Vulnerabilities arise if branches are taken that depend on secret bits, or if data is even accessed using secret values as indices. Many types of counter-measures have been suggested. The simplest solution is to use a constant-time algorithm like the Montgomery ladder, which has a very simple structure, uses very little  memory and has no key-bit-dependent branches.</p><p>If using a Montgomery representation of the elliptic curve the Montgomery ladder is in fact the optimal algorithm for point multiplication. For other representations we use a fixed-sized signed window method. </p><p>AMCL has built-in support for most standardised elliptic curves, along with many curves that have been proposed for standardisation. Specifically it supports the NIST256 curve, the well known Curve25519, the 256-bit Brain- pool curve, the ANSSI curve, and six NUMS (Nothing-Up-My-Sleeve) curves proposed by Bos et al. At higher levels of security the NIST384 and NIST521 curves are supported, also Curve41417 as well as the Goldilocks curve, and our own HiFive curve.
+Some of these proposals support only a Weierstrass representation, but many also allow an Edwards or Montgomery form. Tools are provided to allow easy integration of more curves.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="support-for-classic-finite-field-methods">Support for classic Finite Field Methods<a class="hash-link" href="#support-for-classic-finite-field-methods" title="Direct link to heading">​</a></h2><p>Before Elliptic Curves, cryptography depended on methods based on simple finite fields. The most famous of these would be the well known RSA method. These methods have the advantage of being effectively parameterless, and therefore the issue of trust in parameters that arises for elliptic curves, is not an issue.</p><p>However these methods are subject to index calculus based methods of cryptanalysis, and so fields and keys are typically much larger. So how to support for example a 2048-bit implementation of RSA based on a library designed for optimized 256-bit operations? The idea is simple; use AMCL as a virtual 256-bit machine, and build 2048-bit arithmetic on top of that.</p><p>And to claw back some decent performance use the Karatsuba method so that for example 2048-bit multiplication recurses efficiently right down to 256-bit operations. Of course the downside of the Karatsuba method is that while it saves on multiplications, the number of additions and subtractions is greatly increased.  However the existence of generous word excesses in our representation makes this less of a problem, as most additions can be carried out without normalization.</p><p>Secret key operations like RSA decryption use the Montgomery ladder to achieve side-channel-attack resistance.</p><p>The implementation can currently support <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mn>1024.</mn><msup><mn>2</mn><mi>n</mi></msup></mrow><annotation encoding="application/x-tex">1024.2^n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6644em"></span><span class="mord">1024.</span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6644em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span></span></span></span></span> bit fields, so for example 2048-bit RSA can be used to get reasonably close to the AES-128-bit level of security, and if desired 4096 bit RSA can be used to comfortably exceed it.</p><p>Note that this code is supported independently of the elliptic curve code. So for example RSA and ECC can be run together within a single application.</p><p>However we regard these methods as &quot;legacy&quot; as in our view ECC based methods are a much better fit for the IoT.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="multi-lingual-support">Multi-Lingual support<a class="hash-link" href="#multi-lingual-support" title="Direct link to heading">​</a></h2><p>It is a <strong>BIG</strong> ask to develop and maintain multiple versions of a crypto library written in radically different languages such as C, Java, Javascript, Go and Swift. This has discouraged the use of language specific methods (which are in any case of little relevance here), and strongly encouraged the use of simple, generic computer language constructs.</p><p>This approach brings a surprising bonus: AMCL can be automatically converted to many other languages using available translator tools. For example Tangible Software Solutions market a Java to C# converter. This generated an efficient fully functional C# version of AMCL within minutes. The same company market a Java to Visual Basic converter.</p><p>Google have a Java to Objective C converter specifically designed to convert Android apps developed in Java, to iOS apps written in Objective C.</p><p>Of course not all languages can be supported in this way, so support for some will be developed manually. In particular a Rust version is currently under development.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="discussion">Discussion<a class="hash-link" href="#discussion" title="Direct link to heading">​</a></h2><p>We found in our code that, with few exceptions, reductions due to possible overflow of the field excess of a <strong>BIG</strong> were very rare, especially for the 64-bit version of the library. Similarly normalization was rarely needed for the 64-bit code. This is due to the much greater excesses that apply in the 64-bit representation. In some experiments we calculated thousands of random pairings, and reduction due to field excess overflow detection never happened.</p><p>In general in developing AMCL we tried to use optimal methods, without going to what we (very subjectively) regarded as extremes in order to maximize performance.  Algorithms that require less memory were generally preferred if the impact on performance was not large. Some optimizations, while perfectly valid, are hard to implement without having a significant impact on program readability and maintainability. Deciding which optimizations to use and which to reject (on the grounds of code size and negative impact on code
+readability and maintainability) is admittedly rather arbitrary!</p><p>One notable omission from AMCL is the use of pre-computation on fixed parameters in order to speed up certain calculations. We try to justify this, rather unconvincingly, by pointing out that pre-computation must of necessity increase code size. Furthermore such methods are more sensitive to side-channel attacks and much of their speed advantage will be lost if they are to be fully side-channel protected. Also pre-computation on secret values clearly increases the amount of secret data that needs to be protected.</p><p>However the development roadmap view might change in later versions depending on the project supporters in-the-field experiences of using AMCL.</p><hr><div class="theme-admonition theme-admonition-note alert alert--secondary admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="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"></path></svg></span>See an error in this documentation? </div><div class="admonitionContent_S0QG"><p>Submit a pull request on the development branch of <a href="https://github.com/apache/incubator-milagro" target="_blank" rel="noopener noreferrer">Milagro Website Repo</a>.</p></div></div><p>Supported admonition types are: caution, note, important, tip, warning.</p><div class="footnotes"><hr><ol><li id="fn-first"><a href="http://eprint.iacr.org/2014/526" target="_blank" rel="noopener noreferrer">Curve41417 Karatsuba revisited</a><a href="#fnref-first" class="footnote-backref">↩</a></li><li id="fn-second"><a href="http://eprint.iacr.org/2017/437" target="_blank" rel="noopener noreferrer">Slothful Reduction</a><a href="#fnref-second" class="footnote-backref">↩</a></li><li id="fn-third"><a href="http://eprint.iacr.org/2015/1247" target="_blank" rel="noopener noreferrer">Missing a trick: Karatsuba variations</a><a href="#fnref-third" class="footnote-backref">↩</a></li></ol></div></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/milagro-design"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Milagro Design</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/amcl-c-api-2.0.0"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">AMCL C API 2.0.0</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#introduction" class="table-of-contents__link toc-highlight">Introduction</a></li><li><a href="#library-structure" class="table-of-contents__link toc-highlight">Library Structure</a></li><li><a href="#handling-big-numbers" class="table-of-contents__link toc-highlight">Handling <strong>BIG</strong> Numbers</a><ul><li><a href="#representation" class="table-of-contents__link toc-highlight">Representation</a></li><li><a href="#addition-and-subtraction" class="table-of-contents__link toc-highlight">Addition and Subtraction</a></li><li><a href="#multiplication-and-reduction" class="table-of-contents__link toc-highlight">Multiplication and Reduction</a></li></ul></li><li><a href="#extension-field-arithmetic" class="table-of-contents__link toc-highlight">Extension Field arithmetic</a></li><li><a href="#elliptic-curves" class="table-of-contents__link toc-highlight">Elliptic Curves</a></li><li><a href="#support-for-classic-finite-field-methods" class="table-of-contents__link toc-highlight">Support for classic Finite Field Methods</a></li><li><a href="#multi-lingual-support" class="table-of-contents__link toc-highlight">Multi-Lingual support</a></li><li><a href="#discussion" class="table-of-contents__link toc-highlight">Discussion</a></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/contributor-guide/index.html b/docs/contributor-guide/index.html
index e1fa146..9954ea6 100644
--- a/docs/contributor-guide/index.html
+++ b/docs/contributor-guide/index.html
@@ -1,75 +1,22 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Contributor&#x27;s Guide · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="# Become a contributor"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Contributor&#x27;s Guide · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="# Become a contributor"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive siteNavItemActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>Project Info</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem navListItemActive"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-contributor-guide">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">Contributor&#x27;s Guide | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/contributor-guide"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Contributor&#x27;s Guide | Apache Milagro"><meta data-rh="true" name="description" content="Apache Milagro Mailing List"><meta data-rh="true" property="og:description" content="Apache Milagro Mailing List"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/contributor-guide"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/contributor-guide" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/contributor-guide" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">Contributor&#x27;s Guide</h1></header><article><div><span><h1><a class="anchor" aria-hidden="true" id="become-a-contributor"></a><a href="#become-a-contributor" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Become a contributor</h1>
-<h2><a class="anchor" aria-hidden="true" id="apache-milagro-mailing-list"></a><a href="#apache-milagro-mailing-list" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Apache Milagro Mailing List</h2>
-<p>If you'd like to contribute, the first step is to subscribe to our developer's mailing list. Please send an email to:</p>
-<p><a href="mailto:dev-subscribe@milagro.apache.org?Subject=Subscribe" target="_top">dev-subscribe @ milagro.apache.org</a></p>
-<h2><a class="anchor" aria-hidden="true" id="repositories"></a><a href="#repositories" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Repositories</h2>
-<p>Our current GitHub repositories are:</p>
-<ul>
-<li><a href="https://github.com/apache/incubator-milagro">https://github.com/apache/incubator-milagro</a> - used to build this website.</li>
-<li><a href="https://github.com/apache/incubator-milagro-crypto-c">https://github.com/apache/incubator-milagro-crypto-c</a> - standards compliant cryptographic library written in C.</li>
-<li><a href="https://github.com/apache/incubator-milagro-MPC">https://github.com/apache/incubator-milagro-MPC</a> - Multi-Party Computation library (libmpc).</li>
-<li><a href="https://github.com/apache/incubator-milagro-crypto-js">https://github.com/apache/incubator-milagro-crypto-js</a> - standards compliant cryptographic library written in JavaScript.</li>
-<li><a href="https://github.com/apache/incubator-milagro-crypto-rust">https://github.com/apache/incubator-milagro-crypto-rust</a> - standards compliant cryptographic library written in Rust.</li>
-<li><a href="https://github.com/apache/incubator-milagro-dta">https://github.com/apache/incubator-milagro-dta</a> - Milagro Decentralized Trust Authority (D-TA) - a collaborative key management server.</li>
-</ul>
-<p>Please use the &quot;Issues&quot; tab on these repos to report any bugs or feature requests.</p>
-<!--
-Supported admonition types are: caution, note, important, tip, warning.
--->
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zkp-mfa-api"><span class="arrow-prev">← </span><span>ZKP-MFA API</span></a><a class="docs-next button" href="/docs/downloads"><span>Downloads</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#apache-milagro-mailing-list">Apache Milagro Mailing List</a></li><li><a href="#repositories">Repositories</a></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/amcl-overview">AMCL Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/contributor-guide">Project Info</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/downloads">Downloads</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/support">Support</a></li></ul></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">Project Info</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">Contributor&#x27;s Guide</span><meta itemprop="position" content="2"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><h1>Become a contributor</h1><h2 class="anchor anchorWithStickyNavbar_LWe7" id="apache-milagro-mailing-list">Apache Milagro Mailing List<a class="hash-link" href="#apache-milagro-mailing-list" title="Direct link to heading">​</a></h2><p>If you&#x27;d like to contribute, the first step is to subscribe to our developer&#x27;s mailing list. Please send an email to:</p><a href="mailto:dev-subscribe@milagro.apache.org?Subject=Subscribe" target="_top" rel="noopener noreferrer">dev-subscribe @ milagro.apache.org</a><h2 class="anchor anchorWithStickyNavbar_LWe7" id="repositories">Repositories<a class="hash-link" href="#repositories" title="Direct link to heading">​</a></h2><p>Our current GitHub repositories are:</p><ul><li><a href="https://github.com/apache/incubator-milagro" target="_blank" rel="noopener noreferrer">https://github.com/apache/incubator-milagro</a> - used to build this website.   </li><li><a href="https://github.com/apache/incubator-milagro-crypto-c" target="_blank" rel="noopener noreferrer">https://github.com/apache/incubator-milagro-crypto-c</a> - standards compliant cryptographic library written in C.   </li><li><a href="https://github.com/apache/incubator-milagro-MPC" target="_blank" rel="noopener noreferrer">https://github.com/apache/incubator-milagro-MPC</a> - Multi-Party Computation library (libmpc).   </li><li><a href="https://github.com/apache/incubator-milagro-crypto-js" target="_blank" rel="noopener noreferrer">https://github.com/apache/incubator-milagro-crypto-js</a> - standards compliant cryptographic library written in JavaScript.   </li><li><a href="https://github.com/apache/incubator-milagro-crypto-rust" target="_blank" rel="noopener noreferrer">https://github.com/apache/incubator-milagro-crypto-rust</a> - standards compliant cryptographic library written in Rust.   </li><li><a href="https://github.com/apache/incubator-milagro-dta" target="_blank" rel="noopener noreferrer">https://github.com/apache/incubator-milagro-dta</a> - Milagro Decentralized Trust Authority (D-TA) - a collaborative key management server.     </li></ul><p>Please use the &quot;Issues&quot; tab on these repos to report any bugs or feature requests.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/zkp-mfa-api"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">ZKP-MFA API</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/downloads"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Downloads</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#apache-milagro-mailing-list" class="table-of-contents__link toc-highlight">Apache Milagro Mailing List</a></li><li><a href="#repositories" class="table-of-contents__link toc-highlight">Repositories</a></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/cryptojs/aes/index.html b/docs/cryptojs/aes/index.html
index ecfe5a9..e5a7a97 100644
--- a/docs/cryptojs/aes/index.html
+++ b/docs/cryptojs/aes/index.html
@@ -1,171 +1,32 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>AES · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;a name=&quot;AES&quot;&gt;&lt;/a&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="AES · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;a name=&quot;AES&quot;&gt;&lt;/a&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>AMCL JavaScript API 1.0.0</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem navListItemActive"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-cryptojs/aes">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">AES | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/cryptojs/aes"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="AES | Apache Milagro"><meta data-rh="true" name="description" content="AES"><meta data-rh="true" property="og:description" content="AES"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/cryptojs/aes"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/aes" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/aes" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">AES</h1></header><article><div><span><p><a name="AES"></a></p>
-<h2><a class="anchor" aria-hidden="true" id="aes"></a><a href="#aes" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>AES</h2>
-<p><strong>Kind</strong>: global class<br>
-<strong>this</strong>: <code>{AES}</code></p>
-<ul>
-<li><a href="#AES">AES</a>
-<ul>
-<li><a href="#new_AES_new">new AES()</a></li>
-<li><a href="#AES+reset">.reset(m, iv)</a></li>
-<li><a href="#AES+getreg">.getreg()</a> ⇒</li>
-<li><a href="#AES+init">.init(m, n, key, iv)</a></li>
-<li><a href="#AES+ecb_encrypt">.ecb_encrypt(buff)</a></li>
-<li><a href="#AES+ecb_decrypt">.ecb_decrypt(buff)</a></li>
-<li><a href="#AES+encrypt">.encrypt(buff)</a></li>
-<li><a href="#AES+decrypt">.decrypt(buff)</a></li>
-<li><a href="#AES+end">.end()</a></li>
-</ul></li>
-</ul>
-<p><a name="new_AES_new"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="new-aes"></a><a href="#new-aes" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>new AES()</h3>
-<p>Creates an instance of AES.</p>
-<p><a name="AES+reset"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="aesresetm-iv"></a><a href="#aesresetm-iv" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>aeS.reset(m, iv)</h3>
-<p>Reset AES mode or IV</p>
-<p><strong>Kind</strong>: instance method of <a href="#AES"><code>AES</code></a>  <br>
-<strong>this</strong>: <code>{AES}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>m</td><td>The new active mode of operation (ECB, CBC, OFB, CFB etc)</td></tr>
-<tr><td>iv</td><td>The new Initialisation Vector</td></tr>
-</tbody>
-</table>
-<p><a name="AES+getreg"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="aesgetreg-"></a><a href="#aesgetreg-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>aeS.getreg() ⇒</h3>
-<p>Reset Extract chaining vector</p>
-<p><strong>Kind</strong>: instance method of <a href="#AES"><code>AES</code></a>  <br>
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/amcl-overview">AMCL Library</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-overview">AMCL Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API 1.0.0</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/cryptojs/aes">AES</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/big">BIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls">BLS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls192">BLS192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls256">BLS256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/dbig">DBIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp">ECP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ff">FF</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp">FP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp2">FP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp4">FP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp8">FP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp12">FP12</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp16">FP16</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp24">FP24</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp48">FP48</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/gcm">GCM</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash256">HASH256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash384">HASH384</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash512">HASH512</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin">MPIN</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair">PAIR</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rand">RAND</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rsa">RSA</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/sha3">SHA3</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/unit64">UInt64</a></li></ul></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL Library</span><meta itemprop="position" content="1"></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL JavaScript API 1.0.0</span><meta itemprop="position" content="2"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">AES</span><meta itemprop="position" content="3"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>AES</h1></header><a name="AES"></a><h2 class="anchor anchorWithStickyNavbar_LWe7" id="aes">AES<a class="hash-link" href="#aes" title="Direct link to heading">​</a></h2><p><strong>Kind</strong>: global class<br>
+<strong>this</strong>: <code>{&quot;{&quot;}AES{&quot;}&quot;}</code>  </p><ul><li><a href="#AES">AES</a><ul><li><a href="#new_AES_new">new AES()</a></li><li><a href="#AES+reset">.reset(m, iv)</a></li><li><a href="#AES+getreg">.getreg()</a> ⇒</li><li><a href="#AES+init">.init(m, n, key, iv)</a></li><li><a href="#AES+ecb_encrypt">.ecb_encrypt(buff)</a></li><li><a href="#AES+ecb_decrypt">.ecb_decrypt(buff)</a></li><li><a href="#AES+encrypt">.encrypt(buff)</a></li><li><a href="#AES+decrypt">.decrypt(buff)</a></li><li><a href="#AES+end">.end()</a></li></ul></li></ul><a name="new_AES_new"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="new-aes">new AES()<a class="hash-link" href="#new-aes" title="Direct link to heading">​</a></h3><p>Creates an instance of AES.</p><a name="AES+reset"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="aesresetm-iv">aeS.reset(m, iv)<a class="hash-link" href="#aesresetm-iv" title="Direct link to heading">​</a></h3><p>Reset AES mode or IV</p><p><strong>Kind</strong>: instance method of <a href="#AES"><code>AES</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}AES{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>m</td><td>The new active mode of operation (ECB, CBC, OFB, CFB etc)</td></tr><tr><td>iv</td><td>The new Initialisation Vector</td></tr></tbody></table><a name="AES+getreg"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="aesgetreg-">aeS.getreg() ⇒<a class="hash-link" href="#aesgetreg-" title="Direct link to heading">​</a></h3><p>Reset Extract chaining vector</p><p><strong>Kind</strong>: instance method of <a href="#AES"><code>AES</code></a><br>
 <strong>Returns</strong>: f the extracted chaining vector<br>
-<strong>this</strong>: <code>{AES}</code>  <br>
-<a name="AES+init"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="aesinitm-n-key-iv"></a><a href="#aesinitm-n-key-iv" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>aeS.init(m, n, key, iv)</h3>
-<p>Initialise an instance of AES and its mode of operation</p>
-<p><strong>Kind</strong>: instance method of <a href="#AES"><code>AES</code></a>  <br>
-<strong>this</strong>: <code>{AES}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>m</td><td>is the active mode of operation (ECB, CBC, OFB, CFB etc)</td></tr>
-<tr><td>n</td><td>is the key length in bytes, 16, 24 or 32</td></tr>
-<tr><td>key</td><td>the AES key as an array of 16 bytes</td></tr>
-<tr><td>iv</td><td>the Initialisation Vector</td></tr>
-</tbody>
-</table>
-<p><a name="AES+ecb_encrypt"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="aesecb_encryptbuff"></a><a href="#aesecb_encryptbuff" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>aeS.ecb_encrypt(buff)</h3>
-<p>Encrypt a single 16 byte block in ECB mode</p>
-<p><strong>Kind</strong>: instance method of <a href="#AES"><code>AES</code></a>  <br>
-<strong>this</strong>: <code>{AES}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Type</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>buff</td><td><code>string</code></td><td>is an array of 16 plaintext bytes, on exit becomes ciphertext</td></tr>
-</tbody>
-</table>
-<p><a name="AES+ecb_decrypt"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="aesecb_decryptbuff"></a><a href="#aesecb_decryptbuff" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>aeS.ecb_decrypt(buff)</h3>
-<p>Decrypt a single 16 byte block in ECB mode</p>
-<p><strong>Kind</strong>: instance method of <a href="#AES"><code>AES</code></a>  <br>
-<strong>this</strong>: <code>{AES}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>buff</td><td>is an array of 16 cipherext bytes, on exit becomes plaintext</td></tr>
-</tbody>
-</table>
-<p><a name="AES+encrypt"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="aesencryptbuff"></a><a href="#aesencryptbuff" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>aeS.encrypt(buff)</h3>
-<p>Encrypt using selected mode of operation</p>
-<p><strong>Kind</strong>: instance method of <a href="#AES"><code>AES</code></a>  <br>
-<strong>this</strong>: <code>{AES}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Type</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>buff</td><td><code>string</code></td><td>is an array of 16 plaintext bytes, on exit becomes ciphertext</td></tr>
-</tbody>
-</table>
-<p><a name="AES+decrypt"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="aesdecryptbuff"></a><a href="#aesdecryptbuff" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>aeS.decrypt(buff)</h3>
-<p>Decrypt using selected mode of operation</p>
-<p><strong>Kind</strong>: instance method of <a href="#AES"><code>AES</code></a>  <br>
-<strong>this</strong>: <code>{AES}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Type</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>buff</td><td><code>string</code></td><td>is an array of 16 cipherext bytes, on exit becomes plaintext</td></tr>
-</tbody>
-</table>
-<p><a name="AES+end"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="aesend"></a><a href="#aesend" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>aeS.end()</h3>
-<p>Clean up and delete left-overs</p>
-<p><strong>Kind</strong>: instance method of <a href="#AES"><code>AES</code></a>  <br>
-<strong>this</strong>: <code>{AES}</code></p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/cryptojs/amcl-javascript-api-1.0.0"><span class="arrow-prev">← </span><span>Previous</span></a><a class="docs-next button" href="/docs/cryptojs/big"><span>BIG</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#aes">AES</a><ul class="toc-headings"><li><a href="#new-aes">new AES()</a></li><li><a href="#aesresetm-iv">aeS.reset(m, iv)</a></li><li><a href="#aesgetreg-">aeS.getreg() ⇒</a></li><li><a href="#aesinitm-n-key-iv">aeS.init(m, n, key, iv)</a></li><li><a href="#aesecb_encryptbuff">aeS.ecb_encrypt(buff)</a></li><li><a href="#aesecb_decryptbuff">aeS.ecb_decrypt(buff)</a></li><li><a href="#aesencryptbuff">aeS.encrypt(buff)</a></li><li><a href="#aesdecryptbuff">aeS.decrypt(buff)</a></li><li><a href="#aesend">aeS.end()</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<strong>this</strong>: <code>{&quot;{&quot;}AES{&quot;}&quot;}</code>  </p><a name="AES+init"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="aesinitm-n-key-iv">aeS.init(m, n, key, iv)<a class="hash-link" href="#aesinitm-n-key-iv" title="Direct link to heading">​</a></h3><p>Initialise an instance of AES and its mode of operation</p><p><strong>Kind</strong>: instance method of <a href="#AES"><code>AES</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}AES{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>m</td><td>is the active mode of operation (ECB, CBC, OFB, CFB etc)</td></tr><tr><td>n</td><td>is the key length in bytes, 16, 24 or 32</td></tr><tr><td>key</td><td>the AES key as an array of 16 bytes</td></tr><tr><td>iv</td><td>the Initialisation Vector</td></tr></tbody></table><a name="AES+ecb_encrypt"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="aesecb_encryptbuff">aeS.ecb_encrypt(buff)<a class="hash-link" href="#aesecb_encryptbuff" title="Direct link to heading">​</a></h3><p>Encrypt a single 16 byte block in ECB mode</p><p><strong>Kind</strong>: instance method of <a href="#AES"><code>AES</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}AES{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>buff</td><td><code>string</code></td><td>is an array of 16 plaintext bytes, on exit becomes ciphertext</td></tr></tbody></table><a name="AES+ecb_decrypt"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="aesecb_decryptbuff">aeS.ecb_decrypt(buff)<a class="hash-link" href="#aesecb_decryptbuff" title="Direct link to heading">​</a></h3><p>Decrypt a single 16 byte block in ECB mode</p><p><strong>Kind</strong>: instance method of <a href="#AES"><code>AES</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}AES{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>buff</td><td>is an array of 16 cipherext bytes, on exit becomes plaintext</td></tr></tbody></table><a name="AES+encrypt"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="aesencryptbuff">aeS.encrypt(buff)<a class="hash-link" href="#aesencryptbuff" title="Direct link to heading">​</a></h3><p>Encrypt using selected mode of operation</p><p><strong>Kind</strong>: instance method of <a href="#AES"><code>AES</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}AES{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>buff</td><td><code>string</code></td><td>is an array of 16 plaintext bytes, on exit becomes ciphertext</td></tr></tbody></table><a name="AES+decrypt"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="aesdecryptbuff">aeS.decrypt(buff)<a class="hash-link" href="#aesdecryptbuff" title="Direct link to heading">​</a></h3><p>Decrypt using selected mode of operation</p><p><strong>Kind</strong>: instance method of <a href="#AES"><code>AES</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}AES{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>buff</td><td><code>string</code></td><td>is an array of 16 cipherext bytes, on exit becomes plaintext</td></tr></tbody></table><a name="AES+end"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="aesend">aeS.end()<a class="hash-link" href="#aesend" title="Direct link to heading">​</a></h3><p>Clean up and delete left-overs</p><p><strong>Kind</strong>: instance method of <a href="#AES"><code>AES</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}AES{&quot;}&quot;}</code></p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/cryptojs/amcl-javascript-api"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">AMCL JavaScript API</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/cryptojs/big"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">BIG</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#aes" class="table-of-contents__link toc-highlight">AES</a><ul><li><a href="#new-aes" class="table-of-contents__link toc-highlight">new AES()</a></li><li><a href="#aesresetm-iv" class="table-of-contents__link toc-highlight">aeS.reset(m, iv)</a></li><li><a href="#aesgetreg-" class="table-of-contents__link toc-highlight">aeS.getreg() ⇒</a></li><li><a href="#aesinitm-n-key-iv" class="table-of-contents__link toc-highlight">aeS.init(m, n, key, iv)</a></li><li><a href="#aesecb_encryptbuff" class="table-of-contents__link toc-highlight">aeS.ecb_encrypt(buff)</a></li><li><a href="#aesecb_decryptbuff" class="table-of-contents__link toc-highlight">aeS.ecb_decrypt(buff)</a></li><li><a href="#aesencryptbuff" class="table-of-contents__link toc-highlight">aeS.encrypt(buff)</a></li><li><a href="#aesdecryptbuff" class="table-of-contents__link toc-highlight">aeS.decrypt(buff)</a></li><li><a href="#aesend" class="table-of-contents__link toc-highlight">aeS.end()</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/cryptojs/amcl-javascript-api/index.html b/docs/cryptojs/amcl-javascript-api/index.html
index 2ec71b3..53f34f4 100644
--- a/docs/cryptojs/amcl-javascript-api/index.html
+++ b/docs/cryptojs/amcl-javascript-api/index.html
@@ -1,12 +1,27 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>AMCL JavaScript API · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="*MCJS - Milagro Crypto JavaScript*"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="AMCL JavaScript API · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="*MCJS - Milagro Crypto JavaScript*"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class=""><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class=""><a href="/docs/support" target="_self">Support</a></li><li class=""><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class=""><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">AMCL JavaScript API</h1></header><article><div><span><p><em>MCJS - Milagro Crypto JavaScript</em></p>
-<ul>
-<li><p>MCJS is a standards compliant JavaScript cryptographic library with no
-external dependencies except for the random seed source.</p></li>
-<li><p>MCJS supports the standards for RSA, ECDH, ECIES, ECDSA and M-PIN, AES-GCM
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-cryptojs/amcl-javascript-api">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">AMCL JavaScript API | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/cryptojs/amcl-javascript-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="AMCL JavaScript API | Apache Milagro"><meta data-rh="true" name="description" content="MCJS - Milagro Crypto JavaScript"><meta data-rh="true" property="og:description" content="MCJS - Milagro Crypto JavaScript"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/cryptojs/amcl-javascript-api"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/amcl-javascript-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/amcl-javascript-api" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
+
+
+
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/amcl-overview">AMCL Library</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-overview">AMCL Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API 1.0.0</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/aes">AES</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/big">BIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls">BLS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls192">BLS192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls256">BLS256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/dbig">DBIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp">ECP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ff">FF</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp">FP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp2">FP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp4">FP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp8">FP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp12">FP12</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp16">FP16</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp24">FP24</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp48">FP48</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/gcm">GCM</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash256">HASH256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash384">HASH384</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash512">HASH512</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin">MPIN</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair">PAIR</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rand">RAND</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rsa">RSA</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/sha3">SHA3</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/unit64">UInt64</a></li></ul></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL Library</span><meta itemprop="position" content="1"></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL JavaScript API 1.0.0</span><meta itemprop="position" content="2"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">AMCL JavaScript API</span><meta itemprop="position" content="3"></li></ul></nav><div class="theme-doc-markdown markdown"><header><h1>AMCL JavaScript API</h1></header><p><em>MCJS - Milagro Crypto JavaScript</em></p><ul><li><p>MCJS is a standards compliant JavaScript cryptographic library with no
+external dependencies except for the random seed source.</p></li><li><p>MCJS supports the standards for RSA, ECDH, ECIES, ECDSA and M-PIN, AES-GCM
 encryption/decryption, SHA256, SHA384, SHA512 and SHA3 hash functions and a
 cryptographically secure random number generator. Furthermore we recently
-added New Hope, a post-quantum key exchange.</p></li>
-<li><p>MCJS is <a href="https://nodejs.org/en/">Node.js</a> compatible and browser compatible
-(see some examples below).</p></li>
-</ul>
-</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+added New Hope, a post-quantum key exchange.</p></li><li><p>MCJS is <a href="https://nodejs.org/en/" target="_blank" rel="noopener noreferrer">Node.js</a> compatible and browser compatible
+(see some examples below).</p></li></ul></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/amcl-c-api-2.0.0"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">AMCL C API 2.0.0</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/cryptojs/aes"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">AES</div></a></nav></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/cryptojs/big/index.html b/docs/cryptojs/big/index.html
index 94d7f58..cf34833 100644
--- a/docs/cryptojs/big/index.html
+++ b/docs/cryptojs/big/index.html
@@ -1,484 +1,171 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>BIG · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;a name=&quot;BIG&quot;&gt;&lt;/a&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="BIG · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;a name=&quot;BIG&quot;&gt;&lt;/a&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>AMCL JavaScript API 1.0.0</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-cryptojs/big">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">BIG | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/cryptojs/big"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="BIG | Apache Milagro"><meta data-rh="true" name="description" content="BIG"><meta data-rh="true" property="og:description" content="BIG"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/cryptojs/big"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/big" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/big" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">BIG</h1></header><article><div><span><p><a name="BIG"></a></p>
-<h2><a class="anchor" aria-hidden="true" id="big"></a><a href="#big" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>BIG</h2>
-<p><strong>Kind</strong>: global class<br>
-<strong>this</strong>: <code>{BIG}</code></p>
-<ul>
-<li><a href="#BIG">BIG</a>
-<ul>
-<li><a href="#new_BIG_new">new BIG()</a></li>
-<li><em>instance</em>
-<ul>
-<li><a href="#BIG+zero">.zero()</a> ⇒</li>
-<li><a href="#BIG+one">.one()</a> ⇒</li>
-<li><a href="#BIG+iszilch">.iszilch()</a> ⇒</li>
-<li><a href="#BIG+isunity">.isunity()</a> ⇒</li>
-<li><a href="#BIG+cswap">.cswap()</a></li>
-<li><a href="#BIG+cmove">.cmove()</a></li>
-<li><a href="#BIG+copy">.copy()</a> ⇒</li>
-<li><a href="#BIG+hcopy">.hcopy()</a> ⇒</li>
-<li><a href="#BIG+rcopy">.rcopy()</a> ⇒</li>
-<li><a href="#BIG+norm">.norm()</a> ⇒</li>
-<li><a href="#BIG+fshr">.fshr()</a> ⇒</li>
-<li><a href="#BIG+shr">.shr()</a> ⇒</li>
-<li><a href="#BIG+fshl">.fshl()</a> ⇒</li>
-<li><a href="#BIG+shl">.shl()</a> ⇒</li>
-<li><a href="#BIG+nbits">.nbits()</a> ⇒</li>
-<li><a href="#BIG+toString">.toString()</a> ⇒</li>
-<li><a href="#BIG+add">.add()</a> ⇒</li>
-<li><a href="#BIG+or">.or()</a> ⇒</li>
-<li><a href="#BIG+plus">.plus()</a> ⇒</li>
-<li><a href="#BIG+inc">.inc()</a> ⇒</li>
-<li><a href="#BIG+sub">.sub()</a> ⇒</li>
-<li><a href="#BIG+rsub">.rsub()</a> ⇒</li>
-<li><a href="#BIG+dec">.dec()</a> ⇒</li>
-<li><a href="#BIG+minus">.minus()</a> ⇒</li>
-<li><a href="#BIG+imul">.imul()</a> ⇒</li>
-<li><a href="#BIG+tobytearray">.tobytearray()</a></li>
-<li><a href="#BIG+toBytes">.toBytes()</a></li>
-<li><a href="#BIG+muladd">.muladd()</a></li>
-<li><a href="#BIG+pmul">.pmul()</a> ⇒</li>
-<li><a href="#BIG+pxmul">.pxmul()</a> ⇒</li>
-<li><a href="#BIG+div3">.div3()</a> ⇒</li>
-<li><a href="#BIG+mod2m">.mod2m()</a> ⇒</li>
-<li><a href="#BIG+invmod2m">.invmod2m()</a> ⇒</li>
-<li><a href="#BIG+mod">.mod()</a> ⇒</li>
-<li><a href="#BIG+div">.div()</a> ⇒</li>
-<li><a href="#BIG+parity">.parity()</a> ⇒</li>
-<li><a href="#BIG+bit">.bit()</a> ⇒</li>
-<li><a href="#BIG+lastbits">.lastbits()</a> ⇒</li>
-<li><a href="#BIG+jacobi">.jacobi()</a> ⇒</li>
-<li><a href="#BIG+invmodp">.invmodp()</a> ⇒</li>
-<li><a href="#BIG+powmod">.powmod()</a> ⇒</li>
-</ul></li>
-<li><em>static</em>
-<ul>
-<li><a href="#BIG.frombytearray">.frombytearray()</a> ⇒</li>
-<li><a href="#BIG.smul">.smul()</a> ⇒</li>
-<li><a href="#BIG.comp">.comp()</a> ⇒</li>
-<li><a href="#BIG.random">.random()</a> ⇒</li>
-<li><a href="#BIG.randomnum">.randomnum()</a> ⇒</li>
-<li><a href="#BIG.mul">.mul()</a> ⇒</li>
-<li><a href="#BIG.sqr">.sqr()</a> ⇒</li>
-<li><a href="#BIG.modmul">.modmul()</a> ⇒</li>
-<li><a href="#BIG.modsqr">.modsqr()</a> ⇒</li>
-<li><a href="#BIG.modneg">.modneg()</a> ⇒</li>
-<li><a href="#BIG.invmod256">.invmod256()</a> ⇒</li>
-</ul></li>
-</ul></li>
-</ul>
-<p><a name="new_BIG_new"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="new-big"></a><a href="#new-big" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>new BIG()</h3>
-<p>General purpose Constructor</p>
-<p><a name="BIG+zero"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigzero-"></a><a href="#bigzero-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>biG.zero() ⇒</h3>
-<p>set to zero</p>
-<p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a>  <br>
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/amcl-overview">AMCL Library</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-overview">AMCL Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API 1.0.0</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/aes">AES</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/cryptojs/big">BIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls">BLS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls192">BLS192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls256">BLS256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/dbig">DBIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp">ECP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ff">FF</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp">FP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp2">FP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp4">FP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp8">FP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp12">FP12</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp16">FP16</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp24">FP24</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp48">FP48</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/gcm">GCM</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash256">HASH256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash384">HASH384</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash512">HASH512</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin">MPIN</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair">PAIR</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rand">RAND</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rsa">RSA</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/sha3">SHA3</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/unit64">UInt64</a></li></ul></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL Library</span><meta itemprop="position" content="1"></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL JavaScript API 1.0.0</span><meta itemprop="position" content="2"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">BIG</span><meta itemprop="position" content="3"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>BIG</h1></header><a name="BIG"></a><h2 class="anchor anchorWithStickyNavbar_LWe7" id="big">BIG<a class="hash-link" href="#big" title="Direct link to heading">​</a></h2><p><strong>Kind</strong>: global class<br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code>  </p><ul><li><a href="#BIG">BIG</a><ul><li><a href="#new_BIG_new">new BIG()</a></li><li><em>instance</em><ul><li><a href="#BIG+zero">.zero()</a> ⇒</li><li><a href="#BIG+one">.one()</a> ⇒</li><li><a href="#BIG+iszilch">.iszilch()</a> ⇒</li><li><a href="#BIG+isunity">.isunity()</a> ⇒</li><li><a href="#BIG+cswap">.cswap()</a></li><li><a href="#BIG+cmove">.cmove()</a></li><li><a href="#BIG+copy">.copy()</a> ⇒</li><li><a href="#BIG+hcopy">.hcopy()</a> ⇒</li><li><a href="#BIG+rcopy">.rcopy()</a> ⇒</li><li><a href="#BIG+norm">.norm()</a> ⇒</li><li><a href="#BIG+fshr">.fshr()</a> ⇒</li><li><a href="#BIG+shr">.shr()</a> ⇒</li><li><a href="#BIG+fshl">.fshl()</a> ⇒</li><li><a href="#BIG+shl">.shl()</a> ⇒</li><li><a href="#BIG+nbits">.nbits()</a> ⇒</li><li><a href="#BIG+toString">.toString()</a> ⇒</li><li><a href="#BIG+add">.add()</a> ⇒</li><li><a href="#BIG+or">.or()</a> ⇒</li><li><a href="#BIG+plus">.plus()</a> ⇒</li><li><a href="#BIG+inc">.inc()</a> ⇒</li><li><a href="#BIG+sub">.sub()</a> ⇒</li><li><a href="#BIG+rsub">.rsub()</a> ⇒</li><li><a href="#BIG+dec">.dec()</a> ⇒</li><li><a href="#BIG+minus">.minus()</a> ⇒</li><li><a href="#BIG+imul">.imul()</a> ⇒</li><li><a href="#BIG+tobytearray">.tobytearray()</a></li><li><a href="#BIG+toBytes">.toBytes()</a></li><li><a href="#BIG+muladd">.muladd()</a></li><li><a href="#BIG+pmul">.pmul()</a> ⇒</li><li><a href="#BIG+pxmul">.pxmul()</a> ⇒</li><li><a href="#BIG+div3">.div3()</a> ⇒</li><li><a href="#BIG+mod2m">.mod2m()</a> ⇒</li><li><a href="#BIG+invmod2m">.invmod2m()</a> ⇒</li><li><a href="#BIG+mod">.mod()</a> ⇒</li><li><a href="#BIG+div">.div()</a> ⇒</li><li><a href="#BIG+parity">.parity()</a> ⇒</li><li><a href="#BIG+bit">.bit()</a> ⇒</li><li><a href="#BIG+lastbits">.lastbits()</a> ⇒</li><li><a href="#BIG+jacobi">.jacobi()</a> ⇒</li><li><a href="#BIG+invmodp">.invmodp()</a> ⇒</li><li><a href="#BIG+powmod">.powmod()</a> ⇒</li></ul></li><li><em>static</em><ul><li><a href="#BIG.frombytearray">.frombytearray()</a> ⇒</li><li><a href="#BIG.smul">.smul()</a> ⇒</li><li><a href="#BIG.comp">.comp()</a> ⇒</li><li><a href="#BIG.random">.random()</a> ⇒</li><li><a href="#BIG.randomnum">.randomnum()</a> ⇒</li><li><a href="#BIG.mul">.mul()</a> ⇒</li><li><a href="#BIG.sqr">.sqr()</a> ⇒</li><li><a href="#BIG.modmul">.modmul()</a> ⇒</li><li><a href="#BIG.modsqr">.modsqr()</a> ⇒</li><li><a href="#BIG.modneg">.modneg()</a> ⇒</li><li><a href="#BIG.invmod256">.invmod256()</a> ⇒</li></ul></li></ul></li></ul><a name="new_BIG_new"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="new-big">new BIG()<a class="hash-link" href="#new-big" title="Direct link to heading">​</a></h3><p>General purpose Constructor</p><a name="BIG+zero"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigzero-">biG.zero() ⇒<a class="hash-link" href="#bigzero-" title="Direct link to heading">​</a></h3><p>set to zero</p><p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a><br>
 <strong>Returns</strong>: BIG number<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
-<a name="BIG+one"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigone-"></a><a href="#bigone-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>biG.one() ⇒</h3>
-<p>set to one</p>
-<p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code>  </p><a name="BIG+one"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigone-">biG.one() ⇒<a class="hash-link" href="#bigone-" title="Direct link to heading">​</a></h3><p>set to one</p><p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a><br>
 <strong>Returns</strong>: BIG number<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
-<a name="BIG+iszilch"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigiszilch-"></a><a href="#bigiszilch-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>biG.iszilch() ⇒</h3>
-<p>test for zero</p>
-<p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code>  </p><a name="BIG+iszilch"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigiszilch-">biG.iszilch() ⇒<a class="hash-link" href="#bigiszilch-" title="Direct link to heading">​</a></h3><p>test for zero</p><p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a><br>
 <strong>Returns</strong>: True if zero<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
-<a name="BIG+isunity"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigisunity-"></a><a href="#bigisunity-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>biG.isunity() ⇒</h3>
-<p>test for unity</p>
-<p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code>  </p><a name="BIG+isunity"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigisunity-">biG.isunity() ⇒<a class="hash-link" href="#bigisunity-" title="Direct link to heading">​</a></h3><p>test for unity</p><p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a><br>
 <strong>Returns</strong>: True if one<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
-<a name="BIG+cswap"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigcswap"></a><a href="#bigcswap" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>biG.cswap()</h3>
-<p>Conditional swap of two BIGs depending on d using XOR - no branches</p>
-<p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a>  <br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code>  </p><a name="BIG+cswap"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigcswap">biG.cswap()<a class="hash-link" href="#bigcswap" title="Direct link to heading">​</a></h3><p>Conditional swap of two BIGs depending on d using XOR - no branches</p><p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: b BIG number<br>
-<strong>Parameter</strong>: d BIG number<br>
-<a name="BIG+cmove"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigcmove"></a><a href="#bigcmove" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>biG.cmove()</h3>
-<p>Conditional move of BIG depending on d using XOR - no branches</p>
-<p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a>  <br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
+<strong>Parameter</strong>: d BIG number  </p><a name="BIG+cmove"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigcmove">biG.cmove()<a class="hash-link" href="#bigcmove" title="Direct link to heading">​</a></h3><p>Conditional move of BIG depending on d using XOR - no branches</p><p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: b BIG number<br>
-<strong>Parameter</strong>: d BIG number<br>
-<a name="BIG+copy"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigcopy-"></a><a href="#bigcopy-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>biG.copy() ⇒</h3>
-<p>Copy from another BIG</p>
-<p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a>  <br>
+<strong>Parameter</strong>: d BIG number  </p><a name="BIG+copy"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigcopy-">biG.copy() ⇒<a class="hash-link" href="#bigcopy-" title="Direct link to heading">​</a></h3><p>Copy from another BIG</p><p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a><br>
 <strong>Returns</strong>: The BIG object<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
-<strong>Parameter</strong>: y BIG number<br>
-<a name="BIG+hcopy"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bighcopy-"></a><a href="#bighcopy-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>biG.hcopy() ⇒</h3>
-<p>copy from bottom half of ctx.DBIG</p>
-<p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: y BIG number  </p><a name="BIG+hcopy"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bighcopy-">biG.hcopy() ⇒<a class="hash-link" href="#bighcopy-" title="Direct link to heading">​</a></h3><p>copy from bottom half of ctx.DBIG</p><p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a><br>
 <strong>Returns</strong>: The new BIG object<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
-<strong>Parameter</strong>: y BIG number<br>
-<a name="BIG+rcopy"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigrcopy-"></a><a href="#bigrcopy-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>biG.rcopy() ⇒</h3>
-<p>copy from ROM</p>
-<p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: y BIG number  </p><a name="BIG+rcopy"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigrcopy-">biG.rcopy() ⇒<a class="hash-link" href="#bigrcopy-" title="Direct link to heading">​</a></h3><p>copy from ROM</p><p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a><br>
 <strong>Returns</strong>: The BIG object<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
-<strong>Parameter</strong>: y BIG number in ROM<br>
-<a name="BIG+norm"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bignorm-"></a><a href="#bignorm-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>biG.norm() ⇒</h3>
-<p>normalise BIG - force all digits &lt; 2^BASEBITS</p>
-<p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: y BIG number in ROM  </p><a name="BIG+norm"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bignorm-">biG.norm() ⇒<a class="hash-link" href="#bignorm-" title="Direct link to heading">​</a></h3><p>normalise BIG - force all digits <!-- -->&lt;<!-- --> 2^BASEBITS</p><p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a><br>
 <strong>Returns</strong>: BIG number<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
-<a name="BIG+fshr"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigfshr-"></a><a href="#bigfshr-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>biG.fshr() ⇒</h3>
-<p>Quick Fast shifts a BIG right by a small number of bits - input must be normalised, output will be normalised</p>
-<p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code>  </p><a name="BIG+fshr"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigfshr-">biG.fshr() ⇒<a class="hash-link" href="#bigfshr-" title="Direct link to heading">​</a></h3><p>Quick Fast shifts a BIG right by a small number of bits - input must be normalised, output will be normalised</p><p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a><br>
 <strong>Returns</strong>: r The shifted out part<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
-<strong>Parameter</strong>: k Number of bits to shift<br>
-<a name="BIG+shr"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigshr-"></a><a href="#bigshr-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>biG.shr() ⇒</h3>
-<p>General shift right by k bits</p>
-<p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: k Number of bits to shift  </p><a name="BIG+shr"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigshr-">biG.shr() ⇒<a class="hash-link" href="#bigshr-" title="Direct link to heading">​</a></h3><p>General shift right by k bits</p><p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a><br>
 <strong>Returns</strong>: BIG number<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
-<strong>Parameter</strong>: k Number of bits to shift<br>
-<a name="BIG+fshl"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigfshl-"></a><a href="#bigfshl-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>biG.fshl() ⇒</h3>
-<p>Fast shifts a BIG left by a small number of bits - input must be normalised, output will be normalised</p>
-<p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: k Number of bits to shift  </p><a name="BIG+fshl"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigfshl-">biG.fshl() ⇒<a class="hash-link" href="#bigfshl-" title="Direct link to heading">​</a></h3><p>Fast shifts a BIG left by a small number of bits - input must be normalised, output will be normalised</p><p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a><br>
 <strong>Returns</strong>: r The shifted out part<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
-<strong>Parameter</strong>: k Number of bits to shift<br>
-<a name="BIG+shl"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigshl-"></a><a href="#bigshl-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>biG.shl() ⇒</h3>
-<p>General shift left by k bits</p>
-<p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: k Number of bits to shift  </p><a name="BIG+shl"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigshl-">biG.shl() ⇒<a class="hash-link" href="#bigshl-" title="Direct link to heading">​</a></h3><p>General shift left by k bits</p><p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a><br>
 <strong>Returns</strong>: BIG number<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
-<strong>Parameter</strong>: k Number of bits to shift<br>
-<a name="BIG+nbits"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bignbits-"></a><a href="#bignbits-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>biG.nbits() ⇒</h3>
-<p>length in bits</p>
-<p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: k Number of bits to shift  </p><a name="BIG+nbits"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bignbits-">biG.nbits() ⇒<a class="hash-link" href="#bignbits-" title="Direct link to heading">​</a></h3><p>length in bits</p><p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a><br>
 <strong>Returns</strong>: The number of bigs in BIG object<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
-<a name="BIG+toString"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigtostring-"></a><a href="#bigtostring-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>biG.toString() ⇒</h3>
-<p>Convert to string</p>
-<p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code>  </p><a name="BIG+toString"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigtostring-">biG.toString() ⇒<a class="hash-link" href="#bigtostring-" title="Direct link to heading">​</a></h3><p>Convert to string</p><p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a><br>
 <strong>Returns</strong>: string representation of a BIG number<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
-<a name="BIG+add"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigadd-"></a><a href="#bigadd-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>biG.add() ⇒</h3>
-<p>Sum two BIG mumbers</p>
-<p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code>  </p><a name="BIG+add"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigadd-">biG.add() ⇒<a class="hash-link" href="#bigadd-" title="Direct link to heading">​</a></h3><p>Sum two BIG mumbers</p><p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a><br>
 <strong>Returns</strong>: this+=y<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
-<strong>Parameter</strong>: y BIG object<br>
-<a name="BIG+or"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigor-"></a><a href="#bigor-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>biG.or() ⇒</h3>
-<p>OR two BIG mumbers</p>
-<p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: y BIG object  </p><a name="BIG+or"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigor-">biG.or() ⇒<a class="hash-link" href="#bigor-" title="Direct link to heading">​</a></h3><p>OR two BIG mumbers</p><p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a><br>
 <strong>Returns</strong>: this|=y<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
-<strong>Parameter</strong>: y BIG object<br>
-<a name="BIG+plus"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigplus-"></a><a href="#bigplus-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>biG.plus() ⇒</h3>
-<p>Sum two BIG mumbers</p>
-<p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: y BIG object  </p><a name="BIG+plus"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigplus-">biG.plus() ⇒<a class="hash-link" href="#bigplus-" title="Direct link to heading">​</a></h3><p>Sum two BIG mumbers</p><p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a><br>
 <strong>Returns</strong>: this+x<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
-<strong>Parameter</strong>: x BIG object<br>
-<a name="BIG+inc"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="biginc-"></a><a href="#biginc-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>biG.inc() ⇒</h3>
-<p>Sum BIG and integer</p>
-<p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: x BIG object  </p><a name="BIG+inc"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="biginc-">biG.inc() ⇒<a class="hash-link" href="#biginc-" title="Direct link to heading">​</a></h3><p>Sum BIG and integer</p><p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a><br>
 <strong>Returns</strong>: this+=i<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
-<strong>Parameter</strong>: i Integer to add<br>
-<a name="BIG+sub"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigsub-"></a><a href="#bigsub-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>biG.sub() ⇒</h3>
-<p>Subtract BIG from one another</p>
-<p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: i Integer to add  </p><a name="BIG+sub"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigsub-">biG.sub() ⇒<a class="hash-link" href="#bigsub-" title="Direct link to heading">​</a></h3><p>Subtract BIG from one another</p><p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a><br>
 <strong>Returns</strong>: this-=y<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
-<strong>Parameter</strong>: y BIG object<br>
-<a name="BIG+rsub"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigrsub-"></a><a href="#bigrsub-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>biG.rsub() ⇒</h3>
-<p>Reverse subtract BIG from one another</p>
-<p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: y BIG object  </p><a name="BIG+rsub"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigrsub-">biG.rsub() ⇒<a class="hash-link" href="#bigrsub-" title="Direct link to heading">​</a></h3><p>Reverse subtract BIG from one another</p><p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a><br>
 <strong>Returns</strong>: this=x-this<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
-<strong>Parameter</strong>: x BIG object<br>
-<a name="BIG+dec"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigdec-"></a><a href="#bigdec-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>biG.dec() ⇒</h3>
-<p>Subtract integer from BIG</p>
-<p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: x BIG object  </p><a name="BIG+dec"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigdec-">biG.dec() ⇒<a class="hash-link" href="#bigdec-" title="Direct link to heading">​</a></h3><p>Subtract integer from BIG</p><p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a><br>
 <strong>Returns</strong>: this-=i<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
-<strong>Parameter</strong>: i Integer to subtract<br>
-<a name="BIG+minus"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigminus-"></a><a href="#bigminus-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>biG.minus() ⇒</h3>
-<p>Subtract BIG</p>
-<p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: i Integer to subtract  </p><a name="BIG+minus"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigminus-">biG.minus() ⇒<a class="hash-link" href="#bigminus-" title="Direct link to heading">​</a></h3><p>Subtract BIG</p><p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a><br>
 <strong>Returns</strong>: New BIG object<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
-<strong>Parameter</strong>: x BIG object<br>
-<a name="BIG+imul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigimul-"></a><a href="#bigimul-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>biG.imul() ⇒</h3>
-<p>Multiply by small integer</p>
-<p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a>  <br>
-<strong>Returns</strong>: this*c<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
-<strong>Parameter</strong>: c small integer<br>
-<a name="BIG+tobytearray"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigtobytearray"></a><a href="#bigtobytearray" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>biG.tobytearray()</h3>
-<p>convert this BIG to byte array</p>
-<p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a>  <br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
-<a name="BIG+toBytes"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigtobytes"></a><a href="#bigtobytes" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>biG.toBytes()</h3>
-<p>convert this to byte array</p>
-<p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a>  <br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
-<a name="BIG+muladd"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigmuladd"></a><a href="#bigmuladd" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>biG.muladd()</h3>
-<p>this[i]+=x*y+c, and return high part</p>
-<p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a>  <br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
-<a name="BIG+pmul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigpmul-"></a><a href="#bigpmul-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>biG.pmul() ⇒</h3>
-<p>multiply by larger int</p>
-<p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: x BIG object  </p><a name="BIG+imul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigimul-">biG.imul() ⇒<a class="hash-link" href="#bigimul-" title="Direct link to heading">​</a></h3><p>Multiply by small integer</p><p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a><br>
+<strong>Returns</strong>: this<!-- -->*<!-- -->c<br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: c small integer  </p><a name="BIG+tobytearray"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigtobytearray">biG.tobytearray()<a class="hash-link" href="#bigtobytearray" title="Direct link to heading">​</a></h3><p>convert this BIG to byte array</p><p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code>  </p><a name="BIG+toBytes"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigtobytes">biG.toBytes()<a class="hash-link" href="#bigtobytes" title="Direct link to heading">​</a></h3><p>convert this to byte array</p><p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code>  </p><a name="BIG+muladd"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigmuladd">biG.muladd()<a class="hash-link" href="#bigmuladd" title="Direct link to heading">​</a></h3><p>this<!-- -->[i]<!-- -->+=x<!-- -->*<!-- -->y+c, and return high part</p><p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code>  </p><a name="BIG+pmul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigpmul-">biG.pmul() ⇒<a class="hash-link" href="#bigpmul-" title="Direct link to heading">​</a></h3><p>multiply by larger int</p><p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a><br>
 <strong>Returns</strong>: carry value<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
-<strong>Parameter</strong>: c large integer<br>
-<a name="BIG+pxmul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigpxmul-"></a><a href="#bigpxmul-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>biG.pxmul() ⇒</h3>
-<p>multiply by still larger int - results requires a DBIG</p>
-<p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: c large integer  </p><a name="BIG+pxmul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigpxmul-">biG.pxmul() ⇒<a class="hash-link" href="#bigpxmul-" title="Direct link to heading">​</a></h3><p>multiply by still larger int - results requires a DBIG</p><p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a><br>
 <strong>Returns</strong>: DBIG object<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
-<strong>Parameter</strong>: c large integer<br>
-<a name="BIG+div3"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigdiv3-"></a><a href="#bigdiv3-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>biG.div3() ⇒</h3>
-<p>divide by 3</p>
-<p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: c large integer  </p><a name="BIG+div3"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigdiv3-">biG.div3() ⇒<a class="hash-link" href="#bigdiv3-" title="Direct link to heading">​</a></h3><p>divide by 3</p><p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a><br>
 <strong>Returns</strong>: carry value<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
-<a name="BIG+mod2m"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigmod2m-"></a><a href="#bigmod2m-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>biG.mod2m() ⇒</h3>
-<p>set x = x mod 2^m</p>
-<p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code>  </p><a name="BIG+mod2m"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigmod2m-">biG.mod2m() ⇒<a class="hash-link" href="#bigmod2m-" title="Direct link to heading">​</a></h3><p>set x = x mod 2^m</p><p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a><br>
 <strong>Returns</strong>: BIG object<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
-<strong>Parameter</strong>: m Exponent<br>
-<a name="BIG+invmod2m"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="biginvmod2m-"></a><a href="#biginvmod2m-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>biG.invmod2m() ⇒</h3>
-<p>a=1/a mod 2^256. This is very fast!</p>
-<p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: m Exponent  </p><a name="BIG+invmod2m"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="biginvmod2m-">biG.invmod2m() ⇒<a class="hash-link" href="#biginvmod2m-" title="Direct link to heading">​</a></h3><p>a=1/a mod 2^256. This is very fast!</p><p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a><br>
 <strong>Returns</strong>: BIG object<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
-<a name="BIG+mod"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigmod-"></a><a href="#bigmod-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>biG.mod() ⇒</h3>
-<p>reduce this mod m</p>
-<p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code>  </p><a name="BIG+mod"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigmod-">biG.mod() ⇒<a class="hash-link" href="#bigmod-" title="Direct link to heading">​</a></h3><p>reduce this mod m</p><p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a><br>
 <strong>Returns</strong>: BIG object<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
-<a name="BIG+div"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigdiv-"></a><a href="#bigdiv-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>biG.div() ⇒</h3>
-<p>this/=m1</p>
-<p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code>  </p><a name="BIG+div"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigdiv-">biG.div() ⇒<a class="hash-link" href="#bigdiv-" title="Direct link to heading">​</a></h3><p>this/=m1</p><p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a><br>
 <strong>Returns</strong>: BIG number<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
-<strong>Paramter</strong>: m1 divisor<br>
-<a name="BIG+parity"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigparity-"></a><a href="#bigparity-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>biG.parity() ⇒</h3>
-<p>return parity of this</p>
-<p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code><br>
+<strong>Paramter</strong>: m1 divisor  </p><a name="BIG+parity"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigparity-">biG.parity() ⇒<a class="hash-link" href="#bigparity-" title="Direct link to heading">​</a></h3><p>return parity of this</p><p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a><br>
 <strong>Returns</strong>: BIG object<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
-<a name="BIG+bit"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigbit-"></a><a href="#bigbit-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>biG.bit() ⇒</h3>
-<p>return n-th bit of this</p>
-<p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code>  </p><a name="BIG+bit"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigbit-">biG.bit() ⇒<a class="hash-link" href="#bigbit-" title="Direct link to heading">​</a></h3><p>return n-th bit of this</p><p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a><br>
 <strong>Returns</strong>: bit value<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
-<strong>Parameter</strong>: nth bit to return<br>
-<a name="BIG+lastbits"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="biglastbits-"></a><a href="#biglastbits-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>biG.lastbits() ⇒</h3>
-<p>return last n bits of this</p>
-<p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: nth bit to return  </p><a name="BIG+lastbits"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="biglastbits-">biG.lastbits() ⇒<a class="hash-link" href="#biglastbits-" title="Direct link to heading">​</a></h3><p>return last n bits of this</p><p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a><br>
 <strong>Returns</strong>: bit values<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
-<strong>Parameter</strong>: n bits to return<br>
-<a name="BIG+jacobi"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigjacobi-"></a><a href="#bigjacobi-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>biG.jacobi() ⇒</h3>
-<p>Jacobi Symbol (this/p)</p>
-<p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: n bits to return  </p><a name="BIG+jacobi"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigjacobi-">biG.jacobi() ⇒<a class="hash-link" href="#bigjacobi-" title="Direct link to heading">​</a></h3><p>Jacobi Symbol (this/p)</p><p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a><br>
 <strong>Returns</strong>: 0, 1 or -1<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
-<strong>Parameter</strong>: p BIG number<br>
-<a name="BIG+invmodp"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="biginvmodp-"></a><a href="#biginvmodp-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>biG.invmodp() ⇒</h3>
-<p>this=1/this mod p. Binary method</p>
-<p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: p BIG number  </p><a name="BIG+invmodp"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="biginvmodp-">biG.invmodp() ⇒<a class="hash-link" href="#biginvmodp-" title="Direct link to heading">​</a></h3><p>this=1/this mod p. Binary method</p><p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a><br>
 <strong>Returns</strong>: BIG object<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
-<strong>Parameter</strong>: p The BIG Modulus<br>
-<a name="BIG+powmod"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigpowmod-"></a><a href="#bigpowmod-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>biG.powmod() ⇒</h3>
-<p>Exponentation modulo m</p>
-<p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: p The BIG Modulus  </p><a name="BIG+powmod"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigpowmod-">biG.powmod() ⇒<a class="hash-link" href="#bigpowmod-" title="Direct link to heading">​</a></h3><p>Exponentation modulo m</p><p><strong>Kind</strong>: instance method of <a href="#BIG"><code>BIG</code></a><br>
 <strong>Returns</strong>: this^e mod m<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: e1 BIG number<br>
-<strong>Parameter</strong>: m  The BIG Modulus<br>
-<a name="BIG.frombytearray"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigfrombytearray-"></a><a href="#bigfrombytearray-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>BIG.frombytearray() ⇒</h3>
-<p>convert from byte array to BIG</p>
-<p><strong>Kind</strong>: static method of <a href="#BIG"><code>BIG</code></a>  <br>
+<strong>Parameter</strong>: m  The BIG Modulus  </p><a name="BIG.frombytearray"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigfrombytearray-">BIG.frombytearray() ⇒<a class="hash-link" href="#bigfrombytearray-" title="Direct link to heading">​</a></h3><p>convert from byte array to BIG</p><p><strong>Kind</strong>: static method of <a href="#BIG"><code>BIG</code></a><br>
 <strong>Returns</strong>: BIG object<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
-<strong>Parameter</strong>: b Bytearray<br>
-<a name="BIG.smul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigsmul-"></a><a href="#bigsmul-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>BIG.smul() ⇒</h3>
-<p>return a*b where product fits a BIG</p>
-<p><strong>Kind</strong>: static method of <a href="#BIG"><code>BIG</code></a>  <br>
-<strong>Returns</strong>: a*b<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: b Bytearray  </p><a name="BIG.smul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigsmul-">BIG.smul() ⇒<a class="hash-link" href="#bigsmul-" title="Direct link to heading">​</a></h3><p>return a<!-- -->*<!-- -->b where product fits a BIG</p><p><strong>Kind</strong>: static method of <a href="#BIG"><code>BIG</code></a><br>
+<strong>Returns</strong>: a<!-- -->*<!-- -->b<br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: a BIG number<br>
-<strong>Parameter</strong>: b BIG number<br>
-<a name="BIG.comp"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigcomp-"></a><a href="#bigcomp-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>BIG.comp() ⇒</h3>
-<p>Compare a and b</p>
-<p><strong>Kind</strong>: static method of <a href="#BIG"><code>BIG</code></a>  <br>
-<strong>Returns</strong>: 0 if a==b, -1 if a&lt;b, +1 if a&gt;b<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
+<strong>Parameter</strong>: b BIG number  </p><a name="BIG.comp"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigcomp-">BIG.comp() ⇒<a class="hash-link" href="#bigcomp-" title="Direct link to heading">​</a></h3><p>Compare a and b</p><p><strong>Kind</strong>: static method of <a href="#BIG"><code>BIG</code></a><br>
+<strong>Returns</strong>: 0 if a==b, -1 if a<!-- -->&lt;<!-- -->b, +1 if a<!-- -->&gt;<!-- -->b<br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: a BIG number (normalised)<br>
-<strong>Parameter</strong>: b BIG number (normalised<br>
-<a name="BIG.random"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigrandom-"></a><a href="#bigrandom-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>BIG.random() ⇒</h3>
-<p>Get 8*MODBYTES size random number</p>
-<p><strong>Kind</strong>: static method of <a href="#BIG"><code>BIG</code></a>  <br>
+<strong>Parameter</strong>: b BIG number (normalised  </p><a name="BIG.random"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigrandom-">BIG.random() ⇒<a class="hash-link" href="#bigrandom-" title="Direct link to heading">​</a></h3><p>Get 8<!-- -->*<!-- -->MODBYTES size random number</p><p><strong>Kind</strong>: static method of <a href="#BIG"><code>BIG</code></a><br>
 <strong>Returns</strong>: BIG number<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
-<strong>Parameter</strong>: rng Cryptographically Secure Random Number Generator<br>
-<a name="BIG.randomnum"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigrandomnum-"></a><a href="#bigrandomnum-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>BIG.randomnum() ⇒</h3>
-<p>Create random BIG in portable way, one bit at a time</p>
-<p><strong>Kind</strong>: static method of <a href="#BIG"><code>BIG</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: rng Cryptographically Secure Random Number Generator  </p><a name="BIG.randomnum"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigrandomnum-">BIG.randomnum() ⇒<a class="hash-link" href="#bigrandomnum-" title="Direct link to heading">​</a></h3><p>Create random BIG in portable way, one bit at a time</p><p><strong>Kind</strong>: static method of <a href="#BIG"><code>BIG</code></a><br>
 <strong>Returns</strong>: BIG number<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: rng Cryptographically Secure Random Number Generator<br>
-<strong>Parameter</strong>: q The BIG Modulus<br>
-<a name="BIG.mul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigmul-"></a><a href="#bigmul-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>BIG.mul() ⇒</h3>
-<p>Multiple two BIG numbers</p>
-<p><strong>Kind</strong>: static method of <a href="#BIG"><code>BIG</code></a>  <br>
-<strong>Returns</strong>: a*b as a DBIG number<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
+<strong>Parameter</strong>: q The BIG Modulus  </p><a name="BIG.mul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigmul-">BIG.mul() ⇒<a class="hash-link" href="#bigmul-" title="Direct link to heading">​</a></h3><p>Multiple two BIG numbers</p><p><strong>Kind</strong>: static method of <a href="#BIG"><code>BIG</code></a><br>
+<strong>Returns</strong>: a<!-- -->*<!-- -->b as a DBIG number<br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: a BIG number<br>
-<strong>Parameter</strong>: b BIG number<br>
-<a name="BIG.sqr"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigsqr-"></a><a href="#bigsqr-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>BIG.sqr() ⇒</h3>
-<p>Square two BIG numbers</p>
-<p><strong>Kind</strong>: static method of <a href="#BIG"><code>BIG</code></a>  <br>
-<strong>Returns</strong>: a*2 as a DBIG number<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
-<strong>Parameter</strong>: a BIG number<br>
-<a name="BIG.modmul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigmodmul-"></a><a href="#bigmodmul-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>BIG.modmul() ⇒</h3>
-<p>Multiple two BIG numbers modulo m</p>
-<p><strong>Kind</strong>: static method of <a href="#BIG"><code>BIG</code></a>  <br>
-<strong>Returns</strong>: a1*b1 mod m  as a BIG number<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
+<strong>Parameter</strong>: b BIG number  </p><a name="BIG.sqr"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigsqr-">BIG.sqr() ⇒<a class="hash-link" href="#bigsqr-" title="Direct link to heading">​</a></h3><p>Square two BIG numbers</p><p><strong>Kind</strong>: static method of <a href="#BIG"><code>BIG</code></a><br>
+<strong>Returns</strong>: a<!-- -->*<!-- -->2 as a DBIG number<br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: a BIG number  </p><a name="BIG.modmul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigmodmul-">BIG.modmul() ⇒<a class="hash-link" href="#bigmodmul-" title="Direct link to heading">​</a></h3><p>Multiple two BIG numbers modulo m</p><p><strong>Kind</strong>: static method of <a href="#BIG"><code>BIG</code></a><br>
+<strong>Returns</strong>: a1<!-- -->*<!-- -->b1 mod m  as a BIG number<br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: a1 BIG number<br>
 <strong>Parameter</strong>: b1 BIG number<br>
-<strong>Parameter</strong>: m The BIG Modulus<br>
-<a name="BIG.modsqr"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigmodsqr-"></a><a href="#bigmodsqr-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>BIG.modsqr() ⇒</h3>
-<p>Square a BIG number modulo m</p>
-<p><strong>Kind</strong>: static method of <a href="#BIG"><code>BIG</code></a>  <br>
-<strong>Returns</strong>: a*2 mod m  as a BIG number<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
+<strong>Parameter</strong>: m The BIG Modulus  </p><a name="BIG.modsqr"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigmodsqr-">BIG.modsqr() ⇒<a class="hash-link" href="#bigmodsqr-" title="Direct link to heading">​</a></h3><p>Square a BIG number modulo m</p><p><strong>Kind</strong>: static method of <a href="#BIG"><code>BIG</code></a><br>
+<strong>Returns</strong>: a<!-- -->*<!-- -->2 mod m  as a BIG number<br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: a1 BIG number<br>
-<strong>Parameter</strong>: m The BIG Modulus<br>
-<a name="BIG.modneg"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bigmodneg-"></a><a href="#bigmodneg-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>BIG.modneg() ⇒</h3>
-<p>Inversion</p>
-<p><strong>Kind</strong>: static method of <a href="#BIG"><code>BIG</code></a>  <br>
+<strong>Parameter</strong>: m The BIG Modulus  </p><a name="BIG.modneg"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bigmodneg-">BIG.modneg() ⇒<a class="hash-link" href="#bigmodneg-" title="Direct link to heading">​</a></h3><p>Inversion</p><p><strong>Kind</strong>: static method of <a href="#BIG"><code>BIG</code></a><br>
 <strong>Returns</strong>: -a1 mod m<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: a1 BIG number<br>
-<strong>Parameter</strong>: m The BIG Modulus<br>
-<a name="BIG.invmod256"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="biginvmod256-"></a><a href="#biginvmod256-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>BIG.invmod256() ⇒</h3>
-<p>Arazi and Qi inversion mod 256</p>
-<p><strong>Kind</strong>: static method of <a href="#BIG"><code>BIG</code></a>  <br>
+<strong>Parameter</strong>: m The BIG Modulus  </p><a name="BIG.invmod256"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="biginvmod256-">BIG.invmod256() ⇒<a class="hash-link" href="#biginvmod256-" title="Direct link to heading">​</a></h3><p>Arazi and Qi inversion mod 256</p><p><strong>Kind</strong>: static method of <a href="#BIG"><code>BIG</code></a><br>
 <strong>Returns</strong>: BIG number<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
-<strong>Parameter</strong>: a BIG number</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/cryptojs/aes"><span class="arrow-prev">← </span><span>AES</span></a><a class="docs-next button" href="/docs/cryptojs/bls"><span>BLS</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#big">BIG</a><ul class="toc-headings"><li><a href="#new-big">new BIG()</a></li><li><a href="#bigzero-">biG.zero() ⇒</a></li><li><a href="#bigone-">biG.one() ⇒</a></li><li><a href="#bigiszilch-">biG.iszilch() ⇒</a></li><li><a href="#bigisunity-">biG.isunity() ⇒</a></li><li><a href="#bigcswap">biG.cswap()</a></li><li><a href="#bigcmove">biG.cmove()</a></li><li><a href="#bigcopy-">biG.copy() ⇒</a></li><li><a href="#bighcopy-">biG.hcopy() ⇒</a></li><li><a href="#bigrcopy-">biG.rcopy() ⇒</a></li><li><a href="#bignorm-">biG.norm() ⇒</a></li><li><a href="#bigfshr-">biG.fshr() ⇒</a></li><li><a href="#bigshr-">biG.shr() ⇒</a></li><li><a href="#bigfshl-">biG.fshl() ⇒</a></li><li><a href="#bigshl-">biG.shl() ⇒</a></li><li><a href="#bignbits-">biG.nbits() ⇒</a></li><li><a href="#bigtostring-">biG.toString() ⇒</a></li><li><a href="#bigadd-">biG.add() ⇒</a></li><li><a href="#bigor-">biG.or() ⇒</a></li><li><a href="#bigplus-">biG.plus() ⇒</a></li><li><a href="#biginc-">biG.inc() ⇒</a></li><li><a href="#bigsub-">biG.sub() ⇒</a></li><li><a href="#bigrsub-">biG.rsub() ⇒</a></li><li><a href="#bigdec-">biG.dec() ⇒</a></li><li><a href="#bigminus-">biG.minus() ⇒</a></li><li><a href="#bigimul-">biG.imul() ⇒</a></li><li><a href="#bigtobytearray">biG.tobytearray()</a></li><li><a href="#bigtobytes">biG.toBytes()</a></li><li><a href="#bigmuladd">biG.muladd()</a></li><li><a href="#bigpmul-">biG.pmul() ⇒</a></li><li><a href="#bigpxmul-">biG.pxmul() ⇒</a></li><li><a href="#bigdiv3-">biG.div3() ⇒</a></li><li><a href="#bigmod2m-">biG.mod2m() ⇒</a></li><li><a href="#biginvmod2m-">biG.invmod2m() ⇒</a></li><li><a href="#bigmod-">biG.mod() ⇒</a></li><li><a href="#bigdiv-">biG.div() ⇒</a></li><li><a href="#bigparity-">biG.parity() ⇒</a></li><li><a href="#bigbit-">biG.bit() ⇒</a></li><li><a href="#biglastbits-">biG.lastbits() ⇒</a></li><li><a href="#bigjacobi-">biG.jacobi() ⇒</a></li><li><a href="#biginvmodp-">biG.invmodp() ⇒</a></li><li><a href="#bigpowmod-">biG.powmod() ⇒</a></li><li><a href="#bigfrombytearray-">BIG.frombytearray() ⇒</a></li><li><a href="#bigsmul-">BIG.smul() ⇒</a></li><li><a href="#bigcomp-">BIG.comp() ⇒</a></li><li><a href="#bigrandom-">BIG.random() ⇒</a></li><li><a href="#bigrandomnum-">BIG.randomnum() ⇒</a></li><li><a href="#bigmul-">BIG.mul() ⇒</a></li><li><a href="#bigsqr-">BIG.sqr() ⇒</a></li><li><a href="#bigmodmul-">BIG.modmul() ⇒</a></li><li><a href="#bigmodsqr-">BIG.modsqr() ⇒</a></li><li><a href="#bigmodneg-">BIG.modneg() ⇒</a></li><li><a href="#biginvmod256-">BIG.invmod256() ⇒</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: a BIG number</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/cryptojs/aes"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">AES</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/cryptojs/bls"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">BLS</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#big" class="table-of-contents__link toc-highlight">BIG</a><ul><li><a href="#new-big" class="table-of-contents__link toc-highlight">new BIG()</a></li><li><a href="#bigzero-" class="table-of-contents__link toc-highlight">biG.zero() ⇒</a></li><li><a href="#bigone-" class="table-of-contents__link toc-highlight">biG.one() ⇒</a></li><li><a href="#bigiszilch-" class="table-of-contents__link toc-highlight">biG.iszilch() ⇒</a></li><li><a href="#bigisunity-" class="table-of-contents__link toc-highlight">biG.isunity() ⇒</a></li><li><a href="#bigcswap" class="table-of-contents__link toc-highlight">biG.cswap()</a></li><li><a href="#bigcmove" class="table-of-contents__link toc-highlight">biG.cmove()</a></li><li><a href="#bigcopy-" class="table-of-contents__link toc-highlight">biG.copy() ⇒</a></li><li><a href="#bighcopy-" class="table-of-contents__link toc-highlight">biG.hcopy() ⇒</a></li><li><a href="#bigrcopy-" class="table-of-contents__link toc-highlight">biG.rcopy() ⇒</a></li><li><a href="#bignorm-" class="table-of-contents__link toc-highlight">biG.norm() ⇒</a></li><li><a href="#bigfshr-" class="table-of-contents__link toc-highlight">biG.fshr() ⇒</a></li><li><a href="#bigshr-" class="table-of-contents__link toc-highlight">biG.shr() ⇒</a></li><li><a href="#bigfshl-" class="table-of-contents__link toc-highlight">biG.fshl() ⇒</a></li><li><a href="#bigshl-" class="table-of-contents__link toc-highlight">biG.shl() ⇒</a></li><li><a href="#bignbits-" class="table-of-contents__link toc-highlight">biG.nbits() ⇒</a></li><li><a href="#bigtostring-" class="table-of-contents__link toc-highlight">biG.toString() ⇒</a></li><li><a href="#bigadd-" class="table-of-contents__link toc-highlight">biG.add() ⇒</a></li><li><a href="#bigor-" class="table-of-contents__link toc-highlight">biG.or() ⇒</a></li><li><a href="#bigplus-" class="table-of-contents__link toc-highlight">biG.plus() ⇒</a></li><li><a href="#biginc-" class="table-of-contents__link toc-highlight">biG.inc() ⇒</a></li><li><a href="#bigsub-" class="table-of-contents__link toc-highlight">biG.sub() ⇒</a></li><li><a href="#bigrsub-" class="table-of-contents__link toc-highlight">biG.rsub() ⇒</a></li><li><a href="#bigdec-" class="table-of-contents__link toc-highlight">biG.dec() ⇒</a></li><li><a href="#bigminus-" class="table-of-contents__link toc-highlight">biG.minus() ⇒</a></li><li><a href="#bigimul-" class="table-of-contents__link toc-highlight">biG.imul() ⇒</a></li><li><a href="#bigtobytearray" class="table-of-contents__link toc-highlight">biG.tobytearray()</a></li><li><a href="#bigtobytes" class="table-of-contents__link toc-highlight">biG.toBytes()</a></li><li><a href="#bigmuladd" class="table-of-contents__link toc-highlight">biG.muladd()</a></li><li><a href="#bigpmul-" class="table-of-contents__link toc-highlight">biG.pmul() ⇒</a></li><li><a href="#bigpxmul-" class="table-of-contents__link toc-highlight">biG.pxmul() ⇒</a></li><li><a href="#bigdiv3-" class="table-of-contents__link toc-highlight">biG.div3() ⇒</a></li><li><a href="#bigmod2m-" class="table-of-contents__link toc-highlight">biG.mod2m() ⇒</a></li><li><a href="#biginvmod2m-" class="table-of-contents__link toc-highlight">biG.invmod2m() ⇒</a></li><li><a href="#bigmod-" class="table-of-contents__link toc-highlight">biG.mod() ⇒</a></li><li><a href="#bigdiv-" class="table-of-contents__link toc-highlight">biG.div() ⇒</a></li><li><a href="#bigparity-" class="table-of-contents__link toc-highlight">biG.parity() ⇒</a></li><li><a href="#bigbit-" class="table-of-contents__link toc-highlight">biG.bit() ⇒</a></li><li><a href="#biglastbits-" class="table-of-contents__link toc-highlight">biG.lastbits() ⇒</a></li><li><a href="#bigjacobi-" class="table-of-contents__link toc-highlight">biG.jacobi() ⇒</a></li><li><a href="#biginvmodp-" class="table-of-contents__link toc-highlight">biG.invmodp() ⇒</a></li><li><a href="#bigpowmod-" class="table-of-contents__link toc-highlight">biG.powmod() ⇒</a></li><li><a href="#bigfrombytearray-" class="table-of-contents__link toc-highlight">BIG.frombytearray() ⇒</a></li><li><a href="#bigsmul-" class="table-of-contents__link toc-highlight">BIG.smul() ⇒</a></li><li><a href="#bigcomp-" class="table-of-contents__link toc-highlight">BIG.comp() ⇒</a></li><li><a href="#bigrandom-" class="table-of-contents__link toc-highlight">BIG.random() ⇒</a></li><li><a href="#bigrandomnum-" class="table-of-contents__link toc-highlight">BIG.randomnum() ⇒</a></li><li><a href="#bigmul-" class="table-of-contents__link toc-highlight">BIG.mul() ⇒</a></li><li><a href="#bigsqr-" class="table-of-contents__link toc-highlight">BIG.sqr() ⇒</a></li><li><a href="#bigmodmul-" class="table-of-contents__link toc-highlight">BIG.modmul() ⇒</a></li><li><a href="#bigmodsqr-" class="table-of-contents__link toc-highlight">BIG.modsqr() ⇒</a></li><li><a href="#bigmodneg-" class="table-of-contents__link toc-highlight">BIG.modneg() ⇒</a></li><li><a href="#biginvmod256-" class="table-of-contents__link toc-highlight">BIG.invmod256() ⇒</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/cryptojs/bls/index.html b/docs/cryptojs/bls/index.html
index 57278ea..2496ced 100644
--- a/docs/cryptojs/bls/index.html
+++ b/docs/cryptojs/bls/index.html
@@ -1,144 +1,57 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>BLS · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;a name=&quot;BLS&quot;&gt;&lt;/a&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="BLS · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;a name=&quot;BLS&quot;&gt;&lt;/a&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>AMCL JavaScript API 1.0.0</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-cryptojs/bls">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">BLS | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/cryptojs/bls"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="BLS | Apache Milagro"><meta data-rh="true" name="description" content="BLS"><meta data-rh="true" property="og:description" content="BLS"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/cryptojs/bls"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/bls" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/bls" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">BLS</h1></header><article><div><span><p><a name="BLS"></a></p>
-<h2><a class="anchor" aria-hidden="true" id="bls"></a><a href="#bls" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>BLS</h2>
-<p><strong>Kind</strong>: global class<br>
-<strong>this</strong>: <code>{BLS}</code></p>
-<ul>
-<li><a href="#BLS">BLS</a>
-<ul>
-<li><a href="#new_BLS_new">new BLS()</a></li>
-<li><a href="#BLS.bytestostring">.bytestostring()</a> ⇒</li>
-<li><a href="#BLS.stringtobytes">.stringtobytes()</a> ⇒</li>
-<li><a href="#BLS.bls_hashit">.bls_hashit()</a> ⇒</li>
-<li><a href="#BLS.KeyPairGenerate">.KeyPairGenerate()</a> ⇒</li>
-<li><a href="#BLS.sign">.sign()</a> ⇒</li>
-<li><a href="#BLS.verify">.verify()</a> ⇒</li>
-<li><a href="#BLS.add_G1">.add_G1()</a> ⇒</li>
-<li><a href="#BLS.add_G2">.add_G2()</a> ⇒</li>
-</ul></li>
-</ul>
-<p><a name="new_BLS_new"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="new-bls"></a><a href="#new-bls" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>new BLS()</h3>
-<p>Creates an instance of BLS</p>
-<p><a name="BLS.bytestostring"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="blsbytestostring-"></a><a href="#blsbytestostring-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>BLS.bytestostring() ⇒</h3>
-<p>Convert byte array to string</p>
-<p><strong>Kind</strong>: static method of <a href="#BLS"><code>BLS</code></a>  <br>
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/amcl-overview">AMCL Library</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-overview">AMCL Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API 1.0.0</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/aes">AES</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/big">BIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/cryptojs/bls">BLS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls192">BLS192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls256">BLS256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/dbig">DBIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp">ECP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ff">FF</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp">FP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp2">FP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp4">FP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp8">FP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp12">FP12</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp16">FP16</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp24">FP24</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp48">FP48</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/gcm">GCM</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash256">HASH256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash384">HASH384</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash512">HASH512</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin">MPIN</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair">PAIR</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rand">RAND</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rsa">RSA</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/sha3">SHA3</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/unit64">UInt64</a></li></ul></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL Library</span><meta itemprop="position" content="1"></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL JavaScript API 1.0.0</span><meta itemprop="position" content="2"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">BLS</span><meta itemprop="position" content="3"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>BLS</h1></header><a name="BLS"></a><h2 class="anchor anchorWithStickyNavbar_LWe7" id="bls">BLS<a class="hash-link" href="#bls" title="Direct link to heading">​</a></h2><p><strong>Kind</strong>: global class<br>
+<strong>this</strong>: <code>{&quot;{&quot;}BLS{&quot;}&quot;}</code>  </p><ul><li><a href="#BLS">BLS</a><ul><li><a href="#new_BLS_new">new BLS()</a></li><li><a href="#BLS.bytestostring">.bytestostring()</a> ⇒</li><li><a href="#BLS.stringtobytes">.stringtobytes()</a> ⇒</li><li><a href="#BLS.bls_hashit">.bls_hashit()</a> ⇒</li><li><a href="#BLS.KeyPairGenerate">.KeyPairGenerate()</a> ⇒</li><li><a href="#BLS.sign">.sign()</a> ⇒</li><li><a href="#BLS.verify">.verify()</a> ⇒</li><li><a href="#BLS.add_G1">.add_G1()</a> ⇒</li><li><a href="#BLS.add_G2">.add_G2()</a> ⇒</li></ul></li></ul><a name="new_BLS_new"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="new-bls">new BLS()<a class="hash-link" href="#new-bls" title="Direct link to heading">​</a></h3><p>Creates an instance of BLS</p><a name="BLS.bytestostring"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="blsbytestostring-">BLS.bytestostring() ⇒<a class="hash-link" href="#blsbytestostring-" title="Direct link to heading">​</a></h3><p>Convert byte array to string</p><p><strong>Kind</strong>: static method of <a href="#BLS"><code>BLS</code></a><br>
 <strong>Returns</strong>: string<br>
-<strong>this</strong>: <code>{BLS}</code>  <br>
-<strong>Parameter</strong>: b byte array<br>
-<a name="BLS.stringtobytes"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="blsstringtobytes-"></a><a href="#blsstringtobytes-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>BLS.stringtobytes() ⇒</h3>
-<p>Convert string to byte array</p>
-<p><strong>Kind</strong>: static method of <a href="#BLS"><code>BLS</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BLS{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: b byte array  </p><a name="BLS.stringtobytes"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="blsstringtobytes-">BLS.stringtobytes() ⇒<a class="hash-link" href="#blsstringtobytes-" title="Direct link to heading">​</a></h3><p>Convert string to byte array</p><p><strong>Kind</strong>: static method of <a href="#BLS"><code>BLS</code></a><br>
 <strong>Returns</strong>: byte array<br>
-<strong>this</strong>: <code>{BLS}</code>  <br>
-<strong>Parameter</strong>: s string<br>
-<a name="BLS.bls_hashit"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="blsbls_hashit-"></a><a href="#blsbls_hashit-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>BLS.bls_hashit() ⇒</h3>
-<p>hash a message to an ECP point, using SHA3</p>
-<p><strong>Kind</strong>: static method of <a href="#BLS"><code>BLS</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BLS{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: s string  </p><a name="BLS.bls_hashit"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="blsbls_hashit-">BLS.bls_hashit() ⇒<a class="hash-link" href="#blsbls_hashit-" title="Direct link to heading">​</a></h3><p>hash a message to an ECP point, using SHA3</p><p><strong>Kind</strong>: static method of <a href="#BLS"><code>BLS</code></a><br>
 <strong>Returns</strong>: ECP point<br>
-<strong>this</strong>: <code>{BLS}</code>  <br>
-<strong>Parameter</strong>: m message to be hashedstring<br>
-<a name="BLS.KeyPairGenerate"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="blskeypairgenerate-"></a><a href="#blskeypairgenerate-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>BLS.KeyPairGenerate() ⇒</h3>
-<p>Generate key pair</p>
-<p><strong>Kind</strong>: static method of <a href="#BLS"><code>BLS</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BLS{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: m message to be hashedstring  </p><a name="BLS.KeyPairGenerate"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="blskeypairgenerate-">BLS.KeyPairGenerate() ⇒<a class="hash-link" href="#blskeypairgenerate-" title="Direct link to heading">​</a></h3><p>Generate key pair</p><p><strong>Kind</strong>: static method of <a href="#BLS"><code>BLS</code></a><br>
 <strong>Returns</strong>: Error code<br>
-<strong>this</strong>: <code>{BLS}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BLS{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: rng Cryptographically Secure Random Number Generator<br>
 <strong>Parameter</strong>: S Private key<br>
-<strong>Parameter</strong>: W Public key<br>
-<a name="BLS.sign"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="blssign-"></a><a href="#blssign-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>BLS.sign() ⇒</h3>
-<p>Sign message</p>
-<p><strong>Kind</strong>: static method of <a href="#BLS"><code>BLS</code></a>  <br>
+<strong>Parameter</strong>: W Public key  </p><a name="BLS.sign"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="blssign-">BLS.sign() ⇒<a class="hash-link" href="#blssign-" title="Direct link to heading">​</a></h3><p>Sign message</p><p><strong>Kind</strong>: static method of <a href="#BLS"><code>BLS</code></a><br>
 <strong>Returns</strong>: Error code<br>
-<strong>this</strong>: <code>{BLS}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BLS{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: SIG Singature<br>
 <strong>Parameter</strong>: m Message to sign<br>
-<strong>Parameter</strong>: S Private key<br>
-<a name="BLS.verify"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="blsverify-"></a><a href="#blsverify-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>BLS.verify() ⇒</h3>
-<p>Verify message</p>
-<p><strong>Kind</strong>: static method of <a href="#BLS"><code>BLS</code></a>  <br>
+<strong>Parameter</strong>: S Private key  </p><a name="BLS.verify"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="blsverify-">BLS.verify() ⇒<a class="hash-link" href="#blsverify-" title="Direct link to heading">​</a></h3><p>Verify message</p><p><strong>Kind</strong>: static method of <a href="#BLS"><code>BLS</code></a><br>
 <strong>Returns</strong>: Error code<br>
-<strong>this</strong>: <code>{BLS}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BLS{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: SIG Signature<br>
 <strong>Parameter</strong>: m Message to sign<br>
-<strong>Parameter</strong>: W Public key<br>
-<a name="BLS.add_G1"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="blsadd_g1-"></a><a href="#blsadd_g1-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>BLS.add_G1() ⇒</h3>
-<p>R=R1+R2 in group G1</p>
-<p><strong>Kind</strong>: static method of <a href="#BLS"><code>BLS</code></a>  <br>
+<strong>Parameter</strong>: W Public key  </p><a name="BLS.add_G1"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="blsadd_g1-">BLS.add_G1() ⇒<a class="hash-link" href="#blsadd_g1-" title="Direct link to heading">​</a></h3><p>R=R1+R2 in group G1</p><p><strong>Kind</strong>: static method of <a href="#BLS"><code>BLS</code></a><br>
 <strong>Returns</strong>: Error code<br>
-<strong>this</strong>: <code>{BLS}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BLS{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: R1 G1 Point<br>
 <strong>Parameter</strong>: R2 G1 Point<br>
-<strong>Parameter</strong>: R G1 Point<br>
-<a name="BLS.add_G2"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="blsadd_g2-"></a><a href="#blsadd_g2-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>BLS.add_G2() ⇒</h3>
-<p>W=W1+W2 in group G2</p>
-<p><strong>Kind</strong>: static method of <a href="#BLS"><code>BLS</code></a>  <br>
+<strong>Parameter</strong>: R G1 Point  </p><a name="BLS.add_G2"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="blsadd_g2-">BLS.add_G2() ⇒<a class="hash-link" href="#blsadd_g2-" title="Direct link to heading">​</a></h3><p>W=W1+W2 in group G2</p><p><strong>Kind</strong>: static method of <a href="#BLS"><code>BLS</code></a><br>
 <strong>Returns</strong>: Error code<br>
-<strong>this</strong>: <code>{BLS}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BLS{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: W1 G2 Point<br>
 <strong>Parameter</strong>: W2 G2 Point<br>
-<strong>Parameter</strong>: R G2 Point</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/cryptojs/big"><span class="arrow-prev">← </span><span>BIG</span></a><a class="docs-next button" href="/docs/cryptojs/bls192"><span>BLS192</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bls">BLS</a><ul class="toc-headings"><li><a href="#new-bls">new BLS()</a></li><li><a href="#blsbytestostring-">BLS.bytestostring() ⇒</a></li><li><a href="#blsstringtobytes-">BLS.stringtobytes() ⇒</a></li><li><a href="#blsbls_hashit-">BLS.bls_hashit() ⇒</a></li><li><a href="#blskeypairgenerate-">BLS.KeyPairGenerate() ⇒</a></li><li><a href="#blssign-">BLS.sign() ⇒</a></li><li><a href="#blsverify-">BLS.verify() ⇒</a></li><li><a href="#blsadd_g1-">BLS.add_G1() ⇒</a></li><li><a href="#blsadd_g2-">BLS.add_G2() ⇒</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<strong>Parameter</strong>: R G2 Point</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/cryptojs/big"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">BIG</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/cryptojs/bls192"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">BLS192</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#bls" class="table-of-contents__link toc-highlight">BLS</a><ul><li><a href="#new-bls" class="table-of-contents__link toc-highlight">new BLS()</a></li><li><a href="#blsbytestostring-" class="table-of-contents__link toc-highlight">BLS.bytestostring() ⇒</a></li><li><a href="#blsstringtobytes-" class="table-of-contents__link toc-highlight">BLS.stringtobytes() ⇒</a></li><li><a href="#blsbls_hashit-" class="table-of-contents__link toc-highlight">BLS.bls_hashit() ⇒</a></li><li><a href="#blskeypairgenerate-" class="table-of-contents__link toc-highlight">BLS.KeyPairGenerate() ⇒</a></li><li><a href="#blssign-" class="table-of-contents__link toc-highlight">BLS.sign() ⇒</a></li><li><a href="#blsverify-" class="table-of-contents__link toc-highlight">BLS.verify() ⇒</a></li><li><a href="#blsadd_g1-" class="table-of-contents__link toc-highlight">BLS.add_G1() ⇒</a></li><li><a href="#blsadd_g2-" class="table-of-contents__link toc-highlight">BLS.add_G2() ⇒</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/cryptojs/bls192/index.html b/docs/cryptojs/bls192/index.html
index 2d89ffe..6843ec7 100644
--- a/docs/cryptojs/bls192/index.html
+++ b/docs/cryptojs/bls192/index.html
@@ -1,144 +1,57 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>BLS192 · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;a name=&quot;BLS192&quot;&gt;&lt;/a&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="BLS192 · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;a name=&quot;BLS192&quot;&gt;&lt;/a&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>AMCL JavaScript API 1.0.0</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-cryptojs/bls192">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">BLS192 | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/cryptojs/bls192"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="BLS192 | Apache Milagro"><meta data-rh="true" name="description" content="BLS192"><meta data-rh="true" property="og:description" content="BLS192"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/cryptojs/bls192"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/bls192" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/bls192" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">BLS192</h1></header><article><div><span><p><a name="BLS192"></a></p>
-<h2><a class="anchor" aria-hidden="true" id="bls192"></a><a href="#bls192" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>BLS192</h2>
-<p><strong>Kind</strong>: global class<br>
-<strong>this</strong>: <code>{BLS192}</code></p>
-<ul>
-<li><a href="#BLS192">BLS192</a>
-<ul>
-<li><a href="#new_BLS192_new">new BLS192()</a></li>
-<li><a href="#BLS192.bytestostring">.bytestostring()</a> ⇒</li>
-<li><a href="#BLS192.stringtobytes">.stringtobytes()</a> ⇒</li>
-<li><a href="#BLS192.bls_hashit">.bls_hashit()</a> ⇒</li>
-<li><a href="#BLS192.KeyPairGenerate">.KeyPairGenerate()</a> ⇒</li>
-<li><a href="#BLS192.sign">.sign()</a> ⇒</li>
-<li><a href="#BLS192.verify">.verify()</a> ⇒</li>
-<li><a href="#BLS192.add_G1">.add_G1()</a> ⇒</li>
-<li><a href="#BLS192.add_G2">.add_G2()</a> ⇒</li>
-</ul></li>
-</ul>
-<p><a name="new_BLS192_new"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="new-bls192"></a><a href="#new-bls192" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>new BLS192()</h3>
-<p>Creates an instance of BLS192</p>
-<p><a name="BLS192.bytestostring"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bls192bytestostring-"></a><a href="#bls192bytestostring-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>BLS192.bytestostring() ⇒</h3>
-<p>Convert byte array to string</p>
-<p><strong>Kind</strong>: static method of <a href="#BLS192"><code>BLS192</code></a>  <br>
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/amcl-overview">AMCL Library</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-overview">AMCL Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API 1.0.0</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/aes">AES</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/big">BIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls">BLS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/cryptojs/bls192">BLS192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls256">BLS256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/dbig">DBIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp">ECP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ff">FF</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp">FP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp2">FP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp4">FP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp8">FP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp12">FP12</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp16">FP16</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp24">FP24</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp48">FP48</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/gcm">GCM</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash256">HASH256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash384">HASH384</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash512">HASH512</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin">MPIN</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair">PAIR</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rand">RAND</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rsa">RSA</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/sha3">SHA3</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/unit64">UInt64</a></li></ul></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL Library</span><meta itemprop="position" content="1"></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL JavaScript API 1.0.0</span><meta itemprop="position" content="2"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">BLS192</span><meta itemprop="position" content="3"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>BLS192</h1></header><a name="BLS192"></a><h2 class="anchor anchorWithStickyNavbar_LWe7" id="bls192">BLS192<a class="hash-link" href="#bls192" title="Direct link to heading">​</a></h2><p><strong>Kind</strong>: global class<br>
+<strong>this</strong>: <code>{&quot;{&quot;}BLS192{&quot;}&quot;}</code>  </p><ul><li><a href="#BLS192">BLS192</a><ul><li><a href="#new_BLS192_new">new BLS192()</a></li><li><a href="#BLS192.bytestostring">.bytestostring()</a> ⇒</li><li><a href="#BLS192.stringtobytes">.stringtobytes()</a> ⇒</li><li><a href="#BLS192.bls_hashit">.bls_hashit()</a> ⇒</li><li><a href="#BLS192.KeyPairGenerate">.KeyPairGenerate()</a> ⇒</li><li><a href="#BLS192.sign">.sign()</a> ⇒</li><li><a href="#BLS192.verify">.verify()</a> ⇒</li><li><a href="#BLS192.add_G1">.add_G1()</a> ⇒</li><li><a href="#BLS192.add_G2">.add_G2()</a> ⇒</li></ul></li></ul><a name="new_BLS192_new"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="new-bls192">new BLS192()<a class="hash-link" href="#new-bls192" title="Direct link to heading">​</a></h3><p>Creates an instance of BLS192</p><a name="BLS192.bytestostring"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bls192bytestostring-">BLS192.bytestostring() ⇒<a class="hash-link" href="#bls192bytestostring-" title="Direct link to heading">​</a></h3><p>Convert byte array to string</p><p><strong>Kind</strong>: static method of <a href="#BLS192"><code>BLS192</code></a><br>
 <strong>Returns</strong>: string<br>
-<strong>this</strong>: <code>{BLS192}</code>  <br>
-<strong>Parameter</strong>: b byte array<br>
-<a name="BLS192.stringtobytes"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bls192stringtobytes-"></a><a href="#bls192stringtobytes-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>BLS192.stringtobytes() ⇒</h3>
-<p>Convert string to byte array</p>
-<p><strong>Kind</strong>: static method of <a href="#BLS192"><code>BLS192</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BLS192{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: b byte array  </p><a name="BLS192.stringtobytes"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bls192stringtobytes-">BLS192.stringtobytes() ⇒<a class="hash-link" href="#bls192stringtobytes-" title="Direct link to heading">​</a></h3><p>Convert string to byte array</p><p><strong>Kind</strong>: static method of <a href="#BLS192"><code>BLS192</code></a><br>
 <strong>Returns</strong>: byte array<br>
-<strong>this</strong>: <code>{BLS192}</code>  <br>
-<strong>Parameter</strong>: s string<br>
-<a name="BLS192.bls_hashit"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bls192bls_hashit-"></a><a href="#bls192bls_hashit-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>BLS192.bls_hashit() ⇒</h3>
-<p>hash a message to an ECP point, using SHA3</p>
-<p><strong>Kind</strong>: static method of <a href="#BLS192"><code>BLS192</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BLS192{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: s string  </p><a name="BLS192.bls_hashit"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bls192bls_hashit-">BLS192.bls_hashit() ⇒<a class="hash-link" href="#bls192bls_hashit-" title="Direct link to heading">​</a></h3><p>hash a message to an ECP point, using SHA3</p><p><strong>Kind</strong>: static method of <a href="#BLS192"><code>BLS192</code></a><br>
 <strong>Returns</strong>: ECP point<br>
-<strong>this</strong>: <code>{BLS192}</code>  <br>
-<strong>Parameter</strong>: m message to be hashedstring<br>
-<a name="BLS192.KeyPairGenerate"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bls192keypairgenerate-"></a><a href="#bls192keypairgenerate-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>BLS192.KeyPairGenerate() ⇒</h3>
-<p>Generate key pair</p>
-<p><strong>Kind</strong>: static method of <a href="#BLS192"><code>BLS192</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BLS192{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: m message to be hashedstring  </p><a name="BLS192.KeyPairGenerate"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bls192keypairgenerate-">BLS192.KeyPairGenerate() ⇒<a class="hash-link" href="#bls192keypairgenerate-" title="Direct link to heading">​</a></h3><p>Generate key pair</p><p><strong>Kind</strong>: static method of <a href="#BLS192"><code>BLS192</code></a><br>
 <strong>Returns</strong>: Error code<br>
-<strong>this</strong>: <code>{BLS192}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BLS192{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: rng Cryptographically Secure Random Number Generator<br>
 <strong>Parameter</strong>: S Private key<br>
-<strong>Parameter</strong>: W Public key<br>
-<a name="BLS192.sign"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bls192sign-"></a><a href="#bls192sign-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>BLS192.sign() ⇒</h3>
-<p>Sign message</p>
-<p><strong>Kind</strong>: static method of <a href="#BLS192"><code>BLS192</code></a>  <br>
+<strong>Parameter</strong>: W Public key  </p><a name="BLS192.sign"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bls192sign-">BLS192.sign() ⇒<a class="hash-link" href="#bls192sign-" title="Direct link to heading">​</a></h3><p>Sign message</p><p><strong>Kind</strong>: static method of <a href="#BLS192"><code>BLS192</code></a><br>
 <strong>Returns</strong>: Error code<br>
-<strong>this</strong>: <code>{BLS192}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BLS192{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: SIG Singature<br>
 <strong>Parameter</strong>: m Message to sign<br>
-<strong>Parameter</strong>: S Private key<br>
-<a name="BLS192.verify"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bls192verify-"></a><a href="#bls192verify-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>BLS192.verify() ⇒</h3>
-<p>Verify message</p>
-<p><strong>Kind</strong>: static method of <a href="#BLS192"><code>BLS192</code></a>  <br>
+<strong>Parameter</strong>: S Private key  </p><a name="BLS192.verify"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bls192verify-">BLS192.verify() ⇒<a class="hash-link" href="#bls192verify-" title="Direct link to heading">​</a></h3><p>Verify message</p><p><strong>Kind</strong>: static method of <a href="#BLS192"><code>BLS192</code></a><br>
 <strong>Returns</strong>: Error code<br>
-<strong>this</strong>: <code>{BLS192}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BLS192{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: SIG Signature<br>
 <strong>Parameter</strong>: m Message to sign<br>
-<strong>Parameter</strong>: W Public key<br>
-<a name="BLS192.add_G1"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bls192add_g1-"></a><a href="#bls192add_g1-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>BLS192.add_G1() ⇒</h3>
-<p>R=R1+R2 in group G1</p>
-<p><strong>Kind</strong>: static method of <a href="#BLS192"><code>BLS192</code></a>  <br>
+<strong>Parameter</strong>: W Public key  </p><a name="BLS192.add_G1"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bls192add_g1-">BLS192.add_G1() ⇒<a class="hash-link" href="#bls192add_g1-" title="Direct link to heading">​</a></h3><p>R=R1+R2 in group G1</p><p><strong>Kind</strong>: static method of <a href="#BLS192"><code>BLS192</code></a><br>
 <strong>Returns</strong>: Error code<br>
-<strong>this</strong>: <code>{BLS192}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BLS192{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: R1 G1 Point<br>
 <strong>Parameter</strong>: R2 G1 Point<br>
-<strong>Parameter</strong>: R G1 Point<br>
-<a name="BLS192.add_G2"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bls192add_g2-"></a><a href="#bls192add_g2-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>BLS192.add_G2() ⇒</h3>
-<p>W=W1+W2 in group G2</p>
-<p><strong>Kind</strong>: static method of <a href="#BLS192"><code>BLS192</code></a>  <br>
+<strong>Parameter</strong>: R G1 Point  </p><a name="BLS192.add_G2"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bls192add_g2-">BLS192.add_G2() ⇒<a class="hash-link" href="#bls192add_g2-" title="Direct link to heading">​</a></h3><p>W=W1+W2 in group G2</p><p><strong>Kind</strong>: static method of <a href="#BLS192"><code>BLS192</code></a><br>
 <strong>Returns</strong>: Error code<br>
-<strong>this</strong>: <code>{BLS192}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BLS192{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: W1 G2 Point<br>
 <strong>Parameter</strong>: W2 G2 Point<br>
-<strong>Parameter</strong>: R G2 Point</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/cryptojs/bls"><span class="arrow-prev">← </span><span>BLS</span></a><a class="docs-next button" href="/docs/cryptojs/bls256"><span>BLS256</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bls192">BLS192</a><ul class="toc-headings"><li><a href="#new-bls192">new BLS192()</a></li><li><a href="#bls192bytestostring-">BLS192.bytestostring() ⇒</a></li><li><a href="#bls192stringtobytes-">BLS192.stringtobytes() ⇒</a></li><li><a href="#bls192bls_hashit-">BLS192.bls_hashit() ⇒</a></li><li><a href="#bls192keypairgenerate-">BLS192.KeyPairGenerate() ⇒</a></li><li><a href="#bls192sign-">BLS192.sign() ⇒</a></li><li><a href="#bls192verify-">BLS192.verify() ⇒</a></li><li><a href="#bls192add_g1-">BLS192.add_G1() ⇒</a></li><li><a href="#bls192add_g2-">BLS192.add_G2() ⇒</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<strong>Parameter</strong>: R G2 Point</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/cryptojs/bls"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">BLS</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/cryptojs/bls256"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">BLS256</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#bls192" class="table-of-contents__link toc-highlight">BLS192</a><ul><li><a href="#new-bls192" class="table-of-contents__link toc-highlight">new BLS192()</a></li><li><a href="#bls192bytestostring-" class="table-of-contents__link toc-highlight">BLS192.bytestostring() ⇒</a></li><li><a href="#bls192stringtobytes-" class="table-of-contents__link toc-highlight">BLS192.stringtobytes() ⇒</a></li><li><a href="#bls192bls_hashit-" class="table-of-contents__link toc-highlight">BLS192.bls_hashit() ⇒</a></li><li><a href="#bls192keypairgenerate-" class="table-of-contents__link toc-highlight">BLS192.KeyPairGenerate() ⇒</a></li><li><a href="#bls192sign-" class="table-of-contents__link toc-highlight">BLS192.sign() ⇒</a></li><li><a href="#bls192verify-" class="table-of-contents__link toc-highlight">BLS192.verify() ⇒</a></li><li><a href="#bls192add_g1-" class="table-of-contents__link toc-highlight">BLS192.add_G1() ⇒</a></li><li><a href="#bls192add_g2-" class="table-of-contents__link toc-highlight">BLS192.add_G2() ⇒</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/cryptojs/bls256/index.html b/docs/cryptojs/bls256/index.html
index a5c2ae4..45ecb28 100644
--- a/docs/cryptojs/bls256/index.html
+++ b/docs/cryptojs/bls256/index.html
@@ -1,144 +1,57 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>BLS256 · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;a name=&quot;BLS256&quot;&gt;&lt;/a&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="BLS256 · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;a name=&quot;BLS256&quot;&gt;&lt;/a&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>AMCL JavaScript API 1.0.0</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-cryptojs/bls256">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">BLS256 | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/cryptojs/bls256"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="BLS256 | Apache Milagro"><meta data-rh="true" name="description" content="BLS256"><meta data-rh="true" property="og:description" content="BLS256"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/cryptojs/bls256"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/bls256" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/bls256" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">BLS256</h1></header><article><div><span><p><a name="BLS256"></a></p>
-<h2><a class="anchor" aria-hidden="true" id="bls256"></a><a href="#bls256" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>BLS256</h2>
-<p><strong>Kind</strong>: global class<br>
-<strong>this</strong>: <code>{BLS256}</code></p>
-<ul>
-<li><a href="#BLS256">BLS256</a>
-<ul>
-<li><a href="#new_BLS256_new">new BLS256()</a></li>
-<li><a href="#BLS256.bytestostring">.bytestostring()</a> ⇒</li>
-<li><a href="#BLS256.stringtobytes">.stringtobytes()</a> ⇒</li>
-<li><a href="#BLS256.bls_hashit">.bls_hashit()</a> ⇒</li>
-<li><a href="#BLS256.KeyPairGenerate">.KeyPairGenerate()</a> ⇒</li>
-<li><a href="#BLS256.sign">.sign()</a> ⇒</li>
-<li><a href="#BLS256.verify">.verify()</a> ⇒</li>
-<li><a href="#BLS256.add_G1">.add_G1()</a> ⇒</li>
-<li><a href="#BLS256.add_G2">.add_G2()</a> ⇒</li>
-</ul></li>
-</ul>
-<p><a name="new_BLS256_new"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="new-bls256"></a><a href="#new-bls256" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>new BLS256()</h3>
-<p>Creates an instance of BLS256</p>
-<p><a name="BLS256.bytestostring"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bls256bytestostring-"></a><a href="#bls256bytestostring-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>BLS256.bytestostring() ⇒</h3>
-<p>Convert byte array to string</p>
-<p><strong>Kind</strong>: static method of <a href="#BLS256"><code>BLS256</code></a>  <br>
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/amcl-overview">AMCL Library</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-overview">AMCL Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API 1.0.0</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/aes">AES</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/big">BIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls">BLS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls192">BLS192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/cryptojs/bls256">BLS256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/dbig">DBIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp">ECP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ff">FF</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp">FP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp2">FP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp4">FP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp8">FP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp12">FP12</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp16">FP16</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp24">FP24</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp48">FP48</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/gcm">GCM</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash256">HASH256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash384">HASH384</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash512">HASH512</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin">MPIN</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair">PAIR</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rand">RAND</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rsa">RSA</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/sha3">SHA3</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/unit64">UInt64</a></li></ul></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL Library</span><meta itemprop="position" content="1"></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL JavaScript API 1.0.0</span><meta itemprop="position" content="2"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">BLS256</span><meta itemprop="position" content="3"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>BLS256</h1></header><a name="BLS256"></a><h2 class="anchor anchorWithStickyNavbar_LWe7" id="bls256">BLS256<a class="hash-link" href="#bls256" title="Direct link to heading">​</a></h2><p><strong>Kind</strong>: global class<br>
+<strong>this</strong>: <code>{&quot;{&quot;}BLS256{&quot;}&quot;}</code>  </p><ul><li><a href="#BLS256">BLS256</a><ul><li><a href="#new_BLS256_new">new BLS256()</a></li><li><a href="#BLS256.bytestostring">.bytestostring()</a> ⇒</li><li><a href="#BLS256.stringtobytes">.stringtobytes()</a> ⇒</li><li><a href="#BLS256.bls_hashit">.bls_hashit()</a> ⇒</li><li><a href="#BLS256.KeyPairGenerate">.KeyPairGenerate()</a> ⇒</li><li><a href="#BLS256.sign">.sign()</a> ⇒</li><li><a href="#BLS256.verify">.verify()</a> ⇒</li><li><a href="#BLS256.add_G1">.add_G1()</a> ⇒</li><li><a href="#BLS256.add_G2">.add_G2()</a> ⇒</li></ul></li></ul><a name="new_BLS256_new"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="new-bls256">new BLS256()<a class="hash-link" href="#new-bls256" title="Direct link to heading">​</a></h3><p>Creates an instance of BLS256</p><a name="BLS256.bytestostring"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bls256bytestostring-">BLS256.bytestostring() ⇒<a class="hash-link" href="#bls256bytestostring-" title="Direct link to heading">​</a></h3><p>Convert byte array to string</p><p><strong>Kind</strong>: static method of <a href="#BLS256"><code>BLS256</code></a><br>
 <strong>Returns</strong>: string<br>
-<strong>this</strong>: <code>{BLS192}</code>  <br>
-<strong>Parameter</strong>: b byte array<br>
-<a name="BLS256.stringtobytes"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bls256stringtobytes-"></a><a href="#bls256stringtobytes-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>BLS256.stringtobytes() ⇒</h3>
-<p>Convert string to byte array</p>
-<p><strong>Kind</strong>: static method of <a href="#BLS256"><code>BLS256</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BLS192{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: b byte array  </p><a name="BLS256.stringtobytes"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bls256stringtobytes-">BLS256.stringtobytes() ⇒<a class="hash-link" href="#bls256stringtobytes-" title="Direct link to heading">​</a></h3><p>Convert string to byte array</p><p><strong>Kind</strong>: static method of <a href="#BLS256"><code>BLS256</code></a><br>
 <strong>Returns</strong>: byte array<br>
-<strong>this</strong>: <code>{BLS192}</code>  <br>
-<strong>Parameter</strong>: s string<br>
-<a name="BLS256.bls_hashit"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bls256bls_hashit-"></a><a href="#bls256bls_hashit-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>BLS256.bls_hashit() ⇒</h3>
-<p>hash a message to an ECP point, using SHA3</p>
-<p><strong>Kind</strong>: static method of <a href="#BLS256"><code>BLS256</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BLS192{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: s string  </p><a name="BLS256.bls_hashit"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bls256bls_hashit-">BLS256.bls_hashit() ⇒<a class="hash-link" href="#bls256bls_hashit-" title="Direct link to heading">​</a></h3><p>hash a message to an ECP point, using SHA3</p><p><strong>Kind</strong>: static method of <a href="#BLS256"><code>BLS256</code></a><br>
 <strong>Returns</strong>: ECP point<br>
-<strong>this</strong>: <code>{BLS192}</code>  <br>
-<strong>Parameter</strong>: m message to be hashedstring<br>
-<a name="BLS256.KeyPairGenerate"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bls256keypairgenerate-"></a><a href="#bls256keypairgenerate-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>BLS256.KeyPairGenerate() ⇒</h3>
-<p>Generate key pair</p>
-<p><strong>Kind</strong>: static method of <a href="#BLS256"><code>BLS256</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BLS192{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: m message to be hashedstring  </p><a name="BLS256.KeyPairGenerate"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bls256keypairgenerate-">BLS256.KeyPairGenerate() ⇒<a class="hash-link" href="#bls256keypairgenerate-" title="Direct link to heading">​</a></h3><p>Generate key pair</p><p><strong>Kind</strong>: static method of <a href="#BLS256"><code>BLS256</code></a><br>
 <strong>Returns</strong>: Error code<br>
-<strong>this</strong>: <code>{BLS192}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BLS192{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: rng Cryptographically Secure Random Number Generator<br>
 <strong>Parameter</strong>: S Private key<br>
-<strong>Parameter</strong>: W Public key<br>
-<a name="BLS256.sign"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bls256sign-"></a><a href="#bls256sign-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>BLS256.sign() ⇒</h3>
-<p>Sign message</p>
-<p><strong>Kind</strong>: static method of <a href="#BLS256"><code>BLS256</code></a>  <br>
+<strong>Parameter</strong>: W Public key  </p><a name="BLS256.sign"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bls256sign-">BLS256.sign() ⇒<a class="hash-link" href="#bls256sign-" title="Direct link to heading">​</a></h3><p>Sign message</p><p><strong>Kind</strong>: static method of <a href="#BLS256"><code>BLS256</code></a><br>
 <strong>Returns</strong>: Error code<br>
-<strong>this</strong>: <code>{BLS192}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BLS192{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: SIG Singature<br>
 <strong>Parameter</strong>: m Message to sign<br>
-<strong>Parameter</strong>: S Private key<br>
-<a name="BLS256.verify"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bls256verify-"></a><a href="#bls256verify-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>BLS256.verify() ⇒</h3>
-<p>Verify message</p>
-<p><strong>Kind</strong>: static method of <a href="#BLS256"><code>BLS256</code></a>  <br>
+<strong>Parameter</strong>: S Private key  </p><a name="BLS256.verify"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bls256verify-">BLS256.verify() ⇒<a class="hash-link" href="#bls256verify-" title="Direct link to heading">​</a></h3><p>Verify message</p><p><strong>Kind</strong>: static method of <a href="#BLS256"><code>BLS256</code></a><br>
 <strong>Returns</strong>: Error code<br>
-<strong>this</strong>: <code>{BLS192}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BLS192{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: SIG Signature<br>
 <strong>Parameter</strong>: m Message to sign<br>
-<strong>Parameter</strong>: W Public key<br>
-<a name="BLS256.add_G1"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bls256add_g1-"></a><a href="#bls256add_g1-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>BLS256.add_G1() ⇒</h3>
-<p>R=R1+R2 in group G1</p>
-<p><strong>Kind</strong>: static method of <a href="#BLS256"><code>BLS256</code></a>  <br>
+<strong>Parameter</strong>: W Public key  </p><a name="BLS256.add_G1"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bls256add_g1-">BLS256.add_G1() ⇒<a class="hash-link" href="#bls256add_g1-" title="Direct link to heading">​</a></h3><p>R=R1+R2 in group G1</p><p><strong>Kind</strong>: static method of <a href="#BLS256"><code>BLS256</code></a><br>
 <strong>Returns</strong>: Error code<br>
-<strong>this</strong>: <code>{BLS192}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BLS192{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: R1 G1 Point<br>
 <strong>Parameter</strong>: R2 G1 Point<br>
-<strong>Parameter</strong>: R G1 Point<br>
-<a name="BLS256.add_G2"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="bls256add_g2-"></a><a href="#bls256add_g2-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>BLS256.add_G2() ⇒</h3>
-<p>W=W1+W2 in group G2</p>
-<p><strong>Kind</strong>: static method of <a href="#BLS256"><code>BLS256</code></a>  <br>
+<strong>Parameter</strong>: R G1 Point  </p><a name="BLS256.add_G2"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bls256add_g2-">BLS256.add_G2() ⇒<a class="hash-link" href="#bls256add_g2-" title="Direct link to heading">​</a></h3><p>W=W1+W2 in group G2</p><p><strong>Kind</strong>: static method of <a href="#BLS256"><code>BLS256</code></a><br>
 <strong>Returns</strong>: Error code<br>
-<strong>this</strong>: <code>{BLS192}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}BLS192{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: W1 G2 Point<br>
 <strong>Parameter</strong>: W2 G2 Point<br>
-<strong>Parameter</strong>: R G2 Point</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/cryptojs/bls192"><span class="arrow-prev">← </span><span>BLS192</span></a><a class="docs-next button" href="/docs/cryptojs/dbig"><span>DBIG</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#bls256">BLS256</a><ul class="toc-headings"><li><a href="#new-bls256">new BLS256()</a></li><li><a href="#bls256bytestostring-">BLS256.bytestostring() ⇒</a></li><li><a href="#bls256stringtobytes-">BLS256.stringtobytes() ⇒</a></li><li><a href="#bls256bls_hashit-">BLS256.bls_hashit() ⇒</a></li><li><a href="#bls256keypairgenerate-">BLS256.KeyPairGenerate() ⇒</a></li><li><a href="#bls256sign-">BLS256.sign() ⇒</a></li><li><a href="#bls256verify-">BLS256.verify() ⇒</a></li><li><a href="#bls256add_g1-">BLS256.add_G1() ⇒</a></li><li><a href="#bls256add_g2-">BLS256.add_G2() ⇒</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<strong>Parameter</strong>: R G2 Point</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/cryptojs/bls192"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">BLS192</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/cryptojs/dbig"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">DBIG</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#bls256" class="table-of-contents__link toc-highlight">BLS256</a><ul><li><a href="#new-bls256" class="table-of-contents__link toc-highlight">new BLS256()</a></li><li><a href="#bls256bytestostring-" class="table-of-contents__link toc-highlight">BLS256.bytestostring() ⇒</a></li><li><a href="#bls256stringtobytes-" class="table-of-contents__link toc-highlight">BLS256.stringtobytes() ⇒</a></li><li><a href="#bls256bls_hashit-" class="table-of-contents__link toc-highlight">BLS256.bls_hashit() ⇒</a></li><li><a href="#bls256keypairgenerate-" class="table-of-contents__link toc-highlight">BLS256.KeyPairGenerate() ⇒</a></li><li><a href="#bls256sign-" class="table-of-contents__link toc-highlight">BLS256.sign() ⇒</a></li><li><a href="#bls256verify-" class="table-of-contents__link toc-highlight">BLS256.verify() ⇒</a></li><li><a href="#bls256add_g1-" class="table-of-contents__link toc-highlight">BLS256.add_G1() ⇒</a></li><li><a href="#bls256add_g2-" class="table-of-contents__link toc-highlight">BLS256.add_G2() ⇒</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/cryptojs/dbig/index.html b/docs/cryptojs/dbig/index.html
index a48625a..2a0ea1a 100644
--- a/docs/cryptojs/dbig/index.html
+++ b/docs/cryptojs/dbig/index.html
@@ -1,198 +1,65 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>DBIG · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;a name=&quot;DBIG&quot;&gt;&lt;/a&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="DBIG · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;a name=&quot;DBIG&quot;&gt;&lt;/a&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>AMCL JavaScript API 1.0.0</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-cryptojs/dbig">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">DBIG | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/cryptojs/dbig"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="DBIG | Apache Milagro"><meta data-rh="true" name="description" content="DBIG"><meta data-rh="true" property="og:description" content="DBIG"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/cryptojs/dbig"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/dbig" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/dbig" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">DBIG</h1></header><article><div><span><p><a name="DBIG"></a></p>
-<h2><a class="anchor" aria-hidden="true" id="dbig"></a><a href="#dbig" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>DBIG</h2>
-<p><strong>Kind</strong>: global class<br>
-<strong>this</strong>: <code>{DBIG}</code></p>
-<ul>
-<li><a href="#DBIG">DBIG</a>
-<ul>
-<li><a href="#new_DBIG_new">new DBIG()</a></li>
-<li><em>instance</em>
-<ul>
-<li><a href="#DBIG+zero">.zero()</a> ⇒</li>
-<li><a href="#DBIG+copy">.copy()</a> ⇒</li>
-<li><a href="#DBIG+hcopy">.hcopy()</a> ⇒</li>
-<li><a href="#DBIG+norm">.norm()</a> ⇒</li>
-<li><a href="#DBIG+muladd">.muladd()</a></li>
-<li><a href="#DBIG+shr">.shr()</a> ⇒</li>
-<li><a href="#DBIG+shl">.shl()</a> ⇒</li>
-<li><a href="#DBIG+cmove">.cmove()</a></li>
-<li><a href="#DBIG+add">.add()</a> ⇒</li>
-<li><a href="#DBIG+sub">.sub()</a> ⇒</li>
-<li><a href="#DBIG+nbits">.nbits()</a> ⇒</li>
-<li><a href="#DBIG+toString">.toString()</a> ⇒</li>
-<li><a href="#DBIG+mod">.mod()</a> ⇒</li>
-<li><a href="#DBIG+div">.div()</a> ⇒</li>
-<li><a href="#DBIG+split">.split()</a> ⇒</li>
-</ul></li>
-<li><em>static</em>
-<ul>
-<li><a href="#DBIG.comp">.comp()</a> ⇒</li>
-</ul></li>
-</ul></li>
-</ul>
-<p><a name="new_DBIG_new"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="new-dbig"></a><a href="#new-dbig" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>new DBIG()</h3>
-<p>General purpose Constructor</p>
-<p><a name="DBIG+zero"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="dbigzero-"></a><a href="#dbigzero-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>dbiG.zero() ⇒</h3>
-<p>set to zero</p>
-<p><strong>Kind</strong>: instance method of <a href="#DBIG"><code>DBIG</code></a>  <br>
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/amcl-overview">AMCL Library</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-overview">AMCL Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API 1.0.0</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/aes">AES</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/big">BIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls">BLS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls192">BLS192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls256">BLS256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/cryptojs/dbig">DBIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp">ECP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ff">FF</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp">FP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp2">FP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp4">FP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp8">FP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp12">FP12</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp16">FP16</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp24">FP24</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp48">FP48</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/gcm">GCM</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash256">HASH256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash384">HASH384</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash512">HASH512</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin">MPIN</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair">PAIR</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rand">RAND</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rsa">RSA</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/sha3">SHA3</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/unit64">UInt64</a></li></ul></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL Library</span><meta itemprop="position" content="1"></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL JavaScript API 1.0.0</span><meta itemprop="position" content="2"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">DBIG</span><meta itemprop="position" content="3"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>DBIG</h1></header><a name="DBIG"></a><h2 class="anchor anchorWithStickyNavbar_LWe7" id="dbig">DBIG<a class="hash-link" href="#dbig" title="Direct link to heading">​</a></h2><p><strong>Kind</strong>: global class<br>
+<strong>this</strong>: <code>{&quot;{&quot;}DBIG{&quot;}&quot;}</code>  </p><ul><li><a href="#DBIG">DBIG</a><ul><li><a href="#new_DBIG_new">new DBIG()</a></li><li><em>instance</em><ul><li><a href="#DBIG+zero">.zero()</a> ⇒</li><li><a href="#DBIG+copy">.copy()</a> ⇒</li><li><a href="#DBIG+hcopy">.hcopy()</a> ⇒</li><li><a href="#DBIG+norm">.norm()</a> ⇒</li><li><a href="#DBIG+muladd">.muladd()</a></li><li><a href="#DBIG+shr">.shr()</a> ⇒</li><li><a href="#DBIG+shl">.shl()</a> ⇒</li><li><a href="#DBIG+cmove">.cmove()</a></li><li><a href="#DBIG+add">.add()</a> ⇒</li><li><a href="#DBIG+sub">.sub()</a> ⇒</li><li><a href="#DBIG+nbits">.nbits()</a> ⇒</li><li><a href="#DBIG+toString">.toString()</a> ⇒</li><li><a href="#DBIG+mod">.mod()</a> ⇒</li><li><a href="#DBIG+div">.div()</a> ⇒</li><li><a href="#DBIG+split">.split()</a> ⇒</li></ul></li><li><em>static</em><ul><li><a href="#DBIG.comp">.comp()</a> ⇒</li></ul></li></ul></li></ul><a name="new_DBIG_new"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="new-dbig">new DBIG()<a class="hash-link" href="#new-dbig" title="Direct link to heading">​</a></h3><p>General purpose Constructor</p><a name="DBIG+zero"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="dbigzero-">dbiG.zero() ⇒<a class="hash-link" href="#dbigzero-" title="Direct link to heading">​</a></h3><p>set to zero</p><p><strong>Kind</strong>: instance method of <a href="#DBIG"><code>DBIG</code></a><br>
 <strong>Returns</strong>: BIG number<br>
-<strong>this</strong>: <code>{DBIG}</code>  <br>
-<a name="DBIG+copy"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="dbigcopy-"></a><a href="#dbigcopy-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>dbiG.copy() ⇒</h3>
-<p>set to b</p>
-<p><strong>Kind</strong>: instance method of <a href="#DBIG"><code>DBIG</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}DBIG{&quot;}&quot;}</code>  </p><a name="DBIG+copy"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="dbigcopy-">dbiG.copy() ⇒<a class="hash-link" href="#dbigcopy-" title="Direct link to heading">​</a></h3><p>set to b</p><p><strong>Kind</strong>: instance method of <a href="#DBIG"><code>DBIG</code></a><br>
 <strong>Returns</strong>: DBIG number<br>
-<strong>this</strong>: <code>{DBIG}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}DBIG{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: b DBIG number  </p><a name="DBIG+hcopy"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="dbighcopy-">dbiG.hcopy() ⇒<a class="hash-link" href="#dbighcopy-" title="Direct link to heading">​</a></h3><p>copy from ctx.BIG</p><p><strong>Kind</strong>: instance method of <a href="#DBIG"><code>DBIG</code></a><br>
+<strong>Returns</strong>: DBIG number<br>
+<strong>this</strong>: <code>{&quot;{&quot;}DBIG{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: b BIG number  </p><a name="DBIG+norm"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="dbignorm-">dbiG.norm() ⇒<a class="hash-link" href="#dbignorm-" title="Direct link to heading">​</a></h3><p>normalise DBIG - force all digits <!-- -->&lt;<!-- --> 2^BASEBITS</p><p><strong>Kind</strong>: instance method of <a href="#DBIG"><code>DBIG</code></a><br>
+<strong>Returns</strong>: DBIG number<br>
+<strong>this</strong>: <code>{&quot;{&quot;}DBIG{&quot;}&quot;}</code>  </p><a name="DBIG+muladd"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="dbigmuladd">dbiG.muladd()<a class="hash-link" href="#dbigmuladd" title="Direct link to heading">​</a></h3><p>this<!-- -->[i]<!-- -->+=x<!-- -->*<!-- -->y+c, and return high part</p><p><strong>Kind</strong>: instance method of <a href="#DBIG"><code>DBIG</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}DBIG{&quot;}&quot;}</code>  </p><a name="DBIG+shr"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="dbigshr-">dbiG.shr() ⇒<a class="hash-link" href="#dbigshr-" title="Direct link to heading">​</a></h3><p>General shift right by k bits</p><p><strong>Kind</strong>: instance method of <a href="#DBIG"><code>DBIG</code></a><br>
+<strong>Returns</strong>: BIG number<br>
+<strong>this</strong>: <code>{&quot;{&quot;}DBIG{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: k Number of bits to shift  </p><a name="DBIG+shl"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="dbigshl-">dbiG.shl() ⇒<a class="hash-link" href="#dbigshl-" title="Direct link to heading">​</a></h3><p>General shift left by k bits</p><p><strong>Kind</strong>: instance method of <a href="#DBIG"><code>DBIG</code></a><br>
+<strong>Returns</strong>: BIG number<br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: k Number of bits to shift  </p><a name="DBIG+cmove"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="dbigcmove">dbiG.cmove()<a class="hash-link" href="#dbigcmove" title="Direct link to heading">​</a></h3><p>Conditional move of BIG depending on d using XOR - no branches</p><p><strong>Kind</strong>: instance method of <a href="#DBIG"><code>DBIG</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}DBIG{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: b DBIG number<br>
-<a name="DBIG+hcopy"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="dbighcopy-"></a><a href="#dbighcopy-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>dbiG.hcopy() ⇒</h3>
-<p>copy from ctx.BIG</p>
-<p><strong>Kind</strong>: instance method of <a href="#DBIG"><code>DBIG</code></a>  <br>
-<strong>Returns</strong>: DBIG number<br>
-<strong>this</strong>: <code>{DBIG}</code>  <br>
-<strong>Parameter</strong>: b BIG number<br>
-<a name="DBIG+norm"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="dbignorm-"></a><a href="#dbignorm-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>dbiG.norm() ⇒</h3>
-<p>normalise DBIG - force all digits &lt; 2^BASEBITS</p>
-<p><strong>Kind</strong>: instance method of <a href="#DBIG"><code>DBIG</code></a>  <br>
-<strong>Returns</strong>: DBIG number<br>
-<strong>this</strong>: <code>{DBIG}</code>  <br>
-<a name="DBIG+muladd"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="dbigmuladd"></a><a href="#dbigmuladd" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>dbiG.muladd()</h3>
-<p>this[i]+=x*y+c, and return high part</p>
-<p><strong>Kind</strong>: instance method of <a href="#DBIG"><code>DBIG</code></a>  <br>
-<strong>this</strong>: <code>{DBIG}</code>  <br>
-<a name="DBIG+shr"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="dbigshr-"></a><a href="#dbigshr-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>dbiG.shr() ⇒</h3>
-<p>General shift right by k bits</p>
-<p><strong>Kind</strong>: instance method of <a href="#DBIG"><code>DBIG</code></a>  <br>
-<strong>Returns</strong>: BIG number<br>
-<strong>this</strong>: <code>{DBIG}</code>  <br>
-<strong>Parameter</strong>: k Number of bits to shift<br>
-<a name="DBIG+shl"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="dbigshl-"></a><a href="#dbigshl-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>dbiG.shl() ⇒</h3>
-<p>General shift left by k bits</p>
-<p><strong>Kind</strong>: instance method of <a href="#DBIG"><code>DBIG</code></a>  <br>
-<strong>Returns</strong>: BIG number<br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
-<strong>Parameter</strong>: k Number of bits to shift<br>
-<a name="DBIG+cmove"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="dbigcmove"></a><a href="#dbigcmove" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>dbiG.cmove()</h3>
-<p>Conditional move of BIG depending on d using XOR - no branches</p>
-<p><strong>Kind</strong>: instance method of <a href="#DBIG"><code>DBIG</code></a>  <br>
-<strong>this</strong>: <code>{DBIG}</code>  <br>
-<strong>Parameter</strong>: b DBIG number<br>
-<strong>Parameter</strong>: d DBIG number<br>
-<a name="DBIG+add"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="dbigadd-"></a><a href="#dbigadd-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>dbiG.add() ⇒</h3>
-<p>Sum two DBIG mumbers</p>
-<p><strong>Kind</strong>: instance method of <a href="#DBIG"><code>DBIG</code></a>  <br>
+<strong>Parameter</strong>: d DBIG number  </p><a name="DBIG+add"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="dbigadd-">dbiG.add() ⇒<a class="hash-link" href="#dbigadd-" title="Direct link to heading">​</a></h3><p>Sum two DBIG mumbers</p><p><strong>Kind</strong>: instance method of <a href="#DBIG"><code>DBIG</code></a><br>
 <strong>Returns</strong>: this+=x<br>
-<strong>this</strong>: <code>{DBIG}</code>  <br>
-<strong>Parameter</strong>: x DBIG object<br>
-<a name="DBIG+sub"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="dbigsub-"></a><a href="#dbigsub-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>dbiG.sub() ⇒</h3>
-<p>Subtract DBIG from one another</p>
-<p><strong>Kind</strong>: instance method of <a href="#DBIG"><code>DBIG</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}DBIG{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: x DBIG object  </p><a name="DBIG+sub"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="dbigsub-">dbiG.sub() ⇒<a class="hash-link" href="#dbigsub-" title="Direct link to heading">​</a></h3><p>Subtract DBIG from one another</p><p><strong>Kind</strong>: instance method of <a href="#DBIG"><code>DBIG</code></a><br>
 <strong>Returns</strong>: this-=x<br>
-<strong>this</strong>: <code>{DBIG}</code>  <br>
-<strong>Parameter</strong>: x BIG object<br>
-<a name="DBIG+nbits"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="dbignbits-"></a><a href="#dbignbits-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>dbiG.nbits() ⇒</h3>
-<p>length in bits</p>
-<p><strong>Kind</strong>: instance method of <a href="#DBIG"><code>DBIG</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}DBIG{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: x BIG object  </p><a name="DBIG+nbits"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="dbignbits-">dbiG.nbits() ⇒<a class="hash-link" href="#dbignbits-" title="Direct link to heading">​</a></h3><p>length in bits</p><p><strong>Kind</strong>: instance method of <a href="#DBIG"><code>DBIG</code></a><br>
 <strong>Returns</strong>: The number of bigs in DBIG object<br>
-<strong>this</strong>: <code>{DBIG}</code>  <br>
-<a name="DBIG+toString"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="dbigtostring-"></a><a href="#dbigtostring-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>dbiG.toString() ⇒</h3>
-<p>Convert to string</p>
-<p><strong>Kind</strong>: instance method of <a href="#DBIG"><code>DBIG</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}DBIG{&quot;}&quot;}</code>  </p><a name="DBIG+toString"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="dbigtostring-">dbiG.toString() ⇒<a class="hash-link" href="#dbigtostring-" title="Direct link to heading">​</a></h3><p>Convert to string</p><p><strong>Kind</strong>: instance method of <a href="#DBIG"><code>DBIG</code></a><br>
 <strong>Returns</strong>: string representation of a BIG number<br>
-<strong>this</strong>: <code>{DBIG}</code>  <br>
-<a name="DBIG+mod"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="dbigmod-"></a><a href="#dbigmod-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>dbiG.mod() ⇒</h3>
-<p>reduces this DBIG mod a ctx.BIG, and returns the ctx.BIG</p>
-<p><strong>Kind</strong>: instance method of <a href="#DBIG"><code>DBIG</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}DBIG{&quot;}&quot;}</code>  </p><a name="DBIG+mod"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="dbigmod-">dbiG.mod() ⇒<a class="hash-link" href="#dbigmod-" title="Direct link to heading">​</a></h3><p>reduces this DBIG mod a ctx.BIG, and returns the ctx.BIG</p><p><strong>Kind</strong>: instance method of <a href="#DBIG"><code>DBIG</code></a><br>
 <strong>Returns</strong>: BIG object<br>
-<strong>this</strong>: <code>{DBIG}</code>  <br>
-<a name="DBIG+div"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="dbigdiv-"></a><a href="#dbigdiv-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>dbiG.div() ⇒</h3>
-<p>this/=c</p>
-<p><strong>Kind</strong>: instance method of <a href="#DBIG"><code>DBIG</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}DBIG{&quot;}&quot;}</code>  </p><a name="DBIG+div"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="dbigdiv-">dbiG.div() ⇒<a class="hash-link" href="#dbigdiv-" title="Direct link to heading">​</a></h3><p>this/=c</p><p><strong>Kind</strong>: instance method of <a href="#DBIG"><code>DBIG</code></a><br>
 <strong>Returns</strong>: DBIG number<br>
-<strong>this</strong>: <code>{DBIG}</code>  <br>
-<strong>Paramter</strong>: c divisor<br>
-<a name="DBIG+split"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="dbigsplit-"></a><a href="#dbigsplit-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>dbiG.split() ⇒</h3>
-<p>split this DBIG at position n, return higher half, keep lower half</p>
-<p><strong>Kind</strong>: instance method of <a href="#DBIG"><code>DBIG</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}DBIG{&quot;}&quot;}</code><br>
+<strong>Paramter</strong>: c divisor  </p><a name="DBIG+split"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="dbigsplit-">dbiG.split() ⇒<a class="hash-link" href="#dbigsplit-" title="Direct link to heading">​</a></h3><p>split this DBIG at position n, return higher half, keep lower half</p><p><strong>Kind</strong>: instance method of <a href="#DBIG"><code>DBIG</code></a><br>
 <strong>Returns</strong>: lower half BIG number<br>
-<strong>this</strong>: <code>{DBIG}</code>  <br>
-<strong>Paramter</strong>: n Position to splitdivisor<br>
-<a name="DBIG.comp"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="dbigcomp-"></a><a href="#dbigcomp-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>DBIG.comp() ⇒</h3>
-<p>Compare a and b</p>
-<p><strong>Kind</strong>: static method of <a href="#DBIG"><code>DBIG</code></a>  <br>
-<strong>Returns</strong>: 0 if a==b, -1 if a&lt;b, +1 if a&gt;b<br>
-<strong>this</strong>: <code>{DBIG}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}DBIG{&quot;}&quot;}</code><br>
+<strong>Paramter</strong>: n Position to splitdivisor  </p><a name="DBIG.comp"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="dbigcomp-">DBIG.comp() ⇒<a class="hash-link" href="#dbigcomp-" title="Direct link to heading">​</a></h3><p>Compare a and b</p><p><strong>Kind</strong>: static method of <a href="#DBIG"><code>DBIG</code></a><br>
+<strong>Returns</strong>: 0 if a==b, -1 if a<!-- -->&lt;<!-- -->b, +1 if a<!-- -->&gt;<!-- -->b<br>
+<strong>this</strong>: <code>{&quot;{&quot;}DBIG{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: a DBIG number (normalised)<br>
-<strong>Parameter</strong>: b DBIG number (normalised</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/cryptojs/bls256"><span class="arrow-prev">← </span><span>BLS256</span></a><a class="docs-next button" href="/docs/cryptojs/ecdh"><span>ECDH</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#dbig">DBIG</a><ul class="toc-headings"><li><a href="#new-dbig">new DBIG()</a></li><li><a href="#dbigzero-">dbiG.zero() ⇒</a></li><li><a href="#dbigcopy-">dbiG.copy() ⇒</a></li><li><a href="#dbighcopy-">dbiG.hcopy() ⇒</a></li><li><a href="#dbignorm-">dbiG.norm() ⇒</a></li><li><a href="#dbigmuladd">dbiG.muladd()</a></li><li><a href="#dbigshr-">dbiG.shr() ⇒</a></li><li><a href="#dbigshl-">dbiG.shl() ⇒</a></li><li><a href="#dbigcmove">dbiG.cmove()</a></li><li><a href="#dbigadd-">dbiG.add() ⇒</a></li><li><a href="#dbigsub-">dbiG.sub() ⇒</a></li><li><a href="#dbignbits-">dbiG.nbits() ⇒</a></li><li><a href="#dbigtostring-">dbiG.toString() ⇒</a></li><li><a href="#dbigmod-">dbiG.mod() ⇒</a></li><li><a href="#dbigdiv-">dbiG.div() ⇒</a></li><li><a href="#dbigsplit-">dbiG.split() ⇒</a></li><li><a href="#dbigcomp-">DBIG.comp() ⇒</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<strong>Parameter</strong>: b DBIG number (normalised</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/cryptojs/bls256"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">BLS256</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/cryptojs/ecdh"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">ECDH</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#dbig" class="table-of-contents__link toc-highlight">DBIG</a><ul><li><a href="#new-dbig" class="table-of-contents__link toc-highlight">new DBIG()</a></li><li><a href="#dbigzero-" class="table-of-contents__link toc-highlight">dbiG.zero() ⇒</a></li><li><a href="#dbigcopy-" class="table-of-contents__link toc-highlight">dbiG.copy() ⇒</a></li><li><a href="#dbighcopy-" class="table-of-contents__link toc-highlight">dbiG.hcopy() ⇒</a></li><li><a href="#dbignorm-" class="table-of-contents__link toc-highlight">dbiG.norm() ⇒</a></li><li><a href="#dbigmuladd" class="table-of-contents__link toc-highlight">dbiG.muladd()</a></li><li><a href="#dbigshr-" class="table-of-contents__link toc-highlight">dbiG.shr() ⇒</a></li><li><a href="#dbigshl-" class="table-of-contents__link toc-highlight">dbiG.shl() ⇒</a></li><li><a href="#dbigcmove" class="table-of-contents__link toc-highlight">dbiG.cmove()</a></li><li><a href="#dbigadd-" class="table-of-contents__link toc-highlight">dbiG.add() ⇒</a></li><li><a href="#dbigsub-" class="table-of-contents__link toc-highlight">dbiG.sub() ⇒</a></li><li><a href="#dbignbits-" class="table-of-contents__link toc-highlight">dbiG.nbits() ⇒</a></li><li><a href="#dbigtostring-" class="table-of-contents__link toc-highlight">dbiG.toString() ⇒</a></li><li><a href="#dbigmod-" class="table-of-contents__link toc-highlight">dbiG.mod() ⇒</a></li><li><a href="#dbigdiv-" class="table-of-contents__link toc-highlight">dbiG.div() ⇒</a></li><li><a href="#dbigsplit-" class="table-of-contents__link toc-highlight">dbiG.split() ⇒</a></li><li><a href="#dbigcomp-" class="table-of-contents__link toc-highlight">DBIG.comp() ⇒</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/cryptojs/ecdh/index.html b/docs/cryptojs/ecdh/index.html
index b8e439f..ad01bef 100644
--- a/docs/cryptojs/ecdh/index.html
+++ b/docs/cryptojs/ecdh/index.html
@@ -1,221 +1,95 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>ECDH · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;a name=&quot;ECDH&quot;&gt;&lt;/a&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="ECDH · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;a name=&quot;ECDH&quot;&gt;&lt;/a&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>AMCL JavaScript API 1.0.0</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-cryptojs/ecdh">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">ECDH | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/cryptojs/ecdh"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="ECDH | Apache Milagro"><meta data-rh="true" name="description" content="ECDH"><meta data-rh="true" property="og:description" content="ECDH"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/cryptojs/ecdh"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/ecdh" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/ecdh" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">ECDH</h1></header><article><div><span><p><a name="ECDH"></a></p>
-<h2><a class="anchor" aria-hidden="true" id="ecdh"></a><a href="#ecdh" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ECDH</h2>
-<p><strong>Kind</strong>: global class<br>
-<strong>this</strong>: <code>{ECDH}</code></p>
-<ul>
-<li><a href="#ECDH">ECDH</a>
-<ul>
-<li><a href="#new_ECDH_new">new ECDH()</a></li>
-<li><a href="#ECDH.inttobytes">.inttobytes()</a> ⇒</li>
-<li><a href="#ECDH.bytestostring">.bytestostring()</a> ⇒</li>
-<li><a href="#ECDH.stringtobytes">.stringtobytes()</a> ⇒</li>
-<li><a href="#ECDH.hashit">.hashit()</a> ⇒</li>
-<li><a href="#ECDH.KDF2">.KDF2()</a> ⇒</li>
-<li><a href="#ECDH.PBKDF2">.PBKDF2()</a> ⇒</li>
-<li><a href="#ECDH.HMAC">.HMAC()</a> ⇒</li>
-<li><a href="#ECDH.AES_CBC_IV0_ENCRYPT">.AES_CBC_IV0_ENCRYPT()</a> ⇒</li>
-<li><a href="#ECDH.AES_CBC_IV0_DECRYPT">.AES_CBC_IV0_DECRYPT()</a> ⇒</li>
-<li><a href="#ECDH.KEY_PAIR_GENERATE">.KEY_PAIR_GENERATE()</a> ⇒</li>
-<li><a href="#ECDH.PUBLIC_KEY_VALIDATE">.PUBLIC_KEY_VALIDATE()</a> ⇒</li>
-<li><a href="#ECDH.ECPSVDP_DH">.ECPSVDP_DH()</a> ⇒</li>
-<li><a href="#ECDH.ECPSP_DSA">.ECPSP_DSA()</a> ⇒</li>
-<li><a href="#ECDH.ECPVP_DSA">.ECPVP_DSA()</a> ⇒</li>
-<li><a href="#ECDH.ECIES_ENCRYPT">.ECIES_ENCRYPT()</a> ⇒</li>
-<li><a href="#ECDH.ECIES_DECRYPT">.ECIES_DECRYPT()</a> ⇒</li>
-</ul></li>
-</ul>
-<p><a name="new_ECDH_new"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="new-ecdh"></a><a href="#new-ecdh" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>new ECDH()</h3>
-<p>Creates an instance of ECDH</p>
-<p><a name="ECDH.inttobytes"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecdhinttobytes-"></a><a href="#ecdhinttobytes-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ECDH.inttobytes() ⇒</h3>
-<p>Convert Integer to n-byte array</p>
-<p><strong>Kind</strong>: static method of <a href="#ECDH"><code>ECDH</code></a>  <br>
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/amcl-overview">AMCL Library</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-overview">AMCL Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API 1.0.0</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/aes">AES</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/big">BIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls">BLS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls192">BLS192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls256">BLS256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/dbig">DBIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp">ECP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ff">FF</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp">FP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp2">FP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp4">FP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp8">FP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp12">FP12</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp16">FP16</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp24">FP24</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp48">FP48</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/gcm">GCM</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash256">HASH256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash384">HASH384</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash512">HASH512</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin">MPIN</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair">PAIR</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rand">RAND</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rsa">RSA</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/sha3">SHA3</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/unit64">UInt64</a></li></ul></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL Library</span><meta itemprop="position" content="1"></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL JavaScript API 1.0.0</span><meta itemprop="position" content="2"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">ECDH</span><meta itemprop="position" content="3"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>ECDH</h1></header><a name="ECDH"></a><h2 class="anchor anchorWithStickyNavbar_LWe7" id="ecdh">ECDH<a class="hash-link" href="#ecdh" title="Direct link to heading">​</a></h2><p><strong>Kind</strong>: global class<br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECDH{&quot;}&quot;}</code>  </p><ul><li><a href="#ECDH">ECDH</a><ul><li><a href="#new_ECDH_new">new ECDH()</a></li><li><a href="#ECDH.inttobytes">.inttobytes()</a> ⇒</li><li><a href="#ECDH.bytestostring">.bytestostring()</a> ⇒</li><li><a href="#ECDH.stringtobytes">.stringtobytes()</a> ⇒</li><li><a href="#ECDH.hashit">.hashit()</a> ⇒</li><li><a href="#ECDH.KDF2">.KDF2()</a> ⇒</li><li><a href="#ECDH.PBKDF2">.PBKDF2()</a> ⇒</li><li><a href="#ECDH.HMAC">.HMAC()</a> ⇒</li><li><a href="#ECDH.AES_CBC_IV0_ENCRYPT">.AES_CBC_IV0_ENCRYPT()</a> ⇒</li><li><a href="#ECDH.AES_CBC_IV0_DECRYPT">.AES_CBC_IV0_DECRYPT()</a> ⇒</li><li><a href="#ECDH.KEY_PAIR_GENERATE">.KEY_PAIR_GENERATE()</a> ⇒</li><li><a href="#ECDH.PUBLIC_KEY_VALIDATE">.PUBLIC_KEY_VALIDATE()</a> ⇒</li><li><a href="#ECDH.ECPSVDP_DH">.ECPSVDP_DH()</a> ⇒</li><li><a href="#ECDH.ECPSP_DSA">.ECPSP_DSA()</a> ⇒</li><li><a href="#ECDH.ECPVP_DSA">.ECPVP_DSA()</a> ⇒</li><li><a href="#ECDH.ECIES_ENCRYPT">.ECIES_ENCRYPT()</a> ⇒</li><li><a href="#ECDH.ECIES_DECRYPT">.ECIES_DECRYPT()</a> ⇒</li></ul></li></ul><a name="new_ECDH_new"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="new-ecdh">new ECDH()<a class="hash-link" href="#new-ecdh" title="Direct link to heading">​</a></h3><p>Creates an instance of ECDH</p><a name="ECDH.inttobytes"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecdhinttobytes-">ECDH.inttobytes() ⇒<a class="hash-link" href="#ecdhinttobytes-" title="Direct link to heading">​</a></h3><p>Convert Integer to n-byte array</p><p><strong>Kind</strong>: static method of <a href="#ECDH"><code>ECDH</code></a><br>
 <strong>Returns</strong>: byte array<br>
-<strong>this</strong>: <code>{ECDH}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECDH{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: n integer<br>
-<strong>Parameter</strong>: len integer length<br>
-<a name="ECDH.bytestostring"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecdhbytestostring-"></a><a href="#ecdhbytestostring-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ECDH.bytestostring() ⇒</h3>
-<p>Convert byte array to string</p>
-<p><strong>Kind</strong>: static method of <a href="#ECDH"><code>ECDH</code></a>  <br>
+<strong>Parameter</strong>: len integer length  </p><a name="ECDH.bytestostring"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecdhbytestostring-">ECDH.bytestostring() ⇒<a class="hash-link" href="#ecdhbytestostring-" title="Direct link to heading">​</a></h3><p>Convert byte array to string</p><p><strong>Kind</strong>: static method of <a href="#ECDH"><code>ECDH</code></a><br>
 <strong>Returns</strong>: string<br>
-<strong>this</strong>: <code>{ECDH}</code>  <br>
-<strong>Parameter</strong>: b byte array<br>
-<a name="ECDH.stringtobytes"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecdhstringtobytes-"></a><a href="#ecdhstringtobytes-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ECDH.stringtobytes() ⇒</h3>
-<p>Convert string to byte array</p>
-<p><strong>Kind</strong>: static method of <a href="#ECDH"><code>ECDH</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECDH{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: b byte array  </p><a name="ECDH.stringtobytes"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecdhstringtobytes-">ECDH.stringtobytes() ⇒<a class="hash-link" href="#ecdhstringtobytes-" title="Direct link to heading">​</a></h3><p>Convert string to byte array</p><p><strong>Kind</strong>: static method of <a href="#ECDH"><code>ECDH</code></a><br>
 <strong>Returns</strong>: byte array<br>
-<strong>this</strong>: <code>{ECDH}</code>  <br>
-<strong>Parameter</strong>: s string<br>
-<a name="ECDH.hashit"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecdhhashit-"></a><a href="#ecdhhashit-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ECDH.hashit() ⇒</h3>
-<p>general purpose hash function w=hash(B|n)</p>
-<p><strong>Kind</strong>: static method of <a href="#ECDH"><code>ECDH</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECDH{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: s string  </p><a name="ECDH.hashit"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecdhhashit-">ECDH.hashit() ⇒<a class="hash-link" href="#ecdhhashit-" title="Direct link to heading">​</a></h3><p>general purpose hash function w=hash(B|n)</p><p><strong>Kind</strong>: static method of <a href="#ECDH"><code>ECDH</code></a><br>
 <strong>Returns</strong>: w output<br>
-<strong>this</strong>: <code>{ECDH}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECDH{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: sha is the hash type<br>
 <strong>Parameter</strong>: A byte array involved in the hash<br>
 <strong>Parameter</strong>: n integer involved in the hash<br>
-<strong>Parameter</strong>: pad padding<br>
-<a name="ECDH.KDF2"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecdhkdf2-"></a><a href="#ecdhkdf2-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ECDH.KDF2() ⇒</h3>
-<p>IEEE-1363 Key Derivation Function - generates key K from inputs Z and P</p>
-<p><strong>Kind</strong>: static method of <a href="#ECDH"><code>ECDH</code></a>  <br>
+<strong>Parameter</strong>: pad padding  </p><a name="ECDH.KDF2"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecdhkdf2-">ECDH.KDF2() ⇒<a class="hash-link" href="#ecdhkdf2-" title="Direct link to heading">​</a></h3><p>IEEE-1363 Key Derivation Function - generates key K from inputs Z and P</p><p><strong>Kind</strong>: static method of <a href="#ECDH"><code>ECDH</code></a><br>
 <strong>Returns</strong>: K derived key<br>
-<strong>this</strong>: <code>{ECDH}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECDH{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: sha is the hash type<br>
 <strong>Parameter</strong>: Z input byte array<br>
 <strong>Parameter</strong>: P input key derivation parameters - can be NULL<br>
-<strong>Parameter</strong>: 0len is output desired length of key<br>
-<a name="ECDH.PBKDF2"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecdhpbkdf2-"></a><a href="#ecdhpbkdf2-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ECDH.PBKDF2() ⇒</h3>
-<p>Password Based Key Derivation Function - generates key K from password, salt and repeat counter</p>
-<p><strong>Kind</strong>: static method of <a href="#ECDH"><code>ECDH</code></a>  <br>
+<strong>Parameter</strong>: 0len is output desired length of key  </p><a name="ECDH.PBKDF2"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecdhpbkdf2-">ECDH.PBKDF2() ⇒<a class="hash-link" href="#ecdhpbkdf2-" title="Direct link to heading">​</a></h3><p>Password Based Key Derivation Function - generates key K from password, salt and repeat counter</p><p><strong>Kind</strong>: static method of <a href="#ECDH"><code>ECDH</code></a><br>
 <strong>Returns</strong>: key derived key<br>
-<strong>this</strong>: <code>{ECDH}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECDH{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: sha is the hash type<br>
 <strong>Parameter</strong>: Pass input password<br>
 <strong>Parameter</strong>: Salt salt value<br>
 <strong>Parameter</strong>: rep Number of times to be iterated.<br>
-<strong>Parameter</strong>: 0len is output desired length of key<br>
-<a name="ECDH.HMAC"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecdhhmac-"></a><a href="#ecdhhmac-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ECDH.HMAC() ⇒</h3>
-<p>HMAC of message M using key K to create tag of length tag.length</p>
-<p><strong>Kind</strong>: static method of <a href="#ECDH"><code>ECDH</code></a>  <br>
+<strong>Parameter</strong>: 0len is output desired length of key  </p><a name="ECDH.HMAC"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecdhhmac-">ECDH.HMAC() ⇒<a class="hash-link" href="#ecdhhmac-" title="Direct link to heading">​</a></h3><p>HMAC of message M using key K to create tag of length tag.length</p><p><strong>Kind</strong>: static method of <a href="#ECDH"><code>ECDH</code></a><br>
 <strong>Returns</strong>: error code<br>
-<strong>this</strong>: <code>{ECDH}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECDH{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: sha is the hash type<br>
 <strong>Parameter</strong>: M input message<br>
 <strong>Parameter</strong>: K input encryption key<br>
-<strong>Parameter</strong>: tag is the output HMAC<br>
-<a name="ECDH.AES_CBC_IV0_ENCRYPT"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecdhaes_cbc_iv0_encrypt-"></a><a href="#ecdhaes_cbc_iv0_encrypt-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ECDH.AES_CBC_IV0_ENCRYPT() ⇒</h3>
-<p>AES encrypts a plaintext to a ciphtertext</p>
-<p><strong>Kind</strong>: static method of <a href="#ECDH"><code>ECDH</code></a>  <br>
+<strong>Parameter</strong>: tag is the output HMAC  </p><a name="ECDH.AES_CBC_IV0_ENCRYPT"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecdhaes_cbc_iv0_encrypt-">ECDH.AES_CBC_IV0_ENCRYPT() ⇒<a class="hash-link" href="#ecdhaes_cbc_iv0_encrypt-" title="Direct link to heading">​</a></h3><p>AES encrypts a plaintext to a ciphtertext</p><p><strong>Kind</strong>: static method of <a href="#ECDH"><code>ECDH</code></a><br>
 <strong>Returns</strong>: C Ciphertext<br>
-<strong>this</strong>: <code>{ECDH}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECDH{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: M input message<br>
-<strong>Parameter</strong>: K AES key<br>
-<a name="ECDH.AES_CBC_IV0_DECRYPT"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecdhaes_cbc_iv0_decrypt-"></a><a href="#ecdhaes_cbc_iv0_decrypt-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ECDH.AES_CBC_IV0_DECRYPT() ⇒</h3>
-<p>AES encrypts a plaintext to a ciphtertext</p>
-<p><strong>Kind</strong>: static method of <a href="#ECDH"><code>ECDH</code></a>  <br>
+<strong>Parameter</strong>: K AES key  </p><a name="ECDH.AES_CBC_IV0_DECRYPT"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecdhaes_cbc_iv0_decrypt-">ECDH.AES_CBC_IV0_DECRYPT() ⇒<a class="hash-link" href="#ecdhaes_cbc_iv0_decrypt-" title="Direct link to heading">​</a></h3><p>AES encrypts a plaintext to a ciphtertext</p><p><strong>Kind</strong>: static method of <a href="#ECDH"><code>ECDH</code></a><br>
 <strong>Returns</strong>: P Plaintext<br>
-<strong>this</strong>: <code>{ECDH}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECDH{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: C Ciphertext<br>
-<strong>Parameter</strong>: K AES key<br>
-<a name="ECDH.KEY_PAIR_GENERATE"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecdhkey_pair_generate-"></a><a href="#ecdhkey_pair_generate-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ECDH.KEY_PAIR_GENERATE() ⇒</h3>
-<p>Generate an ECC public/private key pair</p>
-<p><strong>Kind</strong>: static method of <a href="#ECDH"><code>ECDH</code></a>  <br>
+<strong>Parameter</strong>: K AES key  </p><a name="ECDH.KEY_PAIR_GENERATE"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecdhkey_pair_generate-">ECDH.KEY_PAIR_GENERATE() ⇒<a class="hash-link" href="#ecdhkey_pair_generate-" title="Direct link to heading">​</a></h3><p>Generate an ECC public/private key pair</p><p><strong>Kind</strong>: static method of <a href="#ECDH"><code>ECDH</code></a><br>
 <strong>Returns</strong>: 0 or an error code<br>
-<strong>this</strong>: <code>{ECDH}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECDH{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: rng Cryptographically Secure Random Number Generator<br>
 <strong>Parameter</strong>: S the private key<br>
-<strong>Parameter</strong>: W the output public key, which is s.G, where G is a fixed generator<br>
-<a name="ECDH.PUBLIC_KEY_VALIDATE"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecdhpublic_key_validate-"></a><a href="#ecdhpublic_key_validate-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ECDH.PUBLIC_KEY_VALIDATE() ⇒</h3>
-<p>Generate an ECC public/private key pair</p>
-<p><strong>Kind</strong>: static method of <a href="#ECDH"><code>ECDH</code></a>  <br>
+<strong>Parameter</strong>: W the output public key, which is s.G, where G is a fixed generator  </p><a name="ECDH.PUBLIC_KEY_VALIDATE"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecdhpublic_key_validate-">ECDH.PUBLIC_KEY_VALIDATE() ⇒<a class="hash-link" href="#ecdhpublic_key_validate-" title="Direct link to heading">​</a></h3><p>Generate an ECC public/private key pair</p><p><strong>Kind</strong>: static method of <a href="#ECDH"><code>ECDH</code></a><br>
 <strong>Returns</strong>: 0 or an error code<br>
-<strong>this</strong>: <code>{ECDH}</code>  <br>
-<strong>Parameter</strong>: W the input public key to be validated<br>
-<a name="ECDH.ECPSVDP_DH"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecdhecpsvdp_dh-"></a><a href="#ecdhecpsvdp_dh-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ECDH.ECPSVDP_DH() ⇒</h3>
-<p>Generate Diffie-Hellman shared key</p>
-<p><strong>Kind</strong>: static method of <a href="#ECDH"><code>ECDH</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECDH{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: W the input public key to be validated  </p><a name="ECDH.ECPSVDP_DH"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecdhecpsvdp_dh-">ECDH.ECPSVDP_DH() ⇒<a class="hash-link" href="#ecdhecpsvdp_dh-" title="Direct link to heading">​</a></h3><p>Generate Diffie-Hellman shared key</p><p><strong>Kind</strong>: static method of <a href="#ECDH"><code>ECDH</code></a><br>
 <strong>Returns</strong>: 0 or an error code<br>
-<strong>this</strong>: <code>{ECDH}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECDH{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: S the private key<br>
 <strong>Parameter</strong>: W the output public key, which is s.G, where G is a fixed generator<br>
-<strong>Parameter</strong>: K the output shared key, in fact the x-coordinate of s.W<br>
-<a name="ECDH.ECPSP_DSA"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecdhecpsp_dsa-"></a><a href="#ecdhecpsp_dsa-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ECDH.ECPSP_DSA() ⇒</h3>
-<p>ECDSA Signature</p>
-<p><strong>Kind</strong>: static method of <a href="#ECDH"><code>ECDH</code></a>  <br>
+<strong>Parameter</strong>: K the output shared key, in fact the x-coordinate of s.W  </p><a name="ECDH.ECPSP_DSA"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecdhecpsp_dsa-">ECDH.ECPSP_DSA() ⇒<a class="hash-link" href="#ecdhecpsp_dsa-" title="Direct link to heading">​</a></h3><p>ECDSA Signature</p><p><strong>Kind</strong>: static method of <a href="#ECDH"><code>ECDH</code></a><br>
 <strong>Returns</strong>: 0 or an error code<br>
-<strong>this</strong>: <code>{ECDH}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECDH{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: sha is the hash type<br>
 <strong>Parameter</strong>: RNG Cryptographically Secure Random Number Generator<br>
 <strong>Parameter</strong>: S the private key<br>
 <strong>Parameter</strong>: F the input message to be signed<br>
 <strong>Parameter</strong>: C component of the output signature<br>
-<strong>Parameter</strong>: D component of the output signature<br>
-<a name="ECDH.ECPVP_DSA"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecdhecpvp_dsa-"></a><a href="#ecdhecpvp_dsa-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ECDH.ECPVP_DSA() ⇒</h3>
-<p>ECDSA Signature Verification</p>
-<p><strong>Kind</strong>: static method of <a href="#ECDH"><code>ECDH</code></a>  <br>
+<strong>Parameter</strong>: D component of the output signature  </p><a name="ECDH.ECPVP_DSA"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecdhecpvp_dsa-">ECDH.ECPVP_DSA() ⇒<a class="hash-link" href="#ecdhecpvp_dsa-" title="Direct link to heading">​</a></h3><p>ECDSA Signature Verification</p><p><strong>Kind</strong>: static method of <a href="#ECDH"><code>ECDH</code></a><br>
 <strong>Returns</strong>: 0 or an error code<br>
-<strong>this</strong>: <code>{ECDH}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECDH{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: sha is the hash type<br>
 <strong>Parameter</strong>: W the public key<br>
 <strong>Parameter</strong>: F the input message to be signed<br>
 <strong>Parameter</strong>: C component of the output signature<br>
-<strong>Parameter</strong>: D component of the output signature<br>
-<a name="ECDH.ECIES_ENCRYPT"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecdhecies_encrypt-"></a><a href="#ecdhecies_encrypt-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ECDH.ECIES_ENCRYPT() ⇒</h3>
-<p>ECIES Encryption</p>
-<p><strong>Kind</strong>: static method of <a href="#ECDH"><code>ECDH</code></a>  <br>
+<strong>Parameter</strong>: D component of the output signature  </p><a name="ECDH.ECIES_ENCRYPT"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecdhecies_encrypt-">ECDH.ECIES_ENCRYPT() ⇒<a class="hash-link" href="#ecdhecies_encrypt-" title="Direct link to heading">​</a></h3><p>ECIES Encryption</p><p><strong>Kind</strong>: static method of <a href="#ECDH"><code>ECDH</code></a><br>
 <strong>Returns</strong>: C ciphertext<br>
-<strong>this</strong>: <code>{ECDH}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECDH{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: sha is the hash type<br>
 <strong>Parameter</strong>: P1 input Key Derivation parameters<br>
 <strong>Parameter</strong>: P2 input Encoding parameters<br>
@@ -223,18 +97,17 @@
 <strong>Parameter</strong>: W the public key<br>
 <strong>Parameter</strong>: M the input message to be encrypted<br>
 <strong>Parameter</strong>: V component of the output ciphertext<br>
-<strong>Parameter</strong>: T the output HMAC tag, part of the ciphertext<br>
-<a name="ECDH.ECIES_DECRYPT"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecdhecies_decrypt-"></a><a href="#ecdhecies_decrypt-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ECDH.ECIES_DECRYPT() ⇒</h3>
-<p>ECIES Encryption</p>
-<p><strong>Kind</strong>: static method of <a href="#ECDH"><code>ECDH</code></a>  <br>
+<strong>Parameter</strong>: T the output HMAC tag, part of the ciphertext  </p><a name="ECDH.ECIES_DECRYPT"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecdhecies_decrypt-">ECDH.ECIES_DECRYPT() ⇒<a class="hash-link" href="#ecdhecies_decrypt-" title="Direct link to heading">​</a></h3><p>ECIES Encryption</p><p><strong>Kind</strong>: static method of <a href="#ECDH"><code>ECDH</code></a><br>
 <strong>Returns</strong>: M plaintext<br>
-<strong>this</strong>: <code>{ECDH}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECDH{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: sha is the hash type<br>
 <strong>Parameter</strong>: P1 input Key Derivation parameters<br>
 <strong>Parameter</strong>: P2 input Encoding parameters<br>
 <strong>Parameter</strong>: V component of the output ciphertext<br>
 <strong>Parameter</strong>: C Ciphertext<br>
 <strong>Parameter</strong>: T the output HMAC tag, part of the ciphertext<br>
-<strong>Parameter</strong>: U the private key</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/cryptojs/dbig"><span class="arrow-prev">← </span><span>DBIG</span></a><a class="docs-next button" href="/docs/cryptojs/ecp"><span>ECP</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#ecdh">ECDH</a><ul class="toc-headings"><li><a href="#new-ecdh">new ECDH()</a></li><li><a href="#ecdhinttobytes-">ECDH.inttobytes() ⇒</a></li><li><a href="#ecdhbytestostring-">ECDH.bytestostring() ⇒</a></li><li><a href="#ecdhstringtobytes-">ECDH.stringtobytes() ⇒</a></li><li><a href="#ecdhhashit-">ECDH.hashit() ⇒</a></li><li><a href="#ecdhkdf2-">ECDH.KDF2() ⇒</a></li><li><a href="#ecdhpbkdf2-">ECDH.PBKDF2() ⇒</a></li><li><a href="#ecdhhmac-">ECDH.HMAC() ⇒</a></li><li><a href="#ecdhaes_cbc_iv0_encrypt-">ECDH.AES_CBC_IV0_ENCRYPT() ⇒</a></li><li><a href="#ecdhaes_cbc_iv0_decrypt-">ECDH.AES_CBC_IV0_DECRYPT() ⇒</a></li><li><a href="#ecdhkey_pair_generate-">ECDH.KEY_PAIR_GENERATE() ⇒</a></li><li><a href="#ecdhpublic_key_validate-">ECDH.PUBLIC_KEY_VALIDATE() ⇒</a></li><li><a href="#ecdhecpsvdp_dh-">ECDH.ECPSVDP_DH() ⇒</a></li><li><a href="#ecdhecpsp_dsa-">ECDH.ECPSP_DSA() ⇒</a></li><li><a href="#ecdhecpvp_dsa-">ECDH.ECPVP_DSA() ⇒</a></li><li><a href="#ecdhecies_encrypt-">ECDH.ECIES_ENCRYPT() ⇒</a></li><li><a href="#ecdhecies_decrypt-">ECDH.ECIES_DECRYPT() ⇒</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<strong>Parameter</strong>: U the private key</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/cryptojs/dbig"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">DBIG</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/cryptojs/ecp"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">ECP</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#ecdh" class="table-of-contents__link toc-highlight">ECDH</a><ul><li><a href="#new-ecdh" class="table-of-contents__link toc-highlight">new ECDH()</a></li><li><a href="#ecdhinttobytes-" class="table-of-contents__link toc-highlight">ECDH.inttobytes() ⇒</a></li><li><a href="#ecdhbytestostring-" class="table-of-contents__link toc-highlight">ECDH.bytestostring() ⇒</a></li><li><a href="#ecdhstringtobytes-" class="table-of-contents__link toc-highlight">ECDH.stringtobytes() ⇒</a></li><li><a href="#ecdhhashit-" class="table-of-contents__link toc-highlight">ECDH.hashit() ⇒</a></li><li><a href="#ecdhkdf2-" class="table-of-contents__link toc-highlight">ECDH.KDF2() ⇒</a></li><li><a href="#ecdhpbkdf2-" class="table-of-contents__link toc-highlight">ECDH.PBKDF2() ⇒</a></li><li><a href="#ecdhhmac-" class="table-of-contents__link toc-highlight">ECDH.HMAC() ⇒</a></li><li><a href="#ecdhaes_cbc_iv0_encrypt-" class="table-of-contents__link toc-highlight">ECDH.AES_CBC_IV0_ENCRYPT() ⇒</a></li><li><a href="#ecdhaes_cbc_iv0_decrypt-" class="table-of-contents__link toc-highlight">ECDH.AES_CBC_IV0_DECRYPT() ⇒</a></li><li><a href="#ecdhkey_pair_generate-" class="table-of-contents__link toc-highlight">ECDH.KEY_PAIR_GENERATE() ⇒</a></li><li><a href="#ecdhpublic_key_validate-" class="table-of-contents__link toc-highlight">ECDH.PUBLIC_KEY_VALIDATE() ⇒</a></li><li><a href="#ecdhecpsvdp_dh-" class="table-of-contents__link toc-highlight">ECDH.ECPSVDP_DH() ⇒</a></li><li><a href="#ecdhecpsp_dsa-" class="table-of-contents__link toc-highlight">ECDH.ECPSP_DSA() ⇒</a></li><li><a href="#ecdhecpvp_dsa-" class="table-of-contents__link toc-highlight">ECDH.ECPVP_DSA() ⇒</a></li><li><a href="#ecdhecies_encrypt-" class="table-of-contents__link toc-highlight">ECDH.ECIES_ENCRYPT() ⇒</a></li><li><a href="#ecdhecies_decrypt-" class="table-of-contents__link toc-highlight">ECDH.ECIES_DECRYPT() ⇒</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/cryptojs/ecp/index.html b/docs/cryptojs/ecp/index.html
index a7c4e3f..4f91eab 100644
--- a/docs/cryptojs/ecp/index.html
+++ b/docs/cryptojs/ecp/index.html
@@ -1,353 +1,53 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>ECP · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;a name=&quot;ECP&quot;&gt;&lt;/a&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="ECP · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;a name=&quot;ECP&quot;&gt;&lt;/a&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>AMCL JavaScript API 1.0.0</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-cryptojs/ecp">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">ECP | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/cryptojs/ecp"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="ECP | Apache Milagro"><meta data-rh="true" name="description" content="ECP"><meta data-rh="true" property="og:description" content="ECP"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/cryptojs/ecp"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/ecp" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/ecp" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">ECP</h1></header><article><div><span><p><a name="ECP"></a></p>
-<h2><a class="anchor" aria-hidden="true" id="ecp"></a><a href="#ecp" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ECP</h2>
-<p><strong>Kind</strong>: global class<br>
-<strong>this</strong>: <code>{ECP}</code></p>
-<ul>
-<li><a href="#ECP">ECP</a>
-<ul>
-<li><a href="#new_ECP_new">new ECP()</a></li>
-<li><em>instance</em>
-<ul>
-<li><a href="#ECP+is_infinity">.is_infinity(1)</a></li>
-<li><a href="#ECP+cswap">.cswap()</a></li>
-<li><a href="#ECP+cmove">.cmove()</a></li>
-<li><a href="#ECP+select">.select()</a></li>
-<li><a href="#ECP+copy">.copy(P)</a></li>
-<li><a href="#ECP+neg">.neg()</a></li>
-<li><a href="#ECP+inf">.inf()</a></li>
-<li><a href="#ECP+setxy">.setxy(ix, iy)</a></li>
-<li><a href="#ECP+setxi">.setxi(ix, s)</a></li>
-<li><a href="#ECP+setx">.setx(ix)</a></li>
-<li><a href="#ECP+affine">.affine()</a></li>
-<li><a href="#ECP+getX">.getX()</a></li>
-<li><a href="#ECP+getY">.getY()</a></li>
-<li><a href="#ECP+getS">.getS()</a></li>
-<li><a href="#ECP+getx">.getx()</a></li>
-<li><a href="#ECP+gety">.gety()</a></li>
-<li><a href="#ECP+getz">.getz()</a></li>
-<li><a href="#ECP+toBytes">.toBytes(b)</a></li>
-<li><a href="#ECP+toString">.toString()</a> ⇒</li>
-<li><a href="#ECP+dbl">.dbl()</a></li>
-<li><a href="#ECP+add">.add()</a></li>
-<li><a href="#ECP+sub">.sub(Q)</a></li>
-<li><a href="#ECP+pinmul">.pinmul(e, bts)</a></li>
-<li><a href="#ECP+cfp">.cfp()</a></li>
-<li><a href="#ECP+mul">.mul(e)</a></li>
-<li><a href="#ECP+mul2">.mul2(e, Q, f)</a></li>
-</ul></li>
-<li><em>static</em>
-<ul>
-<li><a href="#ECP.generator">.generator()</a></li>
-<li><a href="#ECP.fromBytes">.fromBytes(b)</a></li>
-<li><a href="#ECP.RHS">.RHS(x)</a></li>
-</ul></li>
-</ul></li>
-</ul>
-<p><a name="new_ECP_new"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="new-ecp"></a><a href="#new-ecp" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>new ECP()</h3>
-<p>Creates an instance of ECP</p>
-<p><a name="ECP+is_infinity"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecpis_infinity1"></a><a href="#ecpis_infinity1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP.is_infinity(1)</h3>
-<p>Tests for ECP point equal to infinity</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a>  <br>
-<strong>this</strong>: <code>{ECP}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>1</td><td>if infinity, else returns 0</td></tr>
-</tbody>
-</table>
-<p><a name="ECP+cswap"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecpcswap"></a><a href="#ecpcswap" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP.cswap()</h3>
-<p>conditional swap of this and Q dependant on dCopy ECP point to another ECP point</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a>  <br>
-<strong>this</strong>: <code>{ECP}</code>  <br>
-<a name="ECP+cmove"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecpcmove"></a><a href="#ecpcmove" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP.cmove()</h3>
-<p>conditional move of Q to P dependant on d</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a>  <br>
-<strong>this</strong>: <code>{ECP}</code>  <br>
-<a name="ECP+select"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecpselect"></a><a href="#ecpselect" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP.select()</h3>
-<p>Constant time select from pre-computed table</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a>  <br>
-<strong>this</strong>: <code>{ECP}</code>  <br>
-<a name="ECP+copy"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecpcopyp"></a><a href="#ecpcopyp" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP.copy(P)</h3>
-<p>Copy ECP point to another ECP point</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a>  <br>
-<strong>this</strong>: <code>{ECP}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>P</td><td>ECP instance</td></tr>
-</tbody>
-</table>
-<p><a name="ECP+neg"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecpneg"></a><a href="#ecpneg" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP.neg()</h3>
-<p>set this=-this</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a>  <br>
-<strong>this</strong>: <code>{ECP}</code>  <br>
-<a name="ECP+inf"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecpinf"></a><a href="#ecpinf" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP.inf()</h3>
-<p>Set ECP to point-at-infinity</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a>  <br>
-<strong>this</strong>: <code>{ECP}</code>  <br>
-<a name="ECP+setxy"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecpsetxyix-iy"></a><a href="#ecpsetxyix-iy" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP.setxy(ix, iy)</h3>
-<p>set this=(x,y)</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a>  <br>
-<strong>this</strong>: <code>{ECP}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>ix</td><td>x-value</td></tr>
-<tr><td>iy</td><td>y-value</td></tr>
-</tbody>
-</table>
-<p><a name="ECP+setxi"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecpsetxiix-s"></a><a href="#ecpsetxiix-s" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP.setxi(ix, s)</h3>
-<p>set this=x, where x is ctx.BIG, y is derived from sign s</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a>  <br>
-<strong>this</strong>: <code>{ECP}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>ix</td><td>x-value</td></tr>
-<tr><td>s</td><td>sign to derive y</td></tr>
-</tbody>
-</table>
-<p><a name="ECP+setx"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecpsetxix"></a><a href="#ecpsetxix" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP.setx(ix)</h3>
-<p>set this=x, y calculated from curve equation</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a>  <br>
-<strong>this</strong>: <code>{ECP}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>ix</td><td>x-value</td></tr>
-</tbody>
-</table>
-<p><a name="ECP+affine"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecpaffine"></a><a href="#ecpaffine" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP.affine()</h3>
-<p>convert this to affine, from (x,y,z) to (x,y)</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a>  <br>
-<strong>this</strong>: <code>{ECP}</code>  <br>
-<a name="ECP+getX"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecpgetx"></a><a href="#ecpgetx" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP.getX()</h3>
-<p>extract affine x as ctx.FP2</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a>  <br>
-<strong>this</strong>: <code>{ECP}</code>  <br>
-<a name="ECP+getY"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecpgety"></a><a href="#ecpgety" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP.getY()</h3>
-<p>extract affine y as ctx.FP2</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a>  <br>
-<strong>this</strong>: <code>{ECP}</code>  <br>
-<a name="ECP+getS"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecpgets"></a><a href="#ecpgets" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP.getS()</h3>
-<p>get sign of Y</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a>  <br>
-<strong>this</strong>: <code>{ECP}</code>  <br>
-<a name="ECP+getx"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecpgetx-1"></a><a href="#ecpgetx-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP.getx()</h3>
-<p>extract x as ctx.FP</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a>  <br>
-<strong>this</strong>: <code>{ECP}</code>  <br>
-<a name="ECP+gety"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecpgety-1"></a><a href="#ecpgety-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP.gety()</h3>
-<p>extract y as ctx.FP</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a>  <br>
-<strong>this</strong>: <code>{ECP}</code>  <br>
-<a name="ECP+getz"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecpgetz"></a><a href="#ecpgetz" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP.getz()</h3>
-<p>extract z as ctx.FP</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a>  <br>
-<strong>this</strong>: <code>{ECP}</code>  <br>
-<a name="ECP+toBytes"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecptobytesb"></a><a href="#ecptobytesb" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP.toBytes(b)</h3>
-<p>convert this to byte arrayextract projective x</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a>  <br>
-<strong>this</strong>: <code>{ECP}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>b</td><td>byte array output</td></tr>
-</tbody>
-</table>
-<p><a name="ECP+toString"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecptostring-"></a><a href="#ecptostring-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP.toString() ⇒</h3>
-<p>convert this to hex string</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a>  <br>
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/amcl-overview">AMCL Library</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-overview">AMCL Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API 1.0.0</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/aes">AES</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/big">BIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls">BLS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls192">BLS192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls256">BLS256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/dbig">DBIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/cryptojs/ecp">ECP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ff">FF</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp">FP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp2">FP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp4">FP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp8">FP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp12">FP12</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp16">FP16</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp24">FP24</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp48">FP48</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/gcm">GCM</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash256">HASH256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash384">HASH384</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash512">HASH512</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin">MPIN</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair">PAIR</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rand">RAND</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rsa">RSA</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/sha3">SHA3</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/unit64">UInt64</a></li></ul></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL Library</span><meta itemprop="position" content="1"></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL JavaScript API 1.0.0</span><meta itemprop="position" content="2"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">ECP</span><meta itemprop="position" content="3"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>ECP</h1></header><a name="ECP"></a><h2 class="anchor anchorWithStickyNavbar_LWe7" id="ecp">ECP<a class="hash-link" href="#ecp" title="Direct link to heading">​</a></h2><p><strong>Kind</strong>: global class<br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP{&quot;}&quot;}</code>  </p><ul><li><a href="#ECP">ECP</a><ul><li><a href="#new_ECP_new">new ECP()</a></li><li><em>instance</em><ul><li><a href="#ECP+is_infinity">.is_infinity(1)</a></li><li><a href="#ECP+cswap">.cswap()</a></li><li><a href="#ECP+cmove">.cmove()</a></li><li><a href="#ECP+select">.select()</a></li><li><a href="#ECP+copy">.copy(P)</a></li><li><a href="#ECP+neg">.neg()</a></li><li><a href="#ECP+inf">.inf()</a></li><li><a href="#ECP+setxy">.setxy(ix, iy)</a></li><li><a href="#ECP+setxi">.setxi(ix, s)</a></li><li><a href="#ECP+setx">.setx(ix)</a></li><li><a href="#ECP+affine">.affine()</a></li><li><a href="#ECP+getX">.getX()</a></li><li><a href="#ECP+getY">.getY()</a></li><li><a href="#ECP+getS">.getS()</a></li><li><a href="#ECP+getx">.getx()</a></li><li><a href="#ECP+gety">.gety()</a></li><li><a href="#ECP+getz">.getz()</a></li><li><a href="#ECP+toBytes">.toBytes(b)</a></li><li><a href="#ECP+toString">.toString()</a> ⇒</li><li><a href="#ECP+dbl">.dbl()</a></li><li><a href="#ECP+add">.add()</a></li><li><a href="#ECP+sub">.sub(Q)</a></li><li><a href="#ECP+pinmul">.pinmul(e, bts)</a></li><li><a href="#ECP+cfp">.cfp()</a></li><li><a href="#ECP+mul">.mul(e)</a></li><li><a href="#ECP+mul2">.mul2(e, Q, f)</a></li></ul></li><li><em>static</em><ul><li><a href="#ECP.generator">.generator()</a></li><li><a href="#ECP.fromBytes">.fromBytes(b)</a></li><li><a href="#ECP.RHS">.RHS(x)</a></li></ul></li></ul></li></ul><a name="new_ECP_new"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="new-ecp">new ECP()<a class="hash-link" href="#new-ecp" title="Direct link to heading">​</a></h3><p>Creates an instance of ECP</p><a name="ECP+is_infinity"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecpis_infinity1">ecP.is_infinity(1)<a class="hash-link" href="#ecpis_infinity1" title="Direct link to heading">​</a></h3><p>Tests for ECP point equal to infinity</p><p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>1</td><td>if infinity, else returns 0</td></tr></tbody></table><a name="ECP+cswap"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecpcswap">ecP.cswap()<a class="hash-link" href="#ecpcswap" title="Direct link to heading">​</a></h3><p>conditional swap of this and Q dependant on dCopy ECP point to another ECP point</p><p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP{&quot;}&quot;}</code>  </p><a name="ECP+cmove"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecpcmove">ecP.cmove()<a class="hash-link" href="#ecpcmove" title="Direct link to heading">​</a></h3><p>conditional move of Q to P dependant on d</p><p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP{&quot;}&quot;}</code>  </p><a name="ECP+select"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecpselect">ecP.select()<a class="hash-link" href="#ecpselect" title="Direct link to heading">​</a></h3><p>Constant time select from pre-computed table</p><p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP{&quot;}&quot;}</code>  </p><a name="ECP+copy"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecpcopyp">ecP.copy(P)<a class="hash-link" href="#ecpcopyp" title="Direct link to heading">​</a></h3><p>Copy ECP point to another ECP point</p><p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>P</td><td>ECP instance</td></tr></tbody></table><a name="ECP+neg"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecpneg">ecP.neg()<a class="hash-link" href="#ecpneg" title="Direct link to heading">​</a></h3><p>set this=-this</p><p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP{&quot;}&quot;}</code>  </p><a name="ECP+inf"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecpinf">ecP.inf()<a class="hash-link" href="#ecpinf" title="Direct link to heading">​</a></h3><p>Set ECP to point-at-infinity</p><p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP{&quot;}&quot;}</code>  </p><a name="ECP+setxy"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecpsetxyix-iy">ecP.setxy(ix, iy)<a class="hash-link" href="#ecpsetxyix-iy" title="Direct link to heading">​</a></h3><p>set this=(x,y)</p><p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>ix</td><td>x-value</td></tr><tr><td>iy</td><td>y-value</td></tr></tbody></table><a name="ECP+setxi"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecpsetxiix-s">ecP.setxi(ix, s)<a class="hash-link" href="#ecpsetxiix-s" title="Direct link to heading">​</a></h3><p>set this=x, where x is ctx.BIG, y is derived from sign s</p><p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>ix</td><td>x-value</td></tr><tr><td>s</td><td>sign to derive y</td></tr></tbody></table><a name="ECP+setx"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecpsetxix">ecP.setx(ix)<a class="hash-link" href="#ecpsetxix" title="Direct link to heading">​</a></h3><p>set this=x, y calculated from curve equation</p><p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>ix</td><td>x-value</td></tr></tbody></table><a name="ECP+affine"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecpaffine">ecP.affine()<a class="hash-link" href="#ecpaffine" title="Direct link to heading">​</a></h3><p>convert this to affine, from (x,y,z) to (x,y)</p><p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP{&quot;}&quot;}</code>  </p><a name="ECP+getX"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecpgetx">ecP.getX()<a class="hash-link" href="#ecpgetx" title="Direct link to heading">​</a></h3><p>extract affine x as ctx.FP2</p><p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP{&quot;}&quot;}</code>  </p><a name="ECP+getY"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecpgety">ecP.getY()<a class="hash-link" href="#ecpgety" title="Direct link to heading">​</a></h3><p>extract affine y as ctx.FP2</p><p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP{&quot;}&quot;}</code>  </p><a name="ECP+getS"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecpgets">ecP.getS()<a class="hash-link" href="#ecpgets" title="Direct link to heading">​</a></h3><p>get sign of Y</p><p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP{&quot;}&quot;}</code>  </p><a name="ECP+getx"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecpgetx-1">ecP.getx()<a class="hash-link" href="#ecpgetx-1" title="Direct link to heading">​</a></h3><p>extract x as ctx.FP</p><p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP{&quot;}&quot;}</code>  </p><a name="ECP+gety"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecpgety-1">ecP.gety()<a class="hash-link" href="#ecpgety-1" title="Direct link to heading">​</a></h3><p>extract y as ctx.FP</p><p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP{&quot;}&quot;}</code>  </p><a name="ECP+getz"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecpgetz">ecP.getz()<a class="hash-link" href="#ecpgetz" title="Direct link to heading">​</a></h3><p>extract z as ctx.FP</p><p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP{&quot;}&quot;}</code>  </p><a name="ECP+toBytes"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecptobytesb">ecP.toBytes(b)<a class="hash-link" href="#ecptobytesb" title="Direct link to heading">​</a></h3><p>convert this to byte arrayextract projective x</p><p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>b</td><td>byte array output</td></tr></tbody></table><a name="ECP+toString"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecptostring-">ecP.toString() ⇒<a class="hash-link" href="#ecptostring-" title="Direct link to heading">​</a></h3><p>convert this to hex string</p><p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a><br>
 <strong>Returns</strong>: hex string<br>
-<strong>this</strong>: <code>{ECP}</code>  <br>
-<a name="ECP+dbl"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecpdbl"></a><a href="#ecpdbl" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP.dbl()</h3>
-<p>this+=this</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a>  <br>
-<strong>this</strong>: <code>{ECP}</code>  <br>
-<a name="ECP+add"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecpadd"></a><a href="#ecpadd" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP.add()</h3>
-<p>Adds ECP instances</p>
-<p>param Q ECP instance</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a>  <br>
-<strong>this</strong>: <code>{ECP}</code>  <br>
-<a name="ECP+sub"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecpsubq"></a><a href="#ecpsubq" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP.sub(Q)</h3>
-<p>Subtracts ECP instance Q  from this</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a>  <br>
-<strong>this</strong>: <code>{ECP}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>Q</td><td>ECP instance</td></tr>
-</tbody>
-</table>
-<p><a name="ECP+pinmul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecppinmule-bts"></a><a href="#ecppinmule-bts" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP.pinmul(e, bts)</h3>
-<p>constant time multiply by small integer of length bts - use ladder</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a>  <br>
-<strong>this</strong>: <code>{ECP}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>e</td><td>small integer</td></tr>
-<tr><td>bts</td><td>e bit length</td></tr>
-</tbody>
-</table>
-<p><a name="ECP+cfp"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecpcfp"></a><a href="#ecpcfp" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP.cfp()</h3>
-<p>multiply this by the curves cofactor</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a>  <br>
-<strong>this</strong>: <code>{ECP}</code>  <br>
-<a name="ECP+mul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecpmule"></a><a href="#ecpmule" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP.mul(e)</h3>
-<p>Multiplies an ECP instance P by a BIG, side-channel resistant</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a>  <br>
-<strong>this</strong>: <code>{ECP}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>e</td><td>BIG number multiplier</td></tr>
-</tbody>
-</table>
-<p><a name="ECP+mul2"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecpmul2e-q-f"></a><a href="#ecpmul2e-q-f" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP.mul2(e, Q, f)</h3>
-<p>Return e.this+f.Q</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a>  <br>
-<strong>this</strong>: <code>{ECP}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>e</td><td>BIG number multiplier</td></tr>
-<tr><td>Q</td><td>ECP instance</td></tr>
-<tr><td>f</td><td>BIG number multiplier</td></tr>
-</tbody>
-</table>
-<p><a name="ECP.generator"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecpgenerator"></a><a href="#ecpgenerator" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ECP.generator()</h3>
-<p>Set group generator</p>
-<p><strong>Kind</strong>: static method of <a href="#ECP"><code>ECP</code></a>  <br>
-<strong>this</strong>: <code>{ECP}</code>  <br>
-<a name="ECP.fromBytes"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecpfrombytesb"></a><a href="#ecpfrombytesb" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ECP.fromBytes(b)</h3>
-<p>convert from byte array to point</p>
-<p><strong>Kind</strong>: static method of <a href="#ECP"><code>ECP</code></a>  <br>
-<strong>this</strong>: <code>{ECP}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>b</td><td>input byte array</td></tr>
-</tbody>
-</table>
-<p><a name="ECP.RHS"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecprhsx"></a><a href="#ecprhsx" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ECP.RHS(x)</h3>
-<p>Calculate RHS of the curve equation</p>
-<p><strong>Kind</strong>: static method of <a href="#ECP"><code>ECP</code></a>  <br>
-<strong>this</strong>: <code>{ECP}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>x</td><td>x-value</td></tr>
-</tbody>
-</table>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/cryptojs/ecdh"><span class="arrow-prev">← </span><span>ECDH</span></a><a class="docs-next button" href="/docs/cryptojs/ecp2"><span>ECP2</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#ecp">ECP</a><ul class="toc-headings"><li><a href="#new-ecp">new ECP()</a></li><li><a href="#ecpis_infinity1">ecP.is_infinity(1)</a></li><li><a href="#ecpcswap">ecP.cswap()</a></li><li><a href="#ecpcmove">ecP.cmove()</a></li><li><a href="#ecpselect">ecP.select()</a></li><li><a href="#ecpcopyp">ecP.copy(P)</a></li><li><a href="#ecpneg">ecP.neg()</a></li><li><a href="#ecpinf">ecP.inf()</a></li><li><a href="#ecpsetxyix-iy">ecP.setxy(ix, iy)</a></li><li><a href="#ecpsetxiix-s">ecP.setxi(ix, s)</a></li><li><a href="#ecpsetxix">ecP.setx(ix)</a></li><li><a href="#ecpaffine">ecP.affine()</a></li><li><a href="#ecpgetx">ecP.getX()</a></li><li><a href="#ecpgety">ecP.getY()</a></li><li><a href="#ecpgets">ecP.getS()</a></li><li><a href="#ecpgetx-1">ecP.getx()</a></li><li><a href="#ecpgety-1">ecP.gety()</a></li><li><a href="#ecpgetz">ecP.getz()</a></li><li><a href="#ecptobytesb">ecP.toBytes(b)</a></li><li><a href="#ecptostring-">ecP.toString() ⇒</a></li><li><a href="#ecpdbl">ecP.dbl()</a></li><li><a href="#ecpadd">ecP.add()</a></li><li><a href="#ecpsubq">ecP.sub(Q)</a></li><li><a href="#ecppinmule-bts">ecP.pinmul(e, bts)</a></li><li><a href="#ecpcfp">ecP.cfp()</a></li><li><a href="#ecpmule">ecP.mul(e)</a></li><li><a href="#ecpmul2e-q-f">ecP.mul2(e, Q, f)</a></li><li><a href="#ecpgenerator">ECP.generator()</a></li><li><a href="#ecpfrombytesb">ECP.fromBytes(b)</a></li><li><a href="#ecprhsx">ECP.RHS(x)</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<strong>this</strong>: <code>{&quot;{&quot;}ECP{&quot;}&quot;}</code>  </p><a name="ECP+dbl"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecpdbl">ecP.dbl()<a class="hash-link" href="#ecpdbl" title="Direct link to heading">​</a></h3><p>this+=this</p><p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP{&quot;}&quot;}</code>  </p><a name="ECP+add"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecpadd">ecP.add()<a class="hash-link" href="#ecpadd" title="Direct link to heading">​</a></h3><p>Adds ECP instances</p><p>param Q ECP instance</p><p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP{&quot;}&quot;}</code>  </p><a name="ECP+sub"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecpsubq">ecP.sub(Q)<a class="hash-link" href="#ecpsubq" title="Direct link to heading">​</a></h3><p>Subtracts ECP instance Q  from this</p><p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>Q</td><td>ECP instance</td></tr></tbody></table><a name="ECP+pinmul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecppinmule-bts">ecP.pinmul(e, bts)<a class="hash-link" href="#ecppinmule-bts" title="Direct link to heading">​</a></h3><p>constant time multiply by small integer of length bts - use ladder</p><p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>e</td><td>small integer</td></tr><tr><td>bts</td><td>e bit length</td></tr></tbody></table><a name="ECP+cfp"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecpcfp">ecP.cfp()<a class="hash-link" href="#ecpcfp" title="Direct link to heading">​</a></h3><p>multiply this by the curves cofactor</p><p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP{&quot;}&quot;}</code>  </p><a name="ECP+mul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecpmule">ecP.mul(e)<a class="hash-link" href="#ecpmule" title="Direct link to heading">​</a></h3><p>Multiplies an ECP instance P by a BIG, side-channel resistant</p><p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>e</td><td>BIG number multiplier</td></tr></tbody></table><a name="ECP+mul2"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecpmul2e-q-f">ecP.mul2(e, Q, f)<a class="hash-link" href="#ecpmul2e-q-f" title="Direct link to heading">​</a></h3><p>Return e.this+f.Q</p><p><strong>Kind</strong>: instance method of <a href="#ECP"><code>ECP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>e</td><td>BIG number multiplier</td></tr><tr><td>Q</td><td>ECP instance</td></tr><tr><td>f</td><td>BIG number multiplier</td></tr></tbody></table><a name="ECP.generator"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecpgenerator">ECP.generator()<a class="hash-link" href="#ecpgenerator" title="Direct link to heading">​</a></h3><p>Set group generator</p><p><strong>Kind</strong>: static method of <a href="#ECP"><code>ECP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP{&quot;}&quot;}</code>  </p><a name="ECP.fromBytes"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecpfrombytesb">ECP.fromBytes(b)<a class="hash-link" href="#ecpfrombytesb" title="Direct link to heading">​</a></h3><p>convert from byte array to point</p><p><strong>Kind</strong>: static method of <a href="#ECP"><code>ECP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>b</td><td>input byte array</td></tr></tbody></table><a name="ECP.RHS"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecprhsx">ECP.RHS(x)<a class="hash-link" href="#ecprhsx" title="Direct link to heading">​</a></h3><p>Calculate RHS of the curve equation</p><p><strong>Kind</strong>: static method of <a href="#ECP"><code>ECP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>x</td><td>x-value</td></tr></tbody></table></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/cryptojs/ecdh"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">ECDH</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/cryptojs/ecp2"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">ECP2</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#ecp" class="table-of-contents__link toc-highlight">ECP</a><ul><li><a href="#new-ecp" class="table-of-contents__link toc-highlight">new ECP()</a></li><li><a href="#ecpis_infinity1" class="table-of-contents__link toc-highlight">ecP.is_infinity(1)</a></li><li><a href="#ecpcswap" class="table-of-contents__link toc-highlight">ecP.cswap()</a></li><li><a href="#ecpcmove" class="table-of-contents__link toc-highlight">ecP.cmove()</a></li><li><a href="#ecpselect" class="table-of-contents__link toc-highlight">ecP.select()</a></li><li><a href="#ecpcopyp" class="table-of-contents__link toc-highlight">ecP.copy(P)</a></li><li><a href="#ecpneg" class="table-of-contents__link toc-highlight">ecP.neg()</a></li><li><a href="#ecpinf" class="table-of-contents__link toc-highlight">ecP.inf()</a></li><li><a href="#ecpsetxyix-iy" class="table-of-contents__link toc-highlight">ecP.setxy(ix, iy)</a></li><li><a href="#ecpsetxiix-s" class="table-of-contents__link toc-highlight">ecP.setxi(ix, s)</a></li><li><a href="#ecpsetxix" class="table-of-contents__link toc-highlight">ecP.setx(ix)</a></li><li><a href="#ecpaffine" class="table-of-contents__link toc-highlight">ecP.affine()</a></li><li><a href="#ecpgetx" class="table-of-contents__link toc-highlight">ecP.getX()</a></li><li><a href="#ecpgety" class="table-of-contents__link toc-highlight">ecP.getY()</a></li><li><a href="#ecpgets" class="table-of-contents__link toc-highlight">ecP.getS()</a></li><li><a href="#ecpgetx-1" class="table-of-contents__link toc-highlight">ecP.getx()</a></li><li><a href="#ecpgety-1" class="table-of-contents__link toc-highlight">ecP.gety()</a></li><li><a href="#ecpgetz" class="table-of-contents__link toc-highlight">ecP.getz()</a></li><li><a href="#ecptobytesb" class="table-of-contents__link toc-highlight">ecP.toBytes(b)</a></li><li><a href="#ecptostring-" class="table-of-contents__link toc-highlight">ecP.toString() ⇒</a></li><li><a href="#ecpdbl" class="table-of-contents__link toc-highlight">ecP.dbl()</a></li><li><a href="#ecpadd" class="table-of-contents__link toc-highlight">ecP.add()</a></li><li><a href="#ecpsubq" class="table-of-contents__link toc-highlight">ecP.sub(Q)</a></li><li><a href="#ecppinmule-bts" class="table-of-contents__link toc-highlight">ecP.pinmul(e, bts)</a></li><li><a href="#ecpcfp" class="table-of-contents__link toc-highlight">ecP.cfp()</a></li><li><a href="#ecpmule" class="table-of-contents__link toc-highlight">ecP.mul(e)</a></li><li><a href="#ecpmul2e-q-f" class="table-of-contents__link toc-highlight">ecP.mul2(e, Q, f)</a></li><li><a href="#ecpgenerator" class="table-of-contents__link toc-highlight">ECP.generator()</a></li><li><a href="#ecpfrombytesb" class="table-of-contents__link toc-highlight">ECP.fromBytes(b)</a></li><li><a href="#ecprhsx" class="table-of-contents__link toc-highlight">ECP.RHS(x)</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/cryptojs/ecp2/index.html b/docs/cryptojs/ecp2/index.html
index 74f2d3b..ec05331 100644
--- a/docs/cryptojs/ecp2/index.html
+++ b/docs/cryptojs/ecp2/index.html
@@ -1,315 +1,50 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>ECP2 · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;a name=&quot;ECP2&quot;&gt;&lt;/a&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="ECP2 · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;a name=&quot;ECP2&quot;&gt;&lt;/a&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>AMCL JavaScript API 1.0.0</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-cryptojs/ecp2">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">ECP2 | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/cryptojs/ecp2"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="ECP2 | Apache Milagro"><meta data-rh="true" name="description" content="ECP2"><meta data-rh="true" property="og:description" content="ECP2"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/cryptojs/ecp2"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/ecp2" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/ecp2" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">ECP2</h1></header><article><div><span><p><a name="ECP2"></a></p>
-<h2><a class="anchor" aria-hidden="true" id="ecp2"></a><a href="#ecp2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ECP2</h2>
-<p><strong>Kind</strong>: global class<br>
-<strong>this</strong>: <code>{ECP2}</code></p>
-<ul>
-<li><a href="#ECP2">ECP2</a>
-<ul>
-<li><a href="#new_ECP2_new">new ECP2()</a></li>
-<li><em>instance</em>
-<ul>
-<li><a href="#ECP2+is_infinity">.is_infinity(1)</a></li>
-<li><a href="#ECP2+copy">.copy(P)</a></li>
-<li><a href="#ECP2+inf">.inf()</a></li>
-<li><a href="#ECP2+cmove">.cmove()</a></li>
-<li><a href="#ECP2+select">.select()</a></li>
-<li><a href="#ECP2+equals">.equals(Q)</a></li>
-<li><a href="#ECP2+neg">.neg()</a></li>
-<li><a href="#ECP2+affine">.affine()</a></li>
-<li><a href="#ECP2+getX">.getX()</a></li>
-<li><a href="#ECP2+getY">.getY()</a></li>
-<li><a href="#ECP2+getx">.getx()</a></li>
-<li><a href="#ECP2+gety">.gety()</a></li>
-<li><a href="#ECP2+getz">.getz()</a></li>
-<li><a href="#ECP2+toBytes">.toBytes(b)</a></li>
-<li><a href="#ECP2+toString">.toString()</a> ⇒</li>
-<li><a href="#ECP2+setxy">.setxy(ix, iy)</a></li>
-<li><a href="#ECP2+setx">.setx(ix)</a></li>
-<li><a href="#ECP2+frob">.frob()</a></li>
-<li><a href="#ECP2+dbl">.dbl()</a></li>
-<li><a href="#ECP2+add">.add()</a></li>
-<li><a href="#ECP2+sub">.sub(Q)</a></li>
-<li><a href="#ECP2+mul">.mul(e)</a></li>
-</ul></li>
-<li><em>static</em>
-<ul>
-<li><a href="#ECP2.generator">.generator()</a></li>
-<li><a href="#ECP2.fromBytes">.fromBytes(b)</a></li>
-<li><a href="#ECP2.RHS">.RHS(x)</a></li>
-<li><a href="#ECP2.mul4">.mul4()</a></li>
-</ul></li>
-</ul></li>
-</ul>
-<p><a name="new_ECP2_new"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="new-ecp2"></a><a href="#new-ecp2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>new ECP2()</h3>
-<p>Creates an instance of ECP2</p>
-<p><a name="ECP2+is_infinity"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp2is_infinity1"></a><a href="#ecp2is_infinity1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP2.is_infinity(1)</h3>
-<p>Tests for ECP2 point equal to infinity</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a>  <br>
-<strong>this</strong>: <code>{ECP2}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>1</td><td>if infinity, else returns 0</td></tr>
-</tbody>
-</table>
-<p><a name="ECP2+copy"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp2copyp"></a><a href="#ecp2copyp" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP2.copy(P)</h3>
-<p>Copy ECP2 point to another ECP2 point</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a>  <br>
-<strong>this</strong>: <code>{ECP2}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>P</td><td>ECP2 instance</td></tr>
-</tbody>
-</table>
-<p><a name="ECP2+inf"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp2inf"></a><a href="#ecp2inf" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP2.inf()</h3>
-<p>Set ECP2 to point-at-infinity</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a>  <br>
-<strong>this</strong>: <code>{ECP2}</code>  <br>
-<a name="ECP2+cmove"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp2cmove"></a><a href="#ecp2cmove" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP2.cmove()</h3>
-<p>conditional move of Q to P dependant on d</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a>  <br>
-<strong>this</strong>: <code>{ECP2}</code>  <br>
-<a name="ECP2+select"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp2select"></a><a href="#ecp2select" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP2.select()</h3>
-<p>Constant time select from pre-computed table</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a>  <br>
-<strong>this</strong>: <code>{ECP2}</code>  <br>
-<a name="ECP2+equals"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp2equalsq"></a><a href="#ecp2equalsq" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP2.equals(Q)</h3>
-<p>Test P == Q</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a>  <br>
-<strong>this</strong>: <code>{ECP2}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>Q</td><td>ECP2 instance</td></tr>
-</tbody>
-</table>
-<p><a name="ECP2+neg"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp2neg"></a><a href="#ecp2neg" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP2.neg()</h3>
-<p>set this=-this</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a>  <br>
-<strong>this</strong>: <code>{ECP2}</code>  <br>
-<a name="ECP2+affine"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp2affine"></a><a href="#ecp2affine" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP2.affine()</h3>
-<p>convert this to affine, from (x,y,z) to (x,y)</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a>  <br>
-<strong>this</strong>: <code>{ECP2}</code>  <br>
-<a name="ECP2+getX"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp2getx"></a><a href="#ecp2getx" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP2.getX()</h3>
-<p>extract affine x as ctx.FP2</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a>  <br>
-<strong>this</strong>: <code>{ECP2}</code>  <br>
-<a name="ECP2+getY"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp2gety"></a><a href="#ecp2gety" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP2.getY()</h3>
-<p>extract affine y as ctx.FP2</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a>  <br>
-<strong>this</strong>: <code>{ECP2}</code>  <br>
-<a name="ECP2+getx"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp2getx-1"></a><a href="#ecp2getx-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP2.getx()</h3>
-<p>extract projective x</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a>  <br>
-<strong>this</strong>: <code>{ECP2}</code>  <br>
-<a name="ECP2+gety"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp2gety-1"></a><a href="#ecp2gety-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP2.gety()</h3>
-<p>extract projective y</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a>  <br>
-<strong>this</strong>: <code>{ECP2}</code>  <br>
-<a name="ECP2+getz"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp2getz"></a><a href="#ecp2getz" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP2.getz()</h3>
-<p>extract projective z</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a>  <br>
-<strong>this</strong>: <code>{ECP2}</code>  <br>
-<a name="ECP2+toBytes"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp2tobytesb"></a><a href="#ecp2tobytesb" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP2.toBytes(b)</h3>
-<p>convert this to byte arrayextract projective x</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a>  <br>
-<strong>this</strong>: <code>{ECP2}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>b</td><td>byte array output</td></tr>
-</tbody>
-</table>
-<p><a name="ECP2+toString"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp2tostring-"></a><a href="#ecp2tostring-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP2.toString() ⇒</h3>
-<p>convert this to hex string</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a>  <br>
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/amcl-overview">AMCL Library</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-overview">AMCL Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API 1.0.0</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/aes">AES</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/big">BIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls">BLS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls192">BLS192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls256">BLS256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/dbig">DBIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp">ECP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ff">FF</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp">FP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp2">FP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp4">FP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp8">FP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp12">FP12</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp16">FP16</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp24">FP24</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp48">FP48</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/gcm">GCM</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash256">HASH256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash384">HASH384</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash512">HASH512</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin">MPIN</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair">PAIR</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rand">RAND</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rsa">RSA</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/sha3">SHA3</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/unit64">UInt64</a></li></ul></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL Library</span><meta itemprop="position" content="1"></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL JavaScript API 1.0.0</span><meta itemprop="position" content="2"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">ECP2</span><meta itemprop="position" content="3"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>ECP2</h1></header><a name="ECP2"></a><h2 class="anchor anchorWithStickyNavbar_LWe7" id="ecp2">ECP2<a class="hash-link" href="#ecp2" title="Direct link to heading">​</a></h2><p><strong>Kind</strong>: global class<br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP2{&quot;}&quot;}</code>  </p><ul><li><a href="#ECP2">ECP2</a><ul><li><a href="#new_ECP2_new">new ECP2()</a></li><li><em>instance</em><ul><li><a href="#ECP2+is_infinity">.is_infinity(1)</a></li><li><a href="#ECP2+copy">.copy(P)</a></li><li><a href="#ECP2+inf">.inf()</a></li><li><a href="#ECP2+cmove">.cmove()</a></li><li><a href="#ECP2+select">.select()</a></li><li><a href="#ECP2+equals">.equals(Q)</a></li><li><a href="#ECP2+neg">.neg()</a></li><li><a href="#ECP2+affine">.affine()</a></li><li><a href="#ECP2+getX">.getX()</a></li><li><a href="#ECP2+getY">.getY()</a></li><li><a href="#ECP2+getx">.getx()</a></li><li><a href="#ECP2+gety">.gety()</a></li><li><a href="#ECP2+getz">.getz()</a></li><li><a href="#ECP2+toBytes">.toBytes(b)</a></li><li><a href="#ECP2+toString">.toString()</a> ⇒</li><li><a href="#ECP2+setxy">.setxy(ix, iy)</a></li><li><a href="#ECP2+setx">.setx(ix)</a></li><li><a href="#ECP2+frob">.frob()</a></li><li><a href="#ECP2+dbl">.dbl()</a></li><li><a href="#ECP2+add">.add()</a></li><li><a href="#ECP2+sub">.sub(Q)</a></li><li><a href="#ECP2+mul">.mul(e)</a></li></ul></li><li><em>static</em><ul><li><a href="#ECP2.generator">.generator()</a></li><li><a href="#ECP2.fromBytes">.fromBytes(b)</a></li><li><a href="#ECP2.RHS">.RHS(x)</a></li><li><a href="#ECP2.mul4">.mul4()</a></li></ul></li></ul></li></ul><a name="new_ECP2_new"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="new-ecp2">new ECP2()<a class="hash-link" href="#new-ecp2" title="Direct link to heading">​</a></h3><p>Creates an instance of ECP2</p><a name="ECP2+is_infinity"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp2is_infinity1">ecP2.is_infinity(1)<a class="hash-link" href="#ecp2is_infinity1" title="Direct link to heading">​</a></h3><p>Tests for ECP2 point equal to infinity</p><p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP2{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>1</td><td>if infinity, else returns 0</td></tr></tbody></table><a name="ECP2+copy"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp2copyp">ecP2.copy(P)<a class="hash-link" href="#ecp2copyp" title="Direct link to heading">​</a></h3><p>Copy ECP2 point to another ECP2 point</p><p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP2{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>P</td><td>ECP2 instance</td></tr></tbody></table><a name="ECP2+inf"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp2inf">ecP2.inf()<a class="hash-link" href="#ecp2inf" title="Direct link to heading">​</a></h3><p>Set ECP2 to point-at-infinity</p><p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP2{&quot;}&quot;}</code>  </p><a name="ECP2+cmove"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp2cmove">ecP2.cmove()<a class="hash-link" href="#ecp2cmove" title="Direct link to heading">​</a></h3><p>conditional move of Q to P dependant on d</p><p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP2{&quot;}&quot;}</code>  </p><a name="ECP2+select"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp2select">ecP2.select()<a class="hash-link" href="#ecp2select" title="Direct link to heading">​</a></h3><p>Constant time select from pre-computed table</p><p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP2{&quot;}&quot;}</code>  </p><a name="ECP2+equals"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp2equalsq">ecP2.equals(Q)<a class="hash-link" href="#ecp2equalsq" title="Direct link to heading">​</a></h3><p>Test P == Q</p><p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP2{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>Q</td><td>ECP2 instance</td></tr></tbody></table><a name="ECP2+neg"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp2neg">ecP2.neg()<a class="hash-link" href="#ecp2neg" title="Direct link to heading">​</a></h3><p>set this=-this</p><p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP2{&quot;}&quot;}</code>  </p><a name="ECP2+affine"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp2affine">ecP2.affine()<a class="hash-link" href="#ecp2affine" title="Direct link to heading">​</a></h3><p>convert this to affine, from (x,y,z) to (x,y)</p><p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP2{&quot;}&quot;}</code>  </p><a name="ECP2+getX"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp2getx">ecP2.getX()<a class="hash-link" href="#ecp2getx" title="Direct link to heading">​</a></h3><p>extract affine x as ctx.FP2</p><p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP2{&quot;}&quot;}</code>  </p><a name="ECP2+getY"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp2gety">ecP2.getY()<a class="hash-link" href="#ecp2gety" title="Direct link to heading">​</a></h3><p>extract affine y as ctx.FP2</p><p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP2{&quot;}&quot;}</code>  </p><a name="ECP2+getx"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp2getx-1">ecP2.getx()<a class="hash-link" href="#ecp2getx-1" title="Direct link to heading">​</a></h3><p>extract projective x</p><p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP2{&quot;}&quot;}</code>  </p><a name="ECP2+gety"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp2gety-1">ecP2.gety()<a class="hash-link" href="#ecp2gety-1" title="Direct link to heading">​</a></h3><p>extract projective y</p><p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP2{&quot;}&quot;}</code>  </p><a name="ECP2+getz"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp2getz">ecP2.getz()<a class="hash-link" href="#ecp2getz" title="Direct link to heading">​</a></h3><p>extract projective z</p><p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP2{&quot;}&quot;}</code>  </p><a name="ECP2+toBytes"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp2tobytesb">ecP2.toBytes(b)<a class="hash-link" href="#ecp2tobytesb" title="Direct link to heading">​</a></h3><p>convert this to byte arrayextract projective x</p><p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP2{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>b</td><td>byte array output</td></tr></tbody></table><a name="ECP2+toString"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp2tostring-">ecP2.toString() ⇒<a class="hash-link" href="#ecp2tostring-" title="Direct link to heading">​</a></h3><p>convert this to hex string</p><p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a><br>
 <strong>Returns</strong>: hex string<br>
-<strong>this</strong>: <code>{ECP2}</code>  <br>
-<a name="ECP2+setxy"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp2setxyix-iy"></a><a href="#ecp2setxyix-iy" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP2.setxy(ix, iy)</h3>
-<p>set this=(x,y)</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a>  <br>
-<strong>this</strong>: <code>{ECP2}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>ix</td><td>x-value</td></tr>
-<tr><td>iy</td><td>y-value</td></tr>
-</tbody>
-</table>
-<p><a name="ECP2+setx"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp2setxix"></a><a href="#ecp2setxix" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP2.setx(ix)</h3>
-<p>set this=(x,.)</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a>  <br>
-<strong>this</strong>: <code>{ECP2}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>ix</td><td>x-value</td></tr>
-</tbody>
-</table>
-<p><a name="ECP2+frob"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp2frob"></a><a href="#ecp2frob" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP2.frob()</h3>
-<p>set this*=q, where q is Modulus, using Frobenius</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a>  <br>
-<strong>this</strong>: <code>{ECP2}</code>  <br>
-<a name="ECP2+dbl"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp2dbl"></a><a href="#ecp2dbl" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP2.dbl()</h3>
-<p>this+=this</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a>  <br>
-<strong>this</strong>: <code>{ECP2}</code>  <br>
-<a name="ECP2+add"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp2add"></a><a href="#ecp2add" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP2.add()</h3>
-<p>Adds ECP2 instances</p>
-<p>param Q ECP2 instance</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a>  <br>
-<strong>this</strong>: <code>{ECP2}</code>  <br>
-<a name="ECP2+sub"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp2subq"></a><a href="#ecp2subq" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP2.sub(Q)</h3>
-<p>Subtracts ECP instance Q  from this</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a>  <br>
-<strong>this</strong>: <code>{ECP2}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>Q</td><td>ECP2 instance</td></tr>
-</tbody>
-</table>
-<p><a name="ECP2+mul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp2mule"></a><a href="#ecp2mule" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP2.mul(e)</h3>
-<p>Multiplies an ECP2 instance P by a BIG, side-channel resistant</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a>  <br>
-<strong>this</strong>: <code>{ECP2}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>e</td><td>BIG number multiplier</td></tr>
-</tbody>
-</table>
-<p><a name="ECP2.generator"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp2generator"></a><a href="#ecp2generator" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ECP2.generator()</h3>
-<p>Set group generator</p>
-<p><strong>Kind</strong>: static method of <a href="#ECP2"><code>ECP2</code></a>  <br>
-<strong>this</strong>: <code>{ECP2}</code>  <br>
-<a name="ECP2.fromBytes"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp2frombytesb"></a><a href="#ecp2frombytesb" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ECP2.fromBytes(b)</h3>
-<p>convert from byte array to point</p>
-<p><strong>Kind</strong>: static method of <a href="#ECP2"><code>ECP2</code></a>  <br>
-<strong>this</strong>: <code>{ECP2}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>b</td><td>input byte array</td></tr>
-</tbody>
-</table>
-<p><a name="ECP2.RHS"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp2rhsx"></a><a href="#ecp2rhsx" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ECP2.RHS(x)</h3>
-<p>Calculate RHS of curve equation x^3+B</p>
-<p><strong>Kind</strong>: static method of <a href="#ECP2"><code>ECP2</code></a>  <br>
-<strong>this</strong>: <code>{ECP2}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>x</td><td>x-value</td></tr>
-</tbody>
-</table>
-<p><a name="ECP2.mul4"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp2mul4"></a><a href="#ecp2mul4" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ECP2.mul4()</h3>
-<p>Calculate P=u0.Q0+u1<em>Q1+u2</em>Q2+u3*Q3</p>
-<p><strong>Kind</strong>: static method of <a href="#ECP2"><code>ECP2</code></a>  <br>
-<strong>this</strong>: <code>{ECP2}</code></p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/cryptojs/ecp"><span class="arrow-prev">← </span><span>ECP</span></a><a class="docs-next button" href="/docs/cryptojs/ecp4"><span>ECP4</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#ecp2">ECP2</a><ul class="toc-headings"><li><a href="#new-ecp2">new ECP2()</a></li><li><a href="#ecp2is_infinity1">ecP2.is_infinity(1)</a></li><li><a href="#ecp2copyp">ecP2.copy(P)</a></li><li><a href="#ecp2inf">ecP2.inf()</a></li><li><a href="#ecp2cmove">ecP2.cmove()</a></li><li><a href="#ecp2select">ecP2.select()</a></li><li><a href="#ecp2equalsq">ecP2.equals(Q)</a></li><li><a href="#ecp2neg">ecP2.neg()</a></li><li><a href="#ecp2affine">ecP2.affine()</a></li><li><a href="#ecp2getx">ecP2.getX()</a></li><li><a href="#ecp2gety">ecP2.getY()</a></li><li><a href="#ecp2getx-1">ecP2.getx()</a></li><li><a href="#ecp2gety-1">ecP2.gety()</a></li><li><a href="#ecp2getz">ecP2.getz()</a></li><li><a href="#ecp2tobytesb">ecP2.toBytes(b)</a></li><li><a href="#ecp2tostring-">ecP2.toString() ⇒</a></li><li><a href="#ecp2setxyix-iy">ecP2.setxy(ix, iy)</a></li><li><a href="#ecp2setxix">ecP2.setx(ix)</a></li><li><a href="#ecp2frob">ecP2.frob()</a></li><li><a href="#ecp2dbl">ecP2.dbl()</a></li><li><a href="#ecp2add">ecP2.add()</a></li><li><a href="#ecp2subq">ecP2.sub(Q)</a></li><li><a href="#ecp2mule">ecP2.mul(e)</a></li><li><a href="#ecp2generator">ECP2.generator()</a></li><li><a href="#ecp2frombytesb">ECP2.fromBytes(b)</a></li><li><a href="#ecp2rhsx">ECP2.RHS(x)</a></li><li><a href="#ecp2mul4">ECP2.mul4()</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<strong>this</strong>: <code>{&quot;{&quot;}ECP2{&quot;}&quot;}</code>  </p><a name="ECP2+setxy"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp2setxyix-iy">ecP2.setxy(ix, iy)<a class="hash-link" href="#ecp2setxyix-iy" title="Direct link to heading">​</a></h3><p>set this=(x,y)</p><p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP2{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>ix</td><td>x-value</td></tr><tr><td>iy</td><td>y-value</td></tr></tbody></table><a name="ECP2+setx"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp2setxix">ecP2.setx(ix)<a class="hash-link" href="#ecp2setxix" title="Direct link to heading">​</a></h3><p>set this=(x,.)</p><p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP2{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>ix</td><td>x-value</td></tr></tbody></table><a name="ECP2+frob"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp2frob">ecP2.frob()<a class="hash-link" href="#ecp2frob" title="Direct link to heading">​</a></h3><p>set this<!-- -->*<!-- -->=q, where q is Modulus, using Frobenius</p><p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP2{&quot;}&quot;}</code>  </p><a name="ECP2+dbl"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp2dbl">ecP2.dbl()<a class="hash-link" href="#ecp2dbl" title="Direct link to heading">​</a></h3><p>this+=this</p><p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP2{&quot;}&quot;}</code>  </p><a name="ECP2+add"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp2add">ecP2.add()<a class="hash-link" href="#ecp2add" title="Direct link to heading">​</a></h3><p>Adds ECP2 instances</p><p>param Q ECP2 instance</p><p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP2{&quot;}&quot;}</code>  </p><a name="ECP2+sub"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp2subq">ecP2.sub(Q)<a class="hash-link" href="#ecp2subq" title="Direct link to heading">​</a></h3><p>Subtracts ECP instance Q  from this</p><p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP2{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>Q</td><td>ECP2 instance</td></tr></tbody></table><a name="ECP2+mul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp2mule">ecP2.mul(e)<a class="hash-link" href="#ecp2mule" title="Direct link to heading">​</a></h3><p>Multiplies an ECP2 instance P by a BIG, side-channel resistant</p><p><strong>Kind</strong>: instance method of <a href="#ECP2"><code>ECP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP2{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>e</td><td>BIG number multiplier</td></tr></tbody></table><a name="ECP2.generator"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp2generator">ECP2.generator()<a class="hash-link" href="#ecp2generator" title="Direct link to heading">​</a></h3><p>Set group generator</p><p><strong>Kind</strong>: static method of <a href="#ECP2"><code>ECP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP2{&quot;}&quot;}</code>  </p><a name="ECP2.fromBytes"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp2frombytesb">ECP2.fromBytes(b)<a class="hash-link" href="#ecp2frombytesb" title="Direct link to heading">​</a></h3><p>convert from byte array to point</p><p><strong>Kind</strong>: static method of <a href="#ECP2"><code>ECP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP2{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>b</td><td>input byte array</td></tr></tbody></table><a name="ECP2.RHS"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp2rhsx">ECP2.RHS(x)<a class="hash-link" href="#ecp2rhsx" title="Direct link to heading">​</a></h3><p>Calculate RHS of curve equation x^3+B</p><p><strong>Kind</strong>: static method of <a href="#ECP2"><code>ECP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP2{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>x</td><td>x-value</td></tr></tbody></table><a name="ECP2.mul4"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp2mul4">ECP2.mul4()<a class="hash-link" href="#ecp2mul4" title="Direct link to heading">​</a></h3><p>Calculate P=u0.Q0+u1_Q1+u2_Q2+u3<!-- -->*<!-- -->Q3</p><p><strong>Kind</strong>: static method of <a href="#ECP2"><code>ECP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP2{&quot;}&quot;}</code></p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/cryptojs/ecp"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">ECP</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/cryptojs/ecp4"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">ECP4</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#ecp2" class="table-of-contents__link toc-highlight">ECP2</a><ul><li><a href="#new-ecp2" class="table-of-contents__link toc-highlight">new ECP2()</a></li><li><a href="#ecp2is_infinity1" class="table-of-contents__link toc-highlight">ecP2.is_infinity(1)</a></li><li><a href="#ecp2copyp" class="table-of-contents__link toc-highlight">ecP2.copy(P)</a></li><li><a href="#ecp2inf" class="table-of-contents__link toc-highlight">ecP2.inf()</a></li><li><a href="#ecp2cmove" class="table-of-contents__link toc-highlight">ecP2.cmove()</a></li><li><a href="#ecp2select" class="table-of-contents__link toc-highlight">ecP2.select()</a></li><li><a href="#ecp2equalsq" class="table-of-contents__link toc-highlight">ecP2.equals(Q)</a></li><li><a href="#ecp2neg" class="table-of-contents__link toc-highlight">ecP2.neg()</a></li><li><a href="#ecp2affine" class="table-of-contents__link toc-highlight">ecP2.affine()</a></li><li><a href="#ecp2getx" class="table-of-contents__link toc-highlight">ecP2.getX()</a></li><li><a href="#ecp2gety" class="table-of-contents__link toc-highlight">ecP2.getY()</a></li><li><a href="#ecp2getx-1" class="table-of-contents__link toc-highlight">ecP2.getx()</a></li><li><a href="#ecp2gety-1" class="table-of-contents__link toc-highlight">ecP2.gety()</a></li><li><a href="#ecp2getz" class="table-of-contents__link toc-highlight">ecP2.getz()</a></li><li><a href="#ecp2tobytesb" class="table-of-contents__link toc-highlight">ecP2.toBytes(b)</a></li><li><a href="#ecp2tostring-" class="table-of-contents__link toc-highlight">ecP2.toString() ⇒</a></li><li><a href="#ecp2setxyix-iy" class="table-of-contents__link toc-highlight">ecP2.setxy(ix, iy)</a></li><li><a href="#ecp2setxix" class="table-of-contents__link toc-highlight">ecP2.setx(ix)</a></li><li><a href="#ecp2frob" class="table-of-contents__link toc-highlight">ecP2.frob()</a></li><li><a href="#ecp2dbl" class="table-of-contents__link toc-highlight">ecP2.dbl()</a></li><li><a href="#ecp2add" class="table-of-contents__link toc-highlight">ecP2.add()</a></li><li><a href="#ecp2subq" class="table-of-contents__link toc-highlight">ecP2.sub(Q)</a></li><li><a href="#ecp2mule" class="table-of-contents__link toc-highlight">ecP2.mul(e)</a></li><li><a href="#ecp2generator" class="table-of-contents__link toc-highlight">ECP2.generator()</a></li><li><a href="#ecp2frombytesb" class="table-of-contents__link toc-highlight">ECP2.fromBytes(b)</a></li><li><a href="#ecp2rhsx" class="table-of-contents__link toc-highlight">ECP2.RHS(x)</a></li><li><a href="#ecp2mul4" class="table-of-contents__link toc-highlight">ECP2.mul4()</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/cryptojs/ecp4/index.html b/docs/cryptojs/ecp4/index.html
index 47130cd..248d634 100644
--- a/docs/cryptojs/ecp4/index.html
+++ b/docs/cryptojs/ecp4/index.html
@@ -1,315 +1,50 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>ECP4 · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;a name=&quot;ECP4&quot;&gt;&lt;/a&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="ECP4 · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;a name=&quot;ECP4&quot;&gt;&lt;/a&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>AMCL JavaScript API 1.0.0</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-cryptojs/ecp4">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">ECP4 | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/cryptojs/ecp4"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="ECP4 | Apache Milagro"><meta data-rh="true" name="description" content="ECP4"><meta data-rh="true" property="og:description" content="ECP4"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/cryptojs/ecp4"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/ecp4" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/ecp4" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">ECP4</h1></header><article><div><span><p><a name="ECP4"></a></p>
-<h2><a class="anchor" aria-hidden="true" id="ecp4"></a><a href="#ecp4" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ECP4</h2>
-<p><strong>Kind</strong>: global class<br>
-<strong>this</strong>: <code>{ECP4}</code></p>
-<ul>
-<li><a href="#ECP4">ECP4</a>
-<ul>
-<li><a href="#new_ECP4_new">new ECP4()</a></li>
-<li><em>instance</em>
-<ul>
-<li><a href="#ECP4+is_infinity">.is_infinity(1)</a></li>
-<li><a href="#ECP4+copy">.copy(P)</a></li>
-<li><a href="#ECP4+inf">.inf()</a></li>
-<li><a href="#ECP4+cmove">.cmove()</a></li>
-<li><a href="#ECP4+select">.select()</a></li>
-<li><a href="#ECP4+equals">.equals(Q)</a></li>
-<li><a href="#ECP4+neg">.neg()</a></li>
-<li><a href="#ECP4+affine">.affine()</a></li>
-<li><a href="#ECP4+getX">.getX()</a></li>
-<li><a href="#ECP4+getY">.getY()</a></li>
-<li><a href="#ECP4+getx">.getx()</a></li>
-<li><a href="#ECP4+gety">.gety()</a></li>
-<li><a href="#ECP4+getz">.getz()</a></li>
-<li><a href="#ECP4+toBytes">.toBytes(b)</a></li>
-<li><a href="#ECP4+toString">.toString()</a> ⇒</li>
-<li><a href="#ECP4+setxy">.setxy(ix, iy)</a></li>
-<li><a href="#ECP4+setx">.setx(ix)</a></li>
-<li><a href="#ECP4+frob">.frob()</a></li>
-<li><a href="#ECP4+dbl">.dbl()</a></li>
-<li><a href="#ECP4+add">.add()</a></li>
-<li><a href="#ECP4+sub">.sub(Q)</a></li>
-<li><a href="#ECP4+mul">.mul(e)</a></li>
-</ul></li>
-<li><em>static</em>
-<ul>
-<li><a href="#ECP4.generator">.generator()</a></li>
-<li><a href="#ECP4.fromBytes">.fromBytes(b)</a></li>
-<li><a href="#ECP4.RHS">.RHS(x)</a></li>
-<li><a href="#ECP4.mul8">.mul8()</a></li>
-</ul></li>
-</ul></li>
-</ul>
-<p><a name="new_ECP4_new"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="new-ecp4"></a><a href="#new-ecp4" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>new ECP4()</h3>
-<p>Creates an instance of ECP4</p>
-<p><a name="ECP4+is_infinity"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp4is_infinity1"></a><a href="#ecp4is_infinity1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP4.is_infinity(1)</h3>
-<p>Tests for ECP4 point equal to infinity</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a>  <br>
-<strong>this</strong>: <code>{ECP4}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>1</td><td>if infinity, else returns 0</td></tr>
-</tbody>
-</table>
-<p><a name="ECP4+copy"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp4copyp"></a><a href="#ecp4copyp" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP4.copy(P)</h3>
-<p>Copy ECP4 point to another ECP4 point</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a>  <br>
-<strong>this</strong>: <code>{ECP4}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>P</td><td>ECP4 instance</td></tr>
-</tbody>
-</table>
-<p><a name="ECP4+inf"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp4inf"></a><a href="#ecp4inf" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP4.inf()</h3>
-<p>conditional move of Q to P dependant on d</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a>  <br>
-<strong>this</strong>: <code>{ECP4}</code>  <br>
-<a name="ECP4+cmove"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp4cmove"></a><a href="#ecp4cmove" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP4.cmove()</h3>
-<p>conditional move of Q to P dependant on d</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a>  <br>
-<strong>this</strong>: <code>{ECP4}</code>  <br>
-<a name="ECP4+select"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp4select"></a><a href="#ecp4select" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP4.select()</h3>
-<p>Constant time select from pre-computed table</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a>  <br>
-<strong>this</strong>: <code>{ECP4}</code>  <br>
-<a name="ECP4+equals"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp4equalsq"></a><a href="#ecp4equalsq" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP4.equals(Q)</h3>
-<p>Test P == Q</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a>  <br>
-<strong>this</strong>: <code>{ECP4}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>Q</td><td>ECP4 instance</td></tr>
-</tbody>
-</table>
-<p><a name="ECP4+neg"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp4neg"></a><a href="#ecp4neg" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP4.neg()</h3>
-<p>set this=-this</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a>  <br>
-<strong>this</strong>: <code>{ECP4}</code>  <br>
-<a name="ECP4+affine"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp4affine"></a><a href="#ecp4affine" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP4.affine()</h3>
-<p>convert this to affine, from (x,y,z) to (x,y)</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a>  <br>
-<strong>this</strong>: <code>{ECP4}</code>  <br>
-<a name="ECP4+getX"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp4getx"></a><a href="#ecp4getx" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP4.getX()</h3>
-<p>extract affine x as ctx.FP2</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a>  <br>
-<strong>this</strong>: <code>{ECP4}</code>  <br>
-<a name="ECP4+getY"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp4gety"></a><a href="#ecp4gety" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP4.getY()</h3>
-<p>extract affine y as ctx.FP2</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a>  <br>
-<strong>this</strong>: <code>{ECP4}</code>  <br>
-<a name="ECP4+getx"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp4getx-1"></a><a href="#ecp4getx-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP4.getx()</h3>
-<p>extract projective x</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a>  <br>
-<strong>this</strong>: <code>{ECP4}</code>  <br>
-<a name="ECP4+gety"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp4gety-1"></a><a href="#ecp4gety-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP4.gety()</h3>
-<p>extract projective y</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a>  <br>
-<strong>this</strong>: <code>{ECP4}</code>  <br>
-<a name="ECP4+getz"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp4getz"></a><a href="#ecp4getz" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP4.getz()</h3>
-<p>extract projective z</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a>  <br>
-<strong>this</strong>: <code>{ECP4}</code>  <br>
-<a name="ECP4+toBytes"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp4tobytesb"></a><a href="#ecp4tobytesb" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP4.toBytes(b)</h3>
-<p>convert this to byte arrayextract projective x</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a>  <br>
-<strong>this</strong>: <code>{ECP4}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>b</td><td>byte array output</td></tr>
-</tbody>
-</table>
-<p><a name="ECP4+toString"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp4tostring-"></a><a href="#ecp4tostring-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP4.toString() ⇒</h3>
-<p>convert this to hex string</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a>  <br>
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/amcl-overview">AMCL Library</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-overview">AMCL Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API 1.0.0</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/aes">AES</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/big">BIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls">BLS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls192">BLS192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls256">BLS256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/dbig">DBIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp">ECP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ff">FF</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp">FP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp2">FP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp4">FP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp8">FP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp12">FP12</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp16">FP16</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp24">FP24</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp48">FP48</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/gcm">GCM</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash256">HASH256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash384">HASH384</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash512">HASH512</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin">MPIN</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair">PAIR</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rand">RAND</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rsa">RSA</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/sha3">SHA3</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/unit64">UInt64</a></li></ul></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL Library</span><meta itemprop="position" content="1"></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL JavaScript API 1.0.0</span><meta itemprop="position" content="2"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">ECP4</span><meta itemprop="position" content="3"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>ECP4</h1></header><a name="ECP4"></a><h2 class="anchor anchorWithStickyNavbar_LWe7" id="ecp4">ECP4<a class="hash-link" href="#ecp4" title="Direct link to heading">​</a></h2><p><strong>Kind</strong>: global class<br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP4{&quot;}&quot;}</code>  </p><ul><li><a href="#ECP4">ECP4</a><ul><li><a href="#new_ECP4_new">new ECP4()</a></li><li><em>instance</em><ul><li><a href="#ECP4+is_infinity">.is_infinity(1)</a></li><li><a href="#ECP4+copy">.copy(P)</a></li><li><a href="#ECP4+inf">.inf()</a></li><li><a href="#ECP4+cmove">.cmove()</a></li><li><a href="#ECP4+select">.select()</a></li><li><a href="#ECP4+equals">.equals(Q)</a></li><li><a href="#ECP4+neg">.neg()</a></li><li><a href="#ECP4+affine">.affine()</a></li><li><a href="#ECP4+getX">.getX()</a></li><li><a href="#ECP4+getY">.getY()</a></li><li><a href="#ECP4+getx">.getx()</a></li><li><a href="#ECP4+gety">.gety()</a></li><li><a href="#ECP4+getz">.getz()</a></li><li><a href="#ECP4+toBytes">.toBytes(b)</a></li><li><a href="#ECP4+toString">.toString()</a> ⇒</li><li><a href="#ECP4+setxy">.setxy(ix, iy)</a></li><li><a href="#ECP4+setx">.setx(ix)</a></li><li><a href="#ECP4+frob">.frob()</a></li><li><a href="#ECP4+dbl">.dbl()</a></li><li><a href="#ECP4+add">.add()</a></li><li><a href="#ECP4+sub">.sub(Q)</a></li><li><a href="#ECP4+mul">.mul(e)</a></li></ul></li><li><em>static</em><ul><li><a href="#ECP4.generator">.generator()</a></li><li><a href="#ECP4.fromBytes">.fromBytes(b)</a></li><li><a href="#ECP4.RHS">.RHS(x)</a></li><li><a href="#ECP4.mul8">.mul8()</a></li></ul></li></ul></li></ul><a name="new_ECP4_new"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="new-ecp4">new ECP4()<a class="hash-link" href="#new-ecp4" title="Direct link to heading">​</a></h3><p>Creates an instance of ECP4</p><a name="ECP4+is_infinity"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp4is_infinity1">ecP4.is_infinity(1)<a class="hash-link" href="#ecp4is_infinity1" title="Direct link to heading">​</a></h3><p>Tests for ECP4 point equal to infinity</p><p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP4{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>1</td><td>if infinity, else returns 0</td></tr></tbody></table><a name="ECP4+copy"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp4copyp">ecP4.copy(P)<a class="hash-link" href="#ecp4copyp" title="Direct link to heading">​</a></h3><p>Copy ECP4 point to another ECP4 point</p><p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP4{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>P</td><td>ECP4 instance</td></tr></tbody></table><a name="ECP4+inf"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp4inf">ecP4.inf()<a class="hash-link" href="#ecp4inf" title="Direct link to heading">​</a></h3><p>conditional move of Q to P dependant on d</p><p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP4{&quot;}&quot;}</code>  </p><a name="ECP4+cmove"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp4cmove">ecP4.cmove()<a class="hash-link" href="#ecp4cmove" title="Direct link to heading">​</a></h3><p>conditional move of Q to P dependant on d</p><p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP4{&quot;}&quot;}</code>  </p><a name="ECP4+select"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp4select">ecP4.select()<a class="hash-link" href="#ecp4select" title="Direct link to heading">​</a></h3><p>Constant time select from pre-computed table</p><p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP4{&quot;}&quot;}</code>  </p><a name="ECP4+equals"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp4equalsq">ecP4.equals(Q)<a class="hash-link" href="#ecp4equalsq" title="Direct link to heading">​</a></h3><p>Test P == Q</p><p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP4{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>Q</td><td>ECP4 instance</td></tr></tbody></table><a name="ECP4+neg"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp4neg">ecP4.neg()<a class="hash-link" href="#ecp4neg" title="Direct link to heading">​</a></h3><p>set this=-this</p><p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP4{&quot;}&quot;}</code>  </p><a name="ECP4+affine"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp4affine">ecP4.affine()<a class="hash-link" href="#ecp4affine" title="Direct link to heading">​</a></h3><p>convert this to affine, from (x,y,z) to (x,y)</p><p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP4{&quot;}&quot;}</code>  </p><a name="ECP4+getX"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp4getx">ecP4.getX()<a class="hash-link" href="#ecp4getx" title="Direct link to heading">​</a></h3><p>extract affine x as ctx.FP2</p><p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP4{&quot;}&quot;}</code>  </p><a name="ECP4+getY"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp4gety">ecP4.getY()<a class="hash-link" href="#ecp4gety" title="Direct link to heading">​</a></h3><p>extract affine y as ctx.FP2</p><p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP4{&quot;}&quot;}</code>  </p><a name="ECP4+getx"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp4getx-1">ecP4.getx()<a class="hash-link" href="#ecp4getx-1" title="Direct link to heading">​</a></h3><p>extract projective x</p><p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP4{&quot;}&quot;}</code>  </p><a name="ECP4+gety"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp4gety-1">ecP4.gety()<a class="hash-link" href="#ecp4gety-1" title="Direct link to heading">​</a></h3><p>extract projective y</p><p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP4{&quot;}&quot;}</code>  </p><a name="ECP4+getz"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp4getz">ecP4.getz()<a class="hash-link" href="#ecp4getz" title="Direct link to heading">​</a></h3><p>extract projective z</p><p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP4{&quot;}&quot;}</code>  </p><a name="ECP4+toBytes"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp4tobytesb">ecP4.toBytes(b)<a class="hash-link" href="#ecp4tobytesb" title="Direct link to heading">​</a></h3><p>convert this to byte arrayextract projective x</p><p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP4{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>b</td><td>byte array output</td></tr></tbody></table><a name="ECP4+toString"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp4tostring-">ecP4.toString() ⇒<a class="hash-link" href="#ecp4tostring-" title="Direct link to heading">​</a></h3><p>convert this to hex string</p><p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a><br>
 <strong>Returns</strong>: hex string<br>
-<strong>this</strong>: <code>{ECP4}</code>  <br>
-<a name="ECP4+setxy"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp4setxyix-iy"></a><a href="#ecp4setxyix-iy" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP4.setxy(ix, iy)</h3>
-<p>set this=(x,y)</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a>  <br>
-<strong>this</strong>: <code>{ECP4}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>ix</td><td>x-value</td></tr>
-<tr><td>iy</td><td>y-value</td></tr>
-</tbody>
-</table>
-<p><a name="ECP4+setx"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp4setxix"></a><a href="#ecp4setxix" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP4.setx(ix)</h3>
-<p>set this=(x,.)</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a>  <br>
-<strong>this</strong>: <code>{ECP4}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>ix</td><td>x-value</td></tr>
-</tbody>
-</table>
-<p><a name="ECP4+frob"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp4frob"></a><a href="#ecp4frob" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP4.frob()</h3>
-<p>set this*=q, where q is Modulus, using Frobenius</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a>  <br>
-<strong>this</strong>: <code>{ECP4}</code>  <br>
-<a name="ECP4+dbl"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp4dbl"></a><a href="#ecp4dbl" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP4.dbl()</h3>
-<p>this+=this</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a>  <br>
-<strong>this</strong>: <code>{ECP4}</code>  <br>
-<a name="ECP4+add"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp4add"></a><a href="#ecp4add" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP4.add()</h3>
-<p>Adds ECP4 instances</p>
-<p>param Q ECP4 instance</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a>  <br>
-<strong>this</strong>: <code>{ECP4}</code>  <br>
-<a name="ECP4+sub"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp4subq"></a><a href="#ecp4subq" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP4.sub(Q)</h3>
-<p>Subtracts ECP instance Q  from this</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a>  <br>
-<strong>this</strong>: <code>{ECP4}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>Q</td><td>ECP4 instance</td></tr>
-</tbody>
-</table>
-<p><a name="ECP4+mul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp4mule"></a><a href="#ecp4mule" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP4.mul(e)</h3>
-<p>Multiplies an ECP4 instance P by a BIG, side-channel resistant</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a>  <br>
-<strong>this</strong>: <code>{ECP4}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>e</td><td>BIG number multiplier</td></tr>
-</tbody>
-</table>
-<p><a name="ECP4.generator"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp4generator"></a><a href="#ecp4generator" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ECP4.generator()</h3>
-<p>Set group generator</p>
-<p><strong>Kind</strong>: static method of <a href="#ECP4"><code>ECP4</code></a>  <br>
-<strong>this</strong>: <code>{ECP4}</code>  <br>
-<a name="ECP4.fromBytes"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp4frombytesb"></a><a href="#ecp4frombytesb" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ECP4.fromBytes(b)</h3>
-<p>convert from byte array to point</p>
-<p><strong>Kind</strong>: static method of <a href="#ECP4"><code>ECP4</code></a>  <br>
-<strong>this</strong>: <code>{ECP4}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>b</td><td>input byte array</td></tr>
-</tbody>
-</table>
-<p><a name="ECP4.RHS"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp4rhsx"></a><a href="#ecp4rhsx" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ECP4.RHS(x)</h3>
-<p>Calculate RHS of curve equation x^3+B</p>
-<p><strong>Kind</strong>: static method of <a href="#ECP4"><code>ECP4</code></a>  <br>
-<strong>this</strong>: <code>{ECP4}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>x</td><td>x-value</td></tr>
-</tbody>
-</table>
-<p><a name="ECP4.mul8"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp4mul8"></a><a href="#ecp4mul8" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ECP4.mul8()</h3>
-<p>Calculate P=u0.Q0+u1<em>Q1+u2</em>Q2+u3*Q3...</p>
-<p><strong>Kind</strong>: static method of <a href="#ECP4"><code>ECP4</code></a>  <br>
-<strong>this</strong>: <code>{ECP4}</code></p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/cryptojs/ecp2"><span class="arrow-prev">← </span><span>ECP2</span></a><a class="docs-next button" href="/docs/cryptojs/ecp8"><span>ECP8</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#ecp4">ECP4</a><ul class="toc-headings"><li><a href="#new-ecp4">new ECP4()</a></li><li><a href="#ecp4is_infinity1">ecP4.is_infinity(1)</a></li><li><a href="#ecp4copyp">ecP4.copy(P)</a></li><li><a href="#ecp4inf">ecP4.inf()</a></li><li><a href="#ecp4cmove">ecP4.cmove()</a></li><li><a href="#ecp4select">ecP4.select()</a></li><li><a href="#ecp4equalsq">ecP4.equals(Q)</a></li><li><a href="#ecp4neg">ecP4.neg()</a></li><li><a href="#ecp4affine">ecP4.affine()</a></li><li><a href="#ecp4getx">ecP4.getX()</a></li><li><a href="#ecp4gety">ecP4.getY()</a></li><li><a href="#ecp4getx-1">ecP4.getx()</a></li><li><a href="#ecp4gety-1">ecP4.gety()</a></li><li><a href="#ecp4getz">ecP4.getz()</a></li><li><a href="#ecp4tobytesb">ecP4.toBytes(b)</a></li><li><a href="#ecp4tostring-">ecP4.toString() ⇒</a></li><li><a href="#ecp4setxyix-iy">ecP4.setxy(ix, iy)</a></li><li><a href="#ecp4setxix">ecP4.setx(ix)</a></li><li><a href="#ecp4frob">ecP4.frob()</a></li><li><a href="#ecp4dbl">ecP4.dbl()</a></li><li><a href="#ecp4add">ecP4.add()</a></li><li><a href="#ecp4subq">ecP4.sub(Q)</a></li><li><a href="#ecp4mule">ecP4.mul(e)</a></li><li><a href="#ecp4generator">ECP4.generator()</a></li><li><a href="#ecp4frombytesb">ECP4.fromBytes(b)</a></li><li><a href="#ecp4rhsx">ECP4.RHS(x)</a></li><li><a href="#ecp4mul8">ECP4.mul8()</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<strong>this</strong>: <code>{&quot;{&quot;}ECP4{&quot;}&quot;}</code>  </p><a name="ECP4+setxy"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp4setxyix-iy">ecP4.setxy(ix, iy)<a class="hash-link" href="#ecp4setxyix-iy" title="Direct link to heading">​</a></h3><p>set this=(x,y)</p><p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP4{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>ix</td><td>x-value</td></tr><tr><td>iy</td><td>y-value</td></tr></tbody></table><a name="ECP4+setx"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp4setxix">ecP4.setx(ix)<a class="hash-link" href="#ecp4setxix" title="Direct link to heading">​</a></h3><p>set this=(x,.)</p><p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP4{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>ix</td><td>x-value</td></tr></tbody></table><a name="ECP4+frob"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp4frob">ecP4.frob()<a class="hash-link" href="#ecp4frob" title="Direct link to heading">​</a></h3><p>set this<!-- -->*<!-- -->=q, where q is Modulus, using Frobenius</p><p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP4{&quot;}&quot;}</code>  </p><a name="ECP4+dbl"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp4dbl">ecP4.dbl()<a class="hash-link" href="#ecp4dbl" title="Direct link to heading">​</a></h3><p>this+=this</p><p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP4{&quot;}&quot;}</code>  </p><a name="ECP4+add"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp4add">ecP4.add()<a class="hash-link" href="#ecp4add" title="Direct link to heading">​</a></h3><p>Adds ECP4 instances</p><p>param Q ECP4 instance</p><p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP4{&quot;}&quot;}</code>  </p><a name="ECP4+sub"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp4subq">ecP4.sub(Q)<a class="hash-link" href="#ecp4subq" title="Direct link to heading">​</a></h3><p>Subtracts ECP instance Q  from this</p><p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP4{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>Q</td><td>ECP4 instance</td></tr></tbody></table><a name="ECP4+mul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp4mule">ecP4.mul(e)<a class="hash-link" href="#ecp4mule" title="Direct link to heading">​</a></h3><p>Multiplies an ECP4 instance P by a BIG, side-channel resistant</p><p><strong>Kind</strong>: instance method of <a href="#ECP4"><code>ECP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP4{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>e</td><td>BIG number multiplier</td></tr></tbody></table><a name="ECP4.generator"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp4generator">ECP4.generator()<a class="hash-link" href="#ecp4generator" title="Direct link to heading">​</a></h3><p>Set group generator</p><p><strong>Kind</strong>: static method of <a href="#ECP4"><code>ECP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP4{&quot;}&quot;}</code>  </p><a name="ECP4.fromBytes"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp4frombytesb">ECP4.fromBytes(b)<a class="hash-link" href="#ecp4frombytesb" title="Direct link to heading">​</a></h3><p>convert from byte array to point</p><p><strong>Kind</strong>: static method of <a href="#ECP4"><code>ECP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP4{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>b</td><td>input byte array</td></tr></tbody></table><a name="ECP4.RHS"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp4rhsx">ECP4.RHS(x)<a class="hash-link" href="#ecp4rhsx" title="Direct link to heading">​</a></h3><p>Calculate RHS of curve equation x^3+B</p><p><strong>Kind</strong>: static method of <a href="#ECP4"><code>ECP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP4{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>x</td><td>x-value</td></tr></tbody></table><a name="ECP4.mul8"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp4mul8">ECP4.mul8()<a class="hash-link" href="#ecp4mul8" title="Direct link to heading">​</a></h3><p>Calculate P=u0.Q0+u1_Q1+u2_Q2+u3<!-- -->*<!-- -->Q3...</p><p><strong>Kind</strong>: static method of <a href="#ECP4"><code>ECP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP4{&quot;}&quot;}</code></p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/cryptojs/ecp2"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">ECP2</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/cryptojs/ecp8"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">ECP8</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#ecp4" class="table-of-contents__link toc-highlight">ECP4</a><ul><li><a href="#new-ecp4" class="table-of-contents__link toc-highlight">new ECP4()</a></li><li><a href="#ecp4is_infinity1" class="table-of-contents__link toc-highlight">ecP4.is_infinity(1)</a></li><li><a href="#ecp4copyp" class="table-of-contents__link toc-highlight">ecP4.copy(P)</a></li><li><a href="#ecp4inf" class="table-of-contents__link toc-highlight">ecP4.inf()</a></li><li><a href="#ecp4cmove" class="table-of-contents__link toc-highlight">ecP4.cmove()</a></li><li><a href="#ecp4select" class="table-of-contents__link toc-highlight">ecP4.select()</a></li><li><a href="#ecp4equalsq" class="table-of-contents__link toc-highlight">ecP4.equals(Q)</a></li><li><a href="#ecp4neg" class="table-of-contents__link toc-highlight">ecP4.neg()</a></li><li><a href="#ecp4affine" class="table-of-contents__link toc-highlight">ecP4.affine()</a></li><li><a href="#ecp4getx" class="table-of-contents__link toc-highlight">ecP4.getX()</a></li><li><a href="#ecp4gety" class="table-of-contents__link toc-highlight">ecP4.getY()</a></li><li><a href="#ecp4getx-1" class="table-of-contents__link toc-highlight">ecP4.getx()</a></li><li><a href="#ecp4gety-1" class="table-of-contents__link toc-highlight">ecP4.gety()</a></li><li><a href="#ecp4getz" class="table-of-contents__link toc-highlight">ecP4.getz()</a></li><li><a href="#ecp4tobytesb" class="table-of-contents__link toc-highlight">ecP4.toBytes(b)</a></li><li><a href="#ecp4tostring-" class="table-of-contents__link toc-highlight">ecP4.toString() ⇒</a></li><li><a href="#ecp4setxyix-iy" class="table-of-contents__link toc-highlight">ecP4.setxy(ix, iy)</a></li><li><a href="#ecp4setxix" class="table-of-contents__link toc-highlight">ecP4.setx(ix)</a></li><li><a href="#ecp4frob" class="table-of-contents__link toc-highlight">ecP4.frob()</a></li><li><a href="#ecp4dbl" class="table-of-contents__link toc-highlight">ecP4.dbl()</a></li><li><a href="#ecp4add" class="table-of-contents__link toc-highlight">ecP4.add()</a></li><li><a href="#ecp4subq" class="table-of-contents__link toc-highlight">ecP4.sub(Q)</a></li><li><a href="#ecp4mule" class="table-of-contents__link toc-highlight">ecP4.mul(e)</a></li><li><a href="#ecp4generator" class="table-of-contents__link toc-highlight">ECP4.generator()</a></li><li><a href="#ecp4frombytesb" class="table-of-contents__link toc-highlight">ECP4.fromBytes(b)</a></li><li><a href="#ecp4rhsx" class="table-of-contents__link toc-highlight">ECP4.RHS(x)</a></li><li><a href="#ecp4mul8" class="table-of-contents__link toc-highlight">ECP4.mul8()</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/cryptojs/ecp8/index.html b/docs/cryptojs/ecp8/index.html
index 05aa556..10b63a5 100644
--- a/docs/cryptojs/ecp8/index.html
+++ b/docs/cryptojs/ecp8/index.html
@@ -1,315 +1,50 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>ECP8 · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;a name=&quot;ECP8&quot;&gt;&lt;/a&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="ECP8 · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;a name=&quot;ECP8&quot;&gt;&lt;/a&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>AMCL JavaScript API 1.0.0</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-cryptojs/ecp8">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">ECP8 | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/cryptojs/ecp8"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="ECP8 | Apache Milagro"><meta data-rh="true" name="description" content="ECP8"><meta data-rh="true" property="og:description" content="ECP8"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/cryptojs/ecp8"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/ecp8" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/ecp8" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">ECP8</h1></header><article><div><span><p><a name="ECP8"></a></p>
-<h2><a class="anchor" aria-hidden="true" id="ecp8"></a><a href="#ecp8" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ECP8</h2>
-<p><strong>Kind</strong>: global class<br>
-<strong>this</strong>: <code>{ECP8}</code></p>
-<ul>
-<li><a href="#ECP8">ECP8</a>
-<ul>
-<li><a href="#new_ECP8_new">new ECP8()</a></li>
-<li><em>instance</em>
-<ul>
-<li><a href="#ECP8+is_infinity">.is_infinity(1)</a></li>
-<li><a href="#ECP8+copy">.copy(P)</a></li>
-<li><a href="#ECP8+inf">.inf()</a></li>
-<li><a href="#ECP8+cmove">.cmove()</a></li>
-<li><a href="#ECP8+select">.select()</a></li>
-<li><a href="#ECP8+equals">.equals(Q)</a></li>
-<li><a href="#ECP8+neg">.neg()</a></li>
-<li><a href="#ECP8+affine">.affine()</a></li>
-<li><a href="#ECP8+getX">.getX()</a></li>
-<li><a href="#ECP8+getY">.getY()</a></li>
-<li><a href="#ECP8+getx">.getx()</a></li>
-<li><a href="#ECP8+gety">.gety()</a></li>
-<li><a href="#ECP8+getz">.getz()</a></li>
-<li><a href="#ECP8+toBytes">.toBytes(b)</a></li>
-<li><a href="#ECP8+toString">.toString()</a> ⇒</li>
-<li><a href="#ECP8+setxy">.setxy(ix, iy)</a></li>
-<li><a href="#ECP8+setx">.setx(ix)</a></li>
-<li><a href="#ECP8+frob">.frob()</a></li>
-<li><a href="#ECP8+dbl">.dbl()</a></li>
-<li><a href="#ECP8+add">.add()</a></li>
-<li><a href="#ECP8+sub">.sub(Q)</a></li>
-<li><a href="#ECP8+mul">.mul(e)</a></li>
-</ul></li>
-<li><em>static</em>
-<ul>
-<li><a href="#ECP8.generator">.generator()</a></li>
-<li><a href="#ECP8.fromBytes">.fromBytes(b)</a></li>
-<li><a href="#ECP8.RHS">.RHS(x)</a></li>
-<li><a href="#ECP8.mul16">.mul16()</a></li>
-</ul></li>
-</ul></li>
-</ul>
-<p><a name="new_ECP8_new"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="new-ecp8"></a><a href="#new-ecp8" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>new ECP8()</h3>
-<p>Creates an instance of ECP8</p>
-<p><a name="ECP8+is_infinity"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp8is_infinity1"></a><a href="#ecp8is_infinity1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP8.is_infinity(1)</h3>
-<p>Tests for ECP8 point equal to infinity</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a>  <br>
-<strong>this</strong>: <code>{ECP8}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>1</td><td>if infinity, else returns 0</td></tr>
-</tbody>
-</table>
-<p><a name="ECP8+copy"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp8copyp"></a><a href="#ecp8copyp" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP8.copy(P)</h3>
-<p>Copy ECP8 point to another ECP8 point</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a>  <br>
-<strong>this</strong>: <code>{ECP8}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>P</td><td>ECP8 instance</td></tr>
-</tbody>
-</table>
-<p><a name="ECP8+inf"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp8inf"></a><a href="#ecp8inf" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP8.inf()</h3>
-<p>Set ECP8 to point-at-infinity</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a>  <br>
-<strong>this</strong>: <code>{ECP8}</code>  <br>
-<a name="ECP8+cmove"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp8cmove"></a><a href="#ecp8cmove" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP8.cmove()</h3>
-<p>conditional move of Q to P dependant on d</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a>  <br>
-<strong>this</strong>: <code>{ECP8}</code>  <br>
-<a name="ECP8+select"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp8select"></a><a href="#ecp8select" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP8.select()</h3>
-<p>Constant time select from pre-computed table</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a>  <br>
-<strong>this</strong>: <code>{ECP8}</code>  <br>
-<a name="ECP8+equals"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp8equalsq"></a><a href="#ecp8equalsq" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP8.equals(Q)</h3>
-<p>Test P == Q</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a>  <br>
-<strong>this</strong>: <code>{ECP8}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>Q</td><td>ECP8 instance</td></tr>
-</tbody>
-</table>
-<p><a name="ECP8+neg"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp8neg"></a><a href="#ecp8neg" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP8.neg()</h3>
-<p>set this=-this</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a>  <br>
-<strong>this</strong>: <code>{ECP8}</code>  <br>
-<a name="ECP8+affine"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp8affine"></a><a href="#ecp8affine" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP8.affine()</h3>
-<p>convert this to affine, from (x,y,z) to (x,y)</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a>  <br>
-<strong>this</strong>: <code>{ECP8}</code>  <br>
-<a name="ECP8+getX"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp8getx"></a><a href="#ecp8getx" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP8.getX()</h3>
-<p>extract affine x as ctx.FP2</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a>  <br>
-<strong>this</strong>: <code>{ECP8}</code>  <br>
-<a name="ECP8+getY"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp8gety"></a><a href="#ecp8gety" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP8.getY()</h3>
-<p>extract affine y as ctx.FP2</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a>  <br>
-<strong>this</strong>: <code>{ECP8}</code>  <br>
-<a name="ECP8+getx"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp8getx-1"></a><a href="#ecp8getx-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP8.getx()</h3>
-<p>extract projective x</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a>  <br>
-<strong>this</strong>: <code>{ECP8}</code>  <br>
-<a name="ECP8+gety"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp8gety-1"></a><a href="#ecp8gety-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP8.gety()</h3>
-<p>extract projective y</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a>  <br>
-<strong>this</strong>: <code>{ECP8}</code>  <br>
-<a name="ECP8+getz"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp8getz"></a><a href="#ecp8getz" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP8.getz()</h3>
-<p>extract projective z</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a>  <br>
-<strong>this</strong>: <code>{ECP8}</code>  <br>
-<a name="ECP8+toBytes"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp8tobytesb"></a><a href="#ecp8tobytesb" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP8.toBytes(b)</h3>
-<p>convert this to byte arrayextract projective x</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a>  <br>
-<strong>this</strong>: <code>{ECP8}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>b</td><td>byte array output</td></tr>
-</tbody>
-</table>
-<p><a name="ECP8+toString"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp8tostring-"></a><a href="#ecp8tostring-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP8.toString() ⇒</h3>
-<p>convert this to hex string</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a>  <br>
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/amcl-overview">AMCL Library</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-overview">AMCL Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API 1.0.0</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/aes">AES</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/big">BIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls">BLS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls192">BLS192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls256">BLS256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/dbig">DBIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp">ECP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ff">FF</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp">FP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp2">FP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp4">FP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp8">FP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp12">FP12</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp16">FP16</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp24">FP24</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp48">FP48</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/gcm">GCM</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash256">HASH256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash384">HASH384</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash512">HASH512</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin">MPIN</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair">PAIR</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rand">RAND</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rsa">RSA</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/sha3">SHA3</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/unit64">UInt64</a></li></ul></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL Library</span><meta itemprop="position" content="1"></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL JavaScript API 1.0.0</span><meta itemprop="position" content="2"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">ECP8</span><meta itemprop="position" content="3"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>ECP8</h1></header><a name="ECP8"></a><h2 class="anchor anchorWithStickyNavbar_LWe7" id="ecp8">ECP8<a class="hash-link" href="#ecp8" title="Direct link to heading">​</a></h2><p><strong>Kind</strong>: global class<br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP8{&quot;}&quot;}</code>  </p><ul><li><a href="#ECP8">ECP8</a><ul><li><a href="#new_ECP8_new">new ECP8()</a></li><li><em>instance</em><ul><li><a href="#ECP8+is_infinity">.is_infinity(1)</a></li><li><a href="#ECP8+copy">.copy(P)</a></li><li><a href="#ECP8+inf">.inf()</a></li><li><a href="#ECP8+cmove">.cmove()</a></li><li><a href="#ECP8+select">.select()</a></li><li><a href="#ECP8+equals">.equals(Q)</a></li><li><a href="#ECP8+neg">.neg()</a></li><li><a href="#ECP8+affine">.affine()</a></li><li><a href="#ECP8+getX">.getX()</a></li><li><a href="#ECP8+getY">.getY()</a></li><li><a href="#ECP8+getx">.getx()</a></li><li><a href="#ECP8+gety">.gety()</a></li><li><a href="#ECP8+getz">.getz()</a></li><li><a href="#ECP8+toBytes">.toBytes(b)</a></li><li><a href="#ECP8+toString">.toString()</a> ⇒</li><li><a href="#ECP8+setxy">.setxy(ix, iy)</a></li><li><a href="#ECP8+setx">.setx(ix)</a></li><li><a href="#ECP8+frob">.frob()</a></li><li><a href="#ECP8+dbl">.dbl()</a></li><li><a href="#ECP8+add">.add()</a></li><li><a href="#ECP8+sub">.sub(Q)</a></li><li><a href="#ECP8+mul">.mul(e)</a></li></ul></li><li><em>static</em><ul><li><a href="#ECP8.generator">.generator()</a></li><li><a href="#ECP8.fromBytes">.fromBytes(b)</a></li><li><a href="#ECP8.RHS">.RHS(x)</a></li><li><a href="#ECP8.mul16">.mul16()</a></li></ul></li></ul></li></ul><a name="new_ECP8_new"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="new-ecp8">new ECP8()<a class="hash-link" href="#new-ecp8" title="Direct link to heading">​</a></h3><p>Creates an instance of ECP8</p><a name="ECP8+is_infinity"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp8is_infinity1">ecP8.is_infinity(1)<a class="hash-link" href="#ecp8is_infinity1" title="Direct link to heading">​</a></h3><p>Tests for ECP8 point equal to infinity</p><p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP8{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>1</td><td>if infinity, else returns 0</td></tr></tbody></table><a name="ECP8+copy"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp8copyp">ecP8.copy(P)<a class="hash-link" href="#ecp8copyp" title="Direct link to heading">​</a></h3><p>Copy ECP8 point to another ECP8 point</p><p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP8{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>P</td><td>ECP8 instance</td></tr></tbody></table><a name="ECP8+inf"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp8inf">ecP8.inf()<a class="hash-link" href="#ecp8inf" title="Direct link to heading">​</a></h3><p>Set ECP8 to point-at-infinity</p><p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP8{&quot;}&quot;}</code>  </p><a name="ECP8+cmove"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp8cmove">ecP8.cmove()<a class="hash-link" href="#ecp8cmove" title="Direct link to heading">​</a></h3><p>conditional move of Q to P dependant on d</p><p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP8{&quot;}&quot;}</code>  </p><a name="ECP8+select"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp8select">ecP8.select()<a class="hash-link" href="#ecp8select" title="Direct link to heading">​</a></h3><p>Constant time select from pre-computed table</p><p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP8{&quot;}&quot;}</code>  </p><a name="ECP8+equals"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp8equalsq">ecP8.equals(Q)<a class="hash-link" href="#ecp8equalsq" title="Direct link to heading">​</a></h3><p>Test P == Q</p><p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP8{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>Q</td><td>ECP8 instance</td></tr></tbody></table><a name="ECP8+neg"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp8neg">ecP8.neg()<a class="hash-link" href="#ecp8neg" title="Direct link to heading">​</a></h3><p>set this=-this</p><p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP8{&quot;}&quot;}</code>  </p><a name="ECP8+affine"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp8affine">ecP8.affine()<a class="hash-link" href="#ecp8affine" title="Direct link to heading">​</a></h3><p>convert this to affine, from (x,y,z) to (x,y)</p><p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP8{&quot;}&quot;}</code>  </p><a name="ECP8+getX"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp8getx">ecP8.getX()<a class="hash-link" href="#ecp8getx" title="Direct link to heading">​</a></h3><p>extract affine x as ctx.FP2</p><p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP8{&quot;}&quot;}</code>  </p><a name="ECP8+getY"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp8gety">ecP8.getY()<a class="hash-link" href="#ecp8gety" title="Direct link to heading">​</a></h3><p>extract affine y as ctx.FP2</p><p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP8{&quot;}&quot;}</code>  </p><a name="ECP8+getx"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp8getx-1">ecP8.getx()<a class="hash-link" href="#ecp8getx-1" title="Direct link to heading">​</a></h3><p>extract projective x</p><p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP8{&quot;}&quot;}</code>  </p><a name="ECP8+gety"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp8gety-1">ecP8.gety()<a class="hash-link" href="#ecp8gety-1" title="Direct link to heading">​</a></h3><p>extract projective y</p><p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP8{&quot;}&quot;}</code>  </p><a name="ECP8+getz"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp8getz">ecP8.getz()<a class="hash-link" href="#ecp8getz" title="Direct link to heading">​</a></h3><p>extract projective z</p><p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP8{&quot;}&quot;}</code>  </p><a name="ECP8+toBytes"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp8tobytesb">ecP8.toBytes(b)<a class="hash-link" href="#ecp8tobytesb" title="Direct link to heading">​</a></h3><p>convert this to byte arrayextract projective x</p><p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP8{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>b</td><td>byte array output</td></tr></tbody></table><a name="ECP8+toString"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp8tostring-">ecP8.toString() ⇒<a class="hash-link" href="#ecp8tostring-" title="Direct link to heading">​</a></h3><p>convert this to hex string</p><p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a><br>
 <strong>Returns</strong>: hex string<br>
-<strong>this</strong>: <code>{ECP8}</code>  <br>
-<a name="ECP8+setxy"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp8setxyix-iy"></a><a href="#ecp8setxyix-iy" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP8.setxy(ix, iy)</h3>
-<p>set this=(x,y)</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a>  <br>
-<strong>this</strong>: <code>{ECP8}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>ix</td><td>x-value</td></tr>
-<tr><td>iy</td><td>y-value</td></tr>
-</tbody>
-</table>
-<p><a name="ECP8+setx"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp8setxix"></a><a href="#ecp8setxix" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP8.setx(ix)</h3>
-<p>set this=(x,.)</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a>  <br>
-<strong>this</strong>: <code>{ECP8}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>ix</td><td>x-value</td></tr>
-</tbody>
-</table>
-<p><a name="ECP8+frob"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp8frob"></a><a href="#ecp8frob" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP8.frob()</h3>
-<p>set this*=q, where q is Modulus, using Frobenius</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a>  <br>
-<strong>this</strong>: <code>{ECP8}</code>  <br>
-<a name="ECP8+dbl"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp8dbl"></a><a href="#ecp8dbl" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP8.dbl()</h3>
-<p>this+=this</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a>  <br>
-<strong>this</strong>: <code>{ECP8}</code>  <br>
-<a name="ECP8+add"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp8add"></a><a href="#ecp8add" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP8.add()</h3>
-<p>Adds ECP8 instances</p>
-<p>param Q ECP8 instance</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a>  <br>
-<strong>this</strong>: <code>{ECP8}</code>  <br>
-<a name="ECP8+sub"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp8subq"></a><a href="#ecp8subq" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP8.sub(Q)</h3>
-<p>Subtracts ECP instance Q  from this</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a>  <br>
-<strong>this</strong>: <code>{ECP8}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>Q</td><td>ECP8 instance</td></tr>
-</tbody>
-</table>
-<p><a name="ECP8+mul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp8mule"></a><a href="#ecp8mule" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ecP8.mul(e)</h3>
-<p>Multiplies an ECP8 instance P by a BIG, side-channel resistant</p>
-<p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a>  <br>
-<strong>this</strong>: <code>{ECP8}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>e</td><td>BIG number multiplier</td></tr>
-</tbody>
-</table>
-<p><a name="ECP8.generator"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp8generator"></a><a href="#ecp8generator" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ECP8.generator()</h3>
-<p>Set group generator</p>
-<p><strong>Kind</strong>: static method of <a href="#ECP8"><code>ECP8</code></a>  <br>
-<strong>this</strong>: <code>{ECP8}</code>  <br>
-<a name="ECP8.fromBytes"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp8frombytesb"></a><a href="#ecp8frombytesb" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ECP8.fromBytes(b)</h3>
-<p>convert from byte array to point</p>
-<p><strong>Kind</strong>: static method of <a href="#ECP8"><code>ECP8</code></a>  <br>
-<strong>this</strong>: <code>{ECP8}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>b</td><td>input byte array</td></tr>
-</tbody>
-</table>
-<p><a name="ECP8.RHS"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp8rhsx"></a><a href="#ecp8rhsx" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ECP8.RHS(x)</h3>
-<p>Calculate RHS of curve equation x^3+B</p>
-<p><strong>Kind</strong>: static method of <a href="#ECP8"><code>ECP8</code></a>  <br>
-<strong>this</strong>: <code>{ECP8}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>x</td><td>x-value</td></tr>
-</tbody>
-</table>
-<p><a name="ECP8.mul16"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ecp8mul16"></a><a href="#ecp8mul16" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ECP8.mul16()</h3>
-<p>Calculate P=u0.Q0+u1<em>Q1+u2</em>Q2+u3*Q3...</p>
-<p><strong>Kind</strong>: static method of <a href="#ECP8"><code>ECP8</code></a>  <br>
-<strong>this</strong>: <code>{ECP8}</code></p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/cryptojs/ecp4"><span class="arrow-prev">← </span><span>ECP4</span></a><a class="docs-next button" href="/docs/cryptojs/ff"><span>FF</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#ecp8">ECP8</a><ul class="toc-headings"><li><a href="#new-ecp8">new ECP8()</a></li><li><a href="#ecp8is_infinity1">ecP8.is_infinity(1)</a></li><li><a href="#ecp8copyp">ecP8.copy(P)</a></li><li><a href="#ecp8inf">ecP8.inf()</a></li><li><a href="#ecp8cmove">ecP8.cmove()</a></li><li><a href="#ecp8select">ecP8.select()</a></li><li><a href="#ecp8equalsq">ecP8.equals(Q)</a></li><li><a href="#ecp8neg">ecP8.neg()</a></li><li><a href="#ecp8affine">ecP8.affine()</a></li><li><a href="#ecp8getx">ecP8.getX()</a></li><li><a href="#ecp8gety">ecP8.getY()</a></li><li><a href="#ecp8getx-1">ecP8.getx()</a></li><li><a href="#ecp8gety-1">ecP8.gety()</a></li><li><a href="#ecp8getz">ecP8.getz()</a></li><li><a href="#ecp8tobytesb">ecP8.toBytes(b)</a></li><li><a href="#ecp8tostring-">ecP8.toString() ⇒</a></li><li><a href="#ecp8setxyix-iy">ecP8.setxy(ix, iy)</a></li><li><a href="#ecp8setxix">ecP8.setx(ix)</a></li><li><a href="#ecp8frob">ecP8.frob()</a></li><li><a href="#ecp8dbl">ecP8.dbl()</a></li><li><a href="#ecp8add">ecP8.add()</a></li><li><a href="#ecp8subq">ecP8.sub(Q)</a></li><li><a href="#ecp8mule">ecP8.mul(e)</a></li><li><a href="#ecp8generator">ECP8.generator()</a></li><li><a href="#ecp8frombytesb">ECP8.fromBytes(b)</a></li><li><a href="#ecp8rhsx">ECP8.RHS(x)</a></li><li><a href="#ecp8mul16">ECP8.mul16()</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<strong>this</strong>: <code>{&quot;{&quot;}ECP8{&quot;}&quot;}</code>  </p><a name="ECP8+setxy"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp8setxyix-iy">ecP8.setxy(ix, iy)<a class="hash-link" href="#ecp8setxyix-iy" title="Direct link to heading">​</a></h3><p>set this=(x,y)</p><p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP8{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>ix</td><td>x-value</td></tr><tr><td>iy</td><td>y-value</td></tr></tbody></table><a name="ECP8+setx"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp8setxix">ecP8.setx(ix)<a class="hash-link" href="#ecp8setxix" title="Direct link to heading">​</a></h3><p>set this=(x,.)</p><p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP8{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>ix</td><td>x-value</td></tr></tbody></table><a name="ECP8+frob"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp8frob">ecP8.frob()<a class="hash-link" href="#ecp8frob" title="Direct link to heading">​</a></h3><p>set this<!-- -->*<!-- -->=q, where q is Modulus, using Frobenius</p><p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP8{&quot;}&quot;}</code>  </p><a name="ECP8+dbl"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp8dbl">ecP8.dbl()<a class="hash-link" href="#ecp8dbl" title="Direct link to heading">​</a></h3><p>this+=this</p><p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP8{&quot;}&quot;}</code>  </p><a name="ECP8+add"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp8add">ecP8.add()<a class="hash-link" href="#ecp8add" title="Direct link to heading">​</a></h3><p>Adds ECP8 instances</p><p>param Q ECP8 instance</p><p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP8{&quot;}&quot;}</code>  </p><a name="ECP8+sub"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp8subq">ecP8.sub(Q)<a class="hash-link" href="#ecp8subq" title="Direct link to heading">​</a></h3><p>Subtracts ECP instance Q  from this</p><p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP8{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>Q</td><td>ECP8 instance</td></tr></tbody></table><a name="ECP8+mul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp8mule">ecP8.mul(e)<a class="hash-link" href="#ecp8mule" title="Direct link to heading">​</a></h3><p>Multiplies an ECP8 instance P by a BIG, side-channel resistant</p><p><strong>Kind</strong>: instance method of <a href="#ECP8"><code>ECP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP8{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>e</td><td>BIG number multiplier</td></tr></tbody></table><a name="ECP8.generator"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp8generator">ECP8.generator()<a class="hash-link" href="#ecp8generator" title="Direct link to heading">​</a></h3><p>Set group generator</p><p><strong>Kind</strong>: static method of <a href="#ECP8"><code>ECP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP8{&quot;}&quot;}</code>  </p><a name="ECP8.fromBytes"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp8frombytesb">ECP8.fromBytes(b)<a class="hash-link" href="#ecp8frombytesb" title="Direct link to heading">​</a></h3><p>convert from byte array to point</p><p><strong>Kind</strong>: static method of <a href="#ECP8"><code>ECP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP8{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>b</td><td>input byte array</td></tr></tbody></table><a name="ECP8.RHS"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp8rhsx">ECP8.RHS(x)<a class="hash-link" href="#ecp8rhsx" title="Direct link to heading">​</a></h3><p>Calculate RHS of curve equation x^3+B</p><p><strong>Kind</strong>: static method of <a href="#ECP8"><code>ECP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP8{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>x</td><td>x-value</td></tr></tbody></table><a name="ECP8.mul16"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ecp8mul16">ECP8.mul16()<a class="hash-link" href="#ecp8mul16" title="Direct link to heading">​</a></h3><p>Calculate P=u0.Q0+u1_Q1+u2_Q2+u3<!-- -->*<!-- -->Q3...</p><p><strong>Kind</strong>: static method of <a href="#ECP8"><code>ECP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}ECP8{&quot;}&quot;}</code></p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/cryptojs/ecp4"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">ECP4</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/cryptojs/ff"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">FF</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#ecp8" class="table-of-contents__link toc-highlight">ECP8</a><ul><li><a href="#new-ecp8" class="table-of-contents__link toc-highlight">new ECP8()</a></li><li><a href="#ecp8is_infinity1" class="table-of-contents__link toc-highlight">ecP8.is_infinity(1)</a></li><li><a href="#ecp8copyp" class="table-of-contents__link toc-highlight">ecP8.copy(P)</a></li><li><a href="#ecp8inf" class="table-of-contents__link toc-highlight">ecP8.inf()</a></li><li><a href="#ecp8cmove" class="table-of-contents__link toc-highlight">ecP8.cmove()</a></li><li><a href="#ecp8select" class="table-of-contents__link toc-highlight">ecP8.select()</a></li><li><a href="#ecp8equalsq" class="table-of-contents__link toc-highlight">ecP8.equals(Q)</a></li><li><a href="#ecp8neg" class="table-of-contents__link toc-highlight">ecP8.neg()</a></li><li><a href="#ecp8affine" class="table-of-contents__link toc-highlight">ecP8.affine()</a></li><li><a href="#ecp8getx" class="table-of-contents__link toc-highlight">ecP8.getX()</a></li><li><a href="#ecp8gety" class="table-of-contents__link toc-highlight">ecP8.getY()</a></li><li><a href="#ecp8getx-1" class="table-of-contents__link toc-highlight">ecP8.getx()</a></li><li><a href="#ecp8gety-1" class="table-of-contents__link toc-highlight">ecP8.gety()</a></li><li><a href="#ecp8getz" class="table-of-contents__link toc-highlight">ecP8.getz()</a></li><li><a href="#ecp8tobytesb" class="table-of-contents__link toc-highlight">ecP8.toBytes(b)</a></li><li><a href="#ecp8tostring-" class="table-of-contents__link toc-highlight">ecP8.toString() ⇒</a></li><li><a href="#ecp8setxyix-iy" class="table-of-contents__link toc-highlight">ecP8.setxy(ix, iy)</a></li><li><a href="#ecp8setxix" class="table-of-contents__link toc-highlight">ecP8.setx(ix)</a></li><li><a href="#ecp8frob" class="table-of-contents__link toc-highlight">ecP8.frob()</a></li><li><a href="#ecp8dbl" class="table-of-contents__link toc-highlight">ecP8.dbl()</a></li><li><a href="#ecp8add" class="table-of-contents__link toc-highlight">ecP8.add()</a></li><li><a href="#ecp8subq" class="table-of-contents__link toc-highlight">ecP8.sub(Q)</a></li><li><a href="#ecp8mule" class="table-of-contents__link toc-highlight">ecP8.mul(e)</a></li><li><a href="#ecp8generator" class="table-of-contents__link toc-highlight">ECP8.generator()</a></li><li><a href="#ecp8frombytesb" class="table-of-contents__link toc-highlight">ECP8.fromBytes(b)</a></li><li><a href="#ecp8rhsx" class="table-of-contents__link toc-highlight">ECP8.RHS(x)</a></li><li><a href="#ecp8mul16" class="table-of-contents__link toc-highlight">ECP8.mul16()</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/cryptojs/ff/index.html b/docs/cryptojs/ff/index.html
index cda8c7c..59797ba 100644
--- a/docs/cryptojs/ff/index.html
+++ b/docs/cryptojs/ff/index.html
@@ -1,464 +1,72 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>FF · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;a name=&quot;FF&quot;&gt;&lt;/a&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="FF · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;a name=&quot;FF&quot;&gt;&lt;/a&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>AMCL JavaScript API 1.0.0</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-cryptojs/ff">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">FF | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/cryptojs/ff"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="FF | Apache Milagro"><meta data-rh="true" name="description" content="FF"><meta data-rh="true" property="og:description" content="FF"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/cryptojs/ff"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/ff" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/ff" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">FF</h1></header><article><div><span><p><a name="FF"></a></p>
-<h2><a class="anchor" aria-hidden="true" id="ff"></a><a href="#ff" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>FF</h2>
-<p><strong>Kind</strong>: global class<br>
-<strong>this</strong>: <code>{FF}</code></p>
-<ul>
-<li><a href="#FF">FF</a>
-<ul>
-<li><a href="#new_FF_new">new FF()</a></li>
-<li><em>instance</em>
-<ul>
-<li><a href="#FF+set">.set(m)</a></li>
-<li><a href="#FF+copy">.copy(b)</a></li>
-<li><a href="#FF+rcopy">.rcopy(b)</a></li>
-<li><a href="#FF+dsucopy">.dsucopy()</a></li>
-<li><a href="#FF+dscopy">.dscopy()</a></li>
-<li><a href="#FF+sducopy">.sducopy()</a></li>
-<li><a href="#FF+iszilch">.iszilch()</a></li>
-<li><a href="#FF+shrw">.shrw()</a></li>
-<li><a href="#FF+shlw">.shlw()</a></li>
-<li><a href="#FF+parity">.parity()</a></li>
-<li><a href="#FF+radd">.radd()</a></li>
-<li><a href="#FF+rinc">.rinc()</a></li>
-<li><a href="#FF+rsub">.rsub()</a></li>
-<li><a href="#FF+rdec">.rdec()</a></li>
-<li><a href="#FF+add">.add()</a></li>
-<li><a href="#FF+sub">.sub()</a></li>
-<li><a href="#FF+revsub">.revsub()</a></li>
-<li><a href="#FF+inc">.inc()</a></li>
-<li><a href="#FF+rnorm">.rnorm()</a></li>
-<li><a href="#FF+shl">.shl()</a></li>
-<li><a href="#FF+shr">.shr()</a></li>
-<li><a href="#FF+toString">.toString()</a></li>
-<li><a href="#FF+toBytes">.toBytes()</a></li>
-<li><a href="#FF+karmul">.karmul()</a></li>
-<li><a href="#FF+lmul">.lmul()</a></li>
-<li><a href="#FF+mod">.mod()</a></li>
-<li><a href="#FF+reduce">.reduce(N, ND)</a> ⇒</li>
-<li><a href="#FF+dmod">.dmod(b)</a> ⇒</li>
-<li><a href="#FF+invmodp">.invmodp()</a></li>
-<li><a href="#FF+nres">.nres()</a></li>
-<li><a href="#FF+invmod2m">.invmod2m()</a></li>
-<li><a href="#FF+randomnum">.randomnum()</a></li>
-<li><a href="#FF+modmul">.modmul()</a></li>
-<li><a href="#FF+modsqr">.modsqr()</a></li>
-<li><a href="#FF+skpow">.skpow(e, p)</a></li>
-<li><a href="#FF+skspow">.skspow(e, p)</a></li>
-<li><a href="#FF+power">.power(e, p)</a></li>
-<li><a href="#FF+pow">.pow(e, p)</a></li>
-<li><a href="#FF+pow2">.pow2(e, y, f, p)</a></li>
-<li><a href="#FF+cfactor">.cfactor(s)</a> ⇒</li>
-</ul></li>
-<li><em>static</em>
-<ul>
-<li><a href="#FF.comp">.comp(a, b)</a> ⇒</li>
-<li><a href="#FF.cswap">.cswap()</a></li>
-<li><a href="#FF.mul">.mul()</a></li>
-<li><a href="#FF.sqr">.sqr()</a></li>
-<li><a href="#FF.prime">.prime(p, rmg)</a></li>
-</ul></li>
-</ul></li>
-</ul>
-<p><a name="new_FF_new"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="new-ff"></a><a href="#new-ff" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>new FF()</h3>
-<p>Creates an instance of FF.</p>
-<p><a name="FF+set"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ffsetm"></a><a href="#ffsetm" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fF.set(m)</h3>
-<p>set to integer</p>
-<p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a>  <br>
-<strong>this</strong>: <code>{FF}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>m</td><td>Integer value to be set to</td></tr>
-</tbody>
-</table>
-<p><a name="FF+copy"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ffcopyb"></a><a href="#ffcopyb" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fF.copy(b)</h3>
-<p>copy from FF b</p>
-<p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a>  <br>
-<strong>this</strong>: <code>{FF}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>b</td><td>FF element to copy from</td></tr>
-</tbody>
-</table>
-<p><a name="FF+rcopy"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ffrcopyb"></a><a href="#ffrcopyb" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fF.rcopy(b)</h3>
-<p>copy from FF b</p>
-<p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a>  <br>
-<strong>this</strong>: <code>{FF}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>b</td><td>FF element to copy from</td></tr>
-</tbody>
-</table>
-<p><a name="FF+dsucopy"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ffdsucopy"></a><a href="#ffdsucopy" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fF.dsucopy()</h3>
-<p>x=y&lt;&lt;n</p>
-<p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a>  <br>
-<strong>this</strong>: <code>{FF}</code>  <br>
-<a name="FF+dscopy"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ffdscopy"></a><a href="#ffdscopy" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fF.dscopy()</h3>
-<p>x=y</p>
-<p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a>  <br>
-<strong>this</strong>: <code>{FF}</code>  <br>
-<a name="FF+sducopy"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ffsducopy"></a><a href="#ffsducopy" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fF.sducopy()</h3>
-<p>x=y&gt;&gt;n</p>
-<p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a>  <br>
-<strong>this</strong>: <code>{FF}</code>  <br>
-<a name="FF+iszilch"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ffiszilch"></a><a href="#ffiszilch" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fF.iszilch()</h3>
-<p>test equals 0</p>
-<p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a>  <br>
-<strong>this</strong>: <code>{FF}</code>  <br>
-<a name="FF+shrw"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ffshrw"></a><a href="#ffshrw" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fF.shrw()</h3>
-<p>shift right by BIGBITS-bit words</p>
-<p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a>  <br>
-<strong>this</strong>: <code>{FF}</code>  <br>
-<a name="FF+shlw"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ffshlw"></a><a href="#ffshlw" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fF.shlw()</h3>
-<p>shift left by BIGBITS-bit words</p>
-<p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a>  <br>
-<strong>this</strong>: <code>{FF}</code>  <br>
-<a name="FF+parity"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ffparity"></a><a href="#ffparity" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fF.parity()</h3>
-<p>extract last bit</p>
-<p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a>  <br>
-<strong>this</strong>: <code>{FF}</code>  <br>
-<a name="FF+radd"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ffradd"></a><a href="#ffradd" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fF.radd()</h3>
-<p>recursive add</p>
-<p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a>  <br>
-<strong>this</strong>: <code>{FF}</code>  <br>
-<a name="FF+rinc"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ffrinc"></a><a href="#ffrinc" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fF.rinc()</h3>
-<p>recursive inc</p>
-<p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a>  <br>
-<strong>this</strong>: <code>{FF}</code>  <br>
-<a name="FF+rsub"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ffrsub"></a><a href="#ffrsub" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fF.rsub()</h3>
-<p>recursive sub</p>
-<p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a>  <br>
-<strong>this</strong>: <code>{FF}</code>  <br>
-<a name="FF+rdec"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ffrdec"></a><a href="#ffrdec" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fF.rdec()</h3>
-<p>recursive dec</p>
-<p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a>  <br>
-<strong>this</strong>: <code>{FF}</code>  <br>
-<a name="FF+add"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ffadd"></a><a href="#ffadd" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fF.add()</h3>
-<p>simple add</p>
-<p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a>  <br>
-<strong>this</strong>: <code>{FF}</code>  <br>
-<a name="FF+sub"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ffsub"></a><a href="#ffsub" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fF.sub()</h3>
-<p>simple sub</p>
-<p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a>  <br>
-<strong>this</strong>: <code>{FF}</code>  <br>
-<a name="FF+revsub"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ffrevsub"></a><a href="#ffrevsub" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fF.revsub()</h3>
-<p>reverse sub</p>
-<p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a>  <br>
-<strong>this</strong>: <code>{FF}</code>  <br>
-<a name="FF+inc"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ffinc"></a><a href="#ffinc" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fF.inc()</h3>
-<p>increment/decrement by a small integer</p>
-<p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a>  <br>
-<strong>this</strong>: <code>{FF}</code>  <br>
-<a name="FF+rnorm"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ffrnorm"></a><a href="#ffrnorm" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fF.rnorm()</h3>
-<p>normalise - but hold any overflow in top part unless n&lt;0</p>
-<p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a>  <br>
-<strong>this</strong>: <code>{FF}</code>  <br>
-<a name="FF+shl"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ffshl"></a><a href="#ffshl" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fF.shl()</h3>
-<p>shift left by one bit</p>
-<p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a>  <br>
-<strong>this</strong>: <code>{FF}</code>  <br>
-<a name="FF+shr"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ffshr"></a><a href="#ffshr" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fF.shr()</h3>
-<p>shift right by one bit</p>
-<p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a>  <br>
-<strong>this</strong>: <code>{FF}</code>  <br>
-<a name="FF+toString"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fftostring"></a><a href="#fftostring" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fF.toString()</h3>
-<p>Convert to Hex String</p>
-<p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a>  <br>
-<strong>this</strong>: <code>{FF}</code>  <br>
-<a name="FF+toBytes"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fftobytes"></a><a href="#fftobytes" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fF.toBytes()</h3>
-<p>Convert FFs to/from byte arrays</p>
-<p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a>  <br>
-<strong>this</strong>: <code>{FF}</code>  <br>
-<a name="FF+karmul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ffkarmul"></a><a href="#ffkarmul" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fF.karmul()</h3>
-<p>z=x*y, t is workspace</p>
-<p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a>  <br>
-<strong>this</strong>: <code>{FF}</code>  <br>
-<a name="FF+lmul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fflmul"></a><a href="#fflmul" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fF.lmul()</h3>
-<p>return low part of product this*y</p>
-<p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a>  <br>
-<strong>this</strong>: <code>{FF}</code>  <br>
-<a name="FF+mod"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ffmod"></a><a href="#ffmod" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fF.mod()</h3>
-<p>Set b=b mod c</p>
-<p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a>  <br>
-<strong>this</strong>: <code>{FF}</code>  <br>
-<a name="FF+reduce"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ffreducen-nd-"></a><a href="#ffreducen-nd-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fF.reduce(N, ND) ⇒</h3>
-<p>return this mod modulus</p>
-<p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a>  <br>
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/amcl-overview">AMCL Library</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-overview">AMCL Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API 1.0.0</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/aes">AES</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/big">BIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls">BLS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls192">BLS192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls256">BLS256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/dbig">DBIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp">ECP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/cryptojs/ff">FF</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp">FP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp2">FP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp4">FP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp8">FP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp12">FP12</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp16">FP16</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp24">FP24</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp48">FP48</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/gcm">GCM</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash256">HASH256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash384">HASH384</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash512">HASH512</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin">MPIN</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair">PAIR</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rand">RAND</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rsa">RSA</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/sha3">SHA3</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/unit64">UInt64</a></li></ul></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL Library</span><meta itemprop="position" content="1"></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL JavaScript API 1.0.0</span><meta itemprop="position" content="2"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">FF</span><meta itemprop="position" content="3"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>FF</h1></header><a name="FF"></a><h2 class="anchor anchorWithStickyNavbar_LWe7" id="ff">FF<a class="hash-link" href="#ff" title="Direct link to heading">​</a></h2><p><strong>Kind</strong>: global class<br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><ul><li><a href="#FF">FF</a><ul><li><a href="#new_FF_new">new FF()</a></li><li><em>instance</em><ul><li><a href="#FF+set">.set(m)</a></li><li><a href="#FF+copy">.copy(b)</a></li><li><a href="#FF+rcopy">.rcopy(b)</a></li><li><a href="#FF+dsucopy">.dsucopy()</a></li><li><a href="#FF+dscopy">.dscopy()</a></li><li><a href="#FF+sducopy">.sducopy()</a></li><li><a href="#FF+iszilch">.iszilch()</a></li><li><a href="#FF+shrw">.shrw()</a></li><li><a href="#FF+shlw">.shlw()</a></li><li><a href="#FF+parity">.parity()</a></li><li><a href="#FF+radd">.radd()</a></li><li><a href="#FF+rinc">.rinc()</a></li><li><a href="#FF+rsub">.rsub()</a></li><li><a href="#FF+rdec">.rdec()</a></li><li><a href="#FF+add">.add()</a></li><li><a href="#FF+sub">.sub()</a></li><li><a href="#FF+revsub">.revsub()</a></li><li><a href="#FF+inc">.inc()</a></li><li><a href="#FF+rnorm">.rnorm()</a></li><li><a href="#FF+shl">.shl()</a></li><li><a href="#FF+shr">.shr()</a></li><li><a href="#FF+toString">.toString()</a></li><li><a href="#FF+toBytes">.toBytes()</a></li><li><a href="#FF+karmul">.karmul()</a></li><li><a href="#FF+lmul">.lmul()</a></li><li><a href="#FF+mod">.mod()</a></li><li><a href="#FF+reduce">.reduce(N, ND)</a> ⇒</li><li><a href="#FF+dmod">.dmod(b)</a> ⇒</li><li><a href="#FF+invmodp">.invmodp()</a></li><li><a href="#FF+nres">.nres()</a></li><li><a href="#FF+invmod2m">.invmod2m()</a></li><li><a href="#FF+randomnum">.randomnum()</a></li><li><a href="#FF+modmul">.modmul()</a></li><li><a href="#FF+modsqr">.modsqr()</a></li><li><a href="#FF+skpow">.skpow(e, p)</a></li><li><a href="#FF+skspow">.skspow(e, p)</a></li><li><a href="#FF+power">.power(e, p)</a></li><li><a href="#FF+pow">.pow(e, p)</a></li><li><a href="#FF+pow2">.pow2(e, y, f, p)</a></li><li><a href="#FF+cfactor">.cfactor(s)</a> ⇒</li></ul></li><li><em>static</em><ul><li><a href="#FF.comp">.comp(a, b)</a> ⇒</li><li><a href="#FF.cswap">.cswap()</a></li><li><a href="#FF.mul">.mul()</a></li><li><a href="#FF.sqr">.sqr()</a></li><li><a href="#FF.prime">.prime(p, rmg)</a></li></ul></li></ul></li></ul><a name="new_FF_new"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="new-ff">new FF()<a class="hash-link" href="#new-ff" title="Direct link to heading">​</a></h3><p>Creates an instance of FF.</p><a name="FF+set"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ffsetm">fF.set(m)<a class="hash-link" href="#ffsetm" title="Direct link to heading">​</a></h3><p>set to integer</p><p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>m</td><td>Integer value to be set to</td></tr></tbody></table><a name="FF+copy"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ffcopyb">fF.copy(b)<a class="hash-link" href="#ffcopyb" title="Direct link to heading">​</a></h3><p>copy from FF b</p><p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>b</td><td>FF element to copy from</td></tr></tbody></table><a name="FF+rcopy"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ffrcopyb">fF.rcopy(b)<a class="hash-link" href="#ffrcopyb" title="Direct link to heading">​</a></h3><p>copy from FF b</p><p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>b</td><td>FF element to copy from</td></tr></tbody></table><a name="FF+dsucopy"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ffdsucopy">fF.dsucopy()<a class="hash-link" href="#ffdsucopy" title="Direct link to heading">​</a></h3><p>x=y<!-- -->&lt;<!-- -->&lt;<!-- -->n</p><p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><a name="FF+dscopy"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ffdscopy">fF.dscopy()<a class="hash-link" href="#ffdscopy" title="Direct link to heading">​</a></h3><p>x=y</p><p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><a name="FF+sducopy"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ffsducopy">fF.sducopy()<a class="hash-link" href="#ffsducopy" title="Direct link to heading">​</a></h3><p>x=y<!-- -->&gt;<!-- -->&gt;<!-- -->n</p><p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><a name="FF+iszilch"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ffiszilch">fF.iszilch()<a class="hash-link" href="#ffiszilch" title="Direct link to heading">​</a></h3><p>test equals 0</p><p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><a name="FF+shrw"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ffshrw">fF.shrw()<a class="hash-link" href="#ffshrw" title="Direct link to heading">​</a></h3><p>shift right by BIGBITS-bit words</p><p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><a name="FF+shlw"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ffshlw">fF.shlw()<a class="hash-link" href="#ffshlw" title="Direct link to heading">​</a></h3><p>shift left by BIGBITS-bit words</p><p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><a name="FF+parity"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ffparity">fF.parity()<a class="hash-link" href="#ffparity" title="Direct link to heading">​</a></h3><p>extract last bit</p><p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><a name="FF+radd"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ffradd">fF.radd()<a class="hash-link" href="#ffradd" title="Direct link to heading">​</a></h3><p>recursive add</p><p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><a name="FF+rinc"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ffrinc">fF.rinc()<a class="hash-link" href="#ffrinc" title="Direct link to heading">​</a></h3><p>recursive inc</p><p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><a name="FF+rsub"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ffrsub">fF.rsub()<a class="hash-link" href="#ffrsub" title="Direct link to heading">​</a></h3><p>recursive sub</p><p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><a name="FF+rdec"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ffrdec">fF.rdec()<a class="hash-link" href="#ffrdec" title="Direct link to heading">​</a></h3><p>recursive dec</p><p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><a name="FF+add"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ffadd">fF.add()<a class="hash-link" href="#ffadd" title="Direct link to heading">​</a></h3><p>simple add</p><p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><a name="FF+sub"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ffsub">fF.sub()<a class="hash-link" href="#ffsub" title="Direct link to heading">​</a></h3><p>simple sub</p><p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><a name="FF+revsub"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ffrevsub">fF.revsub()<a class="hash-link" href="#ffrevsub" title="Direct link to heading">​</a></h3><p>reverse sub</p><p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><a name="FF+inc"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ffinc">fF.inc()<a class="hash-link" href="#ffinc" title="Direct link to heading">​</a></h3><p>increment/decrement by a small integer</p><p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><a name="FF+rnorm"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ffrnorm">fF.rnorm()<a class="hash-link" href="#ffrnorm" title="Direct link to heading">​</a></h3><p>normalise - but hold any overflow in top part unless n<!-- -->&lt;<!-- -->0</p><p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><a name="FF+shl"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ffshl">fF.shl()<a class="hash-link" href="#ffshl" title="Direct link to heading">​</a></h3><p>shift left by one bit</p><p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><a name="FF+shr"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ffshr">fF.shr()<a class="hash-link" href="#ffshr" title="Direct link to heading">​</a></h3><p>shift right by one bit</p><p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><a name="FF+toString"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fftostring">fF.toString()<a class="hash-link" href="#fftostring" title="Direct link to heading">​</a></h3><p>Convert to Hex String</p><p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><a name="FF+toBytes"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fftobytes">fF.toBytes()<a class="hash-link" href="#fftobytes" title="Direct link to heading">​</a></h3><p>Convert FFs to/from byte arrays</p><p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><a name="FF+karmul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ffkarmul">fF.karmul()<a class="hash-link" href="#ffkarmul" title="Direct link to heading">​</a></h3><p>z=x<!-- -->*<!-- -->y, t is workspace</p><p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><a name="FF+lmul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fflmul">fF.lmul()<a class="hash-link" href="#fflmul" title="Direct link to heading">​</a></h3><p>return low part of product this<!-- -->*<!-- -->y</p><p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><a name="FF+mod"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ffmod">fF.mod()<a class="hash-link" href="#ffmod" title="Direct link to heading">​</a></h3><p>Set b=b mod c</p><p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><a name="FF+reduce"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ffreducen-nd-">fF.reduce(N, ND) ⇒<a class="hash-link" href="#ffreducen-nd-" title="Direct link to heading">​</a></h3><p>return this mod modulus</p><p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a><br>
 <strong>Returns</strong>: this mod N<br>
-<strong>this</strong>: <code>{FF}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>N</td><td>Mmodulus</td></tr>
-<tr><td>ND</td><td>Montgomery Constant</td></tr>
-</tbody>
-</table>
-<p><a name="FF+dmod"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ffdmodb-"></a><a href="#ffdmodb-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fF.dmod(b) ⇒</h3>
-<p>Reduces a double-length FF with respect to a given modulus</p>
-<p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>N</td><td>Mmodulus</td></tr><tr><td>ND</td><td>Montgomery Constant</td></tr></tbody></table><a name="FF+dmod"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ffdmodb-">fF.dmod(b) ⇒<a class="hash-link" href="#ffdmodb-" title="Direct link to heading">​</a></h3><p>Reduces a double-length FF with respect to a given modulus</p><p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a><br>
 <strong>Returns</strong>: this mod N<br>
-<strong>this</strong>: <code>{FF}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>b</td><td>Mmodulus</td></tr>
-</tbody>
-</table>
-<p><a name="FF+invmodp"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ffinvmodp"></a><a href="#ffinvmodp" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fF.invmodp()</h3>
-<p>Set return=1/this mod p. Binary method - a&lt;p on entry</p>
-<p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a>  <br>
-<strong>this</strong>: <code>{FF}</code>  <br>
-<a name="FF+nres"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ffnres"></a><a href="#ffnres" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fF.nres()</h3>
-<p>nresidue mod m</p>
-<p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a>  <br>
-<strong>this</strong>: <code>{FF}</code>  <br>
-<a name="FF+invmod2m"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ffinvmod2m"></a><a href="#ffinvmod2m" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fF.invmod2m()</h3>
-<p>U=1/a mod 2^m - Arazi &amp; Qi</p>
-<p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a>  <br>
-<strong>this</strong>: <code>{FF}</code>  <br>
-<a name="FF+randomnum"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ffrandomnum"></a><a href="#ffrandomnum" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fF.randomnum()</h3>
-<p>generate random x</p>
-<p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a>  <br>
-<strong>this</strong>: <code>{FF}</code>  <br>
-<a name="FF+modmul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ffmodmul"></a><a href="#ffmodmul" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fF.modmul()</h3>
-<p>this*=y mod p</p>
-<p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a>  <br>
-<strong>this</strong>: <code>{FF}</code>  <br>
-<a name="FF+modsqr"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ffmodsqr"></a><a href="#ffmodsqr" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fF.modsqr()</h3>
-<p>this*=y mod p</p>
-<p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a>  <br>
-<strong>this</strong>: <code>{FF}</code>  <br>
-<a name="FF+skpow"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ffskpowe-p"></a><a href="#ffskpowe-p" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fF.skpow(e, p)</h3>
-<p>this=this^e mod p using side-channel resistant Montgomery Ladder, for large e</p>
-<p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a>  <br>
-<strong>this</strong>: <code>{FF}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>e</td><td>exponent</td></tr>
-<tr><td>p</td><td>modulus</td></tr>
-</tbody>
-</table>
-<p><a name="FF+skspow"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ffskspowe-p"></a><a href="#ffskspowe-p" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fF.skspow(e, p)</h3>
-<p>this=this^e mod p using side-channel resistant Montgomery Ladder, for short e</p>
-<p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a>  <br>
-<strong>this</strong>: <code>{FF}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>e</td><td>exponent</td></tr>
-<tr><td>p</td><td>modulus</td></tr>
-</tbody>
-</table>
-<p><a name="FF+power"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ffpowere-p"></a><a href="#ffpowere-p" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fF.power(e, p)</h3>
-<p>raise to an integer power - right-to-left method</p>
-<p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a>  <br>
-<strong>this</strong>: <code>{FF}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>e</td><td>exponent</td></tr>
-<tr><td>p</td><td>modulus</td></tr>
-</tbody>
-</table>
-<p><a name="FF+pow"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ffpowe-p"></a><a href="#ffpowe-p" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fF.pow(e, p)</h3>
-<p>this=this^e mod p, faster but not side channel resistant</p>
-<p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a>  <br>
-<strong>this</strong>: <code>{FF}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>e</td><td>exponent</td></tr>
-<tr><td>p</td><td>modulus</td></tr>
-</tbody>
-</table>
-<p><a name="FF+pow2"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ffpow2e-y-f-p"></a><a href="#ffpow2e-y-f-p" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fF.pow2(e, y, f, p)</h3>
-<p>double exponentiation r=x^e.y^f mod p</p>
-<p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a>  <br>
-<strong>this</strong>: <code>{FF}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>e</td><td>exponent</td></tr>
-<tr><td>y</td><td>FF instance</td></tr>
-<tr><td>f</td><td>exponent</td></tr>
-<tr><td>p</td><td>modulus</td></tr>
-</tbody>
-</table>
-<p><a name="FF+cfactor"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ffcfactors-"></a><a href="#ffcfactors-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fF.cfactor(s) ⇒</h3>
-<p>Test if an FF has factor in common with integer s</p>
-<p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>b</td><td>Mmodulus</td></tr></tbody></table><a name="FF+invmodp"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ffinvmodp">fF.invmodp()<a class="hash-link" href="#ffinvmodp" title="Direct link to heading">​</a></h3><p>Set return=1/this mod p. Binary method - a<!-- -->&lt;<!-- -->p on entry</p><p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><a name="FF+nres"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ffnres">fF.nres()<a class="hash-link" href="#ffnres" title="Direct link to heading">​</a></h3><p>nresidue mod m</p><p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><a name="FF+invmod2m"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ffinvmod2m">fF.invmod2m()<a class="hash-link" href="#ffinvmod2m" title="Direct link to heading">​</a></h3><p>U=1/a mod 2^m - Arazi &amp; Qi</p><p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><a name="FF+randomnum"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ffrandomnum">fF.randomnum()<a class="hash-link" href="#ffrandomnum" title="Direct link to heading">​</a></h3><p>generate random x</p><p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><a name="FF+modmul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ffmodmul">fF.modmul()<a class="hash-link" href="#ffmodmul" title="Direct link to heading">​</a></h3><p>this<!-- -->*<!-- -->=y mod p</p><p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><a name="FF+modsqr"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ffmodsqr">fF.modsqr()<a class="hash-link" href="#ffmodsqr" title="Direct link to heading">​</a></h3><p>this<!-- -->*<!-- -->=y mod p</p><p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><a name="FF+skpow"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ffskpowe-p">fF.skpow(e, p)<a class="hash-link" href="#ffskpowe-p" title="Direct link to heading">​</a></h3><p>this=this^e mod p using side-channel resistant Montgomery Ladder, for large e</p><p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>e</td><td>exponent</td></tr><tr><td>p</td><td>modulus</td></tr></tbody></table><a name="FF+skspow"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ffskspowe-p">fF.skspow(e, p)<a class="hash-link" href="#ffskspowe-p" title="Direct link to heading">​</a></h3><p>this=this^e mod p using side-channel resistant Montgomery Ladder, for short e</p><p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>e</td><td>exponent</td></tr><tr><td>p</td><td>modulus</td></tr></tbody></table><a name="FF+power"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ffpowere-p">fF.power(e, p)<a class="hash-link" href="#ffpowere-p" title="Direct link to heading">​</a></h3><p>raise to an integer power - right-to-left method</p><p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>e</td><td>exponent</td></tr><tr><td>p</td><td>modulus</td></tr></tbody></table><a name="FF+pow"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ffpowe-p">fF.pow(e, p)<a class="hash-link" href="#ffpowe-p" title="Direct link to heading">​</a></h3><p>this=this^e mod p, faster but not side channel resistant</p><p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>e</td><td>exponent</td></tr><tr><td>p</td><td>modulus</td></tr></tbody></table><a name="FF+pow2"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ffpow2e-y-f-p">fF.pow2(e, y, f, p)<a class="hash-link" href="#ffpow2e-y-f-p" title="Direct link to heading">​</a></h3><p>double exponentiation r=x^e.y^f mod p</p><p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>e</td><td>exponent</td></tr><tr><td>y</td><td>FF instance</td></tr><tr><td>f</td><td>exponent</td></tr><tr><td>p</td><td>modulus</td></tr></tbody></table><a name="FF+cfactor"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ffcfactors-">fF.cfactor(s) ⇒<a class="hash-link" href="#ffcfactors-" title="Direct link to heading">​</a></h3><p>Test if an FF has factor in common with integer s</p><p><strong>Kind</strong>: instance method of <a href="#FF"><code>FF</code></a><br>
 <strong>Returns</strong>: true or false<br>
-<strong>this</strong>: <code>{FF}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>s</td><td>integerexponent</td></tr>
-</tbody>
-</table>
-<p><a name="FF.comp"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ffcompa-b-"></a><a href="#ffcompa-b-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>FF.comp(a, b) ⇒</h3>
-<p>compare a and b - must be normalised, and of same length</p>
-<p><strong>Kind</strong>: static method of <a href="#FF"><code>FF</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>s</td><td>integerexponent</td></tr></tbody></table><a name="FF.comp"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ffcompa-b-">FF.comp(a, b) ⇒<a class="hash-link" href="#ffcompa-b-" title="Direct link to heading">​</a></h3><p>compare a and b - must be normalised, and of same length</p><p><strong>Kind</strong>: static method of <a href="#FF"><code>FF</code></a><br>
 <strong>Returns</strong>: zero of error codetrue or false<br>
-<strong>this</strong>: <code>{FF}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>a</td><td>FF number</td></tr>
-<tr><td>b</td><td>FF number</td></tr>
-</tbody>
-</table>
-<p><a name="FF.cswap"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ffcswap"></a><a href="#ffcswap" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>FF.cswap()</h3>
-<p>in-place swapping using xor - side channel resistant - lengths must be the same</p>
-<p><strong>Kind</strong>: static method of <a href="#FF"><code>FF</code></a>  <br>
-<strong>this</strong>: <code>{FF}</code>  <br>
-<a name="FF.mul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ffmul"></a><a href="#ffmul" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>FF.mul()</h3>
-<p>z=x*y. Assumes x and y are of same length.</p>
-<p><strong>Kind</strong>: static method of <a href="#FF"><code>FF</code></a>  <br>
-<strong>this</strong>: <code>{FF}</code>  <br>
-<a name="FF.sqr"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ffsqr"></a><a href="#ffsqr" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>FF.sqr()</h3>
-<p>z=x^2</p>
-<p><strong>Kind</strong>: static method of <a href="#FF"><code>FF</code></a>  <br>
-<strong>this</strong>: <code>{FF}</code>  <br>
-<a name="FF.prime"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="ffprimep-rmg"></a><a href="#ffprimep-rmg" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>FF.prime(p, rmg)</h3>
-<p>Miller-Rabin test for primality.</p>
-<p><strong>Kind</strong>: static method of <a href="#FF"><code>FF</code></a>  <br>
-<strong>this</strong>: <code>{FF}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>p</td><td>FF instance to be tested</td></tr>
-<tr><td>rmg</td><td>an instance of a Cryptographically Secure Random Number Generator</td></tr>
-</tbody>
-</table>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/cryptojs/ecp8"><span class="arrow-prev">← </span><span>ECP8</span></a><a class="docs-next button" href="/docs/cryptojs/fp"><span>FP</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#ff">FF</a><ul class="toc-headings"><li><a href="#new-ff">new FF()</a></li><li><a href="#ffsetm">fF.set(m)</a></li><li><a href="#ffcopyb">fF.copy(b)</a></li><li><a href="#ffrcopyb">fF.rcopy(b)</a></li><li><a href="#ffdsucopy">fF.dsucopy()</a></li><li><a href="#ffdscopy">fF.dscopy()</a></li><li><a href="#ffsducopy">fF.sducopy()</a></li><li><a href="#ffiszilch">fF.iszilch()</a></li><li><a href="#ffshrw">fF.shrw()</a></li><li><a href="#ffshlw">fF.shlw()</a></li><li><a href="#ffparity">fF.parity()</a></li><li><a href="#ffradd">fF.radd()</a></li><li><a href="#ffrinc">fF.rinc()</a></li><li><a href="#ffrsub">fF.rsub()</a></li><li><a href="#ffrdec">fF.rdec()</a></li><li><a href="#ffadd">fF.add()</a></li><li><a href="#ffsub">fF.sub()</a></li><li><a href="#ffrevsub">fF.revsub()</a></li><li><a href="#ffinc">fF.inc()</a></li><li><a href="#ffrnorm">fF.rnorm()</a></li><li><a href="#ffshl">fF.shl()</a></li><li><a href="#ffshr">fF.shr()</a></li><li><a href="#fftostring">fF.toString()</a></li><li><a href="#fftobytes">fF.toBytes()</a></li><li><a href="#ffkarmul">fF.karmul()</a></li><li><a href="#fflmul">fF.lmul()</a></li><li><a href="#ffmod">fF.mod()</a></li><li><a href="#ffreducen-nd-">fF.reduce(N, ND) ⇒</a></li><li><a href="#ffdmodb-">fF.dmod(b) ⇒</a></li><li><a href="#ffinvmodp">fF.invmodp()</a></li><li><a href="#ffnres">fF.nres()</a></li><li><a href="#ffinvmod2m">fF.invmod2m()</a></li><li><a href="#ffrandomnum">fF.randomnum()</a></li><li><a href="#ffmodmul">fF.modmul()</a></li><li><a href="#ffmodsqr">fF.modsqr()</a></li><li><a href="#ffskpowe-p">fF.skpow(e, p)</a></li><li><a href="#ffskspowe-p">fF.skspow(e, p)</a></li><li><a href="#ffpowere-p">fF.power(e, p)</a></li><li><a href="#ffpowe-p">fF.pow(e, p)</a></li><li><a href="#ffpow2e-y-f-p">fF.pow2(e, y, f, p)</a></li><li><a href="#ffcfactors-">fF.cfactor(s) ⇒</a></li><li><a href="#ffcompa-b-">FF.comp(a, b) ⇒</a></li><li><a href="#ffcswap">FF.cswap()</a></li><li><a href="#ffmul">FF.mul()</a></li><li><a href="#ffsqr">FF.sqr()</a></li><li><a href="#ffprimep-rmg">FF.prime(p, rmg)</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>a</td><td>FF number</td></tr><tr><td>b</td><td>FF number</td></tr></tbody></table><a name="FF.cswap"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ffcswap">FF.cswap()<a class="hash-link" href="#ffcswap" title="Direct link to heading">​</a></h3><p>in-place swapping using xor - side channel resistant - lengths must be the same</p><p><strong>Kind</strong>: static method of <a href="#FF"><code>FF</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><a name="FF.mul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ffmul">FF.mul()<a class="hash-link" href="#ffmul" title="Direct link to heading">​</a></h3><p>z=x<!-- -->*<!-- -->y. Assumes x and y are of same length.</p><p><strong>Kind</strong>: static method of <a href="#FF"><code>FF</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><a name="FF.sqr"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ffsqr">FF.sqr()<a class="hash-link" href="#ffsqr" title="Direct link to heading">​</a></h3><p>z=x^2</p><p><strong>Kind</strong>: static method of <a href="#FF"><code>FF</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><a name="FF.prime"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="ffprimep-rmg">FF.prime(p, rmg)<a class="hash-link" href="#ffprimep-rmg" title="Direct link to heading">​</a></h3><p>Miller-Rabin test for primality.</p><p><strong>Kind</strong>: static method of <a href="#FF"><code>FF</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FF{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>p</td><td>FF instance to be tested</td></tr><tr><td>rmg</td><td>an instance of a Cryptographically Secure Random Number Generator</td></tr></tbody></table></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/cryptojs/ecp8"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">ECP8</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/cryptojs/fp"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">FP</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#ff" class="table-of-contents__link toc-highlight">FF</a><ul><li><a href="#new-ff" class="table-of-contents__link toc-highlight">new FF()</a></li><li><a href="#ffsetm" class="table-of-contents__link toc-highlight">fF.set(m)</a></li><li><a href="#ffcopyb" class="table-of-contents__link toc-highlight">fF.copy(b)</a></li><li><a href="#ffrcopyb" class="table-of-contents__link toc-highlight">fF.rcopy(b)</a></li><li><a href="#ffdsucopy" class="table-of-contents__link toc-highlight">fF.dsucopy()</a></li><li><a href="#ffdscopy" class="table-of-contents__link toc-highlight">fF.dscopy()</a></li><li><a href="#ffsducopy" class="table-of-contents__link toc-highlight">fF.sducopy()</a></li><li><a href="#ffiszilch" class="table-of-contents__link toc-highlight">fF.iszilch()</a></li><li><a href="#ffshrw" class="table-of-contents__link toc-highlight">fF.shrw()</a></li><li><a href="#ffshlw" class="table-of-contents__link toc-highlight">fF.shlw()</a></li><li><a href="#ffparity" class="table-of-contents__link toc-highlight">fF.parity()</a></li><li><a href="#ffradd" class="table-of-contents__link toc-highlight">fF.radd()</a></li><li><a href="#ffrinc" class="table-of-contents__link toc-highlight">fF.rinc()</a></li><li><a href="#ffrsub" class="table-of-contents__link toc-highlight">fF.rsub()</a></li><li><a href="#ffrdec" class="table-of-contents__link toc-highlight">fF.rdec()</a></li><li><a href="#ffadd" class="table-of-contents__link toc-highlight">fF.add()</a></li><li><a href="#ffsub" class="table-of-contents__link toc-highlight">fF.sub()</a></li><li><a href="#ffrevsub" class="table-of-contents__link toc-highlight">fF.revsub()</a></li><li><a href="#ffinc" class="table-of-contents__link toc-highlight">fF.inc()</a></li><li><a href="#ffrnorm" class="table-of-contents__link toc-highlight">fF.rnorm()</a></li><li><a href="#ffshl" class="table-of-contents__link toc-highlight">fF.shl()</a></li><li><a href="#ffshr" class="table-of-contents__link toc-highlight">fF.shr()</a></li><li><a href="#fftostring" class="table-of-contents__link toc-highlight">fF.toString()</a></li><li><a href="#fftobytes" class="table-of-contents__link toc-highlight">fF.toBytes()</a></li><li><a href="#ffkarmul" class="table-of-contents__link toc-highlight">fF.karmul()</a></li><li><a href="#fflmul" class="table-of-contents__link toc-highlight">fF.lmul()</a></li><li><a href="#ffmod" class="table-of-contents__link toc-highlight">fF.mod()</a></li><li><a href="#ffreducen-nd-" class="table-of-contents__link toc-highlight">fF.reduce(N, ND) ⇒</a></li><li><a href="#ffdmodb-" class="table-of-contents__link toc-highlight">fF.dmod(b) ⇒</a></li><li><a href="#ffinvmodp" class="table-of-contents__link toc-highlight">fF.invmodp()</a></li><li><a href="#ffnres" class="table-of-contents__link toc-highlight">fF.nres()</a></li><li><a href="#ffinvmod2m" class="table-of-contents__link toc-highlight">fF.invmod2m()</a></li><li><a href="#ffrandomnum" class="table-of-contents__link toc-highlight">fF.randomnum()</a></li><li><a href="#ffmodmul" class="table-of-contents__link toc-highlight">fF.modmul()</a></li><li><a href="#ffmodsqr" class="table-of-contents__link toc-highlight">fF.modsqr()</a></li><li><a href="#ffskpowe-p" class="table-of-contents__link toc-highlight">fF.skpow(e, p)</a></li><li><a href="#ffskspowe-p" class="table-of-contents__link toc-highlight">fF.skspow(e, p)</a></li><li><a href="#ffpowere-p" class="table-of-contents__link toc-highlight">fF.power(e, p)</a></li><li><a href="#ffpowe-p" class="table-of-contents__link toc-highlight">fF.pow(e, p)</a></li><li><a href="#ffpow2e-y-f-p" class="table-of-contents__link toc-highlight">fF.pow2(e, y, f, p)</a></li><li><a href="#ffcfactors-" class="table-of-contents__link toc-highlight">fF.cfactor(s) ⇒</a></li><li><a href="#ffcompa-b-" class="table-of-contents__link toc-highlight">FF.comp(a, b) ⇒</a></li><li><a href="#ffcswap" class="table-of-contents__link toc-highlight">FF.cswap()</a></li><li><a href="#ffmul" class="table-of-contents__link toc-highlight">FF.mul()</a></li><li><a href="#ffsqr" class="table-of-contents__link toc-highlight">FF.sqr()</a></li><li><a href="#ffprimep-rmg" class="table-of-contents__link toc-highlight">FF.prime(p, rmg)</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/cryptojs/fp/index.html b/docs/cryptojs/fp/index.html
index e057e86..ba15230 100644
--- a/docs/cryptojs/fp/index.html
+++ b/docs/cryptojs/fp/index.html
@@ -1,323 +1,51 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>FP · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;a name=&quot;FP&quot;&gt;&lt;/a&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="FP · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;a name=&quot;FP&quot;&gt;&lt;/a&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>AMCL JavaScript API 1.0.0</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-cryptojs/fp">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">FP | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/cryptojs/fp"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="FP | Apache Milagro"><meta data-rh="true" name="description" content="FP"><meta data-rh="true" property="og:description" content="FP"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/cryptojs/fp"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/fp" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/fp" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">FP</h1></header><article><div><span><p><a name="FP"></a></p>
-<h2><a class="anchor" aria-hidden="true" id="fp"></a><a href="#fp" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>FP</h2>
-<p><strong>Kind</strong>: global class<br>
-<strong>this</strong>: <code>{FP}</code></p>
-<ul>
-<li><a href="#FP">FP</a>
-<ul>
-<li><a href="#new_FP_new">new FP(x)</a></li>
-<li><em>instance</em>
-<ul>
-<li><a href="#FP+zero">.zero()</a></li>
-<li><a href="#FP+rcopy">.rcopy(x)</a></li>
-<li><a href="#FP+bcopy">.bcopy(x)</a></li>
-<li><a href="#FP+copy">.copy(x)</a></li>
-<li><a href="#FP+cswap">.cswap()</a></li>
-<li><a href="#FP+cmove">.cmove(g, d)</a></li>
-<li><a href="#FP+nres">.nres()</a></li>
-<li><a href="#FP+redc">.redc()</a></li>
-<li><a href="#FP+toString">.toString()</a></li>
-<li><a href="#FP+iszilch">.iszilch()</a></li>
-<li><a href="#FP+reduce">.reduce()</a></li>
-<li><a href="#FP+one">.one()</a></li>
-<li><a href="#FP+norm">.norm()</a></li>
-<li><a href="#FP+mul">.mul(b)</a></li>
-<li><a href="#FP+imul">.imul(s)</a></li>
-<li><a href="#FP+sqr">.sqr()</a></li>
-<li><a href="#FP+neg">.neg(x)</a></li>
-<li><a href="#FP+sub">.sub(x)</a></li>
-<li><a href="#FP+div2">.div2()</a></li>
-<li><a href="#FP+fpow">.fpow()</a></li>
-<li><a href="#FP+inverse">.inverse()</a></li>
-<li><a href="#FP+equals">.equals(x)</a></li>
-<li><a href="#FP+pow">.pow(e)</a></li>
-<li><a href="#FP+jacobi">.jacobi()</a></li>
-<li><a href="#FP+sqrt">.sqrt()</a></li>
-</ul></li>
-<li><em>static</em>
-<ul>
-<li><a href="#FP.mod">.mod()</a></li>
-</ul></li>
-</ul></li>
-</ul>
-<p><a name="new_FP_new"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="new-fpx"></a><a href="#new-fpx" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>new FP(x)</h3>
-<p>Creates an instance of FP.</p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>x</td><td>FP / BIG instance</td></tr>
-</tbody>
-</table>
-<p><a name="FP+zero"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fpzero"></a><a href="#fpzero" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP.zero()</h3>
-<p>Set FP to zero</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a>  <br>
-<strong>this</strong>: <code>{FP}</code>  <br>
-<a name="FP+rcopy"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fprcopyx"></a><a href="#fprcopyx" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP.rcopy(x)</h3>
-<p>copy from a ctx.BIG in ROM</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a>  <br>
-<strong>this</strong>: <code>{FP}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>x</td><td>FP instance to be copied</td></tr>
-</tbody>
-</table>
-<p><a name="FP+bcopy"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fpbcopyx"></a><a href="#fpbcopyx" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP.bcopy(x)</h3>
-<p>copy from another ctx.BIG</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a>  <br>
-<strong>this</strong>: <code>{FP}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>x</td><td>FP instance to be copied</td></tr>
-</tbody>
-</table>
-<p><a name="FP+copy"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fpcopyx"></a><a href="#fpcopyx" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP.copy(x)</h3>
-<p>Copy FP to another FP</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a>  <br>
-<strong>this</strong>: <code>{FP}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>x</td><td>FP instance to be copied</td></tr>
-</tbody>
-</table>
-<p><a name="FP+cswap"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fpcswap"></a><a href="#fpcswap" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP.cswap()</h3>
-<p>Conditional constant time swap of two FP numbers</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a>  <br>
-<strong>this</strong>: <code>{BIG}</code>  <br>
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/amcl-overview">AMCL Library</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-overview">AMCL Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API 1.0.0</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/aes">AES</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/big">BIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls">BLS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls192">BLS192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls256">BLS256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/dbig">DBIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp">ECP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ff">FF</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/cryptojs/fp">FP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp2">FP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp4">FP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp8">FP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp12">FP12</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp16">FP16</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp24">FP24</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp48">FP48</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/gcm">GCM</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash256">HASH256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash384">HASH384</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash512">HASH512</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin">MPIN</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair">PAIR</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rand">RAND</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rsa">RSA</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/sha3">SHA3</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/unit64">UInt64</a></li></ul></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL Library</span><meta itemprop="position" content="1"></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL JavaScript API 1.0.0</span><meta itemprop="position" content="2"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">FP</span><meta itemprop="position" content="3"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>FP</h1></header><a name="FP"></a><h2 class="anchor anchorWithStickyNavbar_LWe7" id="fp">FP<a class="hash-link" href="#fp" title="Direct link to heading">​</a></h2><p><strong>Kind</strong>: global class<br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP{&quot;}&quot;}</code>  </p><ul><li><a href="#FP">FP</a><ul><li><a href="#new_FP_new">new FP(x)</a></li><li><em>instance</em><ul><li><a href="#FP+zero">.zero()</a></li><li><a href="#FP+rcopy">.rcopy(x)</a></li><li><a href="#FP+bcopy">.bcopy(x)</a></li><li><a href="#FP+copy">.copy(x)</a></li><li><a href="#FP+cswap">.cswap()</a></li><li><a href="#FP+cmove">.cmove(g, d)</a></li><li><a href="#FP+nres">.nres()</a></li><li><a href="#FP+redc">.redc()</a></li><li><a href="#FP+toString">.toString()</a></li><li><a href="#FP+iszilch">.iszilch()</a></li><li><a href="#FP+reduce">.reduce()</a></li><li><a href="#FP+one">.one()</a></li><li><a href="#FP+norm">.norm()</a></li><li><a href="#FP+mul">.mul(b)</a></li><li><a href="#FP+imul">.imul(s)</a></li><li><a href="#FP+sqr">.sqr()</a></li><li><a href="#FP+neg">.neg(x)</a></li><li><a href="#FP+sub">.sub(x)</a></li><li><a href="#FP+div2">.div2()</a></li><li><a href="#FP+fpow">.fpow()</a></li><li><a href="#FP+inverse">.inverse()</a></li><li><a href="#FP+equals">.equals(x)</a></li><li><a href="#FP+pow">.pow(e)</a></li><li><a href="#FP+jacobi">.jacobi()</a></li><li><a href="#FP+sqrt">.sqrt()</a></li></ul></li><li><em>static</em><ul><li><a href="#FP.mod">.mod()</a></li></ul></li></ul></li></ul><a name="new_FP_new"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="new-fpx">new FP(x)<a class="hash-link" href="#new-fpx" title="Direct link to heading">​</a></h3><p>Creates an instance of FP.</p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>x</td><td>FP / BIG instance</td></tr></tbody></table><a name="FP+zero"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fpzero">fP.zero()<a class="hash-link" href="#fpzero" title="Direct link to heading">​</a></h3><p>Set FP to zero</p><p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP{&quot;}&quot;}</code>  </p><a name="FP+rcopy"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fprcopyx">fP.rcopy(x)<a class="hash-link" href="#fprcopyx" title="Direct link to heading">​</a></h3><p>copy from a ctx.BIG in ROM</p><p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>x</td><td>FP instance to be copied</td></tr></tbody></table><a name="FP+bcopy"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fpbcopyx">fP.bcopy(x)<a class="hash-link" href="#fpbcopyx" title="Direct link to heading">​</a></h3><p>copy from another ctx.BIG</p><p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>x</td><td>FP instance to be copied</td></tr></tbody></table><a name="FP+copy"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fpcopyx">fP.copy(x)<a class="hash-link" href="#fpcopyx" title="Direct link to heading">​</a></h3><p>Copy FP to another FP</p><p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>x</td><td>FP instance to be copied</td></tr></tbody></table><a name="FP+cswap"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fpcswap">fP.cswap()<a class="hash-link" href="#fpcswap" title="Direct link to heading">​</a></h3><p>Conditional constant time swap of two FP numbers</p><p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}BIG{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: b FP number<br>
-<strong>Parameter</strong>: d Integer<br>
-<a name="FP+cmove"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fpcmoveg-d"></a><a href="#fpcmoveg-d" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP.cmove(g, d)</h3>
-<p>Conditional copy of FP number</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a>  <br>
-<strong>this</strong>: <code>{FP}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>g</td><td>FP instance</td></tr>
-<tr><td>d</td><td>copy depends on this value</td></tr>
-</tbody>
-</table>
-<p><a name="FP+nres"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fpnres"></a><a href="#fpnres" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP.nres()</h3>
-<p>Converts from BIG integer to residue form mod Modulus</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a>  <br>
-<strong>this</strong>: <code>{FP}</code>  <br>
-<a name="FP+redc"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fpredc"></a><a href="#fpredc" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP.redc()</h3>
-<p>Converts from residue form back to BIG integer form</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a>  <br>
-<strong>this</strong>: <code>{FP}</code>  <br>
-<a name="FP+toString"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fptostring"></a><a href="#fptostring" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP.toString()</h3>
-<p>convert to hex string</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a>  <br>
-<strong>this</strong>: <code>{FP}</code>  <br>
-<a name="FP+iszilch"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fpiszilch"></a><a href="#fpiszilch" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP.iszilch()</h3>
-<p>Tests for FP equal to zero</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a>  <br>
-<strong>this</strong>: <code>{FP}</code>  <br>
-<a name="FP+reduce"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fpreduce"></a><a href="#fpreduce" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP.reduce()</h3>
-<p>Reduces all components of possibly unreduced FP mod Modulus</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a>  <br>
-<strong>this</strong>: <code>{FP}</code>  <br>
-<a name="FP+one"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fpone"></a><a href="#fpone" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP.one()</h3>
-<p>Set FP to unity</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a>  <br>
-<strong>this</strong>: <code>{FP}</code>  <br>
-<a name="FP+norm"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fpnorm"></a><a href="#fpnorm" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP.norm()</h3>
-<p>Normalises the components of an FP</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a>  <br>
-<strong>this</strong>: <code>{FP}</code>  <br>
-<a name="FP+mul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fpmulb"></a><a href="#fpmulb" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP.mul(b)</h3>
-<p>Fast Modular multiplication of two FPs, mod Modulus</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a>  <br>
-<strong>this</strong>: <code>{FP}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>b</td><td>FP number, the multiplier</td></tr>
-</tbody>
-</table>
-<p><a name="FP+imul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fpimuls"></a><a href="#fpimuls" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP.imul(s)</h3>
-<p>Multiplication of an FP by a small integer</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a>  <br>
-<strong>this</strong>: <code>{FP}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>s</td><td>integer</td></tr>
-</tbody>
-</table>
-<p><a name="FP+sqr"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fpsqr"></a><a href="#fpsqr" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP.sqr()</h3>
-<p>Fast Squaring of an FP</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a>  <br>
-<strong>this</strong>: <code>{FP}</code>  <br>
-<a name="FP+neg"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fpnegx"></a><a href="#fpnegx" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP.neg(x)</h3>
-<p>negate this</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a>  <br>
-<strong>this</strong>: <code>{FP}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>x</td><td>FP instance to be set to one</td></tr>
-</tbody>
-</table>
-<p><a name="FP+sub"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fpsubx"></a><a href="#fpsubx" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP.sub(x)</h3>
-<p>subtraction of two FPs</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a>  <br>
-<strong>this</strong>: <code>{FP}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>x</td><td>FP instance</td></tr>
-</tbody>
-</table>
-<p><a name="FP+div2"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fpdiv2"></a><a href="#fpdiv2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP.div2()</h3>
-<p>Divide an FP by 2</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a>  <br>
-<strong>this</strong>: <code>{FP}</code>  <br>
-<a name="FP+fpow"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fpfpow"></a><a href="#fpfpow" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP.fpow()</h3>
-<p>return this^(p-3)/4 or this^(p-5)/8</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a>  <br>
-<strong>this</strong>: <code>{FP}</code>  <br>
-<a name="FP+inverse"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fpinverse"></a><a href="#fpinverse" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP.inverse()</h3>
-<p>Inverting an FP</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a>  <br>
-<strong>this</strong>: <code>{FP}</code>  <br>
-<a name="FP+equals"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fpequalsx"></a><a href="#fpequalsx" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP.equals(x)</h3>
-<p>Tests for equality of two FP instances</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a>  <br>
-<strong>this</strong>: <code>{FP}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>x</td><td>FP instance to compare</td></tr>
-</tbody>
-</table>
-<p><a name="FP+pow"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fppowe"></a><a href="#fppowe" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP.pow(e)</h3>
-<p>Raises an FP to the power of a BIG</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a>  <br>
-<strong>this</strong>: <code>{FP}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>e</td><td>BIG instance exponent</td></tr>
-</tbody>
-</table>
-<p><a name="FP+jacobi"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fpjacobi"></a><a href="#fpjacobi" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP.jacobi()</h3>
-<p>return jacobi symbol (this/Modulus)</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a>  <br>
-<strong>this</strong>: <code>{FP}</code>  <br>
-<a name="FP+sqrt"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fpsqrt"></a><a href="#fpsqrt" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP.sqrt()</h3>
-<p>Fast Modular square root of a an FP, mod Modulus</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a>  <br>
-<strong>this</strong>: <code>{FP}</code>  <br>
-<a name="FP.mod"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fpmod"></a><a href="#fpmod" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>FP.mod()</h3>
-<p>reduce a ctx.DBIG to a ctx.BIG using a &quot;special&quot; modulus</p>
-<p><strong>Kind</strong>: static method of <a href="#FP"><code>FP</code></a>  <br>
-<strong>this</strong>: <code>{FP}</code></p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/cryptojs/ff"><span class="arrow-prev">← </span><span>FF</span></a><a class="docs-next button" href="/docs/cryptojs/fp2"><span>FP2</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#fp">FP</a><ul class="toc-headings"><li><a href="#new-fpx">new FP(x)</a></li><li><a href="#fpzero">fP.zero()</a></li><li><a href="#fprcopyx">fP.rcopy(x)</a></li><li><a href="#fpbcopyx">fP.bcopy(x)</a></li><li><a href="#fpcopyx">fP.copy(x)</a></li><li><a href="#fpcswap">fP.cswap()</a></li><li><a href="#fpcmoveg-d">fP.cmove(g, d)</a></li><li><a href="#fpnres">fP.nres()</a></li><li><a href="#fpredc">fP.redc()</a></li><li><a href="#fptostring">fP.toString()</a></li><li><a href="#fpiszilch">fP.iszilch()</a></li><li><a href="#fpreduce">fP.reduce()</a></li><li><a href="#fpone">fP.one()</a></li><li><a href="#fpnorm">fP.norm()</a></li><li><a href="#fpmulb">fP.mul(b)</a></li><li><a href="#fpimuls">fP.imul(s)</a></li><li><a href="#fpsqr">fP.sqr()</a></li><li><a href="#fpnegx">fP.neg(x)</a></li><li><a href="#fpsubx">fP.sub(x)</a></li><li><a href="#fpdiv2">fP.div2()</a></li><li><a href="#fpfpow">fP.fpow()</a></li><li><a href="#fpinverse">fP.inverse()</a></li><li><a href="#fpequalsx">fP.equals(x)</a></li><li><a href="#fppowe">fP.pow(e)</a></li><li><a href="#fpjacobi">fP.jacobi()</a></li><li><a href="#fpsqrt">fP.sqrt()</a></li><li><a href="#fpmod">FP.mod()</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<strong>Parameter</strong>: d Integer  </p><a name="FP+cmove"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fpcmoveg-d">fP.cmove(g, d)<a class="hash-link" href="#fpcmoveg-d" title="Direct link to heading">​</a></h3><p>Conditional copy of FP number</p><p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>g</td><td>FP instance</td></tr><tr><td>d</td><td>copy depends on this value</td></tr></tbody></table><a name="FP+nres"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fpnres">fP.nres()<a class="hash-link" href="#fpnres" title="Direct link to heading">​</a></h3><p>Converts from BIG integer to residue form mod Modulus</p><p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP{&quot;}&quot;}</code>  </p><a name="FP+redc"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fpredc">fP.redc()<a class="hash-link" href="#fpredc" title="Direct link to heading">​</a></h3><p>Converts from residue form back to BIG integer form</p><p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP{&quot;}&quot;}</code>  </p><a name="FP+toString"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fptostring">fP.toString()<a class="hash-link" href="#fptostring" title="Direct link to heading">​</a></h3><p>convert to hex string</p><p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP{&quot;}&quot;}</code>  </p><a name="FP+iszilch"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fpiszilch">fP.iszilch()<a class="hash-link" href="#fpiszilch" title="Direct link to heading">​</a></h3><p>Tests for FP equal to zero</p><p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP{&quot;}&quot;}</code>  </p><a name="FP+reduce"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fpreduce">fP.reduce()<a class="hash-link" href="#fpreduce" title="Direct link to heading">​</a></h3><p>Reduces all components of possibly unreduced FP mod Modulus</p><p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP{&quot;}&quot;}</code>  </p><a name="FP+one"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fpone">fP.one()<a class="hash-link" href="#fpone" title="Direct link to heading">​</a></h3><p>Set FP to unity</p><p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP{&quot;}&quot;}</code>  </p><a name="FP+norm"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fpnorm">fP.norm()<a class="hash-link" href="#fpnorm" title="Direct link to heading">​</a></h3><p>Normalises the components of an FP</p><p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP{&quot;}&quot;}</code>  </p><a name="FP+mul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fpmulb">fP.mul(b)<a class="hash-link" href="#fpmulb" title="Direct link to heading">​</a></h3><p>Fast Modular multiplication of two FPs, mod Modulus</p><p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>b</td><td>FP number, the multiplier</td></tr></tbody></table><a name="FP+imul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fpimuls">fP.imul(s)<a class="hash-link" href="#fpimuls" title="Direct link to heading">​</a></h3><p>Multiplication of an FP by a small integer</p><p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>s</td><td>integer</td></tr></tbody></table><a name="FP+sqr"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fpsqr">fP.sqr()<a class="hash-link" href="#fpsqr" title="Direct link to heading">​</a></h3><p>Fast Squaring of an FP</p><p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP{&quot;}&quot;}</code>  </p><a name="FP+neg"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fpnegx">fP.neg(x)<a class="hash-link" href="#fpnegx" title="Direct link to heading">​</a></h3><p>negate this</p><p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>x</td><td>FP instance to be set to one</td></tr></tbody></table><a name="FP+sub"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fpsubx">fP.sub(x)<a class="hash-link" href="#fpsubx" title="Direct link to heading">​</a></h3><p>subtraction of two FPs</p><p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>x</td><td>FP instance</td></tr></tbody></table><a name="FP+div2"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fpdiv2">fP.div2()<a class="hash-link" href="#fpdiv2" title="Direct link to heading">​</a></h3><p>Divide an FP by 2</p><p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP{&quot;}&quot;}</code>  </p><a name="FP+fpow"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fpfpow">fP.fpow()<a class="hash-link" href="#fpfpow" title="Direct link to heading">​</a></h3><p>return this^(p-3)/4 or this^(p-5)/8</p><p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP{&quot;}&quot;}</code>  </p><a name="FP+inverse"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fpinverse">fP.inverse()<a class="hash-link" href="#fpinverse" title="Direct link to heading">​</a></h3><p>Inverting an FP</p><p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP{&quot;}&quot;}</code>  </p><a name="FP+equals"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fpequalsx">fP.equals(x)<a class="hash-link" href="#fpequalsx" title="Direct link to heading">​</a></h3><p>Tests for equality of two FP instances</p><p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>x</td><td>FP instance to compare</td></tr></tbody></table><a name="FP+pow"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fppowe">fP.pow(e)<a class="hash-link" href="#fppowe" title="Direct link to heading">​</a></h3><p>Raises an FP to the power of a BIG</p><p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>e</td><td>BIG instance exponent</td></tr></tbody></table><a name="FP+jacobi"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fpjacobi">fP.jacobi()<a class="hash-link" href="#fpjacobi" title="Direct link to heading">​</a></h3><p>return jacobi symbol (this/Modulus)</p><p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP{&quot;}&quot;}</code>  </p><a name="FP+sqrt"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fpsqrt">fP.sqrt()<a class="hash-link" href="#fpsqrt" title="Direct link to heading">​</a></h3><p>Fast Modular square root of a an FP, mod Modulus</p><p><strong>Kind</strong>: instance method of <a href="#FP"><code>FP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP{&quot;}&quot;}</code>  </p><a name="FP.mod"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fpmod">FP.mod()<a class="hash-link" href="#fpmod" title="Direct link to heading">​</a></h3><p>reduce a ctx.DBIG to a ctx.BIG using a &quot;special&quot; modulus</p><p><strong>Kind</strong>: static method of <a href="#FP"><code>FP</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP{&quot;}&quot;}</code></p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/cryptojs/ff"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">FF</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/cryptojs/fp2"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">FP2</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#fp" class="table-of-contents__link toc-highlight">FP</a><ul><li><a href="#new-fpx" class="table-of-contents__link toc-highlight">new FP(x)</a></li><li><a href="#fpzero" class="table-of-contents__link toc-highlight">fP.zero()</a></li><li><a href="#fprcopyx" class="table-of-contents__link toc-highlight">fP.rcopy(x)</a></li><li><a href="#fpbcopyx" class="table-of-contents__link toc-highlight">fP.bcopy(x)</a></li><li><a href="#fpcopyx" class="table-of-contents__link toc-highlight">fP.copy(x)</a></li><li><a href="#fpcswap" class="table-of-contents__link toc-highlight">fP.cswap()</a></li><li><a href="#fpcmoveg-d" class="table-of-contents__link toc-highlight">fP.cmove(g, d)</a></li><li><a href="#fpnres" class="table-of-contents__link toc-highlight">fP.nres()</a></li><li><a href="#fpredc" class="table-of-contents__link toc-highlight">fP.redc()</a></li><li><a href="#fptostring" class="table-of-contents__link toc-highlight">fP.toString()</a></li><li><a href="#fpiszilch" class="table-of-contents__link toc-highlight">fP.iszilch()</a></li><li><a href="#fpreduce" class="table-of-contents__link toc-highlight">fP.reduce()</a></li><li><a href="#fpone" class="table-of-contents__link toc-highlight">fP.one()</a></li><li><a href="#fpnorm" class="table-of-contents__link toc-highlight">fP.norm()</a></li><li><a href="#fpmulb" class="table-of-contents__link toc-highlight">fP.mul(b)</a></li><li><a href="#fpimuls" class="table-of-contents__link toc-highlight">fP.imul(s)</a></li><li><a href="#fpsqr" class="table-of-contents__link toc-highlight">fP.sqr()</a></li><li><a href="#fpnegx" class="table-of-contents__link toc-highlight">fP.neg(x)</a></li><li><a href="#fpsubx" class="table-of-contents__link toc-highlight">fP.sub(x)</a></li><li><a href="#fpdiv2" class="table-of-contents__link toc-highlight">fP.div2()</a></li><li><a href="#fpfpow" class="table-of-contents__link toc-highlight">fP.fpow()</a></li><li><a href="#fpinverse" class="table-of-contents__link toc-highlight">fP.inverse()</a></li><li><a href="#fpequalsx" class="table-of-contents__link toc-highlight">fP.equals(x)</a></li><li><a href="#fppowe" class="table-of-contents__link toc-highlight">fP.pow(e)</a></li><li><a href="#fpjacobi" class="table-of-contents__link toc-highlight">fP.jacobi()</a></li><li><a href="#fpsqrt" class="table-of-contents__link toc-highlight">fP.sqrt()</a></li><li><a href="#fpmod" class="table-of-contents__link toc-highlight">FP.mod()</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/cryptojs/fp12/index.html b/docs/cryptojs/fp12/index.html
index 05ac464..039cc2b 100644
--- a/docs/cryptojs/fp12/index.html
+++ b/docs/cryptojs/fp12/index.html
@@ -1,393 +1,55 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>FP12 · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;a name=&quot;FP12&quot;&gt;&lt;/a&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="FP12 · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;a name=&quot;FP12&quot;&gt;&lt;/a&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>AMCL JavaScript API 1.0.0</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-cryptojs/fp12">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">FP12 | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/cryptojs/fp12"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="FP12 | Apache Milagro"><meta data-rh="true" name="description" content="FP12"><meta data-rh="true" property="og:description" content="FP12"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/cryptojs/fp12"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/fp12" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/fp12" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">FP12</h1></header><article><div><span><p><a name="FP12"></a></p>
-<h2><a class="anchor" aria-hidden="true" id="fp12"></a><a href="#fp12" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>FP12</h2>
-<p><strong>Kind</strong>: global class<br>
-<strong>this</strong>: <code>{FP12}</code></p>
-<ul>
-<li><a href="#FP12">FP12</a>
-<ul>
-<li><a href="#new_FP12_new">new FP12()</a></li>
-<li><em>instance</em>
-<ul>
-<li><a href="#FP12+reduce">.reduce()</a></li>
-<li><a href="#FP12+norm">.norm()</a></li>
-<li><a href="#FP12+iszilch">.iszilch()</a></li>
-<li><a href="#FP12+isunity">.isunity()</a></li>
-<li><a href="#FP12+cmove">.cmove(g, d)</a></li>
-<li><a href="#FP12+select">.select()</a></li>
-<li><a href="#FP12+geta">.geta()</a></li>
-<li><a href="#FP12+getb">.getb()</a></li>
-<li><a href="#FP12+getc">.getc()</a></li>
-<li><a href="#FP12+equals">.equals(x)</a></li>
-<li><a href="#FP12+copy">.copy(x)</a></li>
-<li><a href="#FP12+one">.one(x)</a></li>
-<li><a href="#FP12+zero">.zero()</a></li>
-<li><a href="#FP12+conj">.conj()</a></li>
-<li><a href="#FP12+set">.set(d, e, f)</a></li>
-<li><a href="#FP12+seta">.seta(d)</a></li>
-<li><a href="#FP12+usqr">.usqr()</a></li>
-<li><a href="#FP12+sqr">.sqr()</a></li>
-<li><a href="#FP12+mul">.mul(y)</a></li>
-<li><a href="#FP12+smul">.smul(y)</a></li>
-<li><a href="#FP12+ssmul">.ssmul(y)</a></li>
-<li><a href="#FP12+inverse">.inverse()</a></li>
-<li><a href="#FP12+frob">.frob(f)</a></li>
-<li><a href="#FP12+trace">.trace()</a></li>
-<li><a href="#FP12+toString">.toString()</a></li>
-<li><a href="#FP12+toBytes">.toBytes(w)</a></li>
-<li><a href="#FP12+pow">.pow(e)</a></li>
-<li><a href="#FP12+pinpow">.pinpow(e, bts)</a></li>
-<li><a href="#FP12+compow">.compow(e, r)</a></li>
-</ul></li>
-<li><em>static</em>
-<ul>
-<li><a href="#FP12.fromBytes">.fromBytes(w)</a></li>
-<li><a href="#FP12.teq">.teq()</a></li>
-<li><a href="#FP12.pow4">.pow4()</a></li>
-</ul></li>
-</ul></li>
-</ul>
-<p><a name="new_FP12_new"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="new-fp12"></a><a href="#new-fp12" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>new FP12()</h3>
-<p>Creates an instance of FP12.</p>
-<p><a name="FP12+reduce"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp12reduce"></a><a href="#fp12reduce" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP12.reduce()</h3>
-<p>Reduces all components of possibly unreduced FP12 mod Modulus</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a>  <br>
-<strong>this</strong>: <code>{FP12}</code>  <br>
-<a name="FP12+norm"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp12norm"></a><a href="#fp12norm" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP12.norm()</h3>
-<p>Normalises the components of an FP12</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a>  <br>
-<strong>this</strong>: <code>{FP12}</code>  <br>
-<a name="FP12+iszilch"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp12iszilch"></a><a href="#fp12iszilch" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP12.iszilch()</h3>
-<p>Tests for FP12 equal to zero</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a>  <br>
-<strong>this</strong>: <code>{FP12}</code>  <br>
-<a name="FP12+isunity"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp12isunity"></a><a href="#fp12isunity" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP12.isunity()</h3>
-<p>Tests for FP12 equal to unity</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a>  <br>
-<strong>this</strong>: <code>{FP12}</code>  <br>
-<a name="FP12+cmove"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp12cmoveg-d"></a><a href="#fp12cmoveg-d" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP12.cmove(g, d)</h3>
-<p>Conditional copy of FP12 number</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a>  <br>
-<strong>this</strong>: <code>{FP12}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>g</td><td>FP12 instance</td></tr>
-<tr><td>d</td><td>copy depends on this value</td></tr>
-</tbody>
-</table>
-<p><a name="FP12+select"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp12select"></a><a href="#fp12select" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP12.select()</h3>
-<p>Constant time select from pre-computed table</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a>  <br>
-<strong>this</strong>: <code>{FP12}</code>  <br>
-<a name="FP12+geta"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp12geta"></a><a href="#fp12geta" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP12.geta()</h3>
-<p>extract a from this</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a>  <br>
-<strong>this</strong>: <code>{FP12}</code>  <br>
-<a name="FP12+getb"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp12getb"></a><a href="#fp12getb" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP12.getb()</h3>
-<p>extract b from this</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a>  <br>
-<strong>this</strong>: <code>{FP12}</code>  <br>
-<a name="FP12+getc"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp12getc"></a><a href="#fp12getc" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP12.getc()</h3>
-<p>extract c from this</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a>  <br>
-<strong>this</strong>: <code>{FP12}</code>  <br>
-<a name="FP12+equals"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp12equalsx"></a><a href="#fp12equalsx" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP12.equals(x)</h3>
-<p>Tests for equality of two FP12s</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a>  <br>
-<strong>this</strong>: <code>{FP12}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>x</td><td>FP12 instance to compare</td></tr>
-</tbody>
-</table>
-<p><a name="FP12+copy"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp12copyx"></a><a href="#fp12copyx" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP12.copy(x)</h3>
-<p>Copy FP12 to another FP12</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a>  <br>
-<strong>this</strong>: <code>{FP12}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>x</td><td>FP12 instance to be copied</td></tr>
-</tbody>
-</table>
-<p><a name="FP12+one"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp12onex"></a><a href="#fp12onex" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP12.one(x)</h3>
-<p>Set FP12 to unity</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a>  <br>
-<strong>this</strong>: <code>{FP12}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>x</td><td>FP12 instance to be set to one</td></tr>
-</tbody>
-</table>
-<p><a name="FP12+zero"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp12zero"></a><a href="#fp12zero" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP12.zero()</h3>
-<p>Set FP12 to zero</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a>  <br>
-<strong>this</strong>: <code>{FP12}</code>  <br>
-<a name="FP12+conj"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp12conj"></a><a href="#fp12conj" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP12.conj()</h3>
-<p>Conjugation of FP12</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a>  <br>
-<strong>this</strong>: <code>{FP12}</code>  <br>
-<a name="FP12+set"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp12setd-e-f"></a><a href="#fp12setd-e-f" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP12.set(d, e, f)</h3>
-<p>Set FP12 from three FP4 values</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a>  <br>
-<strong>this</strong>: <code>{FP12}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>d</td><td>FP4 instance</td></tr>
-<tr><td>e</td><td>FP4 instance</td></tr>
-<tr><td>f</td><td>FP4 instance</td></tr>
-</tbody>
-</table>
-<p><a name="FP12+seta"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp12setad"></a><a href="#fp12setad" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP12.seta(d)</h3>
-<p>Set FP12 from one FP4 value</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a>  <br>
-<strong>this</strong>: <code>{FP12}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>d</td><td>FP4 instance</td></tr>
-</tbody>
-</table>
-<p><a name="FP12+usqr"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp12usqr"></a><a href="#fp12usqr" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP12.usqr()</h3>
-<p>Fast Squaring of an FP12 in &quot;unitary&quot; form</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a>  <br>
-<strong>this</strong>: <code>{FP12}</code>  <br>
-<a name="FP12+sqr"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp12sqr"></a><a href="#fp12sqr" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP12.sqr()</h3>
-<p>Fast Squaring of an FP12</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a>  <br>
-<strong>this</strong>: <code>{FP12}</code>  <br>
-<a name="FP12+mul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp12muly"></a><a href="#fp12muly" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP12.mul(y)</h3>
-<p>Full unconditional Multiplication of two FP12s</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a>  <br>
-<strong>this</strong>: <code>{FP12}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>y</td><td>FP12 instance, the multiplier</td></tr>
-</tbody>
-</table>
-<p><a name="FP12+smul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp12smuly"></a><a href="#fp12smuly" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP12.smul(y)</h3>
-<p>Fast multiplication of two sparse FP12s that arises from ATE pairing line functions</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a>  <br>
-<strong>this</strong>: <code>{FP12}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>y</td><td>FP12 instance, the multiplier</td></tr>
-</tbody>
-</table>
-<p><a name="FP12+ssmul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp12ssmuly"></a><a href="#fp12ssmuly" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP12.ssmul(y)</h3>
-<p>Fast multiplication of what may be sparse multiplicands</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a>  <br>
-<strong>this</strong>: <code>{FP12}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>y</td><td>FP12 instance, the multiplier</td></tr>
-</tbody>
-</table>
-<p><a name="FP12+inverse"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp12inverse"></a><a href="#fp12inverse" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP12.inverse()</h3>
-<p>Inverting an FP12</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a>  <br>
-<strong>this</strong>: <code>{FP12}</code>  <br>
-<a name="FP12+frob"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp12frobf"></a><a href="#fp12frobf" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP12.frob(f)</h3>
-<p>Raises an FP12 to the power of the internal modulus p, using the Frobenius</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a>  <br>
-<strong>this</strong>: <code>{FP12}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>f</td><td>Modulus</td></tr>
-</tbody>
-</table>
-<p><a name="FP12+trace"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp12trace"></a><a href="#fp12trace" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP12.trace()</h3>
-<p>Calculate the trace of an FP12</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a>  <br>
-<strong>this</strong>: <code>{FP12}</code>  <br>
-<a name="FP12+toString"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp12tostring"></a><a href="#fp12tostring" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP12.toString()</h3>
-<p>convert this to hex string</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a>  <br>
-<strong>this</strong>: <code>{FP12}</code>  <br>
-<a name="FP12+toBytes"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp12tobytesw"></a><a href="#fp12tobytesw" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP12.toBytes(w)</h3>
-<p>convert this to byte array</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a>  <br>
-<strong>this</strong>: <code>{FP12}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>w</td><td>Byte array</td></tr>
-</tbody>
-</table>
-<p><a name="FP12+pow"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp12powe"></a><a href="#fp12powe" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP12.pow(e)</h3>
-<p>Raises an FP12 to the power of a BIG</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a>  <br>
-<strong>this</strong>: <code>{FP12}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>e</td><td>BIG instance exponent</td></tr>
-</tbody>
-</table>
-<p><a name="FP12+pinpow"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp12pinpowe-bts"></a><a href="#fp12pinpowe-bts" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP12.pinpow(e, bts)</h3>
-<p>Raises an FP12 instance x to a small integer power, side-channel resistant</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a>  <br>
-<strong>this</strong>: <code>{FP12}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>e</td><td>small integer exponent</td></tr>
-<tr><td>bts</td><td>maximum number of bits in exponent</td></tr>
-</tbody>
-</table>
-<p><a name="FP12+compow"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp12compowe-r"></a><a href="#fp12compowe-r" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP12.compow(e, r)</h3>
-<p>Raises an FP12 instance to a BIG power, compressed to FP4</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a>  <br>
-<strong>this</strong>: <code>{FP12}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>e</td><td>BIG exponent</td></tr>
-<tr><td>r</td><td>BIG group order</td></tr>
-</tbody>
-</table>
-<p><a name="FP12.fromBytes"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp12frombytesw"></a><a href="#fp12frombytesw" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>FP12.fromBytes(w)</h3>
-<p>convert from byte array to FP12</p>
-<p><strong>Kind</strong>: static method of <a href="#FP12"><code>FP12</code></a>  <br>
-<strong>this</strong>: <code>{FP12}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>w</td><td>Byte array</td></tr>
-</tbody>
-</table>
-<p><a name="FP12.teq"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp12teq"></a><a href="#fp12teq" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>FP12.teq()</h3>
-<p>return 1 if b==c, no branching</p>
-<p><strong>Kind</strong>: static method of <a href="#FP12"><code>FP12</code></a>  <br>
-<strong>this</strong>: <code>{FP12}</code>  <br>
-<a name="FP12.pow4"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp12pow4"></a><a href="#fp12pow4" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>FP12.pow4()</h3>
-<p>p=q0^u0.q1^u1.q2^u2.q3^u3</p>
-<p><strong>Kind</strong>: static method of <a href="#FP12"><code>FP12</code></a>  <br>
-<strong>this</strong>: <code>{FP12}</code></p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/cryptojs/fp8"><span class="arrow-prev">← </span><span>FP8</span></a><a class="docs-next button" href="/docs/cryptojs/fp16"><span>FP16</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#fp12">FP12</a><ul class="toc-headings"><li><a href="#new-fp12">new FP12()</a></li><li><a href="#fp12reduce">fP12.reduce()</a></li><li><a href="#fp12norm">fP12.norm()</a></li><li><a href="#fp12iszilch">fP12.iszilch()</a></li><li><a href="#fp12isunity">fP12.isunity()</a></li><li><a href="#fp12cmoveg-d">fP12.cmove(g, d)</a></li><li><a href="#fp12select">fP12.select()</a></li><li><a href="#fp12geta">fP12.geta()</a></li><li><a href="#fp12getb">fP12.getb()</a></li><li><a href="#fp12getc">fP12.getc()</a></li><li><a href="#fp12equalsx">fP12.equals(x)</a></li><li><a href="#fp12copyx">fP12.copy(x)</a></li><li><a href="#fp12onex">fP12.one(x)</a></li><li><a href="#fp12zero">fP12.zero()</a></li><li><a href="#fp12conj">fP12.conj()</a></li><li><a href="#fp12setd-e-f">fP12.set(d, e, f)</a></li><li><a href="#fp12setad">fP12.seta(d)</a></li><li><a href="#fp12usqr">fP12.usqr()</a></li><li><a href="#fp12sqr">fP12.sqr()</a></li><li><a href="#fp12muly">fP12.mul(y)</a></li><li><a href="#fp12smuly">fP12.smul(y)</a></li><li><a href="#fp12ssmuly">fP12.ssmul(y)</a></li><li><a href="#fp12inverse">fP12.inverse()</a></li><li><a href="#fp12frobf">fP12.frob(f)</a></li><li><a href="#fp12trace">fP12.trace()</a></li><li><a href="#fp12tostring">fP12.toString()</a></li><li><a href="#fp12tobytesw">fP12.toBytes(w)</a></li><li><a href="#fp12powe">fP12.pow(e)</a></li><li><a href="#fp12pinpowe-bts">fP12.pinpow(e, bts)</a></li><li><a href="#fp12compowe-r">fP12.compow(e, r)</a></li><li><a href="#fp12frombytesw">FP12.fromBytes(w)</a></li><li><a href="#fp12teq">FP12.teq()</a></li><li><a href="#fp12pow4">FP12.pow4()</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/amcl-overview">AMCL Library</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-overview">AMCL Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API 1.0.0</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/aes">AES</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/big">BIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls">BLS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls192">BLS192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls256">BLS256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/dbig">DBIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp">ECP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ff">FF</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp">FP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp2">FP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp4">FP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp8">FP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/cryptojs/fp12">FP12</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp16">FP16</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp24">FP24</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp48">FP48</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/gcm">GCM</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash256">HASH256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash384">HASH384</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash512">HASH512</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin">MPIN</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair">PAIR</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rand">RAND</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rsa">RSA</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/sha3">SHA3</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/unit64">UInt64</a></li></ul></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL Library</span><meta itemprop="position" content="1"></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL JavaScript API 1.0.0</span><meta itemprop="position" content="2"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">FP12</span><meta itemprop="position" content="3"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>FP12</h1></header><a name="FP12"></a><h2 class="anchor anchorWithStickyNavbar_LWe7" id="fp12">FP12<a class="hash-link" href="#fp12" title="Direct link to heading">​</a></h2><p><strong>Kind</strong>: global class<br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP12{&quot;}&quot;}</code>  </p><ul><li><a href="#FP12">FP12</a><ul><li><a href="#new_FP12_new">new FP12()</a></li><li><em>instance</em><ul><li><a href="#FP12+reduce">.reduce()</a></li><li><a href="#FP12+norm">.norm()</a></li><li><a href="#FP12+iszilch">.iszilch()</a></li><li><a href="#FP12+isunity">.isunity()</a></li><li><a href="#FP12+cmove">.cmove(g, d)</a></li><li><a href="#FP12+select">.select()</a></li><li><a href="#FP12+geta">.geta()</a></li><li><a href="#FP12+getb">.getb()</a></li><li><a href="#FP12+getc">.getc()</a></li><li><a href="#FP12+equals">.equals(x)</a></li><li><a href="#FP12+copy">.copy(x)</a></li><li><a href="#FP12+one">.one(x)</a></li><li><a href="#FP12+zero">.zero()</a></li><li><a href="#FP12+conj">.conj()</a></li><li><a href="#FP12+set">.set(d, e, f)</a></li><li><a href="#FP12+seta">.seta(d)</a></li><li><a href="#FP12+usqr">.usqr()</a></li><li><a href="#FP12+sqr">.sqr()</a></li><li><a href="#FP12+mul">.mul(y)</a></li><li><a href="#FP12+smul">.smul(y)</a></li><li><a href="#FP12+ssmul">.ssmul(y)</a></li><li><a href="#FP12+inverse">.inverse()</a></li><li><a href="#FP12+frob">.frob(f)</a></li><li><a href="#FP12+trace">.trace()</a></li><li><a href="#FP12+toString">.toString()</a></li><li><a href="#FP12+toBytes">.toBytes(w)</a></li><li><a href="#FP12+pow">.pow(e)</a></li><li><a href="#FP12+pinpow">.pinpow(e, bts)</a></li><li><a href="#FP12+compow">.compow(e, r)</a></li></ul></li><li><em>static</em><ul><li><a href="#FP12.fromBytes">.fromBytes(w)</a></li><li><a href="#FP12.teq">.teq()</a></li><li><a href="#FP12.pow4">.pow4()</a></li></ul></li></ul></li></ul><a name="new_FP12_new"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="new-fp12">new FP12()<a class="hash-link" href="#new-fp12" title="Direct link to heading">​</a></h3><p>Creates an instance of FP12.</p><a name="FP12+reduce"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp12reduce">fP12.reduce()<a class="hash-link" href="#fp12reduce" title="Direct link to heading">​</a></h3><p>Reduces all components of possibly unreduced FP12 mod Modulus</p><p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP12{&quot;}&quot;}</code>  </p><a name="FP12+norm"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp12norm">fP12.norm()<a class="hash-link" href="#fp12norm" title="Direct link to heading">​</a></h3><p>Normalises the components of an FP12</p><p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP12{&quot;}&quot;}</code>  </p><a name="FP12+iszilch"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp12iszilch">fP12.iszilch()<a class="hash-link" href="#fp12iszilch" title="Direct link to heading">​</a></h3><p>Tests for FP12 equal to zero</p><p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP12{&quot;}&quot;}</code>  </p><a name="FP12+isunity"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp12isunity">fP12.isunity()<a class="hash-link" href="#fp12isunity" title="Direct link to heading">​</a></h3><p>Tests for FP12 equal to unity</p><p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP12{&quot;}&quot;}</code>  </p><a name="FP12+cmove"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp12cmoveg-d">fP12.cmove(g, d)<a class="hash-link" href="#fp12cmoveg-d" title="Direct link to heading">​</a></h3><p>Conditional copy of FP12 number</p><p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP12{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>g</td><td>FP12 instance</td></tr><tr><td>d</td><td>copy depends on this value</td></tr></tbody></table><a name="FP12+select"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp12select">fP12.select()<a class="hash-link" href="#fp12select" title="Direct link to heading">​</a></h3><p>Constant time select from pre-computed table</p><p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP12{&quot;}&quot;}</code>  </p><a name="FP12+geta"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp12geta">fP12.geta()<a class="hash-link" href="#fp12geta" title="Direct link to heading">​</a></h3><p>extract a from this</p><p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP12{&quot;}&quot;}</code>  </p><a name="FP12+getb"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp12getb">fP12.getb()<a class="hash-link" href="#fp12getb" title="Direct link to heading">​</a></h3><p>extract b from this</p><p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP12{&quot;}&quot;}</code>  </p><a name="FP12+getc"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp12getc">fP12.getc()<a class="hash-link" href="#fp12getc" title="Direct link to heading">​</a></h3><p>extract c from this</p><p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP12{&quot;}&quot;}</code>  </p><a name="FP12+equals"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp12equalsx">fP12.equals(x)<a class="hash-link" href="#fp12equalsx" title="Direct link to heading">​</a></h3><p>Tests for equality of two FP12s</p><p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP12{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>x</td><td>FP12 instance to compare</td></tr></tbody></table><a name="FP12+copy"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp12copyx">fP12.copy(x)<a class="hash-link" href="#fp12copyx" title="Direct link to heading">​</a></h3><p>Copy FP12 to another FP12</p><p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP12{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>x</td><td>FP12 instance to be copied</td></tr></tbody></table><a name="FP12+one"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp12onex">fP12.one(x)<a class="hash-link" href="#fp12onex" title="Direct link to heading">​</a></h3><p>Set FP12 to unity</p><p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP12{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>x</td><td>FP12 instance to be set to one</td></tr></tbody></table><a name="FP12+zero"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp12zero">fP12.zero()<a class="hash-link" href="#fp12zero" title="Direct link to heading">​</a></h3><p>Set FP12 to zero</p><p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP12{&quot;}&quot;}</code>  </p><a name="FP12+conj"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp12conj">fP12.conj()<a class="hash-link" href="#fp12conj" title="Direct link to heading">​</a></h3><p>Conjugation of FP12</p><p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP12{&quot;}&quot;}</code>  </p><a name="FP12+set"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp12setd-e-f">fP12.set(d, e, f)<a class="hash-link" href="#fp12setd-e-f" title="Direct link to heading">​</a></h3><p>Set FP12 from three FP4 values</p><p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP12{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>d</td><td>FP4 instance</td></tr><tr><td>e</td><td>FP4 instance</td></tr><tr><td>f</td><td>FP4 instance</td></tr></tbody></table><a name="FP12+seta"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp12setad">fP12.seta(d)<a class="hash-link" href="#fp12setad" title="Direct link to heading">​</a></h3><p>Set FP12 from one FP4 value</p><p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP12{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>d</td><td>FP4 instance</td></tr></tbody></table><a name="FP12+usqr"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp12usqr">fP12.usqr()<a class="hash-link" href="#fp12usqr" title="Direct link to heading">​</a></h3><p>Fast Squaring of an FP12 in &quot;unitary&quot; form</p><p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP12{&quot;}&quot;}</code>  </p><a name="FP12+sqr"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp12sqr">fP12.sqr()<a class="hash-link" href="#fp12sqr" title="Direct link to heading">​</a></h3><p>Fast Squaring of an FP12</p><p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP12{&quot;}&quot;}</code>  </p><a name="FP12+mul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp12muly">fP12.mul(y)<a class="hash-link" href="#fp12muly" title="Direct link to heading">​</a></h3><p>Full unconditional Multiplication of two FP12s</p><p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP12{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>y</td><td>FP12 instance, the multiplier</td></tr></tbody></table><a name="FP12+smul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp12smuly">fP12.smul(y)<a class="hash-link" href="#fp12smuly" title="Direct link to heading">​</a></h3><p>Fast multiplication of two sparse FP12s that arises from ATE pairing line functions</p><p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP12{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>y</td><td>FP12 instance, the multiplier</td></tr></tbody></table><a name="FP12+ssmul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp12ssmuly">fP12.ssmul(y)<a class="hash-link" href="#fp12ssmuly" title="Direct link to heading">​</a></h3><p>Fast multiplication of what may be sparse multiplicands</p><p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP12{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>y</td><td>FP12 instance, the multiplier</td></tr></tbody></table><a name="FP12+inverse"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp12inverse">fP12.inverse()<a class="hash-link" href="#fp12inverse" title="Direct link to heading">​</a></h3><p>Inverting an FP12</p><p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP12{&quot;}&quot;}</code>  </p><a name="FP12+frob"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp12frobf">fP12.frob(f)<a class="hash-link" href="#fp12frobf" title="Direct link to heading">​</a></h3><p>Raises an FP12 to the power of the internal modulus p, using the Frobenius</p><p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP12{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>f</td><td>Modulus</td></tr></tbody></table><a name="FP12+trace"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp12trace">fP12.trace()<a class="hash-link" href="#fp12trace" title="Direct link to heading">​</a></h3><p>Calculate the trace of an FP12</p><p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP12{&quot;}&quot;}</code>  </p><a name="FP12+toString"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp12tostring">fP12.toString()<a class="hash-link" href="#fp12tostring" title="Direct link to heading">​</a></h3><p>convert this to hex string</p><p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP12{&quot;}&quot;}</code>  </p><a name="FP12+toBytes"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp12tobytesw">fP12.toBytes(w)<a class="hash-link" href="#fp12tobytesw" title="Direct link to heading">​</a></h3><p>convert this to byte array</p><p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP12{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>w</td><td>Byte array</td></tr></tbody></table><a name="FP12+pow"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp12powe">fP12.pow(e)<a class="hash-link" href="#fp12powe" title="Direct link to heading">​</a></h3><p>Raises an FP12 to the power of a BIG</p><p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP12{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>e</td><td>BIG instance exponent</td></tr></tbody></table><a name="FP12+pinpow"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp12pinpowe-bts">fP12.pinpow(e, bts)<a class="hash-link" href="#fp12pinpowe-bts" title="Direct link to heading">​</a></h3><p>Raises an FP12 instance x to a small integer power, side-channel resistant</p><p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP12{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>e</td><td>small integer exponent</td></tr><tr><td>bts</td><td>maximum number of bits in exponent</td></tr></tbody></table><a name="FP12+compow"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp12compowe-r">fP12.compow(e, r)<a class="hash-link" href="#fp12compowe-r" title="Direct link to heading">​</a></h3><p>Raises an FP12 instance to a BIG power, compressed to FP4</p><p><strong>Kind</strong>: instance method of <a href="#FP12"><code>FP12</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP12{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>e</td><td>BIG exponent</td></tr><tr><td>r</td><td>BIG group order</td></tr></tbody></table><a name="FP12.fromBytes"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp12frombytesw">FP12.fromBytes(w)<a class="hash-link" href="#fp12frombytesw" title="Direct link to heading">​</a></h3><p>convert from byte array to FP12</p><p><strong>Kind</strong>: static method of <a href="#FP12"><code>FP12</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP12{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>w</td><td>Byte array</td></tr></tbody></table><a name="FP12.teq"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp12teq">FP12.teq()<a class="hash-link" href="#fp12teq" title="Direct link to heading">​</a></h3><p>return 1 if b==c, no branching</p><p><strong>Kind</strong>: static method of <a href="#FP12"><code>FP12</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP12{&quot;}&quot;}</code>  </p><a name="FP12.pow4"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp12pow4">FP12.pow4()<a class="hash-link" href="#fp12pow4" title="Direct link to heading">​</a></h3><p>p=q0^u0.q1^u1.q2^u2.q3^u3</p><p><strong>Kind</strong>: static method of <a href="#FP12"><code>FP12</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP12{&quot;}&quot;}</code></p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/cryptojs/fp8"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">FP8</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/cryptojs/fp16"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">FP16</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#fp12" class="table-of-contents__link toc-highlight">FP12</a><ul><li><a href="#new-fp12" class="table-of-contents__link toc-highlight">new FP12()</a></li><li><a href="#fp12reduce" class="table-of-contents__link toc-highlight">fP12.reduce()</a></li><li><a href="#fp12norm" class="table-of-contents__link toc-highlight">fP12.norm()</a></li><li><a href="#fp12iszilch" class="table-of-contents__link toc-highlight">fP12.iszilch()</a></li><li><a href="#fp12isunity" class="table-of-contents__link toc-highlight">fP12.isunity()</a></li><li><a href="#fp12cmoveg-d" class="table-of-contents__link toc-highlight">fP12.cmove(g, d)</a></li><li><a href="#fp12select" class="table-of-contents__link toc-highlight">fP12.select()</a></li><li><a href="#fp12geta" class="table-of-contents__link toc-highlight">fP12.geta()</a></li><li><a href="#fp12getb" class="table-of-contents__link toc-highlight">fP12.getb()</a></li><li><a href="#fp12getc" class="table-of-contents__link toc-highlight">fP12.getc()</a></li><li><a href="#fp12equalsx" class="table-of-contents__link toc-highlight">fP12.equals(x)</a></li><li><a href="#fp12copyx" class="table-of-contents__link toc-highlight">fP12.copy(x)</a></li><li><a href="#fp12onex" class="table-of-contents__link toc-highlight">fP12.one(x)</a></li><li><a href="#fp12zero" class="table-of-contents__link toc-highlight">fP12.zero()</a></li><li><a href="#fp12conj" class="table-of-contents__link toc-highlight">fP12.conj()</a></li><li><a href="#fp12setd-e-f" class="table-of-contents__link toc-highlight">fP12.set(d, e, f)</a></li><li><a href="#fp12setad" class="table-of-contents__link toc-highlight">fP12.seta(d)</a></li><li><a href="#fp12usqr" class="table-of-contents__link toc-highlight">fP12.usqr()</a></li><li><a href="#fp12sqr" class="table-of-contents__link toc-highlight">fP12.sqr()</a></li><li><a href="#fp12muly" class="table-of-contents__link toc-highlight">fP12.mul(y)</a></li><li><a href="#fp12smuly" class="table-of-contents__link toc-highlight">fP12.smul(y)</a></li><li><a href="#fp12ssmuly" class="table-of-contents__link toc-highlight">fP12.ssmul(y)</a></li><li><a href="#fp12inverse" class="table-of-contents__link toc-highlight">fP12.inverse()</a></li><li><a href="#fp12frobf" class="table-of-contents__link toc-highlight">fP12.frob(f)</a></li><li><a href="#fp12trace" class="table-of-contents__link toc-highlight">fP12.trace()</a></li><li><a href="#fp12tostring" class="table-of-contents__link toc-highlight">fP12.toString()</a></li><li><a href="#fp12tobytesw" class="table-of-contents__link toc-highlight">fP12.toBytes(w)</a></li><li><a href="#fp12powe" class="table-of-contents__link toc-highlight">fP12.pow(e)</a></li><li><a href="#fp12pinpowe-bts" class="table-of-contents__link toc-highlight">fP12.pinpow(e, bts)</a></li><li><a href="#fp12compowe-r" class="table-of-contents__link toc-highlight">fP12.compow(e, r)</a></li><li><a href="#fp12frombytesw" class="table-of-contents__link toc-highlight">FP12.fromBytes(w)</a></li><li><a href="#fp12teq" class="table-of-contents__link toc-highlight">FP12.teq()</a></li><li><a href="#fp12pow4" class="table-of-contents__link toc-highlight">FP12.pow4()</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/cryptojs/fp16/index.html b/docs/cryptojs/fp16/index.html
index 9c9fe72..13ef67e 100644
--- a/docs/cryptojs/fp16/index.html
+++ b/docs/cryptojs/fp16/index.html
@@ -1,418 +1,59 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>FP16 · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;a name=&quot;FP16&quot;&gt;&lt;/a&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="FP16 · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;a name=&quot;FP16&quot;&gt;&lt;/a&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>AMCL JavaScript API 1.0.0</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-cryptojs/fp16">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">FP16 | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/cryptojs/fp16"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="FP16 | Apache Milagro"><meta data-rh="true" name="description" content="FP16"><meta data-rh="true" property="og:description" content="FP16"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/cryptojs/fp16"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/fp16" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/fp16" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">FP16</h1></header><article><div><span><p><a name="FP16"></a></p>
-<h2><a class="anchor" aria-hidden="true" id="fp16"></a><a href="#fp16" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>FP16</h2>
-<p><strong>Kind</strong>: global class<br>
-<strong>this</strong>: <code>{FP16}</code></p>
-<ul>
-<li><a href="#FP16">FP16</a>
-<ul>
-<li><a href="#new_FP16_new">new FP16()</a></li>
-<li><a href="#FP16+reduce">.reduce()</a></li>
-<li><a href="#FP16+norm">.norm()</a></li>
-<li><a href="#FP16+iszilch">.iszilch()</a></li>
-<li><a href="#FP16+isunity">.isunity()</a></li>
-<li><a href="#FP16+cmove">.cmove(g, d)</a></li>
-<li><a href="#FP16+isreal">.isreal()</a></li>
-<li><a href="#FP16+real">.real()</a></li>
-<li><a href="#FP16+geta">.geta()</a></li>
-<li><a href="#FP16+getb">.getb()</a></li>
-<li><a href="#FP16+equals">.equals(x)</a></li>
-<li><a href="#FP16+copy">.copy(x)</a></li>
-<li><a href="#FP16+zero">.zero()</a></li>
-<li><a href="#FP16+one">.one(x)</a></li>
-<li><a href="#FP16+set">.set(c, d)</a></li>
-<li><a href="#FP16+seta">.seta(c)</a></li>
-<li><a href="#FP16+neg">.neg()</a></li>
-<li><a href="#FP16+conj">.conj()</a></li>
-<li><a href="#FP16+nconj">.nconj()</a></li>
-<li><a href="#FP16+add">.add(x)</a></li>
-<li><a href="#FP16+sub">.sub(x)</a></li>
-<li><a href="#FP16+pmul">.pmul(s)</a></li>
-<li><a href="#FP16+qmul">.qmul(s)</a></li>
-<li><a href="#FP16+imul">.imul(s)</a></li>
-<li><a href="#FP16+sqr">.sqr()</a></li>
-<li><a href="#FP16+mul">.mul(y)</a></li>
-<li><a href="#FP16+toString">.toString()</a></li>
-<li><a href="#FP16+inverse">.inverse()</a></li>
-<li><a href="#FP16+times_i">.times_i()</a></li>
-<li><a href="#FP16+times_i2">.times_i2()</a></li>
-<li><a href="#FP16+times_i4">.times_i4()</a></li>
-<li><a href="#FP16+frob">.frob(f)</a></li>
-<li><a href="#FP16+pow">.pow(e)</a></li>
-<li><a href="#FP16+xtr_A">.xtr_A(w, y, z)</a></li>
-<li><a href="#FP16+xtr_D">.xtr_D()</a></li>
-<li><a href="#FP16+xtr_pow">.xtr_pow(n)</a></li>
-<li><a href="#FP16+xtr_pow2">.xtr_pow2()</a></li>
-</ul></li>
-</ul>
-<p><a name="new_FP16_new"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="new-fp16"></a><a href="#new-fp16" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>new FP16()</h3>
-<p>Creates an instance of FP16.</p>
-<p><a name="FP16+reduce"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp16reduce"></a><a href="#fp16reduce" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP16.reduce()</h3>
-<p>Reduces all components of possibly unreduced FP16 mod Modulus</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a>  <br>
-<strong>this</strong>: <code>{FP16}</code>  <br>
-<a name="FP16+norm"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp16norm"></a><a href="#fp16norm" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP16.norm()</h3>
-<p>Normalises the components of an FP16</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a>  <br>
-<strong>this</strong>: <code>{FP16}</code>  <br>
-<a name="FP16+iszilch"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp16iszilch"></a><a href="#fp16iszilch" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP16.iszilch()</h3>
-<p>Tests for FP16 equal to zero</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a>  <br>
-<strong>this</strong>: <code>{FP16}</code>  <br>
-<a name="FP16+isunity"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp16isunity"></a><a href="#fp16isunity" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP16.isunity()</h3>
-<p>Tests for FP16 equal to unity</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a>  <br>
-<strong>this</strong>: <code>{FP16}</code>  <br>
-<a name="FP16+cmove"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp16cmoveg-d"></a><a href="#fp16cmoveg-d" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP16.cmove(g, d)</h3>
-<p>Conditional copy of FP16 number</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a>  <br>
-<strong>this</strong>: <code>{FP16}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>g</td><td>FP16 instance</td></tr>
-<tr><td>d</td><td>copy depends on this value</td></tr>
-</tbody>
-</table>
-<p><a name="FP16+isreal"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp16isreal"></a><a href="#fp16isreal" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP16.isreal()</h3>
-<p>test is w real? That is in a+ib test b is zero</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a>  <br>
-<strong>this</strong>: <code>{FP16}</code>  <br>
-<a name="FP16+real"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp16real"></a><a href="#fp16real" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP16.real()</h3>
-<p>extract real part a</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a>  <br>
-<strong>this</strong>: <code>{FP16}</code>  <br>
-<a name="FP16+geta"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp16geta"></a><a href="#fp16geta" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP16.geta()</h3>
-<p>extract a from this</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a>  <br>
-<strong>this</strong>: <code>{FP16}</code>  <br>
-<a name="FP16+getb"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp16getb"></a><a href="#fp16getb" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP16.getb()</h3>
-<p>extract b from this</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a>  <br>
-<strong>this</strong>: <code>{FP16}</code>  <br>
-<a name="FP16+equals"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp16equalsx"></a><a href="#fp16equalsx" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP16.equals(x)</h3>
-<p>Tests for equality of two FP16s</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a>  <br>
-<strong>this</strong>: <code>{FP16}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>x</td><td>FP16 instance to compare</td></tr>
-</tbody>
-</table>
-<p><a name="FP16+copy"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp16copyx"></a><a href="#fp16copyx" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP16.copy(x)</h3>
-<p>Copy FP16 to another FP16</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a>  <br>
-<strong>this</strong>: <code>{FP16}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>x</td><td>FP16 instance to be copied</td></tr>
-</tbody>
-</table>
-<p><a name="FP16+zero"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp16zero"></a><a href="#fp16zero" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP16.zero()</h3>
-<p>Set FP16 to zero</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a>  <br>
-<strong>this</strong>: <code>{FP16}</code>  <br>
-<a name="FP16+one"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp16onex"></a><a href="#fp16onex" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP16.one(x)</h3>
-<p>Set FP16 to unity</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a>  <br>
-<strong>this</strong>: <code>{FP16}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>x</td><td>FP16 instance to be set to one</td></tr>
-</tbody>
-</table>
-<p><a name="FP16+set"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp16setc-d"></a><a href="#fp16setc-d" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP16.set(c, d)</h3>
-<p>Set FP16 from two FP8 values</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a>  <br>
-<strong>this</strong>: <code>{FP16}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>c</td><td>FP8 instance</td></tr>
-<tr><td>d</td><td>FP8 instance</td></tr>
-</tbody>
-</table>
-<p><a name="FP16+seta"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp16setac"></a><a href="#fp16setac" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP16.seta(c)</h3>
-<p>Set FP16 from one FP8 value</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a>  <br>
-<strong>this</strong>: <code>{FP16}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>c</td><td>FP8 instance</td></tr>
-</tbody>
-</table>
-<p><a name="FP16+neg"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp16neg"></a><a href="#fp16neg" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP16.neg()</h3>
-<p>this=-this</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a>  <br>
-<strong>this</strong>: <code>{FP16}</code>  <br>
-<a name="FP16+conj"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp16conj"></a><a href="#fp16conj" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP16.conj()</h3>
-<p>Conjugation of FP16</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a>  <br>
-<strong>this</strong>: <code>{FP16}</code>  <br>
-<a name="FP16+nconj"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp16nconj"></a><a href="#fp16nconj" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP16.nconj()</h3>
-<p>Negative conjugation of FP16</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a>  <br>
-<strong>this</strong>: <code>{FP16}</code>  <br>
-<a name="FP16+add"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp16addx"></a><a href="#fp16addx" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP16.add(x)</h3>
-<p>addition of two FP16s</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a>  <br>
-<strong>this</strong>: <code>{FP16}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>x</td><td>FP16 instance</td></tr>
-</tbody>
-</table>
-<p><a name="FP16+sub"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp16subx"></a><a href="#fp16subx" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP16.sub(x)</h3>
-<p>subtraction of two FP16s</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a>  <br>
-<strong>this</strong>: <code>{FP16}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>x</td><td>FP16 instance</td></tr>
-</tbody>
-</table>
-<p><a name="FP16+pmul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp16pmuls"></a><a href="#fp16pmuls" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP16.pmul(s)</h3>
-<p>Multiplication of an FP16 by an FP8</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a>  <br>
-<strong>this</strong>: <code>{FP16}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>s</td><td>FP8 instance</td></tr>
-</tbody>
-</table>
-<p><a name="FP16+qmul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp16qmuls"></a><a href="#fp16qmuls" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP16.qmul(s)</h3>
-<p>Multiplication of an FP16 by an FP2</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a>  <br>
-<strong>this</strong>: <code>{FP16}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>s</td><td>FP2 instance</td></tr>
-</tbody>
-</table>
-<p><a name="FP16+imul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp16imuls"></a><a href="#fp16imuls" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP16.imul(s)</h3>
-<p>Multiplication of an FP16 by a small integer</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a>  <br>
-<strong>this</strong>: <code>{FP16}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>s</td><td>integer</td></tr>
-</tbody>
-</table>
-<p><a name="FP16+sqr"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp16sqr"></a><a href="#fp16sqr" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP16.sqr()</h3>
-<p>Fast Squaring of an FP16</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a>  <br>
-<strong>this</strong>: <code>{FP16}</code>  <br>
-<a name="FP16+mul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp16muly"></a><a href="#fp16muly" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP16.mul(y)</h3>
-<p>Full unconditional Multiplication of two FP16s</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a>  <br>
-<strong>this</strong>: <code>{FP16}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>y</td><td>FP16 instance, the multiplier</td></tr>
-</tbody>
-</table>
-<p><a name="FP16+toString"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp16tostring"></a><a href="#fp16tostring" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP16.toString()</h3>
-<p>convert this to hex string</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a>  <br>
-<strong>this</strong>: <code>{FP16}</code>  <br>
-<a name="FP16+inverse"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp16inverse"></a><a href="#fp16inverse" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP16.inverse()</h3>
-<p>Inverting an FP16</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a>  <br>
-<strong>this</strong>: <code>{FP16}</code>  <br>
-<a name="FP16+times_i"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp16times_i"></a><a href="#fp16times_i" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP16.times_i()</h3>
-<p>multiplies an FP16 instance by irreducible polynomial sqrt(1+sqrt(-1))</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a>  <br>
-<strong>this</strong>: <code>{FP16}</code>  <br>
-<a name="FP16+times_i2"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp16times_i2"></a><a href="#fp16times_i2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP16.times_i2()</h3>
-<p>multiplies an FP16 instance by irreducible polynomial (1+sqrt(-1))</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a>  <br>
-<strong>this</strong>: <code>{FP16}</code>  <br>
-<a name="FP16+times_i4"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp16times_i4"></a><a href="#fp16times_i4" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP16.times_i4()</h3>
-<p>multiplies an FP16 instance by irreducible polynomial (1+sqrt(-1))</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a>  <br>
-<strong>this</strong>: <code>{FP16}</code>  <br>
-<a name="FP16+frob"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp16frobf"></a><a href="#fp16frobf" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP16.frob(f)</h3>
-<p>Raises an FP16 to the power of the internal modulus p, using the Frobenius</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a>  <br>
-<strong>this</strong>: <code>{FP16}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>f</td><td>Modulus</td></tr>
-</tbody>
-</table>
-<p><a name="FP16+pow"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp16powe"></a><a href="#fp16powe" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP16.pow(e)</h3>
-<p>Raises an FP16 to the power of a BIG</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a>  <br>
-<strong>this</strong>: <code>{FP16}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>e</td><td>BIG instance exponent</td></tr>
-</tbody>
-</table>
-<p><a name="FP16+xtr_A"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp16xtr_aw-y-z"></a><a href="#fp16xtr_aw-y-z" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP16.xtr_A(w, y, z)</h3>
-<p>Calculates the XTR addition function r=w<em>x-conj(x)</em>y+z</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a>  <br>
-<strong>this</strong>: <code>{FP16}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>w</td><td>FP16 instance</td></tr>
-<tr><td>y</td><td>FP16 instance</td></tr>
-<tr><td>z</td><td>FP16 instance</td></tr>
-</tbody>
-</table>
-<p><a name="FP16+xtr_D"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp16xtr_d"></a><a href="#fp16xtr_d" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP16.xtr_D()</h3>
-<p>Calculates the XTR doubling function r=x^2-2*conj(x)</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a>  <br>
-<strong>this</strong>: <code>{FP16}</code>  <br>
-<a name="FP16+xtr_pow"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp16xtr_pown"></a><a href="#fp16xtr_pown" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP16.xtr_pow(n)</h3>
-<p>Calculates FP16 trace of an FP16 raised to the power of a BIG number</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a>  <br>
-<strong>this</strong>: <code>{FP16}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>n</td><td>Big number</td></tr>
-</tbody>
-</table>
-<p><a name="FP16+xtr_pow2"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp16xtr_pow2"></a><a href="#fp16xtr_pow2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP16.xtr_pow2()</h3>
-<p>Calculates FP16 trace of c^a.d^b, where c and d are derived from FP16 traces of FP16s</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a>  <br>
-<strong>this</strong>: <code>{FP16}</code></p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/cryptojs/fp12"><span class="arrow-prev">← </span><span>FP12</span></a><a class="docs-next button" href="/docs/cryptojs/fp24"><span>FP24</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#fp16">FP16</a><ul class="toc-headings"><li><a href="#new-fp16">new FP16()</a></li><li><a href="#fp16reduce">fP16.reduce()</a></li><li><a href="#fp16norm">fP16.norm()</a></li><li><a href="#fp16iszilch">fP16.iszilch()</a></li><li><a href="#fp16isunity">fP16.isunity()</a></li><li><a href="#fp16cmoveg-d">fP16.cmove(g, d)</a></li><li><a href="#fp16isreal">fP16.isreal()</a></li><li><a href="#fp16real">fP16.real()</a></li><li><a href="#fp16geta">fP16.geta()</a></li><li><a href="#fp16getb">fP16.getb()</a></li><li><a href="#fp16equalsx">fP16.equals(x)</a></li><li><a href="#fp16copyx">fP16.copy(x)</a></li><li><a href="#fp16zero">fP16.zero()</a></li><li><a href="#fp16onex">fP16.one(x)</a></li><li><a href="#fp16setc-d">fP16.set(c, d)</a></li><li><a href="#fp16setac">fP16.seta(c)</a></li><li><a href="#fp16neg">fP16.neg()</a></li><li><a href="#fp16conj">fP16.conj()</a></li><li><a href="#fp16nconj">fP16.nconj()</a></li><li><a href="#fp16addx">fP16.add(x)</a></li><li><a href="#fp16subx">fP16.sub(x)</a></li><li><a href="#fp16pmuls">fP16.pmul(s)</a></li><li><a href="#fp16qmuls">fP16.qmul(s)</a></li><li><a href="#fp16imuls">fP16.imul(s)</a></li><li><a href="#fp16sqr">fP16.sqr()</a></li><li><a href="#fp16muly">fP16.mul(y)</a></li><li><a href="#fp16tostring">fP16.toString()</a></li><li><a href="#fp16inverse">fP16.inverse()</a></li><li><a href="#fp16times_i">fP16.times_i()</a></li><li><a href="#fp16times_i2">fP16.times_i2()</a></li><li><a href="#fp16times_i4">fP16.times_i4()</a></li><li><a href="#fp16frobf">fP16.frob(f)</a></li><li><a href="#fp16powe">fP16.pow(e)</a></li><li><a href="#fp16xtr_aw-y-z">fP16.xtr_A(w, y, z)</a></li><li><a href="#fp16xtr_d">fP16.xtr_D()</a></li><li><a href="#fp16xtr_pown">fP16.xtr_pow(n)</a></li><li><a href="#fp16xtr_pow2">fP16.xtr_pow2()</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/amcl-overview">AMCL Library</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-overview">AMCL Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API 1.0.0</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/aes">AES</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/big">BIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls">BLS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls192">BLS192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls256">BLS256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/dbig">DBIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp">ECP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ff">FF</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp">FP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp2">FP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp4">FP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp8">FP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp12">FP12</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/cryptojs/fp16">FP16</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp24">FP24</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp48">FP48</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/gcm">GCM</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash256">HASH256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash384">HASH384</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash512">HASH512</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin">MPIN</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair">PAIR</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rand">RAND</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rsa">RSA</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/sha3">SHA3</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/unit64">UInt64</a></li></ul></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL Library</span><meta itemprop="position" content="1"></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL JavaScript API 1.0.0</span><meta itemprop="position" content="2"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">FP16</span><meta itemprop="position" content="3"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>FP16</h1></header><a name="FP16"></a><h2 class="anchor anchorWithStickyNavbar_LWe7" id="fp16">FP16<a class="hash-link" href="#fp16" title="Direct link to heading">​</a></h2><p><strong>Kind</strong>: global class<br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP16{&quot;}&quot;}</code>  </p><ul><li><a href="#FP16">FP16</a><ul><li><a href="#new_FP16_new">new FP16()</a></li><li><a href="#FP16+reduce">.reduce()</a></li><li><a href="#FP16+norm">.norm()</a></li><li><a href="#FP16+iszilch">.iszilch()</a></li><li><a href="#FP16+isunity">.isunity()</a></li><li><a href="#FP16+cmove">.cmove(g, d)</a></li><li><a href="#FP16+isreal">.isreal()</a></li><li><a href="#FP16+real">.real()</a></li><li><a href="#FP16+geta">.geta()</a></li><li><a href="#FP16+getb">.getb()</a></li><li><a href="#FP16+equals">.equals(x)</a></li><li><a href="#FP16+copy">.copy(x)</a></li><li><a href="#FP16+zero">.zero()</a></li><li><a href="#FP16+one">.one(x)</a></li><li><a href="#FP16+set">.set(c, d)</a></li><li><a href="#FP16+seta">.seta(c)</a></li><li><a href="#FP16+neg">.neg()</a></li><li><a href="#FP16+conj">.conj()</a></li><li><a href="#FP16+nconj">.nconj()</a></li><li><a href="#FP16+add">.add(x)</a></li><li><a href="#FP16+sub">.sub(x)</a></li><li><a href="#FP16+pmul">.pmul(s)</a></li><li><a href="#FP16+qmul">.qmul(s)</a></li><li><a href="#FP16+imul">.imul(s)</a></li><li><a href="#FP16+sqr">.sqr()</a></li><li><a href="#FP16+mul">.mul(y)</a></li><li><a href="#FP16+toString">.toString()</a></li><li><a href="#FP16+inverse">.inverse()</a></li><li><a href="#FP16+times_i">.times_i()</a></li><li><a href="#FP16+times_i2">.times_i2()</a></li><li><a href="#FP16+times_i4">.times_i4()</a></li><li><a href="#FP16+frob">.frob(f)</a></li><li><a href="#FP16+pow">.pow(e)</a></li><li><a href="#FP16+xtr_A">.xtr_A(w, y, z)</a></li><li><a href="#FP16+xtr_D">.xtr_D()</a></li><li><a href="#FP16+xtr_pow">.xtr_pow(n)</a></li><li><a href="#FP16+xtr_pow2">.xtr_pow2()</a></li></ul></li></ul><a name="new_FP16_new"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="new-fp16">new FP16()<a class="hash-link" href="#new-fp16" title="Direct link to heading">​</a></h3><p>Creates an instance of FP16.</p><a name="FP16+reduce"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp16reduce">fP16.reduce()<a class="hash-link" href="#fp16reduce" title="Direct link to heading">​</a></h3><p>Reduces all components of possibly unreduced FP16 mod Modulus</p><p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP16{&quot;}&quot;}</code>  </p><a name="FP16+norm"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp16norm">fP16.norm()<a class="hash-link" href="#fp16norm" title="Direct link to heading">​</a></h3><p>Normalises the components of an FP16</p><p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP16{&quot;}&quot;}</code>  </p><a name="FP16+iszilch"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp16iszilch">fP16.iszilch()<a class="hash-link" href="#fp16iszilch" title="Direct link to heading">​</a></h3><p>Tests for FP16 equal to zero</p><p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP16{&quot;}&quot;}</code>  </p><a name="FP16+isunity"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp16isunity">fP16.isunity()<a class="hash-link" href="#fp16isunity" title="Direct link to heading">​</a></h3><p>Tests for FP16 equal to unity</p><p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP16{&quot;}&quot;}</code>  </p><a name="FP16+cmove"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp16cmoveg-d">fP16.cmove(g, d)<a class="hash-link" href="#fp16cmoveg-d" title="Direct link to heading">​</a></h3><p>Conditional copy of FP16 number</p><p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP16{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>g</td><td>FP16 instance</td></tr><tr><td>d</td><td>copy depends on this value</td></tr></tbody></table><a name="FP16+isreal"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp16isreal">fP16.isreal()<a class="hash-link" href="#fp16isreal" title="Direct link to heading">​</a></h3><p>test is w real? That is in a+ib test b is zero</p><p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP16{&quot;}&quot;}</code>  </p><a name="FP16+real"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp16real">fP16.real()<a class="hash-link" href="#fp16real" title="Direct link to heading">​</a></h3><p>extract real part a</p><p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP16{&quot;}&quot;}</code>  </p><a name="FP16+geta"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp16geta">fP16.geta()<a class="hash-link" href="#fp16geta" title="Direct link to heading">​</a></h3><p>extract a from this</p><p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP16{&quot;}&quot;}</code>  </p><a name="FP16+getb"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp16getb">fP16.getb()<a class="hash-link" href="#fp16getb" title="Direct link to heading">​</a></h3><p>extract b from this</p><p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP16{&quot;}&quot;}</code>  </p><a name="FP16+equals"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp16equalsx">fP16.equals(x)<a class="hash-link" href="#fp16equalsx" title="Direct link to heading">​</a></h3><p>Tests for equality of two FP16s</p><p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP16{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>x</td><td>FP16 instance to compare</td></tr></tbody></table><a name="FP16+copy"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp16copyx">fP16.copy(x)<a class="hash-link" href="#fp16copyx" title="Direct link to heading">​</a></h3><p>Copy FP16 to another FP16</p><p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP16{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>x</td><td>FP16 instance to be copied</td></tr></tbody></table><a name="FP16+zero"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp16zero">fP16.zero()<a class="hash-link" href="#fp16zero" title="Direct link to heading">​</a></h3><p>Set FP16 to zero</p><p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP16{&quot;}&quot;}</code>  </p><a name="FP16+one"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp16onex">fP16.one(x)<a class="hash-link" href="#fp16onex" title="Direct link to heading">​</a></h3><p>Set FP16 to unity</p><p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP16{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>x</td><td>FP16 instance to be set to one</td></tr></tbody></table><a name="FP16+set"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp16setc-d">fP16.set(c, d)<a class="hash-link" href="#fp16setc-d" title="Direct link to heading">​</a></h3><p>Set FP16 from two FP8 values</p><p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP16{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>c</td><td>FP8 instance</td></tr><tr><td>d</td><td>FP8 instance</td></tr></tbody></table><a name="FP16+seta"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp16setac">fP16.seta(c)<a class="hash-link" href="#fp16setac" title="Direct link to heading">​</a></h3><p>Set FP16 from one FP8 value</p><p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP16{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>c</td><td>FP8 instance</td></tr></tbody></table><a name="FP16+neg"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp16neg">fP16.neg()<a class="hash-link" href="#fp16neg" title="Direct link to heading">​</a></h3><p>this=-this</p><p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP16{&quot;}&quot;}</code>  </p><a name="FP16+conj"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp16conj">fP16.conj()<a class="hash-link" href="#fp16conj" title="Direct link to heading">​</a></h3><p>Conjugation of FP16</p><p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP16{&quot;}&quot;}</code>  </p><a name="FP16+nconj"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp16nconj">fP16.nconj()<a class="hash-link" href="#fp16nconj" title="Direct link to heading">​</a></h3><p>Negative conjugation of FP16</p><p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP16{&quot;}&quot;}</code>  </p><a name="FP16+add"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp16addx">fP16.add(x)<a class="hash-link" href="#fp16addx" title="Direct link to heading">​</a></h3><p>addition of two FP16s</p><p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP16{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>x</td><td>FP16 instance</td></tr></tbody></table><a name="FP16+sub"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp16subx">fP16.sub(x)<a class="hash-link" href="#fp16subx" title="Direct link to heading">​</a></h3><p>subtraction of two FP16s</p><p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP16{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>x</td><td>FP16 instance</td></tr></tbody></table><a name="FP16+pmul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp16pmuls">fP16.pmul(s)<a class="hash-link" href="#fp16pmuls" title="Direct link to heading">​</a></h3><p>Multiplication of an FP16 by an FP8</p><p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP16{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>s</td><td>FP8 instance</td></tr></tbody></table><a name="FP16+qmul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp16qmuls">fP16.qmul(s)<a class="hash-link" href="#fp16qmuls" title="Direct link to heading">​</a></h3><p>Multiplication of an FP16 by an FP2</p><p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP16{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>s</td><td>FP2 instance</td></tr></tbody></table><a name="FP16+imul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp16imuls">fP16.imul(s)<a class="hash-link" href="#fp16imuls" title="Direct link to heading">​</a></h3><p>Multiplication of an FP16 by a small integer</p><p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP16{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>s</td><td>integer</td></tr></tbody></table><a name="FP16+sqr"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp16sqr">fP16.sqr()<a class="hash-link" href="#fp16sqr" title="Direct link to heading">​</a></h3><p>Fast Squaring of an FP16</p><p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP16{&quot;}&quot;}</code>  </p><a name="FP16+mul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp16muly">fP16.mul(y)<a class="hash-link" href="#fp16muly" title="Direct link to heading">​</a></h3><p>Full unconditional Multiplication of two FP16s</p><p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP16{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>y</td><td>FP16 instance, the multiplier</td></tr></tbody></table><a name="FP16+toString"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp16tostring">fP16.toString()<a class="hash-link" href="#fp16tostring" title="Direct link to heading">​</a></h3><p>convert this to hex string</p><p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP16{&quot;}&quot;}</code>  </p><a name="FP16+inverse"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp16inverse">fP16.inverse()<a class="hash-link" href="#fp16inverse" title="Direct link to heading">​</a></h3><p>Inverting an FP16</p><p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP16{&quot;}&quot;}</code>  </p><a name="FP16+times_i"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp16times_i">fP16.times_i()<a class="hash-link" href="#fp16times_i" title="Direct link to heading">​</a></h3><p>multiplies an FP16 instance by irreducible polynomial sqrt(1+sqrt(-1))</p><p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP16{&quot;}&quot;}</code>  </p><a name="FP16+times_i2"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp16times_i2">fP16.times_i2()<a class="hash-link" href="#fp16times_i2" title="Direct link to heading">​</a></h3><p>multiplies an FP16 instance by irreducible polynomial (1+sqrt(-1))</p><p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP16{&quot;}&quot;}</code>  </p><a name="FP16+times_i4"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp16times_i4">fP16.times_i4()<a class="hash-link" href="#fp16times_i4" title="Direct link to heading">​</a></h3><p>multiplies an FP16 instance by irreducible polynomial (1+sqrt(-1))</p><p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP16{&quot;}&quot;}</code>  </p><a name="FP16+frob"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp16frobf">fP16.frob(f)<a class="hash-link" href="#fp16frobf" title="Direct link to heading">​</a></h3><p>Raises an FP16 to the power of the internal modulus p, using the Frobenius</p><p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP16{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>f</td><td>Modulus</td></tr></tbody></table><a name="FP16+pow"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp16powe">fP16.pow(e)<a class="hash-link" href="#fp16powe" title="Direct link to heading">​</a></h3><p>Raises an FP16 to the power of a BIG</p><p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP16{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>e</td><td>BIG instance exponent</td></tr></tbody></table><a name="FP16+xtr_A"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp16xtr_aw-y-z">fP16.xtr_A(w, y, z)<a class="hash-link" href="#fp16xtr_aw-y-z" title="Direct link to heading">​</a></h3><p>Calculates the XTR addition function r=w_x-conj(x)_y+z</p><p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP16{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>w</td><td>FP16 instance</td></tr><tr><td>y</td><td>FP16 instance</td></tr><tr><td>z</td><td>FP16 instance</td></tr></tbody></table><a name="FP16+xtr_D"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp16xtr_d">fP16.xtr_D()<a class="hash-link" href="#fp16xtr_d" title="Direct link to heading">​</a></h3><p>Calculates the XTR doubling function r=x^2-2<!-- -->*<!-- -->conj(x)</p><p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP16{&quot;}&quot;}</code>  </p><a name="FP16+xtr_pow"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp16xtr_pown">fP16.xtr_pow(n)<a class="hash-link" href="#fp16xtr_pown" title="Direct link to heading">​</a></h3><p>Calculates FP16 trace of an FP16 raised to the power of a BIG number</p><p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP16{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>n</td><td>Big number</td></tr></tbody></table><a name="FP16+xtr_pow2"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp16xtr_pow2">fP16.xtr_pow2()<a class="hash-link" href="#fp16xtr_pow2" title="Direct link to heading">​</a></h3><p>Calculates FP16 trace of c^a.d^b, where c and d are derived from FP16 traces of FP16s</p><p><strong>Kind</strong>: instance method of <a href="#FP16"><code>FP16</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP16{&quot;}&quot;}</code></p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/cryptojs/fp12"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">FP12</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/cryptojs/fp24"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">FP24</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#fp16" class="table-of-contents__link toc-highlight">FP16</a><ul><li><a href="#new-fp16" class="table-of-contents__link toc-highlight">new FP16()</a></li><li><a href="#fp16reduce" class="table-of-contents__link toc-highlight">fP16.reduce()</a></li><li><a href="#fp16norm" class="table-of-contents__link toc-highlight">fP16.norm()</a></li><li><a href="#fp16iszilch" class="table-of-contents__link toc-highlight">fP16.iszilch()</a></li><li><a href="#fp16isunity" class="table-of-contents__link toc-highlight">fP16.isunity()</a></li><li><a href="#fp16cmoveg-d" class="table-of-contents__link toc-highlight">fP16.cmove(g, d)</a></li><li><a href="#fp16isreal" class="table-of-contents__link toc-highlight">fP16.isreal()</a></li><li><a href="#fp16real" class="table-of-contents__link toc-highlight">fP16.real()</a></li><li><a href="#fp16geta" class="table-of-contents__link toc-highlight">fP16.geta()</a></li><li><a href="#fp16getb" class="table-of-contents__link toc-highlight">fP16.getb()</a></li><li><a href="#fp16equalsx" class="table-of-contents__link toc-highlight">fP16.equals(x)</a></li><li><a href="#fp16copyx" class="table-of-contents__link toc-highlight">fP16.copy(x)</a></li><li><a href="#fp16zero" class="table-of-contents__link toc-highlight">fP16.zero()</a></li><li><a href="#fp16onex" class="table-of-contents__link toc-highlight">fP16.one(x)</a></li><li><a href="#fp16setc-d" class="table-of-contents__link toc-highlight">fP16.set(c, d)</a></li><li><a href="#fp16setac" class="table-of-contents__link toc-highlight">fP16.seta(c)</a></li><li><a href="#fp16neg" class="table-of-contents__link toc-highlight">fP16.neg()</a></li><li><a href="#fp16conj" class="table-of-contents__link toc-highlight">fP16.conj()</a></li><li><a href="#fp16nconj" class="table-of-contents__link toc-highlight">fP16.nconj()</a></li><li><a href="#fp16addx" class="table-of-contents__link toc-highlight">fP16.add(x)</a></li><li><a href="#fp16subx" class="table-of-contents__link toc-highlight">fP16.sub(x)</a></li><li><a href="#fp16pmuls" class="table-of-contents__link toc-highlight">fP16.pmul(s)</a></li><li><a href="#fp16qmuls" class="table-of-contents__link toc-highlight">fP16.qmul(s)</a></li><li><a href="#fp16imuls" class="table-of-contents__link toc-highlight">fP16.imul(s)</a></li><li><a href="#fp16sqr" class="table-of-contents__link toc-highlight">fP16.sqr()</a></li><li><a href="#fp16muly" class="table-of-contents__link toc-highlight">fP16.mul(y)</a></li><li><a href="#fp16tostring" class="table-of-contents__link toc-highlight">fP16.toString()</a></li><li><a href="#fp16inverse" class="table-of-contents__link toc-highlight">fP16.inverse()</a></li><li><a href="#fp16times_i" class="table-of-contents__link toc-highlight">fP16.times_i()</a></li><li><a href="#fp16times_i2" class="table-of-contents__link toc-highlight">fP16.times_i2()</a></li><li><a href="#fp16times_i4" class="table-of-contents__link toc-highlight">fP16.times_i4()</a></li><li><a href="#fp16frobf" class="table-of-contents__link toc-highlight">fP16.frob(f)</a></li><li><a href="#fp16powe" class="table-of-contents__link toc-highlight">fP16.pow(e)</a></li><li><a href="#fp16xtr_aw-y-z" class="table-of-contents__link toc-highlight">fP16.xtr_A(w, y, z)</a></li><li><a href="#fp16xtr_d" class="table-of-contents__link toc-highlight">fP16.xtr_D()</a></li><li><a href="#fp16xtr_pown" class="table-of-contents__link toc-highlight">fP16.xtr_pow(n)</a></li><li><a href="#fp16xtr_pow2" class="table-of-contents__link toc-highlight">fP16.xtr_pow2()</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/cryptojs/fp2/index.html b/docs/cryptojs/fp2/index.html
index ffafe61..3e76c2a 100644
--- a/docs/cryptojs/fp2/index.html
+++ b/docs/cryptojs/fp2/index.html
@@ -1,386 +1,56 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>FP2 · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;a name=&quot;FP2&quot;&gt;&lt;/a&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="FP2 · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;a name=&quot;FP2&quot;&gt;&lt;/a&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>AMCL JavaScript API 1.0.0</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-cryptojs/fp2">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">FP2 | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/cryptojs/fp2"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="FP2 | Apache Milagro"><meta data-rh="true" name="description" content="FP2"><meta data-rh="true" property="og:description" content="FP2"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/cryptojs/fp2"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/fp2" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/fp2" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">FP2</h1></header><article><div><span><p><a name="FP2"></a></p>
-<h2><a class="anchor" aria-hidden="true" id="fp2"></a><a href="#fp2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>FP2</h2>
-<p><strong>Kind</strong>: global class<br>
-<strong>this</strong>: <code>{FP2}</code></p>
-<ul>
-<li><a href="#FP2">FP2</a>
-<ul>
-<li><a href="#new_FP2_new">new FP2()</a></li>
-<li><a href="#FP2+reduce">.reduce()</a></li>
-<li><a href="#FP2+norm">.norm()</a></li>
-<li><a href="#FP2+iszilch">.iszilch()</a></li>
-<li><a href="#FP2+isunity">.isunity()</a></li>
-<li><a href="#FP2+cmove">.cmove(g, d)</a></li>
-<li><a href="#FP2+equals">.equals(x)</a></li>
-<li><a href="#FP2+getA">.getA()</a></li>
-<li><a href="#FP2+getB">.getB()</a></li>
-<li><a href="#FP2+set">.set(c, d)</a></li>
-<li><a href="#FP2+seta">.seta(c)</a></li>
-<li><a href="#FP2+bset">.bset(c, d)</a></li>
-<li><a href="#FP2+bseta">.bseta(c)</a></li>
-<li><a href="#FP2+copy">.copy(x)</a></li>
-<li><a href="#FP2+zero">.zero()</a></li>
-<li><a href="#FP2+one">.one(x)</a></li>
-<li><a href="#FP2+neg">.neg(x)</a></li>
-<li><a href="#FP2+conj">.conj()</a></li>
-<li><a href="#FP2+add">.add(x)</a></li>
-<li><a href="#FP2+sub">.sub(x)</a></li>
-<li><a href="#FP2+pmul">.pmul(s)</a></li>
-<li><a href="#FP2+imul">.imul(s)</a></li>
-<li><a href="#FP2+sqr">.sqr()</a></li>
-<li><a href="#FP2+mul">.mul(y)</a></li>
-<li><a href="#FP2+sqrt">.sqrt()</a> ⇒</li>
-<li><a href="#FP2+toString">.toString()</a></li>
-<li><a href="#FP2+inverse">.inverse()</a></li>
-<li><a href="#FP2+div2">.div2()</a></li>
-<li><a href="#FP2+times_i">.times_i()</a></li>
-<li><a href="#FP2+mul_ip">.mul_ip()</a></li>
-<li><a href="#FP2+div_ip2">.div_ip2()</a></li>
-<li><a href="#FP2+div_ip">.div_ip()</a></li>
-<li><a href="#FP2+pow">.pow(e)</a></li>
-</ul></li>
-</ul>
-<p><a name="new_FP2_new"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="new-fp2"></a><a href="#new-fp2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>new FP2()</h3>
-<p>Creates an instance of FP2.</p>
-<p><a name="FP2+reduce"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp2reduce"></a><a href="#fp2reduce" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP2.reduce()</h3>
-<p>Reduces all components of possibly unreduced FP2 mod Modulus</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a>  <br>
-<strong>this</strong>: <code>{FP2}</code>  <br>
-<a name="FP2+norm"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp2norm"></a><a href="#fp2norm" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP2.norm()</h3>
-<p>Normalises the components of an FP2</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a>  <br>
-<strong>this</strong>: <code>{FP2}</code>  <br>
-<a name="FP2+iszilch"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp2iszilch"></a><a href="#fp2iszilch" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP2.iszilch()</h3>
-<p>Tests for FP2 equal to zero</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a>  <br>
-<strong>this</strong>: <code>{FP2}</code>  <br>
-<a name="FP2+isunity"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp2isunity"></a><a href="#fp2isunity" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP2.isunity()</h3>
-<p>Tests for FP2 equal to unity</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a>  <br>
-<strong>this</strong>: <code>{FP2}</code>  <br>
-<a name="FP2+cmove"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp2cmoveg-d"></a><a href="#fp2cmoveg-d" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP2.cmove(g, d)</h3>
-<p>Conditional copy of FP2 number</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a>  <br>
-<strong>this</strong>: <code>{FP2}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>g</td><td>FP2 instance</td></tr>
-<tr><td>d</td><td>copy depends on this value</td></tr>
-</tbody>
-</table>
-<p><a name="FP2+equals"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp2equalsx"></a><a href="#fp2equalsx" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP2.equals(x)</h3>
-<p>Tests for equality of two FP2 instances</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a>  <br>
-<strong>this</strong>: <code>{FP2}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>x</td><td>FP2 instance to compare</td></tr>
-</tbody>
-</table>
-<p><a name="FP2+getA"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp2geta"></a><a href="#fp2geta" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP2.getA()</h3>
-<p>extract a from this</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a>  <br>
-<strong>this</strong>: <code>{FP2}</code>  <br>
-<a name="FP2+getB"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp2getb"></a><a href="#fp2getb" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP2.getB()</h3>
-<p>extract b from this</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a>  <br>
-<strong>this</strong>: <code>{FP2}</code>  <br>
-<a name="FP2+set"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp2setc-d"></a><a href="#fp2setc-d" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP2.set(c, d)</h3>
-<p>Set FP2 from two FP values</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a>  <br>
-<strong>this</strong>: <code>{FP2}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>c</td><td>FP instance</td></tr>
-<tr><td>d</td><td>FP instance</td></tr>
-</tbody>
-</table>
-<p><a name="FP2+seta"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp2setac"></a><a href="#fp2setac" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP2.seta(c)</h3>
-<p>Set FP2 from one FP value</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a>  <br>
-<strong>this</strong>: <code>{FP2}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>c</td><td>FP instance</td></tr>
-</tbody>
-</table>
-<p><a name="FP2+bset"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp2bsetc-d"></a><a href="#fp2bsetc-d" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP2.bset(c, d)</h3>
-<p>Set FP2 from two BIG values</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a>  <br>
-<strong>this</strong>: <code>{FP2}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>c</td><td>BIG instance</td></tr>
-<tr><td>d</td><td>BIG instance</td></tr>
-</tbody>
-</table>
-<p><a name="FP2+bseta"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp2bsetac"></a><a href="#fp2bsetac" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP2.bseta(c)</h3>
-<p>Set FP2 from one BIG value</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a>  <br>
-<strong>this</strong>: <code>{FP2}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>c</td><td>BIG instance</td></tr>
-</tbody>
-</table>
-<p><a name="FP2+copy"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp2copyx"></a><a href="#fp2copyx" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP2.copy(x)</h3>
-<p>Copy FP2 to another FP2</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a>  <br>
-<strong>this</strong>: <code>{FP2}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>x</td><td>FP2 instance to be copied</td></tr>
-</tbody>
-</table>
-<p><a name="FP2+zero"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp2zero"></a><a href="#fp2zero" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP2.zero()</h3>
-<p>Set FP2 to zero</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a>  <br>
-<strong>this</strong>: <code>{FP2}</code>  <br>
-<a name="FP2+one"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp2onex"></a><a href="#fp2onex" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP2.one(x)</h3>
-<p>Set FP2 to unity</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a>  <br>
-<strong>this</strong>: <code>{FP2}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>x</td><td>FP2 instance to be set to one</td></tr>
-</tbody>
-</table>
-<p><a name="FP2+neg"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp2negx"></a><a href="#fp2negx" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP2.neg(x)</h3>
-<p>negate this</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a>  <br>
-<strong>this</strong>: <code>{FP2}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>x</td><td>FP2 instance to be set to one</td></tr>
-</tbody>
-</table>
-<p><a name="FP2+conj"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp2conj"></a><a href="#fp2conj" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP2.conj()</h3>
-<p>Conjugation of FP2</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a>  <br>
-<strong>this</strong>: <code>{FP2}</code>  <br>
-<a name="FP2+add"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp2addx"></a><a href="#fp2addx" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP2.add(x)</h3>
-<p>addition of two FP2s</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a>  <br>
-<strong>this</strong>: <code>{FP2}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>x</td><td>FP2 instance</td></tr>
-</tbody>
-</table>
-<p><a name="FP2+sub"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp2subx"></a><a href="#fp2subx" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP2.sub(x)</h3>
-<p>subtraction of two FP2s</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a>  <br>
-<strong>this</strong>: <code>{FP2}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>x</td><td>FP2 instance</td></tr>
-</tbody>
-</table>
-<p><a name="FP2+pmul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp2pmuls"></a><a href="#fp2pmuls" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP2.pmul(s)</h3>
-<p>Multiplication of an FP2 by an FP8</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a>  <br>
-<strong>this</strong>: <code>{FP2}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>s</td><td>FP8 instance</td></tr>
-</tbody>
-</table>
-<p><a name="FP2+imul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp2imuls"></a><a href="#fp2imuls" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP2.imul(s)</h3>
-<p>Multiplication of an FP2 by a small integer</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a>  <br>
-<strong>this</strong>: <code>{FP2}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>s</td><td>integer</td></tr>
-</tbody>
-</table>
-<p><a name="FP2+sqr"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp2sqr"></a><a href="#fp2sqr" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP2.sqr()</h3>
-<p>Fast Squaring of an FP2</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a>  <br>
-<strong>this</strong>: <code>{FP2}</code>  <br>
-<a name="FP2+mul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp2muly"></a><a href="#fp2muly" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP2.mul(y)</h3>
-<p>Full unconditional Multiplication of two FP2s</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a>  <br>
-<strong>this</strong>: <code>{FP2}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>y</td><td>FP2 instance, the multiplier</td></tr>
-</tbody>
-</table>
-<p><a name="FP2+sqrt"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp2sqrt-"></a><a href="#fp2sqrt-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP2.sqrt() ⇒</h3>
-<p>sqrt(a+ib) = sqrt(a+sqrt(a<em>a-n</em>b<em>b)/2)+ib/(2</em>sqrt(a+sqrt(a<em>a-n</em>b*b)/2))</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a>  <br>
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/amcl-overview">AMCL Library</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-overview">AMCL Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API 1.0.0</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/aes">AES</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/big">BIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls">BLS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls192">BLS192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls256">BLS256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/dbig">DBIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp">ECP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ff">FF</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp">FP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/cryptojs/fp2">FP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp4">FP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp8">FP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp12">FP12</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp16">FP16</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp24">FP24</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp48">FP48</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/gcm">GCM</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash256">HASH256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash384">HASH384</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash512">HASH512</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin">MPIN</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair">PAIR</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rand">RAND</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rsa">RSA</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/sha3">SHA3</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/unit64">UInt64</a></li></ul></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL Library</span><meta itemprop="position" content="1"></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL JavaScript API 1.0.0</span><meta itemprop="position" content="2"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">FP2</span><meta itemprop="position" content="3"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>FP2</h1></header><a name="FP2"></a><h2 class="anchor anchorWithStickyNavbar_LWe7" id="fp2">FP2<a class="hash-link" href="#fp2" title="Direct link to heading">​</a></h2><p><strong>Kind</strong>: global class<br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP2{&quot;}&quot;}</code>  </p><ul><li><a href="#FP2">FP2</a><ul><li><a href="#new_FP2_new">new FP2()</a></li><li><a href="#FP2+reduce">.reduce()</a></li><li><a href="#FP2+norm">.norm()</a></li><li><a href="#FP2+iszilch">.iszilch()</a></li><li><a href="#FP2+isunity">.isunity()</a></li><li><a href="#FP2+cmove">.cmove(g, d)</a></li><li><a href="#FP2+equals">.equals(x)</a></li><li><a href="#FP2+getA">.getA()</a></li><li><a href="#FP2+getB">.getB()</a></li><li><a href="#FP2+set">.set(c, d)</a></li><li><a href="#FP2+seta">.seta(c)</a></li><li><a href="#FP2+bset">.bset(c, d)</a></li><li><a href="#FP2+bseta">.bseta(c)</a></li><li><a href="#FP2+copy">.copy(x)</a></li><li><a href="#FP2+zero">.zero()</a></li><li><a href="#FP2+one">.one(x)</a></li><li><a href="#FP2+neg">.neg(x)</a></li><li><a href="#FP2+conj">.conj()</a></li><li><a href="#FP2+add">.add(x)</a></li><li><a href="#FP2+sub">.sub(x)</a></li><li><a href="#FP2+pmul">.pmul(s)</a></li><li><a href="#FP2+imul">.imul(s)</a></li><li><a href="#FP2+sqr">.sqr()</a></li><li><a href="#FP2+mul">.mul(y)</a></li><li><a href="#FP2+sqrt">.sqrt()</a> ⇒</li><li><a href="#FP2+toString">.toString()</a></li><li><a href="#FP2+inverse">.inverse()</a></li><li><a href="#FP2+div2">.div2()</a></li><li><a href="#FP2+times_i">.times_i()</a></li><li><a href="#FP2+mul_ip">.mul_ip()</a></li><li><a href="#FP2+div_ip2">.div_ip2()</a></li><li><a href="#FP2+div_ip">.div_ip()</a></li><li><a href="#FP2+pow">.pow(e)</a></li></ul></li></ul><a name="new_FP2_new"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="new-fp2">new FP2()<a class="hash-link" href="#new-fp2" title="Direct link to heading">​</a></h3><p>Creates an instance of FP2.</p><a name="FP2+reduce"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp2reduce">fP2.reduce()<a class="hash-link" href="#fp2reduce" title="Direct link to heading">​</a></h3><p>Reduces all components of possibly unreduced FP2 mod Modulus</p><p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP2{&quot;}&quot;}</code>  </p><a name="FP2+norm"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp2norm">fP2.norm()<a class="hash-link" href="#fp2norm" title="Direct link to heading">​</a></h3><p>Normalises the components of an FP2</p><p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP2{&quot;}&quot;}</code>  </p><a name="FP2+iszilch"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp2iszilch">fP2.iszilch()<a class="hash-link" href="#fp2iszilch" title="Direct link to heading">​</a></h3><p>Tests for FP2 equal to zero</p><p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP2{&quot;}&quot;}</code>  </p><a name="FP2+isunity"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp2isunity">fP2.isunity()<a class="hash-link" href="#fp2isunity" title="Direct link to heading">​</a></h3><p>Tests for FP2 equal to unity</p><p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP2{&quot;}&quot;}</code>  </p><a name="FP2+cmove"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp2cmoveg-d">fP2.cmove(g, d)<a class="hash-link" href="#fp2cmoveg-d" title="Direct link to heading">​</a></h3><p>Conditional copy of FP2 number</p><p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP2{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>g</td><td>FP2 instance</td></tr><tr><td>d</td><td>copy depends on this value</td></tr></tbody></table><a name="FP2+equals"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp2equalsx">fP2.equals(x)<a class="hash-link" href="#fp2equalsx" title="Direct link to heading">​</a></h3><p>Tests for equality of two FP2 instances</p><p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP2{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>x</td><td>FP2 instance to compare</td></tr></tbody></table><a name="FP2+getA"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp2geta">fP2.getA()<a class="hash-link" href="#fp2geta" title="Direct link to heading">​</a></h3><p>extract a from this</p><p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP2{&quot;}&quot;}</code>  </p><a name="FP2+getB"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp2getb">fP2.getB()<a class="hash-link" href="#fp2getb" title="Direct link to heading">​</a></h3><p>extract b from this</p><p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP2{&quot;}&quot;}</code>  </p><a name="FP2+set"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp2setc-d">fP2.set(c, d)<a class="hash-link" href="#fp2setc-d" title="Direct link to heading">​</a></h3><p>Set FP2 from two FP values</p><p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP2{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>c</td><td>FP instance</td></tr><tr><td>d</td><td>FP instance</td></tr></tbody></table><a name="FP2+seta"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp2setac">fP2.seta(c)<a class="hash-link" href="#fp2setac" title="Direct link to heading">​</a></h3><p>Set FP2 from one FP value</p><p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP2{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>c</td><td>FP instance</td></tr></tbody></table><a name="FP2+bset"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp2bsetc-d">fP2.bset(c, d)<a class="hash-link" href="#fp2bsetc-d" title="Direct link to heading">​</a></h3><p>Set FP2 from two BIG values</p><p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP2{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>c</td><td>BIG instance</td></tr><tr><td>d</td><td>BIG instance</td></tr></tbody></table><a name="FP2+bseta"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp2bsetac">fP2.bseta(c)<a class="hash-link" href="#fp2bsetac" title="Direct link to heading">​</a></h3><p>Set FP2 from one BIG value</p><p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP2{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>c</td><td>BIG instance</td></tr></tbody></table><a name="FP2+copy"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp2copyx">fP2.copy(x)<a class="hash-link" href="#fp2copyx" title="Direct link to heading">​</a></h3><p>Copy FP2 to another FP2</p><p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP2{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>x</td><td>FP2 instance to be copied</td></tr></tbody></table><a name="FP2+zero"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp2zero">fP2.zero()<a class="hash-link" href="#fp2zero" title="Direct link to heading">​</a></h3><p>Set FP2 to zero</p><p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP2{&quot;}&quot;}</code>  </p><a name="FP2+one"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp2onex">fP2.one(x)<a class="hash-link" href="#fp2onex" title="Direct link to heading">​</a></h3><p>Set FP2 to unity</p><p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP2{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>x</td><td>FP2 instance to be set to one</td></tr></tbody></table><a name="FP2+neg"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp2negx">fP2.neg(x)<a class="hash-link" href="#fp2negx" title="Direct link to heading">​</a></h3><p>negate this</p><p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP2{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>x</td><td>FP2 instance to be set to one</td></tr></tbody></table><a name="FP2+conj"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp2conj">fP2.conj()<a class="hash-link" href="#fp2conj" title="Direct link to heading">​</a></h3><p>Conjugation of FP2</p><p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP2{&quot;}&quot;}</code>  </p><a name="FP2+add"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp2addx">fP2.add(x)<a class="hash-link" href="#fp2addx" title="Direct link to heading">​</a></h3><p>addition of two FP2s</p><p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP2{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>x</td><td>FP2 instance</td></tr></tbody></table><a name="FP2+sub"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp2subx">fP2.sub(x)<a class="hash-link" href="#fp2subx" title="Direct link to heading">​</a></h3><p>subtraction of two FP2s</p><p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP2{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>x</td><td>FP2 instance</td></tr></tbody></table><a name="FP2+pmul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp2pmuls">fP2.pmul(s)<a class="hash-link" href="#fp2pmuls" title="Direct link to heading">​</a></h3><p>Multiplication of an FP2 by an FP8</p><p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP2{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>s</td><td>FP8 instance</td></tr></tbody></table><a name="FP2+imul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp2imuls">fP2.imul(s)<a class="hash-link" href="#fp2imuls" title="Direct link to heading">​</a></h3><p>Multiplication of an FP2 by a small integer</p><p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP2{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>s</td><td>integer</td></tr></tbody></table><a name="FP2+sqr"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp2sqr">fP2.sqr()<a class="hash-link" href="#fp2sqr" title="Direct link to heading">​</a></h3><p>Fast Squaring of an FP2</p><p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP2{&quot;}&quot;}</code>  </p><a name="FP2+mul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp2muly">fP2.mul(y)<a class="hash-link" href="#fp2muly" title="Direct link to heading">​</a></h3><p>Full unconditional Multiplication of two FP2s</p><p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP2{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>y</td><td>FP2 instance, the multiplier</td></tr></tbody></table><a name="FP2+sqrt"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp2sqrt-">fP2.sqrt() ⇒<a class="hash-link" href="#fp2sqrt-" title="Direct link to heading">​</a></h3><p>sqrt(a+ib) = sqrt(a+sqrt(a_a-n_b_b)/2)+ib/(2_sqrt(a+sqrt(a_a-n_b<!-- -->*<!-- -->b)/2))</p><p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a><br>
 <strong>Returns</strong>: true if this is QR<br>
-<strong>this</strong>: <code>{FP2}</code>  <br>
-<a name="FP2+toString"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp2tostring"></a><a href="#fp2tostring" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP2.toString()</h3>
-<p>convert this to hex string</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a>  <br>
-<strong>this</strong>: <code>{FP2}</code>  <br>
-<a name="FP2+inverse"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp2inverse"></a><a href="#fp2inverse" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP2.inverse()</h3>
-<p>Inverting an FP2</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a>  <br>
-<strong>this</strong>: <code>{FP2}</code>  <br>
-<a name="FP2+div2"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp2div2"></a><a href="#fp2div2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP2.div2()</h3>
-<p>Divide an FP2 by 2</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a>  <br>
-<strong>this</strong>: <code>{FP2}</code>  <br>
-<a name="FP2+times_i"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp2times_i"></a><a href="#fp2times_i" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP2.times_i()</h3>
-<p>Multiply an FP2 by sqrt(-1)</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a>  <br>
-<strong>this</strong>: <code>{FP2}</code>  <br>
-<a name="FP2+mul_ip"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp2mul_ip"></a><a href="#fp2mul_ip" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP2.mul_ip()</h3>
-<p>Multiply an FP2 by (1+sqrt(-1))</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a>  <br>
-<strong>this</strong>: <code>{FP2}</code>  <br>
-<a name="FP2+div_ip2"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp2div_ip2"></a><a href="#fp2div_ip2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP2.div_ip2()</h3>
-<p>Divide an FP2 by (1+sqrt(-1))/2</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a>  <br>
-<strong>this</strong>: <code>{FP2}</code>  <br>
-<a name="FP2+div_ip"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp2div_ip"></a><a href="#fp2div_ip" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP2.div_ip()</h3>
-<p>Divide an FP2 by (1+sqrt(-1))</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a>  <br>
-<strong>this</strong>: <code>{FP2}</code>  <br>
-<a name="FP2+pow"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp2powe"></a><a href="#fp2powe" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP2.pow(e)</h3>
-<p>Raises an FP2 to the power of a BIG</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a>  <br>
-<strong>this</strong>: <code>{FP2}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>e</td><td>BIG instance exponent</td></tr>
-</tbody>
-</table>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/cryptojs/fp"><span class="arrow-prev">← </span><span>FP</span></a><a class="docs-next button" href="/docs/cryptojs/fp4"><span>FP4</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#fp2">FP2</a><ul class="toc-headings"><li><a href="#new-fp2">new FP2()</a></li><li><a href="#fp2reduce">fP2.reduce()</a></li><li><a href="#fp2norm">fP2.norm()</a></li><li><a href="#fp2iszilch">fP2.iszilch()</a></li><li><a href="#fp2isunity">fP2.isunity()</a></li><li><a href="#fp2cmoveg-d">fP2.cmove(g, d)</a></li><li><a href="#fp2equalsx">fP2.equals(x)</a></li><li><a href="#fp2geta">fP2.getA()</a></li><li><a href="#fp2getb">fP2.getB()</a></li><li><a href="#fp2setc-d">fP2.set(c, d)</a></li><li><a href="#fp2setac">fP2.seta(c)</a></li><li><a href="#fp2bsetc-d">fP2.bset(c, d)</a></li><li><a href="#fp2bsetac">fP2.bseta(c)</a></li><li><a href="#fp2copyx">fP2.copy(x)</a></li><li><a href="#fp2zero">fP2.zero()</a></li><li><a href="#fp2onex">fP2.one(x)</a></li><li><a href="#fp2negx">fP2.neg(x)</a></li><li><a href="#fp2conj">fP2.conj()</a></li><li><a href="#fp2addx">fP2.add(x)</a></li><li><a href="#fp2subx">fP2.sub(x)</a></li><li><a href="#fp2pmuls">fP2.pmul(s)</a></li><li><a href="#fp2imuls">fP2.imul(s)</a></li><li><a href="#fp2sqr">fP2.sqr()</a></li><li><a href="#fp2muly">fP2.mul(y)</a></li><li><a href="#fp2sqrt-">fP2.sqrt() ⇒</a></li><li><a href="#fp2tostring">fP2.toString()</a></li><li><a href="#fp2inverse">fP2.inverse()</a></li><li><a href="#fp2div2">fP2.div2()</a></li><li><a href="#fp2times_i">fP2.times_i()</a></li><li><a href="#fp2mul_ip">fP2.mul_ip()</a></li><li><a href="#fp2div_ip2">fP2.div_ip2()</a></li><li><a href="#fp2div_ip">fP2.div_ip()</a></li><li><a href="#fp2powe">fP2.pow(e)</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<strong>this</strong>: <code>{&quot;{&quot;}FP2{&quot;}&quot;}</code>  </p><a name="FP2+toString"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp2tostring">fP2.toString()<a class="hash-link" href="#fp2tostring" title="Direct link to heading">​</a></h3><p>convert this to hex string</p><p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP2{&quot;}&quot;}</code>  </p><a name="FP2+inverse"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp2inverse">fP2.inverse()<a class="hash-link" href="#fp2inverse" title="Direct link to heading">​</a></h3><p>Inverting an FP2</p><p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP2{&quot;}&quot;}</code>  </p><a name="FP2+div2"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp2div2">fP2.div2()<a class="hash-link" href="#fp2div2" title="Direct link to heading">​</a></h3><p>Divide an FP2 by 2</p><p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP2{&quot;}&quot;}</code>  </p><a name="FP2+times_i"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp2times_i">fP2.times_i()<a class="hash-link" href="#fp2times_i" title="Direct link to heading">​</a></h3><p>Multiply an FP2 by sqrt(-1)</p><p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP2{&quot;}&quot;}</code>  </p><a name="FP2+mul_ip"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp2mul_ip">fP2.mul_ip()<a class="hash-link" href="#fp2mul_ip" title="Direct link to heading">​</a></h3><p>Multiply an FP2 by (1+sqrt(-1))</p><p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP2{&quot;}&quot;}</code>  </p><a name="FP2+div_ip2"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp2div_ip2">fP2.div_ip2()<a class="hash-link" href="#fp2div_ip2" title="Direct link to heading">​</a></h3><p>Divide an FP2 by (1+sqrt(-1))/2</p><p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP2{&quot;}&quot;}</code>  </p><a name="FP2+div_ip"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp2div_ip">fP2.div_ip()<a class="hash-link" href="#fp2div_ip" title="Direct link to heading">​</a></h3><p>Divide an FP2 by (1+sqrt(-1))</p><p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP2{&quot;}&quot;}</code>  </p><a name="FP2+pow"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp2powe">fP2.pow(e)<a class="hash-link" href="#fp2powe" title="Direct link to heading">​</a></h3><p>Raises an FP2 to the power of a BIG</p><p><strong>Kind</strong>: instance method of <a href="#FP2"><code>FP2</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP2{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>e</td><td>BIG instance exponent</td></tr></tbody></table></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/cryptojs/fp"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">FP</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/cryptojs/fp4"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">FP4</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#fp2" class="table-of-contents__link toc-highlight">FP2</a><ul><li><a href="#new-fp2" class="table-of-contents__link toc-highlight">new FP2()</a></li><li><a href="#fp2reduce" class="table-of-contents__link toc-highlight">fP2.reduce()</a></li><li><a href="#fp2norm" class="table-of-contents__link toc-highlight">fP2.norm()</a></li><li><a href="#fp2iszilch" class="table-of-contents__link toc-highlight">fP2.iszilch()</a></li><li><a href="#fp2isunity" class="table-of-contents__link toc-highlight">fP2.isunity()</a></li><li><a href="#fp2cmoveg-d" class="table-of-contents__link toc-highlight">fP2.cmove(g, d)</a></li><li><a href="#fp2equalsx" class="table-of-contents__link toc-highlight">fP2.equals(x)</a></li><li><a href="#fp2geta" class="table-of-contents__link toc-highlight">fP2.getA()</a></li><li><a href="#fp2getb" class="table-of-contents__link toc-highlight">fP2.getB()</a></li><li><a href="#fp2setc-d" class="table-of-contents__link toc-highlight">fP2.set(c, d)</a></li><li><a href="#fp2setac" class="table-of-contents__link toc-highlight">fP2.seta(c)</a></li><li><a href="#fp2bsetc-d" class="table-of-contents__link toc-highlight">fP2.bset(c, d)</a></li><li><a href="#fp2bsetac" class="table-of-contents__link toc-highlight">fP2.bseta(c)</a></li><li><a href="#fp2copyx" class="table-of-contents__link toc-highlight">fP2.copy(x)</a></li><li><a href="#fp2zero" class="table-of-contents__link toc-highlight">fP2.zero()</a></li><li><a href="#fp2onex" class="table-of-contents__link toc-highlight">fP2.one(x)</a></li><li><a href="#fp2negx" class="table-of-contents__link toc-highlight">fP2.neg(x)</a></li><li><a href="#fp2conj" class="table-of-contents__link toc-highlight">fP2.conj()</a></li><li><a href="#fp2addx" class="table-of-contents__link toc-highlight">fP2.add(x)</a></li><li><a href="#fp2subx" class="table-of-contents__link toc-highlight">fP2.sub(x)</a></li><li><a href="#fp2pmuls" class="table-of-contents__link toc-highlight">fP2.pmul(s)</a></li><li><a href="#fp2imuls" class="table-of-contents__link toc-highlight">fP2.imul(s)</a></li><li><a href="#fp2sqr" class="table-of-contents__link toc-highlight">fP2.sqr()</a></li><li><a href="#fp2muly" class="table-of-contents__link toc-highlight">fP2.mul(y)</a></li><li><a href="#fp2sqrt-" class="table-of-contents__link toc-highlight">fP2.sqrt() ⇒</a></li><li><a href="#fp2tostring" class="table-of-contents__link toc-highlight">fP2.toString()</a></li><li><a href="#fp2inverse" class="table-of-contents__link toc-highlight">fP2.inverse()</a></li><li><a href="#fp2div2" class="table-of-contents__link toc-highlight">fP2.div2()</a></li><li><a href="#fp2times_i" class="table-of-contents__link toc-highlight">fP2.times_i()</a></li><li><a href="#fp2mul_ip" class="table-of-contents__link toc-highlight">fP2.mul_ip()</a></li><li><a href="#fp2div_ip2" class="table-of-contents__link toc-highlight">fP2.div_ip2()</a></li><li><a href="#fp2div_ip" class="table-of-contents__link toc-highlight">fP2.div_ip()</a></li><li><a href="#fp2powe" class="table-of-contents__link toc-highlight">fP2.pow(e)</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/cryptojs/fp24/index.html b/docs/cryptojs/fp24/index.html
index 5d2a826..51e3067 100644
--- a/docs/cryptojs/fp24/index.html
+++ b/docs/cryptojs/fp24/index.html
@@ -1,393 +1,55 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>FP24 · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;a name=&quot;FP24&quot;&gt;&lt;/a&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="FP24 · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;a name=&quot;FP24&quot;&gt;&lt;/a&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>AMCL JavaScript API 1.0.0</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-cryptojs/fp24">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">FP24 | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/cryptojs/fp24"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="FP24 | Apache Milagro"><meta data-rh="true" name="description" content="FP24"><meta data-rh="true" property="og:description" content="FP24"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/cryptojs/fp24"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/fp24" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/fp24" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">FP24</h1></header><article><div><span><p><a name="FP24"></a></p>
-<h2><a class="anchor" aria-hidden="true" id="fp24"></a><a href="#fp24" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>FP24</h2>
-<p><strong>Kind</strong>: global class<br>
-<strong>this</strong>: <code>{FP24}</code></p>
-<ul>
-<li><a href="#FP24">FP24</a>
-<ul>
-<li><a href="#new_FP24_new">new FP24()</a></li>
-<li><em>instance</em>
-<ul>
-<li><a href="#FP24+reduce">.reduce()</a></li>
-<li><a href="#FP24+norm">.norm()</a></li>
-<li><a href="#FP24+iszilch">.iszilch()</a></li>
-<li><a href="#FP24+isunity">.isunity()</a></li>
-<li><a href="#FP24+cmove">.cmove(g, d)</a></li>
-<li><a href="#FP24+select">.select()</a></li>
-<li><a href="#FP24+geta">.geta()</a></li>
-<li><a href="#FP24+getb">.getb()</a></li>
-<li><a href="#FP24+getc">.getc()</a></li>
-<li><a href="#FP24+equals">.equals(x)</a></li>
-<li><a href="#FP24+copy">.copy(x)</a></li>
-<li><a href="#FP24+one">.one(x)</a></li>
-<li><a href="#FP24+zero">.zero()</a></li>
-<li><a href="#FP24+conj">.conj()</a></li>
-<li><a href="#FP24+set">.set(d, e, f)</a></li>
-<li><a href="#FP24+seta">.seta(c)</a></li>
-<li><a href="#FP24+usqr">.usqr()</a></li>
-<li><a href="#FP24+sqr">.sqr()</a></li>
-<li><a href="#FP24+mul">.mul(y)</a></li>
-<li><a href="#FP24+smul">.smul(y)</a></li>
-<li><a href="#FP24+ssmul">.ssmul(y)</a></li>
-<li><a href="#FP24+inverse">.inverse()</a></li>
-<li><a href="#FP24+frob">.frob(f)</a></li>
-<li><a href="#FP24+trace">.trace()</a></li>
-<li><a href="#FP24+toString">.toString()</a></li>
-<li><a href="#FP24+toBytes">.toBytes(w)</a></li>
-<li><a href="#FP24+pow">.pow(e)</a></li>
-<li><a href="#FP24+pinpow">.pinpow(e, bts)</a></li>
-<li><a href="#FP24+compow">.compow(e, r)</a></li>
-</ul></li>
-<li><em>static</em>
-<ul>
-<li><a href="#FP24.fromBytes">.fromBytes(w)</a></li>
-<li><a href="#FP24.teq">.teq()</a></li>
-<li><a href="#FP24.pow8">.pow8()</a></li>
-</ul></li>
-</ul></li>
-</ul>
-<p><a name="new_FP24_new"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="new-fp24"></a><a href="#new-fp24" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>new FP24()</h3>
-<p>Creates an instance of FP24.</p>
-<p><a name="FP24+reduce"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp24reduce"></a><a href="#fp24reduce" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP24.reduce()</h3>
-<p>Reduces all components of possibly unreduced FP24 mod Modulus</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a>  <br>
-<strong>this</strong>: <code>{FP24}</code>  <br>
-<a name="FP24+norm"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp24norm"></a><a href="#fp24norm" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP24.norm()</h3>
-<p>Normalises the components of an FP24</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a>  <br>
-<strong>this</strong>: <code>{FP24}</code>  <br>
-<a name="FP24+iszilch"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp24iszilch"></a><a href="#fp24iszilch" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP24.iszilch()</h3>
-<p>Tests for FP24 equal to zero</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a>  <br>
-<strong>this</strong>: <code>{FP24}</code>  <br>
-<a name="FP24+isunity"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp24isunity"></a><a href="#fp24isunity" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP24.isunity()</h3>
-<p>Tests for FP24 equal to unity</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a>  <br>
-<strong>this</strong>: <code>{FP24}</code>  <br>
-<a name="FP24+cmove"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp24cmoveg-d"></a><a href="#fp24cmoveg-d" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP24.cmove(g, d)</h3>
-<p>Conditional copy of FP24 number</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a>  <br>
-<strong>this</strong>: <code>{FP24}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>g</td><td>FP24 instance</td></tr>
-<tr><td>d</td><td>copy depends on this value</td></tr>
-</tbody>
-</table>
-<p><a name="FP24+select"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp24select"></a><a href="#fp24select" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP24.select()</h3>
-<p>Constant time select from pre-computed table</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a>  <br>
-<strong>this</strong>: <code>{FP24}</code>  <br>
-<a name="FP24+geta"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp24geta"></a><a href="#fp24geta" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP24.geta()</h3>
-<p>extract a from this</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a>  <br>
-<strong>this</strong>: <code>{FP24}</code>  <br>
-<a name="FP24+getb"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp24getb"></a><a href="#fp24getb" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP24.getb()</h3>
-<p>extract b from this</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a>  <br>
-<strong>this</strong>: <code>{FP24}</code>  <br>
-<a name="FP24+getc"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp24getc"></a><a href="#fp24getc" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP24.getc()</h3>
-<p>extract c from this</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a>  <br>
-<strong>this</strong>: <code>{FP24}</code>  <br>
-<a name="FP24+equals"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp24equalsx"></a><a href="#fp24equalsx" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP24.equals(x)</h3>
-<p>Tests for equality of two FP24s</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a>  <br>
-<strong>this</strong>: <code>{FP24}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>x</td><td>FP24 instance to compare</td></tr>
-</tbody>
-</table>
-<p><a name="FP24+copy"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp24copyx"></a><a href="#fp24copyx" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP24.copy(x)</h3>
-<p>Copy FP24 to another FP24</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a>  <br>
-<strong>this</strong>: <code>{FP24}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>x</td><td>FP24 instance to be copied</td></tr>
-</tbody>
-</table>
-<p><a name="FP24+one"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp24onex"></a><a href="#fp24onex" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP24.one(x)</h3>
-<p>Set FP24 to unity</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a>  <br>
-<strong>this</strong>: <code>{FP24}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>x</td><td>FP24 instance to be set to one</td></tr>
-</tbody>
-</table>
-<p><a name="FP24+zero"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp24zero"></a><a href="#fp24zero" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP24.zero()</h3>
-<p>Set FP24 to zero</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a>  <br>
-<strong>this</strong>: <code>{FP24}</code>  <br>
-<a name="FP24+conj"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp24conj"></a><a href="#fp24conj" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP24.conj()</h3>
-<p>Conjugation of FP24</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a>  <br>
-<strong>this</strong>: <code>{FP24}</code>  <br>
-<a name="FP24+set"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp24setd-e-f"></a><a href="#fp24setd-e-f" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP24.set(d, e, f)</h3>
-<p>Set FP24 from three FP8 values</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a>  <br>
-<strong>this</strong>: <code>{FP24}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>d</td><td>FP8 instance</td></tr>
-<tr><td>e</td><td>FP8 instance</td></tr>
-<tr><td>f</td><td>FP8 instance</td></tr>
-</tbody>
-</table>
-<p><a name="FP24+seta"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp24setac"></a><a href="#fp24setac" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP24.seta(c)</h3>
-<p>Set FP24 from one FP8 value</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a>  <br>
-<strong>this</strong>: <code>{FP24}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>c</td><td>FP8 instance</td></tr>
-</tbody>
-</table>
-<p><a name="FP24+usqr"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp24usqr"></a><a href="#fp24usqr" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP24.usqr()</h3>
-<p>Fast Squaring of an FP24 in &quot;unitary&quot; form</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a>  <br>
-<strong>this</strong>: <code>{FP24}</code>  <br>
-<a name="FP24+sqr"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp24sqr"></a><a href="#fp24sqr" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP24.sqr()</h3>
-<p>Fast Squaring of an FP24</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a>  <br>
-<strong>this</strong>: <code>{FP24}</code>  <br>
-<a name="FP24+mul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp24muly"></a><a href="#fp24muly" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP24.mul(y)</h3>
-<p>Full unconditional Multiplication of two FP24s</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a>  <br>
-<strong>this</strong>: <code>{FP24}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>y</td><td>FP24 instance, the multiplier</td></tr>
-</tbody>
-</table>
-<p><a name="FP24+smul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp24smuly"></a><a href="#fp24smuly" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP24.smul(y)</h3>
-<p>Fast multiplication of two sparse FP24s that arises from ATE pairing line functions</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a>  <br>
-<strong>this</strong>: <code>{FP24}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>y</td><td>FP24 instance, the multiplier</td></tr>
-</tbody>
-</table>
-<p><a name="FP24+ssmul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp24ssmuly"></a><a href="#fp24ssmuly" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP24.ssmul(y)</h3>
-<p>Fast multiplication of what may be sparse multiplicands</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a>  <br>
-<strong>this</strong>: <code>{FP24}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>y</td><td>FP24 instance, the multiplier</td></tr>
-</tbody>
-</table>
-<p><a name="FP24+inverse"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp24inverse"></a><a href="#fp24inverse" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP24.inverse()</h3>
-<p>Inverting an FP24</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a>  <br>
-<strong>this</strong>: <code>{FP24}</code>  <br>
-<a name="FP24+frob"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp24frobf"></a><a href="#fp24frobf" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP24.frob(f)</h3>
-<p>Raises an FP24 to the power of the internal modulus p, using the Frobenius</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a>  <br>
-<strong>this</strong>: <code>{FP24}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>f</td><td>Modulus</td></tr>
-</tbody>
-</table>
-<p><a name="FP24+trace"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp24trace"></a><a href="#fp24trace" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP24.trace()</h3>
-<p>Calculate the trace of an FP24</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a>  <br>
-<strong>this</strong>: <code>{FP24}</code>  <br>
-<a name="FP24+toString"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp24tostring"></a><a href="#fp24tostring" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP24.toString()</h3>
-<p>convert this to hex string</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a>  <br>
-<strong>this</strong>: <code>{FP24}</code>  <br>
-<a name="FP24+toBytes"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp24tobytesw"></a><a href="#fp24tobytesw" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP24.toBytes(w)</h3>
-<p>convert this to byte array</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a>  <br>
-<strong>this</strong>: <code>{FP24}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>w</td><td>Byte array</td></tr>
-</tbody>
-</table>
-<p><a name="FP24+pow"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp24powe"></a><a href="#fp24powe" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP24.pow(e)</h3>
-<p>Raises an FP24 to the power of a BIG</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a>  <br>
-<strong>this</strong>: <code>{FP24}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>e</td><td>BIG instance exponent</td></tr>
-</tbody>
-</table>
-<p><a name="FP24+pinpow"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp24pinpowe-bts"></a><a href="#fp24pinpowe-bts" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP24.pinpow(e, bts)</h3>
-<p>Raises an FP24 instance x to a small integer power, side-channel resistant</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a>  <br>
-<strong>this</strong>: <code>{FP24}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>e</td><td>small integer exponent</td></tr>
-<tr><td>bts</td><td>maximum number of bits in exponent</td></tr>
-</tbody>
-</table>
-<p><a name="FP24+compow"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp24compowe-r"></a><a href="#fp24compowe-r" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP24.compow(e, r)</h3>
-<p>Raises an FP24 instance to a BIG power, compressed to FP4</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a>  <br>
-<strong>this</strong>: <code>{FP24}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>e</td><td>BIG exponent</td></tr>
-<tr><td>r</td><td>BIG group order</td></tr>
-</tbody>
-</table>
-<p><a name="FP24.fromBytes"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp24frombytesw"></a><a href="#fp24frombytesw" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>FP24.fromBytes(w)</h3>
-<p>convert from byte array to FP24</p>
-<p><strong>Kind</strong>: static method of <a href="#FP24"><code>FP24</code></a>  <br>
-<strong>this</strong>: <code>{FP24}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>w</td><td>Byte array</td></tr>
-</tbody>
-</table>
-<p><a name="FP24.teq"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp24teq"></a><a href="#fp24teq" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>FP24.teq()</h3>
-<p>return 1 if b==c, no branching</p>
-<p><strong>Kind</strong>: static method of <a href="#FP24"><code>FP24</code></a>  <br>
-<strong>this</strong>: <code>{FP24}</code>  <br>
-<a name="FP24.pow8"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp24pow8"></a><a href="#fp24pow8" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>FP24.pow8()</h3>
-<p>p=q0^u0.q1^u1.q2^u2.q3^u3...</p>
-<p><strong>Kind</strong>: static method of <a href="#FP24"><code>FP24</code></a>  <br>
-<strong>this</strong>: <code>{FP24}</code></p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/cryptojs/fp16"><span class="arrow-prev">← </span><span>FP16</span></a><a class="docs-next button" href="/docs/cryptojs/fp48"><span>FP48</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#fp24">FP24</a><ul class="toc-headings"><li><a href="#new-fp24">new FP24()</a></li><li><a href="#fp24reduce">fP24.reduce()</a></li><li><a href="#fp24norm">fP24.norm()</a></li><li><a href="#fp24iszilch">fP24.iszilch()</a></li><li><a href="#fp24isunity">fP24.isunity()</a></li><li><a href="#fp24cmoveg-d">fP24.cmove(g, d)</a></li><li><a href="#fp24select">fP24.select()</a></li><li><a href="#fp24geta">fP24.geta()</a></li><li><a href="#fp24getb">fP24.getb()</a></li><li><a href="#fp24getc">fP24.getc()</a></li><li><a href="#fp24equalsx">fP24.equals(x)</a></li><li><a href="#fp24copyx">fP24.copy(x)</a></li><li><a href="#fp24onex">fP24.one(x)</a></li><li><a href="#fp24zero">fP24.zero()</a></li><li><a href="#fp24conj">fP24.conj()</a></li><li><a href="#fp24setd-e-f">fP24.set(d, e, f)</a></li><li><a href="#fp24setac">fP24.seta(c)</a></li><li><a href="#fp24usqr">fP24.usqr()</a></li><li><a href="#fp24sqr">fP24.sqr()</a></li><li><a href="#fp24muly">fP24.mul(y)</a></li><li><a href="#fp24smuly">fP24.smul(y)</a></li><li><a href="#fp24ssmuly">fP24.ssmul(y)</a></li><li><a href="#fp24inverse">fP24.inverse()</a></li><li><a href="#fp24frobf">fP24.frob(f)</a></li><li><a href="#fp24trace">fP24.trace()</a></li><li><a href="#fp24tostring">fP24.toString()</a></li><li><a href="#fp24tobytesw">fP24.toBytes(w)</a></li><li><a href="#fp24powe">fP24.pow(e)</a></li><li><a href="#fp24pinpowe-bts">fP24.pinpow(e, bts)</a></li><li><a href="#fp24compowe-r">fP24.compow(e, r)</a></li><li><a href="#fp24frombytesw">FP24.fromBytes(w)</a></li><li><a href="#fp24teq">FP24.teq()</a></li><li><a href="#fp24pow8">FP24.pow8()</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/amcl-overview">AMCL Library</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-overview">AMCL Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API 1.0.0</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/aes">AES</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/big">BIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls">BLS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls192">BLS192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls256">BLS256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/dbig">DBIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp">ECP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ff">FF</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp">FP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp2">FP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp4">FP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp8">FP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp12">FP12</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp16">FP16</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/cryptojs/fp24">FP24</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp48">FP48</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/gcm">GCM</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash256">HASH256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash384">HASH384</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash512">HASH512</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin">MPIN</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair">PAIR</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rand">RAND</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rsa">RSA</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/sha3">SHA3</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/unit64">UInt64</a></li></ul></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL Library</span><meta itemprop="position" content="1"></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL JavaScript API 1.0.0</span><meta itemprop="position" content="2"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">FP24</span><meta itemprop="position" content="3"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>FP24</h1></header><a name="FP24"></a><h2 class="anchor anchorWithStickyNavbar_LWe7" id="fp24">FP24<a class="hash-link" href="#fp24" title="Direct link to heading">​</a></h2><p><strong>Kind</strong>: global class<br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP24{&quot;}&quot;}</code>  </p><ul><li><a href="#FP24">FP24</a><ul><li><a href="#new_FP24_new">new FP24()</a></li><li><em>instance</em><ul><li><a href="#FP24+reduce">.reduce()</a></li><li><a href="#FP24+norm">.norm()</a></li><li><a href="#FP24+iszilch">.iszilch()</a></li><li><a href="#FP24+isunity">.isunity()</a></li><li><a href="#FP24+cmove">.cmove(g, d)</a></li><li><a href="#FP24+select">.select()</a></li><li><a href="#FP24+geta">.geta()</a></li><li><a href="#FP24+getb">.getb()</a></li><li><a href="#FP24+getc">.getc()</a></li><li><a href="#FP24+equals">.equals(x)</a></li><li><a href="#FP24+copy">.copy(x)</a></li><li><a href="#FP24+one">.one(x)</a></li><li><a href="#FP24+zero">.zero()</a></li><li><a href="#FP24+conj">.conj()</a></li><li><a href="#FP24+set">.set(d, e, f)</a></li><li><a href="#FP24+seta">.seta(c)</a></li><li><a href="#FP24+usqr">.usqr()</a></li><li><a href="#FP24+sqr">.sqr()</a></li><li><a href="#FP24+mul">.mul(y)</a></li><li><a href="#FP24+smul">.smul(y)</a></li><li><a href="#FP24+ssmul">.ssmul(y)</a></li><li><a href="#FP24+inverse">.inverse()</a></li><li><a href="#FP24+frob">.frob(f)</a></li><li><a href="#FP24+trace">.trace()</a></li><li><a href="#FP24+toString">.toString()</a></li><li><a href="#FP24+toBytes">.toBytes(w)</a></li><li><a href="#FP24+pow">.pow(e)</a></li><li><a href="#FP24+pinpow">.pinpow(e, bts)</a></li><li><a href="#FP24+compow">.compow(e, r)</a></li></ul></li><li><em>static</em><ul><li><a href="#FP24.fromBytes">.fromBytes(w)</a></li><li><a href="#FP24.teq">.teq()</a></li><li><a href="#FP24.pow8">.pow8()</a></li></ul></li></ul></li></ul><a name="new_FP24_new"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="new-fp24">new FP24()<a class="hash-link" href="#new-fp24" title="Direct link to heading">​</a></h3><p>Creates an instance of FP24.</p><a name="FP24+reduce"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp24reduce">fP24.reduce()<a class="hash-link" href="#fp24reduce" title="Direct link to heading">​</a></h3><p>Reduces all components of possibly unreduced FP24 mod Modulus</p><p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP24{&quot;}&quot;}</code>  </p><a name="FP24+norm"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp24norm">fP24.norm()<a class="hash-link" href="#fp24norm" title="Direct link to heading">​</a></h3><p>Normalises the components of an FP24</p><p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP24{&quot;}&quot;}</code>  </p><a name="FP24+iszilch"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp24iszilch">fP24.iszilch()<a class="hash-link" href="#fp24iszilch" title="Direct link to heading">​</a></h3><p>Tests for FP24 equal to zero</p><p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP24{&quot;}&quot;}</code>  </p><a name="FP24+isunity"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp24isunity">fP24.isunity()<a class="hash-link" href="#fp24isunity" title="Direct link to heading">​</a></h3><p>Tests for FP24 equal to unity</p><p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP24{&quot;}&quot;}</code>  </p><a name="FP24+cmove"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp24cmoveg-d">fP24.cmove(g, d)<a class="hash-link" href="#fp24cmoveg-d" title="Direct link to heading">​</a></h3><p>Conditional copy of FP24 number</p><p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP24{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>g</td><td>FP24 instance</td></tr><tr><td>d</td><td>copy depends on this value</td></tr></tbody></table><a name="FP24+select"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp24select">fP24.select()<a class="hash-link" href="#fp24select" title="Direct link to heading">​</a></h3><p>Constant time select from pre-computed table</p><p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP24{&quot;}&quot;}</code>  </p><a name="FP24+geta"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp24geta">fP24.geta()<a class="hash-link" href="#fp24geta" title="Direct link to heading">​</a></h3><p>extract a from this</p><p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP24{&quot;}&quot;}</code>  </p><a name="FP24+getb"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp24getb">fP24.getb()<a class="hash-link" href="#fp24getb" title="Direct link to heading">​</a></h3><p>extract b from this</p><p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP24{&quot;}&quot;}</code>  </p><a name="FP24+getc"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp24getc">fP24.getc()<a class="hash-link" href="#fp24getc" title="Direct link to heading">​</a></h3><p>extract c from this</p><p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP24{&quot;}&quot;}</code>  </p><a name="FP24+equals"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp24equalsx">fP24.equals(x)<a class="hash-link" href="#fp24equalsx" title="Direct link to heading">​</a></h3><p>Tests for equality of two FP24s</p><p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP24{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>x</td><td>FP24 instance to compare</td></tr></tbody></table><a name="FP24+copy"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp24copyx">fP24.copy(x)<a class="hash-link" href="#fp24copyx" title="Direct link to heading">​</a></h3><p>Copy FP24 to another FP24</p><p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP24{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>x</td><td>FP24 instance to be copied</td></tr></tbody></table><a name="FP24+one"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp24onex">fP24.one(x)<a class="hash-link" href="#fp24onex" title="Direct link to heading">​</a></h3><p>Set FP24 to unity</p><p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP24{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>x</td><td>FP24 instance to be set to one</td></tr></tbody></table><a name="FP24+zero"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp24zero">fP24.zero()<a class="hash-link" href="#fp24zero" title="Direct link to heading">​</a></h3><p>Set FP24 to zero</p><p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP24{&quot;}&quot;}</code>  </p><a name="FP24+conj"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp24conj">fP24.conj()<a class="hash-link" href="#fp24conj" title="Direct link to heading">​</a></h3><p>Conjugation of FP24</p><p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP24{&quot;}&quot;}</code>  </p><a name="FP24+set"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp24setd-e-f">fP24.set(d, e, f)<a class="hash-link" href="#fp24setd-e-f" title="Direct link to heading">​</a></h3><p>Set FP24 from three FP8 values</p><p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP24{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>d</td><td>FP8 instance</td></tr><tr><td>e</td><td>FP8 instance</td></tr><tr><td>f</td><td>FP8 instance</td></tr></tbody></table><a name="FP24+seta"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp24setac">fP24.seta(c)<a class="hash-link" href="#fp24setac" title="Direct link to heading">​</a></h3><p>Set FP24 from one FP8 value</p><p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP24{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>c</td><td>FP8 instance</td></tr></tbody></table><a name="FP24+usqr"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp24usqr">fP24.usqr()<a class="hash-link" href="#fp24usqr" title="Direct link to heading">​</a></h3><p>Fast Squaring of an FP24 in &quot;unitary&quot; form</p><p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP24{&quot;}&quot;}</code>  </p><a name="FP24+sqr"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp24sqr">fP24.sqr()<a class="hash-link" href="#fp24sqr" title="Direct link to heading">​</a></h3><p>Fast Squaring of an FP24</p><p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP24{&quot;}&quot;}</code>  </p><a name="FP24+mul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp24muly">fP24.mul(y)<a class="hash-link" href="#fp24muly" title="Direct link to heading">​</a></h3><p>Full unconditional Multiplication of two FP24s</p><p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP24{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>y</td><td>FP24 instance, the multiplier</td></tr></tbody></table><a name="FP24+smul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp24smuly">fP24.smul(y)<a class="hash-link" href="#fp24smuly" title="Direct link to heading">​</a></h3><p>Fast multiplication of two sparse FP24s that arises from ATE pairing line functions</p><p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP24{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>y</td><td>FP24 instance, the multiplier</td></tr></tbody></table><a name="FP24+ssmul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp24ssmuly">fP24.ssmul(y)<a class="hash-link" href="#fp24ssmuly" title="Direct link to heading">​</a></h3><p>Fast multiplication of what may be sparse multiplicands</p><p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP24{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>y</td><td>FP24 instance, the multiplier</td></tr></tbody></table><a name="FP24+inverse"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp24inverse">fP24.inverse()<a class="hash-link" href="#fp24inverse" title="Direct link to heading">​</a></h3><p>Inverting an FP24</p><p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP24{&quot;}&quot;}</code>  </p><a name="FP24+frob"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp24frobf">fP24.frob(f)<a class="hash-link" href="#fp24frobf" title="Direct link to heading">​</a></h3><p>Raises an FP24 to the power of the internal modulus p, using the Frobenius</p><p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP24{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>f</td><td>Modulus</td></tr></tbody></table><a name="FP24+trace"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp24trace">fP24.trace()<a class="hash-link" href="#fp24trace" title="Direct link to heading">​</a></h3><p>Calculate the trace of an FP24</p><p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP24{&quot;}&quot;}</code>  </p><a name="FP24+toString"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp24tostring">fP24.toString()<a class="hash-link" href="#fp24tostring" title="Direct link to heading">​</a></h3><p>convert this to hex string</p><p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP24{&quot;}&quot;}</code>  </p><a name="FP24+toBytes"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp24tobytesw">fP24.toBytes(w)<a class="hash-link" href="#fp24tobytesw" title="Direct link to heading">​</a></h3><p>convert this to byte array</p><p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP24{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>w</td><td>Byte array</td></tr></tbody></table><a name="FP24+pow"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp24powe">fP24.pow(e)<a class="hash-link" href="#fp24powe" title="Direct link to heading">​</a></h3><p>Raises an FP24 to the power of a BIG</p><p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP24{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>e</td><td>BIG instance exponent</td></tr></tbody></table><a name="FP24+pinpow"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp24pinpowe-bts">fP24.pinpow(e, bts)<a class="hash-link" href="#fp24pinpowe-bts" title="Direct link to heading">​</a></h3><p>Raises an FP24 instance x to a small integer power, side-channel resistant</p><p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP24{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>e</td><td>small integer exponent</td></tr><tr><td>bts</td><td>maximum number of bits in exponent</td></tr></tbody></table><a name="FP24+compow"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp24compowe-r">fP24.compow(e, r)<a class="hash-link" href="#fp24compowe-r" title="Direct link to heading">​</a></h3><p>Raises an FP24 instance to a BIG power, compressed to FP4</p><p><strong>Kind</strong>: instance method of <a href="#FP24"><code>FP24</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP24{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>e</td><td>BIG exponent</td></tr><tr><td>r</td><td>BIG group order</td></tr></tbody></table><a name="FP24.fromBytes"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp24frombytesw">FP24.fromBytes(w)<a class="hash-link" href="#fp24frombytesw" title="Direct link to heading">​</a></h3><p>convert from byte array to FP24</p><p><strong>Kind</strong>: static method of <a href="#FP24"><code>FP24</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP24{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>w</td><td>Byte array</td></tr></tbody></table><a name="FP24.teq"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp24teq">FP24.teq()<a class="hash-link" href="#fp24teq" title="Direct link to heading">​</a></h3><p>return 1 if b==c, no branching</p><p><strong>Kind</strong>: static method of <a href="#FP24"><code>FP24</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP24{&quot;}&quot;}</code>  </p><a name="FP24.pow8"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp24pow8">FP24.pow8()<a class="hash-link" href="#fp24pow8" title="Direct link to heading">​</a></h3><p>p=q0^u0.q1^u1.q2^u2.q3^u3...</p><p><strong>Kind</strong>: static method of <a href="#FP24"><code>FP24</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP24{&quot;}&quot;}</code></p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/cryptojs/fp16"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">FP16</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/cryptojs/fp48"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">FP48</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#fp24" class="table-of-contents__link toc-highlight">FP24</a><ul><li><a href="#new-fp24" class="table-of-contents__link toc-highlight">new FP24()</a></li><li><a href="#fp24reduce" class="table-of-contents__link toc-highlight">fP24.reduce()</a></li><li><a href="#fp24norm" class="table-of-contents__link toc-highlight">fP24.norm()</a></li><li><a href="#fp24iszilch" class="table-of-contents__link toc-highlight">fP24.iszilch()</a></li><li><a href="#fp24isunity" class="table-of-contents__link toc-highlight">fP24.isunity()</a></li><li><a href="#fp24cmoveg-d" class="table-of-contents__link toc-highlight">fP24.cmove(g, d)</a></li><li><a href="#fp24select" class="table-of-contents__link toc-highlight">fP24.select()</a></li><li><a href="#fp24geta" class="table-of-contents__link toc-highlight">fP24.geta()</a></li><li><a href="#fp24getb" class="table-of-contents__link toc-highlight">fP24.getb()</a></li><li><a href="#fp24getc" class="table-of-contents__link toc-highlight">fP24.getc()</a></li><li><a href="#fp24equalsx" class="table-of-contents__link toc-highlight">fP24.equals(x)</a></li><li><a href="#fp24copyx" class="table-of-contents__link toc-highlight">fP24.copy(x)</a></li><li><a href="#fp24onex" class="table-of-contents__link toc-highlight">fP24.one(x)</a></li><li><a href="#fp24zero" class="table-of-contents__link toc-highlight">fP24.zero()</a></li><li><a href="#fp24conj" class="table-of-contents__link toc-highlight">fP24.conj()</a></li><li><a href="#fp24setd-e-f" class="table-of-contents__link toc-highlight">fP24.set(d, e, f)</a></li><li><a href="#fp24setac" class="table-of-contents__link toc-highlight">fP24.seta(c)</a></li><li><a href="#fp24usqr" class="table-of-contents__link toc-highlight">fP24.usqr()</a></li><li><a href="#fp24sqr" class="table-of-contents__link toc-highlight">fP24.sqr()</a></li><li><a href="#fp24muly" class="table-of-contents__link toc-highlight">fP24.mul(y)</a></li><li><a href="#fp24smuly" class="table-of-contents__link toc-highlight">fP24.smul(y)</a></li><li><a href="#fp24ssmuly" class="table-of-contents__link toc-highlight">fP24.ssmul(y)</a></li><li><a href="#fp24inverse" class="table-of-contents__link toc-highlight">fP24.inverse()</a></li><li><a href="#fp24frobf" class="table-of-contents__link toc-highlight">fP24.frob(f)</a></li><li><a href="#fp24trace" class="table-of-contents__link toc-highlight">fP24.trace()</a></li><li><a href="#fp24tostring" class="table-of-contents__link toc-highlight">fP24.toString()</a></li><li><a href="#fp24tobytesw" class="table-of-contents__link toc-highlight">fP24.toBytes(w)</a></li><li><a href="#fp24powe" class="table-of-contents__link toc-highlight">fP24.pow(e)</a></li><li><a href="#fp24pinpowe-bts" class="table-of-contents__link toc-highlight">fP24.pinpow(e, bts)</a></li><li><a href="#fp24compowe-r" class="table-of-contents__link toc-highlight">fP24.compow(e, r)</a></li><li><a href="#fp24frombytesw" class="table-of-contents__link toc-highlight">FP24.fromBytes(w)</a></li><li><a href="#fp24teq" class="table-of-contents__link toc-highlight">FP24.teq()</a></li><li><a href="#fp24pow8" class="table-of-contents__link toc-highlight">FP24.pow8()</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/cryptojs/fp4/index.html b/docs/cryptojs/fp4/index.html
index 5353020..a6149d2 100644
--- a/docs/cryptojs/fp4/index.html
+++ b/docs/cryptojs/fp4/index.html
@@ -1,430 +1,61 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>FP4 · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;a name=&quot;FP4&quot;&gt;&lt;/a&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="FP4 · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;a name=&quot;FP4&quot;&gt;&lt;/a&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>AMCL JavaScript API 1.0.0</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-cryptojs/fp4">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">FP4 | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/cryptojs/fp4"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="FP4 | Apache Milagro"><meta data-rh="true" name="description" content="FP4"><meta data-rh="true" property="og:description" content="FP4"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/cryptojs/fp4"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/fp4" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/fp4" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">FP4</h1></header><article><div><span><p><a name="FP4"></a></p>
-<h2><a class="anchor" aria-hidden="true" id="fp4"></a><a href="#fp4" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>FP4</h2>
-<p><strong>Kind</strong>: global class<br>
-<strong>this</strong>: <code>{FP4}</code></p>
-<ul>
-<li><a href="#FP4">FP4</a>
-<ul>
-<li><a href="#new_FP4_new">new FP4()</a></li>
-<li><a href="#FP4+reduce">.reduce()</a></li>
-<li><a href="#FP4+norm">.norm()</a></li>
-<li><a href="#FP4+iszilch">.iszilch()</a></li>
-<li><a href="#FP4+isunity">.isunity()</a></li>
-<li><a href="#FP4+cmove">.cmove(g, d)</a></li>
-<li><a href="#FP4+isreal">.isreal()</a></li>
-<li><a href="#FP4+real">.real()</a></li>
-<li><a href="#FP4+geta">.geta()</a></li>
-<li><a href="#FP4+getb">.getb()</a></li>
-<li><a href="#FP4+equals">.equals(x)</a></li>
-<li><a href="#FP4+copy">.copy(x)</a></li>
-<li><a href="#FP4+zero">.zero()</a></li>
-<li><a href="#FP4+one">.one(x)</a></li>
-<li><a href="#FP4+set">.set(c, d)</a></li>
-<li><a href="#FP4+seta">.seta(c)</a></li>
-<li><a href="#FP4+neg">.neg()</a></li>
-<li><a href="#FP4+conj">.conj()</a></li>
-<li><a href="#FP4+nconj">.nconj()</a></li>
-<li><a href="#FP4+add">.add(x)</a></li>
-<li><a href="#FP4+sub">.sub(x)</a></li>
-<li><a href="#FP4+pmul">.pmul(s)</a></li>
-<li><a href="#FP4+imul">.imul(s)</a></li>
-<li><a href="#FP4+sqr">.sqr()</a></li>
-<li><a href="#FP4+mul">.mul(y)</a></li>
-<li><a href="#FP4+toString">.toString()</a></li>
-<li><a href="#FP4+inverse">.inverse()</a></li>
-<li><a href="#FP4+times_i">.times_i()</a></li>
-<li><a href="#FP4+frob">.frob(f)</a></li>
-<li><a href="#FP4+pow">.pow(e)</a></li>
-<li><a href="#FP4+xtr_A">.xtr_A(w, y, z)</a></li>
-<li><a href="#FP4+xtr_D">.xtr_D()</a></li>
-<li><a href="#FP4+xtr_pow">.xtr_pow(n)</a></li>
-<li><a href="#FP4+xtr_pow2">.xtr_pow2()</a></li>
-<li><a href="#FP4+div2">.div2()</a></li>
-<li><a href="#FP4+div_i">.div_i()</a></li>
-<li><a href="#FP4+div_2i">.div_2i()</a></li>
-<li><a href="#FP4+qmul">.qmul(s)</a></li>
-<li><a href="#FP4+sqrt">.sqrt()</a></li>
-</ul></li>
-</ul>
-<p><a name="new_FP4_new"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="new-fp4"></a><a href="#new-fp4" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>new FP4()</h3>
-<p>Creates an instance of FP4</p>
-<p><a name="FP4+reduce"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp4reduce"></a><a href="#fp4reduce" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP4.reduce()</h3>
-<p>Reduces all components of possibly unreduced FP4 mod Modulus</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a>  <br>
-<strong>this</strong>: <code>{FP4}</code>  <br>
-<a name="FP4+norm"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp4norm"></a><a href="#fp4norm" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP4.norm()</h3>
-<p>Normalises the components of an FP4</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a>  <br>
-<strong>this</strong>: <code>{FP4}</code>  <br>
-<a name="FP4+iszilch"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp4iszilch"></a><a href="#fp4iszilch" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP4.iszilch()</h3>
-<p>Tests for FP4 equal to zero</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a>  <br>
-<strong>this</strong>: <code>{FP4}</code>  <br>
-<a name="FP4+isunity"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp4isunity"></a><a href="#fp4isunity" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP4.isunity()</h3>
-<p>Tests for FP4 equal to unity</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a>  <br>
-<strong>this</strong>: <code>{FP4}</code>  <br>
-<a name="FP4+cmove"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp4cmoveg-d"></a><a href="#fp4cmoveg-d" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP4.cmove(g, d)</h3>
-<p>Conditional copy of FP4 number</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a>  <br>
-<strong>this</strong>: <code>{FP4}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>g</td><td>FP4 instance</td></tr>
-<tr><td>d</td><td>copy depends on this value</td></tr>
-</tbody>
-</table>
-<p><a name="FP4+isreal"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp4isreal"></a><a href="#fp4isreal" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP4.isreal()</h3>
-<p>test is w real? That is in a+ib test b is zero</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a>  <br>
-<strong>this</strong>: <code>{FP4}</code>  <br>
-<a name="FP4+real"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp4real"></a><a href="#fp4real" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP4.real()</h3>
-<p>extract real part a</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a>  <br>
-<strong>this</strong>: <code>{FP4}</code>  <br>
-<a name="FP4+geta"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp4geta"></a><a href="#fp4geta" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP4.geta()</h3>
-<p>extract a from this</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a>  <br>
-<strong>this</strong>: <code>{FP4}</code>  <br>
-<a name="FP4+getb"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp4getb"></a><a href="#fp4getb" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP4.getb()</h3>
-<p>extract b from this</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a>  <br>
-<strong>this</strong>: <code>{FP4}</code>  <br>
-<a name="FP4+equals"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp4equalsx"></a><a href="#fp4equalsx" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP4.equals(x)</h3>
-<p>Tests for equality of two FP4s</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a>  <br>
-<strong>this</strong>: <code>{FP4}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>x</td><td>FP4 instance to compare</td></tr>
-</tbody>
-</table>
-<p><a name="FP4+copy"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp4copyx"></a><a href="#fp4copyx" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP4.copy(x)</h3>
-<p>Copy FP4 to another FP4</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a>  <br>
-<strong>this</strong>: <code>{FP4}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>x</td><td>FP4 instance to be copied</td></tr>
-</tbody>
-</table>
-<p><a name="FP4+zero"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp4zero"></a><a href="#fp4zero" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP4.zero()</h3>
-<p>Set FP4 to zero</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a>  <br>
-<strong>this</strong>: <code>{FP4}</code>  <br>
-<a name="FP4+one"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp4onex"></a><a href="#fp4onex" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP4.one(x)</h3>
-<p>Set FP4 to unity</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a>  <br>
-<strong>this</strong>: <code>{FP4}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>x</td><td>FP4 instance to be set to one</td></tr>
-</tbody>
-</table>
-<p><a name="FP4+set"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp4setc-d"></a><a href="#fp4setc-d" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP4.set(c, d)</h3>
-<p>Set FP4 from two FP2 values</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a>  <br>
-<strong>this</strong>: <code>{FP4}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>c</td><td>FP2 instance</td></tr>
-<tr><td>d</td><td>FP2 instance</td></tr>
-</tbody>
-</table>
-<p><a name="FP4+seta"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp4setac"></a><a href="#fp4setac" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP4.seta(c)</h3>
-<p>Set FP4 from one FP2 value</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a>  <br>
-<strong>this</strong>: <code>{FP4}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>c</td><td>FP2 instance</td></tr>
-</tbody>
-</table>
-<p><a name="FP4+neg"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp4neg"></a><a href="#fp4neg" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP4.neg()</h3>
-<p>Negation of FP4</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a>  <br>
-<strong>this</strong>: <code>{FP4}</code>  <br>
-<a name="FP4+conj"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp4conj"></a><a href="#fp4conj" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP4.conj()</h3>
-<p>Conjugation of FP4</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a>  <br>
-<strong>this</strong>: <code>{FP4}</code>  <br>
-<a name="FP4+nconj"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp4nconj"></a><a href="#fp4nconj" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP4.nconj()</h3>
-<p>Negative conjugation of FP4</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a>  <br>
-<strong>this</strong>: <code>{FP4}</code>  <br>
-<a name="FP4+add"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp4addx"></a><a href="#fp4addx" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP4.add(x)</h3>
-<p>addition of two FP4s</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a>  <br>
-<strong>this</strong>: <code>{FP4}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>x</td><td>FP4 instance</td></tr>
-</tbody>
-</table>
-<p><a name="FP4+sub"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp4subx"></a><a href="#fp4subx" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP4.sub(x)</h3>
-<p>subtraction of two FP4s</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a>  <br>
-<strong>this</strong>: <code>{FP4}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>x</td><td>FP4 instance</td></tr>
-</tbody>
-</table>
-<p><a name="FP4+pmul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp4pmuls"></a><a href="#fp4pmuls" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP4.pmul(s)</h3>
-<p>Multiplication of an FP4 by an FP8</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a>  <br>
-<strong>this</strong>: <code>{FP4}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>s</td><td>FP8 instance</td></tr>
-</tbody>
-</table>
-<p><a name="FP4+imul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp4imuls"></a><a href="#fp4imuls" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP4.imul(s)</h3>
-<p>Multiplication of an FP4 by an integer</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a>  <br>
-<strong>this</strong>: <code>{FP4}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>s</td><td>integer multiplier</td></tr>
-</tbody>
-</table>
-<p><a name="FP4+sqr"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp4sqr"></a><a href="#fp4sqr" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP4.sqr()</h3>
-<p>Fast Squaring of an FP4</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a>  <br>
-<strong>this</strong>: <code>{FP4}</code>  <br>
-<a name="FP4+mul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp4muly"></a><a href="#fp4muly" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP4.mul(y)</h3>
-<p>Full unconditional Multiplication of two FP4s</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a>  <br>
-<strong>this</strong>: <code>{FP4}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>y</td><td>FP4 instance, the multiplier</td></tr>
-</tbody>
-</table>
-<p><a name="FP4+toString"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp4tostring"></a><a href="#fp4tostring" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP4.toString()</h3>
-<p>convert to hex string</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a>  <br>
-<strong>this</strong>: <code>{FP4}</code>  <br>
-<a name="FP4+inverse"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp4inverse"></a><a href="#fp4inverse" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP4.inverse()</h3>
-<p>Inverting an FP4</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a>  <br>
-<strong>this</strong>: <code>{FP4}</code>  <br>
-<a name="FP4+times_i"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp4times_i"></a><a href="#fp4times_i" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP4.times_i()</h3>
-<p>multiplies an FP4 instance by irreducible polynomial sqrt(1+sqrt(-1))</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a>  <br>
-<strong>this</strong>: <code>{FP4}</code>  <br>
-<a name="FP4+frob"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp4frobf"></a><a href="#fp4frobf" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP4.frob(f)</h3>
-<p>Raises an FP4 to the power of the internal modulus p, using the Frobenius</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a>  <br>
-<strong>this</strong>: <code>{FP4}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>f</td><td>Modulus</td></tr>
-</tbody>
-</table>
-<p><a name="FP4+pow"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp4powe"></a><a href="#fp4powe" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP4.pow(e)</h3>
-<p>Raises an FP4 to the power of a BIG</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a>  <br>
-<strong>this</strong>: <code>{FP4}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>e</td><td>BIG instance exponent</td></tr>
-</tbody>
-</table>
-<p><a name="FP4+xtr_A"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp4xtr_aw-y-z"></a><a href="#fp4xtr_aw-y-z" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP4.xtr_A(w, y, z)</h3>
-<p>Calculates the XTR addition function r=w<em>x-conj(x)</em>y+z</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a>  <br>
-<strong>this</strong>: <code>{FP4}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>w</td><td>FP4 instance</td></tr>
-<tr><td>y</td><td>FP4 instance</td></tr>
-<tr><td>z</td><td>FP4 instance</td></tr>
-</tbody>
-</table>
-<p><a name="FP4+xtr_D"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp4xtr_d"></a><a href="#fp4xtr_d" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP4.xtr_D()</h3>
-<p>Calculates the XTR doubling function r=x^2-2*conj(x)</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a>  <br>
-<strong>this</strong>: <code>{FP4}</code>  <br>
-<a name="FP4+xtr_pow"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp4xtr_pown"></a><a href="#fp4xtr_pown" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP4.xtr_pow(n)</h3>
-<p>Calculates FP4 trace of an FP4 raised to the power of a BIG number</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a>  <br>
-<strong>this</strong>: <code>{FP4}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>n</td><td>Big number</td></tr>
-</tbody>
-</table>
-<p><a name="FP4+xtr_pow2"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp4xtr_pow2"></a><a href="#fp4xtr_pow2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP4.xtr_pow2()</h3>
-<p>Calculates FP4 trace of c^a.d^b, where c and d are derived from FP4 traces of FP4s</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a>  <br>
-<strong>this</strong>: <code>{FP4}</code>  <br>
-<a name="FP4+div2"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp4div2"></a><a href="#fp4div2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP4.div2()</h3>
-<p>Divide an FP4 by 2</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a>  <br>
-<strong>this</strong>: <code>{FP4}</code>  <br>
-<a name="FP4+div_i"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp4div_i"></a><a href="#fp4div_i" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP4.div_i()</h3>
-<p>Divide FP4 number by QNR</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a>  <br>
-<strong>this</strong>: <code>{FP4}</code>  <br>
-<a name="FP4+div_2i"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp4div_2i"></a><a href="#fp4div_2i" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP4.div_2i()</h3>
-<p>Divide an FP4 by QNR/2</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a>  <br>
-<strong>this</strong>: <code>{FP4}</code>  <br>
-<a name="FP4+qmul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp4qmuls"></a><a href="#fp4qmuls" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP4.qmul(s)</h3>
-<p>Multiplication of an FP4 by an FP</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a>  <br>
-<strong>this</strong>: <code>{FP4}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>s</td><td>FP multiplier</td></tr>
-</tbody>
-</table>
-<p><a name="FP4+sqrt"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp4sqrt"></a><a href="#fp4sqrt" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP4.sqrt()</h3>
-<p>Calculate square root of an FP4</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a>  <br>
-<strong>this</strong>: <code>{FP4}</code></p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/cryptojs/fp2"><span class="arrow-prev">← </span><span>FP2</span></a><a class="docs-next button" href="/docs/cryptojs/fp8"><span>FP8</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#fp4">FP4</a><ul class="toc-headings"><li><a href="#new-fp4">new FP4()</a></li><li><a href="#fp4reduce">fP4.reduce()</a></li><li><a href="#fp4norm">fP4.norm()</a></li><li><a href="#fp4iszilch">fP4.iszilch()</a></li><li><a href="#fp4isunity">fP4.isunity()</a></li><li><a href="#fp4cmoveg-d">fP4.cmove(g, d)</a></li><li><a href="#fp4isreal">fP4.isreal()</a></li><li><a href="#fp4real">fP4.real()</a></li><li><a href="#fp4geta">fP4.geta()</a></li><li><a href="#fp4getb">fP4.getb()</a></li><li><a href="#fp4equalsx">fP4.equals(x)</a></li><li><a href="#fp4copyx">fP4.copy(x)</a></li><li><a href="#fp4zero">fP4.zero()</a></li><li><a href="#fp4onex">fP4.one(x)</a></li><li><a href="#fp4setc-d">fP4.set(c, d)</a></li><li><a href="#fp4setac">fP4.seta(c)</a></li><li><a href="#fp4neg">fP4.neg()</a></li><li><a href="#fp4conj">fP4.conj()</a></li><li><a href="#fp4nconj">fP4.nconj()</a></li><li><a href="#fp4addx">fP4.add(x)</a></li><li><a href="#fp4subx">fP4.sub(x)</a></li><li><a href="#fp4pmuls">fP4.pmul(s)</a></li><li><a href="#fp4imuls">fP4.imul(s)</a></li><li><a href="#fp4sqr">fP4.sqr()</a></li><li><a href="#fp4muly">fP4.mul(y)</a></li><li><a href="#fp4tostring">fP4.toString()</a></li><li><a href="#fp4inverse">fP4.inverse()</a></li><li><a href="#fp4times_i">fP4.times_i()</a></li><li><a href="#fp4frobf">fP4.frob(f)</a></li><li><a href="#fp4powe">fP4.pow(e)</a></li><li><a href="#fp4xtr_aw-y-z">fP4.xtr_A(w, y, z)</a></li><li><a href="#fp4xtr_d">fP4.xtr_D()</a></li><li><a href="#fp4xtr_pown">fP4.xtr_pow(n)</a></li><li><a href="#fp4xtr_pow2">fP4.xtr_pow2()</a></li><li><a href="#fp4div2">fP4.div2()</a></li><li><a href="#fp4div_i">fP4.div_i()</a></li><li><a href="#fp4div_2i">fP4.div_2i()</a></li><li><a href="#fp4qmuls">fP4.qmul(s)</a></li><li><a href="#fp4sqrt">fP4.sqrt()</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/amcl-overview">AMCL Library</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-overview">AMCL Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API 1.0.0</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/aes">AES</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/big">BIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls">BLS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls192">BLS192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls256">BLS256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/dbig">DBIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp">ECP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ff">FF</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp">FP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp2">FP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/cryptojs/fp4">FP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp8">FP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp12">FP12</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp16">FP16</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp24">FP24</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp48">FP48</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/gcm">GCM</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash256">HASH256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash384">HASH384</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash512">HASH512</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin">MPIN</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair">PAIR</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rand">RAND</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rsa">RSA</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/sha3">SHA3</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/unit64">UInt64</a></li></ul></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL Library</span><meta itemprop="position" content="1"></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL JavaScript API 1.0.0</span><meta itemprop="position" content="2"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">FP4</span><meta itemprop="position" content="3"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>FP4</h1></header><a name="FP4"></a><h2 class="anchor anchorWithStickyNavbar_LWe7" id="fp4">FP4<a class="hash-link" href="#fp4" title="Direct link to heading">​</a></h2><p><strong>Kind</strong>: global class<br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP4{&quot;}&quot;}</code>  </p><ul><li><a href="#FP4">FP4</a><ul><li><a href="#new_FP4_new">new FP4()</a></li><li><a href="#FP4+reduce">.reduce()</a></li><li><a href="#FP4+norm">.norm()</a></li><li><a href="#FP4+iszilch">.iszilch()</a></li><li><a href="#FP4+isunity">.isunity()</a></li><li><a href="#FP4+cmove">.cmove(g, d)</a></li><li><a href="#FP4+isreal">.isreal()</a></li><li><a href="#FP4+real">.real()</a></li><li><a href="#FP4+geta">.geta()</a></li><li><a href="#FP4+getb">.getb()</a></li><li><a href="#FP4+equals">.equals(x)</a></li><li><a href="#FP4+copy">.copy(x)</a></li><li><a href="#FP4+zero">.zero()</a></li><li><a href="#FP4+one">.one(x)</a></li><li><a href="#FP4+set">.set(c, d)</a></li><li><a href="#FP4+seta">.seta(c)</a></li><li><a href="#FP4+neg">.neg()</a></li><li><a href="#FP4+conj">.conj()</a></li><li><a href="#FP4+nconj">.nconj()</a></li><li><a href="#FP4+add">.add(x)</a></li><li><a href="#FP4+sub">.sub(x)</a></li><li><a href="#FP4+pmul">.pmul(s)</a></li><li><a href="#FP4+imul">.imul(s)</a></li><li><a href="#FP4+sqr">.sqr()</a></li><li><a href="#FP4+mul">.mul(y)</a></li><li><a href="#FP4+toString">.toString()</a></li><li><a href="#FP4+inverse">.inverse()</a></li><li><a href="#FP4+times_i">.times_i()</a></li><li><a href="#FP4+frob">.frob(f)</a></li><li><a href="#FP4+pow">.pow(e)</a></li><li><a href="#FP4+xtr_A">.xtr_A(w, y, z)</a></li><li><a href="#FP4+xtr_D">.xtr_D()</a></li><li><a href="#FP4+xtr_pow">.xtr_pow(n)</a></li><li><a href="#FP4+xtr_pow2">.xtr_pow2()</a></li><li><a href="#FP4+div2">.div2()</a></li><li><a href="#FP4+div_i">.div_i()</a></li><li><a href="#FP4+div_2i">.div_2i()</a></li><li><a href="#FP4+qmul">.qmul(s)</a></li><li><a href="#FP4+sqrt">.sqrt()</a></li></ul></li></ul><a name="new_FP4_new"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="new-fp4">new FP4()<a class="hash-link" href="#new-fp4" title="Direct link to heading">​</a></h3><p>Creates an instance of FP4</p><a name="FP4+reduce"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp4reduce">fP4.reduce()<a class="hash-link" href="#fp4reduce" title="Direct link to heading">​</a></h3><p>Reduces all components of possibly unreduced FP4 mod Modulus</p><p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP4{&quot;}&quot;}</code>  </p><a name="FP4+norm"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp4norm">fP4.norm()<a class="hash-link" href="#fp4norm" title="Direct link to heading">​</a></h3><p>Normalises the components of an FP4</p><p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP4{&quot;}&quot;}</code>  </p><a name="FP4+iszilch"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp4iszilch">fP4.iszilch()<a class="hash-link" href="#fp4iszilch" title="Direct link to heading">​</a></h3><p>Tests for FP4 equal to zero</p><p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP4{&quot;}&quot;}</code>  </p><a name="FP4+isunity"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp4isunity">fP4.isunity()<a class="hash-link" href="#fp4isunity" title="Direct link to heading">​</a></h3><p>Tests for FP4 equal to unity</p><p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP4{&quot;}&quot;}</code>  </p><a name="FP4+cmove"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp4cmoveg-d">fP4.cmove(g, d)<a class="hash-link" href="#fp4cmoveg-d" title="Direct link to heading">​</a></h3><p>Conditional copy of FP4 number</p><p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP4{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>g</td><td>FP4 instance</td></tr><tr><td>d</td><td>copy depends on this value</td></tr></tbody></table><a name="FP4+isreal"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp4isreal">fP4.isreal()<a class="hash-link" href="#fp4isreal" title="Direct link to heading">​</a></h3><p>test is w real? That is in a+ib test b is zero</p><p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP4{&quot;}&quot;}</code>  </p><a name="FP4+real"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp4real">fP4.real()<a class="hash-link" href="#fp4real" title="Direct link to heading">​</a></h3><p>extract real part a</p><p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP4{&quot;}&quot;}</code>  </p><a name="FP4+geta"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp4geta">fP4.geta()<a class="hash-link" href="#fp4geta" title="Direct link to heading">​</a></h3><p>extract a from this</p><p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP4{&quot;}&quot;}</code>  </p><a name="FP4+getb"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp4getb">fP4.getb()<a class="hash-link" href="#fp4getb" title="Direct link to heading">​</a></h3><p>extract b from this</p><p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP4{&quot;}&quot;}</code>  </p><a name="FP4+equals"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp4equalsx">fP4.equals(x)<a class="hash-link" href="#fp4equalsx" title="Direct link to heading">​</a></h3><p>Tests for equality of two FP4s</p><p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP4{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>x</td><td>FP4 instance to compare</td></tr></tbody></table><a name="FP4+copy"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp4copyx">fP4.copy(x)<a class="hash-link" href="#fp4copyx" title="Direct link to heading">​</a></h3><p>Copy FP4 to another FP4</p><p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP4{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>x</td><td>FP4 instance to be copied</td></tr></tbody></table><a name="FP4+zero"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp4zero">fP4.zero()<a class="hash-link" href="#fp4zero" title="Direct link to heading">​</a></h3><p>Set FP4 to zero</p><p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP4{&quot;}&quot;}</code>  </p><a name="FP4+one"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp4onex">fP4.one(x)<a class="hash-link" href="#fp4onex" title="Direct link to heading">​</a></h3><p>Set FP4 to unity</p><p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP4{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>x</td><td>FP4 instance to be set to one</td></tr></tbody></table><a name="FP4+set"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp4setc-d">fP4.set(c, d)<a class="hash-link" href="#fp4setc-d" title="Direct link to heading">​</a></h3><p>Set FP4 from two FP2 values</p><p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP4{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>c</td><td>FP2 instance</td></tr><tr><td>d</td><td>FP2 instance</td></tr></tbody></table><a name="FP4+seta"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp4setac">fP4.seta(c)<a class="hash-link" href="#fp4setac" title="Direct link to heading">​</a></h3><p>Set FP4 from one FP2 value</p><p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP4{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>c</td><td>FP2 instance</td></tr></tbody></table><a name="FP4+neg"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp4neg">fP4.neg()<a class="hash-link" href="#fp4neg" title="Direct link to heading">​</a></h3><p>Negation of FP4</p><p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP4{&quot;}&quot;}</code>  </p><a name="FP4+conj"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp4conj">fP4.conj()<a class="hash-link" href="#fp4conj" title="Direct link to heading">​</a></h3><p>Conjugation of FP4</p><p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP4{&quot;}&quot;}</code>  </p><a name="FP4+nconj"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp4nconj">fP4.nconj()<a class="hash-link" href="#fp4nconj" title="Direct link to heading">​</a></h3><p>Negative conjugation of FP4</p><p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP4{&quot;}&quot;}</code>  </p><a name="FP4+add"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp4addx">fP4.add(x)<a class="hash-link" href="#fp4addx" title="Direct link to heading">​</a></h3><p>addition of two FP4s</p><p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP4{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>x</td><td>FP4 instance</td></tr></tbody></table><a name="FP4+sub"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp4subx">fP4.sub(x)<a class="hash-link" href="#fp4subx" title="Direct link to heading">​</a></h3><p>subtraction of two FP4s</p><p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP4{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>x</td><td>FP4 instance</td></tr></tbody></table><a name="FP4+pmul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp4pmuls">fP4.pmul(s)<a class="hash-link" href="#fp4pmuls" title="Direct link to heading">​</a></h3><p>Multiplication of an FP4 by an FP8</p><p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP4{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>s</td><td>FP8 instance</td></tr></tbody></table><a name="FP4+imul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp4imuls">fP4.imul(s)<a class="hash-link" href="#fp4imuls" title="Direct link to heading">​</a></h3><p>Multiplication of an FP4 by an integer</p><p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP4{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>s</td><td>integer multiplier</td></tr></tbody></table><a name="FP4+sqr"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp4sqr">fP4.sqr()<a class="hash-link" href="#fp4sqr" title="Direct link to heading">​</a></h3><p>Fast Squaring of an FP4</p><p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP4{&quot;}&quot;}</code>  </p><a name="FP4+mul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp4muly">fP4.mul(y)<a class="hash-link" href="#fp4muly" title="Direct link to heading">​</a></h3><p>Full unconditional Multiplication of two FP4s</p><p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP4{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>y</td><td>FP4 instance, the multiplier</td></tr></tbody></table><a name="FP4+toString"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp4tostring">fP4.toString()<a class="hash-link" href="#fp4tostring" title="Direct link to heading">​</a></h3><p>convert to hex string</p><p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP4{&quot;}&quot;}</code>  </p><a name="FP4+inverse"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp4inverse">fP4.inverse()<a class="hash-link" href="#fp4inverse" title="Direct link to heading">​</a></h3><p>Inverting an FP4</p><p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP4{&quot;}&quot;}</code>  </p><a name="FP4+times_i"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp4times_i">fP4.times_i()<a class="hash-link" href="#fp4times_i" title="Direct link to heading">​</a></h3><p>multiplies an FP4 instance by irreducible polynomial sqrt(1+sqrt(-1))</p><p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP4{&quot;}&quot;}</code>  </p><a name="FP4+frob"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp4frobf">fP4.frob(f)<a class="hash-link" href="#fp4frobf" title="Direct link to heading">​</a></h3><p>Raises an FP4 to the power of the internal modulus p, using the Frobenius</p><p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP4{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>f</td><td>Modulus</td></tr></tbody></table><a name="FP4+pow"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp4powe">fP4.pow(e)<a class="hash-link" href="#fp4powe" title="Direct link to heading">​</a></h3><p>Raises an FP4 to the power of a BIG</p><p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP4{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>e</td><td>BIG instance exponent</td></tr></tbody></table><a name="FP4+xtr_A"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp4xtr_aw-y-z">fP4.xtr_A(w, y, z)<a class="hash-link" href="#fp4xtr_aw-y-z" title="Direct link to heading">​</a></h3><p>Calculates the XTR addition function r=w_x-conj(x)_y+z</p><p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP4{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>w</td><td>FP4 instance</td></tr><tr><td>y</td><td>FP4 instance</td></tr><tr><td>z</td><td>FP4 instance</td></tr></tbody></table><a name="FP4+xtr_D"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp4xtr_d">fP4.xtr_D()<a class="hash-link" href="#fp4xtr_d" title="Direct link to heading">​</a></h3><p>Calculates the XTR doubling function r=x^2-2<!-- -->*<!-- -->conj(x)</p><p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP4{&quot;}&quot;}</code>  </p><a name="FP4+xtr_pow"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp4xtr_pown">fP4.xtr_pow(n)<a class="hash-link" href="#fp4xtr_pown" title="Direct link to heading">​</a></h3><p>Calculates FP4 trace of an FP4 raised to the power of a BIG number</p><p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP4{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>n</td><td>Big number</td></tr></tbody></table><a name="FP4+xtr_pow2"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp4xtr_pow2">fP4.xtr_pow2()<a class="hash-link" href="#fp4xtr_pow2" title="Direct link to heading">​</a></h3><p>Calculates FP4 trace of c^a.d^b, where c and d are derived from FP4 traces of FP4s</p><p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP4{&quot;}&quot;}</code>  </p><a name="FP4+div2"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp4div2">fP4.div2()<a class="hash-link" href="#fp4div2" title="Direct link to heading">​</a></h3><p>Divide an FP4 by 2</p><p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP4{&quot;}&quot;}</code>  </p><a name="FP4+div_i"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp4div_i">fP4.div_i()<a class="hash-link" href="#fp4div_i" title="Direct link to heading">​</a></h3><p>Divide FP4 number by QNR</p><p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP4{&quot;}&quot;}</code>  </p><a name="FP4+div_2i"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp4div_2i">fP4.div_2i()<a class="hash-link" href="#fp4div_2i" title="Direct link to heading">​</a></h3><p>Divide an FP4 by QNR/2</p><p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP4{&quot;}&quot;}</code>  </p><a name="FP4+qmul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp4qmuls">fP4.qmul(s)<a class="hash-link" href="#fp4qmuls" title="Direct link to heading">​</a></h3><p>Multiplication of an FP4 by an FP</p><p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP4{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>s</td><td>FP multiplier</td></tr></tbody></table><a name="FP4+sqrt"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp4sqrt">fP4.sqrt()<a class="hash-link" href="#fp4sqrt" title="Direct link to heading">​</a></h3><p>Calculate square root of an FP4</p><p><strong>Kind</strong>: instance method of <a href="#FP4"><code>FP4</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP4{&quot;}&quot;}</code></p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/cryptojs/fp2"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">FP2</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/cryptojs/fp8"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">FP8</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#fp4" class="table-of-contents__link toc-highlight">FP4</a><ul><li><a href="#new-fp4" class="table-of-contents__link toc-highlight">new FP4()</a></li><li><a href="#fp4reduce" class="table-of-contents__link toc-highlight">fP4.reduce()</a></li><li><a href="#fp4norm" class="table-of-contents__link toc-highlight">fP4.norm()</a></li><li><a href="#fp4iszilch" class="table-of-contents__link toc-highlight">fP4.iszilch()</a></li><li><a href="#fp4isunity" class="table-of-contents__link toc-highlight">fP4.isunity()</a></li><li><a href="#fp4cmoveg-d" class="table-of-contents__link toc-highlight">fP4.cmove(g, d)</a></li><li><a href="#fp4isreal" class="table-of-contents__link toc-highlight">fP4.isreal()</a></li><li><a href="#fp4real" class="table-of-contents__link toc-highlight">fP4.real()</a></li><li><a href="#fp4geta" class="table-of-contents__link toc-highlight">fP4.geta()</a></li><li><a href="#fp4getb" class="table-of-contents__link toc-highlight">fP4.getb()</a></li><li><a href="#fp4equalsx" class="table-of-contents__link toc-highlight">fP4.equals(x)</a></li><li><a href="#fp4copyx" class="table-of-contents__link toc-highlight">fP4.copy(x)</a></li><li><a href="#fp4zero" class="table-of-contents__link toc-highlight">fP4.zero()</a></li><li><a href="#fp4onex" class="table-of-contents__link toc-highlight">fP4.one(x)</a></li><li><a href="#fp4setc-d" class="table-of-contents__link toc-highlight">fP4.set(c, d)</a></li><li><a href="#fp4setac" class="table-of-contents__link toc-highlight">fP4.seta(c)</a></li><li><a href="#fp4neg" class="table-of-contents__link toc-highlight">fP4.neg()</a></li><li><a href="#fp4conj" class="table-of-contents__link toc-highlight">fP4.conj()</a></li><li><a href="#fp4nconj" class="table-of-contents__link toc-highlight">fP4.nconj()</a></li><li><a href="#fp4addx" class="table-of-contents__link toc-highlight">fP4.add(x)</a></li><li><a href="#fp4subx" class="table-of-contents__link toc-highlight">fP4.sub(x)</a></li><li><a href="#fp4pmuls" class="table-of-contents__link toc-highlight">fP4.pmul(s)</a></li><li><a href="#fp4imuls" class="table-of-contents__link toc-highlight">fP4.imul(s)</a></li><li><a href="#fp4sqr" class="table-of-contents__link toc-highlight">fP4.sqr()</a></li><li><a href="#fp4muly" class="table-of-contents__link toc-highlight">fP4.mul(y)</a></li><li><a href="#fp4tostring" class="table-of-contents__link toc-highlight">fP4.toString()</a></li><li><a href="#fp4inverse" class="table-of-contents__link toc-highlight">fP4.inverse()</a></li><li><a href="#fp4times_i" class="table-of-contents__link toc-highlight">fP4.times_i()</a></li><li><a href="#fp4frobf" class="table-of-contents__link toc-highlight">fP4.frob(f)</a></li><li><a href="#fp4powe" class="table-of-contents__link toc-highlight">fP4.pow(e)</a></li><li><a href="#fp4xtr_aw-y-z" class="table-of-contents__link toc-highlight">fP4.xtr_A(w, y, z)</a></li><li><a href="#fp4xtr_d" class="table-of-contents__link toc-highlight">fP4.xtr_D()</a></li><li><a href="#fp4xtr_pown" class="table-of-contents__link toc-highlight">fP4.xtr_pow(n)</a></li><li><a href="#fp4xtr_pow2" class="table-of-contents__link toc-highlight">fP4.xtr_pow2()</a></li><li><a href="#fp4div2" class="table-of-contents__link toc-highlight">fP4.div2()</a></li><li><a href="#fp4div_i" class="table-of-contents__link toc-highlight">fP4.div_i()</a></li><li><a href="#fp4div_2i" class="table-of-contents__link toc-highlight">fP4.div_2i()</a></li><li><a href="#fp4qmuls" class="table-of-contents__link toc-highlight">fP4.qmul(s)</a></li><li><a href="#fp4sqrt" class="table-of-contents__link toc-highlight">fP4.sqrt()</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/cryptojs/fp48/index.html b/docs/cryptojs/fp48/index.html
index 3c9a0a2..5c5c1ad 100644
--- a/docs/cryptojs/fp48/index.html
+++ b/docs/cryptojs/fp48/index.html
@@ -1,393 +1,55 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>FP48 · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;a name=&quot;FP48&quot;&gt;&lt;/a&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="FP48 · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;a name=&quot;FP48&quot;&gt;&lt;/a&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>AMCL JavaScript API 1.0.0</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-cryptojs/fp48">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">FP48 | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/cryptojs/fp48"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="FP48 | Apache Milagro"><meta data-rh="true" name="description" content="FP48"><meta data-rh="true" property="og:description" content="FP48"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/cryptojs/fp48"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/fp48" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/fp48" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">FP48</h1></header><article><div><span><p><a name="FP48"></a></p>
-<h2><a class="anchor" aria-hidden="true" id="fp48"></a><a href="#fp48" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>FP48</h2>
-<p><strong>Kind</strong>: global class<br>
-<strong>this</strong>: <code>{FP48}</code></p>
-<ul>
-<li><a href="#FP48">FP48</a>
-<ul>
-<li><a href="#new_FP48_new">new FP48()</a></li>
-<li><em>instance</em>
-<ul>
-<li><a href="#FP48+reduce">.reduce()</a></li>
-<li><a href="#FP48+norm">.norm()</a></li>
-<li><a href="#FP48+iszilch">.iszilch()</a></li>
-<li><a href="#FP48+isunity">.isunity()</a></li>
-<li><a href="#FP48+cmove">.cmove(g, d)</a></li>
-<li><a href="#FP48+select">.select()</a></li>
-<li><a href="#FP48+geta">.geta()</a></li>
-<li><a href="#FP48+getb">.getb()</a></li>
-<li><a href="#FP48+getc">.getc()</a></li>
-<li><a href="#FP48+equals">.equals(x)</a></li>
-<li><a href="#FP48+copy">.copy(x)</a></li>
-<li><a href="#FP48+one">.one(x)</a></li>
-<li><a href="#FP48+zero">.zero()</a></li>
-<li><a href="#FP48+conj">.conj()</a></li>
-<li><a href="#FP48+set">.set(d, e, f)</a></li>
-<li><a href="#FP48+seta">.seta(c)</a></li>
-<li><a href="#FP48+usqr">.usqr()</a></li>
-<li><a href="#FP48+sqr">.sqr()</a></li>
-<li><a href="#FP48+mul">.mul(y)</a></li>
-<li><a href="#FP48+smul">.smul(y)</a></li>
-<li><a href="#FP48+ssmul">.ssmul(y)</a></li>
-<li><a href="#FP48+inverse">.inverse()</a></li>
-<li><a href="#FP48+frob">.frob(f)</a></li>
-<li><a href="#FP48+trace">.trace()</a></li>
-<li><a href="#FP48+toString">.toString()</a></li>
-<li><a href="#FP48+toBytes">.toBytes(w)</a></li>
-<li><a href="#FP48+pow">.pow(e)</a></li>
-<li><a href="#FP48+pinpow">.pinpow(e, bts)</a></li>
-<li><a href="#FP48+compow">.compow(e, r)</a></li>
-</ul></li>
-<li><em>static</em>
-<ul>
-<li><a href="#FP48.fromBytes">.fromBytes(w)</a></li>
-<li><a href="#FP48.teq">.teq()</a></li>
-<li><a href="#FP48.pow16">.pow16()</a></li>
-</ul></li>
-</ul></li>
-</ul>
-<p><a name="new_FP48_new"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="new-fp48"></a><a href="#new-fp48" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>new FP48()</h3>
-<p>Creates an instance of FP48.</p>
-<p><a name="FP48+reduce"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp48reduce"></a><a href="#fp48reduce" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP48.reduce()</h3>
-<p>Reduces all components of possibly unreduced FP48 mod Modulus</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a>  <br>
-<strong>this</strong>: <code>{FP48}</code>  <br>
-<a name="FP48+norm"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp48norm"></a><a href="#fp48norm" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP48.norm()</h3>
-<p>Normalises the components of an FP48</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a>  <br>
-<strong>this</strong>: <code>{FP48}</code>  <br>
-<a name="FP48+iszilch"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp48iszilch"></a><a href="#fp48iszilch" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP48.iszilch()</h3>
-<p>Tests for FP48 equal to zero</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a>  <br>
-<strong>this</strong>: <code>{FP48}</code>  <br>
-<a name="FP48+isunity"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp48isunity"></a><a href="#fp48isunity" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP48.isunity()</h3>
-<p>Tests for FP48 equal to unity</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a>  <br>
-<strong>this</strong>: <code>{FP48}</code>  <br>
-<a name="FP48+cmove"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp48cmoveg-d"></a><a href="#fp48cmoveg-d" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP48.cmove(g, d)</h3>
-<p>Conditional copy of FP48 number</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a>  <br>
-<strong>this</strong>: <code>{FP48}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>g</td><td>FP48 instance</td></tr>
-<tr><td>d</td><td>copy depends on this value</td></tr>
-</tbody>
-</table>
-<p><a name="FP48+select"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp48select"></a><a href="#fp48select" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP48.select()</h3>
-<p>Constant time select from pre-computed table</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a>  <br>
-<strong>this</strong>: <code>{FP48}</code>  <br>
-<a name="FP48+geta"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp48geta"></a><a href="#fp48geta" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP48.geta()</h3>
-<p>extract a from this</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a>  <br>
-<strong>this</strong>: <code>{FP48}</code>  <br>
-<a name="FP48+getb"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp48getb"></a><a href="#fp48getb" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP48.getb()</h3>
-<p>extract b from this</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a>  <br>
-<strong>this</strong>: <code>{FP48}</code>  <br>
-<a name="FP48+getc"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp48getc"></a><a href="#fp48getc" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP48.getc()</h3>
-<p>extract c from this</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a>  <br>
-<strong>this</strong>: <code>{FP48}</code>  <br>
-<a name="FP48+equals"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp48equalsx"></a><a href="#fp48equalsx" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP48.equals(x)</h3>
-<p>Tests for equality of two FP48s</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a>  <br>
-<strong>this</strong>: <code>{FP48}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>x</td><td>FP48 instance to compare</td></tr>
-</tbody>
-</table>
-<p><a name="FP48+copy"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp48copyx"></a><a href="#fp48copyx" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP48.copy(x)</h3>
-<p>Copy FP48 to another FP48</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a>  <br>
-<strong>this</strong>: <code>{FP48}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>x</td><td>FP48 instance to be copied</td></tr>
-</tbody>
-</table>
-<p><a name="FP48+one"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp48onex"></a><a href="#fp48onex" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP48.one(x)</h3>
-<p>Set FP48 to unity</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a>  <br>
-<strong>this</strong>: <code>{FP48}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>x</td><td>FP48 instance to be set to one</td></tr>
-</tbody>
-</table>
-<p><a name="FP48+zero"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp48zero"></a><a href="#fp48zero" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP48.zero()</h3>
-<p>Set FP48 to zero</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a>  <br>
-<strong>this</strong>: <code>{FP48}</code>  <br>
-<a name="FP48+conj"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp48conj"></a><a href="#fp48conj" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP48.conj()</h3>
-<p>Conjugation of FP48</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a>  <br>
-<strong>this</strong>: <code>{FP48}</code>  <br>
-<a name="FP48+set"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp48setd-e-f"></a><a href="#fp48setd-e-f" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP48.set(d, e, f)</h3>
-<p>Set FP48 from three FP16 values</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a>  <br>
-<strong>this</strong>: <code>{FP48}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>d</td><td>FP16 instance</td></tr>
-<tr><td>e</td><td>FP16 instance</td></tr>
-<tr><td>f</td><td>FP16 instance</td></tr>
-</tbody>
-</table>
-<p><a name="FP48+seta"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp48setac"></a><a href="#fp48setac" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP48.seta(c)</h3>
-<p>Set FP48 from one FP16 value</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a>  <br>
-<strong>this</strong>: <code>{FP48}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>c</td><td>FP16 instance</td></tr>
-</tbody>
-</table>
-<p><a name="FP48+usqr"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp48usqr"></a><a href="#fp48usqr" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP48.usqr()</h3>
-<p>Fast Squaring of an FP48 in &quot;unitary&quot; form</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a>  <br>
-<strong>this</strong>: <code>{FP48}</code>  <br>
-<a name="FP48+sqr"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp48sqr"></a><a href="#fp48sqr" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP48.sqr()</h3>
-<p>Fast Squaring of an FP48</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a>  <br>
-<strong>this</strong>: <code>{FP48}</code>  <br>
-<a name="FP48+mul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp48muly"></a><a href="#fp48muly" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP48.mul(y)</h3>
-<p>Full unconditional Multiplication of two FP48s</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a>  <br>
-<strong>this</strong>: <code>{FP48}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>y</td><td>FP48 instance, the multiplier</td></tr>
-</tbody>
-</table>
-<p><a name="FP48+smul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp48smuly"></a><a href="#fp48smuly" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP48.smul(y)</h3>
-<p>Fast multiplication of two sparse FP48s that arises from ATE pairing line functions</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a>  <br>
-<strong>this</strong>: <code>{FP48}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>y</td><td>FP48 instance, the multiplier</td></tr>
-</tbody>
-</table>
-<p><a name="FP48+ssmul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp48ssmuly"></a><a href="#fp48ssmuly" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP48.ssmul(y)</h3>
-<p>Fast multiplication of what may be sparse multiplicands</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a>  <br>
-<strong>this</strong>: <code>{FP48}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>y</td><td>FP48 instance, the multiplier</td></tr>
-</tbody>
-</table>
-<p><a name="FP48+inverse"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp48inverse"></a><a href="#fp48inverse" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP48.inverse()</h3>
-<p>Inverting an FP48</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a>  <br>
-<strong>this</strong>: <code>{FP48}</code>  <br>
-<a name="FP48+frob"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp48frobf"></a><a href="#fp48frobf" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP48.frob(f)</h3>
-<p>Raises an FP48 to the power of the internal modulus p, using the Frobenius</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a>  <br>
-<strong>this</strong>: <code>{FP48}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>f</td><td>Modulus</td></tr>
-</tbody>
-</table>
-<p><a name="FP48+trace"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp48trace"></a><a href="#fp48trace" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP48.trace()</h3>
-<p>Calculate the trace of an FP48</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a>  <br>
-<strong>this</strong>: <code>{FP48}</code>  <br>
-<a name="FP48+toString"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp48tostring"></a><a href="#fp48tostring" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP48.toString()</h3>
-<p>convert this to hex string</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a>  <br>
-<strong>this</strong>: <code>{FP48}</code>  <br>
-<a name="FP48+toBytes"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp48tobytesw"></a><a href="#fp48tobytesw" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP48.toBytes(w)</h3>
-<p>convert this to byte array</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a>  <br>
-<strong>this</strong>: <code>{FP48}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>w</td><td>Byte array</td></tr>
-</tbody>
-</table>
-<p><a name="FP48+pow"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp48powe"></a><a href="#fp48powe" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP48.pow(e)</h3>
-<p>Raises an FP48 to the power of a BIG</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a>  <br>
-<strong>this</strong>: <code>{FP48}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>e</td><td>BIG instance exponent</td></tr>
-</tbody>
-</table>
-<p><a name="FP48+pinpow"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp48pinpowe-bts"></a><a href="#fp48pinpowe-bts" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP48.pinpow(e, bts)</h3>
-<p>Raises an FP48 instance x to a small integer power, side-channel resistant</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a>  <br>
-<strong>this</strong>: <code>{FP48}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>e</td><td>small integer exponent</td></tr>
-<tr><td>bts</td><td>maximum number of bits in exponent</td></tr>
-</tbody>
-</table>
-<p><a name="FP48+compow"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp48compowe-r"></a><a href="#fp48compowe-r" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP48.compow(e, r)</h3>
-<p>Raises an FP48 instance to a BIG power, compressed to FP4</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a>  <br>
-<strong>this</strong>: <code>{FP48}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>e</td><td>BIG exponent</td></tr>
-<tr><td>r</td><td>BIG group order</td></tr>
-</tbody>
-</table>
-<p><a name="FP48.fromBytes"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp48frombytesw"></a><a href="#fp48frombytesw" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>FP48.fromBytes(w)</h3>
-<p>convert from byte array to FP48</p>
-<p><strong>Kind</strong>: static method of <a href="#FP48"><code>FP48</code></a>  <br>
-<strong>this</strong>: <code>{FP48}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>w</td><td>Byte array</td></tr>
-</tbody>
-</table>
-<p><a name="FP48.teq"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp48teq"></a><a href="#fp48teq" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>FP48.teq()</h3>
-<p>return 1 if b==c, no branching</p>
-<p><strong>Kind</strong>: static method of <a href="#FP48"><code>FP48</code></a>  <br>
-<strong>this</strong>: <code>{FP48}</code>  <br>
-<a name="FP48.pow16"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp48pow16"></a><a href="#fp48pow16" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>FP48.pow16()</h3>
-<p>p=q0^u0.q1^u1.q2^u2.q3^u3...</p>
-<p><strong>Kind</strong>: static method of <a href="#FP48"><code>FP48</code></a>  <br>
-<strong>this</strong>: <code>{FP48}</code></p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/cryptojs/fp24"><span class="arrow-prev">← </span><span>FP24</span></a><a class="docs-next button" href="/docs/cryptojs/gcm"><span>GCM</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#fp48">FP48</a><ul class="toc-headings"><li><a href="#new-fp48">new FP48()</a></li><li><a href="#fp48reduce">fP48.reduce()</a></li><li><a href="#fp48norm">fP48.norm()</a></li><li><a href="#fp48iszilch">fP48.iszilch()</a></li><li><a href="#fp48isunity">fP48.isunity()</a></li><li><a href="#fp48cmoveg-d">fP48.cmove(g, d)</a></li><li><a href="#fp48select">fP48.select()</a></li><li><a href="#fp48geta">fP48.geta()</a></li><li><a href="#fp48getb">fP48.getb()</a></li><li><a href="#fp48getc">fP48.getc()</a></li><li><a href="#fp48equalsx">fP48.equals(x)</a></li><li><a href="#fp48copyx">fP48.copy(x)</a></li><li><a href="#fp48onex">fP48.one(x)</a></li><li><a href="#fp48zero">fP48.zero()</a></li><li><a href="#fp48conj">fP48.conj()</a></li><li><a href="#fp48setd-e-f">fP48.set(d, e, f)</a></li><li><a href="#fp48setac">fP48.seta(c)</a></li><li><a href="#fp48usqr">fP48.usqr()</a></li><li><a href="#fp48sqr">fP48.sqr()</a></li><li><a href="#fp48muly">fP48.mul(y)</a></li><li><a href="#fp48smuly">fP48.smul(y)</a></li><li><a href="#fp48ssmuly">fP48.ssmul(y)</a></li><li><a href="#fp48inverse">fP48.inverse()</a></li><li><a href="#fp48frobf">fP48.frob(f)</a></li><li><a href="#fp48trace">fP48.trace()</a></li><li><a href="#fp48tostring">fP48.toString()</a></li><li><a href="#fp48tobytesw">fP48.toBytes(w)</a></li><li><a href="#fp48powe">fP48.pow(e)</a></li><li><a href="#fp48pinpowe-bts">fP48.pinpow(e, bts)</a></li><li><a href="#fp48compowe-r">fP48.compow(e, r)</a></li><li><a href="#fp48frombytesw">FP48.fromBytes(w)</a></li><li><a href="#fp48teq">FP48.teq()</a></li><li><a href="#fp48pow16">FP48.pow16()</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/amcl-overview">AMCL Library</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-overview">AMCL Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API 1.0.0</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/aes">AES</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/big">BIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls">BLS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls192">BLS192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls256">BLS256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/dbig">DBIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp">ECP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ff">FF</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp">FP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp2">FP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp4">FP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp8">FP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp12">FP12</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp16">FP16</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp24">FP24</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/cryptojs/fp48">FP48</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/gcm">GCM</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash256">HASH256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash384">HASH384</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash512">HASH512</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin">MPIN</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair">PAIR</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rand">RAND</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rsa">RSA</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/sha3">SHA3</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/unit64">UInt64</a></li></ul></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL Library</span><meta itemprop="position" content="1"></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL JavaScript API 1.0.0</span><meta itemprop="position" content="2"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">FP48</span><meta itemprop="position" content="3"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>FP48</h1></header><a name="FP48"></a><h2 class="anchor anchorWithStickyNavbar_LWe7" id="fp48">FP48<a class="hash-link" href="#fp48" title="Direct link to heading">​</a></h2><p><strong>Kind</strong>: global class<br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP48{&quot;}&quot;}</code>  </p><ul><li><a href="#FP48">FP48</a><ul><li><a href="#new_FP48_new">new FP48()</a></li><li><em>instance</em><ul><li><a href="#FP48+reduce">.reduce()</a></li><li><a href="#FP48+norm">.norm()</a></li><li><a href="#FP48+iszilch">.iszilch()</a></li><li><a href="#FP48+isunity">.isunity()</a></li><li><a href="#FP48+cmove">.cmove(g, d)</a></li><li><a href="#FP48+select">.select()</a></li><li><a href="#FP48+geta">.geta()</a></li><li><a href="#FP48+getb">.getb()</a></li><li><a href="#FP48+getc">.getc()</a></li><li><a href="#FP48+equals">.equals(x)</a></li><li><a href="#FP48+copy">.copy(x)</a></li><li><a href="#FP48+one">.one(x)</a></li><li><a href="#FP48+zero">.zero()</a></li><li><a href="#FP48+conj">.conj()</a></li><li><a href="#FP48+set">.set(d, e, f)</a></li><li><a href="#FP48+seta">.seta(c)</a></li><li><a href="#FP48+usqr">.usqr()</a></li><li><a href="#FP48+sqr">.sqr()</a></li><li><a href="#FP48+mul">.mul(y)</a></li><li><a href="#FP48+smul">.smul(y)</a></li><li><a href="#FP48+ssmul">.ssmul(y)</a></li><li><a href="#FP48+inverse">.inverse()</a></li><li><a href="#FP48+frob">.frob(f)</a></li><li><a href="#FP48+trace">.trace()</a></li><li><a href="#FP48+toString">.toString()</a></li><li><a href="#FP48+toBytes">.toBytes(w)</a></li><li><a href="#FP48+pow">.pow(e)</a></li><li><a href="#FP48+pinpow">.pinpow(e, bts)</a></li><li><a href="#FP48+compow">.compow(e, r)</a></li></ul></li><li><em>static</em><ul><li><a href="#FP48.fromBytes">.fromBytes(w)</a></li><li><a href="#FP48.teq">.teq()</a></li><li><a href="#FP48.pow16">.pow16()</a></li></ul></li></ul></li></ul><a name="new_FP48_new"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="new-fp48">new FP48()<a class="hash-link" href="#new-fp48" title="Direct link to heading">​</a></h3><p>Creates an instance of FP48.</p><a name="FP48+reduce"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp48reduce">fP48.reduce()<a class="hash-link" href="#fp48reduce" title="Direct link to heading">​</a></h3><p>Reduces all components of possibly unreduced FP48 mod Modulus</p><p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP48{&quot;}&quot;}</code>  </p><a name="FP48+norm"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp48norm">fP48.norm()<a class="hash-link" href="#fp48norm" title="Direct link to heading">​</a></h3><p>Normalises the components of an FP48</p><p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP48{&quot;}&quot;}</code>  </p><a name="FP48+iszilch"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp48iszilch">fP48.iszilch()<a class="hash-link" href="#fp48iszilch" title="Direct link to heading">​</a></h3><p>Tests for FP48 equal to zero</p><p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP48{&quot;}&quot;}</code>  </p><a name="FP48+isunity"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp48isunity">fP48.isunity()<a class="hash-link" href="#fp48isunity" title="Direct link to heading">​</a></h3><p>Tests for FP48 equal to unity</p><p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP48{&quot;}&quot;}</code>  </p><a name="FP48+cmove"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp48cmoveg-d">fP48.cmove(g, d)<a class="hash-link" href="#fp48cmoveg-d" title="Direct link to heading">​</a></h3><p>Conditional copy of FP48 number</p><p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP48{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>g</td><td>FP48 instance</td></tr><tr><td>d</td><td>copy depends on this value</td></tr></tbody></table><a name="FP48+select"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp48select">fP48.select()<a class="hash-link" href="#fp48select" title="Direct link to heading">​</a></h3><p>Constant time select from pre-computed table</p><p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP48{&quot;}&quot;}</code>  </p><a name="FP48+geta"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp48geta">fP48.geta()<a class="hash-link" href="#fp48geta" title="Direct link to heading">​</a></h3><p>extract a from this</p><p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP48{&quot;}&quot;}</code>  </p><a name="FP48+getb"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp48getb">fP48.getb()<a class="hash-link" href="#fp48getb" title="Direct link to heading">​</a></h3><p>extract b from this</p><p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP48{&quot;}&quot;}</code>  </p><a name="FP48+getc"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp48getc">fP48.getc()<a class="hash-link" href="#fp48getc" title="Direct link to heading">​</a></h3><p>extract c from this</p><p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP48{&quot;}&quot;}</code>  </p><a name="FP48+equals"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp48equalsx">fP48.equals(x)<a class="hash-link" href="#fp48equalsx" title="Direct link to heading">​</a></h3><p>Tests for equality of two FP48s</p><p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP48{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>x</td><td>FP48 instance to compare</td></tr></tbody></table><a name="FP48+copy"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp48copyx">fP48.copy(x)<a class="hash-link" href="#fp48copyx" title="Direct link to heading">​</a></h3><p>Copy FP48 to another FP48</p><p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP48{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>x</td><td>FP48 instance to be copied</td></tr></tbody></table><a name="FP48+one"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp48onex">fP48.one(x)<a class="hash-link" href="#fp48onex" title="Direct link to heading">​</a></h3><p>Set FP48 to unity</p><p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP48{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>x</td><td>FP48 instance to be set to one</td></tr></tbody></table><a name="FP48+zero"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp48zero">fP48.zero()<a class="hash-link" href="#fp48zero" title="Direct link to heading">​</a></h3><p>Set FP48 to zero</p><p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP48{&quot;}&quot;}</code>  </p><a name="FP48+conj"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp48conj">fP48.conj()<a class="hash-link" href="#fp48conj" title="Direct link to heading">​</a></h3><p>Conjugation of FP48</p><p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP48{&quot;}&quot;}</code>  </p><a name="FP48+set"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp48setd-e-f">fP48.set(d, e, f)<a class="hash-link" href="#fp48setd-e-f" title="Direct link to heading">​</a></h3><p>Set FP48 from three FP16 values</p><p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP48{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>d</td><td>FP16 instance</td></tr><tr><td>e</td><td>FP16 instance</td></tr><tr><td>f</td><td>FP16 instance</td></tr></tbody></table><a name="FP48+seta"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp48setac">fP48.seta(c)<a class="hash-link" href="#fp48setac" title="Direct link to heading">​</a></h3><p>Set FP48 from one FP16 value</p><p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP48{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>c</td><td>FP16 instance</td></tr></tbody></table><a name="FP48+usqr"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp48usqr">fP48.usqr()<a class="hash-link" href="#fp48usqr" title="Direct link to heading">​</a></h3><p>Fast Squaring of an FP48 in &quot;unitary&quot; form</p><p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP48{&quot;}&quot;}</code>  </p><a name="FP48+sqr"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp48sqr">fP48.sqr()<a class="hash-link" href="#fp48sqr" title="Direct link to heading">​</a></h3><p>Fast Squaring of an FP48</p><p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP48{&quot;}&quot;}</code>  </p><a name="FP48+mul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp48muly">fP48.mul(y)<a class="hash-link" href="#fp48muly" title="Direct link to heading">​</a></h3><p>Full unconditional Multiplication of two FP48s</p><p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP48{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>y</td><td>FP48 instance, the multiplier</td></tr></tbody></table><a name="FP48+smul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp48smuly">fP48.smul(y)<a class="hash-link" href="#fp48smuly" title="Direct link to heading">​</a></h3><p>Fast multiplication of two sparse FP48s that arises from ATE pairing line functions</p><p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP48{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>y</td><td>FP48 instance, the multiplier</td></tr></tbody></table><a name="FP48+ssmul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp48ssmuly">fP48.ssmul(y)<a class="hash-link" href="#fp48ssmuly" title="Direct link to heading">​</a></h3><p>Fast multiplication of what may be sparse multiplicands</p><p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP48{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>y</td><td>FP48 instance, the multiplier</td></tr></tbody></table><a name="FP48+inverse"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp48inverse">fP48.inverse()<a class="hash-link" href="#fp48inverse" title="Direct link to heading">​</a></h3><p>Inverting an FP48</p><p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP48{&quot;}&quot;}</code>  </p><a name="FP48+frob"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp48frobf">fP48.frob(f)<a class="hash-link" href="#fp48frobf" title="Direct link to heading">​</a></h3><p>Raises an FP48 to the power of the internal modulus p, using the Frobenius</p><p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP48{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>f</td><td>Modulus</td></tr></tbody></table><a name="FP48+trace"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp48trace">fP48.trace()<a class="hash-link" href="#fp48trace" title="Direct link to heading">​</a></h3><p>Calculate the trace of an FP48</p><p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP48{&quot;}&quot;}</code>  </p><a name="FP48+toString"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp48tostring">fP48.toString()<a class="hash-link" href="#fp48tostring" title="Direct link to heading">​</a></h3><p>convert this to hex string</p><p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP48{&quot;}&quot;}</code>  </p><a name="FP48+toBytes"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp48tobytesw">fP48.toBytes(w)<a class="hash-link" href="#fp48tobytesw" title="Direct link to heading">​</a></h3><p>convert this to byte array</p><p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP48{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>w</td><td>Byte array</td></tr></tbody></table><a name="FP48+pow"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp48powe">fP48.pow(e)<a class="hash-link" href="#fp48powe" title="Direct link to heading">​</a></h3><p>Raises an FP48 to the power of a BIG</p><p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP48{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>e</td><td>BIG instance exponent</td></tr></tbody></table><a name="FP48+pinpow"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp48pinpowe-bts">fP48.pinpow(e, bts)<a class="hash-link" href="#fp48pinpowe-bts" title="Direct link to heading">​</a></h3><p>Raises an FP48 instance x to a small integer power, side-channel resistant</p><p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP48{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>e</td><td>small integer exponent</td></tr><tr><td>bts</td><td>maximum number of bits in exponent</td></tr></tbody></table><a name="FP48+compow"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp48compowe-r">fP48.compow(e, r)<a class="hash-link" href="#fp48compowe-r" title="Direct link to heading">​</a></h3><p>Raises an FP48 instance to a BIG power, compressed to FP4</p><p><strong>Kind</strong>: instance method of <a href="#FP48"><code>FP48</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP48{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>e</td><td>BIG exponent</td></tr><tr><td>r</td><td>BIG group order</td></tr></tbody></table><a name="FP48.fromBytes"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp48frombytesw">FP48.fromBytes(w)<a class="hash-link" href="#fp48frombytesw" title="Direct link to heading">​</a></h3><p>convert from byte array to FP48</p><p><strong>Kind</strong>: static method of <a href="#FP48"><code>FP48</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP48{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>w</td><td>Byte array</td></tr></tbody></table><a name="FP48.teq"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp48teq">FP48.teq()<a class="hash-link" href="#fp48teq" title="Direct link to heading">​</a></h3><p>return 1 if b==c, no branching</p><p><strong>Kind</strong>: static method of <a href="#FP48"><code>FP48</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP48{&quot;}&quot;}</code>  </p><a name="FP48.pow16"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp48pow16">FP48.pow16()<a class="hash-link" href="#fp48pow16" title="Direct link to heading">​</a></h3><p>p=q0^u0.q1^u1.q2^u2.q3^u3...</p><p><strong>Kind</strong>: static method of <a href="#FP48"><code>FP48</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP48{&quot;}&quot;}</code></p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/cryptojs/fp24"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">FP24</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/cryptojs/gcm"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">GCM</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#fp48" class="table-of-contents__link toc-highlight">FP48</a><ul><li><a href="#new-fp48" class="table-of-contents__link toc-highlight">new FP48()</a></li><li><a href="#fp48reduce" class="table-of-contents__link toc-highlight">fP48.reduce()</a></li><li><a href="#fp48norm" class="table-of-contents__link toc-highlight">fP48.norm()</a></li><li><a href="#fp48iszilch" class="table-of-contents__link toc-highlight">fP48.iszilch()</a></li><li><a href="#fp48isunity" class="table-of-contents__link toc-highlight">fP48.isunity()</a></li><li><a href="#fp48cmoveg-d" class="table-of-contents__link toc-highlight">fP48.cmove(g, d)</a></li><li><a href="#fp48select" class="table-of-contents__link toc-highlight">fP48.select()</a></li><li><a href="#fp48geta" class="table-of-contents__link toc-highlight">fP48.geta()</a></li><li><a href="#fp48getb" class="table-of-contents__link toc-highlight">fP48.getb()</a></li><li><a href="#fp48getc" class="table-of-contents__link toc-highlight">fP48.getc()</a></li><li><a href="#fp48equalsx" class="table-of-contents__link toc-highlight">fP48.equals(x)</a></li><li><a href="#fp48copyx" class="table-of-contents__link toc-highlight">fP48.copy(x)</a></li><li><a href="#fp48onex" class="table-of-contents__link toc-highlight">fP48.one(x)</a></li><li><a href="#fp48zero" class="table-of-contents__link toc-highlight">fP48.zero()</a></li><li><a href="#fp48conj" class="table-of-contents__link toc-highlight">fP48.conj()</a></li><li><a href="#fp48setd-e-f" class="table-of-contents__link toc-highlight">fP48.set(d, e, f)</a></li><li><a href="#fp48setac" class="table-of-contents__link toc-highlight">fP48.seta(c)</a></li><li><a href="#fp48usqr" class="table-of-contents__link toc-highlight">fP48.usqr()</a></li><li><a href="#fp48sqr" class="table-of-contents__link toc-highlight">fP48.sqr()</a></li><li><a href="#fp48muly" class="table-of-contents__link toc-highlight">fP48.mul(y)</a></li><li><a href="#fp48smuly" class="table-of-contents__link toc-highlight">fP48.smul(y)</a></li><li><a href="#fp48ssmuly" class="table-of-contents__link toc-highlight">fP48.ssmul(y)</a></li><li><a href="#fp48inverse" class="table-of-contents__link toc-highlight">fP48.inverse()</a></li><li><a href="#fp48frobf" class="table-of-contents__link toc-highlight">fP48.frob(f)</a></li><li><a href="#fp48trace" class="table-of-contents__link toc-highlight">fP48.trace()</a></li><li><a href="#fp48tostring" class="table-of-contents__link toc-highlight">fP48.toString()</a></li><li><a href="#fp48tobytesw" class="table-of-contents__link toc-highlight">fP48.toBytes(w)</a></li><li><a href="#fp48powe" class="table-of-contents__link toc-highlight">fP48.pow(e)</a></li><li><a href="#fp48pinpowe-bts" class="table-of-contents__link toc-highlight">fP48.pinpow(e, bts)</a></li><li><a href="#fp48compowe-r" class="table-of-contents__link toc-highlight">fP48.compow(e, r)</a></li><li><a href="#fp48frombytesw" class="table-of-contents__link toc-highlight">FP48.fromBytes(w)</a></li><li><a href="#fp48teq" class="table-of-contents__link toc-highlight">FP48.teq()</a></li><li><a href="#fp48pow16" class="table-of-contents__link toc-highlight">FP48.pow16()</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/cryptojs/fp8/index.html b/docs/cryptojs/fp8/index.html
index cbcf7d8..8b3daa6 100644
--- a/docs/cryptojs/fp8/index.html
+++ b/docs/cryptojs/fp8/index.html
@@ -1,465 +1,64 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>FP8 · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;a name=&quot;FP8&quot;&gt;&lt;/a&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="FP8 · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;a name=&quot;FP8&quot;&gt;&lt;/a&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>AMCL JavaScript API 1.0.0</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-cryptojs/fp8">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">FP8 | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/cryptojs/fp8"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="FP8 | Apache Milagro"><meta data-rh="true" name="description" content="FP8"><meta data-rh="true" property="og:description" content="FP8"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/cryptojs/fp8"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/fp8" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/fp8" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">FP8</h1></header><article><div><span><p><a name="FP8"></a></p>
-<h2><a class="anchor" aria-hidden="true" id="fp8"></a><a href="#fp8" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>FP8</h2>
-<p><strong>Kind</strong>: global class<br>
-<strong>this</strong>: <code>{FP4}</code></p>
-<ul>
-<li><a href="#FP8">FP8</a>
-<ul>
-<li><a href="#new_FP8_new">new FP8(c, d)</a></li>
-<li><a href="#FP8+reduce">.reduce()</a></li>
-<li><a href="#FP8+norm">.norm()</a></li>
-<li><a href="#FP8+iszilch">.iszilch()</a></li>
-<li><a href="#FP8+isunity">.isunity()</a></li>
-<li><a href="#FP8+cmove">.cmove(g, d)</a></li>
-<li><a href="#FP8+isreal">.isreal()</a></li>
-<li><a href="#FP8+real">.real()</a></li>
-<li><a href="#FP8+geta">.geta()</a></li>
-<li><a href="#FP8+getb">.getb()</a></li>
-<li><a href="#FP8+equals">.equals(x)</a></li>
-<li><a href="#FP8+copy">.copy(x)</a></li>
-<li><a href="#FP8+zero">.zero()</a></li>
-<li><a href="#FP8+one">.one(x)</a></li>
-<li><a href="#FP8+set">.set(c, d)</a></li>
-<li><a href="#FP8+seta">.seta(c)</a></li>
-<li><a href="#FP8+neg">.neg()</a></li>
-<li><a href="#FP8+conj">.conj()</a></li>
-<li><a href="#FP8+nconj">.nconj()</a></li>
-<li><a href="#FP8+add">.add(x)</a></li>
-<li><a href="#FP8+sub">.sub(x)</a></li>
-<li><a href="#FP8+pmul">.pmul(s)</a></li>
-<li><a href="#FP8+imul">.imul(s)</a></li>
-<li><a href="#FP8+sqr">.sqr()</a></li>
-<li><a href="#FP8+mul">.mul(y)</a></li>
-<li><a href="#FP8+toString">.toString()</a></li>
-<li><a href="#FP8+inverse">.inverse()</a></li>
-<li><a href="#FP8+times_i">.times_i()</a></li>
-<li><a href="#FP8+times_i2">.times_i2()</a></li>
-<li><a href="#FP8+frob">.frob(f)</a></li>
-<li><a href="#FP8+pow">.pow(e)</a></li>
-<li><a href="#FP8+xtr_A">.xtr_A(w, y, z)</a></li>
-<li><a href="#FP8+xtr_D">.xtr_D()</a></li>
-<li><a href="#FP8+xtr_pow">.xtr_pow(n)</a></li>
-<li><a href="#FP8+xtr_pow2">.xtr_pow2()</a></li>
-<li><a href="#FP8+div2">.div2()</a></li>
-<li><a href="#FP8+div_i">.div_i()</a></li>
-<li><a href="#FP8+div_i2">.div_i2()</a></li>
-<li><a href="#FP8+div_2i">.div_2i()</a></li>
-<li><a href="#FP8+qmul">.qmul(s)</a></li>
-<li><a href="#FP8+tmul">.tmul(s)</a></li>
-<li><a href="#FP8+sqrt">.sqrt()</a></li>
-</ul></li>
-</ul>
-<p><a name="new_FP8_new"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="new-fp8c-d"></a><a href="#new-fp8c-d" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>new FP8(c, d)</h3>
-<p>Creates an instance of FP8</p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>c</td><td>FP8 / FP4 instance</td></tr>
-<tr><td>d</td><td>FP4 instance</td></tr>
-</tbody>
-</table>
-<p><a name="FP8+reduce"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp8reduce"></a><a href="#fp8reduce" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP8.reduce()</h3>
-<p>Reduces all components of possibly unreduced FP8 mod Modulus</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a>  <br>
-<strong>this</strong>: <code>{FP8}</code>  <br>
-<a name="FP8+norm"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp8norm"></a><a href="#fp8norm" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP8.norm()</h3>
-<p>Normalises the components of an FP8</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a>  <br>
-<strong>this</strong>: <code>{FP8}</code>  <br>
-<a name="FP8+iszilch"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp8iszilch"></a><a href="#fp8iszilch" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP8.iszilch()</h3>
-<p>Tests for FP8 equal to zero</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a>  <br>
-<strong>this</strong>: <code>{FP8}</code>  <br>
-<a name="FP8+isunity"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp8isunity"></a><a href="#fp8isunity" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP8.isunity()</h3>
-<p>Tests for FP8 equal to unity</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a>  <br>
-<strong>this</strong>: <code>{FP8}</code>  <br>
-<a name="FP8+cmove"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp8cmoveg-d"></a><a href="#fp8cmoveg-d" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP8.cmove(g, d)</h3>
-<p>Conditional copy of FP8 number</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a>  <br>
-<strong>this</strong>: <code>{FP8}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>g</td><td>FP8 instance</td></tr>
-<tr><td>d</td><td>copy depends on this value</td></tr>
-</tbody>
-</table>
-<p><a name="FP8+isreal"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp8isreal"></a><a href="#fp8isreal" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP8.isreal()</h3>
-<p>test is w real? That is in a+ib test b is zero</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a>  <br>
-<strong>this</strong>: <code>{FP8}</code>  <br>
-<a name="FP8+real"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp8real"></a><a href="#fp8real" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP8.real()</h3>
-<p>extract real part a</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a>  <br>
-<strong>this</strong>: <code>{FP8}</code>  <br>
-<a name="FP8+geta"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp8geta"></a><a href="#fp8geta" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP8.geta()</h3>
-<p>extract a from this</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a>  <br>
-<strong>this</strong>: <code>{FP8}</code>  <br>
-<a name="FP8+getb"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp8getb"></a><a href="#fp8getb" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP8.getb()</h3>
-<p>extract b from this</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a>  <br>
-<strong>this</strong>: <code>{FP8}</code>  <br>
-<a name="FP8+equals"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp8equalsx"></a><a href="#fp8equalsx" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP8.equals(x)</h3>
-<p>Tests for equality of two FP8s</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a>  <br>
-<strong>this</strong>: <code>{FP8}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>x</td><td>FP8 instance to compare</td></tr>
-</tbody>
-</table>
-<p><a name="FP8+copy"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp8copyx"></a><a href="#fp8copyx" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP8.copy(x)</h3>
-<p>Copy FP8 to another FP8</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a>  <br>
-<strong>this</strong>: <code>{FP8}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>x</td><td>FP8 instance to be copied</td></tr>
-</tbody>
-</table>
-<p><a name="FP8+zero"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp8zero"></a><a href="#fp8zero" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP8.zero()</h3>
-<p>Set FP8 to zero</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a>  <br>
-<strong>this</strong>: <code>{FP8}</code>  <br>
-<a name="FP8+one"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp8onex"></a><a href="#fp8onex" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP8.one(x)</h3>
-<p>Set FP8 to unity</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a>  <br>
-<strong>this</strong>: <code>{FP8}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>x</td><td>FP8 instance to be set to one</td></tr>
-</tbody>
-</table>
-<p><a name="FP8+set"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp8setc-d"></a><a href="#fp8setc-d" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP8.set(c, d)</h3>
-<p>Set FP8 from two FP4 values</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a>  <br>
-<strong>this</strong>: <code>{FP8}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>c</td><td>FP4 instance</td></tr>
-<tr><td>d</td><td>FP4 instance</td></tr>
-</tbody>
-</table>
-<p><a name="FP8+seta"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp8setac"></a><a href="#fp8setac" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP8.seta(c)</h3>
-<p>Set FP8 from one FP4 value</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a>  <br>
-<strong>this</strong>: <code>{FP8}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>c</td><td>FP4 instance</td></tr>
-</tbody>
-</table>
-<p><a name="FP8+neg"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp8neg"></a><a href="#fp8neg" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP8.neg()</h3>
-<p>Negation of FP8</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a>  <br>
-<strong>this</strong>: <code>{FP8}</code>  <br>
-<a name="FP8+conj"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp8conj"></a><a href="#fp8conj" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP8.conj()</h3>
-<p>Conjugation of FP8</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a>  <br>
-<strong>this</strong>: <code>{FP8}</code>  <br>
-<a name="FP8+nconj"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp8nconj"></a><a href="#fp8nconj" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP8.nconj()</h3>
-<p>Negative conjugation of FP8</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a>  <br>
-<strong>this</strong>: <code>{FP8}</code>  <br>
-<a name="FP8+add"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp8addx"></a><a href="#fp8addx" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP8.add(x)</h3>
-<p>addition of two FP8s</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a>  <br>
-<strong>this</strong>: <code>{FP8}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>x</td><td>FP8 instance</td></tr>
-</tbody>
-</table>
-<p><a name="FP8+sub"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp8subx"></a><a href="#fp8subx" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP8.sub(x)</h3>
-<p>subtraction of two FP8s</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a>  <br>
-<strong>this</strong>: <code>{FP8}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>x</td><td>FP8 instance</td></tr>
-</tbody>
-</table>
-<p><a name="FP8+pmul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp8pmuls"></a><a href="#fp8pmuls" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP8.pmul(s)</h3>
-<p>Multiplication of an FP8 by an FP8</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a>  <br>
-<strong>this</strong>: <code>{FP8}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>s</td><td>FP8 instance</td></tr>
-</tbody>
-</table>
-<p><a name="FP8+imul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp8imuls"></a><a href="#fp8imuls" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP8.imul(s)</h3>
-<p>Multiplication of an FP8 by a small integer</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a>  <br>
-<strong>this</strong>: <code>{FP8}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>s</td><td>integer</td></tr>
-</tbody>
-</table>
-<p><a name="FP8+sqr"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp8sqr"></a><a href="#fp8sqr" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP8.sqr()</h3>
-<p>Fast Squaring of an FP8</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a>  <br>
-<strong>this</strong>: <code>{FP8}</code>  <br>
-<a name="FP8+mul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp8muly"></a><a href="#fp8muly" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP8.mul(y)</h3>
-<p>Full unconditional Multiplication of two FP8s</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a>  <br>
-<strong>this</strong>: <code>{FP8}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>y</td><td>FP8 instance, the multiplier</td></tr>
-</tbody>
-</table>
-<p><a name="FP8+toString"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp8tostring"></a><a href="#fp8tostring" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP8.toString()</h3>
-<p>convert to hex string</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a>  <br>
-<strong>this</strong>: <code>{FP8}</code>  <br>
-<a name="FP8+inverse"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp8inverse"></a><a href="#fp8inverse" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP8.inverse()</h3>
-<p>Inverting an FP8</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a>  <br>
-<strong>this</strong>: <code>{FP8}</code>  <br>
-<a name="FP8+times_i"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp8times_i"></a><a href="#fp8times_i" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP8.times_i()</h3>
-<p>multiplies an FP8 instance by irreducible polynomial sqrt(1+sqrt(-1))</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a>  <br>
-<strong>this</strong>: <code>{FP8}</code>  <br>
-<a name="FP8+times_i2"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp8times_i2"></a><a href="#fp8times_i2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP8.times_i2()</h3>
-<p>multiplies an FP8 instance by irreducible polynomial (1+sqrt(-1))</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a>  <br>
-<strong>this</strong>: <code>{FP8}</code>  <br>
-<a name="FP8+frob"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp8frobf"></a><a href="#fp8frobf" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP8.frob(f)</h3>
-<p>Raises an FP8 to the power of the internal modulus p, using the Frobenius</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a>  <br>
-<strong>this</strong>: <code>{FP8}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>f</td><td>Modulus</td></tr>
-</tbody>
-</table>
-<p><a name="FP8+pow"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp8powe"></a><a href="#fp8powe" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP8.pow(e)</h3>
-<p>Raises an FP8 to the power of a BIG</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a>  <br>
-<strong>this</strong>: <code>{FP8}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>e</td><td>BIG instance exponent</td></tr>
-</tbody>
-</table>
-<p><a name="FP8+xtr_A"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp8xtr_aw-y-z"></a><a href="#fp8xtr_aw-y-z" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP8.xtr_A(w, y, z)</h3>
-<p>Calculates the XTR addition function r=w<em>x-conj(x)</em>y+z</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a>  <br>
-<strong>this</strong>: <code>{FP8}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>w</td><td>FP8 instance</td></tr>
-<tr><td>y</td><td>FP8 instance</td></tr>
-<tr><td>z</td><td>FP8 instance</td></tr>
-</tbody>
-</table>
-<p><a name="FP8+xtr_D"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp8xtr_d"></a><a href="#fp8xtr_d" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP8.xtr_D()</h3>
-<p>Calculates the XTR doubling function r=x^2-2*conj(x)</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a>  <br>
-<strong>this</strong>: <code>{FP8}</code>  <br>
-<a name="FP8+xtr_pow"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp8xtr_pown"></a><a href="#fp8xtr_pown" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP8.xtr_pow(n)</h3>
-<p>Calculates FP8 trace of an FP8 raised to the power of a BIG number</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a>  <br>
-<strong>this</strong>: <code>{FP8}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>n</td><td>Big number</td></tr>
-</tbody>
-</table>
-<p><a name="FP8+xtr_pow2"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp8xtr_pow2"></a><a href="#fp8xtr_pow2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP8.xtr_pow2()</h3>
-<p>Calculates FP8 trace of c^a.d^b, where c and d are derived from FP8 traces of FP8s</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a>  <br>
-<strong>this</strong>: <code>{FP8}</code>  <br>
-<a name="FP8+div2"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp8div2"></a><a href="#fp8div2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP8.div2()</h3>
-<p>Divide an FP8 by 2</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a>  <br>
-<strong>this</strong>: <code>{FP8}</code>  <br>
-<a name="FP8+div_i"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp8div_i"></a><a href="#fp8div_i" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP8.div_i()</h3>
-<p>Divide FP8 number by QNR</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a>  <br>
-<strong>this</strong>: <code>{FP8}</code>  <br>
-<a name="FP8+div_i2"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp8div_i2"></a><a href="#fp8div_i2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP8.div_i2()</h3>
-<p>Divide an FP8 by QNR twice</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a>  <br>
-<strong>this</strong>: <code>{FP8}</code>  <br>
-<a name="FP8+div_2i"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp8div_2i"></a><a href="#fp8div_2i" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP8.div_2i()</h3>
-<p>Divide an FP8 by QNR/2</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a>  <br>
-<strong>this</strong>: <code>{FP8}</code>  <br>
-<a name="FP8+qmul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp8qmuls"></a><a href="#fp8qmuls" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP8.qmul(s)</h3>
-<p>Multiplication of an FP8 by an FP2</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a>  <br>
-<strong>this</strong>: <code>{FP8}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>s</td><td>FP2 multiplier</td></tr>
-</tbody>
-</table>
-<p><a name="FP8+tmul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp8tmuls"></a><a href="#fp8tmuls" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP8.tmul(s)</h3>
-<p>Multiplication of an FP8 by an FP</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a>  <br>
-<strong>this</strong>: <code>{FP8}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>s</td><td>FP multiplier</td></tr>
-</tbody>
-</table>
-<p><a name="FP8+sqrt"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="fp8sqrt"></a><a href="#fp8sqrt" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>fP8.sqrt()</h3>
-<p>Calculate square root of an FP8</p>
-<p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a>  <br>
-<strong>this</strong>: <code>{FP8}</code></p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/cryptojs/fp4"><span class="arrow-prev">← </span><span>FP4</span></a><a class="docs-next button" href="/docs/cryptojs/fp12"><span>FP12</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#fp8">FP8</a><ul class="toc-headings"><li><a href="#new-fp8c-d">new FP8(c, d)</a></li><li><a href="#fp8reduce">fP8.reduce()</a></li><li><a href="#fp8norm">fP8.norm()</a></li><li><a href="#fp8iszilch">fP8.iszilch()</a></li><li><a href="#fp8isunity">fP8.isunity()</a></li><li><a href="#fp8cmoveg-d">fP8.cmove(g, d)</a></li><li><a href="#fp8isreal">fP8.isreal()</a></li><li><a href="#fp8real">fP8.real()</a></li><li><a href="#fp8geta">fP8.geta()</a></li><li><a href="#fp8getb">fP8.getb()</a></li><li><a href="#fp8equalsx">fP8.equals(x)</a></li><li><a href="#fp8copyx">fP8.copy(x)</a></li><li><a href="#fp8zero">fP8.zero()</a></li><li><a href="#fp8onex">fP8.one(x)</a></li><li><a href="#fp8setc-d">fP8.set(c, d)</a></li><li><a href="#fp8setac">fP8.seta(c)</a></li><li><a href="#fp8neg">fP8.neg()</a></li><li><a href="#fp8conj">fP8.conj()</a></li><li><a href="#fp8nconj">fP8.nconj()</a></li><li><a href="#fp8addx">fP8.add(x)</a></li><li><a href="#fp8subx">fP8.sub(x)</a></li><li><a href="#fp8pmuls">fP8.pmul(s)</a></li><li><a href="#fp8imuls">fP8.imul(s)</a></li><li><a href="#fp8sqr">fP8.sqr()</a></li><li><a href="#fp8muly">fP8.mul(y)</a></li><li><a href="#fp8tostring">fP8.toString()</a></li><li><a href="#fp8inverse">fP8.inverse()</a></li><li><a href="#fp8times_i">fP8.times_i()</a></li><li><a href="#fp8times_i2">fP8.times_i2()</a></li><li><a href="#fp8frobf">fP8.frob(f)</a></li><li><a href="#fp8powe">fP8.pow(e)</a></li><li><a href="#fp8xtr_aw-y-z">fP8.xtr_A(w, y, z)</a></li><li><a href="#fp8xtr_d">fP8.xtr_D()</a></li><li><a href="#fp8xtr_pown">fP8.xtr_pow(n)</a></li><li><a href="#fp8xtr_pow2">fP8.xtr_pow2()</a></li><li><a href="#fp8div2">fP8.div2()</a></li><li><a href="#fp8div_i">fP8.div_i()</a></li><li><a href="#fp8div_i2">fP8.div_i2()</a></li><li><a href="#fp8div_2i">fP8.div_2i()</a></li><li><a href="#fp8qmuls">fP8.qmul(s)</a></li><li><a href="#fp8tmuls">fP8.tmul(s)</a></li><li><a href="#fp8sqrt">fP8.sqrt()</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/amcl-overview">AMCL Library</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-overview">AMCL Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API 1.0.0</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/aes">AES</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/big">BIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls">BLS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls192">BLS192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls256">BLS256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/dbig">DBIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp">ECP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ff">FF</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp">FP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp2">FP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp4">FP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/cryptojs/fp8">FP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp12">FP12</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp16">FP16</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp24">FP24</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp48">FP48</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/gcm">GCM</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash256">HASH256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash384">HASH384</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash512">HASH512</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin">MPIN</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair">PAIR</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rand">RAND</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rsa">RSA</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/sha3">SHA3</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/unit64">UInt64</a></li></ul></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL Library</span><meta itemprop="position" content="1"></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL JavaScript API 1.0.0</span><meta itemprop="position" content="2"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">FP8</span><meta itemprop="position" content="3"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>FP8</h1></header><a name="FP8"></a><h2 class="anchor anchorWithStickyNavbar_LWe7" id="fp8">FP8<a class="hash-link" href="#fp8" title="Direct link to heading">​</a></h2><p><strong>Kind</strong>: global class<br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP4{&quot;}&quot;}</code>  </p><ul><li><a href="#FP8">FP8</a><ul><li><a href="#new_FP8_new">new FP8(c, d)</a></li><li><a href="#FP8+reduce">.reduce()</a></li><li><a href="#FP8+norm">.norm()</a></li><li><a href="#FP8+iszilch">.iszilch()</a></li><li><a href="#FP8+isunity">.isunity()</a></li><li><a href="#FP8+cmove">.cmove(g, d)</a></li><li><a href="#FP8+isreal">.isreal()</a></li><li><a href="#FP8+real">.real()</a></li><li><a href="#FP8+geta">.geta()</a></li><li><a href="#FP8+getb">.getb()</a></li><li><a href="#FP8+equals">.equals(x)</a></li><li><a href="#FP8+copy">.copy(x)</a></li><li><a href="#FP8+zero">.zero()</a></li><li><a href="#FP8+one">.one(x)</a></li><li><a href="#FP8+set">.set(c, d)</a></li><li><a href="#FP8+seta">.seta(c)</a></li><li><a href="#FP8+neg">.neg()</a></li><li><a href="#FP8+conj">.conj()</a></li><li><a href="#FP8+nconj">.nconj()</a></li><li><a href="#FP8+add">.add(x)</a></li><li><a href="#FP8+sub">.sub(x)</a></li><li><a href="#FP8+pmul">.pmul(s)</a></li><li><a href="#FP8+imul">.imul(s)</a></li><li><a href="#FP8+sqr">.sqr()</a></li><li><a href="#FP8+mul">.mul(y)</a></li><li><a href="#FP8+toString">.toString()</a></li><li><a href="#FP8+inverse">.inverse()</a></li><li><a href="#FP8+times_i">.times_i()</a></li><li><a href="#FP8+times_i2">.times_i2()</a></li><li><a href="#FP8+frob">.frob(f)</a></li><li><a href="#FP8+pow">.pow(e)</a></li><li><a href="#FP8+xtr_A">.xtr_A(w, y, z)</a></li><li><a href="#FP8+xtr_D">.xtr_D()</a></li><li><a href="#FP8+xtr_pow">.xtr_pow(n)</a></li><li><a href="#FP8+xtr_pow2">.xtr_pow2()</a></li><li><a href="#FP8+div2">.div2()</a></li><li><a href="#FP8+div_i">.div_i()</a></li><li><a href="#FP8+div_i2">.div_i2()</a></li><li><a href="#FP8+div_2i">.div_2i()</a></li><li><a href="#FP8+qmul">.qmul(s)</a></li><li><a href="#FP8+tmul">.tmul(s)</a></li><li><a href="#FP8+sqrt">.sqrt()</a></li></ul></li></ul><a name="new_FP8_new"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="new-fp8c-d">new FP8(c, d)<a class="hash-link" href="#new-fp8c-d" title="Direct link to heading">​</a></h3><p>Creates an instance of FP8</p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>c</td><td>FP8 / FP4 instance</td></tr><tr><td>d</td><td>FP4 instance</td></tr></tbody></table><a name="FP8+reduce"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp8reduce">fP8.reduce()<a class="hash-link" href="#fp8reduce" title="Direct link to heading">​</a></h3><p>Reduces all components of possibly unreduced FP8 mod Modulus</p><p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP8{&quot;}&quot;}</code>  </p><a name="FP8+norm"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp8norm">fP8.norm()<a class="hash-link" href="#fp8norm" title="Direct link to heading">​</a></h3><p>Normalises the components of an FP8</p><p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP8{&quot;}&quot;}</code>  </p><a name="FP8+iszilch"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp8iszilch">fP8.iszilch()<a class="hash-link" href="#fp8iszilch" title="Direct link to heading">​</a></h3><p>Tests for FP8 equal to zero</p><p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP8{&quot;}&quot;}</code>  </p><a name="FP8+isunity"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp8isunity">fP8.isunity()<a class="hash-link" href="#fp8isunity" title="Direct link to heading">​</a></h3><p>Tests for FP8 equal to unity</p><p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP8{&quot;}&quot;}</code>  </p><a name="FP8+cmove"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp8cmoveg-d">fP8.cmove(g, d)<a class="hash-link" href="#fp8cmoveg-d" title="Direct link to heading">​</a></h3><p>Conditional copy of FP8 number</p><p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP8{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>g</td><td>FP8 instance</td></tr><tr><td>d</td><td>copy depends on this value</td></tr></tbody></table><a name="FP8+isreal"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp8isreal">fP8.isreal()<a class="hash-link" href="#fp8isreal" title="Direct link to heading">​</a></h3><p>test is w real? That is in a+ib test b is zero</p><p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP8{&quot;}&quot;}</code>  </p><a name="FP8+real"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp8real">fP8.real()<a class="hash-link" href="#fp8real" title="Direct link to heading">​</a></h3><p>extract real part a</p><p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP8{&quot;}&quot;}</code>  </p><a name="FP8+geta"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp8geta">fP8.geta()<a class="hash-link" href="#fp8geta" title="Direct link to heading">​</a></h3><p>extract a from this</p><p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP8{&quot;}&quot;}</code>  </p><a name="FP8+getb"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp8getb">fP8.getb()<a class="hash-link" href="#fp8getb" title="Direct link to heading">​</a></h3><p>extract b from this</p><p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP8{&quot;}&quot;}</code>  </p><a name="FP8+equals"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp8equalsx">fP8.equals(x)<a class="hash-link" href="#fp8equalsx" title="Direct link to heading">​</a></h3><p>Tests for equality of two FP8s</p><p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP8{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>x</td><td>FP8 instance to compare</td></tr></tbody></table><a name="FP8+copy"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp8copyx">fP8.copy(x)<a class="hash-link" href="#fp8copyx" title="Direct link to heading">​</a></h3><p>Copy FP8 to another FP8</p><p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP8{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>x</td><td>FP8 instance to be copied</td></tr></tbody></table><a name="FP8+zero"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp8zero">fP8.zero()<a class="hash-link" href="#fp8zero" title="Direct link to heading">​</a></h3><p>Set FP8 to zero</p><p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP8{&quot;}&quot;}</code>  </p><a name="FP8+one"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp8onex">fP8.one(x)<a class="hash-link" href="#fp8onex" title="Direct link to heading">​</a></h3><p>Set FP8 to unity</p><p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP8{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>x</td><td>FP8 instance to be set to one</td></tr></tbody></table><a name="FP8+set"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp8setc-d">fP8.set(c, d)<a class="hash-link" href="#fp8setc-d" title="Direct link to heading">​</a></h3><p>Set FP8 from two FP4 values</p><p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP8{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>c</td><td>FP4 instance</td></tr><tr><td>d</td><td>FP4 instance</td></tr></tbody></table><a name="FP8+seta"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp8setac">fP8.seta(c)<a class="hash-link" href="#fp8setac" title="Direct link to heading">​</a></h3><p>Set FP8 from one FP4 value</p><p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP8{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>c</td><td>FP4 instance</td></tr></tbody></table><a name="FP8+neg"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp8neg">fP8.neg()<a class="hash-link" href="#fp8neg" title="Direct link to heading">​</a></h3><p>Negation of FP8</p><p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP8{&quot;}&quot;}</code>  </p><a name="FP8+conj"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp8conj">fP8.conj()<a class="hash-link" href="#fp8conj" title="Direct link to heading">​</a></h3><p>Conjugation of FP8</p><p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP8{&quot;}&quot;}</code>  </p><a name="FP8+nconj"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp8nconj">fP8.nconj()<a class="hash-link" href="#fp8nconj" title="Direct link to heading">​</a></h3><p>Negative conjugation of FP8</p><p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP8{&quot;}&quot;}</code>  </p><a name="FP8+add"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp8addx">fP8.add(x)<a class="hash-link" href="#fp8addx" title="Direct link to heading">​</a></h3><p>addition of two FP8s</p><p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP8{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>x</td><td>FP8 instance</td></tr></tbody></table><a name="FP8+sub"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp8subx">fP8.sub(x)<a class="hash-link" href="#fp8subx" title="Direct link to heading">​</a></h3><p>subtraction of two FP8s</p><p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP8{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>x</td><td>FP8 instance</td></tr></tbody></table><a name="FP8+pmul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp8pmuls">fP8.pmul(s)<a class="hash-link" href="#fp8pmuls" title="Direct link to heading">​</a></h3><p>Multiplication of an FP8 by an FP8</p><p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP8{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>s</td><td>FP8 instance</td></tr></tbody></table><a name="FP8+imul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp8imuls">fP8.imul(s)<a class="hash-link" href="#fp8imuls" title="Direct link to heading">​</a></h3><p>Multiplication of an FP8 by a small integer</p><p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP8{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>s</td><td>integer</td></tr></tbody></table><a name="FP8+sqr"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp8sqr">fP8.sqr()<a class="hash-link" href="#fp8sqr" title="Direct link to heading">​</a></h3><p>Fast Squaring of an FP8</p><p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP8{&quot;}&quot;}</code>  </p><a name="FP8+mul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp8muly">fP8.mul(y)<a class="hash-link" href="#fp8muly" title="Direct link to heading">​</a></h3><p>Full unconditional Multiplication of two FP8s</p><p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP8{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>y</td><td>FP8 instance, the multiplier</td></tr></tbody></table><a name="FP8+toString"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp8tostring">fP8.toString()<a class="hash-link" href="#fp8tostring" title="Direct link to heading">​</a></h3><p>convert to hex string</p><p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP8{&quot;}&quot;}</code>  </p><a name="FP8+inverse"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp8inverse">fP8.inverse()<a class="hash-link" href="#fp8inverse" title="Direct link to heading">​</a></h3><p>Inverting an FP8</p><p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP8{&quot;}&quot;}</code>  </p><a name="FP8+times_i"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp8times_i">fP8.times_i()<a class="hash-link" href="#fp8times_i" title="Direct link to heading">​</a></h3><p>multiplies an FP8 instance by irreducible polynomial sqrt(1+sqrt(-1))</p><p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP8{&quot;}&quot;}</code>  </p><a name="FP8+times_i2"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp8times_i2">fP8.times_i2()<a class="hash-link" href="#fp8times_i2" title="Direct link to heading">​</a></h3><p>multiplies an FP8 instance by irreducible polynomial (1+sqrt(-1))</p><p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP8{&quot;}&quot;}</code>  </p><a name="FP8+frob"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp8frobf">fP8.frob(f)<a class="hash-link" href="#fp8frobf" title="Direct link to heading">​</a></h3><p>Raises an FP8 to the power of the internal modulus p, using the Frobenius</p><p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP8{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>f</td><td>Modulus</td></tr></tbody></table><a name="FP8+pow"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp8powe">fP8.pow(e)<a class="hash-link" href="#fp8powe" title="Direct link to heading">​</a></h3><p>Raises an FP8 to the power of a BIG</p><p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP8{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>e</td><td>BIG instance exponent</td></tr></tbody></table><a name="FP8+xtr_A"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp8xtr_aw-y-z">fP8.xtr_A(w, y, z)<a class="hash-link" href="#fp8xtr_aw-y-z" title="Direct link to heading">​</a></h3><p>Calculates the XTR addition function r=w_x-conj(x)_y+z</p><p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP8{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>w</td><td>FP8 instance</td></tr><tr><td>y</td><td>FP8 instance</td></tr><tr><td>z</td><td>FP8 instance</td></tr></tbody></table><a name="FP8+xtr_D"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp8xtr_d">fP8.xtr_D()<a class="hash-link" href="#fp8xtr_d" title="Direct link to heading">​</a></h3><p>Calculates the XTR doubling function r=x^2-2<!-- -->*<!-- -->conj(x)</p><p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP8{&quot;}&quot;}</code>  </p><a name="FP8+xtr_pow"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp8xtr_pown">fP8.xtr_pow(n)<a class="hash-link" href="#fp8xtr_pown" title="Direct link to heading">​</a></h3><p>Calculates FP8 trace of an FP8 raised to the power of a BIG number</p><p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP8{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>n</td><td>Big number</td></tr></tbody></table><a name="FP8+xtr_pow2"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp8xtr_pow2">fP8.xtr_pow2()<a class="hash-link" href="#fp8xtr_pow2" title="Direct link to heading">​</a></h3><p>Calculates FP8 trace of c^a.d^b, where c and d are derived from FP8 traces of FP8s</p><p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP8{&quot;}&quot;}</code>  </p><a name="FP8+div2"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp8div2">fP8.div2()<a class="hash-link" href="#fp8div2" title="Direct link to heading">​</a></h3><p>Divide an FP8 by 2</p><p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP8{&quot;}&quot;}</code>  </p><a name="FP8+div_i"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp8div_i">fP8.div_i()<a class="hash-link" href="#fp8div_i" title="Direct link to heading">​</a></h3><p>Divide FP8 number by QNR</p><p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP8{&quot;}&quot;}</code>  </p><a name="FP8+div_i2"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp8div_i2">fP8.div_i2()<a class="hash-link" href="#fp8div_i2" title="Direct link to heading">​</a></h3><p>Divide an FP8 by QNR twice</p><p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP8{&quot;}&quot;}</code>  </p><a name="FP8+div_2i"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp8div_2i">fP8.div_2i()<a class="hash-link" href="#fp8div_2i" title="Direct link to heading">​</a></h3><p>Divide an FP8 by QNR/2</p><p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP8{&quot;}&quot;}</code>  </p><a name="FP8+qmul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp8qmuls">fP8.qmul(s)<a class="hash-link" href="#fp8qmuls" title="Direct link to heading">​</a></h3><p>Multiplication of an FP8 by an FP2</p><p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP8{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>s</td><td>FP2 multiplier</td></tr></tbody></table><a name="FP8+tmul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp8tmuls">fP8.tmul(s)<a class="hash-link" href="#fp8tmuls" title="Direct link to heading">​</a></h3><p>Multiplication of an FP8 by an FP</p><p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP8{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>s</td><td>FP multiplier</td></tr></tbody></table><a name="FP8+sqrt"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="fp8sqrt">fP8.sqrt()<a class="hash-link" href="#fp8sqrt" title="Direct link to heading">​</a></h3><p>Calculate square root of an FP8</p><p><strong>Kind</strong>: instance method of <a href="#FP8"><code>FP8</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}FP8{&quot;}&quot;}</code></p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/cryptojs/fp4"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">FP4</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/cryptojs/fp12"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">FP12</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#fp8" class="table-of-contents__link toc-highlight">FP8</a><ul><li><a href="#new-fp8c-d" class="table-of-contents__link toc-highlight">new FP8(c, d)</a></li><li><a href="#fp8reduce" class="table-of-contents__link toc-highlight">fP8.reduce()</a></li><li><a href="#fp8norm" class="table-of-contents__link toc-highlight">fP8.norm()</a></li><li><a href="#fp8iszilch" class="table-of-contents__link toc-highlight">fP8.iszilch()</a></li><li><a href="#fp8isunity" class="table-of-contents__link toc-highlight">fP8.isunity()</a></li><li><a href="#fp8cmoveg-d" class="table-of-contents__link toc-highlight">fP8.cmove(g, d)</a></li><li><a href="#fp8isreal" class="table-of-contents__link toc-highlight">fP8.isreal()</a></li><li><a href="#fp8real" class="table-of-contents__link toc-highlight">fP8.real()</a></li><li><a href="#fp8geta" class="table-of-contents__link toc-highlight">fP8.geta()</a></li><li><a href="#fp8getb" class="table-of-contents__link toc-highlight">fP8.getb()</a></li><li><a href="#fp8equalsx" class="table-of-contents__link toc-highlight">fP8.equals(x)</a></li><li><a href="#fp8copyx" class="table-of-contents__link toc-highlight">fP8.copy(x)</a></li><li><a href="#fp8zero" class="table-of-contents__link toc-highlight">fP8.zero()</a></li><li><a href="#fp8onex" class="table-of-contents__link toc-highlight">fP8.one(x)</a></li><li><a href="#fp8setc-d" class="table-of-contents__link toc-highlight">fP8.set(c, d)</a></li><li><a href="#fp8setac" class="table-of-contents__link toc-highlight">fP8.seta(c)</a></li><li><a href="#fp8neg" class="table-of-contents__link toc-highlight">fP8.neg()</a></li><li><a href="#fp8conj" class="table-of-contents__link toc-highlight">fP8.conj()</a></li><li><a href="#fp8nconj" class="table-of-contents__link toc-highlight">fP8.nconj()</a></li><li><a href="#fp8addx" class="table-of-contents__link toc-highlight">fP8.add(x)</a></li><li><a href="#fp8subx" class="table-of-contents__link toc-highlight">fP8.sub(x)</a></li><li><a href="#fp8pmuls" class="table-of-contents__link toc-highlight">fP8.pmul(s)</a></li><li><a href="#fp8imuls" class="table-of-contents__link toc-highlight">fP8.imul(s)</a></li><li><a href="#fp8sqr" class="table-of-contents__link toc-highlight">fP8.sqr()</a></li><li><a href="#fp8muly" class="table-of-contents__link toc-highlight">fP8.mul(y)</a></li><li><a href="#fp8tostring" class="table-of-contents__link toc-highlight">fP8.toString()</a></li><li><a href="#fp8inverse" class="table-of-contents__link toc-highlight">fP8.inverse()</a></li><li><a href="#fp8times_i" class="table-of-contents__link toc-highlight">fP8.times_i()</a></li><li><a href="#fp8times_i2" class="table-of-contents__link toc-highlight">fP8.times_i2()</a></li><li><a href="#fp8frobf" class="table-of-contents__link toc-highlight">fP8.frob(f)</a></li><li><a href="#fp8powe" class="table-of-contents__link toc-highlight">fP8.pow(e)</a></li><li><a href="#fp8xtr_aw-y-z" class="table-of-contents__link toc-highlight">fP8.xtr_A(w, y, z)</a></li><li><a href="#fp8xtr_d" class="table-of-contents__link toc-highlight">fP8.xtr_D()</a></li><li><a href="#fp8xtr_pown" class="table-of-contents__link toc-highlight">fP8.xtr_pow(n)</a></li><li><a href="#fp8xtr_pow2" class="table-of-contents__link toc-highlight">fP8.xtr_pow2()</a></li><li><a href="#fp8div2" class="table-of-contents__link toc-highlight">fP8.div2()</a></li><li><a href="#fp8div_i" class="table-of-contents__link toc-highlight">fP8.div_i()</a></li><li><a href="#fp8div_i2" class="table-of-contents__link toc-highlight">fP8.div_i2()</a></li><li><a href="#fp8div_2i" class="table-of-contents__link toc-highlight">fP8.div_2i()</a></li><li><a href="#fp8qmuls" class="table-of-contents__link toc-highlight">fP8.qmul(s)</a></li><li><a href="#fp8tmuls" class="table-of-contents__link toc-highlight">fP8.tmul(s)</a></li><li><a href="#fp8sqrt" class="table-of-contents__link toc-highlight">fP8.sqrt()</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/cryptojs/gcm/index.html b/docs/cryptojs/gcm/index.html
index adebb7f..ebd2d80 100644
--- a/docs/cryptojs/gcm/index.html
+++ b/docs/cryptojs/gcm/index.html
@@ -1,134 +1,29 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>GCM · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;a name=&quot;GCM&quot;&gt;&lt;/a&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="GCM · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;a name=&quot;GCM&quot;&gt;&lt;/a&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>AMCL JavaScript API 1.0.0</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-cryptojs/gcm">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">GCM | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/cryptojs/gcm"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="GCM | Apache Milagro"><meta data-rh="true" name="description" content="GCM"><meta data-rh="true" property="og:description" content="GCM"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/cryptojs/gcm"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/gcm" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/gcm" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">GCM</h1></header><article><div><span><p><a name="GCM"></a></p>
-<h2><a class="anchor" aria-hidden="true" id="gcm"></a><a href="#gcm" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>GCM</h2>
-<p><strong>Kind</strong>: global class<br>
-<strong>this</strong>: <code>{GCM}</code></p>
-<ul>
-<li><a href="#GCM">GCM</a>
-<ul>
-<li><a href="#new_GCM_new">new GCM()</a></li>
-<li><a href="#GCM+init">.init(nk, key, niv, iv)</a></li>
-<li><a href="#GCM+add_header">.add_header(header, len)</a></li>
-<li><a href="#GCM+add_plain">.add_plain(plain, len)</a> ⇒</li>
-<li><a href="#GCM+add_cipher">.add_cipher(cipher, len)</a> ⇒</li>
-</ul></li>
-</ul>
-<p><a name="new_GCM_new"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="new-gcm"></a><a href="#new-gcm" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>new GCM()</h3>
-<p>Creates an instance of GCM</p>
-<p><a name="GCM+init"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="gcminitnk-key-niv-iv"></a><a href="#gcminitnk-key-niv-iv" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>gcM.init(nk, key, niv, iv)</h3>
-<p>Initialize GCM mode</p>
-<p><strong>Kind</strong>: instance method of <a href="#GCM"><code>GCM</code></a>  <br>
-<strong>this</strong>: <code>{GCM}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>nk</td><td>is the key length in bytes, 16, 24 or 32</td></tr>
-<tr><td>key</td><td>the AES key as an array of 16 bytes</td></tr>
-<tr><td>niv</td><td>the number of bytes in the Initialisation Vector (IV)</td></tr>
-<tr><td>iv</td><td>the IV</td></tr>
-</tbody>
-</table>
-<p><a name="GCM+add_header"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="gcmadd_headerheader-len"></a><a href="#gcmadd_headerheader-len" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>gcM.add_header(header, len)</h3>
-<p>Add header (material to be authenticated but not encrypted)</p>
-<p><strong>Kind</strong>: instance method of <a href="#GCM"><code>GCM</code></a>  <br>
-<strong>this</strong>: <code>{GCM}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>header</td><td>is the header material to be added</td></tr>
-<tr><td>len</td><td>the number of bytes in the header</td></tr>
-</tbody>
-</table>
-<p><a name="GCM+add_plain"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="gcmadd_plainplain-len-"></a><a href="#gcmadd_plainplain-len-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>gcM.add_plain(plain, len) ⇒</h3>
-<p>Add plaintext and extract ciphertext</p>
-<p><strong>Kind</strong>: instance method of <a href="#GCM"><code>GCM</code></a>  <br>
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/amcl-overview">AMCL Library</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-overview">AMCL Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API 1.0.0</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/aes">AES</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/big">BIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls">BLS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls192">BLS192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls256">BLS256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/dbig">DBIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp">ECP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ff">FF</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp">FP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp2">FP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp4">FP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp8">FP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp12">FP12</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp16">FP16</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp24">FP24</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp48">FP48</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/cryptojs/gcm">GCM</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash256">HASH256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash384">HASH384</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash512">HASH512</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin">MPIN</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair">PAIR</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rand">RAND</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rsa">RSA</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/sha3">SHA3</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/unit64">UInt64</a></li></ul></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL Library</span><meta itemprop="position" content="1"></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL JavaScript API 1.0.0</span><meta itemprop="position" content="2"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">GCM</span><meta itemprop="position" content="3"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>GCM</h1></header><a name="GCM"></a><h2 class="anchor anchorWithStickyNavbar_LWe7" id="gcm">GCM<a class="hash-link" href="#gcm" title="Direct link to heading">​</a></h2><p><strong>Kind</strong>: global class<br>
+<strong>this</strong>: <code>{&quot;{&quot;}GCM{&quot;}&quot;}</code>  </p><ul><li><a href="#GCM">GCM</a><ul><li><a href="#new_GCM_new">new GCM()</a></li><li><a href="#GCM+init">.init(nk, key, niv, iv)</a></li><li><a href="#GCM+add_header">.add_header(header, len)</a></li><li><a href="#GCM+add_plain">.add_plain(plain, len)</a> ⇒</li><li><a href="#GCM+add_cipher">.add_cipher(cipher, len)</a> ⇒</li></ul></li></ul><a name="new_GCM_new"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="new-gcm">new GCM()<a class="hash-link" href="#new-gcm" title="Direct link to heading">​</a></h3><p>Creates an instance of GCM</p><a name="GCM+init"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="gcminitnk-key-niv-iv">gcM.init(nk, key, niv, iv)<a class="hash-link" href="#gcminitnk-key-niv-iv" title="Direct link to heading">​</a></h3><p>Initialize GCM mode</p><p><strong>Kind</strong>: instance method of <a href="#GCM"><code>GCM</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}GCM{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>nk</td><td>is the key length in bytes, 16, 24 or 32</td></tr><tr><td>key</td><td>the AES key as an array of 16 bytes</td></tr><tr><td>niv</td><td>the number of bytes in the Initialisation Vector (IV)</td></tr><tr><td>iv</td><td>the IV</td></tr></tbody></table><a name="GCM+add_header"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="gcmadd_headerheader-len">gcM.add_header(header, len)<a class="hash-link" href="#gcmadd_headerheader-len" title="Direct link to heading">​</a></h3><p>Add header (material to be authenticated but not encrypted)</p><p><strong>Kind</strong>: instance method of <a href="#GCM"><code>GCM</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}GCM{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>header</td><td>is the header material to be added</td></tr><tr><td>len</td><td>the number of bytes in the header</td></tr></tbody></table><a name="GCM+add_plain"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="gcmadd_plainplain-len-">gcM.add_plain(plain, len) ⇒<a class="hash-link" href="#gcmadd_plainplain-len-" title="Direct link to heading">​</a></h3><p>Add plaintext and extract ciphertext</p><p><strong>Kind</strong>: instance method of <a href="#GCM"><code>GCM</code></a><br>
 <strong>Returns</strong>: cipher is the ciphertext generated<br>
-<strong>this</strong>: <code>{GCM}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>plain</td><td>is the plaintext material to be added</td></tr>
-<tr><td>len</td><td>the number of bytes in the plaintext</td></tr>
-</tbody>
-</table>
-<p><a name="GCM+add_cipher"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="gcmadd_ciphercipher-len-"></a><a href="#gcmadd_ciphercipher-len-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>gcM.add_cipher(cipher, len) ⇒</h3>
-<p>Add Ciphertext - decrypts to plaintext</p>
-<p><strong>Kind</strong>: instance method of <a href="#GCM"><code>GCM</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}GCM{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>plain</td><td>is the plaintext material to be added</td></tr><tr><td>len</td><td>the number of bytes in the plaintext</td></tr></tbody></table><a name="GCM+add_cipher"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="gcmadd_ciphercipher-len-">gcM.add_cipher(cipher, len) ⇒<a class="hash-link" href="#gcmadd_ciphercipher-len-" title="Direct link to heading">​</a></h3><p>Add Ciphertext - decrypts to plaintext</p><p><strong>Kind</strong>: instance method of <a href="#GCM"><code>GCM</code></a><br>
 <strong>Returns</strong>: plain is the plaintext material generated<br>
-<strong>this</strong>: <code>{GCM}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>cipher</td><td>is the ciphertext to be added</td></tr>
-<tr><td>len</td><td>the number of bytes in the plaintext</td></tr>
-</tbody>
-</table>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/cryptojs/fp48"><span class="arrow-prev">← </span><span>FP48</span></a><a class="docs-next button" href="/docs/cryptojs/hash256"><span>HASH256</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#gcm">GCM</a><ul class="toc-headings"><li><a href="#new-gcm">new GCM()</a></li><li><a href="#gcminitnk-key-niv-iv">gcM.init(nk, key, niv, iv)</a></li><li><a href="#gcmadd_headerheader-len">gcM.add_header(header, len)</a></li><li><a href="#gcmadd_plainplain-len-">gcM.add_plain(plain, len) ⇒</a></li><li><a href="#gcmadd_ciphercipher-len-">gcM.add_cipher(cipher, len) ⇒</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<strong>this</strong>: <code>{&quot;{&quot;}GCM{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>cipher</td><td>is the ciphertext to be added</td></tr><tr><td>len</td><td>the number of bytes in the plaintext</td></tr></tbody></table></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/cryptojs/fp48"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">FP48</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/cryptojs/hash256"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">HASH256</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#gcm" class="table-of-contents__link toc-highlight">GCM</a><ul><li><a href="#new-gcm" class="table-of-contents__link toc-highlight">new GCM()</a></li><li><a href="#gcminitnk-key-niv-iv" class="table-of-contents__link toc-highlight">gcM.init(nk, key, niv, iv)</a></li><li><a href="#gcmadd_headerheader-len" class="table-of-contents__link toc-highlight">gcM.add_header(header, len)</a></li><li><a href="#gcmadd_plainplain-len-" class="table-of-contents__link toc-highlight">gcM.add_plain(plain, len) ⇒</a></li><li><a href="#gcmadd_ciphercipher-len-" class="table-of-contents__link toc-highlight">gcM.add_cipher(cipher, len) ⇒</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/cryptojs/hash256/index.html b/docs/cryptojs/hash256/index.html
index 9f02adf..2471a84 100644
--- a/docs/cryptojs/hash256/index.html
+++ b/docs/cryptojs/hash256/index.html
@@ -1,125 +1,29 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>HASH256 · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;a name=&quot;HASH256&quot;&gt;&lt;/a&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="HASH256 · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;a name=&quot;HASH256&quot;&gt;&lt;/a&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>AMCL JavaScript API 1.0.0</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-cryptojs/hash256">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">HASH256 | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/cryptojs/hash256"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="HASH256 | Apache Milagro"><meta data-rh="true" name="description" content="HASH256"><meta data-rh="true" property="og:description" content="HASH256"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/cryptojs/hash256"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/hash256" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/hash256" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">HASH256</h1></header><article><div><span><p><a name="HASH256"></a></p>
-<h2><a class="anchor" aria-hidden="true" id="hash256"></a><a href="#hash256" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>HASH256</h2>
-<p><strong>Kind</strong>: global class<br>
-<strong>this</strong>: <code>{HASH256}</code></p>
-<ul>
-<li><a href="#HASH256">HASH256</a>
-<ul>
-<li><a href="#new_HASH256_new">new HASH256()</a></li>
-<li><a href="#HASH256+init">.init()</a></li>
-<li><a href="#HASH256+process">.process(byt)</a></li>
-<li><a href="#HASH256+process_array">.process_array(b)</a></li>
-<li><a href="#HASH256+process_num">.process_num(n)</a></li>
-<li><a href="#HASH256+hash">.hash()</a> ⇒</li>
-</ul></li>
-</ul>
-<p><a name="new_HASH256_new"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="new-hash256"></a><a href="#new-hash256" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>new HASH256()</h3>
-<p>Creates an instance of HASH256</p>
-<p><a name="HASH256+init"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="hash256init"></a><a href="#hash256init" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>hasH256.init()</h3>
-<p>Initialise Hash function</p>
-<p><strong>Kind</strong>: instance method of <a href="#HASH256"><code>HASH256</code></a>  <br>
-<strong>this</strong>: <code>{HASH256}</code>  <br>
-<a name="HASH256+process"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="hash256processbyt"></a><a href="#hash256processbyt" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>hasH256.process(byt)</h3>
-<p>Process a single byte</p>
-<p><strong>Kind</strong>: instance method of <a href="#HASH256"><code>HASH256</code></a>  <br>
-<strong>this</strong>: <code>{HASH256}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>byt</td><td>byte to be included in hash</td></tr>
-</tbody>
-</table>
-<p><a name="HASH256+process_array"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="hash256process_arrayb"></a><a href="#hash256process_arrayb" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>hasH256.process_array(b)</h3>
-<p>Process an array of bytes</p>
-<p><strong>Kind</strong>: instance method of <a href="#HASH256"><code>HASH256</code></a>  <br>
-<strong>this</strong>: <code>{HASH256}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>b</td><td>byte arrray to be included in hash</td></tr>
-</tbody>
-</table>
-<p><a name="HASH256+process_num"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="hash256process_numn"></a><a href="#hash256process_numn" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>hasH256.process_num(n)</h3>
-<p>Process a 32-bit integer</p>
-<p><strong>Kind</strong>: instance method of <a href="#HASH256"><code>HASH256</code></a>  <br>
-<strong>this</strong>: <code>{HASH256}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>n</td><td>Integer to be included in hash</td></tr>
-</tbody>
-</table>
-<p><a name="HASH256+hash"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="hash256hash-"></a><a href="#hash256hash-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>hasH256.hash() ⇒</h3>
-<p>Generate 32-byte hash</p>
-<p><strong>Kind</strong>: instance method of <a href="#HASH256"><code>HASH256</code></a>  <br>
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/amcl-overview">AMCL Library</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-overview">AMCL Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API 1.0.0</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/aes">AES</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/big">BIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls">BLS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls192">BLS192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls256">BLS256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/dbig">DBIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp">ECP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ff">FF</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp">FP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp2">FP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp4">FP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp8">FP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp12">FP12</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp16">FP16</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp24">FP24</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp48">FP48</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/gcm">GCM</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/cryptojs/hash256">HASH256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash384">HASH384</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash512">HASH512</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin">MPIN</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair">PAIR</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rand">RAND</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rsa">RSA</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/sha3">SHA3</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/unit64">UInt64</a></li></ul></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL Library</span><meta itemprop="position" content="1"></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL JavaScript API 1.0.0</span><meta itemprop="position" content="2"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">HASH256</span><meta itemprop="position" content="3"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>HASH256</h1></header><a name="HASH256"></a><h2 class="anchor anchorWithStickyNavbar_LWe7" id="hash256">HASH256<a class="hash-link" href="#hash256" title="Direct link to heading">​</a></h2><p><strong>Kind</strong>: global class<br>
+<strong>this</strong>: <code>{&quot;{&quot;}HASH256{&quot;}&quot;}</code>  </p><ul><li><a href="#HASH256">HASH256</a><ul><li><a href="#new_HASH256_new">new HASH256()</a></li><li><a href="#HASH256+init">.init()</a></li><li><a href="#HASH256+process">.process(byt)</a></li><li><a href="#HASH256+process_array">.process_array(b)</a></li><li><a href="#HASH256+process_num">.process_num(n)</a></li><li><a href="#HASH256+hash">.hash()</a> ⇒</li></ul></li></ul><a name="new_HASH256_new"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="new-hash256">new HASH256()<a class="hash-link" href="#new-hash256" title="Direct link to heading">​</a></h3><p>Creates an instance of HASH256</p><a name="HASH256+init"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="hash256init">hasH256.init()<a class="hash-link" href="#hash256init" title="Direct link to heading">​</a></h3><p>Initialise Hash function</p><p><strong>Kind</strong>: instance method of <a href="#HASH256"><code>HASH256</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}HASH256{&quot;}&quot;}</code>  </p><a name="HASH256+process"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="hash256processbyt">hasH256.process(byt)<a class="hash-link" href="#hash256processbyt" title="Direct link to heading">​</a></h3><p>Process a single byte</p><p><strong>Kind</strong>: instance method of <a href="#HASH256"><code>HASH256</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}HASH256{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>byt</td><td>byte to be included in hash</td></tr></tbody></table><a name="HASH256+process_array"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="hash256process_arrayb">hasH256.process_array(b)<a class="hash-link" href="#hash256process_arrayb" title="Direct link to heading">​</a></h3><p>Process an array of bytes</p><p><strong>Kind</strong>: instance method of <a href="#HASH256"><code>HASH256</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}HASH256{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>b</td><td>byte arrray to be included in hash</td></tr></tbody></table><a name="HASH256+process_num"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="hash256process_numn">hasH256.process_num(n)<a class="hash-link" href="#hash256process_numn" title="Direct link to heading">​</a></h3><p>Process a 32-bit integer</p><p><strong>Kind</strong>: instance method of <a href="#HASH256"><code>HASH256</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}HASH256{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>n</td><td>Integer to be included in hash</td></tr></tbody></table><a name="HASH256+hash"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="hash256hash-">hasH256.hash() ⇒<a class="hash-link" href="#hash256hash-" title="Direct link to heading">​</a></h3><p>Generate 32-byte hash</p><p><strong>Kind</strong>: instance method of <a href="#HASH256"><code>HASH256</code></a><br>
 <strong>Returns</strong>: digest 32-byte hash<br>
-<strong>this</strong>: <code>{HASH256}</code></p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/cryptojs/gcm"><span class="arrow-prev">← </span><span>GCM</span></a><a class="docs-next button" href="/docs/cryptojs/hash384"><span>HASH384</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#hash256">HASH256</a><ul class="toc-headings"><li><a href="#new-hash256">new HASH256()</a></li><li><a href="#hash256init">hasH256.init()</a></li><li><a href="#hash256processbyt">hasH256.process(byt)</a></li><li><a href="#hash256process_arrayb">hasH256.process_array(b)</a></li><li><a href="#hash256process_numn">hasH256.process_num(n)</a></li><li><a href="#hash256hash-">hasH256.hash() ⇒</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<strong>this</strong>: <code>{&quot;{&quot;}HASH256{&quot;}&quot;}</code></p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/cryptojs/gcm"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">GCM</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/cryptojs/hash384"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">HASH384</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#hash256" class="table-of-contents__link toc-highlight">HASH256</a><ul><li><a href="#new-hash256" class="table-of-contents__link toc-highlight">new HASH256()</a></li><li><a href="#hash256init" class="table-of-contents__link toc-highlight">hasH256.init()</a></li><li><a href="#hash256processbyt" class="table-of-contents__link toc-highlight">hasH256.process(byt)</a></li><li><a href="#hash256process_arrayb" class="table-of-contents__link toc-highlight">hasH256.process_array(b)</a></li><li><a href="#hash256process_numn" class="table-of-contents__link toc-highlight">hasH256.process_num(n)</a></li><li><a href="#hash256hash-" class="table-of-contents__link toc-highlight">hasH256.hash() ⇒</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/cryptojs/hash384/index.html b/docs/cryptojs/hash384/index.html
index 3500679..3fd1db9 100644
--- a/docs/cryptojs/hash384/index.html
+++ b/docs/cryptojs/hash384/index.html
@@ -1,125 +1,29 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>HASH384 · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;a name=&quot;HASH384&quot;&gt;&lt;/a&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="HASH384 · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;a name=&quot;HASH384&quot;&gt;&lt;/a&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>AMCL JavaScript API 1.0.0</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-cryptojs/hash384">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">HASH384 | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/cryptojs/hash384"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="HASH384 | Apache Milagro"><meta data-rh="true" name="description" content="HASH384"><meta data-rh="true" property="og:description" content="HASH384"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/cryptojs/hash384"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/hash384" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/hash384" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">HASH384</h1></header><article><div><span><p><a name="HASH384"></a></p>
-<h2><a class="anchor" aria-hidden="true" id="hash384"></a><a href="#hash384" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>HASH384</h2>
-<p><strong>Kind</strong>: global class<br>
-<strong>this</strong>: <code>{HASH384}</code></p>
-<ul>
-<li><a href="#HASH384">HASH384</a>
-<ul>
-<li><a href="#new_HASH384_new">new HASH384()</a></li>
-<li><a href="#HASH384+init">.init()</a></li>
-<li><a href="#HASH384+process">.process(byt)</a></li>
-<li><a href="#HASH384+process_array">.process_array(b)</a></li>
-<li><a href="#HASH384+process_num">.process_num(n)</a></li>
-<li><a href="#HASH384+hash">.hash()</a> ⇒</li>
-</ul></li>
-</ul>
-<p><a name="new_HASH384_new"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="new-hash384"></a><a href="#new-hash384" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>new HASH384()</h3>
-<p>Creates an instance of HASH384</p>
-<p><a name="HASH384+init"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="hash384init"></a><a href="#hash384init" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>hasH384.init()</h3>
-<p>Initialise Hash function</p>
-<p><strong>Kind</strong>: instance method of <a href="#HASH384"><code>HASH384</code></a>  <br>
-<strong>this</strong>: <code>{HASH384}</code>  <br>
-<a name="HASH384+process"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="hash384processbyt"></a><a href="#hash384processbyt" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>hasH384.process(byt)</h3>
-<p>Process a single byte</p>
-<p><strong>Kind</strong>: instance method of <a href="#HASH384"><code>HASH384</code></a>  <br>
-<strong>this</strong>: <code>{HASH384}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>byt</td><td>byte to be included in hash</td></tr>
-</tbody>
-</table>
-<p><a name="HASH384+process_array"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="hash384process_arrayb"></a><a href="#hash384process_arrayb" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>hasH384.process_array(b)</h3>
-<p>Process an array of bytes</p>
-<p><strong>Kind</strong>: instance method of <a href="#HASH384"><code>HASH384</code></a>  <br>
-<strong>this</strong>: <code>{HASH384}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>b</td><td>byte arrray to be included in hash</td></tr>
-</tbody>
-</table>
-<p><a name="HASH384+process_num"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="hash384process_numn"></a><a href="#hash384process_numn" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>hasH384.process_num(n)</h3>
-<p>Process a 32-bit integer</p>
-<p><strong>Kind</strong>: instance method of <a href="#HASH384"><code>HASH384</code></a>  <br>
-<strong>this</strong>: <code>{HASH384}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>n</td><td>Integer to be included in hash</td></tr>
-</tbody>
-</table>
-<p><a name="HASH384+hash"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="hash384hash-"></a><a href="#hash384hash-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>hasH384.hash() ⇒</h3>
-<p>Generate 32-byte hash</p>
-<p><strong>Kind</strong>: instance method of <a href="#HASH384"><code>HASH384</code></a>  <br>
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/amcl-overview">AMCL Library</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-overview">AMCL Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API 1.0.0</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/aes">AES</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/big">BIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls">BLS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls192">BLS192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls256">BLS256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/dbig">DBIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp">ECP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ff">FF</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp">FP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp2">FP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp4">FP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp8">FP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp12">FP12</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp16">FP16</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp24">FP24</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp48">FP48</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/gcm">GCM</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash256">HASH256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/cryptojs/hash384">HASH384</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash512">HASH512</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin">MPIN</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair">PAIR</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rand">RAND</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rsa">RSA</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/sha3">SHA3</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/unit64">UInt64</a></li></ul></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL Library</span><meta itemprop="position" content="1"></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL JavaScript API 1.0.0</span><meta itemprop="position" content="2"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">HASH384</span><meta itemprop="position" content="3"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>HASH384</h1></header><a name="HASH384"></a><h2 class="anchor anchorWithStickyNavbar_LWe7" id="hash384">HASH384<a class="hash-link" href="#hash384" title="Direct link to heading">​</a></h2><p><strong>Kind</strong>: global class<br>
+<strong>this</strong>: <code>{&quot;{&quot;}HASH384{&quot;}&quot;}</code>  </p><ul><li><a href="#HASH384">HASH384</a><ul><li><a href="#new_HASH384_new">new HASH384()</a></li><li><a href="#HASH384+init">.init()</a></li><li><a href="#HASH384+process">.process(byt)</a></li><li><a href="#HASH384+process_array">.process_array(b)</a></li><li><a href="#HASH384+process_num">.process_num(n)</a></li><li><a href="#HASH384+hash">.hash()</a> ⇒</li></ul></li></ul><a name="new_HASH384_new"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="new-hash384">new HASH384()<a class="hash-link" href="#new-hash384" title="Direct link to heading">​</a></h3><p>Creates an instance of HASH384</p><a name="HASH384+init"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="hash384init">hasH384.init()<a class="hash-link" href="#hash384init" title="Direct link to heading">​</a></h3><p>Initialise Hash function</p><p><strong>Kind</strong>: instance method of <a href="#HASH384"><code>HASH384</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}HASH384{&quot;}&quot;}</code>  </p><a name="HASH384+process"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="hash384processbyt">hasH384.process(byt)<a class="hash-link" href="#hash384processbyt" title="Direct link to heading">​</a></h3><p>Process a single byte</p><p><strong>Kind</strong>: instance method of <a href="#HASH384"><code>HASH384</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}HASH384{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>byt</td><td>byte to be included in hash</td></tr></tbody></table><a name="HASH384+process_array"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="hash384process_arrayb">hasH384.process_array(b)<a class="hash-link" href="#hash384process_arrayb" title="Direct link to heading">​</a></h3><p>Process an array of bytes</p><p><strong>Kind</strong>: instance method of <a href="#HASH384"><code>HASH384</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}HASH384{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>b</td><td>byte arrray to be included in hash</td></tr></tbody></table><a name="HASH384+process_num"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="hash384process_numn">hasH384.process_num(n)<a class="hash-link" href="#hash384process_numn" title="Direct link to heading">​</a></h3><p>Process a 32-bit integer</p><p><strong>Kind</strong>: instance method of <a href="#HASH384"><code>HASH384</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}HASH384{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>n</td><td>Integer to be included in hash</td></tr></tbody></table><a name="HASH384+hash"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="hash384hash-">hasH384.hash() ⇒<a class="hash-link" href="#hash384hash-" title="Direct link to heading">​</a></h3><p>Generate 32-byte hash</p><p><strong>Kind</strong>: instance method of <a href="#HASH384"><code>HASH384</code></a><br>
 <strong>Returns</strong>: digest 32-byte hash<br>
-<strong>this</strong>: <code>{HASH384}</code></p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/cryptojs/hash256"><span class="arrow-prev">← </span><span>HASH256</span></a><a class="docs-next button" href="/docs/cryptojs/hash512"><span>HASH512</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#hash384">HASH384</a><ul class="toc-headings"><li><a href="#new-hash384">new HASH384()</a></li><li><a href="#hash384init">hasH384.init()</a></li><li><a href="#hash384processbyt">hasH384.process(byt)</a></li><li><a href="#hash384process_arrayb">hasH384.process_array(b)</a></li><li><a href="#hash384process_numn">hasH384.process_num(n)</a></li><li><a href="#hash384hash-">hasH384.hash() ⇒</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<strong>this</strong>: <code>{&quot;{&quot;}HASH384{&quot;}&quot;}</code></p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/cryptojs/hash256"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">HASH256</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/cryptojs/hash512"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">HASH512</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#hash384" class="table-of-contents__link toc-highlight">HASH384</a><ul><li><a href="#new-hash384" class="table-of-contents__link toc-highlight">new HASH384()</a></li><li><a href="#hash384init" class="table-of-contents__link toc-highlight">hasH384.init()</a></li><li><a href="#hash384processbyt" class="table-of-contents__link toc-highlight">hasH384.process(byt)</a></li><li><a href="#hash384process_arrayb" class="table-of-contents__link toc-highlight">hasH384.process_array(b)</a></li><li><a href="#hash384process_numn" class="table-of-contents__link toc-highlight">hasH384.process_num(n)</a></li><li><a href="#hash384hash-" class="table-of-contents__link toc-highlight">hasH384.hash() ⇒</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/cryptojs/hash512/index.html b/docs/cryptojs/hash512/index.html
index 3125ff1..bb8b418 100644
--- a/docs/cryptojs/hash512/index.html
+++ b/docs/cryptojs/hash512/index.html
@@ -1,125 +1,29 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>HASH512 · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;a name=&quot;HASH512&quot;&gt;&lt;/a&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="HASH512 · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;a name=&quot;HASH512&quot;&gt;&lt;/a&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>AMCL JavaScript API 1.0.0</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-cryptojs/hash512">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">HASH512 | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/cryptojs/hash512"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="HASH512 | Apache Milagro"><meta data-rh="true" name="description" content="HASH512"><meta data-rh="true" property="og:description" content="HASH512"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/cryptojs/hash512"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/hash512" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/hash512" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">HASH512</h1></header><article><div><span><p><a name="HASH512"></a></p>
-<h2><a class="anchor" aria-hidden="true" id="hash512"></a><a href="#hash512" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>HASH512</h2>
-<p><strong>Kind</strong>: global class<br>
-<strong>this</strong>: <code>{HASH512}</code></p>
-<ul>
-<li><a href="#HASH512">HASH512</a>
-<ul>
-<li><a href="#new_HASH512_new">new HASH512()</a></li>
-<li><a href="#HASH512+init">.init()</a></li>
-<li><a href="#HASH512+process">.process(byt)</a></li>
-<li><a href="#HASH512+process_array">.process_array(b)</a></li>
-<li><a href="#HASH512+process_num">.process_num(n)</a></li>
-<li><a href="#HASH512+hash">.hash()</a> ⇒</li>
-</ul></li>
-</ul>
-<p><a name="new_HASH512_new"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="new-hash512"></a><a href="#new-hash512" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>new HASH512()</h3>
-<p>Creates an instance of HASH512</p>
-<p><a name="HASH512+init"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="hash512init"></a><a href="#hash512init" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>hasH512.init()</h3>
-<p>Initialise Hash function</p>
-<p><strong>Kind</strong>: instance method of <a href="#HASH512"><code>HASH512</code></a>  <br>
-<strong>this</strong>: <code>{HASH512}</code>  <br>
-<a name="HASH512+process"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="hash512processbyt"></a><a href="#hash512processbyt" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>hasH512.process(byt)</h3>
-<p>Process a single byte</p>
-<p><strong>Kind</strong>: instance method of <a href="#HASH512"><code>HASH512</code></a>  <br>
-<strong>this</strong>: <code>{HASH512}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>byt</td><td>byte to be included in hash</td></tr>
-</tbody>
-</table>
-<p><a name="HASH512+process_array"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="hash512process_arrayb"></a><a href="#hash512process_arrayb" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>hasH512.process_array(b)</h3>
-<p>Process an array of bytes</p>
-<p><strong>Kind</strong>: instance method of <a href="#HASH512"><code>HASH512</code></a>  <br>
-<strong>this</strong>: <code>{HASH512}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>b</td><td>byte arrray to be included in hash</td></tr>
-</tbody>
-</table>
-<p><a name="HASH512+process_num"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="hash512process_numn"></a><a href="#hash512process_numn" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>hasH512.process_num(n)</h3>
-<p>Process a 32-bit integer</p>
-<p><strong>Kind</strong>: instance method of <a href="#HASH512"><code>HASH512</code></a>  <br>
-<strong>this</strong>: <code>{HASH512}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>n</td><td>Integer to be included in hash</td></tr>
-</tbody>
-</table>
-<p><a name="HASH512+hash"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="hash512hash-"></a><a href="#hash512hash-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>hasH512.hash() ⇒</h3>
-<p>Generate 32-byte hash</p>
-<p><strong>Kind</strong>: instance method of <a href="#HASH512"><code>HASH512</code></a>  <br>
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/amcl-overview">AMCL Library</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-overview">AMCL Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API 1.0.0</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/aes">AES</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/big">BIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls">BLS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls192">BLS192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls256">BLS256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/dbig">DBIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp">ECP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ff">FF</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp">FP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp2">FP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp4">FP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp8">FP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp12">FP12</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp16">FP16</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp24">FP24</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp48">FP48</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/gcm">GCM</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash256">HASH256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash384">HASH384</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/cryptojs/hash512">HASH512</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin">MPIN</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair">PAIR</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rand">RAND</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rsa">RSA</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/sha3">SHA3</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/unit64">UInt64</a></li></ul></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL Library</span><meta itemprop="position" content="1"></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL JavaScript API 1.0.0</span><meta itemprop="position" content="2"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">HASH512</span><meta itemprop="position" content="3"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>HASH512</h1></header><a name="HASH512"></a><h2 class="anchor anchorWithStickyNavbar_LWe7" id="hash512">HASH512<a class="hash-link" href="#hash512" title="Direct link to heading">​</a></h2><p><strong>Kind</strong>: global class<br>
+<strong>this</strong>: <code>{&quot;{&quot;}HASH512{&quot;}&quot;}</code>  </p><ul><li><a href="#HASH512">HASH512</a><ul><li><a href="#new_HASH512_new">new HASH512()</a></li><li><a href="#HASH512+init">.init()</a></li><li><a href="#HASH512+process">.process(byt)</a></li><li><a href="#HASH512+process_array">.process_array(b)</a></li><li><a href="#HASH512+process_num">.process_num(n)</a></li><li><a href="#HASH512+hash">.hash()</a> ⇒</li></ul></li></ul><a name="new_HASH512_new"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="new-hash512">new HASH512()<a class="hash-link" href="#new-hash512" title="Direct link to heading">​</a></h3><p>Creates an instance of HASH512</p><a name="HASH512+init"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="hash512init">hasH512.init()<a class="hash-link" href="#hash512init" title="Direct link to heading">​</a></h3><p>Initialise Hash function</p><p><strong>Kind</strong>: instance method of <a href="#HASH512"><code>HASH512</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}HASH512{&quot;}&quot;}</code>  </p><a name="HASH512+process"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="hash512processbyt">hasH512.process(byt)<a class="hash-link" href="#hash512processbyt" title="Direct link to heading">​</a></h3><p>Process a single byte</p><p><strong>Kind</strong>: instance method of <a href="#HASH512"><code>HASH512</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}HASH512{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>byt</td><td>byte to be included in hash</td></tr></tbody></table><a name="HASH512+process_array"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="hash512process_arrayb">hasH512.process_array(b)<a class="hash-link" href="#hash512process_arrayb" title="Direct link to heading">​</a></h3><p>Process an array of bytes</p><p><strong>Kind</strong>: instance method of <a href="#HASH512"><code>HASH512</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}HASH512{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>b</td><td>byte arrray to be included in hash</td></tr></tbody></table><a name="HASH512+process_num"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="hash512process_numn">hasH512.process_num(n)<a class="hash-link" href="#hash512process_numn" title="Direct link to heading">​</a></h3><p>Process a 32-bit integer</p><p><strong>Kind</strong>: instance method of <a href="#HASH512"><code>HASH512</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}HASH512{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>n</td><td>Integer to be included in hash</td></tr></tbody></table><a name="HASH512+hash"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="hash512hash-">hasH512.hash() ⇒<a class="hash-link" href="#hash512hash-" title="Direct link to heading">​</a></h3><p>Generate 32-byte hash</p><p><strong>Kind</strong>: instance method of <a href="#HASH512"><code>HASH512</code></a><br>
 <strong>Returns</strong>: digest 32-byte hash<br>
-<strong>this</strong>: <code>{HASH512}</code></p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/cryptojs/hash384"><span class="arrow-prev">← </span><span>HASH384</span></a><a class="docs-next button" href="/docs/cryptojs/mpin"><span>MPIN</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#hash512">HASH512</a><ul class="toc-headings"><li><a href="#new-hash512">new HASH512()</a></li><li><a href="#hash512init">hasH512.init()</a></li><li><a href="#hash512processbyt">hasH512.process(byt)</a></li><li><a href="#hash512process_arrayb">hasH512.process_array(b)</a></li><li><a href="#hash512process_numn">hasH512.process_num(n)</a></li><li><a href="#hash512hash-">hasH512.hash() ⇒</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<strong>this</strong>: <code>{&quot;{&quot;}HASH512{&quot;}&quot;}</code></p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/cryptojs/hash384"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">HASH384</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/cryptojs/mpin"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">MPIN</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#hash512" class="table-of-contents__link toc-highlight">HASH512</a><ul><li><a href="#new-hash512" class="table-of-contents__link toc-highlight">new HASH512()</a></li><li><a href="#hash512init" class="table-of-contents__link toc-highlight">hasH512.init()</a></li><li><a href="#hash512processbyt" class="table-of-contents__link toc-highlight">hasH512.process(byt)</a></li><li><a href="#hash512process_arrayb" class="table-of-contents__link toc-highlight">hasH512.process_array(b)</a></li><li><a href="#hash512process_numn" class="table-of-contents__link toc-highlight">hasH512.process_num(n)</a></li><li><a href="#hash512hash-" class="table-of-contents__link toc-highlight">hasH512.hash() ⇒</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/cryptojs/mpin/index.html b/docs/cryptojs/mpin/index.html
index f33fcd3..cc7a6d6 100644
--- a/docs/cryptojs/mpin/index.html
+++ b/docs/cryptojs/mpin/index.html
@@ -1,647 +1,104 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>MPIN · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;a name=&quot;MPIN&quot;&gt;&lt;/a&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="MPIN · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;a name=&quot;MPIN&quot;&gt;&lt;/a&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>AMCL JavaScript API 1.0.0</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-cryptojs/mpin">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">MPIN | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/cryptojs/mpin"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="MPIN | Apache Milagro"><meta data-rh="true" name="description" content="MPIN"><meta data-rh="true" property="og:description" content="MPIN"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/cryptojs/mpin"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/mpin" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/mpin" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">MPIN</h1></header><article><div><span><p><a name="MPIN"></a></p>
-<h2><a class="anchor" aria-hidden="true" id="mpin"></a><a href="#mpin" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN</h2>
-<p><strong>Kind</strong>: global class<br>
-<strong>this</strong>: <code>{MPIN}</code></p>
-<ul>
-<li><a href="#MPIN">MPIN</a>
-<ul>
-<li><a href="#new_MPIN_new">new MPIN()</a></li>
-<li><a href="#MPIN.today">.today()</a> ⇒</li>
-<li><a href="#MPIN.bytestostring">.bytestostring(b)</a> ⇒</li>
-<li><a href="#MPIN.stringtobytes">.stringtobytes(s)</a> ⇒</li>
-<li><a href="#MPIN.comparebytes">.comparebytes(a, b)</a> ⇒</li>
-<li><a href="#MPIN.mpin_hash">.mpin_hash(c, U)</a> ⇒</li>
-<li><a href="#MPIN.hashit">.hashit(sha, n, B)</a> ⇒</li>
-<li><a href="#MPIN.map">.map(u, cb)</a> ⇒</li>
-<li><a href="#MPIN.unmap">.unmap(u, P)</a> ⇒</li>
-<li><a href="#MPIN.RECOMBINE_G1">.RECOMBINE_G1(R1, R2, R)</a> ⇒</li>
-<li><a href="#MPIN.RECOMBINE_G2">.RECOMBINE_G2(W1, W2, W)</a> ⇒</li>
-<li><a href="#MPIN.HASH_ID">.HASH_ID(sha, ID)</a> ⇒</li>
-<li><a href="#MPIN.RANDOM_GENERATE">.RANDOM_GENERATE(rng, S)</a> ⇒</li>
-<li><a href="#MPIN.EXTRACT_PIN">.EXTRACT_PIN()</a> ⇒</li>
-<li><a href="#MPIN.EXTRACT_FACTOR">.EXTRACT_FACTOR()</a> ⇒</li>
-<li><a href="#MPIN.RESTORE_FACTOR">.RESTORE_FACTOR()</a> ⇒</li>
-<li><a href="#MPIN.GET_SERVER_SECRET">.GET_SERVER_SECRET(S, SST)</a> ⇒</li>
-<li><a href="#MPIN.GET_G1_MULTIPLE">.GET_G1_MULTIPLE(type, x, G, W)</a> ⇒</li>
-<li><a href="#MPIN.GET_CLIENT_SECRET">.GET_CLIENT_SECRET(S, CID, CST)</a> ⇒</li>
-<li><a href="#MPIN.GET_CLIENT_PERMIT">.GET_CLIENT_PERMIT(sha, date, S, CID, CTT)</a> ⇒</li>
-<li><a href="#MPIN.CLIENT_1">.CLIENT_1(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT)</a> ⇒</li>
-<li><a href="#MPIN.CLIENT_2">.CLIENT_2(X, Y, SEC)</a> ⇒</li>
-<li><a href="#MPIN.SERVER_1">.SERVER_1(sha, date, CID, HID, HTID)</a> ⇒</li>
-<li><a href="#MPIN.SERVER_2">.SERVER_2(date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, Pa)</a> ⇒</li>
-<li><a href="#MPIN.KANGAROO">.KANGAROO(E, F)</a> ⇒</li>
-<li><a href="#MPIN.GET_TIME">.GET_TIME()</a> ⇒</li>
-<li><a href="#MPIN.GET_Y">.GET_Y(sha, TimeValue, xCID, Y)</a> ⇒</li>
-<li><a href="#MPIN.CLIENT">.CLIENT(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT, TimeValue, Y, Message)</a> ⇒</li>
-<li><a href="#MPIN.SERVER">.SERVER(sha, date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, CID, TimeValue, MESSAGE, Pa)</a> ⇒</li>
-<li><a href="#MPIN.PRECOMPUTE">.PRECOMPUTE(TOKEN, CID, G1, G2)</a> ⇒</li>
-<li><a href="#MPIN.HASH_ALL">.HASH_ALL(sha, HID, xID, xCID, SEC, Y, R, W)</a> ⇒</li>
-<li><a href="#MPIN.CLIENT_KEY">.CLIENT_KEY(sha, G1, G2, pin, R, X, H, wCID, CK)</a> ⇒</li>
-<li><a href="#MPIN.SERVER_KEY">.SERVER_KEY(h, Z, SST, W, H, HID, xID, xCID, SK)</a> ⇒</li>
-<li><a href="#MPIN.GET_DVS_KEYPAIR">.GET_DVS_KEYPAIR(rng, Z, Pa)</a> ⇒</li>
-</ul></li>
-</ul>
-<p><a name="new_MPIN_new"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="new-mpin"></a><a href="#new-mpin" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>new MPIN()</h3>
-<p>Creates an instance of MPIN</p>
-<p><a name="MPIN.today"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpintoday-"></a><a href="#mpintoday-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN.today() ⇒</h3>
-<p>Get epoch time for today</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a>  <br>
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/amcl-overview">AMCL Library</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-overview">AMCL Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API 1.0.0</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/aes">AES</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/big">BIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls">BLS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls192">BLS192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls256">BLS256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/dbig">DBIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp">ECP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ff">FF</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp">FP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp2">FP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp4">FP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp8">FP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp12">FP12</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp16">FP16</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp24">FP24</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp48">FP48</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/gcm">GCM</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash256">HASH256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash384">HASH384</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash512">HASH512</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/cryptojs/mpin">MPIN</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair">PAIR</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rand">RAND</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rsa">RSA</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/sha3">SHA3</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/unit64">UInt64</a></li></ul></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL Library</span><meta itemprop="position" content="1"></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL JavaScript API 1.0.0</span><meta itemprop="position" content="2"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">MPIN</span><meta itemprop="position" content="3"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>MPIN</h1></header><a name="MPIN"></a><h2 class="anchor anchorWithStickyNavbar_LWe7" id="mpin">MPIN<a class="hash-link" href="#mpin" title="Direct link to heading">​</a></h2><p><strong>Kind</strong>: global class<br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN{&quot;}&quot;}</code>  </p><ul><li><a href="#MPIN">MPIN</a><ul><li><a href="#new_MPIN_new">new MPIN()</a></li><li><a href="#MPIN.today">.today()</a> ⇒</li><li><a href="#MPIN.bytestostring">.bytestostring(b)</a> ⇒</li><li><a href="#MPIN.stringtobytes">.stringtobytes(s)</a> ⇒</li><li><a href="#MPIN.comparebytes">.comparebytes(a, b)</a> ⇒</li><li><a href="#MPIN.mpin_hash">.mpin_hash(c, U)</a> ⇒</li><li><a href="#MPIN.hashit">.hashit(sha, n, B)</a> ⇒</li><li><a href="#MPIN.map">.map(u, cb)</a> ⇒</li><li><a href="#MPIN.unmap">.unmap(u, P)</a> ⇒</li><li><a href="#MPIN.RECOMBINE_G1">.RECOMBINE_G1(R1, R2, R)</a> ⇒</li><li><a href="#MPIN.RECOMBINE_G2">.RECOMBINE_G2(W1, W2, W)</a> ⇒</li><li><a href="#MPIN.HASH_ID">.HASH_ID(sha, ID)</a> ⇒</li><li><a href="#MPIN.RANDOM_GENERATE">.RANDOM_GENERATE(rng, S)</a> ⇒</li><li><a href="#MPIN.EXTRACT_PIN">.EXTRACT_PIN()</a> ⇒</li><li><a href="#MPIN.EXTRACT_FACTOR">.EXTRACT_FACTOR()</a> ⇒</li><li><a href="#MPIN.RESTORE_FACTOR">.RESTORE_FACTOR()</a> ⇒</li><li><a href="#MPIN.GET_SERVER_SECRET">.GET_SERVER_SECRET(S, SST)</a> ⇒</li><li><a href="#MPIN.GET_G1_MULTIPLE">.GET_G1_MULTIPLE(type, x, G, W)</a> ⇒</li><li><a href="#MPIN.GET_CLIENT_SECRET">.GET_CLIENT_SECRET(S, CID, CST)</a> ⇒</li><li><a href="#MPIN.GET_CLIENT_PERMIT">.GET_CLIENT_PERMIT(sha, date, S, CID, CTT)</a> ⇒</li><li><a href="#MPIN.CLIENT_1">.CLIENT_1(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT)</a> ⇒</li><li><a href="#MPIN.CLIENT_2">.CLIENT_2(X, Y, SEC)</a> ⇒</li><li><a href="#MPIN.SERVER_1">.SERVER_1(sha, date, CID, HID, HTID)</a> ⇒</li><li><a href="#MPIN.SERVER_2">.SERVER_2(date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, Pa)</a> ⇒</li><li><a href="#MPIN.KANGAROO">.KANGAROO(E, F)</a> ⇒</li><li><a href="#MPIN.GET_TIME">.GET_TIME()</a> ⇒</li><li><a href="#MPIN.GET_Y">.GET_Y(sha, TimeValue, xCID, Y)</a> ⇒</li><li><a href="#MPIN.CLIENT">.CLIENT(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT, TimeValue, Y, Message)</a> ⇒</li><li><a href="#MPIN.SERVER">.SERVER(sha, date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, CID, TimeValue, MESSAGE, Pa)</a> ⇒</li><li><a href="#MPIN.PRECOMPUTE">.PRECOMPUTE(TOKEN, CID, G1, G2)</a> ⇒</li><li><a href="#MPIN.HASH_ALL">.HASH_ALL(sha, HID, xID, xCID, SEC, Y, R, W)</a> ⇒</li><li><a href="#MPIN.CLIENT_KEY">.CLIENT_KEY(sha, G1, G2, pin, R, X, H, wCID, CK)</a> ⇒</li><li><a href="#MPIN.SERVER_KEY">.SERVER_KEY(h, Z, SST, W, H, HID, xID, xCID, SK)</a> ⇒</li><li><a href="#MPIN.GET_DVS_KEYPAIR">.GET_DVS_KEYPAIR(rng, Z, Pa)</a> ⇒</li></ul></li></ul><a name="new_MPIN_new"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="new-mpin">new MPIN()<a class="hash-link" href="#new-mpin" title="Direct link to heading">​</a></h3><p>Creates an instance of MPIN</p><a name="MPIN.today"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpintoday-">MPIN.today() ⇒<a class="hash-link" href="#mpintoday-" title="Direct link to heading">​</a></h3><p>Get epoch time for today</p><p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a><br>
 <strong>Returns</strong>: time in slots since epoch<br>
-<strong>this</strong>: <code>{MPIN}</code>  <br>
-<a name="MPIN.bytestostring"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpinbytestostringb-"></a><a href="#mpinbytestostringb-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN.bytestostring(b) ⇒</h3>
-<p>Convert byte array to string</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN{&quot;}&quot;}</code>  </p><a name="MPIN.bytestostring"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpinbytestostringb-">MPIN.bytestostring(b) ⇒<a class="hash-link" href="#mpinbytestostringb-" title="Direct link to heading">​</a></h3><p>Convert byte array to string</p><p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a><br>
 <strong>Returns</strong>: s string<br>
-<strong>this</strong>: <code>{MPIN}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>b</td><td>byte array</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN.stringtobytes"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpinstringtobytess-"></a><a href="#mpinstringtobytess-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN.stringtobytes(s) ⇒</h3>
-<p>Convert a string to byte array</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>b</td><td>byte array</td></tr></tbody></table><a name="MPIN.stringtobytes"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpinstringtobytess-">MPIN.stringtobytes(s) ⇒<a class="hash-link" href="#mpinstringtobytess-" title="Direct link to heading">​</a></h3><p>Convert a string to byte array</p><p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a><br>
 <strong>Returns</strong>: b byte array<br>
-<strong>this</strong>: <code>{MPIN}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>s</td><td>string</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN.comparebytes"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpincomparebytesa-b-"></a><a href="#mpincomparebytesa-b-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN.comparebytes(a, b) ⇒</h3>
-<p>Convert byte arrays</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>s</td><td>string</td></tr></tbody></table><a name="MPIN.comparebytes"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpincomparebytesa-b-">MPIN.comparebytes(a, b) ⇒<a class="hash-link" href="#mpincomparebytesa-b-" title="Direct link to heading">​</a></h3><p>Convert byte arrays</p><p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a><br>
 <strong>Returns</strong>: true if equal<br>
-<strong>this</strong>: <code>{MPIN}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>a</td><td>byte array</td></tr>
-<tr><td>b</td><td>byte array</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN.mpin_hash"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpinmpin_hashc-u-"></a><a href="#mpinmpin_hashc-u-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN.mpin_hash(c, U) ⇒</h3>
-<p>Hash values</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>a</td><td>byte array</td></tr><tr><td>b</td><td>byte array</td></tr></tbody></table><a name="MPIN.mpin_hash"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpinmpin_hashc-u-">MPIN.mpin_hash(c, U) ⇒<a class="hash-link" href="#mpinmpin_hashc-u-" title="Direct link to heading">​</a></h3><p>Hash values</p><p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a><br>
 <strong>Returns</strong>: R hash value<br>
-<strong>this</strong>: <code>{MPIN}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>c</td><td>FP8 instance</td></tr>
-<tr><td>U</td><td>ECP unstancebyte array</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN.hashit"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpinhashitsha-n-b-"></a><a href="#mpinhashitsha-n-b-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN.hashit(sha, n, B) ⇒</h3>
-<p>General purpose hash function</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>c</td><td>FP8 instance</td></tr><tr><td>U</td><td>ECP unstancebyte array</td></tr></tbody></table><a name="MPIN.hashit"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpinhashitsha-n-b-">MPIN.hashit(sha, n, B) ⇒<a class="hash-link" href="#mpinhashitsha-n-b-" title="Direct link to heading">​</a></h3><p>General purpose hash function</p><p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a><br>
 <strong>Returns</strong>: R hash value<br>
-<strong>this</strong>: <code>{MPIN}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>sha</td><td>is the hash type</td></tr>
-<tr><td>n</td><td>Integer</td></tr>
-<tr><td>B</td><td>byte array</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN.map"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpinmapu-cb-"></a><a href="#mpinmapu-cb-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN.map(u, cb) ⇒</h3>
-<p>maps a random u to a point on the curve</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>sha</td><td>is the hash type</td></tr><tr><td>n</td><td>Integer</td></tr><tr><td>B</td><td>byte array</td></tr></tbody></table><a name="MPIN.map"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpinmapu-cb-">MPIN.map(u, cb) ⇒<a class="hash-link" href="#mpinmapu-cb-" title="Direct link to heading">​</a></h3><p>maps a random u to a point on the curve</p><p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a><br>
 <strong>Returns</strong>: P ECP pointhash value<br>
-<strong>this</strong>: <code>{MPIN}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>u</td><td>BIG numberInteger</td></tr>
-<tr><td>cb</td><td>an integer representing the &quot;sign&quot; of y, in fact its least significant bit.</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN.unmap"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpinunmapu-p-"></a><a href="#mpinunmapu-p-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN.unmap(u, P) ⇒</h3>
-<p>returns u derived from P. Random value in range 1 to return value should then be added to u</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>u</td><td>BIG numberInteger</td></tr><tr><td>cb</td><td>an integer representing the &quot;sign&quot; of y, in fact its least significant bit.</td></tr></tbody></table><a name="MPIN.unmap"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpinunmapu-p-">MPIN.unmap(u, P) ⇒<a class="hash-link" href="#mpinunmapu-p-" title="Direct link to heading">​</a></h3><p>returns u derived from P. Random value in range 1 to return value should then be added to u</p><p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a><br>
 <strong>Returns</strong>: r Value that should be added to u to derive P<br>
-<strong>this</strong>: <code>{MPIN}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>u</td><td>BIG numberInteger</td></tr>
-<tr><td>P</td><td>ECP pointhash value</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN.RECOMBINE_G1"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpinrecombine_g1r1-r2-r-"></a><a href="#mpinrecombine_g1r1-r2-r-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN.RECOMBINE_G1(R1, R2, R) ⇒</h3>
-<p>Add two members from the group G1</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>u</td><td>BIG numberInteger</td></tr><tr><td>P</td><td>ECP pointhash value</td></tr></tbody></table><a name="MPIN.RECOMBINE_G1"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpinrecombine_g1r1-r2-r-">MPIN.RECOMBINE_G1(R1, R2, R) ⇒<a class="hash-link" href="#mpinrecombine_g1r1-r2-r-" title="Direct link to heading">​</a></h3><p>Add two members from the group G1</p><p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a><br>
 <strong>Returns</strong>: 0 or an error code<br>
-<strong>this</strong>: <code>{MPIN}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>R1</td><td>Input member of G1</td></tr>
-<tr><td>R2</td><td>Input member of G1</td></tr>
-<tr><td>R</td><td>Output member of G1. R=R1+R2</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN.RECOMBINE_G2"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpinrecombine_g2w1-w2-w-"></a><a href="#mpinrecombine_g2w1-w2-w-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN.RECOMBINE_G2(W1, W2, W) ⇒</h3>
-<p>Add two members from the group G2</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>R1</td><td>Input member of G1</td></tr><tr><td>R2</td><td>Input member of G1</td></tr><tr><td>R</td><td>Output member of G1. R=R1+R2</td></tr></tbody></table><a name="MPIN.RECOMBINE_G2"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpinrecombine_g2w1-w2-w-">MPIN.RECOMBINE_G2(W1, W2, W) ⇒<a class="hash-link" href="#mpinrecombine_g2w1-w2-w-" title="Direct link to heading">​</a></h3><p>Add two members from the group G2</p><p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a><br>
 <strong>Returns</strong>: 0 or an error code<br>
-<strong>this</strong>: <code>{MPIN}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>W1</td><td>Input member of G2</td></tr>
-<tr><td>W2</td><td>Input member of G2</td></tr>
-<tr><td>W</td><td>Output member of G2. W=W1+W2</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN.HASH_ID"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpinhash_idsha-id-"></a><a href="#mpinhash_idsha-id-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN.HASH_ID(sha, ID) ⇒</h3>
-<p>Hash the identity</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>W1</td><td>Input member of G2</td></tr><tr><td>W2</td><td>Input member of G2</td></tr><tr><td>W</td><td>Output member of G2. W=W1+W2</td></tr></tbody></table><a name="MPIN.HASH_ID"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpinhash_idsha-id-">MPIN.HASH_ID(sha, ID) ⇒<a class="hash-link" href="#mpinhash_idsha-id-" title="Direct link to heading">​</a></h3><p>Hash the identity</p><p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a><br>
 <strong>Returns</strong>: hash value<br>
-<strong>this</strong>: <code>{MPIN}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>sha</td><td>is the hash type</td></tr>
-<tr><td>ID</td><td>Identity as byte array</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN.RANDOM_GENERATE"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpinrandom_generaterng-s-"></a><a href="#mpinrandom_generaterng-s-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN.RANDOM_GENERATE(rng, S) ⇒</h3>
-<p>Create random secret</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>sha</td><td>is the hash type</td></tr><tr><td>ID</td><td>Identity as byte array</td></tr></tbody></table><a name="MPIN.RANDOM_GENERATE"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpinrandom_generaterng-s-">MPIN.RANDOM_GENERATE(rng, S) ⇒<a class="hash-link" href="#mpinrandom_generaterng-s-" title="Direct link to heading">​</a></h3><p>Create random secret</p><p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a><br>
 <strong>Returns</strong>: O for success or else error code<br>
-<strong>this</strong>: <code>{MPIN}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>rng</td><td>cryptographically secure random number generator</td></tr>
-<tr><td>S</td><td>Random secret value</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN.EXTRACT_PIN"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpinextract_pin-"></a><a href="#mpinextract_pin-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN.EXTRACT_PIN() ⇒</h3>
-<p>Extract a PIN number from a client secret</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>rng</td><td>cryptographically secure random number generator</td></tr><tr><td>S</td><td>Random secret value</td></tr></tbody></table><a name="MPIN.EXTRACT_PIN"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpinextract_pin-">MPIN.EXTRACT_PIN() ⇒<a class="hash-link" href="#mpinextract_pin-" title="Direct link to heading">​</a></h3><p>Extract a PIN number from a client secret</p><p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a><br>
 <strong>Returns</strong>: token<br>
-<strong>this</strong>: <code>{MPIN}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: sha hash type<br>
 <strong>Parameter</strong>: CID Client identity<br>
 <strong>Parameter</strong>: pin PIN value<br>
-<strong>Parameter</strong>: TOKEN Client secret<br>
-<a name="MPIN.EXTRACT_FACTOR"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpinextract_factor-"></a><a href="#mpinextract_factor-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN.EXTRACT_FACTOR() ⇒</h3>
-<p>Extract factor from TOKEN for identity CID</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a>  <br>
+<strong>Parameter</strong>: TOKEN Client secret  </p><a name="MPIN.EXTRACT_FACTOR"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpinextract_factor-">MPIN.EXTRACT_FACTOR() ⇒<a class="hash-link" href="#mpinextract_factor-" title="Direct link to heading">​</a></h3><p>Extract factor from TOKEN for identity CID</p><p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a><br>
 <strong>Returns</strong>: token<br>
-<strong>this</strong>: <code>{MPIN}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: sha hash type<br>
 <strong>Parameter</strong>: CID Client identity<br>
 <strong>Parameter</strong>: factor Value to extract<br>
 <strong>Parameter</strong>: facbits Number of bits in factor<br>
-<strong>Parameter</strong>: TOKEN Token value<br>
-<a name="MPIN.RESTORE_FACTOR"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpinrestore_factor-"></a><a href="#mpinrestore_factor-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN.RESTORE_FACTOR() ⇒</h3>
-<p>Restore factor to TOKEN for identity CID</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a>  <br>
+<strong>Parameter</strong>: TOKEN Token value  </p><a name="MPIN.RESTORE_FACTOR"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpinrestore_factor-">MPIN.RESTORE_FACTOR() ⇒<a class="hash-link" href="#mpinrestore_factor-" title="Direct link to heading">​</a></h3><p>Restore factor to TOKEN for identity CID</p><p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a><br>
 <strong>Returns</strong>: token<br>
-<strong>this</strong>: <code>{MPIN}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: sha hash type<br>
 <strong>Parameter</strong>: CID Client identity<br>
 <strong>Parameter</strong>: factor Value to extract<br>
 <strong>Parameter</strong>: facbits Number of bits in factor<br>
-<strong>Parameter</strong>: TOKEN Token value<br>
-<a name="MPIN.GET_SERVER_SECRET"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpinget_server_secrets-sst-"></a><a href="#mpinget_server_secrets-sst-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN.GET_SERVER_SECRET(S, SST) ⇒</h3>
-<p>Create a server secret in G2 from a master secret</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a>  <br>
+<strong>Parameter</strong>: TOKEN Token value  </p><a name="MPIN.GET_SERVER_SECRET"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpinget_server_secrets-sst-">MPIN.GET_SERVER_SECRET(S, SST) ⇒<a class="hash-link" href="#mpinget_server_secrets-sst-" title="Direct link to heading">​</a></h3><p>Create a server secret in G2 from a master secret</p><p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a><br>
 <strong>Returns</strong>: O for success or else error code<br>
-<strong>this</strong>: <code>{MPIN}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>S</td><td>Master secret</td></tr>
-<tr><td>SST</td><td>Server secret = s.Q where Q is a fixed generator of G2</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN.GET_G1_MULTIPLE"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpinget_g1_multipletype-x-g-w-"></a><a href="#mpinget_g1_multipletype-x-g-w-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN.GET_G1_MULTIPLE(type, x, G, W) ⇒</h3>
-<p>Find a random multiple of a point in G1</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>S</td><td>Master secret</td></tr><tr><td>SST</td><td>Server secret = s.Q where Q is a fixed generator of G2</td></tr></tbody></table><a name="MPIN.GET_G1_MULTIPLE"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpinget_g1_multipletype-x-g-w-">MPIN.GET_G1_MULTIPLE(type, x, G, W) ⇒<a class="hash-link" href="#mpinget_g1_multipletype-x-g-w-" title="Direct link to heading">​</a></h3><p>Find a random multiple of a point in G1</p><p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a><br>
 <strong>Returns</strong>: O for success or else error code<br>
-<strong>this</strong>: <code>{MPIN}</code>  <br>
-<strong>Parameter</strong>: rng cryptographically secure random number generator</p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>type</td><td>determines type of action to be taken</td></tr>
-<tr><td>x</td><td>an output internally randomly generated if R!=NULL, otherwise must be provided as an input</td></tr>
-<tr><td>G</td><td>if type=0 a point in G1, else an octet to be mapped to G1</td></tr>
-<tr><td>W</td><td>the output =x.G or x.M(G), where M(.) is a mapping</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN.GET_CLIENT_SECRET"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpinget_client_secrets-cid-cst-"></a><a href="#mpinget_client_secrets-cid-cst-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN.GET_CLIENT_SECRET(S, CID, CST) ⇒</h3>
-<p>Create a client secret in G1 from a master secret and the client ID</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: rng cryptographically secure random number generator  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>type</td><td>determines type of action to be taken</td></tr><tr><td>x</td><td>an output internally randomly generated if R!=NULL, otherwise must be provided as an input</td></tr><tr><td>G</td><td>if type=0 a point in G1, else an octet to be mapped to G1</td></tr><tr><td>W</td><td>the output =x.G or x.M(G), where M(.) is a mapping</td></tr></tbody></table><a name="MPIN.GET_CLIENT_SECRET"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpinget_client_secrets-cid-cst-">MPIN.GET_CLIENT_SECRET(S, CID, CST) ⇒<a class="hash-link" href="#mpinget_client_secrets-cid-cst-" title="Direct link to heading">​</a></h3><p>Create a client secret in G1 from a master secret and the client ID</p><p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a><br>
 <strong>Returns</strong>: O for success or else error code<br>
-<strong>this</strong>: <code>{MPIN}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>S</td><td>is an input master secret</td></tr>
-<tr><td>CID</td><td>is the input client identity</td></tr>
-<tr><td>CST</td><td>is the full client secret = s.H(ID)</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN.GET_CLIENT_PERMIT"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpinget_client_permitsha-date-s-cid-ctt-"></a><a href="#mpinget_client_permitsha-date-s-cid-ctt-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN.GET_CLIENT_PERMIT(sha, date, S, CID, CTT) ⇒</h3>
-<p>Create a Time Permit in G1 from a master secret and the client ID</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>S</td><td>is an input master secret</td></tr><tr><td>CID</td><td>is the input client identity</td></tr><tr><td>CST</td><td>is the full client secret = s.H(ID)</td></tr></tbody></table><a name="MPIN.GET_CLIENT_PERMIT"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpinget_client_permitsha-date-s-cid-ctt-">MPIN.GET_CLIENT_PERMIT(sha, date, S, CID, CTT) ⇒<a class="hash-link" href="#mpinget_client_permitsha-date-s-cid-ctt-" title="Direct link to heading">​</a></h3><p>Create a Time Permit in G1 from a master secret and the client ID</p><p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a><br>
 <strong>Returns</strong>: O for success or else error code<br>
-<strong>this</strong>: <code>{MPIN}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>sha</td><td>is the hash type</td></tr>
-<tr><td>date</td><td>is input date, in days since the epoch.</td></tr>
-<tr><td>S</td><td>is an input master secret</td></tr>
-<tr><td>CID</td><td>is the input client identity</td></tr>
-<tr><td>CTT</td><td>is a Time Permit for the given date = s.H(d</td><td>H(ID))</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN.CLIENT_1"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpinclient_1sha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-"></a><a href="#mpinclient_1sha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN.CLIENT_1(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT) ⇒</h3>
-<p>Perform first pass of the client side of the 3-pass version of the M-Pin protocol</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th><th></th></tr></thead><tbody><tr><td>sha</td><td>is the hash type</td><td></td></tr><tr><td>date</td><td>is input date, in days since the epoch.</td><td></td></tr><tr><td>S</td><td>is an input master secret</td><td></td></tr><tr><td>CID</td><td>is the input client identity</td><td></td></tr><tr><td>CTT</td><td>is a Time Permit for the given date = s.H(d</td><td>H(ID))</td></tr></tbody></table><a name="MPIN.CLIENT_1"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpinclient_1sha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-">MPIN.CLIENT_1(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT) ⇒<a class="hash-link" href="#mpinclient_1sha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-" title="Direct link to heading">​</a></h3><p>Perform first pass of the client side of the 3-pass version of the M-Pin protocol</p><p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a><br>
 <strong>Returns</strong>: O for success or else error code<br>
-<strong>this</strong>: <code>{MPIN}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>sha</td><td>is the hash type</td></tr>
-<tr><td>date</td><td>is input date, in days since the epoch. Set to 0 if Time permits disabled</td></tr>
-<tr><td>CLIENT_ID</td><td>is the input client identity</td></tr>
-<tr><td>rng</td><td>is a pointer to a cryptographically secure random number generator</td></tr>
-<tr><td>X</td><td>an output internally randomly generated if R!=NULL, otherwise must be provided as an input</td></tr>
-<tr><td>pin</td><td>is the input PIN number</td></tr>
-<tr><td>TOKEN</td><td>is the input M-Pin token (the client secret with PIN portion removed)</td></tr>
-<tr><td>SEC</td><td>is output = CS+TP, where CS=is the reconstructed client secret, and TP is the time permit</td></tr>
-<tr><td>xID</td><td>is output = x.H(ID)</td></tr>
-<tr><td>xCID</td><td>is output = x.(H(ID)+H(d</td><td>H(ID)))</td></tr>
-<tr><td>PERMIT</td><td>is the input time permit</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN.CLIENT_2"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpinclient_2x-y-sec-"></a><a href="#mpinclient_2x-y-sec-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN.CLIENT_2(X, Y, SEC) ⇒</h3>
-<p>Perform second pass of the client side of the 3-pass version of the M-Pin protocol</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th><th></th></tr></thead><tbody><tr><td>sha</td><td>is the hash type</td><td></td></tr><tr><td>date</td><td>is input date, in days since the epoch. Set to 0 if Time permits disabled</td><td></td></tr><tr><td>CLIENT_ID</td><td>is the input client identity</td><td></td></tr><tr><td>rng</td><td>is a pointer to a cryptographically secure random number generator</td><td></td></tr><tr><td>X</td><td>an output internally randomly generated if R!=NULL, otherwise must be provided as an input</td><td></td></tr><tr><td>pin</td><td>is the input PIN number</td><td></td></tr><tr><td>TOKEN</td><td>is the input M-Pin token (the client secret with PIN portion removed)</td><td></td></tr><tr><td>SEC</td><td>is output = CS+TP, where CS=is the reconstructed client secret, and TP is the time permit</td><td></td></tr><tr><td>xID</td><td>is output = x.H(ID)</td><td></td></tr><tr><td>xCID</td><td>is output = x.(H(ID)+H(d</td><td>H(ID)))</td></tr><tr><td>PERMIT</td><td>is the input time permit</td><td></td></tr></tbody></table><a name="MPIN.CLIENT_2"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpinclient_2x-y-sec-">MPIN.CLIENT_2(X, Y, SEC) ⇒<a class="hash-link" href="#mpinclient_2x-y-sec-" title="Direct link to heading">​</a></h3><p>Perform second pass of the client side of the 3-pass version of the M-Pin protocol</p><p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a><br>
 <strong>Returns</strong>: O for success or else error code<br>
-<strong>this</strong>: <code>{MPIN}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>X</td><td>an input, a locally generated random number</td></tr>
-<tr><td>Y</td><td>an input random challenge from the server</td></tr>
-<tr><td>SEC</td><td>on output = -(x+y).V</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN.SERVER_1"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpinserver_1sha-date-cid-hid-htid-"></a><a href="#mpinserver_1sha-date-cid-hid-htid-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN.SERVER_1(sha, date, CID, HID, HTID) ⇒</h3>
-<p>Perform first pass of the server side of the 3-pass version of the M-Pin protocol</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>X</td><td>an input, a locally generated random number</td></tr><tr><td>Y</td><td>an input random challenge from the server</td></tr><tr><td>SEC</td><td>on output = -(x+y).V</td></tr></tbody></table><a name="MPIN.SERVER_1"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpinserver_1sha-date-cid-hid-htid-">MPIN.SERVER_1(sha, date, CID, HID, HTID) ⇒<a class="hash-link" href="#mpinserver_1sha-date-cid-hid-htid-" title="Direct link to heading">​</a></h3><p>Perform first pass of the server side of the 3-pass version of the M-Pin protocol</p><p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a><br>
 <strong>Returns</strong>: O for success or else error code<br>
-<strong>this</strong>: <code>{MPIN}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>sha</td><td>is the hash type</td></tr>
-<tr><td>date</td><td>is input date, in days since the epoch. Set to 0 if Time permits disabled</td></tr>
-<tr><td>CID</td><td>is the input claimed client identity</td></tr>
-<tr><td>HID</td><td>is output H(ID), a hash of the client ID</td></tr>
-<tr><td>HTID</td><td>is output H(ID)+H(d</td><td>H(ID))</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN.SERVER_2"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpinserver_2date-hid-htid-y-sst-xid-xcid-msec-e-f-pa-"></a><a href="#mpinserver_2date-hid-htid-y-sst-xid-xcid-msec-e-f-pa-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN.SERVER_2(date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, Pa) ⇒</h3>
-<p>Perform third pass on the server side of the 3-pass version of the M-Pin protocol</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th><th></th></tr></thead><tbody><tr><td>sha</td><td>is the hash type</td><td></td></tr><tr><td>date</td><td>is input date, in days since the epoch. Set to 0 if Time permits disabled</td><td></td></tr><tr><td>CID</td><td>is the input claimed client identity</td><td></td></tr><tr><td>HID</td><td>is output H(ID), a hash of the client ID</td><td></td></tr><tr><td>HTID</td><td>is output H(ID)+H(d</td><td>H(ID))</td></tr></tbody></table><a name="MPIN.SERVER_2"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpinserver_2date-hid-htid-y-sst-xid-xcid-msec-e-f-pa-">MPIN.SERVER_2(date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, Pa) ⇒<a class="hash-link" href="#mpinserver_2date-hid-htid-y-sst-xid-xcid-msec-e-f-pa-" title="Direct link to heading">​</a></h3><p>Perform third pass on the server side of the 3-pass version of the M-Pin protocol</p><p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a><br>
 <strong>Returns</strong>: O for success or else error code<br>
-<strong>this</strong>: <code>{MPIN}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>date</td><td>is input date, in days since the epoch. Set to 0 if Time permits disabled</td></tr>
-<tr><td>HID</td><td>is input H(ID), a hash of the client ID</td></tr>
-<tr><td>HTID</td><td>is input H(ID)+H(d</td><td>H(ID))</td></tr>
-<tr><td>Y</td><td>is the input server's randomly generated challenge</td></tr>
-<tr><td>SST</td><td>is the input server secret</td></tr>
-<tr><td>xID</td><td>is input from the client = x.H(ID)</td></tr>
-<tr><td>xCID</td><td>is input from the client= x.(H(ID)+H(d</td><td>H(ID)))</td></tr>
-<tr><td>mSEC</td><td>is an input from the client</td></tr>
-<tr><td>E</td><td>is an output to help the Kangaroos to find the PIN error, or NULL if not required</td></tr>
-<tr><td>F</td><td>is an output to help the Kangaroos to find the PIN error, or NULL if not required</td></tr>
-<tr><td>Pa</td><td>is the input public key from the client, z.Q or NULL if the client uses regular mpin</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN.KANGAROO"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpinkangarooe-f-"></a><a href="#mpinkangarooe-f-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN.KANGAROO(E, F) ⇒</h3>
-<p>Use Kangaroos to find PIN error</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th><th></th></tr></thead><tbody><tr><td>date</td><td>is input date, in days since the epoch. Set to 0 if Time permits disabled</td><td></td></tr><tr><td>HID</td><td>is input H(ID), a hash of the client ID</td><td></td></tr><tr><td>HTID</td><td>is input H(ID)+H(d</td><td>H(ID))</td></tr><tr><td>Y</td><td>is the input server&#x27;s randomly generated challenge</td><td></td></tr><tr><td>SST</td><td>is the input server secret</td><td></td></tr><tr><td>xID</td><td>is input from the client = x.H(ID)</td><td></td></tr><tr><td>xCID</td><td>is input from the client= x.(H(ID)+H(d</td><td>H(ID)))</td></tr><tr><td>mSEC</td><td>is an input from the client</td><td></td></tr><tr><td>E</td><td>is an output to help the Kangaroos to find the PIN error, or NULL if not required</td><td></td></tr><tr><td>F</td><td>is an output to help the Kangaroos to find the PIN error, or NULL if not required</td><td></td></tr><tr><td>Pa</td><td>is the input public key from the client, z.Q or NULL if the client uses regular mpin</td><td></td></tr></tbody></table><a name="MPIN.KANGAROO"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpinkangarooe-f-">MPIN.KANGAROO(E, F) ⇒<a class="hash-link" href="#mpinkangarooe-f-" title="Direct link to heading">​</a></h3><p>Use Kangaroos to find PIN error</p><p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a><br>
 <strong>Returns</strong>: 0 if Kangaroos failed, or the PIN error e<br>
-<strong>this</strong>: <code>{MPIN}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>E</td><td>a member of the group GT</td></tr>
-<tr><td>F</td><td>a member of the group GT =  E^e</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN.GET_TIME"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpinget_time-"></a><a href="#mpinget_time-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN.GET_TIME() ⇒</h3>
-<p>Time since epoch</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>E</td><td>a member of the group GT</td></tr><tr><td>F</td><td>a member of the group GT =  E^e</td></tr></tbody></table><a name="MPIN.GET_TIME"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpinget_time-">MPIN.GET_TIME() ⇒<a class="hash-link" href="#mpinget_time-" title="Direct link to heading">​</a></h3><p>Time since epoch</p><p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a><br>
 <strong>Returns</strong>: time since epoch<br>
-<strong>this</strong>: <code>{MPIN}</code>  <br>
-<a name="MPIN.GET_Y"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpinget_ysha-timevalue-xcid-y-"></a><a href="#mpinget_ysha-timevalue-xcid-y-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN.GET_Y(sha, TimeValue, xCID, Y) ⇒</h3>
-<p>Generate Y=H(s,O), where s is epoch time, O is a byte array, and H(.) is a hash function</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN{&quot;}&quot;}</code>  </p><a name="MPIN.GET_Y"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpinget_ysha-timevalue-xcid-y-">MPIN.GET_Y(sha, TimeValue, xCID, Y) ⇒<a class="hash-link" href="#mpinget_ysha-timevalue-xcid-y-" title="Direct link to heading">​</a></h3><p>Generate Y=H(s,O), where s is epoch time, O is a byte array, and H(.) is a hash function</p><p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a><br>
 <strong>Returns</strong>: O for success or else error code<br>
-<strong>this</strong>: <code>{MPIN}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>sha</td><td>is the hash type</td></tr>
-<tr><td>TimeValue</td><td>is epoch time in seconds</td></tr>
-<tr><td>xCID</td><td>input bytearray is an input octet</td></tr>
-<tr><td>Y</td><td>output value</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN.CLIENT"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpinclientsha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-timevalue-y-message-"></a><a href="#mpinclientsha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-timevalue-y-message-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN.CLIENT(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT, TimeValue, Y, Message) ⇒</h3>
-<p>Perform client side of the one-pass version of the M-Pin protocol</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>sha</td><td>is the hash type</td></tr><tr><td>TimeValue</td><td>is epoch time in seconds</td></tr><tr><td>xCID</td><td>input bytearray is an input octet</td></tr><tr><td>Y</td><td>output value</td></tr></tbody></table><a name="MPIN.CLIENT"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpinclientsha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-timevalue-y-message-">MPIN.CLIENT(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT, TimeValue, Y, Message) ⇒<a class="hash-link" href="#mpinclientsha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-timevalue-y-message-" title="Direct link to heading">​</a></h3><p>Perform client side of the one-pass version of the M-Pin protocol</p><p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a><br>
 <strong>Returns</strong>: O for success or else error code<br>
-<strong>this</strong>: <code>{MPIN}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>sha</td><td>is the hash type</td></tr>
-<tr><td>date</td><td>is input date, in days since the epoch. Set to 0 if Time permits disabled</td></tr>
-<tr><td>CLIENT_ID</td><td>is the input client identity</td></tr>
-<tr><td>rng</td><td>is a pointer to a cryptographically secure random number generator</td></tr>
-<tr><td>X</td><td>an output internally randomly generated if R!=NULL, otherwise must be provided as an input</td></tr>
-<tr><td>pin</td><td>is the input PIN number</td></tr>
-<tr><td>TOKEN</td><td>is the input M-Pin token (the client secret with PIN portion removed)</td></tr>
-<tr><td>SEC</td><td>is output = -(x+y)(CS+TP), where CS is the reconstructed client secret, and TP is the time permit</td></tr>
-<tr><td>xID</td><td>is output = x.H(ID)</td></tr>
-<tr><td>xCID</td><td>is output = x.(H(ID)+H(d</td><td>H(ID)))</td></tr>
-<tr><td>PERMIT</td><td>is the input time permit</td></tr>
-<tr><td>TimeValue</td><td>is input epoch time in seconds - a timestamp</td></tr>
-<tr><td>Y</td><td>is output H(t</td><td>U) or H(t</td><td>UT) if Time Permits enabled</td></tr>
-<tr><td>Message</td><td>is the message to be signed</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN.SERVER"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpinserversha-date-hid-htid-y-sst-xid-xcid-msec-e-f-cid-timevalue-message-pa-"></a><a href="#mpinserversha-date-hid-htid-y-sst-xid-xcid-msec-e-f-cid-timevalue-message-pa-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN.SERVER(sha, date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, CID, TimeValue, MESSAGE, Pa) ⇒</h3>
-<p>Perform server side of the one-pass version of the M-Pin protocol</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th><th></th><th></th></tr></thead><tbody><tr><td>sha</td><td>is the hash type</td><td></td><td></td></tr><tr><td>date</td><td>is input date, in days since the epoch. Set to 0 if Time permits disabled</td><td></td><td></td></tr><tr><td>CLIENT_ID</td><td>is the input client identity</td><td></td><td></td></tr><tr><td>rng</td><td>is a pointer to a cryptographically secure random number generator</td><td></td><td></td></tr><tr><td>X</td><td>an output internally randomly generated if R!=NULL, otherwise must be provided as an input</td><td></td><td></td></tr><tr><td>pin</td><td>is the input PIN number</td><td></td><td></td></tr><tr><td>TOKEN</td><td>is the input M-Pin token (the client secret with PIN portion removed)</td><td></td><td></td></tr><tr><td>SEC</td><td>is output = -(x+y)(CS+TP), where CS is the reconstructed client secret, and TP is the time permit</td><td></td><td></td></tr><tr><td>xID</td><td>is output = x.H(ID)</td><td></td><td></td></tr><tr><td>xCID</td><td>is output = x.(H(ID)+H(d</td><td>H(ID)))</td><td></td></tr><tr><td>PERMIT</td><td>is the input time permit</td><td></td><td></td></tr><tr><td>TimeValue</td><td>is input epoch time in seconds - a timestamp</td><td></td><td></td></tr><tr><td>Y</td><td>is output H(t</td><td>U) or H(t</td><td>UT) if Time Permits enabled</td></tr><tr><td>Message</td><td>is the message to be signed</td><td></td><td></td></tr></tbody></table><a name="MPIN.SERVER"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpinserversha-date-hid-htid-y-sst-xid-xcid-msec-e-f-cid-timevalue-message-pa-">MPIN.SERVER(sha, date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, CID, TimeValue, MESSAGE, Pa) ⇒<a class="hash-link" href="#mpinserversha-date-hid-htid-y-sst-xid-xcid-msec-e-f-cid-timevalue-message-pa-" title="Direct link to heading">​</a></h3><p>Perform server side of the one-pass version of the M-Pin protocol</p><p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a><br>
 <strong>Returns</strong>: O for success or else error code<br>
-<strong>this</strong>: <code>{MPIN}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>sha</td><td>is the hash type</td></tr>
-<tr><td>date</td><td>is input date, in days since the epoch. Set to 0 if Time permits disabled</td></tr>
-<tr><td>HID</td><td>is output H(ID), a hash of the client ID</td></tr>
-<tr><td>HTID</td><td>is output H(ID)+H(d</td><td>H(ID))</td></tr>
-<tr><td>Y</td><td>is output H(t</td><td>U) or H(t</td><td>UT) if Time Permits enabled</td></tr>
-<tr><td>SST</td><td>is the input server secret</td></tr>
-<tr><td>xID</td><td>is input from the client = x.H(ID)</td></tr>
-<tr><td>xCID</td><td>is input from the client= x.(H(ID)+H(d</td><td>H(ID)))</td></tr>
-<tr><td>mSEC</td><td>is an input from the client</td></tr>
-<tr><td>E</td><td>is an output to help the Kangaroos to find the PIN error, or NULL if not required</td></tr>
-<tr><td>F</td><td>is an output to help the Kangaroos to find the PIN error, or NULL if not required</td></tr>
-<tr><td>CID</td><td>is the input claimed client identity</td></tr>
-<tr><td>TimeValue</td><td>is input epoch time in seconds - a timestamp</td></tr>
-<tr><td>MESSAGE</td><td>is the message to be signed</td></tr>
-<tr><td>Pa</td><td>is input from the client z.Q or NULL if the key-escrow less scheme is not used</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN.PRECOMPUTE"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpinprecomputetoken-cid-g1-g2-"></a><a href="#mpinprecomputetoken-cid-g1-g2-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN.PRECOMPUTE(TOKEN, CID, G1, G2) ⇒</h3>
-<p>Precompute values for use by the client side of M-Pin Full</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th><th></th><th></th></tr></thead><tbody><tr><td>sha</td><td>is the hash type</td><td></td><td></td></tr><tr><td>date</td><td>is input date, in days since the epoch. Set to 0 if Time permits disabled</td><td></td><td></td></tr><tr><td>HID</td><td>is output H(ID), a hash of the client ID</td><td></td><td></td></tr><tr><td>HTID</td><td>is output H(ID)+H(d</td><td>H(ID))</td><td></td></tr><tr><td>Y</td><td>is output H(t</td><td>U) or H(t</td><td>UT) if Time Permits enabled</td></tr><tr><td>SST</td><td>is the input server secret</td><td></td><td></td></tr><tr><td>xID</td><td>is input from the client = x.H(ID)</td><td></td><td></td></tr><tr><td>xCID</td><td>is input from the client= x.(H(ID)+H(d</td><td>H(ID)))</td><td></td></tr><tr><td>mSEC</td><td>is an input from the client</td><td></td><td></td></tr><tr><td>E</td><td>is an output to help the Kangaroos to find the PIN error, or NULL if not required</td><td></td><td></td></tr><tr><td>F</td><td>is an output to help the Kangaroos to find the PIN error, or NULL if not required</td><td></td><td></td></tr><tr><td>CID</td><td>is the input claimed client identity</td><td></td><td></td></tr><tr><td>TimeValue</td><td>is input epoch time in seconds - a timestamp</td><td></td><td></td></tr><tr><td>MESSAGE</td><td>is the message to be signed</td><td></td><td></td></tr><tr><td>Pa</td><td>is input from the client z.Q or NULL if the key-escrow less scheme is not used</td><td></td><td></td></tr></tbody></table><a name="MPIN.PRECOMPUTE"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpinprecomputetoken-cid-g1-g2-">MPIN.PRECOMPUTE(TOKEN, CID, G1, G2) ⇒<a class="hash-link" href="#mpinprecomputetoken-cid-g1-g2-" title="Direct link to heading">​</a></h3><p>Precompute values for use by the client side of M-Pin Full</p><p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a><br>
 <strong>Returns</strong>: O for success or else error code<br>
-<strong>this</strong>: <code>{MPIN}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>TOKEN</td><td>is the input M-Pin token (the client secret with PIN portion removed)</td></tr>
-<tr><td>CID</td><td>is the input client identity</td></tr>
-<tr><td>G1</td><td>precomputed output</td></tr>
-<tr><td>G2</td><td>precomputed output</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN.HASH_ALL"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpinhash_allsha-hid-xid-xcid-sec-y-r-w-"></a><a href="#mpinhash_allsha-hid-xid-xcid-sec-y-r-w-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN.HASH_ALL(sha, HID, xID, xCID, SEC, Y, R, W) ⇒</h3>
-<p>Hash the session transcript</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>TOKEN</td><td>is the input M-Pin token (the client secret with PIN portion removed)</td></tr><tr><td>CID</td><td>is the input client identity</td></tr><tr><td>G1</td><td>precomputed output</td></tr><tr><td>G2</td><td>precomputed output</td></tr></tbody></table><a name="MPIN.HASH_ALL"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpinhash_allsha-hid-xid-xcid-sec-y-r-w-">MPIN.HASH_ALL(sha, HID, xID, xCID, SEC, Y, R, W) ⇒<a class="hash-link" href="#mpinhash_allsha-hid-xid-xcid-sec-y-r-w-" title="Direct link to heading">​</a></h3><p>Hash the session transcript</p><p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a><br>
 <strong>Returns</strong>: H the output is the hash of all of the above that apply<br>
-<strong>this</strong>: <code>{MPIN}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>sha</td><td>is the hash type</td></tr>
-<tr><td>HID</td><td>is the hashed input client ID = H(ID)</td></tr>
-<tr><td>xID</td><td>is the client output = x.H(ID)</td></tr>
-<tr><td>xCID</td><td>is the client output = x.(H(ID)+H(T</td><td>H(ID)))</td></tr>
-<tr><td>SEC</td><td>is the client part response</td></tr>
-<tr><td>Y</td><td>is the server challenge</td></tr>
-<tr><td>R</td><td>is the client part response</td></tr>
-<tr><td>W</td><td>is the server part response</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN.CLIENT_KEY"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpinclient_keysha-g1-g2-pin-r-x-h-wcid-ck-"></a><a href="#mpinclient_keysha-g1-g2-pin-r-x-h-wcid-ck-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN.CLIENT_KEY(sha, G1, G2, pin, R, X, H, wCID, CK) ⇒</h3>
-<p>Calculate Key on Client side for M-Pin Full</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th><th></th></tr></thead><tbody><tr><td>sha</td><td>is the hash type</td><td></td></tr><tr><td>HID</td><td>is the hashed input client ID = H(ID)</td><td></td></tr><tr><td>xID</td><td>is the client output = x.H(ID)</td><td></td></tr><tr><td>xCID</td><td>is the client output = x.(H(ID)+H(T</td><td>H(ID)))</td></tr><tr><td>SEC</td><td>is the client part response</td><td></td></tr><tr><td>Y</td><td>is the server challenge</td><td></td></tr><tr><td>R</td><td>is the client part response</td><td></td></tr><tr><td>W</td><td>is the server part response</td><td></td></tr></tbody></table><a name="MPIN.CLIENT_KEY"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpinclient_keysha-g1-g2-pin-r-x-h-wcid-ck-">MPIN.CLIENT_KEY(sha, G1, G2, pin, R, X, H, wCID, CK) ⇒<a class="hash-link" href="#mpinclient_keysha-g1-g2-pin-r-x-h-wcid-ck-" title="Direct link to heading">​</a></h3><p>Calculate Key on Client side for M-Pin Full</p><p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a><br>
 <strong>Returns</strong>: 0 or an error code<br>
-<strong>this</strong>: <code>{MPIN}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>sha</td><td>is the hash type</td></tr>
-<tr><td>G1</td><td>precomputed input</td></tr>
-<tr><td>G2</td><td>precomputed input</td></tr>
-<tr><td>pin</td><td>is the input PIN number</td></tr>
-<tr><td>R</td><td>is an input, a locally generated random number</td></tr>
-<tr><td>X</td><td>is an input, a locally generated random number</td></tr>
-<tr><td>H</td><td>is an input, hash of the protocol transcript</td></tr>
-<tr><td>wCID</td><td>is the input Server-side Diffie-Hellman component</td></tr>
-<tr><td>CK</td><td>is the output calculated shared key</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN.SERVER_KEY"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpinserver_keyh-z-sst-w-h-hid-xid-xcid-sk-"></a><a href="#mpinserver_keyh-z-sst-w-h-hid-xid-xcid-sk-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN.SERVER_KEY(h, Z, SST, W, H, HID, xID, xCID, SK) ⇒</h3>
-<p>Calculate Key on Server side for M-Pin Full</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>sha</td><td>is the hash type</td></tr><tr><td>G1</td><td>precomputed input</td></tr><tr><td>G2</td><td>precomputed input</td></tr><tr><td>pin</td><td>is the input PIN number</td></tr><tr><td>R</td><td>is an input, a locally generated random number</td></tr><tr><td>X</td><td>is an input, a locally generated random number</td></tr><tr><td>H</td><td>is an input, hash of the protocol transcript</td></tr><tr><td>wCID</td><td>is the input Server-side Diffie-Hellman component</td></tr><tr><td>CK</td><td>is the output calculated shared key</td></tr></tbody></table><a name="MPIN.SERVER_KEY"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpinserver_keyh-z-sst-w-h-hid-xid-xcid-sk-">MPIN.SERVER_KEY(h, Z, SST, W, H, HID, xID, xCID, SK) ⇒<a class="hash-link" href="#mpinserver_keyh-z-sst-w-h-hid-xid-xcid-sk-" title="Direct link to heading">​</a></h3><p>Calculate Key on Server side for M-Pin Full</p><p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a><br>
 <strong>Returns</strong>: 0 or an error code<br>
-<strong>this</strong>: <code>{MPIN}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>h</td><td>is the hash type</td></tr>
-<tr><td>Z</td><td>is the input Client-side Diffie-Hellman component</td></tr>
-<tr><td>SST</td><td>is the input server secret</td></tr>
-<tr><td>W</td><td>is an input random number generated by the server</td></tr>
-<tr><td>H</td><td>is an input, hash of the protocol transcript</td></tr>
-<tr><td>HID</td><td>is the hashed input client ID = H(ID)</td></tr>
-<tr><td>xID</td><td>is input from the client = x.H(ID)</td></tr>
-<tr><td>xCID</td><td>is input from the client= x.(H(ID)+H(d</td><td>H(ID)))</td></tr>
-<tr><td>SK</td><td>is the output calculated shared key</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN.GET_DVS_KEYPAIR"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpinget_dvs_keypairrng-z-pa-"></a><a href="#mpinget_dvs_keypairrng-z-pa-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN.GET_DVS_KEYPAIR(rng, Z, Pa) ⇒</h3>
-<p>Generates a random public key for the client z.Q</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th><th></th></tr></thead><tbody><tr><td>h</td><td>is the hash type</td><td></td></tr><tr><td>Z</td><td>is the input Client-side Diffie-Hellman component</td><td></td></tr><tr><td>SST</td><td>is the input server secret</td><td></td></tr><tr><td>W</td><td>is an input random number generated by the server</td><td></td></tr><tr><td>H</td><td>is an input, hash of the protocol transcript</td><td></td></tr><tr><td>HID</td><td>is the hashed input client ID = H(ID)</td><td></td></tr><tr><td>xID</td><td>is input from the client = x.H(ID)</td><td></td></tr><tr><td>xCID</td><td>is input from the client= x.(H(ID)+H(d</td><td>H(ID)))</td></tr><tr><td>SK</td><td>is the output calculated shared key</td><td></td></tr></tbody></table><a name="MPIN.GET_DVS_KEYPAIR"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpinget_dvs_keypairrng-z-pa-">MPIN.GET_DVS_KEYPAIR(rng, Z, Pa) ⇒<a class="hash-link" href="#mpinget_dvs_keypairrng-z-pa-" title="Direct link to heading">​</a></h3><p>Generates a random public key for the client z.Q</p><p><strong>Kind</strong>: static method of <a href="#MPIN"><code>MPIN</code></a><br>
 <strong>Returns</strong>: 0 or an error code<br>
-<strong>this</strong>: <code>{MPIN}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>rng</td><td>cryptographically secure random number generator</td></tr>
-<tr><td>Z</td><td>an output internally randomly generated if R!=NULL, otherwise it must be provided as an input</td></tr>
-<tr><td>Pa</td><td>the output public key for the client</td></tr>
-</tbody>
-</table>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/cryptojs/hash512"><span class="arrow-prev">← </span><span>HASH512</span></a><a class="docs-next button" href="/docs/cryptojs/mpin192"><span>MPIN192</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#mpin">MPIN</a><ul class="toc-headings"><li><a href="#new-mpin">new MPIN()</a></li><li><a href="#mpintoday-">MPIN.today() ⇒</a></li><li><a href="#mpinbytestostringb-">MPIN.bytestostring(b) ⇒</a></li><li><a href="#mpinstringtobytess-">MPIN.stringtobytes(s) ⇒</a></li><li><a href="#mpincomparebytesa-b-">MPIN.comparebytes(a, b) ⇒</a></li><li><a href="#mpinmpin_hashc-u-">MPIN.mpin_hash(c, U) ⇒</a></li><li><a href="#mpinhashitsha-n-b-">MPIN.hashit(sha, n, B) ⇒</a></li><li><a href="#mpinmapu-cb-">MPIN.map(u, cb) ⇒</a></li><li><a href="#mpinunmapu-p-">MPIN.unmap(u, P) ⇒</a></li><li><a href="#mpinrecombine_g1r1-r2-r-">MPIN.RECOMBINE_G1(R1, R2, R) ⇒</a></li><li><a href="#mpinrecombine_g2w1-w2-w-">MPIN.RECOMBINE_G2(W1, W2, W) ⇒</a></li><li><a href="#mpinhash_idsha-id-">MPIN.HASH_ID(sha, ID) ⇒</a></li><li><a href="#mpinrandom_generaterng-s-">MPIN.RANDOM_GENERATE(rng, S) ⇒</a></li><li><a href="#mpinextract_pin-">MPIN.EXTRACT_PIN() ⇒</a></li><li><a href="#mpinextract_factor-">MPIN.EXTRACT_FACTOR() ⇒</a></li><li><a href="#mpinrestore_factor-">MPIN.RESTORE_FACTOR() ⇒</a></li><li><a href="#mpinget_server_secrets-sst-">MPIN.GET_SERVER_SECRET(S, SST) ⇒</a></li><li><a href="#mpinget_g1_multipletype-x-g-w-">MPIN.GET_G1_MULTIPLE(type, x, G, W) ⇒</a></li><li><a href="#mpinget_client_secrets-cid-cst-">MPIN.GET_CLIENT_SECRET(S, CID, CST) ⇒</a></li><li><a href="#mpinget_client_permitsha-date-s-cid-ctt-">MPIN.GET_CLIENT_PERMIT(sha, date, S, CID, CTT) ⇒</a></li><li><a href="#mpinclient_1sha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-">MPIN.CLIENT_1(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT) ⇒</a></li><li><a href="#mpinclient_2x-y-sec-">MPIN.CLIENT_2(X, Y, SEC) ⇒</a></li><li><a href="#mpinserver_1sha-date-cid-hid-htid-">MPIN.SERVER_1(sha, date, CID, HID, HTID) ⇒</a></li><li><a href="#mpinserver_2date-hid-htid-y-sst-xid-xcid-msec-e-f-pa-">MPIN.SERVER_2(date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, Pa) ⇒</a></li><li><a href="#mpinkangarooe-f-">MPIN.KANGAROO(E, F) ⇒</a></li><li><a href="#mpinget_time-">MPIN.GET_TIME() ⇒</a></li><li><a href="#mpinget_ysha-timevalue-xcid-y-">MPIN.GET_Y(sha, TimeValue, xCID, Y) ⇒</a></li><li><a href="#mpinclientsha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-timevalue-y-message-">MPIN.CLIENT(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT, TimeValue, Y, Message) ⇒</a></li><li><a href="#mpinserversha-date-hid-htid-y-sst-xid-xcid-msec-e-f-cid-timevalue-message-pa-">MPIN.SERVER(sha, date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, CID, TimeValue, MESSAGE, Pa) ⇒</a></li><li><a href="#mpinprecomputetoken-cid-g1-g2-">MPIN.PRECOMPUTE(TOKEN, CID, G1, G2) ⇒</a></li><li><a href="#mpinhash_allsha-hid-xid-xcid-sec-y-r-w-">MPIN.HASH_ALL(sha, HID, xID, xCID, SEC, Y, R, W) ⇒</a></li><li><a href="#mpinclient_keysha-g1-g2-pin-r-x-h-wcid-ck-">MPIN.CLIENT_KEY(sha, G1, G2, pin, R, X, H, wCID, CK) ⇒</a></li><li><a href="#mpinserver_keyh-z-sst-w-h-hid-xid-xcid-sk-">MPIN.SERVER_KEY(h, Z, SST, W, H, HID, xID, xCID, SK) ⇒</a></li><li><a href="#mpinget_dvs_keypairrng-z-pa-">MPIN.GET_DVS_KEYPAIR(rng, Z, Pa) ⇒</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>rng</td><td>cryptographically secure random number generator</td></tr><tr><td>Z</td><td>an output internally randomly generated if R!=NULL, otherwise it must be provided as an input</td></tr><tr><td>Pa</td><td>the output public key for the client</td></tr></tbody></table></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/cryptojs/hash512"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">HASH512</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/cryptojs/mpin192"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">MPIN192</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#mpin" class="table-of-contents__link toc-highlight">MPIN</a><ul><li><a href="#new-mpin" class="table-of-contents__link toc-highlight">new MPIN()</a></li><li><a href="#mpintoday-" class="table-of-contents__link toc-highlight">MPIN.today() ⇒</a></li><li><a href="#mpinbytestostringb-" class="table-of-contents__link toc-highlight">MPIN.bytestostring(b) ⇒</a></li><li><a href="#mpinstringtobytess-" class="table-of-contents__link toc-highlight">MPIN.stringtobytes(s) ⇒</a></li><li><a href="#mpincomparebytesa-b-" class="table-of-contents__link toc-highlight">MPIN.comparebytes(a, b) ⇒</a></li><li><a href="#mpinmpin_hashc-u-" class="table-of-contents__link toc-highlight">MPIN.mpin_hash(c, U) ⇒</a></li><li><a href="#mpinhashitsha-n-b-" class="table-of-contents__link toc-highlight">MPIN.hashit(sha, n, B) ⇒</a></li><li><a href="#mpinmapu-cb-" class="table-of-contents__link toc-highlight">MPIN.map(u, cb) ⇒</a></li><li><a href="#mpinunmapu-p-" class="table-of-contents__link toc-highlight">MPIN.unmap(u, P) ⇒</a></li><li><a href="#mpinrecombine_g1r1-r2-r-" class="table-of-contents__link toc-highlight">MPIN.RECOMBINE_G1(R1, R2, R) ⇒</a></li><li><a href="#mpinrecombine_g2w1-w2-w-" class="table-of-contents__link toc-highlight">MPIN.RECOMBINE_G2(W1, W2, W) ⇒</a></li><li><a href="#mpinhash_idsha-id-" class="table-of-contents__link toc-highlight">MPIN.HASH_ID(sha, ID) ⇒</a></li><li><a href="#mpinrandom_generaterng-s-" class="table-of-contents__link toc-highlight">MPIN.RANDOM_GENERATE(rng, S) ⇒</a></li><li><a href="#mpinextract_pin-" class="table-of-contents__link toc-highlight">MPIN.EXTRACT_PIN() ⇒</a></li><li><a href="#mpinextract_factor-" class="table-of-contents__link toc-highlight">MPIN.EXTRACT_FACTOR() ⇒</a></li><li><a href="#mpinrestore_factor-" class="table-of-contents__link toc-highlight">MPIN.RESTORE_FACTOR() ⇒</a></li><li><a href="#mpinget_server_secrets-sst-" class="table-of-contents__link toc-highlight">MPIN.GET_SERVER_SECRET(S, SST) ⇒</a></li><li><a href="#mpinget_g1_multipletype-x-g-w-" class="table-of-contents__link toc-highlight">MPIN.GET_G1_MULTIPLE(type, x, G, W) ⇒</a></li><li><a href="#mpinget_client_secrets-cid-cst-" class="table-of-contents__link toc-highlight">MPIN.GET_CLIENT_SECRET(S, CID, CST) ⇒</a></li><li><a href="#mpinget_client_permitsha-date-s-cid-ctt-" class="table-of-contents__link toc-highlight">MPIN.GET_CLIENT_PERMIT(sha, date, S, CID, CTT) ⇒</a></li><li><a href="#mpinclient_1sha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-" class="table-of-contents__link toc-highlight">MPIN.CLIENT_1(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT) ⇒</a></li><li><a href="#mpinclient_2x-y-sec-" class="table-of-contents__link toc-highlight">MPIN.CLIENT_2(X, Y, SEC) ⇒</a></li><li><a href="#mpinserver_1sha-date-cid-hid-htid-" class="table-of-contents__link toc-highlight">MPIN.SERVER_1(sha, date, CID, HID, HTID) ⇒</a></li><li><a href="#mpinserver_2date-hid-htid-y-sst-xid-xcid-msec-e-f-pa-" class="table-of-contents__link toc-highlight">MPIN.SERVER_2(date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, Pa) ⇒</a></li><li><a href="#mpinkangarooe-f-" class="table-of-contents__link toc-highlight">MPIN.KANGAROO(E, F) ⇒</a></li><li><a href="#mpinget_time-" class="table-of-contents__link toc-highlight">MPIN.GET_TIME() ⇒</a></li><li><a href="#mpinget_ysha-timevalue-xcid-y-" class="table-of-contents__link toc-highlight">MPIN.GET_Y(sha, TimeValue, xCID, Y) ⇒</a></li><li><a href="#mpinclientsha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-timevalue-y-message-" class="table-of-contents__link toc-highlight">MPIN.CLIENT(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT, TimeValue, Y, Message) ⇒</a></li><li><a href="#mpinserversha-date-hid-htid-y-sst-xid-xcid-msec-e-f-cid-timevalue-message-pa-" class="table-of-contents__link toc-highlight">MPIN.SERVER(sha, date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, CID, TimeValue, MESSAGE, Pa) ⇒</a></li><li><a href="#mpinprecomputetoken-cid-g1-g2-" class="table-of-contents__link toc-highlight">MPIN.PRECOMPUTE(TOKEN, CID, G1, G2) ⇒</a></li><li><a href="#mpinhash_allsha-hid-xid-xcid-sec-y-r-w-" class="table-of-contents__link toc-highlight">MPIN.HASH_ALL(sha, HID, xID, xCID, SEC, Y, R, W) ⇒</a></li><li><a href="#mpinclient_keysha-g1-g2-pin-r-x-h-wcid-ck-" class="table-of-contents__link toc-highlight">MPIN.CLIENT_KEY(sha, G1, G2, pin, R, X, H, wCID, CK) ⇒</a></li><li><a href="#mpinserver_keyh-z-sst-w-h-hid-xid-xcid-sk-" class="table-of-contents__link toc-highlight">MPIN.SERVER_KEY(h, Z, SST, W, H, HID, xID, xCID, SK) ⇒</a></li><li><a href="#mpinget_dvs_keypairrng-z-pa-" class="table-of-contents__link toc-highlight">MPIN.GET_DVS_KEYPAIR(rng, Z, Pa) ⇒</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/cryptojs/mpin192/index.html b/docs/cryptojs/mpin192/index.html
index 53f2070..a82536a 100644
--- a/docs/cryptojs/mpin192/index.html
+++ b/docs/cryptojs/mpin192/index.html
@@ -1,647 +1,104 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>MPIN192 · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;a name=&quot;MPIN192&quot;&gt;&lt;/a&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="MPIN192 · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;a name=&quot;MPIN192&quot;&gt;&lt;/a&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>AMCL JavaScript API 1.0.0</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-cryptojs/mpin192">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">MPIN192 | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/cryptojs/mpin192"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="MPIN192 | Apache Milagro"><meta data-rh="true" name="description" content="MPIN192"><meta data-rh="true" property="og:description" content="MPIN192"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/cryptojs/mpin192"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/mpin192" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/mpin192" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">MPIN192</h1></header><article><div><span><p><a name="MPIN192"></a></p>
-<h2><a class="anchor" aria-hidden="true" id="mpin192"></a><a href="#mpin192" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN192</h2>
-<p><strong>Kind</strong>: global class<br>
-<strong>this</strong>: <code>{MPIN192}</code></p>
-<ul>
-<li><a href="#MPIN192">MPIN192</a>
-<ul>
-<li><a href="#new_MPIN192_new">new MPIN192()</a></li>
-<li><a href="#MPIN192.today">.today()</a> ⇒</li>
-<li><a href="#MPIN192.bytestostring">.bytestostring(b)</a> ⇒</li>
-<li><a href="#MPIN192.stringtobytes">.stringtobytes(s)</a> ⇒</li>
-<li><a href="#MPIN192.comparebytes">.comparebytes(a, b)</a> ⇒</li>
-<li><a href="#MPIN192.mpin_hash">.mpin_hash(c, U)</a> ⇒</li>
-<li><a href="#MPIN192.hashit">.hashit(sha, n, B)</a> ⇒</li>
-<li><a href="#MPIN192.map">.map(u, cb)</a> ⇒</li>
-<li><a href="#MPIN192.unmap">.unmap(u, P)</a> ⇒</li>
-<li><a href="#MPIN192.RECOMBINE_G1">.RECOMBINE_G1(R1, R2, R)</a> ⇒</li>
-<li><a href="#MPIN192.RECOMBINE_G2">.RECOMBINE_G2(W1, W2, W)</a> ⇒</li>
-<li><a href="#MPIN192.HASH_ID">.HASH_ID(sha, ID)</a> ⇒</li>
-<li><a href="#MPIN192.RANDOM_GENERATE">.RANDOM_GENERATE(rng, S)</a> ⇒</li>
-<li><a href="#MPIN192.EXTRACT_PIN">.EXTRACT_PIN()</a> ⇒</li>
-<li><a href="#MPIN192.EXTRACT_FACTOR">.EXTRACT_FACTOR()</a> ⇒</li>
-<li><a href="#MPIN192.RESTORE_FACTOR">.RESTORE_FACTOR()</a> ⇒</li>
-<li><a href="#MPIN192.GET_SERVER_SECRET">.GET_SERVER_SECRET(S, SST)</a> ⇒</li>
-<li><a href="#MPIN192.GET_G1_MULTIPLE">.GET_G1_MULTIPLE(type, x, G, W)</a> ⇒</li>
-<li><a href="#MPIN192.GET_CLIENT_SECRET">.GET_CLIENT_SECRET(S, CID, CST)</a> ⇒</li>
-<li><a href="#MPIN192.GET_CLIENT_PERMIT">.GET_CLIENT_PERMIT(sha, date, S, CID, CTT)</a> ⇒</li>
-<li><a href="#MPIN192.CLIENT_1">.CLIENT_1(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT)</a> ⇒</li>
-<li><a href="#MPIN192.CLIENT_2">.CLIENT_2(X, Y, SEC)</a> ⇒</li>
-<li><a href="#MPIN192.SERVER_1">.SERVER_1(sha, date, CID, HID, HTID)</a> ⇒</li>
-<li><a href="#MPIN192.SERVER_2">.SERVER_2(date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, Pa)</a> ⇒</li>
-<li><a href="#MPIN192.KANGAROO">.KANGAROO(E, F)</a> ⇒</li>
-<li><a href="#MPIN192.GET_TIME">.GET_TIME()</a> ⇒</li>
-<li><a href="#MPIN192.GET_Y">.GET_Y(sha, TimeValue, xCID, Y)</a> ⇒</li>
-<li><a href="#MPIN192.CLIENT">.CLIENT(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT, TimeValue, Y, Message)</a> ⇒</li>
-<li><a href="#MPIN192.SERVER">.SERVER(sha, date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, CID, TimeValue, MESSAGE, Pa)</a> ⇒</li>
-<li><a href="#MPIN192.PRECOMPUTE">.PRECOMPUTE(TOKEN, CID, G1, G2)</a> ⇒</li>
-<li><a href="#MPIN192.HASH_ALL">.HASH_ALL(sha, HID, xID, xCID, SEC, Y, R, W)</a> ⇒</li>
-<li><a href="#MPIN192.CLIENT_KEY">.CLIENT_KEY(sha, G1, G2, pin, R, X, H, wCID, CK)</a> ⇒</li>
-<li><a href="#MPIN192.SERVER_KEY">.SERVER_KEY(h, Z, SST, W, H, HID, xID, xCID, SK)</a> ⇒</li>
-<li><a href="#MPIN192.GET_DVS_KEYPAIR">.GET_DVS_KEYPAIR(rng, Z, Pa)</a> ⇒</li>
-</ul></li>
-</ul>
-<p><a name="new_MPIN192_new"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="new-mpin192"></a><a href="#new-mpin192" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>new MPIN192()</h3>
-<p>Creates an instance of MPIN192</p>
-<p><a name="MPIN192.today"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin192today-"></a><a href="#mpin192today-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN192.today() ⇒</h3>
-<p>Get epoch time</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a>  <br>
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/amcl-overview">AMCL Library</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-overview">AMCL Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API 1.0.0</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/aes">AES</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/big">BIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls">BLS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls192">BLS192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls256">BLS256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/dbig">DBIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp">ECP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ff">FF</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp">FP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp2">FP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp4">FP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp8">FP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp12">FP12</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp16">FP16</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp24">FP24</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp48">FP48</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/gcm">GCM</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash256">HASH256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash384">HASH384</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash512">HASH512</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin">MPIN</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair">PAIR</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rand">RAND</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rsa">RSA</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/sha3">SHA3</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/unit64">UInt64</a></li></ul></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL Library</span><meta itemprop="position" content="1"></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL JavaScript API 1.0.0</span><meta itemprop="position" content="2"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">MPIN192</span><meta itemprop="position" content="3"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>MPIN192</h1></header><a name="MPIN192"></a><h2 class="anchor anchorWithStickyNavbar_LWe7" id="mpin192">MPIN192<a class="hash-link" href="#mpin192" title="Direct link to heading">​</a></h2><p><strong>Kind</strong>: global class<br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN192{&quot;}&quot;}</code>  </p><ul><li><a href="#MPIN192">MPIN192</a><ul><li><a href="#new_MPIN192_new">new MPIN192()</a></li><li><a href="#MPIN192.today">.today()</a> ⇒</li><li><a href="#MPIN192.bytestostring">.bytestostring(b)</a> ⇒</li><li><a href="#MPIN192.stringtobytes">.stringtobytes(s)</a> ⇒</li><li><a href="#MPIN192.comparebytes">.comparebytes(a, b)</a> ⇒</li><li><a href="#MPIN192.mpin_hash">.mpin_hash(c, U)</a> ⇒</li><li><a href="#MPIN192.hashit">.hashit(sha, n, B)</a> ⇒</li><li><a href="#MPIN192.map">.map(u, cb)</a> ⇒</li><li><a href="#MPIN192.unmap">.unmap(u, P)</a> ⇒</li><li><a href="#MPIN192.RECOMBINE_G1">.RECOMBINE_G1(R1, R2, R)</a> ⇒</li><li><a href="#MPIN192.RECOMBINE_G2">.RECOMBINE_G2(W1, W2, W)</a> ⇒</li><li><a href="#MPIN192.HASH_ID">.HASH_ID(sha, ID)</a> ⇒</li><li><a href="#MPIN192.RANDOM_GENERATE">.RANDOM_GENERATE(rng, S)</a> ⇒</li><li><a href="#MPIN192.EXTRACT_PIN">.EXTRACT_PIN()</a> ⇒</li><li><a href="#MPIN192.EXTRACT_FACTOR">.EXTRACT_FACTOR()</a> ⇒</li><li><a href="#MPIN192.RESTORE_FACTOR">.RESTORE_FACTOR()</a> ⇒</li><li><a href="#MPIN192.GET_SERVER_SECRET">.GET_SERVER_SECRET(S, SST)</a> ⇒</li><li><a href="#MPIN192.GET_G1_MULTIPLE">.GET_G1_MULTIPLE(type, x, G, W)</a> ⇒</li><li><a href="#MPIN192.GET_CLIENT_SECRET">.GET_CLIENT_SECRET(S, CID, CST)</a> ⇒</li><li><a href="#MPIN192.GET_CLIENT_PERMIT">.GET_CLIENT_PERMIT(sha, date, S, CID, CTT)</a> ⇒</li><li><a href="#MPIN192.CLIENT_1">.CLIENT_1(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT)</a> ⇒</li><li><a href="#MPIN192.CLIENT_2">.CLIENT_2(X, Y, SEC)</a> ⇒</li><li><a href="#MPIN192.SERVER_1">.SERVER_1(sha, date, CID, HID, HTID)</a> ⇒</li><li><a href="#MPIN192.SERVER_2">.SERVER_2(date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, Pa)</a> ⇒</li><li><a href="#MPIN192.KANGAROO">.KANGAROO(E, F)</a> ⇒</li><li><a href="#MPIN192.GET_TIME">.GET_TIME()</a> ⇒</li><li><a href="#MPIN192.GET_Y">.GET_Y(sha, TimeValue, xCID, Y)</a> ⇒</li><li><a href="#MPIN192.CLIENT">.CLIENT(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT, TimeValue, Y, Message)</a> ⇒</li><li><a href="#MPIN192.SERVER">.SERVER(sha, date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, CID, TimeValue, MESSAGE, Pa)</a> ⇒</li><li><a href="#MPIN192.PRECOMPUTE">.PRECOMPUTE(TOKEN, CID, G1, G2)</a> ⇒</li><li><a href="#MPIN192.HASH_ALL">.HASH_ALL(sha, HID, xID, xCID, SEC, Y, R, W)</a> ⇒</li><li><a href="#MPIN192.CLIENT_KEY">.CLIENT_KEY(sha, G1, G2, pin, R, X, H, wCID, CK)</a> ⇒</li><li><a href="#MPIN192.SERVER_KEY">.SERVER_KEY(h, Z, SST, W, H, HID, xID, xCID, SK)</a> ⇒</li><li><a href="#MPIN192.GET_DVS_KEYPAIR">.GET_DVS_KEYPAIR(rng, Z, Pa)</a> ⇒</li></ul></li></ul><a name="new_MPIN192_new"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="new-mpin192">new MPIN192()<a class="hash-link" href="#new-mpin192" title="Direct link to heading">​</a></h3><p>Creates an instance of MPIN192</p><a name="MPIN192.today"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin192today-">MPIN192.today() ⇒<a class="hash-link" href="#mpin192today-" title="Direct link to heading">​</a></h3><p>Get epoch time</p><p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a><br>
 <strong>Returns</strong>: time in slots since epoch<br>
-<strong>this</strong>: <code>{MPIN192}</code>  <br>
-<a name="MPIN192.bytestostring"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin192bytestostringb-"></a><a href="#mpin192bytestostringb-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN192.bytestostring(b) ⇒</h3>
-<p>Convert byte array to string</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN192{&quot;}&quot;}</code>  </p><a name="MPIN192.bytestostring"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin192bytestostringb-">MPIN192.bytestostring(b) ⇒<a class="hash-link" href="#mpin192bytestostringb-" title="Direct link to heading">​</a></h3><p>Convert byte array to string</p><p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a><br>
 <strong>Returns</strong>: s string<br>
-<strong>this</strong>: <code>{MPIN192}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>b</td><td>byte array</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN192.stringtobytes"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin192stringtobytess-"></a><a href="#mpin192stringtobytess-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN192.stringtobytes(s) ⇒</h3>
-<p>Convert a string to byte array</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN192{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>b</td><td>byte array</td></tr></tbody></table><a name="MPIN192.stringtobytes"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin192stringtobytess-">MPIN192.stringtobytes(s) ⇒<a class="hash-link" href="#mpin192stringtobytess-" title="Direct link to heading">​</a></h3><p>Convert a string to byte array</p><p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a><br>
 <strong>Returns</strong>: b byte array<br>
-<strong>this</strong>: <code>{MPIN192}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>s</td><td>string</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN192.comparebytes"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin192comparebytesa-b-"></a><a href="#mpin192comparebytesa-b-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN192.comparebytes(a, b) ⇒</h3>
-<p>Convert byte arrays</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN192{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>s</td><td>string</td></tr></tbody></table><a name="MPIN192.comparebytes"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin192comparebytesa-b-">MPIN192.comparebytes(a, b) ⇒<a class="hash-link" href="#mpin192comparebytesa-b-" title="Direct link to heading">​</a></h3><p>Convert byte arrays</p><p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a><br>
 <strong>Returns</strong>: true if equal<br>
-<strong>this</strong>: <code>{MPIN192}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>a</td><td>byte array</td></tr>
-<tr><td>b</td><td>byte array</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN192.mpin_hash"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin192mpin_hashc-u-"></a><a href="#mpin192mpin_hashc-u-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN192.mpin_hash(c, U) ⇒</h3>
-<p>Hash values</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN192{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>a</td><td>byte array</td></tr><tr><td>b</td><td>byte array</td></tr></tbody></table><a name="MPIN192.mpin_hash"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin192mpin_hashc-u-">MPIN192.mpin_hash(c, U) ⇒<a class="hash-link" href="#mpin192mpin_hashc-u-" title="Direct link to heading">​</a></h3><p>Hash values</p><p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a><br>
 <strong>Returns</strong>: R hash value<br>
-<strong>this</strong>: <code>{MPIN192}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>c</td><td>FP8 instance</td></tr>
-<tr><td>U</td><td>ECP unstancebyte array</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN192.hashit"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin192hashitsha-n-b-"></a><a href="#mpin192hashitsha-n-b-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN192.hashit(sha, n, B) ⇒</h3>
-<p>General purpose hash function</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN192{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>c</td><td>FP8 instance</td></tr><tr><td>U</td><td>ECP unstancebyte array</td></tr></tbody></table><a name="MPIN192.hashit"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin192hashitsha-n-b-">MPIN192.hashit(sha, n, B) ⇒<a class="hash-link" href="#mpin192hashitsha-n-b-" title="Direct link to heading">​</a></h3><p>General purpose hash function</p><p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a><br>
 <strong>Returns</strong>: R hash value<br>
-<strong>this</strong>: <code>{MPIN192}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>sha</td><td>is the hash type</td></tr>
-<tr><td>n</td><td>Integer</td></tr>
-<tr><td>B</td><td>byte array</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN192.map"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin192mapu-cb-"></a><a href="#mpin192mapu-cb-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN192.map(u, cb) ⇒</h3>
-<p>maps a random u to a point on the curve</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN192{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>sha</td><td>is the hash type</td></tr><tr><td>n</td><td>Integer</td></tr><tr><td>B</td><td>byte array</td></tr></tbody></table><a name="MPIN192.map"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin192mapu-cb-">MPIN192.map(u, cb) ⇒<a class="hash-link" href="#mpin192mapu-cb-" title="Direct link to heading">​</a></h3><p>maps a random u to a point on the curve</p><p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a><br>
 <strong>Returns</strong>: P ECP pointhash value<br>
-<strong>this</strong>: <code>{MPIN192}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>u</td><td>BIG numberInteger</td></tr>
-<tr><td>cb</td><td>an integer representing the &quot;sign&quot; of y, in fact its least significant bit.</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN192.unmap"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin192unmapu-p-"></a><a href="#mpin192unmapu-p-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN192.unmap(u, P) ⇒</h3>
-<p>returns u derived from P. Random value in range 1 to return value should then be added to u</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN192{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>u</td><td>BIG numberInteger</td></tr><tr><td>cb</td><td>an integer representing the &quot;sign&quot; of y, in fact its least significant bit.</td></tr></tbody></table><a name="MPIN192.unmap"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin192unmapu-p-">MPIN192.unmap(u, P) ⇒<a class="hash-link" href="#mpin192unmapu-p-" title="Direct link to heading">​</a></h3><p>returns u derived from P. Random value in range 1 to return value should then be added to u</p><p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a><br>
 <strong>Returns</strong>: r Value that should be added to u to derive P<br>
-<strong>this</strong>: <code>{MPIN192}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>u</td><td>BIG numberInteger</td></tr>
-<tr><td>P</td><td>ECP pointhash value</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN192.RECOMBINE_G1"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin192recombine_g1r1-r2-r-"></a><a href="#mpin192recombine_g1r1-r2-r-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN192.RECOMBINE_G1(R1, R2, R) ⇒</h3>
-<p>Add two members from the group G1</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN192{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>u</td><td>BIG numberInteger</td></tr><tr><td>P</td><td>ECP pointhash value</td></tr></tbody></table><a name="MPIN192.RECOMBINE_G1"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin192recombine_g1r1-r2-r-">MPIN192.RECOMBINE_G1(R1, R2, R) ⇒<a class="hash-link" href="#mpin192recombine_g1r1-r2-r-" title="Direct link to heading">​</a></h3><p>Add two members from the group G1</p><p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a><br>
 <strong>Returns</strong>: 0 or an error code<br>
-<strong>this</strong>: <code>{MPIN192}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>R1</td><td>Input member of G1</td></tr>
-<tr><td>R2</td><td>Input member of G1</td></tr>
-<tr><td>R</td><td>Output member of G1. R=R1+R2</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN192.RECOMBINE_G2"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin192recombine_g2w1-w2-w-"></a><a href="#mpin192recombine_g2w1-w2-w-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN192.RECOMBINE_G2(W1, W2, W) ⇒</h3>
-<p>Add two members from the group G2</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN192{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>R1</td><td>Input member of G1</td></tr><tr><td>R2</td><td>Input member of G1</td></tr><tr><td>R</td><td>Output member of G1. R=R1+R2</td></tr></tbody></table><a name="MPIN192.RECOMBINE_G2"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin192recombine_g2w1-w2-w-">MPIN192.RECOMBINE_G2(W1, W2, W) ⇒<a class="hash-link" href="#mpin192recombine_g2w1-w2-w-" title="Direct link to heading">​</a></h3><p>Add two members from the group G2</p><p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a><br>
 <strong>Returns</strong>: 0 or an error code<br>
-<strong>this</strong>: <code>{MPIN192}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>W1</td><td>Input member of G2</td></tr>
-<tr><td>W2</td><td>Input member of G2</td></tr>
-<tr><td>W</td><td>Output member of G2. W=W1+W2</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN192.HASH_ID"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin192hash_idsha-id-"></a><a href="#mpin192hash_idsha-id-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN192.HASH_ID(sha, ID) ⇒</h3>
-<p>Hash the identity</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN192{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>W1</td><td>Input member of G2</td></tr><tr><td>W2</td><td>Input member of G2</td></tr><tr><td>W</td><td>Output member of G2. W=W1+W2</td></tr></tbody></table><a name="MPIN192.HASH_ID"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin192hash_idsha-id-">MPIN192.HASH_ID(sha, ID) ⇒<a class="hash-link" href="#mpin192hash_idsha-id-" title="Direct link to heading">​</a></h3><p>Hash the identity</p><p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a><br>
 <strong>Returns</strong>: hash value<br>
-<strong>this</strong>: <code>{MPIN192}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>sha</td><td>is the hash type</td></tr>
-<tr><td>ID</td><td>Identity as byte array</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN192.RANDOM_GENERATE"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin192random_generaterng-s-"></a><a href="#mpin192random_generaterng-s-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN192.RANDOM_GENERATE(rng, S) ⇒</h3>
-<p>Create random secret</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN192{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>sha</td><td>is the hash type</td></tr><tr><td>ID</td><td>Identity as byte array</td></tr></tbody></table><a name="MPIN192.RANDOM_GENERATE"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin192random_generaterng-s-">MPIN192.RANDOM_GENERATE(rng, S) ⇒<a class="hash-link" href="#mpin192random_generaterng-s-" title="Direct link to heading">​</a></h3><p>Create random secret</p><p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a><br>
 <strong>Returns</strong>: O for success or else error code<br>
-<strong>this</strong>: <code>{MPIN192}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>rng</td><td>cryptographically secure random number generator</td></tr>
-<tr><td>S</td><td>Random secret value</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN192.EXTRACT_PIN"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin192extract_pin-"></a><a href="#mpin192extract_pin-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN192.EXTRACT_PIN() ⇒</h3>
-<p>Extract a PIN number from a client secret</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN192{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>rng</td><td>cryptographically secure random number generator</td></tr><tr><td>S</td><td>Random secret value</td></tr></tbody></table><a name="MPIN192.EXTRACT_PIN"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin192extract_pin-">MPIN192.EXTRACT_PIN() ⇒<a class="hash-link" href="#mpin192extract_pin-" title="Direct link to heading">​</a></h3><p>Extract a PIN number from a client secret</p><p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a><br>
 <strong>Returns</strong>: token<br>
-<strong>this</strong>: <code>{MPIN192}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN192{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: sha hash type<br>
 <strong>Parameter</strong>: CID Client identity<br>
 <strong>Parameter</strong>: pin PIN value<br>
-<strong>Parameter</strong>: TOKEN Client secret<br>
-<a name="MPIN192.EXTRACT_FACTOR"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin192extract_factor-"></a><a href="#mpin192extract_factor-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN192.EXTRACT_FACTOR() ⇒</h3>
-<p>Extract factor from TOKEN for identity CID</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a>  <br>
+<strong>Parameter</strong>: TOKEN Client secret  </p><a name="MPIN192.EXTRACT_FACTOR"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin192extract_factor-">MPIN192.EXTRACT_FACTOR() ⇒<a class="hash-link" href="#mpin192extract_factor-" title="Direct link to heading">​</a></h3><p>Extract factor from TOKEN for identity CID</p><p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a><br>
 <strong>Returns</strong>: token<br>
-<strong>this</strong>: <code>{MPIN192}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN192{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: sha hash type<br>
 <strong>Parameter</strong>: CID Client identity<br>
 <strong>Parameter</strong>: factor Value to extract<br>
 <strong>Parameter</strong>: facbits Number of bits in factor<br>
-<strong>Parameter</strong>: TOKEN Token value<br>
-<a name="MPIN192.RESTORE_FACTOR"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin192restore_factor-"></a><a href="#mpin192restore_factor-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN192.RESTORE_FACTOR() ⇒</h3>
-<p>Restore factor to TOKEN for identity CID</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a>  <br>
+<strong>Parameter</strong>: TOKEN Token value  </p><a name="MPIN192.RESTORE_FACTOR"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin192restore_factor-">MPIN192.RESTORE_FACTOR() ⇒<a class="hash-link" href="#mpin192restore_factor-" title="Direct link to heading">​</a></h3><p>Restore factor to TOKEN for identity CID</p><p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a><br>
 <strong>Returns</strong>: token<br>
-<strong>this</strong>: <code>{MPIN192}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN192{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: sha hash type<br>
 <strong>Parameter</strong>: CID Client identity<br>
 <strong>Parameter</strong>: factor Value to extract<br>
 <strong>Parameter</strong>: facbits Number of bits in factor<br>
-<strong>Parameter</strong>: TOKEN Token value<br>
-<a name="MPIN192.GET_SERVER_SECRET"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin192get_server_secrets-sst-"></a><a href="#mpin192get_server_secrets-sst-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN192.GET_SERVER_SECRET(S, SST) ⇒</h3>
-<p>Create a server secret in G2 from a master secret</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a>  <br>
+<strong>Parameter</strong>: TOKEN Token value  </p><a name="MPIN192.GET_SERVER_SECRET"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin192get_server_secrets-sst-">MPIN192.GET_SERVER_SECRET(S, SST) ⇒<a class="hash-link" href="#mpin192get_server_secrets-sst-" title="Direct link to heading">​</a></h3><p>Create a server secret in G2 from a master secret</p><p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a><br>
 <strong>Returns</strong>: O for success or else error code<br>
-<strong>this</strong>: <code>{MPIN192}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>S</td><td>Master secret</td></tr>
-<tr><td>SST</td><td>Server secret = s.Q where Q is a fixed generator of G2</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN192.GET_G1_MULTIPLE"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin192get_g1_multipletype-x-g-w-"></a><a href="#mpin192get_g1_multipletype-x-g-w-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN192.GET_G1_MULTIPLE(type, x, G, W) ⇒</h3>
-<p>Find a random multiple of a point in G1</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN192{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>S</td><td>Master secret</td></tr><tr><td>SST</td><td>Server secret = s.Q where Q is a fixed generator of G2</td></tr></tbody></table><a name="MPIN192.GET_G1_MULTIPLE"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin192get_g1_multipletype-x-g-w-">MPIN192.GET_G1_MULTIPLE(type, x, G, W) ⇒<a class="hash-link" href="#mpin192get_g1_multipletype-x-g-w-" title="Direct link to heading">​</a></h3><p>Find a random multiple of a point in G1</p><p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a><br>
 <strong>Returns</strong>: O for success or else error code<br>
-<strong>this</strong>: <code>{MPIN192}</code>  <br>
-<strong>Parameter</strong>: rng cryptographically secure random number generator</p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>type</td><td>determines type of action to be taken</td></tr>
-<tr><td>x</td><td>an output internally randomly generated if R!=NULL, otherwise must be provided as an input</td></tr>
-<tr><td>G</td><td>if type=0 a point in G1, else an octet to be mapped to G1</td></tr>
-<tr><td>W</td><td>the output =x.G or x.M(G), where M(.) is a mapping</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN192.GET_CLIENT_SECRET"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin192get_client_secrets-cid-cst-"></a><a href="#mpin192get_client_secrets-cid-cst-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN192.GET_CLIENT_SECRET(S, CID, CST) ⇒</h3>
-<p>Create a client secret in G1 from a master secret and the client ID</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN192{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: rng cryptographically secure random number generator  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>type</td><td>determines type of action to be taken</td></tr><tr><td>x</td><td>an output internally randomly generated if R!=NULL, otherwise must be provided as an input</td></tr><tr><td>G</td><td>if type=0 a point in G1, else an octet to be mapped to G1</td></tr><tr><td>W</td><td>the output =x.G or x.M(G), where M(.) is a mapping</td></tr></tbody></table><a name="MPIN192.GET_CLIENT_SECRET"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin192get_client_secrets-cid-cst-">MPIN192.GET_CLIENT_SECRET(S, CID, CST) ⇒<a class="hash-link" href="#mpin192get_client_secrets-cid-cst-" title="Direct link to heading">​</a></h3><p>Create a client secret in G1 from a master secret and the client ID</p><p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a><br>
 <strong>Returns</strong>: O for success or else error code<br>
-<strong>this</strong>: <code>{MPIN192}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>S</td><td>is an input master secret</td></tr>
-<tr><td>CID</td><td>is the input client identity</td></tr>
-<tr><td>CST</td><td>is the full client secret = s.H(ID)</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN192.GET_CLIENT_PERMIT"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin192get_client_permitsha-date-s-cid-ctt-"></a><a href="#mpin192get_client_permitsha-date-s-cid-ctt-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN192.GET_CLIENT_PERMIT(sha, date, S, CID, CTT) ⇒</h3>
-<p>Create a Time Permit in G1 from a master secret and the client ID</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN192{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>S</td><td>is an input master secret</td></tr><tr><td>CID</td><td>is the input client identity</td></tr><tr><td>CST</td><td>is the full client secret = s.H(ID)</td></tr></tbody></table><a name="MPIN192.GET_CLIENT_PERMIT"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin192get_client_permitsha-date-s-cid-ctt-">MPIN192.GET_CLIENT_PERMIT(sha, date, S, CID, CTT) ⇒<a class="hash-link" href="#mpin192get_client_permitsha-date-s-cid-ctt-" title="Direct link to heading">​</a></h3><p>Create a Time Permit in G1 from a master secret and the client ID</p><p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a><br>
 <strong>Returns</strong>: O for success or else error code<br>
-<strong>this</strong>: <code>{MPIN192}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>sha</td><td>is the hash type</td></tr>
-<tr><td>date</td><td>is input date, in days since the epoch.</td></tr>
-<tr><td>S</td><td>is an input master secret</td></tr>
-<tr><td>CID</td><td>is the input client identity</td></tr>
-<tr><td>CTT</td><td>is a Time Permit for the given date = s.H(d</td><td>H(ID))</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN192.CLIENT_1"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin192client_1sha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-"></a><a href="#mpin192client_1sha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN192.CLIENT_1(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT) ⇒</h3>
-<p>Perform first pass of the client side of the 3-pass version of the M-Pin protocol</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN192{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th><th></th></tr></thead><tbody><tr><td>sha</td><td>is the hash type</td><td></td></tr><tr><td>date</td><td>is input date, in days since the epoch.</td><td></td></tr><tr><td>S</td><td>is an input master secret</td><td></td></tr><tr><td>CID</td><td>is the input client identity</td><td></td></tr><tr><td>CTT</td><td>is a Time Permit for the given date = s.H(d</td><td>H(ID))</td></tr></tbody></table><a name="MPIN192.CLIENT_1"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin192client_1sha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-">MPIN192.CLIENT_1(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT) ⇒<a class="hash-link" href="#mpin192client_1sha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-" title="Direct link to heading">​</a></h3><p>Perform first pass of the client side of the 3-pass version of the M-Pin protocol</p><p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a><br>
 <strong>Returns</strong>: O for success or else error code<br>
-<strong>this</strong>: <code>{MPIN192}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>sha</td><td>is the hash type</td></tr>
-<tr><td>date</td><td>is input date, in days since the epoch. Set to 0 if Time permits disabled</td></tr>
-<tr><td>CLIENT_ID</td><td>is the input client identity</td></tr>
-<tr><td>rng</td><td>is a pointer to a cryptographically secure random number generator</td></tr>
-<tr><td>X</td><td>an output internally randomly generated if R!=NULL, otherwise must be provided as an input</td></tr>
-<tr><td>pin</td><td>is the input PIN number</td></tr>
-<tr><td>TOKEN</td><td>is the input M-Pin token (the client secret with PIN portion removed)</td></tr>
-<tr><td>SEC</td><td>is output = CS+TP, where CS=is the reconstructed client secret, and TP is the time permit</td></tr>
-<tr><td>xID</td><td>is output = x.H(ID)</td></tr>
-<tr><td>xCID</td><td>is output = x.(H(ID)+H(d</td><td>H(ID)))</td></tr>
-<tr><td>PERMIT</td><td>is the input time permit</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN192.CLIENT_2"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin192client_2x-y-sec-"></a><a href="#mpin192client_2x-y-sec-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN192.CLIENT_2(X, Y, SEC) ⇒</h3>
-<p>Perform second pass of the client side of the 3-pass version of the M-Pin protocol</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN192{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th><th></th></tr></thead><tbody><tr><td>sha</td><td>is the hash type</td><td></td></tr><tr><td>date</td><td>is input date, in days since the epoch. Set to 0 if Time permits disabled</td><td></td></tr><tr><td>CLIENT_ID</td><td>is the input client identity</td><td></td></tr><tr><td>rng</td><td>is a pointer to a cryptographically secure random number generator</td><td></td></tr><tr><td>X</td><td>an output internally randomly generated if R!=NULL, otherwise must be provided as an input</td><td></td></tr><tr><td>pin</td><td>is the input PIN number</td><td></td></tr><tr><td>TOKEN</td><td>is the input M-Pin token (the client secret with PIN portion removed)</td><td></td></tr><tr><td>SEC</td><td>is output = CS+TP, where CS=is the reconstructed client secret, and TP is the time permit</td><td></td></tr><tr><td>xID</td><td>is output = x.H(ID)</td><td></td></tr><tr><td>xCID</td><td>is output = x.(H(ID)+H(d</td><td>H(ID)))</td></tr><tr><td>PERMIT</td><td>is the input time permit</td><td></td></tr></tbody></table><a name="MPIN192.CLIENT_2"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin192client_2x-y-sec-">MPIN192.CLIENT_2(X, Y, SEC) ⇒<a class="hash-link" href="#mpin192client_2x-y-sec-" title="Direct link to heading">​</a></h3><p>Perform second pass of the client side of the 3-pass version of the M-Pin protocol</p><p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a><br>
 <strong>Returns</strong>: O for success or else error code<br>
-<strong>this</strong>: <code>{MPIN192}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>X</td><td>an input, a locally generated random number</td></tr>
-<tr><td>Y</td><td>an input random challenge from the server</td></tr>
-<tr><td>SEC</td><td>on output = -(x+y).V</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN192.SERVER_1"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin192server_1sha-date-cid-hid-htid-"></a><a href="#mpin192server_1sha-date-cid-hid-htid-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN192.SERVER_1(sha, date, CID, HID, HTID) ⇒</h3>
-<p>Perform first pass of the server side of the 3-pass version of the M-Pin protocol</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN192{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>X</td><td>an input, a locally generated random number</td></tr><tr><td>Y</td><td>an input random challenge from the server</td></tr><tr><td>SEC</td><td>on output = -(x+y).V</td></tr></tbody></table><a name="MPIN192.SERVER_1"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin192server_1sha-date-cid-hid-htid-">MPIN192.SERVER_1(sha, date, CID, HID, HTID) ⇒<a class="hash-link" href="#mpin192server_1sha-date-cid-hid-htid-" title="Direct link to heading">​</a></h3><p>Perform first pass of the server side of the 3-pass version of the M-Pin protocol</p><p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a><br>
 <strong>Returns</strong>: O for success or else error code<br>
-<strong>this</strong>: <code>{MPIN192}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>sha</td><td>is the hash type</td></tr>
-<tr><td>date</td><td>is input date, in days since the epoch. Set to 0 if Time permits disabled</td></tr>
-<tr><td>CID</td><td>is the input claimed client identity</td></tr>
-<tr><td>HID</td><td>is output H(ID), a hash of the client ID</td></tr>
-<tr><td>HTID</td><td>is output H(ID)+H(d</td><td>H(ID))</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN192.SERVER_2"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin192server_2date-hid-htid-y-sst-xid-xcid-msec-e-f-pa-"></a><a href="#mpin192server_2date-hid-htid-y-sst-xid-xcid-msec-e-f-pa-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN192.SERVER_2(date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, Pa) ⇒</h3>
-<p>Perform third pass on the server side of the 3-pass version of the M-Pin protocol</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN192{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th><th></th></tr></thead><tbody><tr><td>sha</td><td>is the hash type</td><td></td></tr><tr><td>date</td><td>is input date, in days since the epoch. Set to 0 if Time permits disabled</td><td></td></tr><tr><td>CID</td><td>is the input claimed client identity</td><td></td></tr><tr><td>HID</td><td>is output H(ID), a hash of the client ID</td><td></td></tr><tr><td>HTID</td><td>is output H(ID)+H(d</td><td>H(ID))</td></tr></tbody></table><a name="MPIN192.SERVER_2"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin192server_2date-hid-htid-y-sst-xid-xcid-msec-e-f-pa-">MPIN192.SERVER_2(date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, Pa) ⇒<a class="hash-link" href="#mpin192server_2date-hid-htid-y-sst-xid-xcid-msec-e-f-pa-" title="Direct link to heading">​</a></h3><p>Perform third pass on the server side of the 3-pass version of the M-Pin protocol</p><p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a><br>
 <strong>Returns</strong>: O for success or else error code<br>
-<strong>this</strong>: <code>{MPIN192}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>date</td><td>is input date, in days since the epoch. Set to 0 if Time permits disabled</td></tr>
-<tr><td>HID</td><td>is input H(ID), a hash of the client ID</td></tr>
-<tr><td>HTID</td><td>is input H(ID)+H(d</td><td>H(ID))</td></tr>
-<tr><td>Y</td><td>is the input server's randomly generated challenge</td></tr>
-<tr><td>SST</td><td>is the input server secret</td></tr>
-<tr><td>xID</td><td>is input from the client = x.H(ID)</td></tr>
-<tr><td>xCID</td><td>is input from the client= x.(H(ID)+H(d</td><td>H(ID)))</td></tr>
-<tr><td>mSEC</td><td>is an input from the client</td></tr>
-<tr><td>E</td><td>is an output to help the Kangaroos to find the PIN error, or NULL if not required</td></tr>
-<tr><td>F</td><td>is an output to help the Kangaroos to find the PIN error, or NULL if not required</td></tr>
-<tr><td>Pa</td><td>is the input public key from the client, z.Q or NULL if the client uses regular mpin</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN192.KANGAROO"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin192kangarooe-f-"></a><a href="#mpin192kangarooe-f-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN192.KANGAROO(E, F) ⇒</h3>
-<p>Use Kangaroos to find PIN error</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN192{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th><th></th></tr></thead><tbody><tr><td>date</td><td>is input date, in days since the epoch. Set to 0 if Time permits disabled</td><td></td></tr><tr><td>HID</td><td>is input H(ID), a hash of the client ID</td><td></td></tr><tr><td>HTID</td><td>is input H(ID)+H(d</td><td>H(ID))</td></tr><tr><td>Y</td><td>is the input server&#x27;s randomly generated challenge</td><td></td></tr><tr><td>SST</td><td>is the input server secret</td><td></td></tr><tr><td>xID</td><td>is input from the client = x.H(ID)</td><td></td></tr><tr><td>xCID</td><td>is input from the client= x.(H(ID)+H(d</td><td>H(ID)))</td></tr><tr><td>mSEC</td><td>is an input from the client</td><td></td></tr><tr><td>E</td><td>is an output to help the Kangaroos to find the PIN error, or NULL if not required</td><td></td></tr><tr><td>F</td><td>is an output to help the Kangaroos to find the PIN error, or NULL if not required</td><td></td></tr><tr><td>Pa</td><td>is the input public key from the client, z.Q or NULL if the client uses regular mpin</td><td></td></tr></tbody></table><a name="MPIN192.KANGAROO"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin192kangarooe-f-">MPIN192.KANGAROO(E, F) ⇒<a class="hash-link" href="#mpin192kangarooe-f-" title="Direct link to heading">​</a></h3><p>Use Kangaroos to find PIN error</p><p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a><br>
 <strong>Returns</strong>: 0 if Kangaroos failed, or the PIN error e<br>
-<strong>this</strong>: <code>{MPIN192}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>E</td><td>a member of the group GT</td></tr>
-<tr><td>F</td><td>a member of the group GT =  E^e</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN192.GET_TIME"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin192get_time-"></a><a href="#mpin192get_time-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN192.GET_TIME() ⇒</h3>
-<p>Time since epoch</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN192{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>E</td><td>a member of the group GT</td></tr><tr><td>F</td><td>a member of the group GT =  E^e</td></tr></tbody></table><a name="MPIN192.GET_TIME"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin192get_time-">MPIN192.GET_TIME() ⇒<a class="hash-link" href="#mpin192get_time-" title="Direct link to heading">​</a></h3><p>Time since epoch</p><p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a><br>
 <strong>Returns</strong>: time since epoch<br>
-<strong>this</strong>: <code>{MPIN192}</code>  <br>
-<a name="MPIN192.GET_Y"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin192get_ysha-timevalue-xcid-y-"></a><a href="#mpin192get_ysha-timevalue-xcid-y-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN192.GET_Y(sha, TimeValue, xCID, Y) ⇒</h3>
-<p>Generate Y=H(s,O), where s is epoch time, O is a byte array, and H(.) is a hash function</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN192{&quot;}&quot;}</code>  </p><a name="MPIN192.GET_Y"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin192get_ysha-timevalue-xcid-y-">MPIN192.GET_Y(sha, TimeValue, xCID, Y) ⇒<a class="hash-link" href="#mpin192get_ysha-timevalue-xcid-y-" title="Direct link to heading">​</a></h3><p>Generate Y=H(s,O), where s is epoch time, O is a byte array, and H(.) is a hash function</p><p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a><br>
 <strong>Returns</strong>: O for success or else error code<br>
-<strong>this</strong>: <code>{MPIN192}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>sha</td><td>is the hash type</td></tr>
-<tr><td>TimeValue</td><td>is epoch time in seconds</td></tr>
-<tr><td>xCID</td><td>input bytearray is an input octet</td></tr>
-<tr><td>Y</td><td>output value</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN192.CLIENT"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin192clientsha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-timevalue-y-message-"></a><a href="#mpin192clientsha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-timevalue-y-message-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN192.CLIENT(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT, TimeValue, Y, Message) ⇒</h3>
-<p>Perform client side of the one-pass version of the M-Pin protocol</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN192{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>sha</td><td>is the hash type</td></tr><tr><td>TimeValue</td><td>is epoch time in seconds</td></tr><tr><td>xCID</td><td>input bytearray is an input octet</td></tr><tr><td>Y</td><td>output value</td></tr></tbody></table><a name="MPIN192.CLIENT"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin192clientsha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-timevalue-y-message-">MPIN192.CLIENT(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT, TimeValue, Y, Message) ⇒<a class="hash-link" href="#mpin192clientsha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-timevalue-y-message-" title="Direct link to heading">​</a></h3><p>Perform client side of the one-pass version of the M-Pin protocol</p><p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a><br>
 <strong>Returns</strong>: O for success or else error code<br>
-<strong>this</strong>: <code>{MPIN192}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>sha</td><td>is the hash type</td></tr>
-<tr><td>date</td><td>is input date, in days since the epoch. Set to 0 if Time permits disabled</td></tr>
-<tr><td>CLIENT_ID</td><td>is the input client identity</td></tr>
-<tr><td>rng</td><td>is a pointer to a cryptographically secure random number generator</td></tr>
-<tr><td>X</td><td>an output internally randomly generated if R!=NULL, otherwise must be provided as an input</td></tr>
-<tr><td>pin</td><td>is the input PIN number</td></tr>
-<tr><td>TOKEN</td><td>is the input M-Pin token (the client secret with PIN portion removed)</td></tr>
-<tr><td>SEC</td><td>is output = -(x+y)(CS+TP), where CS is the reconstructed client secret, and TP is the time permit</td></tr>
-<tr><td>xID</td><td>is output = x.H(ID)</td></tr>
-<tr><td>xCID</td><td>is output = x.(H(ID)+H(d</td><td>H(ID)))</td></tr>
-<tr><td>PERMIT</td><td>is the input time permit</td></tr>
-<tr><td>TimeValue</td><td>is input epoch time in seconds - a timestamp</td></tr>
-<tr><td>Y</td><td>is output H(t</td><td>U) or H(t</td><td>UT) if Time Permits enabled</td></tr>
-<tr><td>Message</td><td>is the message to be signed</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN192.SERVER"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin192serversha-date-hid-htid-y-sst-xid-xcid-msec-e-f-cid-timevalue-message-pa-"></a><a href="#mpin192serversha-date-hid-htid-y-sst-xid-xcid-msec-e-f-cid-timevalue-message-pa-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN192.SERVER(sha, date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, CID, TimeValue, MESSAGE, Pa) ⇒</h3>
-<p>Perform server side of the one-pass version of the M-Pin protocol</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN192{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th><th></th><th></th></tr></thead><tbody><tr><td>sha</td><td>is the hash type</td><td></td><td></td></tr><tr><td>date</td><td>is input date, in days since the epoch. Set to 0 if Time permits disabled</td><td></td><td></td></tr><tr><td>CLIENT_ID</td><td>is the input client identity</td><td></td><td></td></tr><tr><td>rng</td><td>is a pointer to a cryptographically secure random number generator</td><td></td><td></td></tr><tr><td>X</td><td>an output internally randomly generated if R!=NULL, otherwise must be provided as an input</td><td></td><td></td></tr><tr><td>pin</td><td>is the input PIN number</td><td></td><td></td></tr><tr><td>TOKEN</td><td>is the input M-Pin token (the client secret with PIN portion removed)</td><td></td><td></td></tr><tr><td>SEC</td><td>is output = -(x+y)(CS+TP), where CS is the reconstructed client secret, and TP is the time permit</td><td></td><td></td></tr><tr><td>xID</td><td>is output = x.H(ID)</td><td></td><td></td></tr><tr><td>xCID</td><td>is output = x.(H(ID)+H(d</td><td>H(ID)))</td><td></td></tr><tr><td>PERMIT</td><td>is the input time permit</td><td></td><td></td></tr><tr><td>TimeValue</td><td>is input epoch time in seconds - a timestamp</td><td></td><td></td></tr><tr><td>Y</td><td>is output H(t</td><td>U) or H(t</td><td>UT) if Time Permits enabled</td></tr><tr><td>Message</td><td>is the message to be signed</td><td></td><td></td></tr></tbody></table><a name="MPIN192.SERVER"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin192serversha-date-hid-htid-y-sst-xid-xcid-msec-e-f-cid-timevalue-message-pa-">MPIN192.SERVER(sha, date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, CID, TimeValue, MESSAGE, Pa) ⇒<a class="hash-link" href="#mpin192serversha-date-hid-htid-y-sst-xid-xcid-msec-e-f-cid-timevalue-message-pa-" title="Direct link to heading">​</a></h3><p>Perform server side of the one-pass version of the M-Pin protocol</p><p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a><br>
 <strong>Returns</strong>: O for success or else error code<br>
-<strong>this</strong>: <code>{MPIN192}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>sha</td><td>is the hash type</td></tr>
-<tr><td>date</td><td>is input date, in days since the epoch. Set to 0 if Time permits disabled</td></tr>
-<tr><td>HID</td><td>is output H(ID), a hash of the client ID</td></tr>
-<tr><td>HTID</td><td>is output H(ID)+H(d</td><td>H(ID))</td></tr>
-<tr><td>Y</td><td>is output H(t</td><td>U) or H(t</td><td>UT) if Time Permits enabled</td></tr>
-<tr><td>SST</td><td>is the input server secret</td></tr>
-<tr><td>xID</td><td>is input from the client = x.H(ID)</td></tr>
-<tr><td>xCID</td><td>is input from the client= x.(H(ID)+H(d</td><td>H(ID)))</td></tr>
-<tr><td>mSEC</td><td>is an input from the client</td></tr>
-<tr><td>E</td><td>is an output to help the Kangaroos to find the PIN error, or NULL if not required</td></tr>
-<tr><td>F</td><td>is an output to help the Kangaroos to find the PIN error, or NULL if not required</td></tr>
-<tr><td>CID</td><td>is the input claimed client identity</td></tr>
-<tr><td>TimeValue</td><td>is input epoch time in seconds - a timestamp</td></tr>
-<tr><td>MESSAGE</td><td>is the message to be signed</td></tr>
-<tr><td>Pa</td><td>is input from the client z.Q or NULL if the key-escrow less scheme is not used</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN192.PRECOMPUTE"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin192precomputetoken-cid-g1-g2-"></a><a href="#mpin192precomputetoken-cid-g1-g2-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN192.PRECOMPUTE(TOKEN, CID, G1, G2) ⇒</h3>
-<p>Precompute values for use by the client side of M-Pin Full</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN192{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th><th></th><th></th></tr></thead><tbody><tr><td>sha</td><td>is the hash type</td><td></td><td></td></tr><tr><td>date</td><td>is input date, in days since the epoch. Set to 0 if Time permits disabled</td><td></td><td></td></tr><tr><td>HID</td><td>is output H(ID), a hash of the client ID</td><td></td><td></td></tr><tr><td>HTID</td><td>is output H(ID)+H(d</td><td>H(ID))</td><td></td></tr><tr><td>Y</td><td>is output H(t</td><td>U) or H(t</td><td>UT) if Time Permits enabled</td></tr><tr><td>SST</td><td>is the input server secret</td><td></td><td></td></tr><tr><td>xID</td><td>is input from the client = x.H(ID)</td><td></td><td></td></tr><tr><td>xCID</td><td>is input from the client= x.(H(ID)+H(d</td><td>H(ID)))</td><td></td></tr><tr><td>mSEC</td><td>is an input from the client</td><td></td><td></td></tr><tr><td>E</td><td>is an output to help the Kangaroos to find the PIN error, or NULL if not required</td><td></td><td></td></tr><tr><td>F</td><td>is an output to help the Kangaroos to find the PIN error, or NULL if not required</td><td></td><td></td></tr><tr><td>CID</td><td>is the input claimed client identity</td><td></td><td></td></tr><tr><td>TimeValue</td><td>is input epoch time in seconds - a timestamp</td><td></td><td></td></tr><tr><td>MESSAGE</td><td>is the message to be signed</td><td></td><td></td></tr><tr><td>Pa</td><td>is input from the client z.Q or NULL if the key-escrow less scheme is not used</td><td></td><td></td></tr></tbody></table><a name="MPIN192.PRECOMPUTE"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin192precomputetoken-cid-g1-g2-">MPIN192.PRECOMPUTE(TOKEN, CID, G1, G2) ⇒<a class="hash-link" href="#mpin192precomputetoken-cid-g1-g2-" title="Direct link to heading">​</a></h3><p>Precompute values for use by the client side of M-Pin Full</p><p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a><br>
 <strong>Returns</strong>: O for success or else error code<br>
-<strong>this</strong>: <code>{MPIN192}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>TOKEN</td><td>is the input M-Pin token (the client secret with PIN portion removed)</td></tr>
-<tr><td>CID</td><td>is the input client identity</td></tr>
-<tr><td>G1</td><td>precomputed output</td></tr>
-<tr><td>G2</td><td>precomputed output</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN192.HASH_ALL"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin192hash_allsha-hid-xid-xcid-sec-y-r-w-"></a><a href="#mpin192hash_allsha-hid-xid-xcid-sec-y-r-w-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN192.HASH_ALL(sha, HID, xID, xCID, SEC, Y, R, W) ⇒</h3>
-<p>Hash the session transcript</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN192{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>TOKEN</td><td>is the input M-Pin token (the client secret with PIN portion removed)</td></tr><tr><td>CID</td><td>is the input client identity</td></tr><tr><td>G1</td><td>precomputed output</td></tr><tr><td>G2</td><td>precomputed output</td></tr></tbody></table><a name="MPIN192.HASH_ALL"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin192hash_allsha-hid-xid-xcid-sec-y-r-w-">MPIN192.HASH_ALL(sha, HID, xID, xCID, SEC, Y, R, W) ⇒<a class="hash-link" href="#mpin192hash_allsha-hid-xid-xcid-sec-y-r-w-" title="Direct link to heading">​</a></h3><p>Hash the session transcript</p><p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a><br>
 <strong>Returns</strong>: H the output is the hash of all of the above that apply<br>
-<strong>this</strong>: <code>{MPIN192}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>sha</td><td>is the hash type</td></tr>
-<tr><td>HID</td><td>is the hashed input client ID = H(ID)</td></tr>
-<tr><td>xID</td><td>is the client output = x.H(ID)</td></tr>
-<tr><td>xCID</td><td>is the client output = x.(H(ID)+H(T</td><td>H(ID)))</td></tr>
-<tr><td>SEC</td><td>is the client part response</td></tr>
-<tr><td>Y</td><td>is the server challenge</td></tr>
-<tr><td>R</td><td>is the client part response</td></tr>
-<tr><td>W</td><td>is the server part response</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN192.CLIENT_KEY"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin192client_keysha-g1-g2-pin-r-x-h-wcid-ck-"></a><a href="#mpin192client_keysha-g1-g2-pin-r-x-h-wcid-ck-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN192.CLIENT_KEY(sha, G1, G2, pin, R, X, H, wCID, CK) ⇒</h3>
-<p>Calculate Key on Client side for M-Pin Full</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN192{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th><th></th></tr></thead><tbody><tr><td>sha</td><td>is the hash type</td><td></td></tr><tr><td>HID</td><td>is the hashed input client ID = H(ID)</td><td></td></tr><tr><td>xID</td><td>is the client output = x.H(ID)</td><td></td></tr><tr><td>xCID</td><td>is the client output = x.(H(ID)+H(T</td><td>H(ID)))</td></tr><tr><td>SEC</td><td>is the client part response</td><td></td></tr><tr><td>Y</td><td>is the server challenge</td><td></td></tr><tr><td>R</td><td>is the client part response</td><td></td></tr><tr><td>W</td><td>is the server part response</td><td></td></tr></tbody></table><a name="MPIN192.CLIENT_KEY"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin192client_keysha-g1-g2-pin-r-x-h-wcid-ck-">MPIN192.CLIENT_KEY(sha, G1, G2, pin, R, X, H, wCID, CK) ⇒<a class="hash-link" href="#mpin192client_keysha-g1-g2-pin-r-x-h-wcid-ck-" title="Direct link to heading">​</a></h3><p>Calculate Key on Client side for M-Pin Full</p><p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a><br>
 <strong>Returns</strong>: 0 or an error code<br>
-<strong>this</strong>: <code>{MPIN192}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>sha</td><td>is the hash type</td></tr>
-<tr><td>G1</td><td>precomputed input</td></tr>
-<tr><td>G2</td><td>precomputed input</td></tr>
-<tr><td>pin</td><td>is the input PIN number</td></tr>
-<tr><td>R</td><td>is an input, a locally generated random number</td></tr>
-<tr><td>X</td><td>is an input, a locally generated random number</td></tr>
-<tr><td>H</td><td>is an input, hash of the protocol transcript</td></tr>
-<tr><td>wCID</td><td>is the input Server-side Diffie-Hellman component</td></tr>
-<tr><td>CK</td><td>is the output calculated shared key</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN192.SERVER_KEY"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin192server_keyh-z-sst-w-h-hid-xid-xcid-sk-"></a><a href="#mpin192server_keyh-z-sst-w-h-hid-xid-xcid-sk-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN192.SERVER_KEY(h, Z, SST, W, H, HID, xID, xCID, SK) ⇒</h3>
-<p>Calculate Key on Server side for M-Pin Full</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN192{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>sha</td><td>is the hash type</td></tr><tr><td>G1</td><td>precomputed input</td></tr><tr><td>G2</td><td>precomputed input</td></tr><tr><td>pin</td><td>is the input PIN number</td></tr><tr><td>R</td><td>is an input, a locally generated random number</td></tr><tr><td>X</td><td>is an input, a locally generated random number</td></tr><tr><td>H</td><td>is an input, hash of the protocol transcript</td></tr><tr><td>wCID</td><td>is the input Server-side Diffie-Hellman component</td></tr><tr><td>CK</td><td>is the output calculated shared key</td></tr></tbody></table><a name="MPIN192.SERVER_KEY"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin192server_keyh-z-sst-w-h-hid-xid-xcid-sk-">MPIN192.SERVER_KEY(h, Z, SST, W, H, HID, xID, xCID, SK) ⇒<a class="hash-link" href="#mpin192server_keyh-z-sst-w-h-hid-xid-xcid-sk-" title="Direct link to heading">​</a></h3><p>Calculate Key on Server side for M-Pin Full</p><p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a><br>
 <strong>Returns</strong>: 0 or an error code<br>
-<strong>this</strong>: <code>{MPIN192}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>h</td><td>is the hash type</td></tr>
-<tr><td>Z</td><td>is the input Client-side Diffie-Hellman component</td></tr>
-<tr><td>SST</td><td>is the input server secret</td></tr>
-<tr><td>W</td><td>is an input random number generated by the server</td></tr>
-<tr><td>H</td><td>is an input, hash of the protocol transcript</td></tr>
-<tr><td>HID</td><td>is the hashed input client ID = H(ID)</td></tr>
-<tr><td>xID</td><td>is input from the client = x.H(ID)</td></tr>
-<tr><td>xCID</td><td>is input from the client= x.(H(ID)+H(d</td><td>H(ID)))</td></tr>
-<tr><td>SK</td><td>is the output calculated shared key</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN192.GET_DVS_KEYPAIR"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin192get_dvs_keypairrng-z-pa-"></a><a href="#mpin192get_dvs_keypairrng-z-pa-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN192.GET_DVS_KEYPAIR(rng, Z, Pa) ⇒</h3>
-<p>Generates a random public key for the client z.Q</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN192{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th><th></th></tr></thead><tbody><tr><td>h</td><td>is the hash type</td><td></td></tr><tr><td>Z</td><td>is the input Client-side Diffie-Hellman component</td><td></td></tr><tr><td>SST</td><td>is the input server secret</td><td></td></tr><tr><td>W</td><td>is an input random number generated by the server</td><td></td></tr><tr><td>H</td><td>is an input, hash of the protocol transcript</td><td></td></tr><tr><td>HID</td><td>is the hashed input client ID = H(ID)</td><td></td></tr><tr><td>xID</td><td>is input from the client = x.H(ID)</td><td></td></tr><tr><td>xCID</td><td>is input from the client= x.(H(ID)+H(d</td><td>H(ID)))</td></tr><tr><td>SK</td><td>is the output calculated shared key</td><td></td></tr></tbody></table><a name="MPIN192.GET_DVS_KEYPAIR"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin192get_dvs_keypairrng-z-pa-">MPIN192.GET_DVS_KEYPAIR(rng, Z, Pa) ⇒<a class="hash-link" href="#mpin192get_dvs_keypairrng-z-pa-" title="Direct link to heading">​</a></h3><p>Generates a random public key for the client z.Q</p><p><strong>Kind</strong>: static method of <a href="#MPIN192"><code>MPIN192</code></a><br>
 <strong>Returns</strong>: 0 or an error code<br>
-<strong>this</strong>: <code>{MPIN192}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>rng</td><td>cryptographically secure random number generator</td></tr>
-<tr><td>Z</td><td>an output internally randomly generated if R!=NULL, otherwise it must be provided as an input</td></tr>
-<tr><td>Pa</td><td>the output public key for the client</td></tr>
-</tbody>
-</table>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/cryptojs/mpin"><span class="arrow-prev">← </span><span>MPIN</span></a><a class="docs-next button" href="/docs/cryptojs/mpin256"><span>MPIN256</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#mpin192">MPIN192</a><ul class="toc-headings"><li><a href="#new-mpin192">new MPIN192()</a></li><li><a href="#mpin192today-">MPIN192.today() ⇒</a></li><li><a href="#mpin192bytestostringb-">MPIN192.bytestostring(b) ⇒</a></li><li><a href="#mpin192stringtobytess-">MPIN192.stringtobytes(s) ⇒</a></li><li><a href="#mpin192comparebytesa-b-">MPIN192.comparebytes(a, b) ⇒</a></li><li><a href="#mpin192mpin_hashc-u-">MPIN192.mpin_hash(c, U) ⇒</a></li><li><a href="#mpin192hashitsha-n-b-">MPIN192.hashit(sha, n, B) ⇒</a></li><li><a href="#mpin192mapu-cb-">MPIN192.map(u, cb) ⇒</a></li><li><a href="#mpin192unmapu-p-">MPIN192.unmap(u, P) ⇒</a></li><li><a href="#mpin192recombine_g1r1-r2-r-">MPIN192.RECOMBINE_G1(R1, R2, R) ⇒</a></li><li><a href="#mpin192recombine_g2w1-w2-w-">MPIN192.RECOMBINE_G2(W1, W2, W) ⇒</a></li><li><a href="#mpin192hash_idsha-id-">MPIN192.HASH_ID(sha, ID) ⇒</a></li><li><a href="#mpin192random_generaterng-s-">MPIN192.RANDOM_GENERATE(rng, S) ⇒</a></li><li><a href="#mpin192extract_pin-">MPIN192.EXTRACT_PIN() ⇒</a></li><li><a href="#mpin192extract_factor-">MPIN192.EXTRACT_FACTOR() ⇒</a></li><li><a href="#mpin192restore_factor-">MPIN192.RESTORE_FACTOR() ⇒</a></li><li><a href="#mpin192get_server_secrets-sst-">MPIN192.GET_SERVER_SECRET(S, SST) ⇒</a></li><li><a href="#mpin192get_g1_multipletype-x-g-w-">MPIN192.GET_G1_MULTIPLE(type, x, G, W) ⇒</a></li><li><a href="#mpin192get_client_secrets-cid-cst-">MPIN192.GET_CLIENT_SECRET(S, CID, CST) ⇒</a></li><li><a href="#mpin192get_client_permitsha-date-s-cid-ctt-">MPIN192.GET_CLIENT_PERMIT(sha, date, S, CID, CTT) ⇒</a></li><li><a href="#mpin192client_1sha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-">MPIN192.CLIENT_1(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT) ⇒</a></li><li><a href="#mpin192client_2x-y-sec-">MPIN192.CLIENT_2(X, Y, SEC) ⇒</a></li><li><a href="#mpin192server_1sha-date-cid-hid-htid-">MPIN192.SERVER_1(sha, date, CID, HID, HTID) ⇒</a></li><li><a href="#mpin192server_2date-hid-htid-y-sst-xid-xcid-msec-e-f-pa-">MPIN192.SERVER_2(date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, Pa) ⇒</a></li><li><a href="#mpin192kangarooe-f-">MPIN192.KANGAROO(E, F) ⇒</a></li><li><a href="#mpin192get_time-">MPIN192.GET_TIME() ⇒</a></li><li><a href="#mpin192get_ysha-timevalue-xcid-y-">MPIN192.GET_Y(sha, TimeValue, xCID, Y) ⇒</a></li><li><a href="#mpin192clientsha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-timevalue-y-message-">MPIN192.CLIENT(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT, TimeValue, Y, Message) ⇒</a></li><li><a href="#mpin192serversha-date-hid-htid-y-sst-xid-xcid-msec-e-f-cid-timevalue-message-pa-">MPIN192.SERVER(sha, date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, CID, TimeValue, MESSAGE, Pa) ⇒</a></li><li><a href="#mpin192precomputetoken-cid-g1-g2-">MPIN192.PRECOMPUTE(TOKEN, CID, G1, G2) ⇒</a></li><li><a href="#mpin192hash_allsha-hid-xid-xcid-sec-y-r-w-">MPIN192.HASH_ALL(sha, HID, xID, xCID, SEC, Y, R, W) ⇒</a></li><li><a href="#mpin192client_keysha-g1-g2-pin-r-x-h-wcid-ck-">MPIN192.CLIENT_KEY(sha, G1, G2, pin, R, X, H, wCID, CK) ⇒</a></li><li><a href="#mpin192server_keyh-z-sst-w-h-hid-xid-xcid-sk-">MPIN192.SERVER_KEY(h, Z, SST, W, H, HID, xID, xCID, SK) ⇒</a></li><li><a href="#mpin192get_dvs_keypairrng-z-pa-">MPIN192.GET_DVS_KEYPAIR(rng, Z, Pa) ⇒</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN192{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>rng</td><td>cryptographically secure random number generator</td></tr><tr><td>Z</td><td>an output internally randomly generated if R!=NULL, otherwise it must be provided as an input</td></tr><tr><td>Pa</td><td>the output public key for the client</td></tr></tbody></table></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/cryptojs/mpin"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">MPIN</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/cryptojs/mpin256"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">MPIN256</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#mpin192" class="table-of-contents__link toc-highlight">MPIN192</a><ul><li><a href="#new-mpin192" class="table-of-contents__link toc-highlight">new MPIN192()</a></li><li><a href="#mpin192today-" class="table-of-contents__link toc-highlight">MPIN192.today() ⇒</a></li><li><a href="#mpin192bytestostringb-" class="table-of-contents__link toc-highlight">MPIN192.bytestostring(b) ⇒</a></li><li><a href="#mpin192stringtobytess-" class="table-of-contents__link toc-highlight">MPIN192.stringtobytes(s) ⇒</a></li><li><a href="#mpin192comparebytesa-b-" class="table-of-contents__link toc-highlight">MPIN192.comparebytes(a, b) ⇒</a></li><li><a href="#mpin192mpin_hashc-u-" class="table-of-contents__link toc-highlight">MPIN192.mpin_hash(c, U) ⇒</a></li><li><a href="#mpin192hashitsha-n-b-" class="table-of-contents__link toc-highlight">MPIN192.hashit(sha, n, B) ⇒</a></li><li><a href="#mpin192mapu-cb-" class="table-of-contents__link toc-highlight">MPIN192.map(u, cb) ⇒</a></li><li><a href="#mpin192unmapu-p-" class="table-of-contents__link toc-highlight">MPIN192.unmap(u, P) ⇒</a></li><li><a href="#mpin192recombine_g1r1-r2-r-" class="table-of-contents__link toc-highlight">MPIN192.RECOMBINE_G1(R1, R2, R) ⇒</a></li><li><a href="#mpin192recombine_g2w1-w2-w-" class="table-of-contents__link toc-highlight">MPIN192.RECOMBINE_G2(W1, W2, W) ⇒</a></li><li><a href="#mpin192hash_idsha-id-" class="table-of-contents__link toc-highlight">MPIN192.HASH_ID(sha, ID) ⇒</a></li><li><a href="#mpin192random_generaterng-s-" class="table-of-contents__link toc-highlight">MPIN192.RANDOM_GENERATE(rng, S) ⇒</a></li><li><a href="#mpin192extract_pin-" class="table-of-contents__link toc-highlight">MPIN192.EXTRACT_PIN() ⇒</a></li><li><a href="#mpin192extract_factor-" class="table-of-contents__link toc-highlight">MPIN192.EXTRACT_FACTOR() ⇒</a></li><li><a href="#mpin192restore_factor-" class="table-of-contents__link toc-highlight">MPIN192.RESTORE_FACTOR() ⇒</a></li><li><a href="#mpin192get_server_secrets-sst-" class="table-of-contents__link toc-highlight">MPIN192.GET_SERVER_SECRET(S, SST) ⇒</a></li><li><a href="#mpin192get_g1_multipletype-x-g-w-" class="table-of-contents__link toc-highlight">MPIN192.GET_G1_MULTIPLE(type, x, G, W) ⇒</a></li><li><a href="#mpin192get_client_secrets-cid-cst-" class="table-of-contents__link toc-highlight">MPIN192.GET_CLIENT_SECRET(S, CID, CST) ⇒</a></li><li><a href="#mpin192get_client_permitsha-date-s-cid-ctt-" class="table-of-contents__link toc-highlight">MPIN192.GET_CLIENT_PERMIT(sha, date, S, CID, CTT) ⇒</a></li><li><a href="#mpin192client_1sha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-" class="table-of-contents__link toc-highlight">MPIN192.CLIENT_1(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT) ⇒</a></li><li><a href="#mpin192client_2x-y-sec-" class="table-of-contents__link toc-highlight">MPIN192.CLIENT_2(X, Y, SEC) ⇒</a></li><li><a href="#mpin192server_1sha-date-cid-hid-htid-" class="table-of-contents__link toc-highlight">MPIN192.SERVER_1(sha, date, CID, HID, HTID) ⇒</a></li><li><a href="#mpin192server_2date-hid-htid-y-sst-xid-xcid-msec-e-f-pa-" class="table-of-contents__link toc-highlight">MPIN192.SERVER_2(date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, Pa) ⇒</a></li><li><a href="#mpin192kangarooe-f-" class="table-of-contents__link toc-highlight">MPIN192.KANGAROO(E, F) ⇒</a></li><li><a href="#mpin192get_time-" class="table-of-contents__link toc-highlight">MPIN192.GET_TIME() ⇒</a></li><li><a href="#mpin192get_ysha-timevalue-xcid-y-" class="table-of-contents__link toc-highlight">MPIN192.GET_Y(sha, TimeValue, xCID, Y) ⇒</a></li><li><a href="#mpin192clientsha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-timevalue-y-message-" class="table-of-contents__link toc-highlight">MPIN192.CLIENT(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT, TimeValue, Y, Message) ⇒</a></li><li><a href="#mpin192serversha-date-hid-htid-y-sst-xid-xcid-msec-e-f-cid-timevalue-message-pa-" class="table-of-contents__link toc-highlight">MPIN192.SERVER(sha, date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, CID, TimeValue, MESSAGE, Pa) ⇒</a></li><li><a href="#mpin192precomputetoken-cid-g1-g2-" class="table-of-contents__link toc-highlight">MPIN192.PRECOMPUTE(TOKEN, CID, G1, G2) ⇒</a></li><li><a href="#mpin192hash_allsha-hid-xid-xcid-sec-y-r-w-" class="table-of-contents__link toc-highlight">MPIN192.HASH_ALL(sha, HID, xID, xCID, SEC, Y, R, W) ⇒</a></li><li><a href="#mpin192client_keysha-g1-g2-pin-r-x-h-wcid-ck-" class="table-of-contents__link toc-highlight">MPIN192.CLIENT_KEY(sha, G1, G2, pin, R, X, H, wCID, CK) ⇒</a></li><li><a href="#mpin192server_keyh-z-sst-w-h-hid-xid-xcid-sk-" class="table-of-contents__link toc-highlight">MPIN192.SERVER_KEY(h, Z, SST, W, H, HID, xID, xCID, SK) ⇒</a></li><li><a href="#mpin192get_dvs_keypairrng-z-pa-" class="table-of-contents__link toc-highlight">MPIN192.GET_DVS_KEYPAIR(rng, Z, Pa) ⇒</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/cryptojs/mpin256/index.html b/docs/cryptojs/mpin256/index.html
index 7b4e393..6b21a9e 100644
--- a/docs/cryptojs/mpin256/index.html
+++ b/docs/cryptojs/mpin256/index.html
@@ -1,629 +1,102 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>MPIN256 · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;a name=&quot;MPIN256&quot;&gt;&lt;/a&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="MPIN256 · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;a name=&quot;MPIN256&quot;&gt;&lt;/a&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>AMCL JavaScript API 1.0.0</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-cryptojs/mpin256">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">MPIN256 | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/cryptojs/mpin256"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="MPIN256 | Apache Milagro"><meta data-rh="true" name="description" content="MPIN256"><meta data-rh="true" property="og:description" content="MPIN256"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/cryptojs/mpin256"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/mpin256" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/mpin256" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">MPIN256</h1></header><article><div><span><p><a name="MPIN256"></a></p>
-<h2><a class="anchor" aria-hidden="true" id="mpin256"></a><a href="#mpin256" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN256</h2>
-<p><strong>Kind</strong>: global class<br>
-<strong>this</strong>: <code>{MPIN256}</code></p>
-<ul>
-<li><a href="#MPIN256">MPIN256</a>
-<ul>
-<li><a href="#new_MPIN256_new">new MPIN256()</a></li>
-<li><a href="#MPIN256.today">.today()</a> ⇒</li>
-<li><a href="#MPIN256.bytestostring">.bytestostring(b)</a> ⇒</li>
-<li><a href="#MPIN256.stringtobytes">.stringtobytes(s)</a> ⇒</li>
-<li><a href="#MPIN256.comparebytes">.comparebytes(a, b)</a> ⇒</li>
-<li><a href="#MPIN256.mpin_hash">.mpin_hash(c, U)</a> ⇒</li>
-<li><a href="#MPIN256.hashit">.hashit(sha, n, B)</a> ⇒</li>
-<li><a href="#MPIN256.map">.map(u, cb)</a> ⇒</li>
-<li><a href="#MPIN256.unmap">.unmap(u, P)</a> ⇒</li>
-<li><a href="#MPIN256.RECOMBINE_G1">.RECOMBINE_G1(R1, R2, R)</a> ⇒</li>
-<li><a href="#MPIN256.RECOMBINE_G2">.RECOMBINE_G2(W1, W2, W)</a> ⇒</li>
-<li><a href="#MPIN256.HASH_ID">.HASH_ID(sha, ID)</a> ⇒</li>
-<li><a href="#MPIN256.RANDOM_GENERATE">.RANDOM_GENERATE(rng, S)</a> ⇒</li>
-<li><a href="#MPIN256.EXTRACT_PIN">.EXTRACT_PIN()</a> ⇒</li>
-<li><a href="#MPIN256.EXTRACT_FACTOR">.EXTRACT_FACTOR()</a> ⇒</li>
-<li><a href="#MPIN256.RESTORE_FACTOR">.RESTORE_FACTOR()</a> ⇒</li>
-<li><a href="#MPIN256.GET_SERVER_SECRET">.GET_SERVER_SECRET(S, SST)</a> ⇒</li>
-<li><a href="#MPIN256.GET_G1_MULTIPLE">.GET_G1_MULTIPLE(type, x, G, W)</a> ⇒</li>
-<li><a href="#MPIN256.GET_CLIENT_SECRET">.GET_CLIENT_SECRET(S, CID, CST)</a> ⇒</li>
-<li><a href="#MPIN256.GET_CLIENT_PERMIT">.GET_CLIENT_PERMIT(sha, date, S, CID, CTT)</a> ⇒</li>
-<li><a href="#MPIN256.CLIENT_1">.CLIENT_1(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT)</a> ⇒</li>
-<li><a href="#MPIN256.CLIENT_2">.CLIENT_2(X, Y, SEC)</a> ⇒</li>
-<li><a href="#MPIN256.SERVER_1">.SERVER_1(sha, date, CID, HID, HTID)</a> ⇒</li>
-<li><a href="#MPIN256.SERVER_2">.SERVER_2(date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, Pa)</a> ⇒</li>
-<li><a href="#MPIN256.KANGAROO">.KANGAROO(E, F)</a> ⇒</li>
-<li><a href="#MPIN256.GET_TIME">.GET_TIME()</a> ⇒</li>
-<li><a href="#MPIN256.CLIENT">.CLIENT(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT, TimeValue, Y, Message)</a> ⇒</li>
-<li><a href="#MPIN256.SERVER">.SERVER(sha, date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, CID, TimeValue, MESSAGE, Pa)</a> ⇒</li>
-<li><a href="#MPIN256.PRECOMPUTE">.PRECOMPUTE(TOKEN, CID, G1, G2)</a> ⇒</li>
-<li><a href="#MPIN256.HASH_ALL">.HASH_ALL(sha, HID, xID, xCID, SEC, Y, R, W)</a> ⇒</li>
-<li><a href="#MPIN256.CLIENT_KEY">.CLIENT_KEY(sha, G1, G2, pin, R, X, H, wCID, CK)</a> ⇒</li>
-<li><a href="#MPIN256.SERVER_KEY">.SERVER_KEY(h, Z, SST, W, H, HID, xID, xCID, SK)</a> ⇒</li>
-<li><a href="#MPIN256.GET_DVS_KEYPAIR">.GET_DVS_KEYPAIR(rng, Z, Pa)</a> ⇒</li>
-</ul></li>
-</ul>
-<p><a name="new_MPIN256_new"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="new-mpin256"></a><a href="#new-mpin256" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>new MPIN256()</h3>
-<p>Creates an instance of MPIN256</p>
-<p><a name="MPIN256.today"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin256today-"></a><a href="#mpin256today-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN256.today() ⇒</h3>
-<p>Get epoch time for day</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a>  <br>
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/amcl-overview">AMCL Library</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-overview">AMCL Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API 1.0.0</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/aes">AES</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/big">BIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls">BLS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls192">BLS192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls256">BLS256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/dbig">DBIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp">ECP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ff">FF</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp">FP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp2">FP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp4">FP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp8">FP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp12">FP12</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp16">FP16</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp24">FP24</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp48">FP48</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/gcm">GCM</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash256">HASH256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash384">HASH384</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash512">HASH512</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin">MPIN</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair">PAIR</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rand">RAND</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rsa">RSA</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/sha3">SHA3</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/unit64">UInt64</a></li></ul></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL Library</span><meta itemprop="position" content="1"></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL JavaScript API 1.0.0</span><meta itemprop="position" content="2"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">MPIN256</span><meta itemprop="position" content="3"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>MPIN256</h1></header><a name="MPIN256"></a><h2 class="anchor anchorWithStickyNavbar_LWe7" id="mpin256">MPIN256<a class="hash-link" href="#mpin256" title="Direct link to heading">​</a></h2><p><strong>Kind</strong>: global class<br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN256{&quot;}&quot;}</code>  </p><ul><li><a href="#MPIN256">MPIN256</a><ul><li><a href="#new_MPIN256_new">new MPIN256()</a></li><li><a href="#MPIN256.today">.today()</a> ⇒</li><li><a href="#MPIN256.bytestostring">.bytestostring(b)</a> ⇒</li><li><a href="#MPIN256.stringtobytes">.stringtobytes(s)</a> ⇒</li><li><a href="#MPIN256.comparebytes">.comparebytes(a, b)</a> ⇒</li><li><a href="#MPIN256.mpin_hash">.mpin_hash(c, U)</a> ⇒</li><li><a href="#MPIN256.hashit">.hashit(sha, n, B)</a> ⇒</li><li><a href="#MPIN256.map">.map(u, cb)</a> ⇒</li><li><a href="#MPIN256.unmap">.unmap(u, P)</a> ⇒</li><li><a href="#MPIN256.RECOMBINE_G1">.RECOMBINE_G1(R1, R2, R)</a> ⇒</li><li><a href="#MPIN256.RECOMBINE_G2">.RECOMBINE_G2(W1, W2, W)</a> ⇒</li><li><a href="#MPIN256.HASH_ID">.HASH_ID(sha, ID)</a> ⇒</li><li><a href="#MPIN256.RANDOM_GENERATE">.RANDOM_GENERATE(rng, S)</a> ⇒</li><li><a href="#MPIN256.EXTRACT_PIN">.EXTRACT_PIN()</a> ⇒</li><li><a href="#MPIN256.EXTRACT_FACTOR">.EXTRACT_FACTOR()</a> ⇒</li><li><a href="#MPIN256.RESTORE_FACTOR">.RESTORE_FACTOR()</a> ⇒</li><li><a href="#MPIN256.GET_SERVER_SECRET">.GET_SERVER_SECRET(S, SST)</a> ⇒</li><li><a href="#MPIN256.GET_G1_MULTIPLE">.GET_G1_MULTIPLE(type, x, G, W)</a> ⇒</li><li><a href="#MPIN256.GET_CLIENT_SECRET">.GET_CLIENT_SECRET(S, CID, CST)</a> ⇒</li><li><a href="#MPIN256.GET_CLIENT_PERMIT">.GET_CLIENT_PERMIT(sha, date, S, CID, CTT)</a> ⇒</li><li><a href="#MPIN256.CLIENT_1">.CLIENT_1(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT)</a> ⇒</li><li><a href="#MPIN256.CLIENT_2">.CLIENT_2(X, Y, SEC)</a> ⇒</li><li><a href="#MPIN256.SERVER_1">.SERVER_1(sha, date, CID, HID, HTID)</a> ⇒</li><li><a href="#MPIN256.SERVER_2">.SERVER_2(date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, Pa)</a> ⇒</li><li><a href="#MPIN256.KANGAROO">.KANGAROO(E, F)</a> ⇒</li><li><a href="#MPIN256.GET_TIME">.GET_TIME()</a> ⇒</li><li><a href="#MPIN256.CLIENT">.CLIENT(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT, TimeValue, Y, Message)</a> ⇒</li><li><a href="#MPIN256.SERVER">.SERVER(sha, date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, CID, TimeValue, MESSAGE, Pa)</a> ⇒</li><li><a href="#MPIN256.PRECOMPUTE">.PRECOMPUTE(TOKEN, CID, G1, G2)</a> ⇒</li><li><a href="#MPIN256.HASH_ALL">.HASH_ALL(sha, HID, xID, xCID, SEC, Y, R, W)</a> ⇒</li><li><a href="#MPIN256.CLIENT_KEY">.CLIENT_KEY(sha, G1, G2, pin, R, X, H, wCID, CK)</a> ⇒</li><li><a href="#MPIN256.SERVER_KEY">.SERVER_KEY(h, Z, SST, W, H, HID, xID, xCID, SK)</a> ⇒</li><li><a href="#MPIN256.GET_DVS_KEYPAIR">.GET_DVS_KEYPAIR(rng, Z, Pa)</a> ⇒</li></ul></li></ul><a name="new_MPIN256_new"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="new-mpin256">new MPIN256()<a class="hash-link" href="#new-mpin256" title="Direct link to heading">​</a></h3><p>Creates an instance of MPIN256</p><a name="MPIN256.today"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin256today-">MPIN256.today() ⇒<a class="hash-link" href="#mpin256today-" title="Direct link to heading">​</a></h3><p>Get epoch time for day</p><p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a><br>
 <strong>Returns</strong>: time in slots since epoch<br>
-<strong>this</strong>: <code>{MPIN256}</code>  <br>
-<a name="MPIN256.bytestostring"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin256bytestostringb-"></a><a href="#mpin256bytestostringb-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN256.bytestostring(b) ⇒</h3>
-<p>Convert byte array to string</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN256{&quot;}&quot;}</code>  </p><a name="MPIN256.bytestostring"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin256bytestostringb-">MPIN256.bytestostring(b) ⇒<a class="hash-link" href="#mpin256bytestostringb-" title="Direct link to heading">​</a></h3><p>Convert byte array to string</p><p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a><br>
 <strong>Returns</strong>: s string<br>
-<strong>this</strong>: <code>{MPIN256}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>b</td><td>byte array</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN256.stringtobytes"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin256stringtobytess-"></a><a href="#mpin256stringtobytess-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN256.stringtobytes(s) ⇒</h3>
-<p>Convert a string to byte array</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN256{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>b</td><td>byte array</td></tr></tbody></table><a name="MPIN256.stringtobytes"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin256stringtobytess-">MPIN256.stringtobytes(s) ⇒<a class="hash-link" href="#mpin256stringtobytess-" title="Direct link to heading">​</a></h3><p>Convert a string to byte array</p><p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a><br>
 <strong>Returns</strong>: b byte array<br>
-<strong>this</strong>: <code>{MPIN256}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>s</td><td>string</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN256.comparebytes"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin256comparebytesa-b-"></a><a href="#mpin256comparebytesa-b-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN256.comparebytes(a, b) ⇒</h3>
-<p>Convert byte arrays</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN256{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>s</td><td>string</td></tr></tbody></table><a name="MPIN256.comparebytes"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin256comparebytesa-b-">MPIN256.comparebytes(a, b) ⇒<a class="hash-link" href="#mpin256comparebytesa-b-" title="Direct link to heading">​</a></h3><p>Convert byte arrays</p><p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a><br>
 <strong>Returns</strong>: true if equal<br>
-<strong>this</strong>: <code>{MPIN256}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>a</td><td>byte array</td></tr>
-<tr><td>b</td><td>byte array</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN256.mpin_hash"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin256mpin_hashc-u-"></a><a href="#mpin256mpin_hashc-u-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN256.mpin_hash(c, U) ⇒</h3>
-<p>Hash values</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN256{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>a</td><td>byte array</td></tr><tr><td>b</td><td>byte array</td></tr></tbody></table><a name="MPIN256.mpin_hash"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin256mpin_hashc-u-">MPIN256.mpin_hash(c, U) ⇒<a class="hash-link" href="#mpin256mpin_hashc-u-" title="Direct link to heading">​</a></h3><p>Hash values</p><p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a><br>
 <strong>Returns</strong>: R hash value<br>
-<strong>this</strong>: <code>{MPIN256}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>c</td><td>FP8 instance</td></tr>
-<tr><td>U</td><td>ECP unstancebyte array</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN256.hashit"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin256hashitsha-n-b-"></a><a href="#mpin256hashitsha-n-b-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN256.hashit(sha, n, B) ⇒</h3>
-<p>General purpose hash function</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN256{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>c</td><td>FP8 instance</td></tr><tr><td>U</td><td>ECP unstancebyte array</td></tr></tbody></table><a name="MPIN256.hashit"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin256hashitsha-n-b-">MPIN256.hashit(sha, n, B) ⇒<a class="hash-link" href="#mpin256hashitsha-n-b-" title="Direct link to heading">​</a></h3><p>General purpose hash function</p><p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a><br>
 <strong>Returns</strong>: R hash value<br>
-<strong>this</strong>: <code>{MPIN256}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>sha</td><td>is the hash type</td></tr>
-<tr><td>n</td><td>Integer</td></tr>
-<tr><td>B</td><td>byte array</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN256.map"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin256mapu-cb-"></a><a href="#mpin256mapu-cb-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN256.map(u, cb) ⇒</h3>
-<p>maps a random u to a point on the curve</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN256{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>sha</td><td>is the hash type</td></tr><tr><td>n</td><td>Integer</td></tr><tr><td>B</td><td>byte array</td></tr></tbody></table><a name="MPIN256.map"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin256mapu-cb-">MPIN256.map(u, cb) ⇒<a class="hash-link" href="#mpin256mapu-cb-" title="Direct link to heading">​</a></h3><p>maps a random u to a point on the curve</p><p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a><br>
 <strong>Returns</strong>: P ECP pointhash value<br>
-<strong>this</strong>: <code>{MPIN256}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>u</td><td>BIG numberInteger</td></tr>
-<tr><td>cb</td><td>an integer representing the &quot;sign&quot; of y, in fact its least significant bit.</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN256.unmap"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin256unmapu-p-"></a><a href="#mpin256unmapu-p-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN256.unmap(u, P) ⇒</h3>
-<p>returns u derived from P. Random value in range 1 to return value should then be added to u</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN256{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>u</td><td>BIG numberInteger</td></tr><tr><td>cb</td><td>an integer representing the &quot;sign&quot; of y, in fact its least significant bit.</td></tr></tbody></table><a name="MPIN256.unmap"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin256unmapu-p-">MPIN256.unmap(u, P) ⇒<a class="hash-link" href="#mpin256unmapu-p-" title="Direct link to heading">​</a></h3><p>returns u derived from P. Random value in range 1 to return value should then be added to u</p><p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a><br>
 <strong>Returns</strong>: r Value that should be added to u to derive P<br>
-<strong>this</strong>: <code>{MPIN256}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>u</td><td>BIG numberInteger</td></tr>
-<tr><td>P</td><td>ECP pointhash value</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN256.RECOMBINE_G1"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin256recombine_g1r1-r2-r-"></a><a href="#mpin256recombine_g1r1-r2-r-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN256.RECOMBINE_G1(R1, R2, R) ⇒</h3>
-<p>Add two members from the group G1</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN256{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>u</td><td>BIG numberInteger</td></tr><tr><td>P</td><td>ECP pointhash value</td></tr></tbody></table><a name="MPIN256.RECOMBINE_G1"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin256recombine_g1r1-r2-r-">MPIN256.RECOMBINE_G1(R1, R2, R) ⇒<a class="hash-link" href="#mpin256recombine_g1r1-r2-r-" title="Direct link to heading">​</a></h3><p>Add two members from the group G1</p><p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a><br>
 <strong>Returns</strong>: 0 or an error code<br>
-<strong>this</strong>: <code>{MPIN256}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>R1</td><td>Input member of G1</td></tr>
-<tr><td>R2</td><td>Input member of G1</td></tr>
-<tr><td>R</td><td>Output member of G1. R=R1+R2</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN256.RECOMBINE_G2"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin256recombine_g2w1-w2-w-"></a><a href="#mpin256recombine_g2w1-w2-w-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN256.RECOMBINE_G2(W1, W2, W) ⇒</h3>
-<p>Add two members from the group G2</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN256{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>R1</td><td>Input member of G1</td></tr><tr><td>R2</td><td>Input member of G1</td></tr><tr><td>R</td><td>Output member of G1. R=R1+R2</td></tr></tbody></table><a name="MPIN256.RECOMBINE_G2"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin256recombine_g2w1-w2-w-">MPIN256.RECOMBINE_G2(W1, W2, W) ⇒<a class="hash-link" href="#mpin256recombine_g2w1-w2-w-" title="Direct link to heading">​</a></h3><p>Add two members from the group G2</p><p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a><br>
 <strong>Returns</strong>: 0 or an error code<br>
-<strong>this</strong>: <code>{MPIN256}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>W1</td><td>Input member of G2</td></tr>
-<tr><td>W2</td><td>Input member of G2</td></tr>
-<tr><td>W</td><td>Output member of G2. W=W1+W2</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN256.HASH_ID"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin256hash_idsha-id-"></a><a href="#mpin256hash_idsha-id-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN256.HASH_ID(sha, ID) ⇒</h3>
-<p>Hash the identity</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN256{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>W1</td><td>Input member of G2</td></tr><tr><td>W2</td><td>Input member of G2</td></tr><tr><td>W</td><td>Output member of G2. W=W1+W2</td></tr></tbody></table><a name="MPIN256.HASH_ID"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin256hash_idsha-id-">MPIN256.HASH_ID(sha, ID) ⇒<a class="hash-link" href="#mpin256hash_idsha-id-" title="Direct link to heading">​</a></h3><p>Hash the identity</p><p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a><br>
 <strong>Returns</strong>: hash value<br>
-<strong>this</strong>: <code>{MPIN256}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>sha</td><td>is the hash type</td></tr>
-<tr><td>ID</td><td>Identity as byte array</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN256.RANDOM_GENERATE"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin256random_generaterng-s-"></a><a href="#mpin256random_generaterng-s-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN256.RANDOM_GENERATE(rng, S) ⇒</h3>
-<p>Create random secret</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN256{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>sha</td><td>is the hash type</td></tr><tr><td>ID</td><td>Identity as byte array</td></tr></tbody></table><a name="MPIN256.RANDOM_GENERATE"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin256random_generaterng-s-">MPIN256.RANDOM_GENERATE(rng, S) ⇒<a class="hash-link" href="#mpin256random_generaterng-s-" title="Direct link to heading">​</a></h3><p>Create random secret</p><p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a><br>
 <strong>Returns</strong>: O for success or else error code<br>
-<strong>this</strong>: <code>{MPIN256}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>rng</td><td>cryptographically secure random number generator</td></tr>
-<tr><td>S</td><td>Random secret value</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN256.EXTRACT_PIN"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin256extract_pin-"></a><a href="#mpin256extract_pin-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN256.EXTRACT_PIN() ⇒</h3>
-<p>Extract a PIN number from a client secret</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN256{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>rng</td><td>cryptographically secure random number generator</td></tr><tr><td>S</td><td>Random secret value</td></tr></tbody></table><a name="MPIN256.EXTRACT_PIN"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin256extract_pin-">MPIN256.EXTRACT_PIN() ⇒<a class="hash-link" href="#mpin256extract_pin-" title="Direct link to heading">​</a></h3><p>Extract a PIN number from a client secret</p><p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a><br>
 <strong>Returns</strong>: token<br>
-<strong>this</strong>: <code>{MPIN256}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN256{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: sha hash type<br>
 <strong>Parameter</strong>: CID Client identity<br>
 <strong>Parameter</strong>: pin PIN value<br>
-<strong>Parameter</strong>: TOKEN Client secret<br>
-<a name="MPIN256.EXTRACT_FACTOR"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin256extract_factor-"></a><a href="#mpin256extract_factor-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN256.EXTRACT_FACTOR() ⇒</h3>
-<p>Extract factor from TOKEN for identity CID</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a>  <br>
+<strong>Parameter</strong>: TOKEN Client secret  </p><a name="MPIN256.EXTRACT_FACTOR"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin256extract_factor-">MPIN256.EXTRACT_FACTOR() ⇒<a class="hash-link" href="#mpin256extract_factor-" title="Direct link to heading">​</a></h3><p>Extract factor from TOKEN for identity CID</p><p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a><br>
 <strong>Returns</strong>: token<br>
-<strong>this</strong>: <code>{MPIN256}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN256{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: sha hash type<br>
 <strong>Parameter</strong>: CID Client identity<br>
 <strong>Parameter</strong>: factor Value to extract<br>
 <strong>Parameter</strong>: facbits Number of bits in factor<br>
-<strong>Parameter</strong>: TOKEN Token value<br>
-<a name="MPIN256.RESTORE_FACTOR"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin256restore_factor-"></a><a href="#mpin256restore_factor-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN256.RESTORE_FACTOR() ⇒</h3>
-<p>Restore factor to TOKEN for identity CID</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a>  <br>
+<strong>Parameter</strong>: TOKEN Token value  </p><a name="MPIN256.RESTORE_FACTOR"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin256restore_factor-">MPIN256.RESTORE_FACTOR() ⇒<a class="hash-link" href="#mpin256restore_factor-" title="Direct link to heading">​</a></h3><p>Restore factor to TOKEN for identity CID</p><p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a><br>
 <strong>Returns</strong>: token<br>
-<strong>this</strong>: <code>{MPIN256}</code>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN256{&quot;}&quot;}</code><br>
 <strong>Parameter</strong>: sha hash type<br>
 <strong>Parameter</strong>: CID Client identity<br>
 <strong>Parameter</strong>: factor Value to extract<br>
 <strong>Parameter</strong>: facbits Number of bits in factor<br>
-<strong>Parameter</strong>: TOKEN Token value<br>
-<a name="MPIN256.GET_SERVER_SECRET"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin256get_server_secrets-sst-"></a><a href="#mpin256get_server_secrets-sst-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN256.GET_SERVER_SECRET(S, SST) ⇒</h3>
-<p>Create a server secret in G2 from a master secret</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a>  <br>
+<strong>Parameter</strong>: TOKEN Token value  </p><a name="MPIN256.GET_SERVER_SECRET"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin256get_server_secrets-sst-">MPIN256.GET_SERVER_SECRET(S, SST) ⇒<a class="hash-link" href="#mpin256get_server_secrets-sst-" title="Direct link to heading">​</a></h3><p>Create a server secret in G2 from a master secret</p><p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a><br>
 <strong>Returns</strong>: O for success or else error code<br>
-<strong>this</strong>: <code>{MPIN256}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>S</td><td>Master secret</td></tr>
-<tr><td>SST</td><td>Server secret = s.Q where Q is a fixed generator of G2</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN256.GET_G1_MULTIPLE"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin256get_g1_multipletype-x-g-w-"></a><a href="#mpin256get_g1_multipletype-x-g-w-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN256.GET_G1_MULTIPLE(type, x, G, W) ⇒</h3>
-<p>Find a random multiple of a point in G1</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN256{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>S</td><td>Master secret</td></tr><tr><td>SST</td><td>Server secret = s.Q where Q is a fixed generator of G2</td></tr></tbody></table><a name="MPIN256.GET_G1_MULTIPLE"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin256get_g1_multipletype-x-g-w-">MPIN256.GET_G1_MULTIPLE(type, x, G, W) ⇒<a class="hash-link" href="#mpin256get_g1_multipletype-x-g-w-" title="Direct link to heading">​</a></h3><p>Find a random multiple of a point in G1</p><p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a><br>
 <strong>Returns</strong>: O for success or else error code<br>
-<strong>this</strong>: <code>{MPIN256}</code>  <br>
-<strong>Parameter</strong>: rng cryptographically secure random number generator</p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>type</td><td>determines type of action to be taken</td></tr>
-<tr><td>x</td><td>an output internally randomly generated if R!=NULL, otherwise must be provided as an input</td></tr>
-<tr><td>G</td><td>if type=0 a point in G1, else an octet to be mapped to G1</td></tr>
-<tr><td>W</td><td>the output =x.G or x.M(G), where M(.) is a mapping</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN256.GET_CLIENT_SECRET"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin256get_client_secrets-cid-cst-"></a><a href="#mpin256get_client_secrets-cid-cst-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN256.GET_CLIENT_SECRET(S, CID, CST) ⇒</h3>
-<p>Create a client secret in G1 from a master secret and the client ID</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN256{&quot;}&quot;}</code><br>
+<strong>Parameter</strong>: rng cryptographically secure random number generator  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>type</td><td>determines type of action to be taken</td></tr><tr><td>x</td><td>an output internally randomly generated if R!=NULL, otherwise must be provided as an input</td></tr><tr><td>G</td><td>if type=0 a point in G1, else an octet to be mapped to G1</td></tr><tr><td>W</td><td>the output =x.G or x.M(G), where M(.) is a mapping</td></tr></tbody></table><a name="MPIN256.GET_CLIENT_SECRET"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin256get_client_secrets-cid-cst-">MPIN256.GET_CLIENT_SECRET(S, CID, CST) ⇒<a class="hash-link" href="#mpin256get_client_secrets-cid-cst-" title="Direct link to heading">​</a></h3><p>Create a client secret in G1 from a master secret and the client ID</p><p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a><br>
 <strong>Returns</strong>: O for success or else error code<br>
-<strong>this</strong>: <code>{MPIN256}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>S</td><td>is an input master secret</td></tr>
-<tr><td>CID</td><td>is the input client identity</td></tr>
-<tr><td>CST</td><td>is the full client secret = s.H(ID)</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN256.GET_CLIENT_PERMIT"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin256get_client_permitsha-date-s-cid-ctt-"></a><a href="#mpin256get_client_permitsha-date-s-cid-ctt-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN256.GET_CLIENT_PERMIT(sha, date, S, CID, CTT) ⇒</h3>
-<p>Create a Time Permit in G1 from a master secret and the client ID</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN256{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>S</td><td>is an input master secret</td></tr><tr><td>CID</td><td>is the input client identity</td></tr><tr><td>CST</td><td>is the full client secret = s.H(ID)</td></tr></tbody></table><a name="MPIN256.GET_CLIENT_PERMIT"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin256get_client_permitsha-date-s-cid-ctt-">MPIN256.GET_CLIENT_PERMIT(sha, date, S, CID, CTT) ⇒<a class="hash-link" href="#mpin256get_client_permitsha-date-s-cid-ctt-" title="Direct link to heading">​</a></h3><p>Create a Time Permit in G1 from a master secret and the client ID</p><p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a><br>
 <strong>Returns</strong>: O for success or else error code<br>
-<strong>this</strong>: <code>{MPIN256}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>sha</td><td>is the hash type</td></tr>
-<tr><td>date</td><td>is input date, in days since the epoch.</td></tr>
-<tr><td>S</td><td>is an input master secret</td></tr>
-<tr><td>CID</td><td>is the input client identity</td></tr>
-<tr><td>CTT</td><td>is a Time Permit for the given date = s.H(d</td><td>H(ID))</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN256.CLIENT_1"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin256client_1sha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-"></a><a href="#mpin256client_1sha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN256.CLIENT_1(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT) ⇒</h3>
-<p>Perform first pass of the client side of the 3-pass version of the M-Pin protocol</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN256{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th><th></th></tr></thead><tbody><tr><td>sha</td><td>is the hash type</td><td></td></tr><tr><td>date</td><td>is input date, in days since the epoch.</td><td></td></tr><tr><td>S</td><td>is an input master secret</td><td></td></tr><tr><td>CID</td><td>is the input client identity</td><td></td></tr><tr><td>CTT</td><td>is a Time Permit for the given date = s.H(d</td><td>H(ID))</td></tr></tbody></table><a name="MPIN256.CLIENT_1"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin256client_1sha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-">MPIN256.CLIENT_1(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT) ⇒<a class="hash-link" href="#mpin256client_1sha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-" title="Direct link to heading">​</a></h3><p>Perform first pass of the client side of the 3-pass version of the M-Pin protocol</p><p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a><br>
 <strong>Returns</strong>: O for success or else error code<br>
-<strong>this</strong>: <code>{MPIN256}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>sha</td><td>is the hash type</td></tr>
-<tr><td>date</td><td>is input date, in days since the epoch. Set to 0 if Time permits disabled</td></tr>
-<tr><td>CLIENT_ID</td><td>is the input client identity</td></tr>
-<tr><td>rng</td><td>is a pointer to a cryptographically secure random number generator</td></tr>
-<tr><td>X</td><td>an output internally randomly generated if R!=NULL, otherwise must be provided as an input</td></tr>
-<tr><td>pin</td><td>is the input PIN number</td></tr>
-<tr><td>TOKEN</td><td>is the input M-Pin token (the client secret with PIN portion removed)</td></tr>
-<tr><td>SEC</td><td>is output = CS+TP, where CS=is the reconstructed client secret, and TP is the time permit</td></tr>
-<tr><td>xID</td><td>is output = x.H(ID)</td></tr>
-<tr><td>xCID</td><td>is output = x.(H(ID)+H(d</td><td>H(ID)))</td></tr>
-<tr><td>PERMIT</td><td>is the input time permit</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN256.CLIENT_2"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin256client_2x-y-sec-"></a><a href="#mpin256client_2x-y-sec-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN256.CLIENT_2(X, Y, SEC) ⇒</h3>
-<p>Perform second pass of the client side of the 3-pass version of the M-Pin protocol</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN256{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th><th></th></tr></thead><tbody><tr><td>sha</td><td>is the hash type</td><td></td></tr><tr><td>date</td><td>is input date, in days since the epoch. Set to 0 if Time permits disabled</td><td></td></tr><tr><td>CLIENT_ID</td><td>is the input client identity</td><td></td></tr><tr><td>rng</td><td>is a pointer to a cryptographically secure random number generator</td><td></td></tr><tr><td>X</td><td>an output internally randomly generated if R!=NULL, otherwise must be provided as an input</td><td></td></tr><tr><td>pin</td><td>is the input PIN number</td><td></td></tr><tr><td>TOKEN</td><td>is the input M-Pin token (the client secret with PIN portion removed)</td><td></td></tr><tr><td>SEC</td><td>is output = CS+TP, where CS=is the reconstructed client secret, and TP is the time permit</td><td></td></tr><tr><td>xID</td><td>is output = x.H(ID)</td><td></td></tr><tr><td>xCID</td><td>is output = x.(H(ID)+H(d</td><td>H(ID)))</td></tr><tr><td>PERMIT</td><td>is the input time permit</td><td></td></tr></tbody></table><a name="MPIN256.CLIENT_2"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin256client_2x-y-sec-">MPIN256.CLIENT_2(X, Y, SEC) ⇒<a class="hash-link" href="#mpin256client_2x-y-sec-" title="Direct link to heading">​</a></h3><p>Perform second pass of the client side of the 3-pass version of the M-Pin protocol</p><p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a><br>
 <strong>Returns</strong>: O for success or else error code<br>
-<strong>this</strong>: <code>{MPIN256}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>X</td><td>an input, a locally generated random number</td></tr>
-<tr><td>Y</td><td>an input random challenge from the server</td></tr>
-<tr><td>SEC</td><td>on output = -(x+y).V</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN256.SERVER_1"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin256server_1sha-date-cid-hid-htid-"></a><a href="#mpin256server_1sha-date-cid-hid-htid-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN256.SERVER_1(sha, date, CID, HID, HTID) ⇒</h3>
-<p>Perform first pass of the server side of the 3-pass version of the M-Pin protocol</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN256{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>X</td><td>an input, a locally generated random number</td></tr><tr><td>Y</td><td>an input random challenge from the server</td></tr><tr><td>SEC</td><td>on output = -(x+y).V</td></tr></tbody></table><a name="MPIN256.SERVER_1"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin256server_1sha-date-cid-hid-htid-">MPIN256.SERVER_1(sha, date, CID, HID, HTID) ⇒<a class="hash-link" href="#mpin256server_1sha-date-cid-hid-htid-" title="Direct link to heading">​</a></h3><p>Perform first pass of the server side of the 3-pass version of the M-Pin protocol</p><p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a><br>
 <strong>Returns</strong>: O for success or else error code<br>
-<strong>this</strong>: <code>{MPIN256}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>sha</td><td>is the hash type</td></tr>
-<tr><td>date</td><td>is input date, in days since the epoch. Set to 0 if Time permits disabled</td></tr>
-<tr><td>CID</td><td>is the input claimed client identity</td></tr>
-<tr><td>HID</td><td>is output H(ID), a hash of the client ID</td></tr>
-<tr><td>HTID</td><td>is output H(ID)+H(d</td><td>H(ID))</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN256.SERVER_2"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin256server_2date-hid-htid-y-sst-xid-xcid-msec-e-f-pa-"></a><a href="#mpin256server_2date-hid-htid-y-sst-xid-xcid-msec-e-f-pa-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN256.SERVER_2(date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, Pa) ⇒</h3>
-<p>Perform third pass on the server side of the 3-pass version of the M-Pin protocol</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN256{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th><th></th></tr></thead><tbody><tr><td>sha</td><td>is the hash type</td><td></td></tr><tr><td>date</td><td>is input date, in days since the epoch. Set to 0 if Time permits disabled</td><td></td></tr><tr><td>CID</td><td>is the input claimed client identity</td><td></td></tr><tr><td>HID</td><td>is output H(ID), a hash of the client ID</td><td></td></tr><tr><td>HTID</td><td>is output H(ID)+H(d</td><td>H(ID))</td></tr></tbody></table><a name="MPIN256.SERVER_2"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin256server_2date-hid-htid-y-sst-xid-xcid-msec-e-f-pa-">MPIN256.SERVER_2(date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, Pa) ⇒<a class="hash-link" href="#mpin256server_2date-hid-htid-y-sst-xid-xcid-msec-e-f-pa-" title="Direct link to heading">​</a></h3><p>Perform third pass on the server side of the 3-pass version of the M-Pin protocol</p><p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a><br>
 <strong>Returns</strong>: O for success or else error code<br>
-<strong>this</strong>: <code>{MPIN256}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>date</td><td>is input date, in days since the epoch. Set to 0 if Time permits disabled</td></tr>
-<tr><td>HID</td><td>is input H(ID), a hash of the client ID</td></tr>
-<tr><td>HTID</td><td>is input H(ID)+H(d</td><td>H(ID))</td></tr>
-<tr><td>Y</td><td>is the input server's randomly generated challenge</td></tr>
-<tr><td>SST</td><td>is the input server secret</td></tr>
-<tr><td>xID</td><td>is input from the client = x.H(ID)</td></tr>
-<tr><td>xCID</td><td>is input from the client= x.(H(ID)+H(d</td><td>H(ID)))</td></tr>
-<tr><td>mSEC</td><td>is an input from the client</td></tr>
-<tr><td>E</td><td>is an output to help the Kangaroos to find the PIN error, or NULL if not required</td></tr>
-<tr><td>F</td><td>is an output to help the Kangaroos to find the PIN error, or NULL if not required</td></tr>
-<tr><td>Pa</td><td>is the input public key from the client, z.Q or NULL if the client uses regular mpin</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN256.KANGAROO"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin256kangarooe-f-"></a><a href="#mpin256kangarooe-f-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN256.KANGAROO(E, F) ⇒</h3>
-<p>Use Kangaroos to find PIN error</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN256{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th><th></th></tr></thead><tbody><tr><td>date</td><td>is input date, in days since the epoch. Set to 0 if Time permits disabled</td><td></td></tr><tr><td>HID</td><td>is input H(ID), a hash of the client ID</td><td></td></tr><tr><td>HTID</td><td>is input H(ID)+H(d</td><td>H(ID))</td></tr><tr><td>Y</td><td>is the input server&#x27;s randomly generated challenge</td><td></td></tr><tr><td>SST</td><td>is the input server secret</td><td></td></tr><tr><td>xID</td><td>is input from the client = x.H(ID)</td><td></td></tr><tr><td>xCID</td><td>is input from the client= x.(H(ID)+H(d</td><td>H(ID)))</td></tr><tr><td>mSEC</td><td>is an input from the client</td><td></td></tr><tr><td>E</td><td>is an output to help the Kangaroos to find the PIN error, or NULL if not required</td><td></td></tr><tr><td>F</td><td>is an output to help the Kangaroos to find the PIN error, or NULL if not required</td><td></td></tr><tr><td>Pa</td><td>is the input public key from the client, z.Q or NULL if the client uses regular mpin</td><td></td></tr></tbody></table><a name="MPIN256.KANGAROO"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin256kangarooe-f-">MPIN256.KANGAROO(E, F) ⇒<a class="hash-link" href="#mpin256kangarooe-f-" title="Direct link to heading">​</a></h3><p>Use Kangaroos to find PIN error</p><p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a><br>
 <strong>Returns</strong>: 0 if Kangaroos failed, or the PIN error e<br>
-<strong>this</strong>: <code>{MPIN256}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>E</td><td>a member of the group GT</td></tr>
-<tr><td>F</td><td>a member of the group GT =  E^e</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN256.GET_TIME"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin256get_time-"></a><a href="#mpin256get_time-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN256.GET_TIME() ⇒</h3>
-<p>Time since epoch</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN256{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>E</td><td>a member of the group GT</td></tr><tr><td>F</td><td>a member of the group GT =  E^e</td></tr></tbody></table><a name="MPIN256.GET_TIME"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin256get_time-">MPIN256.GET_TIME() ⇒<a class="hash-link" href="#mpin256get_time-" title="Direct link to heading">​</a></h3><p>Time since epoch</p><p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a><br>
 <strong>Returns</strong>: time since epoch<br>
-<strong>this</strong>: <code>{MPIN256}</code>  <br>
-<a name="MPIN256.CLIENT"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin256clientsha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-timevalue-y-message-"></a><a href="#mpin256clientsha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-timevalue-y-message-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN256.CLIENT(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT, TimeValue, Y, Message) ⇒</h3>
-<p>Perform client side of the one-pass version of the M-Pin protocol</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN256{&quot;}&quot;}</code>  </p><a name="MPIN256.CLIENT"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin256clientsha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-timevalue-y-message-">MPIN256.CLIENT(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT, TimeValue, Y, Message) ⇒<a class="hash-link" href="#mpin256clientsha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-timevalue-y-message-" title="Direct link to heading">​</a></h3><p>Perform client side of the one-pass version of the M-Pin protocol</p><p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a><br>
 <strong>Returns</strong>: O for success or else error code<br>
-<strong>this</strong>: <code>{MPIN256}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>sha</td><td>is the hash type</td></tr>
-<tr><td>date</td><td>is input date, in days since the epoch. Set to 0 if Time permits disabled</td></tr>
-<tr><td>CLIENT_ID</td><td>is the input client identity</td></tr>
-<tr><td>rng</td><td>is a pointer to a cryptographically secure random number generator</td></tr>
-<tr><td>X</td><td>an output internally randomly generated if R!=NULL, otherwise must be provided as an input</td></tr>
-<tr><td>pin</td><td>is the input PIN number</td></tr>
-<tr><td>TOKEN</td><td>is the input M-Pin token (the client secret with PIN portion removed)</td></tr>
-<tr><td>SEC</td><td>is output = -(x+y)(CS+TP), where CS is the reconstructed client secret, and TP is the time permit</td></tr>
-<tr><td>xID</td><td>is output = x.H(ID)</td></tr>
-<tr><td>xCID</td><td>is output = x.(H(ID)+H(d</td><td>H(ID)))</td></tr>
-<tr><td>PERMIT</td><td>is the input time permit</td></tr>
-<tr><td>TimeValue</td><td>is input epoch time in seconds - a timestamp</td></tr>
-<tr><td>Y</td><td>is output H(t</td><td>U) or H(t</td><td>UT) if Time Permits enabled</td></tr>
-<tr><td>Message</td><td>is the message to be signed</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN256.SERVER"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin256serversha-date-hid-htid-y-sst-xid-xcid-msec-e-f-cid-timevalue-message-pa-"></a><a href="#mpin256serversha-date-hid-htid-y-sst-xid-xcid-msec-e-f-cid-timevalue-message-pa-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN256.SERVER(sha, date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, CID, TimeValue, MESSAGE, Pa) ⇒</h3>
-<p>Perform server side of the one-pass version of the M-Pin protocol</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN256{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th><th></th><th></th></tr></thead><tbody><tr><td>sha</td><td>is the hash type</td><td></td><td></td></tr><tr><td>date</td><td>is input date, in days since the epoch. Set to 0 if Time permits disabled</td><td></td><td></td></tr><tr><td>CLIENT_ID</td><td>is the input client identity</td><td></td><td></td></tr><tr><td>rng</td><td>is a pointer to a cryptographically secure random number generator</td><td></td><td></td></tr><tr><td>X</td><td>an output internally randomly generated if R!=NULL, otherwise must be provided as an input</td><td></td><td></td></tr><tr><td>pin</td><td>is the input PIN number</td><td></td><td></td></tr><tr><td>TOKEN</td><td>is the input M-Pin token (the client secret with PIN portion removed)</td><td></td><td></td></tr><tr><td>SEC</td><td>is output = -(x+y)(CS+TP), where CS is the reconstructed client secret, and TP is the time permit</td><td></td><td></td></tr><tr><td>xID</td><td>is output = x.H(ID)</td><td></td><td></td></tr><tr><td>xCID</td><td>is output = x.(H(ID)+H(d</td><td>H(ID)))</td><td></td></tr><tr><td>PERMIT</td><td>is the input time permit</td><td></td><td></td></tr><tr><td>TimeValue</td><td>is input epoch time in seconds - a timestamp</td><td></td><td></td></tr><tr><td>Y</td><td>is output H(t</td><td>U) or H(t</td><td>UT) if Time Permits enabled</td></tr><tr><td>Message</td><td>is the message to be signed</td><td></td><td></td></tr></tbody></table><a name="MPIN256.SERVER"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin256serversha-date-hid-htid-y-sst-xid-xcid-msec-e-f-cid-timevalue-message-pa-">MPIN256.SERVER(sha, date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, CID, TimeValue, MESSAGE, Pa) ⇒<a class="hash-link" href="#mpin256serversha-date-hid-htid-y-sst-xid-xcid-msec-e-f-cid-timevalue-message-pa-" title="Direct link to heading">​</a></h3><p>Perform server side of the one-pass version of the M-Pin protocol</p><p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a><br>
 <strong>Returns</strong>: O for success or else error code<br>
-<strong>this</strong>: <code>{MPIN256}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>sha</td><td>is the hash type</td></tr>
-<tr><td>date</td><td>is input date, in days since the epoch. Set to 0 if Time permits disabled</td></tr>
-<tr><td>HID</td><td>is output H(ID), a hash of the client ID</td></tr>
-<tr><td>HTID</td><td>is output H(ID)+H(d</td><td>H(ID))</td></tr>
-<tr><td>Y</td><td>is output H(t</td><td>U) or H(t</td><td>UT) if Time Permits enabled</td></tr>
-<tr><td>SST</td><td>is the input server secret</td></tr>
-<tr><td>xID</td><td>is input from the client = x.H(ID)</td></tr>
-<tr><td>xCID</td><td>is input from the client= x.(H(ID)+H(d</td><td>H(ID)))</td></tr>
-<tr><td>mSEC</td><td>is an input from the client</td></tr>
-<tr><td>E</td><td>is an output to help the Kangaroos to find the PIN error, or NULL if not required</td></tr>
-<tr><td>F</td><td>is an output to help the Kangaroos to find the PIN error, or NULL if not required</td></tr>
-<tr><td>CID</td><td>is the input claimed client identity</td></tr>
-<tr><td>TimeValue</td><td>is input epoch time in seconds - a timestamp</td></tr>
-<tr><td>MESSAGE</td><td>is the message to be signed</td></tr>
-<tr><td>Pa</td><td>is input from the client z.Q or NULL if the key-escrow less scheme is not used</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN256.PRECOMPUTE"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin256precomputetoken-cid-g1-g2-"></a><a href="#mpin256precomputetoken-cid-g1-g2-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN256.PRECOMPUTE(TOKEN, CID, G1, G2) ⇒</h3>
-<p>Precompute values for use by the client side of M-Pin Full</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN256{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th><th></th><th></th></tr></thead><tbody><tr><td>sha</td><td>is the hash type</td><td></td><td></td></tr><tr><td>date</td><td>is input date, in days since the epoch. Set to 0 if Time permits disabled</td><td></td><td></td></tr><tr><td>HID</td><td>is output H(ID), a hash of the client ID</td><td></td><td></td></tr><tr><td>HTID</td><td>is output H(ID)+H(d</td><td>H(ID))</td><td></td></tr><tr><td>Y</td><td>is output H(t</td><td>U) or H(t</td><td>UT) if Time Permits enabled</td></tr><tr><td>SST</td><td>is the input server secret</td><td></td><td></td></tr><tr><td>xID</td><td>is input from the client = x.H(ID)</td><td></td><td></td></tr><tr><td>xCID</td><td>is input from the client= x.(H(ID)+H(d</td><td>H(ID)))</td><td></td></tr><tr><td>mSEC</td><td>is an input from the client</td><td></td><td></td></tr><tr><td>E</td><td>is an output to help the Kangaroos to find the PIN error, or NULL if not required</td><td></td><td></td></tr><tr><td>F</td><td>is an output to help the Kangaroos to find the PIN error, or NULL if not required</td><td></td><td></td></tr><tr><td>CID</td><td>is the input claimed client identity</td><td></td><td></td></tr><tr><td>TimeValue</td><td>is input epoch time in seconds - a timestamp</td><td></td><td></td></tr><tr><td>MESSAGE</td><td>is the message to be signed</td><td></td><td></td></tr><tr><td>Pa</td><td>is input from the client z.Q or NULL if the key-escrow less scheme is not used</td><td></td><td></td></tr></tbody></table><a name="MPIN256.PRECOMPUTE"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin256precomputetoken-cid-g1-g2-">MPIN256.PRECOMPUTE(TOKEN, CID, G1, G2) ⇒<a class="hash-link" href="#mpin256precomputetoken-cid-g1-g2-" title="Direct link to heading">​</a></h3><p>Precompute values for use by the client side of M-Pin Full</p><p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a><br>
 <strong>Returns</strong>: O for success or else error code<br>
-<strong>this</strong>: <code>{MPIN256}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>TOKEN</td><td>is the input M-Pin token (the client secret with PIN portion removed)</td></tr>
-<tr><td>CID</td><td>is the input client identity</td></tr>
-<tr><td>G1</td><td>precomputed output</td></tr>
-<tr><td>G2</td><td>precomputed output</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN256.HASH_ALL"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin256hash_allsha-hid-xid-xcid-sec-y-r-w-"></a><a href="#mpin256hash_allsha-hid-xid-xcid-sec-y-r-w-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN256.HASH_ALL(sha, HID, xID, xCID, SEC, Y, R, W) ⇒</h3>
-<p>Hash the session transcript</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN256{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>TOKEN</td><td>is the input M-Pin token (the client secret with PIN portion removed)</td></tr><tr><td>CID</td><td>is the input client identity</td></tr><tr><td>G1</td><td>precomputed output</td></tr><tr><td>G2</td><td>precomputed output</td></tr></tbody></table><a name="MPIN256.HASH_ALL"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin256hash_allsha-hid-xid-xcid-sec-y-r-w-">MPIN256.HASH_ALL(sha, HID, xID, xCID, SEC, Y, R, W) ⇒<a class="hash-link" href="#mpin256hash_allsha-hid-xid-xcid-sec-y-r-w-" title="Direct link to heading">​</a></h3><p>Hash the session transcript</p><p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a><br>
 <strong>Returns</strong>: H the output is the hash of all of the above that apply<br>
-<strong>this</strong>: <code>{MPIN256}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>sha</td><td>is the hash type</td></tr>
-<tr><td>HID</td><td>is the hashed input client ID = H(ID)</td></tr>
-<tr><td>xID</td><td>is the client output = x.H(ID)</td></tr>
-<tr><td>xCID</td><td>is the client output = x.(H(ID)+H(T</td><td>H(ID)))</td></tr>
-<tr><td>SEC</td><td>is the client part response</td></tr>
-<tr><td>Y</td><td>is the server challenge</td></tr>
-<tr><td>R</td><td>is the client part response</td></tr>
-<tr><td>W</td><td>is the server part response</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN256.CLIENT_KEY"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin256client_keysha-g1-g2-pin-r-x-h-wcid-ck-"></a><a href="#mpin256client_keysha-g1-g2-pin-r-x-h-wcid-ck-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN256.CLIENT_KEY(sha, G1, G2, pin, R, X, H, wCID, CK) ⇒</h3>
-<p>Calculate Key on Client side for M-Pin Full</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN256{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th><th></th></tr></thead><tbody><tr><td>sha</td><td>is the hash type</td><td></td></tr><tr><td>HID</td><td>is the hashed input client ID = H(ID)</td><td></td></tr><tr><td>xID</td><td>is the client output = x.H(ID)</td><td></td></tr><tr><td>xCID</td><td>is the client output = x.(H(ID)+H(T</td><td>H(ID)))</td></tr><tr><td>SEC</td><td>is the client part response</td><td></td></tr><tr><td>Y</td><td>is the server challenge</td><td></td></tr><tr><td>R</td><td>is the client part response</td><td></td></tr><tr><td>W</td><td>is the server part response</td><td></td></tr></tbody></table><a name="MPIN256.CLIENT_KEY"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin256client_keysha-g1-g2-pin-r-x-h-wcid-ck-">MPIN256.CLIENT_KEY(sha, G1, G2, pin, R, X, H, wCID, CK) ⇒<a class="hash-link" href="#mpin256client_keysha-g1-g2-pin-r-x-h-wcid-ck-" title="Direct link to heading">​</a></h3><p>Calculate Key on Client side for M-Pin Full</p><p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a><br>
 <strong>Returns</strong>: 0 or an error code<br>
-<strong>this</strong>: <code>{MPIN256}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>sha</td><td>is the hash type</td></tr>
-<tr><td>G1</td><td>precomputed input</td></tr>
-<tr><td>G2</td><td>precomputed input</td></tr>
-<tr><td>pin</td><td>is the input PIN number</td></tr>
-<tr><td>R</td><td>is an input, a locally generated random number</td></tr>
-<tr><td>X</td><td>is an input, a locally generated random number</td></tr>
-<tr><td>H</td><td>is an input, hash of the protocol transcript</td></tr>
-<tr><td>wCID</td><td>is the input Server-side Diffie-Hellman component</td></tr>
-<tr><td>CK</td><td>is the output calculated shared key</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN256.SERVER_KEY"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin256server_keyh-z-sst-w-h-hid-xid-xcid-sk-"></a><a href="#mpin256server_keyh-z-sst-w-h-hid-xid-xcid-sk-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN256.SERVER_KEY(h, Z, SST, W, H, HID, xID, xCID, SK) ⇒</h3>
-<p>Calculate Key on Server side for M-Pin Full</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN256{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>sha</td><td>is the hash type</td></tr><tr><td>G1</td><td>precomputed input</td></tr><tr><td>G2</td><td>precomputed input</td></tr><tr><td>pin</td><td>is the input PIN number</td></tr><tr><td>R</td><td>is an input, a locally generated random number</td></tr><tr><td>X</td><td>is an input, a locally generated random number</td></tr><tr><td>H</td><td>is an input, hash of the protocol transcript</td></tr><tr><td>wCID</td><td>is the input Server-side Diffie-Hellman component</td></tr><tr><td>CK</td><td>is the output calculated shared key</td></tr></tbody></table><a name="MPIN256.SERVER_KEY"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin256server_keyh-z-sst-w-h-hid-xid-xcid-sk-">MPIN256.SERVER_KEY(h, Z, SST, W, H, HID, xID, xCID, SK) ⇒<a class="hash-link" href="#mpin256server_keyh-z-sst-w-h-hid-xid-xcid-sk-" title="Direct link to heading">​</a></h3><p>Calculate Key on Server side for M-Pin Full</p><p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a><br>
 <strong>Returns</strong>: 0 or an error code<br>
-<strong>this</strong>: <code>{MPIN256}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>h</td><td>is the hash type</td></tr>
-<tr><td>Z</td><td>is the input Client-side Diffie-Hellman component</td></tr>
-<tr><td>SST</td><td>is the input server secret</td></tr>
-<tr><td>W</td><td>is an input random number generated by the server</td></tr>
-<tr><td>H</td><td>is an input, hash of the protocol transcript</td></tr>
-<tr><td>HID</td><td>is the hashed input client ID = H(ID)</td></tr>
-<tr><td>xID</td><td>is input from the client = x.H(ID)</td></tr>
-<tr><td>xCID</td><td>is input from the client= x.(H(ID)+H(d</td><td>H(ID)))</td></tr>
-<tr><td>SK</td><td>is the output calculated shared key</td></tr>
-</tbody>
-</table>
-<p><a name="MPIN256.GET_DVS_KEYPAIR"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="mpin256get_dvs_keypairrng-z-pa-"></a><a href="#mpin256get_dvs_keypairrng-z-pa-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>MPIN256.GET_DVS_KEYPAIR(rng, Z, Pa) ⇒</h3>
-<p>Generates a random public key for the client z.Q</p>
-<p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN256{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th><th></th></tr></thead><tbody><tr><td>h</td><td>is the hash type</td><td></td></tr><tr><td>Z</td><td>is the input Client-side Diffie-Hellman component</td><td></td></tr><tr><td>SST</td><td>is the input server secret</td><td></td></tr><tr><td>W</td><td>is an input random number generated by the server</td><td></td></tr><tr><td>H</td><td>is an input, hash of the protocol transcript</td><td></td></tr><tr><td>HID</td><td>is the hashed input client ID = H(ID)</td><td></td></tr><tr><td>xID</td><td>is input from the client = x.H(ID)</td><td></td></tr><tr><td>xCID</td><td>is input from the client= x.(H(ID)+H(d</td><td>H(ID)))</td></tr><tr><td>SK</td><td>is the output calculated shared key</td><td></td></tr></tbody></table><a name="MPIN256.GET_DVS_KEYPAIR"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="mpin256get_dvs_keypairrng-z-pa-">MPIN256.GET_DVS_KEYPAIR(rng, Z, Pa) ⇒<a class="hash-link" href="#mpin256get_dvs_keypairrng-z-pa-" title="Direct link to heading">​</a></h3><p>Generates a random public key for the client z.Q</p><p><strong>Kind</strong>: static method of <a href="#MPIN256"><code>MPIN256</code></a><br>
 <strong>Returns</strong>: 0 or an error code<br>
-<strong>this</strong>: <code>{MPIN256}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>rng</td><td>cryptographically secure random number generator</td></tr>
-<tr><td>Z</td><td>an output internally randomly generated if R!=NULL, otherwise it must be provided as an input</td></tr>
-<tr><td>Pa</td><td>the output public key for the client</td></tr>
-</tbody>
-</table>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/cryptojs/mpin192"><span class="arrow-prev">← </span><span>MPIN192</span></a><a class="docs-next button" href="/docs/cryptojs/pair"><span>PAIR</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#mpin256">MPIN256</a><ul class="toc-headings"><li><a href="#new-mpin256">new MPIN256()</a></li><li><a href="#mpin256today-">MPIN256.today() ⇒</a></li><li><a href="#mpin256bytestostringb-">MPIN256.bytestostring(b) ⇒</a></li><li><a href="#mpin256stringtobytess-">MPIN256.stringtobytes(s) ⇒</a></li><li><a href="#mpin256comparebytesa-b-">MPIN256.comparebytes(a, b) ⇒</a></li><li><a href="#mpin256mpin_hashc-u-">MPIN256.mpin_hash(c, U) ⇒</a></li><li><a href="#mpin256hashitsha-n-b-">MPIN256.hashit(sha, n, B) ⇒</a></li><li><a href="#mpin256mapu-cb-">MPIN256.map(u, cb) ⇒</a></li><li><a href="#mpin256unmapu-p-">MPIN256.unmap(u, P) ⇒</a></li><li><a href="#mpin256recombine_g1r1-r2-r-">MPIN256.RECOMBINE_G1(R1, R2, R) ⇒</a></li><li><a href="#mpin256recombine_g2w1-w2-w-">MPIN256.RECOMBINE_G2(W1, W2, W) ⇒</a></li><li><a href="#mpin256hash_idsha-id-">MPIN256.HASH_ID(sha, ID) ⇒</a></li><li><a href="#mpin256random_generaterng-s-">MPIN256.RANDOM_GENERATE(rng, S) ⇒</a></li><li><a href="#mpin256extract_pin-">MPIN256.EXTRACT_PIN() ⇒</a></li><li><a href="#mpin256extract_factor-">MPIN256.EXTRACT_FACTOR() ⇒</a></li><li><a href="#mpin256restore_factor-">MPIN256.RESTORE_FACTOR() ⇒</a></li><li><a href="#mpin256get_server_secrets-sst-">MPIN256.GET_SERVER_SECRET(S, SST) ⇒</a></li><li><a href="#mpin256get_g1_multipletype-x-g-w-">MPIN256.GET_G1_MULTIPLE(type, x, G, W) ⇒</a></li><li><a href="#mpin256get_client_secrets-cid-cst-">MPIN256.GET_CLIENT_SECRET(S, CID, CST) ⇒</a></li><li><a href="#mpin256get_client_permitsha-date-s-cid-ctt-">MPIN256.GET_CLIENT_PERMIT(sha, date, S, CID, CTT) ⇒</a></li><li><a href="#mpin256client_1sha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-">MPIN256.CLIENT_1(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT) ⇒</a></li><li><a href="#mpin256client_2x-y-sec-">MPIN256.CLIENT_2(X, Y, SEC) ⇒</a></li><li><a href="#mpin256server_1sha-date-cid-hid-htid-">MPIN256.SERVER_1(sha, date, CID, HID, HTID) ⇒</a></li><li><a href="#mpin256server_2date-hid-htid-y-sst-xid-xcid-msec-e-f-pa-">MPIN256.SERVER_2(date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, Pa) ⇒</a></li><li><a href="#mpin256kangarooe-f-">MPIN256.KANGAROO(E, F) ⇒</a></li><li><a href="#mpin256get_time-">MPIN256.GET_TIME() ⇒</a></li><li><a href="#mpin256clientsha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-timevalue-y-message-">MPIN256.CLIENT(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT, TimeValue, Y, Message) ⇒</a></li><li><a href="#mpin256serversha-date-hid-htid-y-sst-xid-xcid-msec-e-f-cid-timevalue-message-pa-">MPIN256.SERVER(sha, date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, CID, TimeValue, MESSAGE, Pa) ⇒</a></li><li><a href="#mpin256precomputetoken-cid-g1-g2-">MPIN256.PRECOMPUTE(TOKEN, CID, G1, G2) ⇒</a></li><li><a href="#mpin256hash_allsha-hid-xid-xcid-sec-y-r-w-">MPIN256.HASH_ALL(sha, HID, xID, xCID, SEC, Y, R, W) ⇒</a></li><li><a href="#mpin256client_keysha-g1-g2-pin-r-x-h-wcid-ck-">MPIN256.CLIENT_KEY(sha, G1, G2, pin, R, X, H, wCID, CK) ⇒</a></li><li><a href="#mpin256server_keyh-z-sst-w-h-hid-xid-xcid-sk-">MPIN256.SERVER_KEY(h, Z, SST, W, H, HID, xID, xCID, SK) ⇒</a></li><li><a href="#mpin256get_dvs_keypairrng-z-pa-">MPIN256.GET_DVS_KEYPAIR(rng, Z, Pa) ⇒</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<strong>this</strong>: <code>{&quot;{&quot;}MPIN256{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>rng</td><td>cryptographically secure random number generator</td></tr><tr><td>Z</td><td>an output internally randomly generated if R!=NULL, otherwise it must be provided as an input</td></tr><tr><td>Pa</td><td>the output public key for the client</td></tr></tbody></table></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/cryptojs/mpin192"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">MPIN192</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/cryptojs/pair"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">PAIR</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#mpin256" class="table-of-contents__link toc-highlight">MPIN256</a><ul><li><a href="#new-mpin256" class="table-of-contents__link toc-highlight">new MPIN256()</a></li><li><a href="#mpin256today-" class="table-of-contents__link toc-highlight">MPIN256.today() ⇒</a></li><li><a href="#mpin256bytestostringb-" class="table-of-contents__link toc-highlight">MPIN256.bytestostring(b) ⇒</a></li><li><a href="#mpin256stringtobytess-" class="table-of-contents__link toc-highlight">MPIN256.stringtobytes(s) ⇒</a></li><li><a href="#mpin256comparebytesa-b-" class="table-of-contents__link toc-highlight">MPIN256.comparebytes(a, b) ⇒</a></li><li><a href="#mpin256mpin_hashc-u-" class="table-of-contents__link toc-highlight">MPIN256.mpin_hash(c, U) ⇒</a></li><li><a href="#mpin256hashitsha-n-b-" class="table-of-contents__link toc-highlight">MPIN256.hashit(sha, n, B) ⇒</a></li><li><a href="#mpin256mapu-cb-" class="table-of-contents__link toc-highlight">MPIN256.map(u, cb) ⇒</a></li><li><a href="#mpin256unmapu-p-" class="table-of-contents__link toc-highlight">MPIN256.unmap(u, P) ⇒</a></li><li><a href="#mpin256recombine_g1r1-r2-r-" class="table-of-contents__link toc-highlight">MPIN256.RECOMBINE_G1(R1, R2, R) ⇒</a></li><li><a href="#mpin256recombine_g2w1-w2-w-" class="table-of-contents__link toc-highlight">MPIN256.RECOMBINE_G2(W1, W2, W) ⇒</a></li><li><a href="#mpin256hash_idsha-id-" class="table-of-contents__link toc-highlight">MPIN256.HASH_ID(sha, ID) ⇒</a></li><li><a href="#mpin256random_generaterng-s-" class="table-of-contents__link toc-highlight">MPIN256.RANDOM_GENERATE(rng, S) ⇒</a></li><li><a href="#mpin256extract_pin-" class="table-of-contents__link toc-highlight">MPIN256.EXTRACT_PIN() ⇒</a></li><li><a href="#mpin256extract_factor-" class="table-of-contents__link toc-highlight">MPIN256.EXTRACT_FACTOR() ⇒</a></li><li><a href="#mpin256restore_factor-" class="table-of-contents__link toc-highlight">MPIN256.RESTORE_FACTOR() ⇒</a></li><li><a href="#mpin256get_server_secrets-sst-" class="table-of-contents__link toc-highlight">MPIN256.GET_SERVER_SECRET(S, SST) ⇒</a></li><li><a href="#mpin256get_g1_multipletype-x-g-w-" class="table-of-contents__link toc-highlight">MPIN256.GET_G1_MULTIPLE(type, x, G, W) ⇒</a></li><li><a href="#mpin256get_client_secrets-cid-cst-" class="table-of-contents__link toc-highlight">MPIN256.GET_CLIENT_SECRET(S, CID, CST) ⇒</a></li><li><a href="#mpin256get_client_permitsha-date-s-cid-ctt-" class="table-of-contents__link toc-highlight">MPIN256.GET_CLIENT_PERMIT(sha, date, S, CID, CTT) ⇒</a></li><li><a href="#mpin256client_1sha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-" class="table-of-contents__link toc-highlight">MPIN256.CLIENT_1(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT) ⇒</a></li><li><a href="#mpin256client_2x-y-sec-" class="table-of-contents__link toc-highlight">MPIN256.CLIENT_2(X, Y, SEC) ⇒</a></li><li><a href="#mpin256server_1sha-date-cid-hid-htid-" class="table-of-contents__link toc-highlight">MPIN256.SERVER_1(sha, date, CID, HID, HTID) ⇒</a></li><li><a href="#mpin256server_2date-hid-htid-y-sst-xid-xcid-msec-e-f-pa-" class="table-of-contents__link toc-highlight">MPIN256.SERVER_2(date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, Pa) ⇒</a></li><li><a href="#mpin256kangarooe-f-" class="table-of-contents__link toc-highlight">MPIN256.KANGAROO(E, F) ⇒</a></li><li><a href="#mpin256get_time-" class="table-of-contents__link toc-highlight">MPIN256.GET_TIME() ⇒</a></li><li><a href="#mpin256clientsha-date-client_id-rng-x-pin-token-sec-xid-xcid-permit-timevalue-y-message-" class="table-of-contents__link toc-highlight">MPIN256.CLIENT(sha, date, CLIENT_ID, rng, X, pin, TOKEN, SEC, xID, xCID, PERMIT, TimeValue, Y, Message) ⇒</a></li><li><a href="#mpin256serversha-date-hid-htid-y-sst-xid-xcid-msec-e-f-cid-timevalue-message-pa-" class="table-of-contents__link toc-highlight">MPIN256.SERVER(sha, date, HID, HTID, Y, SST, xID, xCID, mSEC, E, F, CID, TimeValue, MESSAGE, Pa) ⇒</a></li><li><a href="#mpin256precomputetoken-cid-g1-g2-" class="table-of-contents__link toc-highlight">MPIN256.PRECOMPUTE(TOKEN, CID, G1, G2) ⇒</a></li><li><a href="#mpin256hash_allsha-hid-xid-xcid-sec-y-r-w-" class="table-of-contents__link toc-highlight">MPIN256.HASH_ALL(sha, HID, xID, xCID, SEC, Y, R, W) ⇒</a></li><li><a href="#mpin256client_keysha-g1-g2-pin-r-x-h-wcid-ck-" class="table-of-contents__link toc-highlight">MPIN256.CLIENT_KEY(sha, G1, G2, pin, R, X, H, wCID, CK) ⇒</a></li><li><a href="#mpin256server_keyh-z-sst-w-h-hid-xid-xcid-sk-" class="table-of-contents__link toc-highlight">MPIN256.SERVER_KEY(h, Z, SST, W, H, HID, xID, xCID, SK) ⇒</a></li><li><a href="#mpin256get_dvs_keypairrng-z-pa-" class="table-of-contents__link toc-highlight">MPIN256.GET_DVS_KEYPAIR(rng, Z, Pa) ⇒</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/cryptojs/pair/index.html b/docs/cryptojs/pair/index.html
index 80f5a40..279f6b0 100644
--- a/docs/cryptojs/pair/index.html
+++ b/docs/cryptojs/pair/index.html
@@ -1,228 +1,42 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>PAIR · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;a name=&quot;PAIR&quot;&gt;&lt;/a&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="PAIR · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;a name=&quot;PAIR&quot;&gt;&lt;/a&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>AMCL JavaScript API 1.0.0</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-cryptojs/pair">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">PAIR | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/cryptojs/pair"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="PAIR | Apache Milagro"><meta data-rh="true" name="description" content="PAIR"><meta data-rh="true" property="og:description" content="PAIR"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/cryptojs/pair"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/pair" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/pair" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">PAIR</h1></header><article><div><span><p><a name="PAIR"></a></p>
-<h2><a class="anchor" aria-hidden="true" id="pair"></a><a href="#pair" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>PAIR</h2>
-<p><strong>Kind</strong>: global class<br>
-<strong>this</strong>: <code>{PAIR}</code></p>
-<ul>
-<li><a href="#PAIR">PAIR</a>
-<ul>
-<li><a href="#new_PAIR_new">new PAIR()</a></li>
-<li><a href="#PAIR.line">.line()</a></li>
-<li><a href="#PAIR.initmp">.initmp()</a></li>
-<li><a href="#PAIR.miller">.miller(r, res)</a></li>
-<li><a href="#PAIR.another">.another(r, P1, Q1)</a></li>
-<li><a href="#PAIR.ate">.ate(P1, Q1)</a></li>
-<li><a href="#PAIR.ate2">.ate2(P1, Q1, R1, S1)</a></li>
-<li><a href="#PAIR.fexp">.fexp(m)</a></li>
-<li><a href="#PAIR.lbits">.lbits()</a></li>
-<li><a href="#PAIR.glv">.glv()</a></li>
-<li><a href="#PAIR.gs">.gs()</a></li>
-<li><a href="#PAIR.G1mul">.G1mul(P, e)</a> ⇒</li>
-<li><a href="#PAIR.G2mul">.G2mul(P, e)</a> ⇒</li>
-<li><a href="#PAIR.GTpow">.GTpow(d, e)</a> ⇒</li>
-</ul></li>
-</ul>
-<p><a name="new_PAIR_new"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="new-pair"></a><a href="#new-pair" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>new PAIR()</h3>
-<p>Creates an instance of PAIR</p>
-<p><a name="PAIR.line"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="pairline"></a><a href="#pairline" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>PAIR.line()</h3>
-<p>Line function</p>
-<p><strong>Kind</strong>: static method of <a href="#PAIR"><code>PAIR</code></a>  <br>
-<strong>this</strong>: <code>{PAIR}</code>  <br>
-<a name="PAIR.initmp"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="pairinitmp"></a><a href="#pairinitmp" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>PAIR.initmp()</h3>
-<p>prepare for multi-pairing</p>
-<p><strong>Kind</strong>: static method of <a href="#PAIR"><code>PAIR</code></a>  <br>
-<strong>this</strong>: <code>{PAIR}</code>  <br>
-<a name="PAIR.miller"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="pairmillerr-res"></a><a href="#pairmillerr-res" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>PAIR.miller(r, res)</h3>
-<p>basic Miller loop</p>
-<p><strong>Kind</strong>: static method of <a href="#PAIR"><code>PAIR</code></a>  <br>
-<strong>this</strong>: <code>{PAIR}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>r</td><td>FP12 precomputed array of accumulated line functions</td></tr>
-<tr><td>res</td><td>FP12 result</td></tr>
-</tbody>
-</table>
-<p><a name="PAIR.another"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="pairanotherr-p1-q1"></a><a href="#pairanotherr-p1-q1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>PAIR.another(r, P1, Q1)</h3>
-<p>Precompute line functions for n-pairing</p>
-<p><strong>Kind</strong>: static method of <a href="#PAIR"><code>PAIR</code></a>  <br>
-<strong>this</strong>: <code>{PAIR}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>r</td><td>array of precomputed FP48 products of line functions</td></tr>
-<tr><td>P1</td><td>An element of G2</td></tr>
-<tr><td>Q1</td><td>An element of G1</td></tr>
-</tbody>
-</table>
-<p><a name="PAIR.ate"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="pairatep1-q1"></a><a href="#pairatep1-q1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>PAIR.ate(P1, Q1)</h3>
-<p>Calculate Miller loop for Optimal ATE pairing e(P,Q)</p>
-<p><strong>Kind</strong>: static method of <a href="#PAIR"><code>PAIR</code></a>  <br>
-<strong>this</strong>: <code>{PAIR}</code>  <br>
-<strong>Result</strong>: r An element of GT i.e. result of the pairing calculation e(P,Q)</p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>P1</td><td>An element of G2</td></tr>
-<tr><td>Q1</td><td>An element of G1</td></tr>
-</tbody>
-</table>
-<p><a name="PAIR.ate2"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="pairate2p1-q1-r1-s1"></a><a href="#pairate2p1-q1-r1-s1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>PAIR.ate2(P1, Q1, R1, S1)</h3>
-<p>Calculate Miller loop for Optimal ATE double-pairing e(P,Q).e(R,S)</p>
-<p><strong>Kind</strong>: static method of <a href="#PAIR"><code>PAIR</code></a>  <br>
-<strong>this</strong>: <code>{PAIR}</code>  <br>
-<strong>Result</strong>: r An element of GT i.e. result of the double pairing calculation e(P,Q).e(R,S)</p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>P1</td><td>An element of G2</td></tr>
-<tr><td>Q1</td><td>An element of G1</td></tr>
-<tr><td>R1</td><td>An element of G2</td></tr>
-<tr><td>S1</td><td>An element of G1</td></tr>
-</tbody>
-</table>
-<p><a name="PAIR.fexp"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="pairfexpm"></a><a href="#pairfexpm" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>PAIR.fexp(m)</h3>
-<p>Final exponentiation of pairing, converts output of Miller loop to element in GT</p>
-<p><strong>Kind</strong>: static method of <a href="#PAIR"><code>PAIR</code></a>  <br>
-<strong>this</strong>: <code>{PAIR}</code>  <br>
-<strong>Result</strong>: r m^((p^12-1)/r) where p is modulus and r is the group order</p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>m</td><td>FP12 value</td></tr>
-</tbody>
-</table>
-<p><a name="PAIR.lbits"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="pairlbits"></a><a href="#pairlbits" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>PAIR.lbits()</h3>
-<p>prepare ate parameter, n=6u+2 (BN) or n=u (BLS), n3=3*n</p>
-<p><strong>Kind</strong>: static method of <a href="#PAIR"><code>PAIR</code></a>  <br>
-<strong>this</strong>: <code>{PAIR}</code>  <br>
-<a name="PAIR.glv"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="pairglv"></a><a href="#pairglv" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>PAIR.glv()</h3>
-<p>GLV method</p>
-<p><strong>Kind</strong>: static method of <a href="#PAIR"><code>PAIR</code></a>  <br>
-<strong>this</strong>: <code>{PAIR}</code>  <br>
-<a name="PAIR.gs"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="pairgs"></a><a href="#pairgs" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>PAIR.gs()</h3>
-<p>Galbraith &amp; Scott Method</p>
-<p><strong>Kind</strong>: static method of <a href="#PAIR"><code>PAIR</code></a>  <br>
-<strong>this</strong>: <code>{PAIR}</code>  <br>
-<a name="PAIR.G1mul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="pairg1mulp-e-"></a><a href="#pairg1mulp-e-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>PAIR.G1mul(P, e) ⇒</h3>
-<p>Fast point multiplication of a member of the group G1 by a BIG number</p>
-<p><strong>Kind</strong>: static method of <a href="#PAIR"><code>PAIR</code></a>  <br>
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/amcl-overview">AMCL Library</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-overview">AMCL Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API 1.0.0</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/aes">AES</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/big">BIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls">BLS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls192">BLS192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls256">BLS256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/dbig">DBIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp">ECP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ff">FF</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp">FP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp2">FP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp4">FP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp8">FP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp12">FP12</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp16">FP16</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp24">FP24</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp48">FP48</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/gcm">GCM</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash256">HASH256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash384">HASH384</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash512">HASH512</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin">MPIN</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/cryptojs/pair">PAIR</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rand">RAND</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rsa">RSA</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/sha3">SHA3</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/unit64">UInt64</a></li></ul></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL Library</span><meta itemprop="position" content="1"></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL JavaScript API 1.0.0</span><meta itemprop="position" content="2"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">PAIR</span><meta itemprop="position" content="3"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>PAIR</h1></header><a name="PAIR"></a><h2 class="anchor anchorWithStickyNavbar_LWe7" id="pair">PAIR<a class="hash-link" href="#pair" title="Direct link to heading">​</a></h2><p><strong>Kind</strong>: global class<br>
+<strong>this</strong>: <code>{&quot;{&quot;}PAIR{&quot;}&quot;}</code>  </p><ul><li><a href="#PAIR">PAIR</a><ul><li><a href="#new_PAIR_new">new PAIR()</a></li><li><a href="#PAIR.line">.line()</a></li><li><a href="#PAIR.initmp">.initmp()</a></li><li><a href="#PAIR.miller">.miller(r, res)</a></li><li><a href="#PAIR.another">.another(r, P1, Q1)</a></li><li><a href="#PAIR.ate">.ate(P1, Q1)</a></li><li><a href="#PAIR.ate2">.ate2(P1, Q1, R1, S1)</a></li><li><a href="#PAIR.fexp">.fexp(m)</a></li><li><a href="#PAIR.lbits">.lbits()</a></li><li><a href="#PAIR.glv">.glv()</a></li><li><a href="#PAIR.gs">.gs()</a></li><li><a href="#PAIR.G1mul">.G1mul(P, e)</a> ⇒</li><li><a href="#PAIR.G2mul">.G2mul(P, e)</a> ⇒</li><li><a href="#PAIR.GTpow">.GTpow(d, e)</a> ⇒</li></ul></li></ul><a name="new_PAIR_new"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="new-pair">new PAIR()<a class="hash-link" href="#new-pair" title="Direct link to heading">​</a></h3><p>Creates an instance of PAIR</p><a name="PAIR.line"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="pairline">PAIR.line()<a class="hash-link" href="#pairline" title="Direct link to heading">​</a></h3><p>Line function</p><p><strong>Kind</strong>: static method of <a href="#PAIR"><code>PAIR</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}PAIR{&quot;}&quot;}</code>  </p><a name="PAIR.initmp"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="pairinitmp">PAIR.initmp()<a class="hash-link" href="#pairinitmp" title="Direct link to heading">​</a></h3><p>prepare for multi-pairing</p><p><strong>Kind</strong>: static method of <a href="#PAIR"><code>PAIR</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}PAIR{&quot;}&quot;}</code>  </p><a name="PAIR.miller"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="pairmillerr-res">PAIR.miller(r, res)<a class="hash-link" href="#pairmillerr-res" title="Direct link to heading">​</a></h3><p>basic Miller loop</p><p><strong>Kind</strong>: static method of <a href="#PAIR"><code>PAIR</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}PAIR{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>r</td><td>FP12 precomputed array of accumulated line functions</td></tr><tr><td>res</td><td>FP12 result</td></tr></tbody></table><a name="PAIR.another"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="pairanotherr-p1-q1">PAIR.another(r, P1, Q1)<a class="hash-link" href="#pairanotherr-p1-q1" title="Direct link to heading">​</a></h3><p>Precompute line functions for n-pairing</p><p><strong>Kind</strong>: static method of <a href="#PAIR"><code>PAIR</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}PAIR{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>r</td><td>array of precomputed FP48 products of line functions</td></tr><tr><td>P1</td><td>An element of G2</td></tr><tr><td>Q1</td><td>An element of G1</td></tr></tbody></table><a name="PAIR.ate"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="pairatep1-q1">PAIR.ate(P1, Q1)<a class="hash-link" href="#pairatep1-q1" title="Direct link to heading">​</a></h3><p>Calculate Miller loop for Optimal ATE pairing e(P,Q)</p><p><strong>Kind</strong>: static method of <a href="#PAIR"><code>PAIR</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}PAIR{&quot;}&quot;}</code><br>
+<strong>Result</strong>: r An element of GT i.e. result of the pairing calculation e(P,Q)  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>P1</td><td>An element of G2</td></tr><tr><td>Q1</td><td>An element of G1</td></tr></tbody></table><a name="PAIR.ate2"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="pairate2p1-q1-r1-s1">PAIR.ate2(P1, Q1, R1, S1)<a class="hash-link" href="#pairate2p1-q1-r1-s1" title="Direct link to heading">​</a></h3><p>Calculate Miller loop for Optimal ATE double-pairing e(P,Q).e(R,S)</p><p><strong>Kind</strong>: static method of <a href="#PAIR"><code>PAIR</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}PAIR{&quot;}&quot;}</code><br>
+<strong>Result</strong>: r An element of GT i.e. result of the double pairing calculation e(P,Q).e(R,S)  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>P1</td><td>An element of G2</td></tr><tr><td>Q1</td><td>An element of G1</td></tr><tr><td>R1</td><td>An element of G2</td></tr><tr><td>S1</td><td>An element of G1</td></tr></tbody></table><a name="PAIR.fexp"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="pairfexpm">PAIR.fexp(m)<a class="hash-link" href="#pairfexpm" title="Direct link to heading">​</a></h3><p>Final exponentiation of pairing, converts output of Miller loop to element in GT</p><p><strong>Kind</strong>: static method of <a href="#PAIR"><code>PAIR</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}PAIR{&quot;}&quot;}</code><br>
+<strong>Result</strong>: r m^((p^12-1)/r) where p is modulus and r is the group order  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>m</td><td>FP12 value</td></tr></tbody></table><a name="PAIR.lbits"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="pairlbits">PAIR.lbits()<a class="hash-link" href="#pairlbits" title="Direct link to heading">​</a></h3><p>prepare ate parameter, n=6u+2 (BN) or n=u (BLS), n3=3<!-- -->*<!-- -->n</p><p><strong>Kind</strong>: static method of <a href="#PAIR"><code>PAIR</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}PAIR{&quot;}&quot;}</code>  </p><a name="PAIR.glv"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="pairglv">PAIR.glv()<a class="hash-link" href="#pairglv" title="Direct link to heading">​</a></h3><p>GLV method</p><p><strong>Kind</strong>: static method of <a href="#PAIR"><code>PAIR</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}PAIR{&quot;}&quot;}</code>  </p><a name="PAIR.gs"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="pairgs">PAIR.gs()<a class="hash-link" href="#pairgs" title="Direct link to heading">​</a></h3><p>Galbraith &amp; Scott Method</p><p><strong>Kind</strong>: static method of <a href="#PAIR"><code>PAIR</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}PAIR{&quot;}&quot;}</code>  </p><a name="PAIR.G1mul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="pairg1mulp-e-">PAIR.G1mul(P, e) ⇒<a class="hash-link" href="#pairg1mulp-e-" title="Direct link to heading">​</a></h3><p>Fast point multiplication of a member of the group G1 by a BIG number</p><p><strong>Kind</strong>: static method of <a href="#PAIR"><code>PAIR</code></a><br>
 <strong>Returns</strong>: R Member of G1 R=e.P<br>
-<strong>this</strong>: <code>{PAIR}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>P</td><td>Member of G1</td></tr>
-<tr><td>e</td><td>BIG multiplier</td></tr>
-</tbody>
-</table>
-<p><a name="PAIR.G2mul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="pairg2mulp-e-"></a><a href="#pairg2mulp-e-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>PAIR.G2mul(P, e) ⇒</h3>
-<p>Multiply P by e in group G2</p>
-<p><strong>Kind</strong>: static method of <a href="#PAIR"><code>PAIR</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}PAIR{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>P</td><td>Member of G1</td></tr><tr><td>e</td><td>BIG multiplier</td></tr></tbody></table><a name="PAIR.G2mul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="pairg2mulp-e-">PAIR.G2mul(P, e) ⇒<a class="hash-link" href="#pairg2mulp-e-" title="Direct link to heading">​</a></h3><p>Multiply P by e in group G2</p><p><strong>Kind</strong>: static method of <a href="#PAIR"><code>PAIR</code></a><br>
 <strong>Returns</strong>: R Member of G2 R=e.P<br>
-<strong>this</strong>: <code>{PAIR}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>P</td><td>Member of G2</td></tr>
-<tr><td>e</td><td>BIG multiplier</td></tr>
-</tbody>
-</table>
-<p><a name="PAIR.GTpow"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="pairgtpowd-e-"></a><a href="#pairgtpowd-e-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>PAIR.GTpow(d, e) ⇒</h3>
-<p>Fast raising of a member of GT to a BIG power</p>
-<p><strong>Kind</strong>: static method of <a href="#PAIR"><code>PAIR</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}PAIR{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>P</td><td>Member of G2</td></tr><tr><td>e</td><td>BIG multiplier</td></tr></tbody></table><a name="PAIR.GTpow"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="pairgtpowd-e-">PAIR.GTpow(d, e) ⇒<a class="hash-link" href="#pairgtpowd-e-" title="Direct link to heading">​</a></h3><p>Fast raising of a member of GT to a BIG power</p><p><strong>Kind</strong>: static method of <a href="#PAIR"><code>PAIR</code></a><br>
 <strong>Returns</strong>: r d^e<br>
-<strong>this</strong>: <code>{PAIR}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>d</td><td>Member of GT</td></tr>
-<tr><td>e</td><td>BIG exponent</td></tr>
-</tbody>
-</table>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/cryptojs/mpin256"><span class="arrow-prev">← </span><span>MPIN256</span></a><a class="docs-next button" href="/docs/cryptojs/pair192"><span>PAIR192</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#pair">PAIR</a><ul class="toc-headings"><li><a href="#new-pair">new PAIR()</a></li><li><a href="#pairline">PAIR.line()</a></li><li><a href="#pairinitmp">PAIR.initmp()</a></li><li><a href="#pairmillerr-res">PAIR.miller(r, res)</a></li><li><a href="#pairanotherr-p1-q1">PAIR.another(r, P1, Q1)</a></li><li><a href="#pairatep1-q1">PAIR.ate(P1, Q1)</a></li><li><a href="#pairate2p1-q1-r1-s1">PAIR.ate2(P1, Q1, R1, S1)</a></li><li><a href="#pairfexpm">PAIR.fexp(m)</a></li><li><a href="#pairlbits">PAIR.lbits()</a></li><li><a href="#pairglv">PAIR.glv()</a></li><li><a href="#pairgs">PAIR.gs()</a></li><li><a href="#pairg1mulp-e-">PAIR.G1mul(P, e) ⇒</a></li><li><a href="#pairg2mulp-e-">PAIR.G2mul(P, e) ⇒</a></li><li><a href="#pairgtpowd-e-">PAIR.GTpow(d, e) ⇒</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<strong>this</strong>: <code>{&quot;{&quot;}PAIR{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>d</td><td>Member of GT</td></tr><tr><td>e</td><td>BIG exponent</td></tr></tbody></table></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/cryptojs/mpin256"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">MPIN256</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/cryptojs/pair192"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">PAIR192</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#pair" class="table-of-contents__link toc-highlight">PAIR</a><ul><li><a href="#new-pair" class="table-of-contents__link toc-highlight">new PAIR()</a></li><li><a href="#pairline" class="table-of-contents__link toc-highlight">PAIR.line()</a></li><li><a href="#pairinitmp" class="table-of-contents__link toc-highlight">PAIR.initmp()</a></li><li><a href="#pairmillerr-res" class="table-of-contents__link toc-highlight">PAIR.miller(r, res)</a></li><li><a href="#pairanotherr-p1-q1" class="table-of-contents__link toc-highlight">PAIR.another(r, P1, Q1)</a></li><li><a href="#pairatep1-q1" class="table-of-contents__link toc-highlight">PAIR.ate(P1, Q1)</a></li><li><a href="#pairate2p1-q1-r1-s1" class="table-of-contents__link toc-highlight">PAIR.ate2(P1, Q1, R1, S1)</a></li><li><a href="#pairfexpm" class="table-of-contents__link toc-highlight">PAIR.fexp(m)</a></li><li><a href="#pairlbits" class="table-of-contents__link toc-highlight">PAIR.lbits()</a></li><li><a href="#pairglv" class="table-of-contents__link toc-highlight">PAIR.glv()</a></li><li><a href="#pairgs" class="table-of-contents__link toc-highlight">PAIR.gs()</a></li><li><a href="#pairg1mulp-e-" class="table-of-contents__link toc-highlight">PAIR.G1mul(P, e) ⇒</a></li><li><a href="#pairg2mulp-e-" class="table-of-contents__link toc-highlight">PAIR.G2mul(P, e) ⇒</a></li><li><a href="#pairgtpowd-e-" class="table-of-contents__link toc-highlight">PAIR.GTpow(d, e) ⇒</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/cryptojs/pair192/index.html b/docs/cryptojs/pair192/index.html
index 458ea29..f2467c4 100644
--- a/docs/cryptojs/pair192/index.html
+++ b/docs/cryptojs/pair192/index.html
@@ -1,228 +1,42 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>PAIR192 · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;a name=&quot;PAIR192&quot;&gt;&lt;/a&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="PAIR192 · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;a name=&quot;PAIR192&quot;&gt;&lt;/a&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>AMCL JavaScript API 1.0.0</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-cryptojs/pair192">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">PAIR192 | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/cryptojs/pair192"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="PAIR192 | Apache Milagro"><meta data-rh="true" name="description" content="PAIR192"><meta data-rh="true" property="og:description" content="PAIR192"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/cryptojs/pair192"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/pair192" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/pair192" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">PAIR192</h1></header><article><div><span><p><a name="PAIR192"></a></p>
-<h2><a class="anchor" aria-hidden="true" id="pair192"></a><a href="#pair192" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>PAIR192</h2>
-<p><strong>Kind</strong>: global class<br>
-<strong>this</strong>: <code>{PAIR192}</code></p>
-<ul>
-<li><a href="#PAIR192">PAIR192</a>
-<ul>
-<li><a href="#new_PAIR192_new">new PAIR192()</a></li>
-<li><a href="#PAIR192.line">.line()</a></li>
-<li><a href="#PAIR192.initmp">.initmp()</a></li>
-<li><a href="#PAIR192.miller">.miller(r, res)</a></li>
-<li><a href="#PAIR192.another">.another(r, P1, Q1)</a></li>
-<li><a href="#PAIR192.ate">.ate(P1, Q1)</a></li>
-<li><a href="#PAIR192.ate2">.ate2(P1, Q1, R1, S1)</a></li>
-<li><a href="#PAIR192.fexp">.fexp(m)</a></li>
-<li><a href="#PAIR192.lbits">.lbits()</a></li>
-<li><a href="#PAIR192.glv">.glv()</a></li>
-<li><a href="#PAIR192.gs">.gs()</a></li>
-<li><a href="#PAIR192.G1mul">.G1mul(P, e)</a> ⇒</li>
-<li><a href="#PAIR192.G2mul">.G2mul(P, e)</a> ⇒</li>
-<li><a href="#PAIR192.GTpow">.GTpow(d, e)</a> ⇒</li>
-</ul></li>
-</ul>
-<p><a name="new_PAIR192_new"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="new-pair192"></a><a href="#new-pair192" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>new PAIR192()</h3>
-<p>Creates an instance of PAIR192</p>
-<p><a name="PAIR192.line"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="pair192line"></a><a href="#pair192line" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>PAIR192.line()</h3>
-<p>Line function</p>
-<p><strong>Kind</strong>: static method of <a href="#PAIR192"><code>PAIR192</code></a>  <br>
-<strong>this</strong>: <code>{PAIR192}</code>  <br>
-<a name="PAIR192.initmp"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="pair192initmp"></a><a href="#pair192initmp" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>PAIR192.initmp()</h3>
-<p>prepare for multi-pairing</p>
-<p><strong>Kind</strong>: static method of <a href="#PAIR192"><code>PAIR192</code></a>  <br>
-<strong>this</strong>: <code>{PAIR192}</code>  <br>
-<a name="PAIR192.miller"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="pair192millerr-res"></a><a href="#pair192millerr-res" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>PAIR192.miller(r, res)</h3>
-<p>basic Miller loop</p>
-<p><strong>Kind</strong>: static method of <a href="#PAIR192"><code>PAIR192</code></a>  <br>
-<strong>this</strong>: <code>{PAIR192}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>r</td><td>FP24 precomputed array of accumulated line functions</td></tr>
-<tr><td>res</td><td>FP24 result</td></tr>
-</tbody>
-</table>
-<p><a name="PAIR192.another"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="pair192anotherr-p1-q1"></a><a href="#pair192anotherr-p1-q1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>PAIR192.another(r, P1, Q1)</h3>
-<p>Precompute line functions for n-pairing</p>
-<p><strong>Kind</strong>: static method of <a href="#PAIR192"><code>PAIR192</code></a>  <br>
-<strong>this</strong>: <code>{PAIR192}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>r</td><td>array of precomputed FP24 products of line functions</td></tr>
-<tr><td>P1</td><td>An element of G2</td></tr>
-<tr><td>Q1</td><td>An element of G1</td></tr>
-</tbody>
-</table>
-<p><a name="PAIR192.ate"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="pair192atep1-q1"></a><a href="#pair192atep1-q1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>PAIR192.ate(P1, Q1)</h3>
-<p>Calculate Miller loop for Optimal ATE pairing e(P,Q)</p>
-<p><strong>Kind</strong>: static method of <a href="#PAIR192"><code>PAIR192</code></a>  <br>
-<strong>this</strong>: <code>{PAIR192}</code>  <br>
-<strong>Result</strong>: r An element of GT i.e. result of the pairing calculation e(P,Q)</p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>P1</td><td>An element of G2</td></tr>
-<tr><td>Q1</td><td>An element of G1</td></tr>
-</tbody>
-</table>
-<p><a name="PAIR192.ate2"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="pair192ate2p1-q1-r1-s1"></a><a href="#pair192ate2p1-q1-r1-s1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>PAIR192.ate2(P1, Q1, R1, S1)</h3>
-<p>Calculate Miller loop for Optimal ATE double-pairing e(P,Q).e(R,S)</p>
-<p><strong>Kind</strong>: static method of <a href="#PAIR192"><code>PAIR192</code></a>  <br>
-<strong>this</strong>: <code>{PAIR192}</code>  <br>
-<strong>Result</strong>: r An element of GT i.e. result of the double pairing calculation e(P,Q).e(R,S)</p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>P1</td><td>An element of G2</td></tr>
-<tr><td>Q1</td><td>An element of G1</td></tr>
-<tr><td>R1</td><td>An element of G2</td></tr>
-<tr><td>S1</td><td>An element of G1</td></tr>
-</tbody>
-</table>
-<p><a name="PAIR192.fexp"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="pair192fexpm"></a><a href="#pair192fexpm" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>PAIR192.fexp(m)</h3>
-<p>Final exponentiation of pairing, converts output of Miller loop to element in GT</p>
-<p><strong>Kind</strong>: static method of <a href="#PAIR192"><code>PAIR192</code></a>  <br>
-<strong>this</strong>: <code>{PAIR192}</code>  <br>
-<strong>Result</strong>: r m^((p^12-1)/r) where p is modulus and r is the group order</p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>m</td><td>FP24 value</td></tr>
-</tbody>
-</table>
-<p><a name="PAIR192.lbits"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="pair192lbits"></a><a href="#pair192lbits" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>PAIR192.lbits()</h3>
-<p>prepare ate parameter, n=6u+2 (BN) or n=u (BLS), n3=3*n</p>
-<p><strong>Kind</strong>: static method of <a href="#PAIR192"><code>PAIR192</code></a>  <br>
-<strong>this</strong>: <code>{PAIR192}</code>  <br>
-<a name="PAIR192.glv"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="pair192glv"></a><a href="#pair192glv" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>PAIR192.glv()</h3>
-<p>GLV method</p>
-<p><strong>Kind</strong>: static method of <a href="#PAIR192"><code>PAIR192</code></a>  <br>
-<strong>this</strong>: <code>{PAIR192}</code>  <br>
-<a name="PAIR192.gs"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="pair192gs"></a><a href="#pair192gs" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>PAIR192.gs()</h3>
-<p>Galbraith &amp; Scott Method</p>
-<p><strong>Kind</strong>: static method of <a href="#PAIR192"><code>PAIR192</code></a>  <br>
-<strong>this</strong>: <code>{PAIR192}</code>  <br>
-<a name="PAIR192.G1mul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="pair192g1mulp-e-"></a><a href="#pair192g1mulp-e-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>PAIR192.G1mul(P, e) ⇒</h3>
-<p>Fast point multiplication of a member of the group G1 by a BIG number</p>
-<p><strong>Kind</strong>: static method of <a href="#PAIR192"><code>PAIR192</code></a>  <br>
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/amcl-overview">AMCL Library</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-overview">AMCL Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API 1.0.0</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/aes">AES</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/big">BIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls">BLS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls192">BLS192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls256">BLS256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/dbig">DBIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp">ECP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ff">FF</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp">FP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp2">FP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp4">FP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp8">FP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp12">FP12</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp16">FP16</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp24">FP24</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp48">FP48</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/gcm">GCM</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash256">HASH256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash384">HASH384</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash512">HASH512</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin">MPIN</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair">PAIR</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rand">RAND</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rsa">RSA</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/sha3">SHA3</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/unit64">UInt64</a></li></ul></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL Library</span><meta itemprop="position" content="1"></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL JavaScript API 1.0.0</span><meta itemprop="position" content="2"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">PAIR192</span><meta itemprop="position" content="3"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>PAIR192</h1></header><a name="PAIR192"></a><h2 class="anchor anchorWithStickyNavbar_LWe7" id="pair192">PAIR192<a class="hash-link" href="#pair192" title="Direct link to heading">​</a></h2><p><strong>Kind</strong>: global class<br>
+<strong>this</strong>: <code>{&quot;{&quot;}PAIR192{&quot;}&quot;}</code>  </p><ul><li><a href="#PAIR192">PAIR192</a><ul><li><a href="#new_PAIR192_new">new PAIR192()</a></li><li><a href="#PAIR192.line">.line()</a></li><li><a href="#PAIR192.initmp">.initmp()</a></li><li><a href="#PAIR192.miller">.miller(r, res)</a></li><li><a href="#PAIR192.another">.another(r, P1, Q1)</a></li><li><a href="#PAIR192.ate">.ate(P1, Q1)</a></li><li><a href="#PAIR192.ate2">.ate2(P1, Q1, R1, S1)</a></li><li><a href="#PAIR192.fexp">.fexp(m)</a></li><li><a href="#PAIR192.lbits">.lbits()</a></li><li><a href="#PAIR192.glv">.glv()</a></li><li><a href="#PAIR192.gs">.gs()</a></li><li><a href="#PAIR192.G1mul">.G1mul(P, e)</a> ⇒</li><li><a href="#PAIR192.G2mul">.G2mul(P, e)</a> ⇒</li><li><a href="#PAIR192.GTpow">.GTpow(d, e)</a> ⇒</li></ul></li></ul><a name="new_PAIR192_new"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="new-pair192">new PAIR192()<a class="hash-link" href="#new-pair192" title="Direct link to heading">​</a></h3><p>Creates an instance of PAIR192</p><a name="PAIR192.line"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="pair192line">PAIR192.line()<a class="hash-link" href="#pair192line" title="Direct link to heading">​</a></h3><p>Line function</p><p><strong>Kind</strong>: static method of <a href="#PAIR192"><code>PAIR192</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}PAIR192{&quot;}&quot;}</code>  </p><a name="PAIR192.initmp"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="pair192initmp">PAIR192.initmp()<a class="hash-link" href="#pair192initmp" title="Direct link to heading">​</a></h3><p>prepare for multi-pairing</p><p><strong>Kind</strong>: static method of <a href="#PAIR192"><code>PAIR192</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}PAIR192{&quot;}&quot;}</code>  </p><a name="PAIR192.miller"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="pair192millerr-res">PAIR192.miller(r, res)<a class="hash-link" href="#pair192millerr-res" title="Direct link to heading">​</a></h3><p>basic Miller loop</p><p><strong>Kind</strong>: static method of <a href="#PAIR192"><code>PAIR192</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}PAIR192{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>r</td><td>FP24 precomputed array of accumulated line functions</td></tr><tr><td>res</td><td>FP24 result</td></tr></tbody></table><a name="PAIR192.another"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="pair192anotherr-p1-q1">PAIR192.another(r, P1, Q1)<a class="hash-link" href="#pair192anotherr-p1-q1" title="Direct link to heading">​</a></h3><p>Precompute line functions for n-pairing</p><p><strong>Kind</strong>: static method of <a href="#PAIR192"><code>PAIR192</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}PAIR192{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>r</td><td>array of precomputed FP24 products of line functions</td></tr><tr><td>P1</td><td>An element of G2</td></tr><tr><td>Q1</td><td>An element of G1</td></tr></tbody></table><a name="PAIR192.ate"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="pair192atep1-q1">PAIR192.ate(P1, Q1)<a class="hash-link" href="#pair192atep1-q1" title="Direct link to heading">​</a></h3><p>Calculate Miller loop for Optimal ATE pairing e(P,Q)</p><p><strong>Kind</strong>: static method of <a href="#PAIR192"><code>PAIR192</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}PAIR192{&quot;}&quot;}</code><br>
+<strong>Result</strong>: r An element of GT i.e. result of the pairing calculation e(P,Q)  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>P1</td><td>An element of G2</td></tr><tr><td>Q1</td><td>An element of G1</td></tr></tbody></table><a name="PAIR192.ate2"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="pair192ate2p1-q1-r1-s1">PAIR192.ate2(P1, Q1, R1, S1)<a class="hash-link" href="#pair192ate2p1-q1-r1-s1" title="Direct link to heading">​</a></h3><p>Calculate Miller loop for Optimal ATE double-pairing e(P,Q).e(R,S)</p><p><strong>Kind</strong>: static method of <a href="#PAIR192"><code>PAIR192</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}PAIR192{&quot;}&quot;}</code><br>
+<strong>Result</strong>: r An element of GT i.e. result of the double pairing calculation e(P,Q).e(R,S)  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>P1</td><td>An element of G2</td></tr><tr><td>Q1</td><td>An element of G1</td></tr><tr><td>R1</td><td>An element of G2</td></tr><tr><td>S1</td><td>An element of G1</td></tr></tbody></table><a name="PAIR192.fexp"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="pair192fexpm">PAIR192.fexp(m)<a class="hash-link" href="#pair192fexpm" title="Direct link to heading">​</a></h3><p>Final exponentiation of pairing, converts output of Miller loop to element in GT</p><p><strong>Kind</strong>: static method of <a href="#PAIR192"><code>PAIR192</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}PAIR192{&quot;}&quot;}</code><br>
+<strong>Result</strong>: r m^((p^12-1)/r) where p is modulus and r is the group order  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>m</td><td>FP24 value</td></tr></tbody></table><a name="PAIR192.lbits"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="pair192lbits">PAIR192.lbits()<a class="hash-link" href="#pair192lbits" title="Direct link to heading">​</a></h3><p>prepare ate parameter, n=6u+2 (BN) or n=u (BLS), n3=3<!-- -->*<!-- -->n</p><p><strong>Kind</strong>: static method of <a href="#PAIR192"><code>PAIR192</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}PAIR192{&quot;}&quot;}</code>  </p><a name="PAIR192.glv"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="pair192glv">PAIR192.glv()<a class="hash-link" href="#pair192glv" title="Direct link to heading">​</a></h3><p>GLV method</p><p><strong>Kind</strong>: static method of <a href="#PAIR192"><code>PAIR192</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}PAIR192{&quot;}&quot;}</code>  </p><a name="PAIR192.gs"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="pair192gs">PAIR192.gs()<a class="hash-link" href="#pair192gs" title="Direct link to heading">​</a></h3><p>Galbraith &amp; Scott Method</p><p><strong>Kind</strong>: static method of <a href="#PAIR192"><code>PAIR192</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}PAIR192{&quot;}&quot;}</code>  </p><a name="PAIR192.G1mul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="pair192g1mulp-e-">PAIR192.G1mul(P, e) ⇒<a class="hash-link" href="#pair192g1mulp-e-" title="Direct link to heading">​</a></h3><p>Fast point multiplication of a member of the group G1 by a BIG number</p><p><strong>Kind</strong>: static method of <a href="#PAIR192"><code>PAIR192</code></a><br>
 <strong>Returns</strong>: R Member of G1 R=e.P<br>
-<strong>this</strong>: <code>{PAIR192}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>P</td><td>Member of G1</td></tr>
-<tr><td>e</td><td>BIG multiplier</td></tr>
-</tbody>
-</table>
-<p><a name="PAIR192.G2mul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="pair192g2mulp-e-"></a><a href="#pair192g2mulp-e-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>PAIR192.G2mul(P, e) ⇒</h3>
-<p>Multiply P by e in group G2</p>
-<p><strong>Kind</strong>: static method of <a href="#PAIR192"><code>PAIR192</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}PAIR192{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>P</td><td>Member of G1</td></tr><tr><td>e</td><td>BIG multiplier</td></tr></tbody></table><a name="PAIR192.G2mul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="pair192g2mulp-e-">PAIR192.G2mul(P, e) ⇒<a class="hash-link" href="#pair192g2mulp-e-" title="Direct link to heading">​</a></h3><p>Multiply P by e in group G2</p><p><strong>Kind</strong>: static method of <a href="#PAIR192"><code>PAIR192</code></a><br>
 <strong>Returns</strong>: R Member of G2 R=e.P<br>
-<strong>this</strong>: <code>{PAIR192}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>P</td><td>Member of G2</td></tr>
-<tr><td>e</td><td>BIG multiplier</td></tr>
-</tbody>
-</table>
-<p><a name="PAIR192.GTpow"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="pair192gtpowd-e-"></a><a href="#pair192gtpowd-e-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>PAIR192.GTpow(d, e) ⇒</h3>
-<p>Fast raising of a member of GT to a BIG power</p>
-<p><strong>Kind</strong>: static method of <a href="#PAIR192"><code>PAIR192</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}PAIR192{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>P</td><td>Member of G2</td></tr><tr><td>e</td><td>BIG multiplier</td></tr></tbody></table><a name="PAIR192.GTpow"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="pair192gtpowd-e-">PAIR192.GTpow(d, e) ⇒<a class="hash-link" href="#pair192gtpowd-e-" title="Direct link to heading">​</a></h3><p>Fast raising of a member of GT to a BIG power</p><p><strong>Kind</strong>: static method of <a href="#PAIR192"><code>PAIR192</code></a><br>
 <strong>Returns</strong>: r d^e<br>
-<strong>this</strong>: <code>{PAIR192}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>d</td><td>Member of GT</td></tr>
-<tr><td>e</td><td>BIG exponent</td></tr>
-</tbody>
-</table>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/cryptojs/pair"><span class="arrow-prev">← </span><span>PAIR</span></a><a class="docs-next button" href="/docs/cryptojs/pair256"><span>PAIR256</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#pair192">PAIR192</a><ul class="toc-headings"><li><a href="#new-pair192">new PAIR192()</a></li><li><a href="#pair192line">PAIR192.line()</a></li><li><a href="#pair192initmp">PAIR192.initmp()</a></li><li><a href="#pair192millerr-res">PAIR192.miller(r, res)</a></li><li><a href="#pair192anotherr-p1-q1">PAIR192.another(r, P1, Q1)</a></li><li><a href="#pair192atep1-q1">PAIR192.ate(P1, Q1)</a></li><li><a href="#pair192ate2p1-q1-r1-s1">PAIR192.ate2(P1, Q1, R1, S1)</a></li><li><a href="#pair192fexpm">PAIR192.fexp(m)</a></li><li><a href="#pair192lbits">PAIR192.lbits()</a></li><li><a href="#pair192glv">PAIR192.glv()</a></li><li><a href="#pair192gs">PAIR192.gs()</a></li><li><a href="#pair192g1mulp-e-">PAIR192.G1mul(P, e) ⇒</a></li><li><a href="#pair192g2mulp-e-">PAIR192.G2mul(P, e) ⇒</a></li><li><a href="#pair192gtpowd-e-">PAIR192.GTpow(d, e) ⇒</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<strong>this</strong>: <code>{&quot;{&quot;}PAIR192{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>d</td><td>Member of GT</td></tr><tr><td>e</td><td>BIG exponent</td></tr></tbody></table></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/cryptojs/pair"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">PAIR</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/cryptojs/pair256"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">PAIR256</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#pair192" class="table-of-contents__link toc-highlight">PAIR192</a><ul><li><a href="#new-pair192" class="table-of-contents__link toc-highlight">new PAIR192()</a></li><li><a href="#pair192line" class="table-of-contents__link toc-highlight">PAIR192.line()</a></li><li><a href="#pair192initmp" class="table-of-contents__link toc-highlight">PAIR192.initmp()</a></li><li><a href="#pair192millerr-res" class="table-of-contents__link toc-highlight">PAIR192.miller(r, res)</a></li><li><a href="#pair192anotherr-p1-q1" class="table-of-contents__link toc-highlight">PAIR192.another(r, P1, Q1)</a></li><li><a href="#pair192atep1-q1" class="table-of-contents__link toc-highlight">PAIR192.ate(P1, Q1)</a></li><li><a href="#pair192ate2p1-q1-r1-s1" class="table-of-contents__link toc-highlight">PAIR192.ate2(P1, Q1, R1, S1)</a></li><li><a href="#pair192fexpm" class="table-of-contents__link toc-highlight">PAIR192.fexp(m)</a></li><li><a href="#pair192lbits" class="table-of-contents__link toc-highlight">PAIR192.lbits()</a></li><li><a href="#pair192glv" class="table-of-contents__link toc-highlight">PAIR192.glv()</a></li><li><a href="#pair192gs" class="table-of-contents__link toc-highlight">PAIR192.gs()</a></li><li><a href="#pair192g1mulp-e-" class="table-of-contents__link toc-highlight">PAIR192.G1mul(P, e) ⇒</a></li><li><a href="#pair192g2mulp-e-" class="table-of-contents__link toc-highlight">PAIR192.G2mul(P, e) ⇒</a></li><li><a href="#pair192gtpowd-e-" class="table-of-contents__link toc-highlight">PAIR192.GTpow(d, e) ⇒</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/cryptojs/pair256/index.html b/docs/cryptojs/pair256/index.html
index 0bfc6ba..d1d5bac 100644
--- a/docs/cryptojs/pair256/index.html
+++ b/docs/cryptojs/pair256/index.html
@@ -1,228 +1,42 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>PAIR256 · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;a name=&quot;PAIR256&quot;&gt;&lt;/a&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="PAIR256 · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;a name=&quot;PAIR256&quot;&gt;&lt;/a&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>AMCL JavaScript API 1.0.0</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-cryptojs/pair256">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">PAIR256 | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/cryptojs/pair256"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="PAIR256 | Apache Milagro"><meta data-rh="true" name="description" content="PAIR256"><meta data-rh="true" property="og:description" content="PAIR256"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/cryptojs/pair256"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/pair256" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/pair256" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">PAIR256</h1></header><article><div><span><p><a name="PAIR256"></a></p>
-<h2><a class="anchor" aria-hidden="true" id="pair256"></a><a href="#pair256" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>PAIR256</h2>
-<p><strong>Kind</strong>: global class<br>
-<strong>this</strong>: <code>{PAIR256}</code></p>
-<ul>
-<li><a href="#PAIR256">PAIR256</a>
-<ul>
-<li><a href="#new_PAIR256_new">new PAIR256()</a></li>
-<li><a href="#PAIR256.line">.line()</a></li>
-<li><a href="#PAIR256.initmp">.initmp()</a></li>
-<li><a href="#PAIR256.miller">.miller(r, res)</a></li>
-<li><a href="#PAIR256.another">.another(r, P1, Q1)</a></li>
-<li><a href="#PAIR256.ate">.ate(P1, Q1)</a></li>
-<li><a href="#PAIR256.ate2">.ate2(P1, Q1, R1, S1)</a></li>
-<li><a href="#PAIR256.fexp">.fexp(m)</a></li>
-<li><a href="#PAIR256.lbits">.lbits()</a></li>
-<li><a href="#PAIR256.glv">.glv()</a></li>
-<li><a href="#PAIR256.gs">.gs()</a></li>
-<li><a href="#PAIR256.G1mul">.G1mul(P, e)</a> ⇒</li>
-<li><a href="#PAIR256.G2mul">.G2mul(P, e)</a> ⇒</li>
-<li><a href="#PAIR256.GTpow">.GTpow(d, e)</a> ⇒</li>
-</ul></li>
-</ul>
-<p><a name="new_PAIR256_new"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="new-pair256"></a><a href="#new-pair256" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>new PAIR256()</h3>
-<p>Creates an instance of PAIR256</p>
-<p><a name="PAIR256.line"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="pair256line"></a><a href="#pair256line" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>PAIR256.line()</h3>
-<p>Line function</p>
-<p><strong>Kind</strong>: static method of <a href="#PAIR256"><code>PAIR256</code></a>  <br>
-<strong>this</strong>: <code>{PAIR256}</code>  <br>
-<a name="PAIR256.initmp"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="pair256initmp"></a><a href="#pair256initmp" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>PAIR256.initmp()</h3>
-<p>prepare for multi-pairing</p>
-<p><strong>Kind</strong>: static method of <a href="#PAIR256"><code>PAIR256</code></a>  <br>
-<strong>this</strong>: <code>{PAIR256}</code>  <br>
-<a name="PAIR256.miller"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="pair256millerr-res"></a><a href="#pair256millerr-res" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>PAIR256.miller(r, res)</h3>
-<p>basic Miller loop</p>
-<p><strong>Kind</strong>: static method of <a href="#PAIR256"><code>PAIR256</code></a>  <br>
-<strong>this</strong>: <code>{PAIR256}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>r</td><td>FP48 precomputed array of accumulated line functions</td></tr>
-<tr><td>res</td><td>FP48 result</td></tr>
-</tbody>
-</table>
-<p><a name="PAIR256.another"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="pair256anotherr-p1-q1"></a><a href="#pair256anotherr-p1-q1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>PAIR256.another(r, P1, Q1)</h3>
-<p>Precompute line functions for n-pairing</p>
-<p><strong>Kind</strong>: static method of <a href="#PAIR256"><code>PAIR256</code></a>  <br>
-<strong>this</strong>: <code>{PAIR256}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>r</td><td>array of precomputed FP48 products of line functions</td></tr>
-<tr><td>P1</td><td>An element of G2</td></tr>
-<tr><td>Q1</td><td>An element of G1</td></tr>
-</tbody>
-</table>
-<p><a name="PAIR256.ate"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="pair256atep1-q1"></a><a href="#pair256atep1-q1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>PAIR256.ate(P1, Q1)</h3>
-<p>Calculate Miller loop for Optimal ATE pairing e(P,Q)</p>
-<p><strong>Kind</strong>: static method of <a href="#PAIR256"><code>PAIR256</code></a>  <br>
-<strong>this</strong>: <code>{PAIR256}</code>  <br>
-<strong>Result</strong>: r An element of GT i.e. result of the pairing calculation e(P,Q)</p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>P1</td><td>An element of G2</td></tr>
-<tr><td>Q1</td><td>An element of G1</td></tr>
-</tbody>
-</table>
-<p><a name="PAIR256.ate2"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="pair256ate2p1-q1-r1-s1"></a><a href="#pair256ate2p1-q1-r1-s1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>PAIR256.ate2(P1, Q1, R1, S1)</h3>
-<p>Calculate Miller loop for Optimal ATE double-pairing e(P,Q).e(R,S)</p>
-<p><strong>Kind</strong>: static method of <a href="#PAIR256"><code>PAIR256</code></a>  <br>
-<strong>this</strong>: <code>{PAIR256}</code>  <br>
-<strong>Result</strong>: r An element of GT i.e. result of the double pairing calculation e(P,Q).e(R,S)</p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>P1</td><td>An element of G2</td></tr>
-<tr><td>Q1</td><td>An element of G1</td></tr>
-<tr><td>R1</td><td>An element of G2</td></tr>
-<tr><td>S1</td><td>An element of G1</td></tr>
-</tbody>
-</table>
-<p><a name="PAIR256.fexp"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="pair256fexpm"></a><a href="#pair256fexpm" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>PAIR256.fexp(m)</h3>
-<p>Final exponentiation of pairing, converts output of Miller loop to element in GT</p>
-<p><strong>Kind</strong>: static method of <a href="#PAIR256"><code>PAIR256</code></a>  <br>
-<strong>this</strong>: <code>{PAIR256}</code>  <br>
-<strong>Result</strong>: r m^((p^12-1)/r) where p is modulus and r is the group order</p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>m</td><td>FP48 value</td></tr>
-</tbody>
-</table>
-<p><a name="PAIR256.lbits"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="pair256lbits"></a><a href="#pair256lbits" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>PAIR256.lbits()</h3>
-<p>prepare ate parameter, n=6u+2 (BN) or n=u (BLS), n3=3*n</p>
-<p><strong>Kind</strong>: static method of <a href="#PAIR256"><code>PAIR256</code></a>  <br>
-<strong>this</strong>: <code>{PAIR256}</code>  <br>
-<a name="PAIR256.glv"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="pair256glv"></a><a href="#pair256glv" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>PAIR256.glv()</h3>
-<p>GLV method</p>
-<p><strong>Kind</strong>: static method of <a href="#PAIR256"><code>PAIR256</code></a>  <br>
-<strong>this</strong>: <code>{PAIR256}</code>  <br>
-<a name="PAIR256.gs"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="pair256gs"></a><a href="#pair256gs" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>PAIR256.gs()</h3>
-<p>Galbraith &amp; Scott Method</p>
-<p><strong>Kind</strong>: static method of <a href="#PAIR256"><code>PAIR256</code></a>  <br>
-<strong>this</strong>: <code>{PAIR256}</code>  <br>
-<a name="PAIR256.G1mul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="pair256g1mulp-e-"></a><a href="#pair256g1mulp-e-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>PAIR256.G1mul(P, e) ⇒</h3>
-<p>Fast point multiplication of a member of the group G1 by a BIG number</p>
-<p><strong>Kind</strong>: static method of <a href="#PAIR256"><code>PAIR256</code></a>  <br>
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/amcl-overview">AMCL Library</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-overview">AMCL Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API 1.0.0</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/aes">AES</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/big">BIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls">BLS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls192">BLS192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls256">BLS256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/dbig">DBIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp">ECP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ff">FF</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp">FP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp2">FP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp4">FP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp8">FP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp12">FP12</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp16">FP16</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp24">FP24</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp48">FP48</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/gcm">GCM</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash256">HASH256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash384">HASH384</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash512">HASH512</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin">MPIN</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair">PAIR</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rand">RAND</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rsa">RSA</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/sha3">SHA3</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/unit64">UInt64</a></li></ul></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL Library</span><meta itemprop="position" content="1"></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL JavaScript API 1.0.0</span><meta itemprop="position" content="2"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">PAIR256</span><meta itemprop="position" content="3"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>PAIR256</h1></header><a name="PAIR256"></a><h2 class="anchor anchorWithStickyNavbar_LWe7" id="pair256">PAIR256<a class="hash-link" href="#pair256" title="Direct link to heading">​</a></h2><p><strong>Kind</strong>: global class<br>
+<strong>this</strong>: <code>{&quot;{&quot;}PAIR256{&quot;}&quot;}</code>  </p><ul><li><a href="#PAIR256">PAIR256</a><ul><li><a href="#new_PAIR256_new">new PAIR256()</a></li><li><a href="#PAIR256.line">.line()</a></li><li><a href="#PAIR256.initmp">.initmp()</a></li><li><a href="#PAIR256.miller">.miller(r, res)</a></li><li><a href="#PAIR256.another">.another(r, P1, Q1)</a></li><li><a href="#PAIR256.ate">.ate(P1, Q1)</a></li><li><a href="#PAIR256.ate2">.ate2(P1, Q1, R1, S1)</a></li><li><a href="#PAIR256.fexp">.fexp(m)</a></li><li><a href="#PAIR256.lbits">.lbits()</a></li><li><a href="#PAIR256.glv">.glv()</a></li><li><a href="#PAIR256.gs">.gs()</a></li><li><a href="#PAIR256.G1mul">.G1mul(P, e)</a> ⇒</li><li><a href="#PAIR256.G2mul">.G2mul(P, e)</a> ⇒</li><li><a href="#PAIR256.GTpow">.GTpow(d, e)</a> ⇒</li></ul></li></ul><a name="new_PAIR256_new"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="new-pair256">new PAIR256()<a class="hash-link" href="#new-pair256" title="Direct link to heading">​</a></h3><p>Creates an instance of PAIR256</p><a name="PAIR256.line"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="pair256line">PAIR256.line()<a class="hash-link" href="#pair256line" title="Direct link to heading">​</a></h3><p>Line function</p><p><strong>Kind</strong>: static method of <a href="#PAIR256"><code>PAIR256</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}PAIR256{&quot;}&quot;}</code>  </p><a name="PAIR256.initmp"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="pair256initmp">PAIR256.initmp()<a class="hash-link" href="#pair256initmp" title="Direct link to heading">​</a></h3><p>prepare for multi-pairing</p><p><strong>Kind</strong>: static method of <a href="#PAIR256"><code>PAIR256</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}PAIR256{&quot;}&quot;}</code>  </p><a name="PAIR256.miller"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="pair256millerr-res">PAIR256.miller(r, res)<a class="hash-link" href="#pair256millerr-res" title="Direct link to heading">​</a></h3><p>basic Miller loop</p><p><strong>Kind</strong>: static method of <a href="#PAIR256"><code>PAIR256</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}PAIR256{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>r</td><td>FP48 precomputed array of accumulated line functions</td></tr><tr><td>res</td><td>FP48 result</td></tr></tbody></table><a name="PAIR256.another"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="pair256anotherr-p1-q1">PAIR256.another(r, P1, Q1)<a class="hash-link" href="#pair256anotherr-p1-q1" title="Direct link to heading">​</a></h3><p>Precompute line functions for n-pairing</p><p><strong>Kind</strong>: static method of <a href="#PAIR256"><code>PAIR256</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}PAIR256{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>r</td><td>array of precomputed FP48 products of line functions</td></tr><tr><td>P1</td><td>An element of G2</td></tr><tr><td>Q1</td><td>An element of G1</td></tr></tbody></table><a name="PAIR256.ate"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="pair256atep1-q1">PAIR256.ate(P1, Q1)<a class="hash-link" href="#pair256atep1-q1" title="Direct link to heading">​</a></h3><p>Calculate Miller loop for Optimal ATE pairing e(P,Q)</p><p><strong>Kind</strong>: static method of <a href="#PAIR256"><code>PAIR256</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}PAIR256{&quot;}&quot;}</code><br>
+<strong>Result</strong>: r An element of GT i.e. result of the pairing calculation e(P,Q)  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>P1</td><td>An element of G2</td></tr><tr><td>Q1</td><td>An element of G1</td></tr></tbody></table><a name="PAIR256.ate2"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="pair256ate2p1-q1-r1-s1">PAIR256.ate2(P1, Q1, R1, S1)<a class="hash-link" href="#pair256ate2p1-q1-r1-s1" title="Direct link to heading">​</a></h3><p>Calculate Miller loop for Optimal ATE double-pairing e(P,Q).e(R,S)</p><p><strong>Kind</strong>: static method of <a href="#PAIR256"><code>PAIR256</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}PAIR256{&quot;}&quot;}</code><br>
+<strong>Result</strong>: r An element of GT i.e. result of the double pairing calculation e(P,Q).e(R,S)  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>P1</td><td>An element of G2</td></tr><tr><td>Q1</td><td>An element of G1</td></tr><tr><td>R1</td><td>An element of G2</td></tr><tr><td>S1</td><td>An element of G1</td></tr></tbody></table><a name="PAIR256.fexp"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="pair256fexpm">PAIR256.fexp(m)<a class="hash-link" href="#pair256fexpm" title="Direct link to heading">​</a></h3><p>Final exponentiation of pairing, converts output of Miller loop to element in GT</p><p><strong>Kind</strong>: static method of <a href="#PAIR256"><code>PAIR256</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}PAIR256{&quot;}&quot;}</code><br>
+<strong>Result</strong>: r m^((p^12-1)/r) where p is modulus and r is the group order  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>m</td><td>FP48 value</td></tr></tbody></table><a name="PAIR256.lbits"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="pair256lbits">PAIR256.lbits()<a class="hash-link" href="#pair256lbits" title="Direct link to heading">​</a></h3><p>prepare ate parameter, n=6u+2 (BN) or n=u (BLS), n3=3<!-- -->*<!-- -->n</p><p><strong>Kind</strong>: static method of <a href="#PAIR256"><code>PAIR256</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}PAIR256{&quot;}&quot;}</code>  </p><a name="PAIR256.glv"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="pair256glv">PAIR256.glv()<a class="hash-link" href="#pair256glv" title="Direct link to heading">​</a></h3><p>GLV method</p><p><strong>Kind</strong>: static method of <a href="#PAIR256"><code>PAIR256</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}PAIR256{&quot;}&quot;}</code>  </p><a name="PAIR256.gs"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="pair256gs">PAIR256.gs()<a class="hash-link" href="#pair256gs" title="Direct link to heading">​</a></h3><p>Galbraith &amp; Scott Method</p><p><strong>Kind</strong>: static method of <a href="#PAIR256"><code>PAIR256</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}PAIR256{&quot;}&quot;}</code>  </p><a name="PAIR256.G1mul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="pair256g1mulp-e-">PAIR256.G1mul(P, e) ⇒<a class="hash-link" href="#pair256g1mulp-e-" title="Direct link to heading">​</a></h3><p>Fast point multiplication of a member of the group G1 by a BIG number</p><p><strong>Kind</strong>: static method of <a href="#PAIR256"><code>PAIR256</code></a><br>
 <strong>Returns</strong>: R Member of G1 R=e.P<br>
-<strong>this</strong>: <code>{PAIR256}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>P</td><td>Member of G1</td></tr>
-<tr><td>e</td><td>BIG multiplier</td></tr>
-</tbody>
-</table>
-<p><a name="PAIR256.G2mul"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="pair256g2mulp-e-"></a><a href="#pair256g2mulp-e-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>PAIR256.G2mul(P, e) ⇒</h3>
-<p>Multiply P by e in group G2</p>
-<p><strong>Kind</strong>: static method of <a href="#PAIR256"><code>PAIR256</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}PAIR256{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>P</td><td>Member of G1</td></tr><tr><td>e</td><td>BIG multiplier</td></tr></tbody></table><a name="PAIR256.G2mul"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="pair256g2mulp-e-">PAIR256.G2mul(P, e) ⇒<a class="hash-link" href="#pair256g2mulp-e-" title="Direct link to heading">​</a></h3><p>Multiply P by e in group G2</p><p><strong>Kind</strong>: static method of <a href="#PAIR256"><code>PAIR256</code></a><br>
 <strong>Returns</strong>: R Member of G2 R=e.P<br>
-<strong>this</strong>: <code>{PAIR256}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>P</td><td>Member of G2</td></tr>
-<tr><td>e</td><td>BIG multiplier</td></tr>
-</tbody>
-</table>
-<p><a name="PAIR256.GTpow"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="pair256gtpowd-e-"></a><a href="#pair256gtpowd-e-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>PAIR256.GTpow(d, e) ⇒</h3>
-<p>Fast raising of a member of GT to a BIG power</p>
-<p><strong>Kind</strong>: static method of <a href="#PAIR256"><code>PAIR256</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}PAIR256{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>P</td><td>Member of G2</td></tr><tr><td>e</td><td>BIG multiplier</td></tr></tbody></table><a name="PAIR256.GTpow"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="pair256gtpowd-e-">PAIR256.GTpow(d, e) ⇒<a class="hash-link" href="#pair256gtpowd-e-" title="Direct link to heading">​</a></h3><p>Fast raising of a member of GT to a BIG power</p><p><strong>Kind</strong>: static method of <a href="#PAIR256"><code>PAIR256</code></a><br>
 <strong>Returns</strong>: r d^e<br>
-<strong>this</strong>: <code>{PAIR256}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>d</td><td>Member of GT</td></tr>
-<tr><td>e</td><td>BIG exponent</td></tr>
-</tbody>
-</table>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/cryptojs/pair192"><span class="arrow-prev">← </span><span>PAIR192</span></a><a class="docs-next button" href="/docs/cryptojs/rand"><span>RAND</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#pair256">PAIR256</a><ul class="toc-headings"><li><a href="#new-pair256">new PAIR256()</a></li><li><a href="#pair256line">PAIR256.line()</a></li><li><a href="#pair256initmp">PAIR256.initmp()</a></li><li><a href="#pair256millerr-res">PAIR256.miller(r, res)</a></li><li><a href="#pair256anotherr-p1-q1">PAIR256.another(r, P1, Q1)</a></li><li><a href="#pair256atep1-q1">PAIR256.ate(P1, Q1)</a></li><li><a href="#pair256ate2p1-q1-r1-s1">PAIR256.ate2(P1, Q1, R1, S1)</a></li><li><a href="#pair256fexpm">PAIR256.fexp(m)</a></li><li><a href="#pair256lbits">PAIR256.lbits()</a></li><li><a href="#pair256glv">PAIR256.glv()</a></li><li><a href="#pair256gs">PAIR256.gs()</a></li><li><a href="#pair256g1mulp-e-">PAIR256.G1mul(P, e) ⇒</a></li><li><a href="#pair256g2mulp-e-">PAIR256.G2mul(P, e) ⇒</a></li><li><a href="#pair256gtpowd-e-">PAIR256.GTpow(d, e) ⇒</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<strong>this</strong>: <code>{&quot;{&quot;}PAIR256{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>d</td><td>Member of GT</td></tr><tr><td>e</td><td>BIG exponent</td></tr></tbody></table></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/cryptojs/pair192"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">PAIR192</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/cryptojs/rand"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">RAND</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#pair256" class="table-of-contents__link toc-highlight">PAIR256</a><ul><li><a href="#new-pair256" class="table-of-contents__link toc-highlight">new PAIR256()</a></li><li><a href="#pair256line" class="table-of-contents__link toc-highlight">PAIR256.line()</a></li><li><a href="#pair256initmp" class="table-of-contents__link toc-highlight">PAIR256.initmp()</a></li><li><a href="#pair256millerr-res" class="table-of-contents__link toc-highlight">PAIR256.miller(r, res)</a></li><li><a href="#pair256anotherr-p1-q1" class="table-of-contents__link toc-highlight">PAIR256.another(r, P1, Q1)</a></li><li><a href="#pair256atep1-q1" class="table-of-contents__link toc-highlight">PAIR256.ate(P1, Q1)</a></li><li><a href="#pair256ate2p1-q1-r1-s1" class="table-of-contents__link toc-highlight">PAIR256.ate2(P1, Q1, R1, S1)</a></li><li><a href="#pair256fexpm" class="table-of-contents__link toc-highlight">PAIR256.fexp(m)</a></li><li><a href="#pair256lbits" class="table-of-contents__link toc-highlight">PAIR256.lbits()</a></li><li><a href="#pair256glv" class="table-of-contents__link toc-highlight">PAIR256.glv()</a></li><li><a href="#pair256gs" class="table-of-contents__link toc-highlight">PAIR256.gs()</a></li><li><a href="#pair256g1mulp-e-" class="table-of-contents__link toc-highlight">PAIR256.G1mul(P, e) ⇒</a></li><li><a href="#pair256g2mulp-e-" class="table-of-contents__link toc-highlight">PAIR256.G2mul(P, e) ⇒</a></li><li><a href="#pair256gtpowd-e-" class="table-of-contents__link toc-highlight">PAIR256.GTpow(d, e) ⇒</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/cryptojs/rand/index.html b/docs/cryptojs/rand/index.html
index 39bd964..3def79b 100644
--- a/docs/cryptojs/rand/index.html
+++ b/docs/cryptojs/rand/index.html
@@ -1,115 +1,28 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>RAND · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;a name=&quot;RAND&quot;&gt;&lt;/a&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="RAND · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;a name=&quot;RAND&quot;&gt;&lt;/a&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>AMCL JavaScript API 1.0.0</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-cryptojs/rand">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">RAND | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/cryptojs/rand"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="RAND | Apache Milagro"><meta data-rh="true" name="description" content="RAND"><meta data-rh="true" property="og:description" content="RAND"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/cryptojs/rand"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/rand" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/rand" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">RAND</h1></header><article><div><span><p><a name="RAND"></a></p>
-<h2><a class="anchor" aria-hidden="true" id="rand"></a><a href="#rand" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>RAND</h2>
-<p><strong>Kind</strong>: global class<br>
-<strong>this</strong>: <code>{RAND}</code></p>
-<ul>
-<li><a href="#RAND">RAND</a>
-<ul>
-<li><a href="#new_RAND_new">new RAND()</a></li>
-<li><em>instance</em>
-<ul>
-<li><a href="#RAND+clean">.clean()</a></li>
-<li><a href="#RAND+sbrand">.sbrand()</a></li>
-<li><a href="#RAND+seed">.seed(rawlen, raw)</a></li>
-<li><a href="#RAND+getByte">.getByte()</a></li>
-</ul></li>
-<li><em>static</em>
-<ul>
-<li><a href="#RAND.pack">.pack()</a></li>
-</ul></li>
-</ul></li>
-</ul>
-<p><a name="new_RAND_new"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="new-rand"></a><a href="#new-rand" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>new RAND()</h3>
-<p>Creates an instance of RAND</p>
-<p><a name="RAND+clean"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="randclean"></a><a href="#randclean" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ranD.clean()</h3>
-<p>Delete all internal state of a random number generator</p>
-<p><strong>Kind</strong>: instance method of <a href="#RAND"><code>RAND</code></a>  <br>
-<strong>this</strong>: <code>{RAND}</code>  <br>
-<a name="RAND+sbrand"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="randsbrand"></a><a href="#randsbrand" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ranD.sbrand()</h3>
-<p>Marsaglia &amp; Zaman random number generator</p>
-<p><strong>Kind</strong>: instance method of <a href="#RAND"><code>RAND</code></a>  <br>
-<strong>this</strong>: <code>{RAND}</code>  <br>
-<a name="RAND+seed"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="randseedrawlen-raw"></a><a href="#randseedrawlen-raw" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ranD.seed(rawlen, raw)</h3>
-<p>Initialize RNG with some real entropy from some external source</p>
-<p><strong>Kind</strong>: instance method of <a href="#RAND"><code>RAND</code></a>  <br>
-<strong>this</strong>: <code>{RAND}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>rawlen</td><td>the number of seed bytes provided</td></tr>
-<tr><td>raw</td><td>an array of seed bytes</td></tr>
-</tbody>
-</table>
-<p><a name="RAND+getByte"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="randgetbyte"></a><a href="#randgetbyte" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>ranD.getByte()</h3>
-<p>Get random byte</p>
-<p><strong>Kind</strong>: instance method of <a href="#RAND"><code>RAND</code></a>  <br>
-<strong>this</strong>: <code>{RAND}</code>  <br>
-<a name="RAND.pack"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="randpack"></a><a href="#randpack" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>RAND.pack()</h3>
-<p>Pack 4 bytes into a 32-bit Word</p>
-<p><strong>Kind</strong>: static method of <a href="#RAND"><code>RAND</code></a>  <br>
-<strong>this</strong>: <code>{RAND}</code></p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/cryptojs/pair256"><span class="arrow-prev">← </span><span>PAIR256</span></a><a class="docs-next button" href="/docs/cryptojs/rsa"><span>RSA</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#rand">RAND</a><ul class="toc-headings"><li><a href="#new-rand">new RAND()</a></li><li><a href="#randclean">ranD.clean()</a></li><li><a href="#randsbrand">ranD.sbrand()</a></li><li><a href="#randseedrawlen-raw">ranD.seed(rawlen, raw)</a></li><li><a href="#randgetbyte">ranD.getByte()</a></li><li><a href="#randpack">RAND.pack()</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/amcl-overview">AMCL Library</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-overview">AMCL Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API 1.0.0</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/aes">AES</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/big">BIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls">BLS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls192">BLS192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls256">BLS256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/dbig">DBIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp">ECP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ff">FF</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp">FP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp2">FP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp4">FP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp8">FP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp12">FP12</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp16">FP16</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp24">FP24</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp48">FP48</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/gcm">GCM</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash256">HASH256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash384">HASH384</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash512">HASH512</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin">MPIN</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair">PAIR</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/cryptojs/rand">RAND</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rsa">RSA</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/sha3">SHA3</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/unit64">UInt64</a></li></ul></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL Library</span><meta itemprop="position" content="1"></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL JavaScript API 1.0.0</span><meta itemprop="position" content="2"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">RAND</span><meta itemprop="position" content="3"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>RAND</h1></header><a name="RAND"></a><h2 class="anchor anchorWithStickyNavbar_LWe7" id="rand">RAND<a class="hash-link" href="#rand" title="Direct link to heading">​</a></h2><p><strong>Kind</strong>: global class<br>
+<strong>this</strong>: <code>{&quot;{&quot;}RAND{&quot;}&quot;}</code>  </p><ul><li><a href="#RAND">RAND</a><ul><li><a href="#new_RAND_new">new RAND()</a></li><li><em>instance</em><ul><li><a href="#RAND+clean">.clean()</a></li><li><a href="#RAND+sbrand">.sbrand()</a></li><li><a href="#RAND+seed">.seed(rawlen, raw)</a></li><li><a href="#RAND+getByte">.getByte()</a></li></ul></li><li><em>static</em><ul><li><a href="#RAND.pack">.pack()</a></li></ul></li></ul></li></ul><a name="new_RAND_new"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="new-rand">new RAND()<a class="hash-link" href="#new-rand" title="Direct link to heading">​</a></h3><p>Creates an instance of RAND</p><a name="RAND+clean"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="randclean">ranD.clean()<a class="hash-link" href="#randclean" title="Direct link to heading">​</a></h3><p>Delete all internal state of a random number generator</p><p><strong>Kind</strong>: instance method of <a href="#RAND"><code>RAND</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}RAND{&quot;}&quot;}</code>  </p><a name="RAND+sbrand"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="randsbrand">ranD.sbrand()<a class="hash-link" href="#randsbrand" title="Direct link to heading">​</a></h3><p>Marsaglia &amp; Zaman random number generator</p><p><strong>Kind</strong>: instance method of <a href="#RAND"><code>RAND</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}RAND{&quot;}&quot;}</code>  </p><a name="RAND+seed"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="randseedrawlen-raw">ranD.seed(rawlen, raw)<a class="hash-link" href="#randseedrawlen-raw" title="Direct link to heading">​</a></h3><p>Initialize RNG with some real entropy from some external source</p><p><strong>Kind</strong>: instance method of <a href="#RAND"><code>RAND</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}RAND{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>rawlen</td><td>the number of seed bytes provided</td></tr><tr><td>raw</td><td>an array of seed bytes</td></tr></tbody></table><a name="RAND+getByte"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="randgetbyte">ranD.getByte()<a class="hash-link" href="#randgetbyte" title="Direct link to heading">​</a></h3><p>Get random byte</p><p><strong>Kind</strong>: instance method of <a href="#RAND"><code>RAND</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}RAND{&quot;}&quot;}</code>  </p><a name="RAND.pack"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="randpack">RAND.pack()<a class="hash-link" href="#randpack" title="Direct link to heading">​</a></h3><p>Pack 4 bytes into a 32-bit Word</p><p><strong>Kind</strong>: static method of <a href="#RAND"><code>RAND</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}RAND{&quot;}&quot;}</code></p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/cryptojs/pair256"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">PAIR256</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/cryptojs/rsa"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">RSA</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#rand" class="table-of-contents__link toc-highlight">RAND</a><ul><li><a href="#new-rand" class="table-of-contents__link toc-highlight">new RAND()</a></li><li><a href="#randclean" class="table-of-contents__link toc-highlight">ranD.clean()</a></li><li><a href="#randsbrand" class="table-of-contents__link toc-highlight">ranD.sbrand()</a></li><li><a href="#randseedrawlen-raw" class="table-of-contents__link toc-highlight">ranD.seed(rawlen, raw)</a></li><li><a href="#randgetbyte" class="table-of-contents__link toc-highlight">ranD.getByte()</a></li><li><a href="#randpack" class="table-of-contents__link toc-highlight">RAND.pack()</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/cryptojs/rsa/index.html b/docs/cryptojs/rsa/index.html
index 30c3cdc..0d1e24d 100644
--- a/docs/cryptojs/rsa/index.html
+++ b/docs/cryptojs/rsa/index.html
@@ -1,287 +1,43 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>RSA · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="## Classes"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="RSA · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="## Classes"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>AMCL JavaScript API 1.0.0</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-cryptojs/rsa">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">RSA | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/cryptojs/rsa"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="RSA | Apache Milagro"><meta data-rh="true" name="description" content="Classes"><meta data-rh="true" property="og:description" content="Classes"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/cryptojs/rsa"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/rsa" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/rsa" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">RSA</h1></header><article><div><span><h2><a class="anchor" aria-hidden="true" id="classes"></a><a href="#classes" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Classes</h2>
-<dl>
-<dt><a href="#RSA">RSA</a></dt>
-<dd></dd>
-<dt><a href="#rsa_private_key">rsa_private_key</a></dt>
-<dd></dd>
-<dt><a href="#rsa_public_key">rsa_public_key</a></dt>
-<dd></dd>
-</dl>
-<p><a name="RSA"></a></p>
-<h2><a class="anchor" aria-hidden="true" id="rsa"></a><a href="#rsa" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>RSA</h2>
-<p><strong>Kind</strong>: global class<br>
-<strong>this</strong>: <code>{RSA}</code></p>
-<ul>
-<li><a href="#RSA">RSA</a>
-<ul>
-<li><a href="#new_RSA_new">new RSA()</a></li>
-<li><a href="#RSA.bytestohex">.bytestohex(b)</a> ⇒</li>
-<li><a href="#RSA.bytestostring">.bytestostring(b)</a> ⇒</li>
-<li><a href="#RSA.stringtobytes">.stringtobytes(s)</a> ⇒</li>
-<li><a href="#RSA.hashit">.hashit(sha, A, n)</a> ⇒</li>
-<li><a href="#RSA.KEY_PAIR">.KEY_PAIR(rng, e, PRIV, PUB)</a></li>
-<li><a href="#RSA.PKCS15">.PKCS15(rng, e, PRIV, PUB)</a> ⇒</li>
-<li><a href="#RSA.OAEP_ENCODE">.OAEP_ENCODE(sha, m, rng, P)</a> ⇒</li>
-<li><a href="#RSA.OAEP_DECODE">.OAEP_DECODE(sha, P, f)</a> ⇒</li>
-<li><a href="#RSA.PRIVATE_KEY_KILL">.PRIVATE_KEY_KILL(PRIV)</a></li>
-<li><a href="#RSA.ENCRYPT">.ENCRYPT(PUB, F, G)</a></li>
-<li><a href="#RSA.DECRYPT">.DECRYPT(PRIV, G, F)</a></li>
-</ul></li>
-</ul>
-<p><a name="new_RSA_new"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="new-rsa"></a><a href="#new-rsa" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>new RSA()</h3>
-<p>Creates an instance of RSA</p>
-<p><a name="RSA.bytestohex"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="rsabytestohexb-"></a><a href="#rsabytestohexb-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>RSA.bytestohex(b) ⇒</h3>
-<p>Convert byte array to hex string</p>
-<p><strong>Kind</strong>: static method of <a href="#RSA"><code>RSA</code></a>  <br>
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/amcl-overview">AMCL Library</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-overview">AMCL Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API 1.0.0</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/aes">AES</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/big">BIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls">BLS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls192">BLS192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls256">BLS256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/dbig">DBIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp">ECP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ff">FF</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp">FP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp2">FP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp4">FP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp8">FP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp12">FP12</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp16">FP16</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp24">FP24</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp48">FP48</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/gcm">GCM</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash256">HASH256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash384">HASH384</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash512">HASH512</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin">MPIN</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair">PAIR</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rand">RAND</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/cryptojs/rsa">RSA</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/sha3">SHA3</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/unit64">UInt64</a></li></ul></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL Library</span><meta itemprop="position" content="1"></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL JavaScript API 1.0.0</span><meta itemprop="position" content="2"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">RSA</span><meta itemprop="position" content="3"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>RSA</h1></header><h2 class="anchor anchorWithStickyNavbar_LWe7" id="classes">Classes<a class="hash-link" href="#classes" title="Direct link to heading">​</a></h2><dl><dt><a href="#RSA">RSA</a></dt><dd></dd><dt><a href="#rsa_private_key">rsa_private_key</a></dt><dd></dd><dt><a href="#rsa_public_key">rsa_public_key</a></dt><dd></dd></dl><a name="RSA"></a><h2 class="anchor anchorWithStickyNavbar_LWe7" id="rsa">RSA<a class="hash-link" href="#rsa" title="Direct link to heading">​</a></h2><p><strong>Kind</strong>: global class<br>
+<strong>this</strong>: <code>{&quot;{&quot;}RSA{&quot;}&quot;}</code>  </p><ul><li><a href="#RSA">RSA</a><ul><li><a href="#new_RSA_new">new RSA()</a></li><li><a href="#RSA.bytestohex">.bytestohex(b)</a> ⇒</li><li><a href="#RSA.bytestostring">.bytestostring(b)</a> ⇒</li><li><a href="#RSA.stringtobytes">.stringtobytes(s)</a> ⇒</li><li><a href="#RSA.hashit">.hashit(sha, A, n)</a> ⇒</li><li><a href="#RSA.KEY_PAIR">.KEY_PAIR(rng, e, PRIV, PUB)</a></li><li><a href="#RSA.PKCS15">.PKCS15(rng, e, PRIV, PUB)</a> ⇒</li><li><a href="#RSA.OAEP_ENCODE">.OAEP_ENCODE(sha, m, rng, P)</a> ⇒</li><li><a href="#RSA.OAEP_DECODE">.OAEP_DECODE(sha, P, f)</a> ⇒</li><li><a href="#RSA.PRIVATE_KEY_KILL">.PRIVATE_KEY_KILL(PRIV)</a></li><li><a href="#RSA.ENCRYPT">.ENCRYPT(PUB, F, G)</a></li><li><a href="#RSA.DECRYPT">.DECRYPT(PRIV, G, F)</a></li></ul></li></ul><a name="new_RSA_new"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="new-rsa">new RSA()<a class="hash-link" href="#new-rsa" title="Direct link to heading">​</a></h3><p>Creates an instance of RSA</p><a name="RSA.bytestohex"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="rsabytestohexb-">RSA.bytestohex(b) ⇒<a class="hash-link" href="#rsabytestohexb-" title="Direct link to heading">​</a></h3><p>Convert byte array to hex string</p><p><strong>Kind</strong>: static method of <a href="#RSA"><code>RSA</code></a><br>
 <strong>Returns</strong>: s hex string<br>
-<strong>this</strong>: <code>{RSA}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>b</td><td>byte array</td></tr>
-</tbody>
-</table>
-<p><a name="RSA.bytestostring"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="rsabytestostringb-"></a><a href="#rsabytestostringb-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>RSA.bytestostring(b) ⇒</h3>
-<p>Convert byte array to string</p>
-<p><strong>Kind</strong>: static method of <a href="#RSA"><code>RSA</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}RSA{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>b</td><td>byte array</td></tr></tbody></table><a name="RSA.bytestostring"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="rsabytestostringb-">RSA.bytestostring(b) ⇒<a class="hash-link" href="#rsabytestostringb-" title="Direct link to heading">​</a></h3><p>Convert byte array to string</p><p><strong>Kind</strong>: static method of <a href="#RSA"><code>RSA</code></a><br>
 <strong>Returns</strong>: s string<br>
-<strong>this</strong>: <code>{RSA}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>b</td><td>byte array</td></tr>
-</tbody>
-</table>
-<p><a name="RSA.stringtobytes"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="rsastringtobytess-"></a><a href="#rsastringtobytess-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>RSA.stringtobytes(s) ⇒</h3>
-<p>Convert a string to byte array</p>
-<p><strong>Kind</strong>: static method of <a href="#RSA"><code>RSA</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}RSA{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>b</td><td>byte array</td></tr></tbody></table><a name="RSA.stringtobytes"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="rsastringtobytess-">RSA.stringtobytes(s) ⇒<a class="hash-link" href="#rsastringtobytess-" title="Direct link to heading">​</a></h3><p>Convert a string to byte array</p><p><strong>Kind</strong>: static method of <a href="#RSA"><code>RSA</code></a><br>
 <strong>Returns</strong>: b byte array<br>
-<strong>this</strong>: <code>{RSA}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>s</td><td>string</td></tr>
-</tbody>
-</table>
-<p><a name="RSA.hashit"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="rsahashitsha-a-n-"></a><a href="#rsahashitsha-a-n-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>RSA.hashit(sha, A, n) ⇒</h3>
-<p>General purpose hash function</p>
-<p><strong>Kind</strong>: static method of <a href="#RSA"><code>RSA</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}RSA{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>s</td><td>string</td></tr></tbody></table><a name="RSA.hashit"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="rsahashitsha-a-n-">RSA.hashit(sha, A, n) ⇒<a class="hash-link" href="#rsahashitsha-a-n-" title="Direct link to heading">​</a></h3><p>General purpose hash function</p><p><strong>Kind</strong>: static method of <a href="#RSA"><code>RSA</code></a><br>
 <strong>Returns</strong>: R hash value<br>
-<strong>this</strong>: <code>{RSA}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>sha</td><td>is the hash type</td></tr>
-<tr><td>A</td><td>byte array</td></tr>
-<tr><td>n</td><td>Integer</td></tr>
-</tbody>
-</table>
-<p><a name="RSA.KEY_PAIR"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="rsakey_pairrng-e-priv-pub"></a><a href="#rsakey_pairrng-e-priv-pub" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>RSA.KEY_PAIR(rng, e, PRIV, PUB)</h3>
-<p>RSA Key Pair Generator</p>
-<p><strong>Kind</strong>: static method of <a href="#RSA"><code>RSA</code></a>  <br>
-<strong>this</strong>: <code>{RSA}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>rng</td><td>is a pointer to a cryptographically secure random number generator</td></tr>
-<tr><td>e</td><td>the encryption exponent</td></tr>
-<tr><td>PRIV</td><td>the output RSA private key</td></tr>
-<tr><td>PUB</td><td>the output RSA public key</td></tr>
-</tbody>
-</table>
-<p><a name="RSA.PKCS15"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="rsapkcs15rng-e-priv-pub-"></a><a href="#rsapkcs15rng-e-priv-pub-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>RSA.PKCS15(rng, e, PRIV, PUB) ⇒</h3>
-<p>PKCS V1.5 padding of a message prior to RSA signature</p>
-<p><strong>Kind</strong>: static method of <a href="#RSA"><code>RSA</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}RSA{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>sha</td><td>is the hash type</td></tr><tr><td>A</td><td>byte array</td></tr><tr><td>n</td><td>Integer</td></tr></tbody></table><a name="RSA.KEY_PAIR"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="rsakey_pairrng-e-priv-pub">RSA.KEY_PAIR(rng, e, PRIV, PUB)<a class="hash-link" href="#rsakey_pairrng-e-priv-pub" title="Direct link to heading">​</a></h3><p>RSA Key Pair Generator</p><p><strong>Kind</strong>: static method of <a href="#RSA"><code>RSA</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}RSA{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>rng</td><td>is a pointer to a cryptographically secure random number generator</td></tr><tr><td>e</td><td>the encryption exponent</td></tr><tr><td>PRIV</td><td>the output RSA private key</td></tr><tr><td>PUB</td><td>the output RSA public key</td></tr></tbody></table><a name="RSA.PKCS15"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="rsapkcs15rng-e-priv-pub-">RSA.PKCS15(rng, e, PRIV, PUB) ⇒<a class="hash-link" href="#rsapkcs15rng-e-priv-pub-" title="Direct link to heading">​</a></h3><p>PKCS V1.5 padding of a message prior to RSA signature</p><p><strong>Kind</strong>: static method of <a href="#RSA"><code>RSA</code></a><br>
 <strong>Returns</strong>: true or false<br>
-<strong>this</strong>: <code>{RSA}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>rng</td><td>is a pointer to a cryptographically secure random number generator</td></tr>
-<tr><td>e</td><td>the encryption exponent</td></tr>
-<tr><td>PRIV</td><td>the output RSA private key</td></tr>
-<tr><td>PUB</td><td>the output RSA public key</td></tr>
-</tbody>
-</table>
-<p><a name="RSA.OAEP_ENCODE"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="rsaoaep_encodesha-m-rng-p-"></a><a href="#rsaoaep_encodesha-m-rng-p-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>RSA.OAEP_ENCODE(sha, m, rng, P) ⇒</h3>
-<p>OAEP padding of a message prior to RSA encryption</p>
-<p><strong>Kind</strong>: static method of <a href="#RSA"><code>RSA</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}RSA{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>rng</td><td>is a pointer to a cryptographically secure random number generator</td></tr><tr><td>e</td><td>the encryption exponent</td></tr><tr><td>PRIV</td><td>the output RSA private key</td></tr><tr><td>PUB</td><td>the output RSA public key</td></tr></tbody></table><a name="RSA.OAEP_ENCODE"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="rsaoaep_encodesha-m-rng-p-">RSA.OAEP_ENCODE(sha, m, rng, P) ⇒<a class="hash-link" href="#rsaoaep_encodesha-m-rng-p-" title="Direct link to heading">​</a></h3><p>OAEP padding of a message prior to RSA encryption</p><p><strong>Kind</strong>: static method of <a href="#RSA"><code>RSA</code></a><br>
 <strong>Returns</strong>: f is the output encoding, ready for RSA encryption<br>
-<strong>this</strong>: <code>{RSA}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>sha</td><td>is the hash type</td></tr>
-<tr><td>m</td><td>is the input message</td></tr>
-<tr><td>rng</td><td>is a pointer to a cryptographically secure random number generator</td></tr>
-<tr><td>P</td><td>are input encoding parameter string (could be NULL)</td></tr>
-</tbody>
-</table>
-<p><a name="RSA.OAEP_DECODE"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="rsaoaep_decodesha-p-f-"></a><a href="#rsaoaep_decodesha-p-f-" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>RSA.OAEP_DECODE(sha, P, f) ⇒</h3>
-<p>OAEP unpadding of a message after RSA decryption</p>
-<p><strong>Kind</strong>: static method of <a href="#RSA"><code>RSA</code></a>  <br>
+<strong>this</strong>: <code>{&quot;{&quot;}RSA{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>sha</td><td>is the hash type</td></tr><tr><td>m</td><td>is the input message</td></tr><tr><td>rng</td><td>is a pointer to a cryptographically secure random number generator</td></tr><tr><td>P</td><td>are input encoding parameter string (could be NULL)</td></tr></tbody></table><a name="RSA.OAEP_DECODE"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="rsaoaep_decodesha-p-f-">RSA.OAEP_DECODE(sha, P, f) ⇒<a class="hash-link" href="#rsaoaep_decodesha-p-f-" title="Direct link to heading">​</a></h3><p>OAEP unpadding of a message after RSA decryption</p><p><strong>Kind</strong>: static method of <a href="#RSA"><code>RSA</code></a><br>
 <strong>Returns</strong>: r is the unpadded message<br>
-<strong>this</strong>: <code>{RSA}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>sha</td><td>is the hash type</td></tr>
-<tr><td>P</td><td>are input encoding parameter string (could be NULL)</td></tr>
-<tr><td>f</td><td>is the padded message</td></tr>
-</tbody>
-</table>
-<p><a name="RSA.PRIVATE_KEY_KILL"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="rsaprivate_key_killpriv"></a><a href="#rsaprivate_key_killpriv" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>RSA.PRIVATE_KEY_KILL(PRIV)</h3>
-<p>Destroy an RSA private Key</p>
-<p><strong>Kind</strong>: static method of <a href="#RSA"><code>RSA</code></a>  <br>
-<strong>this</strong>: <code>{RSA}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>PRIV</td><td>the input RSA private key. Destroyed on output.</td></tr>
-</tbody>
-</table>
-<p><a name="RSA.ENCRYPT"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="rsaencryptpub-f-g"></a><a href="#rsaencryptpub-f-g" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>RSA.ENCRYPT(PUB, F, G)</h3>
-<p>RSA encryption of suitably padded plaintext</p>
-<p><strong>Kind</strong>: static method of <a href="#RSA"><code>RSA</code></a>  <br>
-<strong>this</strong>: <code>{RSA}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>PUB</td><td>the input RSA public key</td></tr>
-<tr><td>F</td><td>is input padded message</td></tr>
-<tr><td>G</td><td>is the output ciphertext</td></tr>
-</tbody>
-</table>
-<p><a name="RSA.DECRYPT"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="rsadecryptpriv-g-f"></a><a href="#rsadecryptpriv-g-f" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>RSA.DECRYPT(PRIV, G, F)</h3>
-<p>RSA decryption of ciphertext</p>
-<p><strong>Kind</strong>: static method of <a href="#RSA"><code>RSA</code></a>  <br>
-<strong>this</strong>: <code>{RSA}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>PRIV</td><td>the input RSA private key</td></tr>
-<tr><td>G</td><td>is the input ciphertext</td></tr>
-<tr><td>F</td><td>is output plaintext (requires unpadding)</td></tr>
-</tbody>
-</table>
-<p><a name="rsa_private_key"></a></p>
-<h2><a class="anchor" aria-hidden="true" id="rsa_private_key"></a><a href="#rsa_private_key" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>rsa_private_key</h2>
-<p><strong>Kind</strong>: global class<br>
-<strong>this</strong>: <code>{rsa_private_key}</code>  <br>
-<a name="new_rsa_private_key_new"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="new-rsa_private_keyn"></a><a href="#new-rsa_private_keyn" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>new rsa_private_key(n)</h3>
-<p>Creates an instance of rsa_private_key</p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>n</td><td>FF length</td></tr>
-</tbody>
-</table>
-<p><a name="rsa_public_key"></a></p>
-<h2><a class="anchor" aria-hidden="true" id="rsa_public_key"></a><a href="#rsa_public_key" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>rsa_public_key</h2>
-<p><strong>Kind</strong>: global class<br>
-<strong>this</strong>: <code>{rsa_private_key}</code>  <br>
-<a name="new_rsa_public_key_new"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="new-rsa_public_keym"></a><a href="#new-rsa_public_keym" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>new rsa_public_key(m)</h3>
-<p>Creates an instance of rsa_public_key</p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>m</td><td>FF length</td></tr>
-</tbody>
-</table>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/cryptojs/rand"><span class="arrow-prev">← </span><span>RAND</span></a><a class="docs-next button" href="/docs/cryptojs/sha3"><span>SHA3</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#classes">Classes</a></li><li><a href="#rsa">RSA</a><ul class="toc-headings"><li><a href="#new-rsa">new RSA()</a></li><li><a href="#rsabytestohexb-">RSA.bytestohex(b) ⇒</a></li><li><a href="#rsabytestostringb-">RSA.bytestostring(b) ⇒</a></li><li><a href="#rsastringtobytess-">RSA.stringtobytes(s) ⇒</a></li><li><a href="#rsahashitsha-a-n-">RSA.hashit(sha, A, n) ⇒</a></li><li><a href="#rsakey_pairrng-e-priv-pub">RSA.KEY_PAIR(rng, e, PRIV, PUB)</a></li><li><a href="#rsapkcs15rng-e-priv-pub-">RSA.PKCS15(rng, e, PRIV, PUB) ⇒</a></li><li><a href="#rsaoaep_encodesha-m-rng-p-">RSA.OAEP_ENCODE(sha, m, rng, P) ⇒</a></li><li><a href="#rsaoaep_decodesha-p-f-">RSA.OAEP_DECODE(sha, P, f) ⇒</a></li><li><a href="#rsaprivate_key_killpriv">RSA.PRIVATE_KEY_KILL(PRIV)</a></li><li><a href="#rsaencryptpub-f-g">RSA.ENCRYPT(PUB, F, G)</a></li><li><a href="#rsadecryptpriv-g-f">RSA.DECRYPT(PRIV, G, F)</a></li></ul></li><li><a href="#rsa_private_key">rsa_private_key</a><ul class="toc-headings"><li><a href="#new-rsa_private_keyn">new rsa_private_key(n)</a></li></ul></li><li><a href="#rsa_public_key">rsa_public_key</a><ul class="toc-headings"><li><a href="#new-rsa_public_keym">new rsa_public_key(m)</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<strong>this</strong>: <code>{&quot;{&quot;}RSA{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>sha</td><td>is the hash type</td></tr><tr><td>P</td><td>are input encoding parameter string (could be NULL)</td></tr><tr><td>f</td><td>is the padded message</td></tr></tbody></table><a name="RSA.PRIVATE_KEY_KILL"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="rsaprivate_key_killpriv">RSA.PRIVATE_KEY_KILL(PRIV)<a class="hash-link" href="#rsaprivate_key_killpriv" title="Direct link to heading">​</a></h3><p>Destroy an RSA private Key</p><p><strong>Kind</strong>: static method of <a href="#RSA"><code>RSA</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}RSA{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>PRIV</td><td>the input RSA private key. Destroyed on output.</td></tr></tbody></table><a name="RSA.ENCRYPT"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="rsaencryptpub-f-g">RSA.ENCRYPT(PUB, F, G)<a class="hash-link" href="#rsaencryptpub-f-g" title="Direct link to heading">​</a></h3><p>RSA encryption of suitably padded plaintext</p><p><strong>Kind</strong>: static method of <a href="#RSA"><code>RSA</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}RSA{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>PUB</td><td>the input RSA public key</td></tr><tr><td>F</td><td>is input padded message</td></tr><tr><td>G</td><td>is the output ciphertext</td></tr></tbody></table><a name="RSA.DECRYPT"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="rsadecryptpriv-g-f">RSA.DECRYPT(PRIV, G, F)<a class="hash-link" href="#rsadecryptpriv-g-f" title="Direct link to heading">​</a></h3><p>RSA decryption of ciphertext</p><p><strong>Kind</strong>: static method of <a href="#RSA"><code>RSA</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}RSA{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>PRIV</td><td>the input RSA private key</td></tr><tr><td>G</td><td>is the input ciphertext</td></tr><tr><td>F</td><td>is output plaintext (requires unpadding)</td></tr></tbody></table><a name="rsa_private_key"></a><h2 class="anchor anchorWithStickyNavbar_LWe7" id="rsa_private_key">rsa_private_key<a class="hash-link" href="#rsa_private_key" title="Direct link to heading">​</a></h2><p><strong>Kind</strong>: global class<br>
+<strong>this</strong>: <code>{&quot;{&quot;}rsa_private_key{&quot;}&quot;}</code>  </p><a name="new_rsa_private_key_new"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="new-rsa_private_keyn">new rsa_private_key(n)<a class="hash-link" href="#new-rsa_private_keyn" title="Direct link to heading">​</a></h3><p>Creates an instance of rsa_private_key</p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>n</td><td>FF length</td></tr></tbody></table><a name="rsa_public_key"></a><h2 class="anchor anchorWithStickyNavbar_LWe7" id="rsa_public_key">rsa_public_key<a class="hash-link" href="#rsa_public_key" title="Direct link to heading">​</a></h2><p><strong>Kind</strong>: global class<br>
+<strong>this</strong>: <code>{&quot;{&quot;}rsa_private_key{&quot;}&quot;}</code>  </p><a name="new_rsa_public_key_new"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="new-rsa_public_keym">new rsa_public_key(m)<a class="hash-link" href="#new-rsa_public_keym" title="Direct link to heading">​</a></h3><p>Creates an instance of rsa_public_key</p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>m</td><td>FF length</td></tr></tbody></table></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/cryptojs/rand"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">RAND</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/cryptojs/sha3"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">SHA3</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#classes" class="table-of-contents__link toc-highlight">Classes</a></li><li><a href="#rsa" class="table-of-contents__link toc-highlight">RSA</a><ul><li><a href="#new-rsa" class="table-of-contents__link toc-highlight">new RSA()</a></li><li><a href="#rsabytestohexb-" class="table-of-contents__link toc-highlight">RSA.bytestohex(b) ⇒</a></li><li><a href="#rsabytestostringb-" class="table-of-contents__link toc-highlight">RSA.bytestostring(b) ⇒</a></li><li><a href="#rsastringtobytess-" class="table-of-contents__link toc-highlight">RSA.stringtobytes(s) ⇒</a></li><li><a href="#rsahashitsha-a-n-" class="table-of-contents__link toc-highlight">RSA.hashit(sha, A, n) ⇒</a></li><li><a href="#rsakey_pairrng-e-priv-pub" class="table-of-contents__link toc-highlight">RSA.KEY_PAIR(rng, e, PRIV, PUB)</a></li><li><a href="#rsapkcs15rng-e-priv-pub-" class="table-of-contents__link toc-highlight">RSA.PKCS15(rng, e, PRIV, PUB) ⇒</a></li><li><a href="#rsaoaep_encodesha-m-rng-p-" class="table-of-contents__link toc-highlight">RSA.OAEP_ENCODE(sha, m, rng, P) ⇒</a></li><li><a href="#rsaoaep_decodesha-p-f-" class="table-of-contents__link toc-highlight">RSA.OAEP_DECODE(sha, P, f) ⇒</a></li><li><a href="#rsaprivate_key_killpriv" class="table-of-contents__link toc-highlight">RSA.PRIVATE_KEY_KILL(PRIV)</a></li><li><a href="#rsaencryptpub-f-g" class="table-of-contents__link toc-highlight">RSA.ENCRYPT(PUB, F, G)</a></li><li><a href="#rsadecryptpriv-g-f" class="table-of-contents__link toc-highlight">RSA.DECRYPT(PRIV, G, F)</a></li></ul></li><li><a href="#rsa_private_key" class="table-of-contents__link toc-highlight">rsa_private_key</a><ul><li><a href="#new-rsa_private_keyn" class="table-of-contents__link toc-highlight">new rsa_private_key(n)</a></li></ul></li><li><a href="#rsa_public_key" class="table-of-contents__link toc-highlight">rsa_public_key</a><ul><li><a href="#new-rsa_public_keym" class="table-of-contents__link toc-highlight">new rsa_public_key(m)</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/cryptojs/sha3/index.html b/docs/cryptojs/sha3/index.html
index bdd9a8e..3de5d6b 100644
--- a/docs/cryptojs/sha3/index.html
+++ b/docs/cryptojs/sha3/index.html
@@ -1,128 +1,28 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>SHA3 · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;a name=&quot;SHA3&quot;&gt;&lt;/a&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="SHA3 · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;a name=&quot;SHA3&quot;&gt;&lt;/a&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>AMCL JavaScript API 1.0.0</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-cryptojs/sha3">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">SHA3 | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/cryptojs/sha3"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="SHA3 | Apache Milagro"><meta data-rh="true" name="description" content="SHA3"><meta data-rh="true" property="og:description" content="SHA3"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/cryptojs/sha3"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/sha3" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/sha3" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">SHA3</h1></header><article><div><span><p><a name="SHA3"></a></p>
-<h2><a class="anchor" aria-hidden="true" id="sha3"></a><a href="#sha3" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>SHA3</h2>
-<p><strong>Kind</strong>: global class<br>
-<strong>this</strong>: <code>{SHA3}</code></p>
-<ul>
-<li><a href="#SHA3">SHA3</a>
-<ul>
-<li><a href="#new_SHA3_new">new SHA3(olen)</a></li>
-<li><a href="#SHA3+init">.init(olen)</a></li>
-<li><a href="#SHA3+process">.process()</a></li>
-<li><a href="#SHA3+hash">.hash(buff)</a></li>
-<li><a href="#SHA3+shake">.shake(buff, olen)</a></li>
-</ul></li>
-</ul>
-<p><a name="new_SHA3_new"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="new-sha3olen"></a><a href="#new-sha3olen" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>new SHA3(olen)</h3>
-<p>Creates an instance of SHA3</p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>olen</td><td>output length</td></tr>
-</tbody>
-</table>
-<p><a name="SHA3+init"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="sha3initolen"></a><a href="#sha3initolen" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>shA3.init(olen)</h3>
-<p>Initialise an instance of SHA3</p>
-<p><strong>Kind</strong>: instance method of <a href="#SHA3"><code>SHA3</code></a>  <br>
-<strong>this</strong>: <code>{SHA3}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>olen</td><td>output length</td></tr>
-</tbody>
-</table>
-<p><a name="SHA3+process"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="sha3process"></a><a href="#sha3process" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>shA3.process()</h3>
-<p>Process a byte for SHA3</p>
-<p><strong>Kind</strong>: instance method of <a href="#SHA3"><code>SHA3</code></a>  <br>
-<strong>this</strong>: <code>{SHA3}</code>  <br>
-<strong>Byt</strong>: byte of date to be processed<br>
-<a name="SHA3+hash"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="sha3hashbuff"></a><a href="#sha3hashbuff" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>shA3.hash(buff)</h3>
-<p>Create fixed length hash output of SHA3</p>
-<p><strong>Kind</strong>: instance method of <a href="#SHA3"><code>SHA3</code></a>  <br>
-<strong>this</strong>: <code>{SHA3}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>buff</td><td>byte array to store hash</td></tr>
-</tbody>
-</table>
-<p><a name="SHA3+shake"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="sha3shakebuff-olen"></a><a href="#sha3shakebuff-olen" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>shA3.shake(buff, olen)</h3>
-<p>Create variable length hash output of SHA3</p>
-<p><strong>Kind</strong>: instance method of <a href="#SHA3"><code>SHA3</code></a>  <br>
-<strong>this</strong>: <code>{SHA3}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>buff</td><td>byte array to store hash</td></tr>
-<tr><td>olen</td><td>length of the hash</td></tr>
-</tbody>
-</table>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/cryptojs/rsa"><span class="arrow-prev">← </span><span>RSA</span></a><a class="docs-next button" href="/docs/cryptojs/unit64"><span>UInt64</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#sha3">SHA3</a><ul class="toc-headings"><li><a href="#new-sha3olen">new SHA3(olen)</a></li><li><a href="#sha3initolen">shA3.init(olen)</a></li><li><a href="#sha3process">shA3.process()</a></li><li><a href="#sha3hashbuff">shA3.hash(buff)</a></li><li><a href="#sha3shakebuff-olen">shA3.shake(buff, olen)</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/amcl-overview">AMCL Library</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-overview">AMCL Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API 1.0.0</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/aes">AES</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/big">BIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls">BLS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls192">BLS192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls256">BLS256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/dbig">DBIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp">ECP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ff">FF</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp">FP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp2">FP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp4">FP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp8">FP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp12">FP12</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp16">FP16</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp24">FP24</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp48">FP48</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/gcm">GCM</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash256">HASH256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash384">HASH384</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash512">HASH512</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin">MPIN</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair">PAIR</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rand">RAND</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rsa">RSA</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/cryptojs/sha3">SHA3</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/unit64">UInt64</a></li></ul></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL Library</span><meta itemprop="position" content="1"></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL JavaScript API 1.0.0</span><meta itemprop="position" content="2"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">SHA3</span><meta itemprop="position" content="3"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>SHA3</h1></header><a name="SHA3"></a><h2 class="anchor anchorWithStickyNavbar_LWe7" id="sha3">SHA3<a class="hash-link" href="#sha3" title="Direct link to heading">​</a></h2><p><strong>Kind</strong>: global class<br>
+<strong>this</strong>: <code>{&quot;{&quot;}SHA3{&quot;}&quot;}</code>  </p><ul><li><a href="#SHA3">SHA3</a><ul><li><a href="#new_SHA3_new">new SHA3(olen)</a></li><li><a href="#SHA3+init">.init(olen)</a></li><li><a href="#SHA3+process">.process()</a></li><li><a href="#SHA3+hash">.hash(buff)</a></li><li><a href="#SHA3+shake">.shake(buff, olen)</a></li></ul></li></ul><a name="new_SHA3_new"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="new-sha3olen">new SHA3(olen)<a class="hash-link" href="#new-sha3olen" title="Direct link to heading">​</a></h3><p>Creates an instance of SHA3</p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>olen</td><td>output length</td></tr></tbody></table><a name="SHA3+init"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="sha3initolen">shA3.init(olen)<a class="hash-link" href="#sha3initolen" title="Direct link to heading">​</a></h3><p>Initialise an instance of SHA3</p><p><strong>Kind</strong>: instance method of <a href="#SHA3"><code>SHA3</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}SHA3{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>olen</td><td>output length</td></tr></tbody></table><a name="SHA3+process"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="sha3process">shA3.process()<a class="hash-link" href="#sha3process" title="Direct link to heading">​</a></h3><p>Process a byte for SHA3</p><p><strong>Kind</strong>: instance method of <a href="#SHA3"><code>SHA3</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}SHA3{&quot;}&quot;}</code><br>
+<strong>Byt</strong>: byte of date to be processed  </p><a name="SHA3+hash"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="sha3hashbuff">shA3.hash(buff)<a class="hash-link" href="#sha3hashbuff" title="Direct link to heading">​</a></h3><p>Create fixed length hash output of SHA3</p><p><strong>Kind</strong>: instance method of <a href="#SHA3"><code>SHA3</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}SHA3{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>buff</td><td>byte array to store hash</td></tr></tbody></table><a name="SHA3+shake"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="sha3shakebuff-olen">shA3.shake(buff, olen)<a class="hash-link" href="#sha3shakebuff-olen" title="Direct link to heading">​</a></h3><p>Create variable length hash output of SHA3</p><p><strong>Kind</strong>: instance method of <a href="#SHA3"><code>SHA3</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}SHA3{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>buff</td><td>byte array to store hash</td></tr><tr><td>olen</td><td>length of the hash</td></tr></tbody></table></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/cryptojs/rsa"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">RSA</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/cryptojs/unit64"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">UInt64</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#sha3" class="table-of-contents__link toc-highlight">SHA3</a><ul><li><a href="#new-sha3olen" class="table-of-contents__link toc-highlight">new SHA3(olen)</a></li><li><a href="#sha3initolen" class="table-of-contents__link toc-highlight">shA3.init(olen)</a></li><li><a href="#sha3process" class="table-of-contents__link toc-highlight">shA3.process()</a></li><li><a href="#sha3hashbuff" class="table-of-contents__link toc-highlight">shA3.hash(buff)</a></li><li><a href="#sha3shakebuff-olen" class="table-of-contents__link toc-highlight">shA3.shake(buff, olen)</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/cryptojs/unit64/index.html b/docs/cryptojs/unit64/index.html
index a39b851..3cee8c7 100644
--- a/docs/cryptojs/unit64/index.html
+++ b/docs/cryptojs/unit64/index.html
@@ -1,105 +1,26 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>UInt64 · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="&lt;a name=&quot;UInt64&quot;&gt;&lt;/a&gt;"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="UInt64 · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="&lt;a name=&quot;UInt64&quot;&gt;&lt;/a&gt;"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>AMCL JavaScript API 1.0.0</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-cryptojs/unit64">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">UInt64 | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/cryptojs/unit64"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="UInt64 | Apache Milagro"><meta data-rh="true" name="description" content="UInt64"><meta data-rh="true" property="og:description" content="UInt64"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/cryptojs/unit64"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/unit64" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/cryptojs/unit64" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">UInt64</h1></header><article><div><span><p><a name="UInt64"></a></p>
-<h2><a class="anchor" aria-hidden="true" id="uint64"></a><a href="#uint64" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>UInt64</h2>
-<p><strong>Kind</strong>: global class<br>
-<strong>this</strong>: <code>{UInt64}</code></p>
-<ul>
-<li><a href="#UInt64">UInt64</a>
-<ul>
-<li><a href="#new_UInt64_new">new UInt64(top, bot)</a></li>
-<li><a href="#UInt64+add">.add(y)</a></li>
-<li><a href="#UInt64+copy">.copy()</a></li>
-<li><a href="#UInt64+shlb">.shlb()</a></li>
-</ul></li>
-</ul>
-<p><a name="new_UInt64_new"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="new-uint64top-bot"></a><a href="#new-uint64top-bot" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>new UInt64(top, bot)</h3>
-<p>Creates an instance of UInt64. Rudimentary unsigned 64-bit type for SHA384 and SHA512</p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>top</td><td>Top 32 bits</td></tr>
-<tr><td>bot</td><td>Bottom 32 bits</td></tr>
-</tbody>
-</table>
-<p><a name="UInt64+add"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="uint64addy"></a><a href="#uint64addy" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>uInt64.add(y)</h3>
-<p>Add value</p>
-<p><strong>Kind</strong>: instance method of <a href="#UInt64"><code>UInt64</code></a>  <br>
-<strong>this</strong>: <code>{UInt64}</code></p>
-<table>
-<thead>
-<tr><th>Param</th><th>Description</th></tr>
-</thead>
-<tbody>
-<tr><td>y</td><td>UInt64 value</td></tr>
-</tbody>
-</table>
-<p><a name="UInt64+copy"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="uint64copy"></a><a href="#uint64copy" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>uInt64.copy()</h3>
-<p>Copy value</p>
-<p><strong>Kind</strong>: instance method of <a href="#UInt64"><code>UInt64</code></a>  <br>
-<strong>this</strong>: <code>{UInt64}</code>  <br>
-<a name="UInt64+shlb"></a></p>
-<h3><a class="anchor" aria-hidden="true" id="uint64shlb"></a><a href="#uint64shlb" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>uInt64.shlb()</h3>
-<p>Shift left</p>
-<p><strong>Kind</strong>: instance method of <a href="#UInt64"><code>UInt64</code></a>  <br>
-<strong>this</strong>: <code>{UInt64}</code></p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/cryptojs/sha3"><span class="arrow-prev">← </span><span>SHA3</span></a><a class="docs-next button" href="/docs/d-ta-overview"><span>D-TA Overview</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#uint64">UInt64</a><ul class="toc-headings"><li><a href="#new-uint64top-bot">new UInt64(top, bot)</a></li><li><a href="#uint64addy">uInt64.add(y)</a></li><li><a href="#uint64copy">uInt64.copy()</a></li><li><a href="#uint64shlb">uInt64.shlb()</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/amcl-overview">AMCL Library</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-overview">AMCL Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API 1.0.0</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/amcl-javascript-api">AMCL JavaScript API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/aes">AES</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/big">BIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls">BLS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls192">BLS192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/bls256">BLS256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/dbig">DBIG</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp">ECP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/ff">FF</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp">FP</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp2">FP2</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp4">FP4</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp8">FP8</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp12">FP12</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp16">FP16</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp24">FP24</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/fp48">FP48</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/gcm">GCM</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash256">HASH256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash384">HASH384</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/hash512">HASH512</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin">MPIN</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair">PAIR</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rand">RAND</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/rsa">RSA</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/cryptojs/sha3">SHA3</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/cryptojs/unit64">UInt64</a></li></ul></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL Library</span><meta itemprop="position" content="1"></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">AMCL JavaScript API 1.0.0</span><meta itemprop="position" content="2"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">UInt64</span><meta itemprop="position" content="3"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>UInt64</h1></header><a name="UInt64"></a><h2 class="anchor anchorWithStickyNavbar_LWe7" id="uint64">UInt64<a class="hash-link" href="#uint64" title="Direct link to heading">​</a></h2><p><strong>Kind</strong>: global class<br>
+<strong>this</strong>: <code>{&quot;{&quot;}UInt64{&quot;}&quot;}</code>  </p><ul><li><a href="#UInt64">UInt64</a><ul><li><a href="#new_UInt64_new">new UInt64(top, bot)</a></li><li><a href="#UInt64+add">.add(y)</a></li><li><a href="#UInt64+copy">.copy()</a></li><li><a href="#UInt64+shlb">.shlb()</a></li></ul></li></ul><a name="new_UInt64_new"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="new-uint64top-bot">new UInt64(top, bot)<a class="hash-link" href="#new-uint64top-bot" title="Direct link to heading">​</a></h3><p>Creates an instance of UInt64. Rudimentary unsigned 64-bit type for SHA384 and SHA512</p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>top</td><td>Top 32 bits</td></tr><tr><td>bot</td><td>Bottom 32 bits</td></tr></tbody></table><a name="UInt64+add"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="uint64addy">uInt64.add(y)<a class="hash-link" href="#uint64addy" title="Direct link to heading">​</a></h3><p>Add value</p><p><strong>Kind</strong>: instance method of <a href="#UInt64"><code>UInt64</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}UInt64{&quot;}&quot;}</code>  </p><table><thead><tr><th>Param</th><th>Description</th></tr></thead><tbody><tr><td>y</td><td>UInt64 value</td></tr></tbody></table><a name="UInt64+copy"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="uint64copy">uInt64.copy()<a class="hash-link" href="#uint64copy" title="Direct link to heading">​</a></h3><p>Copy value</p><p><strong>Kind</strong>: instance method of <a href="#UInt64"><code>UInt64</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}UInt64{&quot;}&quot;}</code>  </p><a name="UInt64+shlb"></a><h3 class="anchor anchorWithStickyNavbar_LWe7" id="uint64shlb">uInt64.shlb()<a class="hash-link" href="#uint64shlb" title="Direct link to heading">​</a></h3><p>Shift left</p><p><strong>Kind</strong>: instance method of <a href="#UInt64"><code>UInt64</code></a><br>
+<strong>this</strong>: <code>{&quot;{&quot;}UInt64{&quot;}&quot;}</code></p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/cryptojs/sha3"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">SHA3</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/d-ta-overview"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">D-TA Overview</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#uint64" class="table-of-contents__link toc-highlight">UInt64</a><ul><li><a href="#new-uint64top-bot" class="table-of-contents__link toc-highlight">new UInt64(top, bot)</a></li><li><a href="#uint64addy" class="table-of-contents__link toc-highlight">uInt64.add(y)</a></li><li><a href="#uint64copy" class="table-of-contents__link toc-highlight">uInt64.copy()</a></li><li><a href="#uint64shlb" class="table-of-contents__link toc-highlight">uInt64.shlb()</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/d-ta-api/index.html b/docs/d-ta-api/index.html
index f026572..b5960da 100644
--- a/docs/d-ta-api/index.html
+++ b/docs/d-ta-api/index.html
@@ -1,12 +1,23 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>D-TA Node API · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content=":::tip WE NEED HELP DOCUMENTING!"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="D-TA Node API · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content=":::tip WE NEED HELP DOCUMENTING!"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class=""><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class=""><a href="/docs/support" target="_self">Support</a></li><li class=""><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class=""><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">D-TA Node API</h1></header><article><div><span>
-    <div class="admonition admonition-tip">
-      <div class="admonition-heading">
-        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="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"/></svg></div>  WE NEED HELP DOCUMENTING!</h5>
-      </div>
-      <div class="admonition-content">
-    <p>Interested in becoming a contributor? Milagro is looking for you.</p>
-<p><a href="/docs/contributor-guide.html">CONTRIBUTOR'S GUIDE</a>.</p>
-</div></div><p><a href="/swagger/index.html">Swagger</a></p>
-<!--
-Supported admonition types are: caution, note, important, tip, warning.
---></span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-d-ta-api">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">D-TA Node API | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/d-ta-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="D-TA Node API | Apache Milagro"><meta data-rh="true" name="description" content="Interested in becoming a contributor? Milagro is looking for you."><meta data-rh="true" property="og:description" content="Interested in becoming a contributor? Milagro is looking for you."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/d-ta-api"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/d-ta-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/d-ta-api" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
+
+
+
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><div class="theme-doc-markdown markdown"><header><h1>D-TA Node API</h1></header><div class="theme-admonition theme-admonition-tip alert alert--success admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 12 16"><path fill-rule="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"></path></svg></span>WE NEED HELP DOCUMENTING!</div><div class="admonitionContent_S0QG"><p>Interested in becoming a contributor? Milagro is looking for you.
+<a href="/docs/contributor-guide">CONTRIBUTOR&#x27;S GUIDE</a>.</p></div></div><p><a href="/swagger/index.html">Swagger</a></p><p>Supported admonition types are: caution, note, important, tip, warning.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/d-ta-overview/index.html b/docs/d-ta-overview/index.html
index 692c5e6..de79070 100644
--- a/docs/d-ta-overview/index.html
+++ b/docs/d-ta-overview/index.html
@@ -1,101 +1,22 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Decentralized Trust Authority Overview · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="### VERSION: ALPHA RELEASE 0.1.0"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Decentralized Trust Authority Overview · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="### VERSION: ALPHA RELEASE 0.1.0"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>D-TA</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem navListItemActive"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-d-ta-overview">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">Decentralized Trust Authority Overview | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/d-ta-overview"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Decentralized Trust Authority Overview | Apache Milagro"><meta data-rh="true" name="description" content="VERSION: ALPHA RELEASE 0.1.0"><meta data-rh="true" property="og:description" content="VERSION: ALPHA RELEASE 0.1.0"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/d-ta-overview"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/d-ta-overview" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/d-ta-overview" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">Decentralized Trust Authority Overview</h1></header><article><div><span><h3><a class="anchor" aria-hidden="true" id="version-alpha-release-010"></a><a href="#version-alpha-release-010" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>VERSION: ALPHA RELEASE 0.1.0</h3>
-
-    <div class="admonition admonition-important">
-      <div class="admonition-heading">
-        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="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"/></svg></div>  The Alpha Release of the D-TA is not for production use.</h5>
-      </div>
-      <div class="admonition-content">
-    </div></div><h4><a class="anchor" aria-hidden="true" id="release-schedule"></a><a href="#release-schedule" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Release Schedule:</h4>
-<p>Beta Release: Q4 2019</p>
-<p>RC1 Release: Q1 2020</p>
-<h1><a class="anchor" aria-hidden="true" id="introduction"></a><a href="#introduction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Introduction</h1>
-<p>The Apache Milagro (Incubating) Decentralized Trust Authority (D-TA) is a collaborative key management server. It has two primary functions.</p>
-<ol>
-<li><strong>Issue</strong> shares of identity-based Type-3 pairing secrets for initializing zero-knowledge proof multi-factor authentication (ZKP-MFA) networks of clients and authentication servers.</li>
-<li><strong>Safeguards</strong> shares of generic secrets, acting independently but in conjunction with other D-TA nodes, for the benefit of other D-TA nodes.</li>
-</ol>
-<p>In the use case where it issues shares, the D-TA holds nothing except for its Master Secret and acts as a distributed private key generation server. In the use case where it is safeguarding shares of secrets, it is up to the application developer to implement back-end application logic to hold those shares securely. Examples include using Hardware Security Modules (HSMs) via an on-board PKCS#11 implementation to create a realm of key encryption keys, or multi-party computation through BLS signature aggregation.</p>
-<h1><a class="anchor" aria-hidden="true" id="roles"></a><a href="#roles" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Roles</h1>
-<p>Operators of Decentralized Trust Authorities are segmented into three roles.</p>
-<ol>
-<li><p><strong>Principals</strong> - These entities operate a Milagro D-TA node to securely communicate with other D-TA nodes (Fiduciaries), employing them to issues shares of secrets or safeguard shares of secrets.</p></li>
-<li><p><strong>Fiduciaries</strong> - These entities operate \( 1 + n \) Milagro D-TAs to issue shares of secrets or safeguard shares of secrets.</p></li>
-<li><p><strong>Beneficiaries</strong> - These entities receive shares of secrets from Fiduciaries.</p></li>
-</ol>
-<p>A D-TA facilitates secure and auditable communication between entities and service providers who can keep shares of secret keys safe (Fiduciaries). The D-TA is written in Go and uses REST services based on the GoKit microservices framework. The D-TA uses IPFS to create a shared immutable log of transactions and relies on Milagro-Crypto-C for it's crypto. Future release candidates will incorporate Tendermint for consensus protocol.</p>
-<h1><a class="anchor" aria-hidden="true" id="safeguarding-secrets"></a><a href="#safeguarding-secrets" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Safeguarding Secrets</h1>
-<p>In order to safeguard a secret using the D-TA a minimum of two roles are required: a client (Principal) and a server (Fiduciary). In addition a third party can be nominated as the ultimate recipient of the secret (Beneficiary). You can run a single D-TA to provide all three roles if you want to see it in action. See the <a href="/docs/dta-details/quickstart">quick start guide</a> for instructions on how to do that.</p>
-<p>This system can be imagined like a &quot;network HSM&quot;. Below is a VERY simplified overview of the process:</p>
-<p><img src="/img/dta/RC1-Overview-1.png" alt="Figure 1"></p>
-<h2><a class="anchor" aria-hidden="true" id="milagro-d-ta-security"></a><a href="#milagro-d-ta-security" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Milagro D-TA Security</h2>
-<p>The <strong>Seed</strong> is the focus of the system - the D-TA provides a method for Principals to communicate with Fiduciaries who can secure their secrets, it does not prescribe how the securing should be done. The most basic implementation of a D-TA should secure seeds in an HSM using a PKCS#11 interface.</p>
-<p>We hope that many custodial services will adopt the Milagro D-TA as a communication protocol and that they will bring a profusion of security paradigms, by working together we can make a dynamic market place for custodial services and together make the Internet a safer place.</p>
-<h2><a class="anchor" aria-hidden="true" id="the-milagro-d-ta-communication-protocol"></a><a href="#the-milagro-d-ta-communication-protocol" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>The Milagro D-TA Communication Protocol</h2>
-<p>The D-TA provides a secure, distributed method of communication between Beneficiaries, Principals and Fiduciaries. It aims to solve the following problems:</p>
-<ol>
-<li><p>How can actors in the system be identified and trusted?</p>
-<p><strong>Answer:</strong> <a href="/docs/dta-details/identity-documents">Identity Documents</a></p></li>
-<li><p>How can records of interactions between actors in the system be trusted and verified?</p>
-<p><strong>Answer:</strong> <a href="/docs/dta-details/encrypted-envelope">Encrypted Envelopes</a> via <a href="/docs/dta-details/ipfs">IPFS</a></p></li>
-<li><p>How can different custodial services provide their own &quot;special security sauce&quot;?</p>
-<p><strong>Answer:</strong> <a href="/docs/dta-details/plugins-overview">Plugins</a></p></li>
-</ol>
-<p>A more complete view of the Milagro D-TA ecosystem is shown below</p>
-<p><img src="/img/dta/RC1.png" alt="Figure 1"></p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/cryptojs/unit64"><span class="arrow-prev">← </span><span>UInt64</span></a><a class="docs-next button" href="/docs/dta-details/quickstart"><span>Quick Start</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#milagro-d-ta-security">Milagro D-TA Security</a></li><li><a href="#the-milagro-d-ta-communication-protocol">The Milagro D-TA Communication Protocol</a></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/amcl-overview">AMCL Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/d-ta-overview">D-TA</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/api">API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/configuration">Configuration</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/ipfs">IPFS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/authentication">Authentication</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">D-TA</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">D-TA Overview</span><meta itemprop="position" content="2"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Decentralized Trust Authority Overview</h1></header><h3 class="anchor anchorWithStickyNavbar_LWe7" id="version-alpha-release-010">VERSION: ALPHA RELEASE 0.1.0<a class="hash-link" href="#version-alpha-release-010" title="Direct link to heading">​</a></h3><div class="theme-admonition theme-admonition-important alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="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"></path></svg></span>The Alpha Release of the D-TA is not for production use.</div><div class="admonitionContent_S0QG"></div></div><h4 class="anchor anchorWithStickyNavbar_LWe7" id="release-schedule">Release Schedule:<a class="hash-link" href="#release-schedule" title="Direct link to heading">​</a></h4><p>Beta Release: Q4 2019</p><p>RC1 Release: Q1 2020</p><h1>Introduction</h1><p>The Apache Milagro (Incubating) Decentralized Trust Authority (D-TA) is a collaborative key management server. It has two primary functions. </p><ol><li><strong>Issue</strong> shares of identity-based Type-3 pairing secrets for initializing zero-knowledge proof multi-factor authentication (ZKP-MFA) networks of clients and authentication servers.</li><li><strong>Safeguards</strong> shares of generic secrets, acting independently but in conjunction with other D-TA nodes, for the benefit of other D-TA nodes. </li></ol><p>In the use case where it issues shares, the D-TA holds nothing except for its Master Secret and acts as a distributed private key generation server. In the use case where it is safeguarding shares of secrets, it is up to the application developer to implement back-end application logic to hold those shares securely. Examples include using Hardware Security Modules (HSMs) via an on-board PKCS#11 implementation to create a realm of key encryption keys, or multi-party computation through BLS signature aggregation.</p><h1>Roles</h1><p>Operators of Decentralized Trust Authorities are segmented into three roles.</p><ol><li><p><strong>Principals</strong> - These entities operate a Milagro D-TA node to securely communicate with other D-TA nodes (Fiduciaries), employing them to issues shares of secrets or safeguard shares of secrets.</p></li><li><p><strong>Fiduciaries</strong> - These entities operate <!-- -->\<!-- -->( 1 + n <!-- -->\<!-- -->) Milagro D-TAs to issue shares of secrets or safeguard shares of secrets.</p></li><li><p><strong>Beneficiaries</strong> - These entities receive shares of secrets from Fiduciaries.</p></li></ol><p>A D-TA facilitates secure and auditable communication between entities and service providers who can keep shares of secret keys safe (Fiduciaries). The D-TA is written in Go and uses REST services based on the GoKit microservices framework. The D-TA uses IPFS to create a shared immutable log of transactions and relies on Milagro-Crypto-C for it&#x27;s crypto. Future release candidates will incorporate Tendermint for consensus protocol.</p><h1>Safeguarding Secrets</h1><p>In order to safeguard a secret using the D-TA a minimum of two roles are required: a client (Principal) and a server (Fiduciary). In addition a third party can be nominated as the ultimate recipient of the secret (Beneficiary). You can run a single D-TA to provide all three roles if you want to see it in action. See the <a href="/docs/dta-details/quickstart">quick start guide</a> for instructions on how to do that.</p><p>This system can be imagined like a &quot;network HSM&quot;. Below is a VERY simplified overview of the process:</p><p><img loading="lazy" alt="Figure 1" src="/assets/images/RC1-Overview-1-df66e3e41d643bfeb8ad2c77160b6d97.png" width="1283" height="720" class="img_ev3q"></p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="milagro-d-ta-security">Milagro D-TA Security<a class="hash-link" href="#milagro-d-ta-security" title="Direct link to heading">​</a></h2><p>The <strong>Seed</strong> is the focus of the system - the D-TA provides a method for Principals to communicate with Fiduciaries who can secure their secrets, it does not prescribe how the securing should be done. The most basic implementation of a D-TA should secure seeds in an HSM using a PKCS#11 interface. </p><p>We hope that many custodial services will adopt the Milagro D-TA as a communication protocol and that they will bring a profusion of security paradigms, by working together we can make a dynamic market place for custodial services and together make the Internet a safer place.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-milagro-d-ta-communication-protocol">The Milagro D-TA Communication Protocol<a class="hash-link" href="#the-milagro-d-ta-communication-protocol" title="Direct link to heading">​</a></h2><p>The D-TA provides a secure, distributed method of communication between Beneficiaries, Principals and Fiduciaries. It aims to solve the following problems:</p><ol><li><p>How can actors in the system be identified and trusted?</p><p><strong>Answer:</strong> <a href="/docs/dta-details/identity-documents">Identity Documents</a></p></li><li><p>How can records of interactions between actors in the system be trusted and verified?</p><p><strong>Answer:</strong> <a href="/docs/dta-details/encrypted-envelope">Encrypted Envelopes</a> via <a href="/docs/dta-details/ipfs">IPFS</a></p></li><li><p>How can different custodial services provide their own &quot;special security sauce&quot;?</p><p><strong>Answer:</strong> <a href="/docs/dta-details/plugins-overview">Plugins</a></p></li></ol><p>A more complete view of the Milagro D-TA ecosystem is shown below</p><p><img loading="lazy" alt="Figure 1" src="/assets/images/RC1-537ade04d4b9de9c84709b309c333790.png" width="1672" height="1095" class="img_ev3q"></p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/cryptojs/unit64"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">UInt64</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/dta-details/quickstart"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Quick Start</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#version-alpha-release-010" class="table-of-contents__link toc-highlight">VERSION: ALPHA RELEASE 0.1.0</a></li><li><a href="#milagro-d-ta-security" class="table-of-contents__link toc-highlight">Milagro D-TA Security</a></li><li><a href="#the-milagro-d-ta-communication-protocol" class="table-of-contents__link toc-highlight">The Milagro D-TA Communication Protocol</a></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/downloads/index.html b/docs/downloads/index.html
index fdb81dd..64eb2a4 100644
--- a/docs/downloads/index.html
+++ b/docs/downloads/index.html
@@ -1,135 +1,22 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Downloads · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="# Project Downloads"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Downloads · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="# Project Downloads"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive siteNavItemActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>Project Info</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-downloads">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">Downloads | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/downloads"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Downloads | Apache Milagro"><meta data-rh="true" name="description" content="This page will be updated with all official Apache Software Foundation releases from the Apache Milagro (incubating) project."><meta data-rh="true" property="og:description" content="This page will be updated with all official Apache Software Foundation releases from the Apache Milagro (incubating) project."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/downloads"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/downloads" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/downloads" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">Downloads</h1></header><article><div><span><h1><a class="anchor" aria-hidden="true" id="project-downloads"></a><a href="#project-downloads" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Project Downloads</h1>
-<p>This page will be updated with all official Apache Software Foundation releases from the Apache Milagro (incubating) project.</p>
-<h2><a class="anchor" aria-hidden="true" id="verifying-releases"></a><a href="#verifying-releases" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Verifying Releases</h2>
-<p>You can find instructions for checking hashes and signatures on the <a href="http://www.apache.org/info/verification.html">Verifying Apache Software Foundation Releases</a> page. The Milagro committer’s pgp signatures can be found <a href="https://www.apache.org/dist/incubator/milagro/KEYS">here</a>.</p>
-<p>For fast downloads, current source distributions are hosted on mirror servers; older source distributions are in the archive. For security, public keys, hashes and signature files are always hosted at Apache.</p>
-<h2><a class="anchor" aria-hidden="true" id="apache-milagro-crypto-c-incubating-v201"></a><a href="#apache-milagro-crypto-c-incubating-v201" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Apache Milagro Crypto C Incubating v2.0.1</h2>
-<p>This is the initial release of the Apache Milagro Crypto C library.</p>
-<h3><a class="anchor" aria-hidden="true" id="source-release"></a><a href="#source-release" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Source Release</h3>
-<table>
-<thead>
-<tr><th><a href="http://www.apache.org/dyn/closer.cgi/incubator/milagro/apache-milagro-crypto-c-2.0.1-incubating/apache-milagro-crypto-c-2.0.1-incubating-src.tar.gz">tar.gz</a></th><th><a href="https://www.apache.org/dist/incubator/milagro/apache-milagro-crypto-c-2.0.1-incubating/apache-milagro-crypto-c-2.0.1-incubating-src.tar.gz.sha512">sha512</a></th><th><a href="https://www.apache.org/dist/incubator/milagro/apache-milagro-crypto-c-2.0.1-incubating/apache-milagro-crypto-c-2.0.1-incubating-src.tar.gz.asc">signature</a></th></tr>
-</thead>
-<tbody>
-</tbody>
-</table>
-<h3><a class="anchor" aria-hidden="true" id="release-notes"></a><a href="#release-notes" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Release Notes</h3>
-<p>The latest release notes can be found <a href="https://github.com/apache/incubator-milagro-crypto-c/releases/tag/2.0.1">here</a></p>
-<h3><a class="anchor" aria-hidden="true" id="previous-releases"></a><a href="#previous-releases" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Previous Releases</h3>
-<p>1.0.0 (see below for details)</p>
-<h2><a class="anchor" aria-hidden="true" id="apache-milagro-libmpc-v01"></a><a href="#apache-milagro-libmpc-v01" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Apache Milagro libmpc v0.1</h2>
-<p>This is the initial release of the Apache Milagro libmpc (Multi-Party Computation).</p>
-<h3><a class="anchor" aria-hidden="true" id="source-release-1"></a><a href="#source-release-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Source Release</h3>
-<table>
-<thead>
-<tr><th><a href="https://www.apache.org/dyn/closer.cgi/incubator/milagro/apache-milagro-mpc-0.1-incubating/apache-milagro-mpc-0.1-incubating-src.tar.gz">tar.gz</a></th><th><a href="https://www.apache.org/dyn/closer.cgi/incubator/milagro/apache-milagro-mpc-0.1-incubating/apache-milagro-mpc-0.1-incubating-src.tar.gz.sha512">sha512</a></th><th><a href="https://www.apache.org/dyn/closer.cgi/incubator/milagro/apache-milagro-mpc-0.1-incubating/apache-milagro-mpc-0.1-incubating-src.tar.gz.asc">signature</a></th></tr>
-</thead>
-<tbody>
-</tbody>
-</table>
-<h3><a class="anchor" aria-hidden="true" id="release-notes-1"></a><a href="#release-notes-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Release Notes</h3>
-<p>The latest release notes can be found <a href="https://github.com/apache/incubator-milagro-MPC/releases/tag/0.1">here</a></p>
-<h3><a class="anchor" aria-hidden="true" id="previous-releases-1"></a><a href="#previous-releases-1" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Previous Releases</h3>
-<p>none</p>
-<h2><a class="anchor" aria-hidden="true" id="apache-milagro-decentralized-trust-authority-incubating-v010-alpha-release"></a><a href="#apache-milagro-decentralized-trust-authority-incubating-v010-alpha-release" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Apache Milagro Decentralized Trust Authority Incubating v0.1.0 (Alpha Release)</h2>
-<p>This is the initial release of the Apache Milagro Decentralized Trust Authority server.</p>
-<h3><a class="anchor" aria-hidden="true" id="source-release-2"></a><a href="#source-release-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Source Release</h3>
-<table>
-<thead>
-<tr><th><a href="http://www.apache.org/dyn/closer.cgi/incubator/milagro/apache-milagro-dta-0.1.0-incubating/apache-milagro-dta-0.1.0-incubating-src.tar.gz">tar.gz</a></th><th><a href="https://www.apache.org/dist/incubator/milagro/apache-milagro-dta-0.1.0-incubating/apache-milagro-dta-0.1.0-incubating-src.tar.gz.sha512">sha512</a></th><th><a href="https://www.apache.org/dist/incubator/milagro/apache-milagro-dta-0.1.0-incubating/apache-milagro-dta-0.1.0-incubating-src.tar.gz.asc">signature</a></th></tr>
-</thead>
-<tbody>
-</tbody>
-</table>
-<h3><a class="anchor" aria-hidden="true" id="release-notes-2"></a><a href="#release-notes-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Release Notes</h3>
-<p>The latest release notes can be found <a href="https://github.com/apache/incubator-milagro-dta/releases/tag/0.1.0">here</a></p>
-<h3><a class="anchor" aria-hidden="true" id="previous-releases-2"></a><a href="#previous-releases-2" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Previous Releases</h3>
-<p>None</p>
-<h2><a class="anchor" aria-hidden="true" id="apache-milagro-crypto-c-incubating-v100"></a><a href="#apache-milagro-crypto-c-incubating-v100" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Apache Milagro Crypto C Incubating v1.0.0</h2>
-<p>This is the initial release of the Apache Milagro Crypto C library.</p>
-<h3><a class="anchor" aria-hidden="true" id="source-release-3"></a><a href="#source-release-3" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Source Release</h3>
-<table>
-<thead>
-<tr><th><a href="http://www.apache.org/dyn/closer.cgi/incubator/milagro/apache-milagro-crypto-c-1.0.0-incubating/apache-milagro-crypto-c-1.0.0-incubating-src.tar.gz">tar.gz</a></th><th><a href="https://www.apache.org/dist/incubator/milagro/apache-milagro-crypto-c-1.0.0-incubating/apache-milagro-crypto-c-1.0.0-incubating-src.tar.gz.sha512">sha512</a></th><th><a href="https://www.apache.org/dist/incubator/milagro/apache-milagro-crypto-c-1.0.0-incubating/apache-milagro-crypto-c-1.0.0-incubating-src.tar.gz.asc">signature</a></th></tr>
-</thead>
-<tbody>
-</tbody>
-</table>
-<h3><a class="anchor" aria-hidden="true" id="release-notes-3"></a><a href="#release-notes-3" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Release Notes</h3>
-<p>The latest release notes can be found <a href="https://github.com/apache/incubator-milagro-crypto-c/releases/tag/1.0.0">here</a></p>
-<h3><a class="anchor" aria-hidden="true" id="previous-releases-3"></a><a href="#previous-releases-3" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Previous Releases</h3>
-<p>None</p>
-<h2><a class="anchor" aria-hidden="true" id="apache-milagro-crypto-js-incubating-v100"></a><a href="#apache-milagro-crypto-js-incubating-v100" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Apache Milagro Crypto JS Incubating v1.0.0</h2>
-<p>This is the initial release of the Apache Milagro Crypto JS library.</p>
-<h3><a class="anchor" aria-hidden="true" id="source-release-4"></a><a href="#source-release-4" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Source Release</h3>
-<table>
-<thead>
-<tr><th><a href="http://www.apache.org/dyn/closer.cgi/incubator/milagro/apache-milagro-crypto-js-1.0.0-incubating/apache-milagro-crypto-js-1.0.0-incubating-src.tar.gz">tar.gz</a></th><th><a href="https://www.apache.org/dist/incubator/milagro/apache-milagro-crypto-js-1.0.0-incubating/apache-milagro-crypto-js-1.0.0-incubating-src.tar.gz.sha512">sha512</a></th><th><a href="https://www.apache.org/dist/incubator/milagro/apache-milagro-crypto-js-1.0.0-incubating/apache-milagro-crypto-js-1.0.0-incubating-src.tar.gz.asc">signature</a></th></tr>
-</thead>
-<tbody>
-</tbody>
-</table>
-<h3><a class="anchor" aria-hidden="true" id="release-notes-4"></a><a href="#release-notes-4" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Release Notes</h3>
-<p>The latest release notes can be found <a href="https://github.com/apache/incubator-milagro-crypto-js/releases/tag/1.0.0">here</a></p>
-<h3><a class="anchor" aria-hidden="true" id="previous-releases-4"></a><a href="#previous-releases-4" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Previous Releases</h3>
-<p>None</p>
-<!--
-Supported admonition types are: caution, note, important, tip, warning.
--->
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/contributor-guide"><span class="arrow-prev">← </span><span>Contributor&#x27;s Guide</span></a><a class="docs-next button" href="/docs/support"><span>Support</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#verifying-releases">Verifying Releases</a></li><li><a href="#apache-milagro-crypto-c-incubating-v201">Apache Milagro Crypto C Incubating v2.0.1</a><ul class="toc-headings"><li><a href="#source-release">Source Release</a></li><li><a href="#release-notes">Release Notes</a></li><li><a href="#previous-releases">Previous Releases</a></li></ul></li><li><a href="#apache-milagro-libmpc-v01">Apache Milagro libmpc v0.1</a><ul class="toc-headings"><li><a href="#source-release-1">Source Release</a></li><li><a href="#release-notes-1">Release Notes</a></li><li><a href="#previous-releases-1">Previous Releases</a></li></ul></li><li><a href="#apache-milagro-decentralized-trust-authority-incubating-v010-alpha-release">Apache Milagro Decentralized Trust Authority Incubating v0.1.0 (Alpha Release)</a><ul class="toc-headings"><li><a href="#source-release-2">Source Release</a></li><li><a href="#release-notes-2">Release Notes</a></li><li><a href="#previous-releases-2">Previous Releases</a></li></ul></li><li><a href="#apache-milagro-crypto-c-incubating-v100">Apache Milagro Crypto C Incubating v1.0.0</a><ul class="toc-headings"><li><a href="#source-release-3">Source Release</a></li><li><a href="#release-notes-3">Release Notes</a></li><li><a href="#previous-releases-3">Previous Releases</a></li></ul></li><li><a href="#apache-milagro-crypto-js-incubating-v100">Apache Milagro Crypto JS Incubating v1.0.0</a><ul class="toc-headings"><li><a href="#source-release-4">Source Release</a></li><li><a href="#release-notes-4">Release Notes</a></li><li><a href="#previous-releases-4">Previous Releases</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/amcl-overview">AMCL Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/contributor-guide">Project Info</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/downloads">Downloads</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/support">Support</a></li></ul></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">Project Info</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">Downloads</span><meta itemprop="position" content="2"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><h1>Project Downloads</h1><p>This page will be updated with all official Apache Software Foundation releases from the Apache Milagro (incubating) project.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="verifying-releases">Verifying Releases<a class="hash-link" href="#verifying-releases" title="Direct link to heading">​</a></h2><p>You can find instructions for checking hashes and signatures on the <a href="http://www.apache.org/info/verification.html" target="_blank" rel="noopener noreferrer">Verifying Apache Software Foundation Releases</a> page. The Milagro committer’s pgp signatures can be found <a href="https://www.apache.org/dist/incubator/milagro/KEYS" target="_blank" rel="noopener noreferrer">here</a>.   </p><p>For fast downloads, current source distributions are hosted on mirror servers; older source distributions are in the archive. For security, public keys, hashes and signature files are always hosted at Apache.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="apache-milagro-crypto-c-incubating-v201">Apache Milagro Crypto C Incubating v2.0.1<a class="hash-link" href="#apache-milagro-crypto-c-incubating-v201" title="Direct link to heading">​</a></h2><p>This is the initial release of the Apache Milagro Crypto C library.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="source-release">Source Release<a class="hash-link" href="#source-release" title="Direct link to heading">​</a></h3><table><thead><tr><th><a href="http://www.apache.org/dyn/closer.cgi/incubator/milagro/apache-milagro-crypto-c-2.0.1-incubating/apache-milagro-crypto-c-2.0.1-incubating-src.tar.gz" target="_blank" rel="noopener noreferrer">tar.gz</a></th><th><a href="https://www.apache.org/dist/incubator/milagro/apache-milagro-crypto-c-2.0.1-incubating/apache-milagro-crypto-c-2.0.1-incubating-src.tar.gz.sha512" target="_blank" rel="noopener noreferrer">sha512</a></th><th><a href="https://www.apache.org/dist/incubator/milagro/apache-milagro-crypto-c-2.0.1-incubating/apache-milagro-crypto-c-2.0.1-incubating-src.tar.gz.asc" target="_blank" rel="noopener noreferrer">signature</a></th></tr></thead></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="release-notes">Release Notes<a class="hash-link" href="#release-notes" title="Direct link to heading">​</a></h3><p>The latest release notes can be found <a href="https://github.com/apache/incubator-milagro-crypto-c/releases/tag/2.0.1" target="_blank" rel="noopener noreferrer">here</a></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="previous-releases">Previous Releases<a class="hash-link" href="#previous-releases" title="Direct link to heading">​</a></h3><p>1.0.0 (see below for details)</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="apache-milagro-libmpc-v01">Apache Milagro libmpc v0.1<a class="hash-link" href="#apache-milagro-libmpc-v01" title="Direct link to heading">​</a></h2><p>This is the initial release of the Apache Milagro libmpc (Multi-Party Computation).</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="source-release-1">Source Release<a class="hash-link" href="#source-release-1" title="Direct link to heading">​</a></h3><table><thead><tr><th><a href="https://www.apache.org/dyn/closer.cgi/incubator/milagro/apache-milagro-mpc-0.1-incubating/apache-milagro-mpc-0.1-incubating-src.tar.gz" target="_blank" rel="noopener noreferrer">tar.gz</a></th><th><a href="https://www.apache.org/dyn/closer.cgi/incubator/milagro/apache-milagro-mpc-0.1-incubating/apache-milagro-mpc-0.1-incubating-src.tar.gz.sha512" target="_blank" rel="noopener noreferrer">sha512</a></th><th><a href="https://www.apache.org/dyn/closer.cgi/incubator/milagro/apache-milagro-mpc-0.1-incubating/apache-milagro-mpc-0.1-incubating-src.tar.gz.asc" target="_blank" rel="noopener noreferrer">signature</a></th></tr></thead></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="release-notes-1">Release Notes<a class="hash-link" href="#release-notes-1" title="Direct link to heading">​</a></h3><p>The latest release notes can be found <a href="https://github.com/apache/incubator-milagro-MPC/releases/tag/0.1" target="_blank" rel="noopener noreferrer">here</a></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="previous-releases-1">Previous Releases<a class="hash-link" href="#previous-releases-1" title="Direct link to heading">​</a></h3><p>none</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="apache-milagro-decentralized-trust-authority-incubating-v010-alpha-release">Apache Milagro Decentralized Trust Authority Incubating v0.1.0 (Alpha Release)<a class="hash-link" href="#apache-milagro-decentralized-trust-authority-incubating-v010-alpha-release" title="Direct link to heading">​</a></h2><p>This is the initial release of the Apache Milagro Decentralized Trust Authority server.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="source-release-2">Source Release<a class="hash-link" href="#source-release-2" title="Direct link to heading">​</a></h3><table><thead><tr><th><a href="http://www.apache.org/dyn/closer.cgi/incubator/milagro/apache-milagro-dta-0.1.0-incubating/apache-milagro-dta-0.1.0-incubating-src.tar.gz" target="_blank" rel="noopener noreferrer">tar.gz</a></th><th><a href="https://www.apache.org/dist/incubator/milagro/apache-milagro-dta-0.1.0-incubating/apache-milagro-dta-0.1.0-incubating-src.tar.gz.sha512" target="_blank" rel="noopener noreferrer">sha512</a></th><th><a href="https://www.apache.org/dist/incubator/milagro/apache-milagro-dta-0.1.0-incubating/apache-milagro-dta-0.1.0-incubating-src.tar.gz.asc" target="_blank" rel="noopener noreferrer">signature</a></th></tr></thead></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="release-notes-2">Release Notes<a class="hash-link" href="#release-notes-2" title="Direct link to heading">​</a></h3><p>The latest release notes can be found <a href="https://github.com/apache/incubator-milagro-dta/releases/tag/0.1.0" target="_blank" rel="noopener noreferrer">here</a></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="previous-releases-2">Previous Releases<a class="hash-link" href="#previous-releases-2" title="Direct link to heading">​</a></h3><p>None</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="apache-milagro-crypto-c-incubating-v100">Apache Milagro Crypto C Incubating v1.0.0<a class="hash-link" href="#apache-milagro-crypto-c-incubating-v100" title="Direct link to heading">​</a></h2><p>This is the initial release of the Apache Milagro Crypto C library.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="source-release-3">Source Release<a class="hash-link" href="#source-release-3" title="Direct link to heading">​</a></h3><table><thead><tr><th><a href="http://www.apache.org/dyn/closer.cgi/incubator/milagro/apache-milagro-crypto-c-1.0.0-incubating/apache-milagro-crypto-c-1.0.0-incubating-src.tar.gz" target="_blank" rel="noopener noreferrer">tar.gz</a></th><th><a href="https://www.apache.org/dist/incubator/milagro/apache-milagro-crypto-c-1.0.0-incubating/apache-milagro-crypto-c-1.0.0-incubating-src.tar.gz.sha512" target="_blank" rel="noopener noreferrer">sha512</a></th><th><a href="https://www.apache.org/dist/incubator/milagro/apache-milagro-crypto-c-1.0.0-incubating/apache-milagro-crypto-c-1.0.0-incubating-src.tar.gz.asc" target="_blank" rel="noopener noreferrer">signature</a></th></tr></thead></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="release-notes-3">Release Notes<a class="hash-link" href="#release-notes-3" title="Direct link to heading">​</a></h3><p>The latest release notes can be found <a href="https://github.com/apache/incubator-milagro-crypto-c/releases/tag/1.0.0" target="_blank" rel="noopener noreferrer">here</a></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="previous-releases-3">Previous Releases<a class="hash-link" href="#previous-releases-3" title="Direct link to heading">​</a></h3><p>None</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="apache-milagro-crypto-js-incubating-v100">Apache Milagro Crypto JS Incubating v1.0.0<a class="hash-link" href="#apache-milagro-crypto-js-incubating-v100" title="Direct link to heading">​</a></h2><p>This is the initial release of the Apache Milagro Crypto JS library.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="source-release-4">Source Release<a class="hash-link" href="#source-release-4" title="Direct link to heading">​</a></h3><table><thead><tr><th><a href="http://www.apache.org/dyn/closer.cgi/incubator/milagro/apache-milagro-crypto-js-1.0.0-incubating/apache-milagro-crypto-js-1.0.0-incubating-src.tar.gz" target="_blank" rel="noopener noreferrer">tar.gz</a></th><th><a href="https://www.apache.org/dist/incubator/milagro/apache-milagro-crypto-js-1.0.0-incubating/apache-milagro-crypto-js-1.0.0-incubating-src.tar.gz.sha512" target="_blank" rel="noopener noreferrer">sha512</a></th><th><a href="https://www.apache.org/dist/incubator/milagro/apache-milagro-crypto-js-1.0.0-incubating/apache-milagro-crypto-js-1.0.0-incubating-src.tar.gz.asc" target="_blank" rel="noopener noreferrer">signature</a></th></tr></thead></table><h3 class="anchor anchorWithStickyNavbar_LWe7" id="release-notes-4">Release Notes<a class="hash-link" href="#release-notes-4" title="Direct link to heading">​</a></h3><p>The latest release notes can be found <a href="https://github.com/apache/incubator-milagro-crypto-js/releases/tag/1.0.0" target="_blank" rel="noopener noreferrer">here</a></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="previous-releases-4">Previous Releases<a class="hash-link" href="#previous-releases-4" title="Direct link to heading">​</a></h3><p>None</p><p>Supported admonition types are: caution, note, important, tip, warning.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/contributor-guide"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Contributor&#x27;s Guide</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/support"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Support</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#verifying-releases" class="table-of-contents__link toc-highlight">Verifying Releases</a></li><li><a href="#apache-milagro-crypto-c-incubating-v201" class="table-of-contents__link toc-highlight">Apache Milagro Crypto C Incubating v2.0.1</a><ul><li><a href="#source-release" class="table-of-contents__link toc-highlight">Source Release</a></li><li><a href="#release-notes" class="table-of-contents__link toc-highlight">Release Notes</a></li><li><a href="#previous-releases" class="table-of-contents__link toc-highlight">Previous Releases</a></li></ul></li><li><a href="#apache-milagro-libmpc-v01" class="table-of-contents__link toc-highlight">Apache Milagro libmpc v0.1</a><ul><li><a href="#source-release-1" class="table-of-contents__link toc-highlight">Source Release</a></li><li><a href="#release-notes-1" class="table-of-contents__link toc-highlight">Release Notes</a></li><li><a href="#previous-releases-1" class="table-of-contents__link toc-highlight">Previous Releases</a></li></ul></li><li><a href="#apache-milagro-decentralized-trust-authority-incubating-v010-alpha-release" class="table-of-contents__link toc-highlight">Apache Milagro Decentralized Trust Authority Incubating v0.1.0 (Alpha Release)</a><ul><li><a href="#source-release-2" class="table-of-contents__link toc-highlight">Source Release</a></li><li><a href="#release-notes-2" class="table-of-contents__link toc-highlight">Release Notes</a></li><li><a href="#previous-releases-2" class="table-of-contents__link toc-highlight">Previous Releases</a></li></ul></li><li><a href="#apache-milagro-crypto-c-incubating-v100" class="table-of-contents__link toc-highlight">Apache Milagro Crypto C Incubating v1.0.0</a><ul><li><a href="#source-release-3" class="table-of-contents__link toc-highlight">Source Release</a></li><li><a href="#release-notes-3" class="table-of-contents__link toc-highlight">Release Notes</a></li><li><a href="#previous-releases-3" class="table-of-contents__link toc-highlight">Previous Releases</a></li></ul></li><li><a href="#apache-milagro-crypto-js-incubating-v100" class="table-of-contents__link toc-highlight">Apache Milagro Crypto JS Incubating v1.0.0</a><ul><li><a href="#source-release-4" class="table-of-contents__link toc-highlight">Source Release</a></li><li><a href="#release-notes-4" class="table-of-contents__link toc-highlight">Release Notes</a></li><li><a href="#previous-releases-4" class="table-of-contents__link toc-highlight">Previous Releases</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/dta-details/api/index.html b/docs/dta-details/api/index.html
index 6f747e7..624d125 100644
--- a/docs/dta-details/api/index.html
+++ b/docs/dta-details/api/index.html
@@ -1,75 +1,22 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>API · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Open-API specifications are provided for the core &quot;vanilla&quot; Milagro D-TA HTTP REST services and for both the shipped plugins: Bitcoin Wallet Security and Safeguard Secret."/><meta name="docsearch:language" content="en"/><meta property="og:title" content="API · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="Open-API specifications are provided for the core &quot;vanilla&quot; Milagro D-TA HTTP REST services and for both the shipped plugins: Bitcoin Wallet Security and Safeguard Secret."/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>D-TA</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-dta-details/api">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">API | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/dta-details/api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="API | Apache Milagro"><meta data-rh="true" name="description" content="Open-API specifications are provided for the core &quot;vanilla&quot; Milagro D-TA HTTP REST services and for both the shipped plugins: Bitcoin Wallet Security and Safeguard Secret."><meta data-rh="true" property="og:description" content="Open-API specifications are provided for the core &quot;vanilla&quot; Milagro D-TA HTTP REST services and for both the shipped plugins: Bitcoin Wallet Security and Safeguard Secret."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/dta-details/api"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/dta-details/api" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/dta-details/api" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">API</h1></header><article><div><span><p>Open-API specifications are provided for the core &quot;vanilla&quot; Milagro D-TA HTTP REST services and for both the shipped plugins: Bitcoin Wallet Security and Safeguard Secret.</p>
-<ul>
-<li><a href="https://raw.githubusercontent.com/apache/incubator-milagro-dta/develop/open-api.yaml">Standard API</a> The <a href="/swagger/index.html">Swagger UI is available at this link.</a></li>
-<li><a href="https://raw.githubusercontent.com/apache/incubator-milagro-dta/develop/pkg/bitcoinplugin/open-api.yaml">Bitcoin Wallet Security Plugin API</a></li>
-<li><a href="https://raw.githubusercontent.com/apache/incubator-milagro-dta/develop/pkg/safeguardsecret/open-api.yaml">Safeguard Secret API</a></li>
-</ul>
-<h2><a class="anchor" aria-hidden="true" id="testing-the-api"></a><a href="#testing-the-api" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Testing The API</h2>
-<p>This assumes that your local DTA is running on port 5556 as described in the <a href="/docs/dta-details/quickstart">quick start guide</a>.</p>
-<p>Instructions for installing Swagger UI can be found <a href="https://github.com/swagger-api/swagger-ui/blob/master/docs/usage/installation.md">here</a>.</p>
-<p>For example...</p>
-<pre><code class="hljs">docker pull swaggerapi/swagger-ui  
-
-docker run -p <span class="hljs-number">80</span>:<span class="hljs-number">8080</span> swaggerapi/swagger-ui
-
-</code></pre>
-<p>In your browser hit <a href="http://localhost:80">http://localhost:80</a></p>
-<p>Paste the URL of one of the API docs above into the text box at the top of the screen.</p>
-<p>Please let us know your comments by subscribing to <a href="mailto:dev@milagro.apache.org">dev@milagro.apache.org</a> by sending an email to <a href="mailto:dev-subscribe@milagro.apache.org">dev-subscribe@milagro.apache.org</a>.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/dta-details/quickstart"><span class="arrow-prev">← </span><span>Quick Start</span></a><a class="docs-next button" href="/docs/dta-details/configuration"><span>Configuration</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#testing-the-api">Testing The API</a></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/amcl-overview">AMCL Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/d-ta-overview">D-TA</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/dta-details/api">API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/configuration">Configuration</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/ipfs">IPFS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/authentication">Authentication</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">D-TA</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">API</span><meta itemprop="position" content="2"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>API</h1></header><p>Open-API specifications are provided for the core &quot;vanilla&quot; Milagro D-TA HTTP REST services and for both the shipped plugins: Bitcoin Wallet Security and Safeguard Secret.</p><ul><li><a href="https://raw.githubusercontent.com/apache/incubator-milagro-dta/develop/open-api.yaml" target="_blank" rel="noopener noreferrer">Standard API</a> The <a href="/swagger/index.html">Swagger UI is available at this link.</a>   </li><li><a href="https://raw.githubusercontent.com/apache/incubator-milagro-dta/develop/pkg/bitcoinplugin/open-api.yaml" target="_blank" rel="noopener noreferrer">Bitcoin Wallet Security Plugin API</a>   </li><li><a href="https://raw.githubusercontent.com/apache/incubator-milagro-dta/develop/pkg/safeguardsecret/open-api.yaml" target="_blank" rel="noopener noreferrer">Safeguard Secret API</a>   </li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="testing-the-api">Testing The API<a class="hash-link" href="#testing-the-api" title="Direct link to heading">​</a></h2><p>This assumes that your local DTA is running on port 5556 as described in the <a href="/docs/dta-details/quickstart">quick start guide</a>.</p><p>Instructions for installing Swagger UI can be found <a href="https://github.com/swagger-api/swagger-ui/blob/master/docs/usage/installation.md" target="_blank" rel="noopener noreferrer">here</a>.</p><p>For example...</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">docker pull swaggerapi/swagger-ui  </span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">docker run -p 80:8080 swaggerapi/swagger-ui</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path 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"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>In your browser hit http://localhost:80</p><p>Paste the URL of one of the API docs above into the text box at the top of the screen. </p><p>Please let us know your comments by subscribing to <a href="mailto:dev@milagro.apache.org" target="_blank" rel="noopener noreferrer">dev@milagro.apache.org</a> by sending an email to <a href="mailto:dev-subscribe@milagro.apache.org" target="_blank" rel="noopener noreferrer">dev-subscribe@milagro.apache.org</a>.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/dta-details/quickstart"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Quick Start</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/dta-details/configuration"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Configuration</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#testing-the-api" class="table-of-contents__link toc-highlight">Testing The API</a></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/dta-details/authentication/index.html b/docs/dta-details/authentication/index.html
index d74a4ac..f7af5f0 100644
--- a/docs/dta-details/authentication/index.html
+++ b/docs/dta-details/authentication/index.html
@@ -1,73 +1,22 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Authentication · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="When you first install a Milagro D-TA, the API endpoints are not authenticated by default. In other words, any simple CURL command will elicit the expected response. Milagro D-TAs support the [oAuth bearer token authentication](https://tools.ietf.org/html/rfc6750) out of the box."/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Authentication · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="When you first install a Milagro D-TA, the API endpoints are not authenticated by default. In other words, any simple CURL command will elicit the expected response. Milagro D-TAs support the [oAuth bearer token authentication](https://tools.ietf.org/html/rfc6750) out of the box."/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>D-TA</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-dta-details/authentication">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">Authentication | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/dta-details/authentication"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Authentication | Apache Milagro"><meta data-rh="true" name="description" content="When you first install a Milagro D-TA, the API endpoints are not authenticated by default. In other words, any simple CURL command will elicit the expected response. Milagro D-TAs support the oAuth bearer token authentication out of the box."><meta data-rh="true" property="og:description" content="When you first install a Milagro D-TA, the API endpoints are not authenticated by default. In other words, any simple CURL command will elicit the expected response. Milagro D-TAs support the oAuth bearer token authentication out of the box."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/dta-details/authentication"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/dta-details/authentication" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/dta-details/authentication" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">Authentication</h1></header><article><div><span><p>When you first install a Milagro D-TA, the API endpoints are not authenticated by default. In other words, any simple CURL command will elicit the expected response. Milagro D-TAs support the <a href="https://tools.ietf.org/html/rfc6750">oAuth bearer token authentication</a> out of the box.</p>
-
-    <div class="admonition admonition-caution">
-      <div class="admonition-heading">
-        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="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"/></svg></div> caution</h5>
-      </div>
-      <div class="admonition-content">
-    <p>We strong recommend that you <strong><em>do not</em></strong> run a Milagro D-TA instance without authentication.</p>
-</div></div><p>To configure authentication all that is required is a standard OAuth 2.0 service. If you do not have an OAuth service currently running in your own infrastructure, we recommend any of these fine service providers who will be able to authenticate your API users.</p>
-<ul>
-<li><a href="https://aws.amazon.com/cognito/">AWS Cognito</a></li>
-<li><a href="https://azure.microsoft.com/en-gb/services/active-directory/">Azure Active Directory</a></li>
-<li><a href="https://auth0.com/">AuthO</a></li>
-</ul>
-<h2><a class="anchor" aria-hidden="true" id="configuration"></a><a href="#configuration" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Configuration</h2>
-<p>Please see <a href="/docs/dta-details/configuration">Configuration</a> for details on how to configure config.yaml to support OAuth.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/dta-details/plugins-overview"><span class="arrow-prev">← </span><span>Plugins Overview</span></a><a class="docs-next button" href="/docs/mpc-api-0.1"><span>Multi-Party Computation Library 0.1</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#configuration">Configuration</a></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/amcl-overview">AMCL Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/d-ta-overview">D-TA</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/api">API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/configuration">Configuration</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/ipfs">IPFS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/dta-details/authentication">Authentication</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">D-TA</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">Authentication</span><meta itemprop="position" content="2"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Authentication</h1></header><p>When you first install a Milagro D-TA, the API endpoints are not authenticated by default. In other words, any simple CURL command will elicit the expected response. Milagro D-TAs support the <a href="https://tools.ietf.org/html/rfc6750" target="_blank" rel="noopener noreferrer">oAuth bearer token authentication</a> out of the box.</p><div class="theme-admonition theme-admonition-caution alert alert--warning admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 16 16"><path fill-rule="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"></path></svg></span>caution</div><div class="admonitionContent_S0QG"><p>We strong recommend that you <strong><em>do not</em></strong> run a Milagro D-TA instance without authentication.</p></div></div><p>To configure authentication all that is required is a standard OAuth 2.0 service. If you do not have an OAuth service currently running in your own infrastructure, we recommend any of these fine service providers who will be able to authenticate your API users.</p><ul><li><a href="https://aws.amazon.com/cognito/" target="_blank" rel="noopener noreferrer">AWS Cognito</a></li><li><a href="https://azure.microsoft.com/en-gb/services/active-directory/" target="_blank" rel="noopener noreferrer">Azure Active Directory</a></li><li><a href="https://auth0.com/" target="_blank" rel="noopener noreferrer">AuthO</a></li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration">Configuration<a class="hash-link" href="#configuration" title="Direct link to heading">​</a></h2><p>Please see <a href="/docs/dta-details/configuration">Configuration</a> for details on how to configure config.yaml to support OAuth.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/dta-details/plugins-overview"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Plugins Overview</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/mpc-api-0.1"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Multi-Party Computation Library 0.1</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#configuration" class="table-of-contents__link toc-highlight">Configuration</a></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/dta-details/configuration/index.html b/docs/dta-details/configuration/index.html
index 74a3248..71c0445 100644
--- a/docs/dta-details/configuration/index.html
+++ b/docs/dta-details/configuration/index.html
@@ -1,181 +1,22 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Configuration · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="The Milagro D-TA can be configured either by editing its configuration file or using command line flags.   "/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Configuration · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="The Milagro D-TA can be configured either by editing its configuration file or using command line flags.   "/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>D-TA</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-dta-details/configuration">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">Configuration | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/dta-details/configuration"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Configuration | Apache Milagro"><meta data-rh="true" name="description" content="The Milagro D-TA can be configured either by editing its configuration file or using command line flags."><meta data-rh="true" property="og:description" content="The Milagro D-TA can be configured either by editing its configuration file or using command line flags."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/dta-details/configuration"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/dta-details/configuration" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/dta-details/configuration" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">Configuration</h1></header><article><div><span><p>The Milagro D-TA can be configured either by editing its configuration file or using command line flags.</p>
-
-    <div class="admonition admonition-important">
-      <div class="admonition-heading">
-        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="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"/></svg></div>  running a D-TA as a principal with an external master fiduciary (as described below) is not currently supported but will be in the next release.</h5>
-      </div>
-      <div class="admonition-content">
-    </div></div><h2><a class="anchor" aria-hidden="true" id="configuration-file"></a><a href="#configuration-file" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Configuration File</h2>
-<p>The config file is located in <code>~/.milagro/config.yaml</code></p>
-
-    <div class="admonition admonition-important">
-      <div class="admonition-heading">
-        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="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"/></svg></div>  this configuration method is not yet supported when running in Docker.  Please use the command line flags described below.</h5>
-      </div>
-      <div class="admonition-content">
-    </div></div><p>The default values are shown below with some explanatory comments:</p>
-<pre><code class="hljs css language-json">// http ports
-http:
-  listenAddr: :5556
-  metricsAddr: :5557
-
-// You can secure the endpoints with an oAuth 2.0 compatible identity provider
-  oidcProvider: ""
-  oidcClientID: ""
-  oidcClientKey: ""
-
-// If the endpoints are accessed from a web app put address here
-  corsAllow: http://localhost:3000
-
-node:
-
-// D-TA can be "principal", "master fiduciary" or "multi" 
-  nodeType: multi
-
-// If D-TA is running as principal tell it where its Master Fiduciary is 
-// (if nodeType is "multi" use localhost on same port)
-  masterFiduciaryServer: http://localhost:5556
-
-// IPFS Hash Address of Master Fiduciary's Identity document 
-// (if nodeType is "multi"use nodeID (see below))
-  masterFiduciaryNodeID: QmfZkZ8WR9N2nVg8rktbR2n7hBFN3HmYuFJeVuS3gcT3Mz
-
-// IPFS Hash Address of this node's identity document
-// (created and logged to stdout on startup)
-  nodeID: QmfZkZ8WR9N2nVg8rktbR2n7hBFN3HmYuFJeVuS3gcT3Mz
-
-// String used to refer to this node
-  nodeName: 17c9f630d2e098e4
-
-// Uses embedded "bolt" DB by defaultD-TA 
-// (In productiion you should use external highly available database)
-  dataStore: embedded
-
-// configure logs
-log:
-  format: text
-  level: info
-
-// IPFS - by default D-TA connects to private IPFS network
-  connector: embedded
-  bootstrap:
-  - /ip4/34.252.47.231/tcp/4001/ipfs/QmcEPkctfqQs6vbvTD8EdJmzy4zouAtrV8AwjLbGhbURep
-  listenAddress: /ip4/0.0.0.0/tcp/4001
-  apiAddress: http://localhost:5001
-
-// Define the plugin to be used.  Default is "milagro".  Currently available alternative plugins are "bitcoinwallet" and "safeguardsecret"
-plugins:
-  service: milagro
-</code></pre>
-<h2><a class="anchor" aria-hidden="true" id="command-line-flags"></a><a href="#command-line-flags" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Command Line Flags</h2>
-<p>To view available service commands:</p>
-<pre><code class="hljs css language-json"> ./milagro
-Milagro DTA
-USAGE
-    milagro &lt;command&gt; [options]
-    
-COMMANDS
-    init    Initialize configuration
-    daemon  Starts the milagro daemon
-</code></pre>
-<p>To view the available initialization option flags, use the <code>-help</code> flag:</p>
-<h3><a class="anchor" aria-hidden="true" id="init"></a><a href="#init" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>INIT</h3>
-<pre><code class="hljs css language-json">./milagro init -help
-Usage of init:
-  -interactive
-        Interactive setup
-  -masterfiduciarynode string
-        Master fiduciary node
-  -nodename string
-        Node name
-  -service string
-        Service plugin (default "milagro")
-</code></pre>
-<ul>
-<li><strong>masterfiduciarynode</strong> - if you want to use an external master fiduciary, use this flag to set its identity (nodeID) and endpoint separated with a comma. For example:</li>
-</ul>
-<pre><code class="hljs css language-json">QmR7JfvEwTbSkBZuRLdDcRTpZik2ZAuHnn9BA7giX7oJNK,http://123.456.789.1:5556
-</code></pre>
-
-    <div class="admonition admonition-note">
-      <div class="admonition-heading">
-        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="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"/></svg></div>  By default a D-TA will be both a principal and master fiduciary.</h5>
-      </div>
-      <div class="admonition-content">
-    </div></div><ul>
-<li><strong>nodename</strong> - set your DT-A node name (nodeName) here.  By default, a random name with be generated if none is specified.</li>
-<li><strong>service</strong> - use this flag to set which plugin to use.  Default is &quot;milagro&quot;.  Currently available plugins are &quot;bitcoinwallet&quot; and &quot;safeguardsecret&quot;.</li>
-<li><strong>interactive</strong> - use this flag to prompt for values for the other flags.  For example, to set the name (nodeName) of this DT-A to &quot;alice&quot;, the identity (nodeID) of the external fiduciary to &quot;QmR7JfvEwTbSkBZuRLdDcRTpZik2ZAuHnn9BA7giX7oJNK&quot;, the endpoint of the master fiduciary to &quot;<a href="http://123.456.789.1:5556">http://123.456.789.1:5556</a>&quot; and to use the &quot;bitcoinwallet&quot; plugin:</li>
-</ul>
-<pre><code class="hljs css language-json">./milagro init -interactive
-What is your node name?. Leave blank to generate a random name: alice 
-What is your Master Fiduciary DTA’s node name? Leave blank to use this DTA as the Master Fiduciary: QmR7JfvEwTbSkBZuRLdDcRTpZik2ZAuHnn9BA7giX7oJNK   
-What is your Master Fiduciary DTA’s address?: http://123.456.789.1:5556   
-What plugin do you want to install? (B)itcoin wallet address generator or (S)afeguard secret. Leave blank for no plugin: B
-</code></pre>
-<h3><a class="anchor" aria-hidden="true" id="daemon"></a><a href="#daemon" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>DAEMON</h3>
-<pre><code class="hljs css language-json">./milagro daemon -help
-Usage of daemon:
-  -service string
-        Service plugin (default "bitcoinwallet")
-</code></pre>
-<ul>
-<li><strong>service</strong> - use this flag to set which plugin to use.  Default is &quot;milagro&quot;.  Currently available plugins are &quot;bitcoinwallet&quot; and &quot;safeguardsecret&quot;.</li>
-</ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/dta-details/api"><span class="arrow-prev">← </span><span>API</span></a><a class="docs-next button" href="/docs/dta-details/identity-documents"><span>Identity Documents</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#configuration-file">Configuration File</a></li><li><a href="#command-line-flags">Command Line Flags</a><ul class="toc-headings"><li><a href="#init">INIT</a></li><li><a href="#daemon">DAEMON</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/amcl-overview">AMCL Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/d-ta-overview">D-TA</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/api">API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/dta-details/configuration">Configuration</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/ipfs">IPFS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/authentication">Authentication</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">D-TA</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">Configuration</span><meta itemprop="position" content="2"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Configuration</h1></header><p>The Milagro D-TA can be configured either by editing its configuration file or using command line flags.   </p><div class="theme-admonition theme-admonition-important alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="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"></path></svg></span>running a D-TA as a principal with an external master fiduciary (as described below) is not currently supported but will be in the next release.</div><div class="admonitionContent_S0QG"></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="configuration-file">Configuration File<a class="hash-link" href="#configuration-file" title="Direct link to heading">​</a></h2><p>The config file is located in <code>~/.milagro/config.yaml</code></p><div class="theme-admonition theme-admonition-important alert alert--info admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="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"></path></svg></span>this configuration method is not yet supported when running in Docker.  Please use the command line flags described below.</div><div class="admonitionContent_S0QG"></div></div><p>The default values are shown below with some explanatory comments:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// http ports</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">http</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  listenAddr</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token number" style="color:rgb(247, 140, 108)">5556</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  metricsAddr</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token number" style="color:rgb(247, 140, 108)">5557</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// You can secure the endpoints with an oAuth 2.0 compatible identity provider</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  oidcProvider</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">&quot;&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  oidcClientID</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">&quot;&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  oidcClientKey</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">&quot;&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// If the endpoints are accessed from a web app put address here</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  corsAllow</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> http</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">//localhost:3000</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">node</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// D-TA can be &quot;principal&quot;, &quot;master fiduciary&quot; or &quot;multi&quot; </span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  nodeType</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> multi</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// If D-TA is running as principal tell it where its Master Fiduciary is </span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// (if nodeType is &quot;multi&quot; use localhost on same port)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  masterFiduciaryServer</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> http</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">//localhost:5556</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// IPFS Hash Address of Master Fiduciary&#x27;s Identity document </span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// (if nodeType is &quot;multi&quot;use nodeID (see below))</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  masterFiduciaryNodeID</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> QmfZkZ8WR9N2nVg8rktbR2n7hBFN3HmYuFJeVuS3gcT3Mz</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// IPFS Hash Address of this node&#x27;s identity document</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// (created and logged to stdout on startup)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  nodeID</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> QmfZkZ8WR9N2nVg8rktbR2n7hBFN3HmYuFJeVuS3gcT3Mz</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// String used to refer to this node</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  nodeName</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> 17c9f630d2e098e4</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// Uses embedded &quot;bolt&quot; DB by defaultD-TA </span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// (In productiion you should use external highly available database)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  dataStore</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> embedded</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// configure logs</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">log</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  format</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> text</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  level</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> info</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// IPFS - by default D-TA connects to private IPFS network</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  connector</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> embedded</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  bootstrap</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  - /ip4/</span><span class="token number" style="color:rgb(247, 140, 108)">34.252</span><span class="token plain">.</span><span class="token number" style="color:rgb(247, 140, 108)">47.231</span><span class="token plain">/tcp/</span><span class="token number" style="color:rgb(247, 140, 108)">4001</span><span class="token plain">/ipfs/QmcEPkctfqQs6vbvTD8EdJmzy4zouAtrV8AwjLbGhbURep</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  listenAddress</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> /ip4/</span><span class="token number" style="color:rgb(247, 140, 108)">0.0</span><span class="token plain">.</span><span class="token number" style="color:rgb(247, 140, 108)">0.0</span><span class="token plain">/tcp/</span><span class="token number" style="color:rgb(247, 140, 108)">4001</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  apiAddress</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> http</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">//localhost:5001</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">// Define the plugin to be used.  Default is &quot;milagro&quot;.  Currently available alternative plugins are &quot;bitcoinwallet&quot; and &quot;safeguardsecret&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">plugins</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  service</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"> milagro</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path 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"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="command-line-flags">Command Line Flags<a class="hash-link" href="#command-line-flags" title="Direct link to heading">​</a></h2><p>To view available service commands:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> ./milagro</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">Milagro DTA</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">USAGE</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    milagro &lt;command&gt; </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">options</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">COMMANDS</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    init    Initialize configuration</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    daemon  Starts the milagro daemon</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path 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"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>To view the available initialization option flags, use the <code>-help</code> flag:</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="init">INIT<a class="hash-link" href="#init" title="Direct link to heading">​</a></h3><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">./milagro init -help</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">Usage of init</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  -interactive</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">        Interactive setup</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  -masterfiduciarynode string</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">        Master fiduciary node</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  -nodename string</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">        Node name</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  -service string</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">        Service plugin (default </span><span class="token string" style="color:rgb(195, 232, 141)">&quot;milagro&quot;</span><span class="token plain">)</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path 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"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><ul><li><strong>masterfiduciarynode</strong> - if you want to use an external master fiduciary, use this flag to set its identity (nodeID) and endpoint separated with a comma. For example:</li></ul><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">QmR7JfvEwTbSkBZuRLdDcRTpZik2ZAuHnn9BA7giX7oJNK</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain">http</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">//123.456.789.1:5556</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path 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"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><div class="theme-admonition theme-admonition-note alert alert--secondary admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="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"></path></svg></span>By default a D-TA will be both a principal and master fiduciary. </div><div class="admonitionContent_S0QG"></div></div><ul><li><strong>nodename</strong> - set your DT-A node name (nodeName) here.  By default, a random name with be generated if none is specified.   </li><li><strong>service</strong> - use this flag to set which plugin to use.  Default is &quot;milagro&quot;.  Currently available plugins are &quot;bitcoinwallet&quot; and &quot;safeguardsecret&quot;.</li><li><strong>interactive</strong> - use this flag to prompt for values for the other flags.  For example, to set the name (nodeName) of this DT-A to &quot;alice&quot;, the identity (nodeID) of the external fiduciary to &quot;QmR7JfvEwTbSkBZuRLdDcRTpZik2ZAuHnn9BA7giX7oJNK&quot;, the endpoint of the master fiduciary to &quot;http: and to use the &quot;bitcoinwallet&quot; plugin: </li></ul><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path 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"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="daemon">DAEMON<a class="hash-link" href="#daemon" title="Direct link to heading">​</a></h3><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path 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"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><ul><li><strong>service</strong> - use this flag to set which plugin to use.  Default is &quot;milagro&quot;.  Currently available plugins are &quot;bitcoinwallet&quot; and &quot;safeguardsecret&quot;.</li></ul></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/dta-details/api"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">API</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/dta-details/identity-documents"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Identity Documents</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#configuration-file" class="table-of-contents__link toc-highlight">Configuration File</a></li><li><a href="#command-line-flags" class="table-of-contents__link toc-highlight">Command Line Flags</a><ul><li><a href="#init" class="table-of-contents__link toc-highlight">INIT</a></li><li><a href="#daemon" class="table-of-contents__link toc-highlight">DAEMON</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/dta-details/encrypted-envelope/index.html b/docs/dta-details/encrypted-envelope/index.html
index dabc0cc..8611cfa 100644
--- a/docs/dta-details/encrypted-envelope/index.html
+++ b/docs/dta-details/encrypted-envelope/index.html
@@ -1,98 +1,25 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Encrypted Envelope · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="The Milagro D-TA enables Principals (who require secrets to be safeguarded) to communicate with Fiduciaries who provide custodian services for those secrets. To facilitate these transactions communication between the parties must be secure i.e., must have privacy, authentication, non-repudiation and message integrity. The Milagro D-TA delivers this using its &quot;Encrypted Envelope&quot; messaging format."/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Encrypted Envelope · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="The Milagro D-TA enables Principals (who require secrets to be safeguarded) to communicate with Fiduciaries who provide custodian services for those secrets. To facilitate these transactions communication between the parties must be secure i.e., must have privacy, authentication, non-repudiation and message integrity. The Milagro D-TA delivers this using its &quot;Encrypted Envelope&quot; messaging format."/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>D-TA</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-dta-details/encrypted-envelope">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">Encrypted Envelope | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/dta-details/encrypted-envelope"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Encrypted Envelope | Apache Milagro"><meta data-rh="true" name="description" content="The Milagro D-TA enables Principals (who require secrets to be safeguarded) to communicate with Fiduciaries who provide custodian services for those secrets. To facilitate these transactions communication between the parties must be secure i.e., must have privacy, authentication, non-repudiation and message integrity. The Milagro D-TA delivers this using its &quot;Encrypted Envelope&quot; messaging format."><meta data-rh="true" property="og:description" content="The Milagro D-TA enables Principals (who require secrets to be safeguarded) to communicate with Fiduciaries who provide custodian services for those secrets. To facilitate these transactions communication between the parties must be secure i.e., must have privacy, authentication, non-repudiation and message integrity. The Milagro D-TA delivers this using its &quot;Encrypted Envelope&quot; messaging format."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/dta-details/encrypted-envelope"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/dta-details/encrypted-envelope" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/dta-details/encrypted-envelope" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">Encrypted Envelope</h1></header><article><div><span><p>The Milagro D-TA enables Principals (who require secrets to be safeguarded) to communicate with Fiduciaries who provide custodian services for those secrets. To facilitate these transactions communication between the parties must be secure i.e., must have privacy, authentication, non-repudiation and message integrity. The Milagro D-TA delivers this using its &quot;Encrypted Envelope&quot; messaging format.</p>
-
-    <div class="admonition admonition-tip">
-      <div class="admonition-heading">
-        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="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"/></svg></div>  The Milagro D-TA Encrypted Envelope format is conceptually similar to S/MIME and its cryptographic message format.</h5>
-      </div>
-      <div class="admonition-content">
-    <p>For more information about <a href="https://en.wikipedia.org/wiki/S/MIME">S/MIME, click here</a>.</p>
-</div></div><h2><a class="anchor" aria-hidden="true" id="overview"></a><a href="#overview" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Overview</h2>
-<ol>
-<li>The message consists of a header and body.</li>
-<li>The message body is encrypted with an AES key.</li>
-<li>The AES key for decrypting ciphertext is &quot;encapsulated&quot; i.e. encrypted using each recipient's public key.</li>
-<li>The sender signs the message.</li>
-<li>The message header contains a list of each recipient's encrypted version of the key.</li>
-<li>The message is pushed to IPFS and the IPFS address hash is sent to the recipients.</li>
-<li>The recipients verify the signature and then read the message.</li>
-<li>Only recipients with the matching secret keys can decrypt the AES key and use it to read the encrypted message bodies.</li>
-</ol>
-<p><img src="/img/dta/Envelope.png" alt="Figure 3"></p>
-
-    <div class="admonition admonition-note">
-      <div class="admonition-heading">
-        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="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"/></svg></div>  Post Quantum Cryptography</h5>
-      </div>
-      <div class="admonition-content">
-    <p>At the time of writing the Milagro D-TA implements cryptographic routines from the <a href="https://csrc.nist.gov/Projects/Post-Quantum-Cryptography/Round-2-Submissions">NIST Post-Quantum Cryptography Standardization Project</a>.</p>
-<ul>
-<li><a href="https://sike.org/">SIKE</a> - key encapsulation</li>
-</ul>
-<p>This implementation is currently under review.</p>
-</div></div>
-    <div class="admonition admonition-note">
-      <div class="admonition-heading">
-        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="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"/></svg></div>  digital signatures</h5>
-      </div>
-      <div class="admonition-content">
-    <p>Milagro D-TAs use <a href="https://en.wikipedia.org/wiki/Boneh–Lynn–Shacham">BLS signatures</a> to sign encrypted envelopes.</p>
-</div></div><h2><a class="anchor" aria-hidden="true" id="multipart-messages"></a><a href="#multipart-messages" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Multipart Messages</h2>
-<p>The Milagro D-TA's Encrypted Envelopes are designed to facilitate a dialogue between the Principal, Fiduciary and Beneficiaries. Requests and responses are appended to the original document and published back to IPFS which returns new HASH address.</p>
-<p>In this way, an immutable copy of each transaction is maintained, but the intended recipients can view the entire history of the transaction if they have the required decryption keys. Each message can be seen within each update, providing additional assurance and verification and reducing round trips to IPFS.</p>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/dta-details/identity-documents"><span class="arrow-prev">← </span><span>Identity Documents</span></a><a class="docs-next button" href="/docs/dta-details/ipfs"><span>IPFS</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#overview">Overview</a></li><li><a href="#multipart-messages">Multipart Messages</a></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/amcl-overview">AMCL Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/d-ta-overview">D-TA</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/api">API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/configuration">Configuration</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/ipfs">IPFS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/authentication">Authentication</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">D-TA</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">Encrypted Envelope</span><meta itemprop="position" content="2"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Encrypted Envelope</h1></header><p>The Milagro D-TA enables Principals (who require secrets to be safeguarded) to communicate with Fiduciaries who provide custodian services for those secrets. To facilitate these transactions communication between the parties must be secure i.e., must have privacy, authentication, non-repudiation and message integrity. The Milagro D-TA delivers this using its &quot;Encrypted Envelope&quot; messaging format.</p><div class="theme-admonition theme-admonition-tip alert alert--success admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 12 16"><path fill-rule="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"></path></svg></span>The Milagro D-TA Encrypted Envelope format is conceptually similar to S/MIME and its cryptographic message format.</div><div class="admonitionContent_S0QG"><p>For more information about <a href="https://en.wikipedia.org/wiki/S/MIME" target="_blank" rel="noopener noreferrer">S/MIME, click here</a>.</p></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="overview">Overview<a class="hash-link" href="#overview" title="Direct link to heading">​</a></h2><ol><li>The message consists of a header and body.</li><li>The message body is encrypted with an AES key.</li><li>The AES key for decrypting ciphertext is &quot;encapsulated&quot; i.e. encrypted using each recipient&#x27;s public key.</li><li>The sender signs the message.</li><li>The message header contains a list of each recipient&#x27;s encrypted version of the key.</li><li>The message is pushed to IPFS and the IPFS address hash is sent to the recipients.</li><li>The recipients verify the signature and then read the message.</li><li>Only recipients with the matching secret keys can decrypt the AES key and use it to read the encrypted message bodies.</li></ol><p><img loading="lazy" alt="Figure 3" src="/assets/images/Envelope-2b64b60c67dc11eaa0e9f62058ff4134.png" width="760" height="700" class="img_ev3q"></p><div class="theme-admonition theme-admonition-note alert alert--secondary admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="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"></path></svg></span>Post Quantum Cryptography</div><div class="admonitionContent_S0QG"><p>At the time of writing the Milagro D-TA implements cryptographic routines from the <a href="https://csrc.nist.gov/Projects/Post-Quantum-Cryptography/Round-2-Submissions" target="_blank" rel="noopener noreferrer">NIST Post-Quantum Cryptography Standardization Project</a>.</p><ul><li><a href="https://sike.org/" target="_blank" rel="noopener noreferrer">SIKE</a> - key encapsulation
+This implementation is currently under review.
+:::</li></ul></div></div><p>Milagro D-TAs use <a href="https://en.wikipedia.org/wiki/Boneh%E2%80%93Lynn%E2%80%93Shacham" target="_blank" rel="noopener noreferrer">BLS signatures</a> to sign encrypted envelopes.
+:::</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="multipart-messages">Multipart Messages<a class="hash-link" href="#multipart-messages" title="Direct link to heading">​</a></h2><p>The Milagro D-TA&#x27;s Encrypted Envelopes are designed to facilitate a dialogue between the Principal, Fiduciary and Beneficiaries. Requests and responses are appended to the original document and published back to IPFS which returns new HASH address. </p><p>In this way, an immutable copy of each transaction is maintained, but the intended recipients can view the entire history of the transaction if they have the required decryption keys. Each message can be seen within each update, providing additional assurance and verification and reducing round trips to IPFS.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/dta-details/identity-documents"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Identity Documents</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/dta-details/ipfs"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">IPFS</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#overview" class="table-of-contents__link toc-highlight">Overview</a></li><li><a href="#multipart-messages" class="table-of-contents__link toc-highlight">Multipart Messages</a></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/dta-details/identity-documents/index.html b/docs/dta-details/identity-documents/index.html
index a0f4c09..07bb060 100644
--- a/docs/dta-details/identity-documents/index.html
+++ b/docs/dta-details/identity-documents/index.html
@@ -1,90 +1,22 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Identity Documents · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="The first problem that a Milagro D-TA aims to solve is how entities in the system can identify and trust each other. In order to participate in the Milagro D-TA ecosystem each entity must publish a set of public keys into IPFS. The IPFS hash for an identity documents is then the ID for each entity running a D-TA."/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Identity Documents · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="The first problem that a Milagro D-TA aims to solve is how entities in the system can identify and trust each other. In order to participate in the Milagro D-TA ecosystem each entity must publish a set of public keys into IPFS. The IPFS hash for an identity documents is then the ID for each entity running a D-TA."/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>D-TA</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-dta-details/identity-documents">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">Identity Documents | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/dta-details/identity-documents"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Identity Documents | Apache Milagro"><meta data-rh="true" name="description" content="The first problem that a Milagro D-TA aims to solve is how entities in the system can identify and trust each other. In order to participate in the Milagro D-TA ecosystem each entity must publish a set of public keys into IPFS. The IPFS hash for an identity documents is then the ID for each entity running a D-TA."><meta data-rh="true" property="og:description" content="The first problem that a Milagro D-TA aims to solve is how entities in the system can identify and trust each other. In order to participate in the Milagro D-TA ecosystem each entity must publish a set of public keys into IPFS. The IPFS hash for an identity documents is then the ID for each entity running a D-TA."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/dta-details/identity-documents"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/dta-details/identity-documents" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/dta-details/identity-documents" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">Identity Documents</h1></header><article><div><span><p>The first problem that a Milagro D-TA aims to solve is how entities in the system can identify and trust each other. In order to participate in the Milagro D-TA ecosystem each entity must publish a set of public keys into IPFS. The IPFS hash for an identity documents is then the ID for each entity running a D-TA.</p>
-<p>In order to create an identity document Milagro D-TA provides the following endpoint.</p>
-<p><a href="http://localhost:3000/swagger/index.html#/identity/createIdentity">POST: /identity</a> - An Identity Document contains public keys for signing and key encapsulation.</p>
-
-    <div class="admonition admonition-note">
-      <div class="admonition-heading">
-        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="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"/></svg></div>  The Milagro DTA communication protocol uses protobufs for serialization.</h5>
-      </div>
-      <div class="admonition-content">
-    <p><a href="https://developers.google.com/protocol-buffers/">Click here for more information about Protocol Buffers</a>.</p>
-</div></div><p>The definition of an identity document is:</p>
-<pre><code class="hljs css language-json">message IDDocument {
-    string IDDocumentCID            = 2 ;
-    string AuthenticationReference  = 3 ;
-    string BeneficiaryECPublicKey   = 4 ;    
-    string SikePublicKey            = 5 ;
-    string BlsPublicKey             = 6 ;
-    int64 Timestamp                 = 7 ;
-}
-
-</code></pre>
-<ul>
-<li><code>AuthenticationReference</code> refers to Milagro's out of the box <a href="/docs/dta-details/authentication">oAuth integration</a>.</li>
-</ul>
-<p>The node that is used to create an Identity Document will store the seed and secret keys associated with the Identity. In the RC1 release these will be stored as a JSON file in the key value store:</p>
-<pre><code class="hljs css language-json">//IdentitySecrets - keys required for decryption and signing
-type IdentitySecrets struct {
-    Name            string `json:"name"`
-    Seed            string `json:"seed"`
-    SikeSecretKey   string `json:"sikeSecretKey"`
-    BlsSecretKey    string `json:"BlsSecretKey"`
-}
-</code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/dta-details/configuration"><span class="arrow-prev">← </span><span>Configuration</span></a><a class="docs-next button" href="/docs/dta-details/encrypted-envelope"><span>Encrypted Envelope</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/amcl-overview">AMCL Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/d-ta-overview">D-TA</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/api">API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/configuration">Configuration</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/ipfs">IPFS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/authentication">Authentication</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">D-TA</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">Identity Documents</span><meta itemprop="position" content="2"></li></ul></nav><div class="theme-doc-markdown markdown"><header><h1>Identity Documents</h1></header><p>The first problem that a Milagro D-TA aims to solve is how entities in the system can identify and trust each other. In order to participate in the Milagro D-TA ecosystem each entity must publish a set of public keys into IPFS. The IPFS hash for an identity documents is then the ID for each entity running a D-TA.</p><p>In order to create an identity document Milagro D-TA provides the following endpoint.</p><p><a href="http://localhost:3000/swagger/index.html#/identity/createIdentity" target="_blank" rel="noopener noreferrer">POST: /identity</a> - An Identity Document contains public keys for signing and key encapsulation. </p><div class="theme-admonition theme-admonition-note alert alert--secondary admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="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"></path></svg></span>The Milagro DTA communication protocol uses protobufs for serialization. </div><div class="admonitionContent_S0QG"><p><a href="https://developers.google.com/protocol-buffers/" target="_blank" rel="noopener noreferrer">Click here for more information about Protocol Buffers</a>.</p></div></div><p>The definition of an identity document is:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">message IDDocument </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    string IDDocumentCID            = </span><span class="token number" style="color:rgb(247, 140, 108)">2</span><span class="token plain"> ;</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    string AuthenticationReference  = </span><span class="token number" style="color:rgb(247, 140, 108)">3</span><span class="token plain"> ;</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    string BeneficiaryECPublicKey   = </span><span class="token number" style="color:rgb(247, 140, 108)">4</span><span class="token plain"> ;    </span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    string SikePublicKey            = </span><span class="token number" style="color:rgb(247, 140, 108)">5</span><span class="token plain"> ;</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    string BlsPublicKey             = </span><span class="token number" style="color:rgb(247, 140, 108)">6</span><span class="token plain"> ;</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    int64 Timestamp                 = </span><span class="token number" style="color:rgb(247, 140, 108)">7</span><span class="token plain"> ;</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path 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"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><ul><li><code>AuthenticationReference</code> refers to Milagro&#x27;s out of the box <a href="/docs/dta-details/authentication">oAuth integration</a>.</li></ul><p>The node that is used to create an Identity Document will store the seed and secret keys associated with the Identity. In the RC1 release these will be stored as a JSON file in the key value store:</p><div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">//IdentitySecrets - keys required for decryption and signing</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">type IdentitySecrets struct </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    Name            string `json</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token string" style="color:rgb(195, 232, 141)">&quot;name&quot;</span><span class="token plain">`</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    Seed            string `json</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token string" style="color:rgb(195, 232, 141)">&quot;seed&quot;</span><span class="token plain">`</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    SikeSecretKey   string `json</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token string" style="color:rgb(195, 232, 141)">&quot;sikeSecretKey&quot;</span><span class="token plain">`</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    BlsSecretKey    string `json</span><span class="token operator" style="color:rgb(137, 221, 255)">:</span><span class="token string" style="color:rgb(195, 232, 141)">&quot;BlsSecretKey&quot;</span><span class="token plain">`</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path 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"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/dta-details/configuration"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Configuration</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/dta-details/encrypted-envelope"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Encrypted Envelope</div></a></nav></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/dta-details/ipfs/index.html b/docs/dta-details/ipfs/index.html
index d3a0183..1cebce2 100644
--- a/docs/dta-details/ipfs/index.html
+++ b/docs/dta-details/ipfs/index.html
@@ -1,66 +1,22 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>IPFS · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="The Milagro D-TA aims to provide an auditable record of all interactions between actors in the system. It is vital that all the actors in the system can refer to an agreed record of these transactions in case of dispute or in response to requests from third parties such as law enforcement, audit or compliance organizations.  The Milagro D-TA creates immutable, secure and attributable records of every interaction that occurs in the lifecycle of entities and their dealings with secrets. We do this using the Inter Planetary File System - [IPFS](https://ipfs.io/)."/><meta name="docsearch:language" content="en"/><meta property="og:title" content="IPFS · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="The Milagro D-TA aims to provide an auditable record of all interactions between actors in the system. It is vital that all the actors in the system can refer to an agreed record of these transactions in case of dispute or in response to requests from third parties such as law enforcement, audit or compliance organizations.  The Milagro D-TA creates immutable, secure and attributable records of every interaction that occurs in the lifecycle of entities and their dealings with secrets. We do this using the Inter Planetary File System - [IPFS](https://ipfs.io/)."/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>D-TA</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-dta-details/ipfs">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">IPFS | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/dta-details/ipfs"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="IPFS | Apache Milagro"><meta data-rh="true" name="description" content="The Milagro D-TA aims to provide an auditable record of all interactions between actors in the system. It is vital that all the actors in the system can refer to an agreed record of these transactions in case of dispute or in response to requests from third parties such as law enforcement, audit or compliance organizations.  The Milagro D-TA creates immutable, secure and attributable records of every interaction that occurs in the lifecycle of entities and their dealings with secrets. We do this using the Inter Planetary File System - IPFS."><meta data-rh="true" property="og:description" content="The Milagro D-TA aims to provide an auditable record of all interactions between actors in the system. It is vital that all the actors in the system can refer to an agreed record of these transactions in case of dispute or in response to requests from third parties such as law enforcement, audit or compliance organizations.  The Milagro D-TA creates immutable, secure and attributable records of every interaction that occurs in the lifecycle of entities and their dealings with secrets. We do this using the Inter Planetary File System - IPFS."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/dta-details/ipfs"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/dta-details/ipfs" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/dta-details/ipfs" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">IPFS</h1></header><article><div><span><p>The Milagro D-TA aims to provide an auditable record of all interactions between actors in the system. It is vital that all the actors in the system can refer to an agreed record of these transactions in case of dispute or in response to requests from third parties such as law enforcement, audit or compliance organizations.  The Milagro D-TA creates immutable, secure and attributable records of every interaction that occurs in the lifecycle of entities and their dealings with secrets. We do this using the Inter Planetary File System - <a href="https://ipfs.io/">IPFS</a>.</p>
-<p>IPFS is a globally distributed peer-to-peer file system - think GitHub meets BitTorrent. When a file is written (SET) into your local IPFS node a hash of the document is returned, you can then GET the document using that address. If somebody else who is running an IPFS tries to GET the same hash address the file will be pulled from your node to theirs. If the document is changed in way the hash will change. In this way, an immutability and peer-to-peer consensus is achieved.</p>
-
-    <div class="admonition admonition-note">
-      <div class="admonition-heading">
-        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="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"/></svg></div>  We appreciate feedback regarding this approach.</h5>
-      </div>
-      <div class="admonition-content">
-    <p>For more complex consensus requirements, the Milagro D-TA will be implementing <a href="https://tendermint.com/">Tendermint</a> in following releases.</p>
-</div></div></span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/dta-details/encrypted-envelope"><span class="arrow-prev">← </span><span>Encrypted Envelope</span></a><a class="docs-next button" href="/docs/dta-details/plugins-overview"><span>Plugins Overview</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/amcl-overview">AMCL Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/d-ta-overview">D-TA</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/api">API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/configuration">Configuration</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/dta-details/ipfs">IPFS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/authentication">Authentication</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">D-TA</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">IPFS</span><meta itemprop="position" content="2"></li></ul></nav><div class="theme-doc-markdown markdown"><header><h1>IPFS</h1></header><p>The Milagro D-TA aims to provide an auditable record of all interactions between actors in the system. It is vital that all the actors in the system can refer to an agreed record of these transactions in case of dispute or in response to requests from third parties such as law enforcement, audit or compliance organizations.  The Milagro D-TA creates immutable, secure and attributable records of every interaction that occurs in the lifecycle of entities and their dealings with secrets. We do this using the Inter Planetary File System - <a href="https://ipfs.io/" target="_blank" rel="noopener noreferrer">IPFS</a>.</p><p>IPFS is a globally distributed peer-to-peer file system - think GitHub meets BitTorrent. When a file is written (SET) into your local IPFS node a hash of the document is returned, you can then GET the document using that address. If somebody else who is running an IPFS tries to GET the same hash address the file will be pulled from your node to theirs. If the document is changed in way the hash will change. In this way, an immutability and peer-to-peer consensus is achieved.</p><div class="theme-admonition theme-admonition-note alert alert--secondary admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="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"></path></svg></span>We appreciate feedback regarding this approach.</div><div class="admonitionContent_S0QG"><p>For more complex consensus requirements, the Milagro D-TA will be implementing <a href="https://tendermint.com/" target="_blank" rel="noopener noreferrer">Tendermint</a> in following releases.</p></div></div></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/dta-details/encrypted-envelope"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Encrypted Envelope</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/dta-details/plugins-overview"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Plugins Overview</div></a></nav></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/dta-details/plugin-dev-guide/index.html b/docs/dta-details/plugin-dev-guide/index.html
index 4d2cfb4..334dded 100644
--- a/docs/dta-details/plugin-dev-guide/index.html
+++ b/docs/dta-details/plugin-dev-guide/index.html
@@ -1,58 +1,25 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>D-TA Plugins Developers Guide · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="We have provided a template plugin that provides the same functionality as out-of-the-box milagro."/><meta name="docsearch:language" content="en"/><meta property="og:title" content="D-TA Plugins Developers Guide · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="We have provided a template plugin that provides the same functionality as out-of-the-box milagro."/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class=""><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class=""><a href="/docs/support" target="_self">Support</a></li><li class=""><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class=""><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">D-TA Plugins Developers Guide</h1></header><article><div><span><p>We have provided a template plugin that provides the same functionality as out-of-the-box milagro.</p>
-<h2><a class="anchor" aria-hidden="true" id="developer-notes"></a><a href="#developer-notes" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Developer Notes</h2>
-<p>You need to install protobufs</p>
-<p>If you change the portobufs definition run</p>
-<p>$ protoc -I=. --go_out=. ./docs.proto</p>
-<p>To add a new endpoint to the goKit Microservices framework</p>
-<ol>
-<li>First define the contract in milagro/pkg/milagroservice/proto.go</li>
-</ol>
-<p>Add structs for http transport
-Add responses to milagro/swagger/swagger.config,yaml</p>
-<ol start="2">
-<li>Add and endpoint definition</li>
-</ol>
-<p>milagro/pkg/milagroendpoints/endpoints.go</p>
-<ol start="3">
-<li>Create a handler factory</li>
-</ol>
-<p><strong>Thise instructions still aren't perfect</strong></p>
-<ol>
-<li>Clone the repo and make sure that it works by following the <a href="/docs/dta-details/quickstart">Quick Start</a> instructions</li>
-<li>Copy the plugin template</li>
-</ol>
-<pre><code class="hljs"><span class="hljs-keyword">cp</span> -r pkg/plugintemplate pkg/encryptastring
-</code></pre>
-<ol start="3">
-<li>Rename the package and service
-on a mac you could do this...</li>
-</ol>
-<pre><code class="hljs">sed -<span class="hljs-selector-tag">i</span> <span class="hljs-string">""</span> <span class="hljs-string">"s/template/encryptastring/g"</span> pkg/encryptastring/service<span class="hljs-selector-class">.go</span>
-</code></pre>
-<ol start="4">
-<li>Now create a plugin regsitration file</li>
-</ol>
-<pre><code class="hljs">sed -<span class="hljs-selector-tag">i</span> <span class="hljs-string">""</span> <span class="hljs-string">"s/plugintemplate/encryptastring/g"</span> plugins/encryptastring<span class="hljs-selector-class">.go</span>
-sed -<span class="hljs-selector-tag">i</span> <span class="hljs-string">""</span> <span class="hljs-string">"s/pluginTemplate/encryptAString/g"</span> plugins/encryptastring<span class="hljs-selector-class">.go</span>
-</code></pre>
-<ol start="5">
-<li>Update the Config File</li>
-</ol>
-<pre><code class="hljs"><span class="hljs-attr">nano</span> <span class="hljs-string">~/.milagro/config.yaml</span>
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-dta-details/plugin-dev-guide">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">D-TA Plugins Developers Guide | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/dta-details/plugin-dev-guide"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="D-TA Plugins Developers Guide | Apache Milagro"><meta data-rh="true" name="description" content="We have provided a template plugin that provides the same functionality as out-of-the-box milagro."><meta data-rh="true" property="og:description" content="We have provided a template plugin that provides the same functionality as out-of-the-box milagro."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/dta-details/plugin-dev-guide"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/dta-details/plugin-dev-guide" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/dta-details/plugin-dev-guide" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-<span class="hljs-attr">update....</span>
 
-<span class="hljs-attr">plugins</span>:<span class="hljs-string"></span>
-  <span class="hljs-attr">service</span>: <span class="hljs-string">encryptastring</span>
 
-</code></pre>
-<ol start="6">
-<li>See your plugin in action!</li>
-</ol>
-<pre><code class="hljs">go build -o target<span class="hljs-built_in">/service </span>github.com/apache/incubator-milagro-dta/cmd<span class="hljs-built_in">/service
-</span>target<span class="hljs-built_in">/service
-</span></code></pre>
-<p>Point your browser at:
-<a href="http://localhost:5555/status">http://localhost:5555/status</a></p>
-<p>you should see</p>
-</span></div></article></div><div class="docs-prevnext"></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#developer-notes">Developer Notes</a></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><main class="docMainContainer_gTbr docMainContainerEnhanced_Uz_u"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>D-TA Plugins Developers Guide</h1></header><p>We have provided a template plugin that provides the same functionality as out-of-the-box milagro.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="developer-notes">Developer Notes<a class="hash-link" href="#developer-notes" title="Direct link to heading">​</a></h2><p>You need to install protobufs</p><p>If you change the portobufs definition run </p><p>$ protoc -I=. --go_out=. ./docs.proto</p><p>To add a new endpoint to the goKit Microservices framework</p><ol><li>First define the contract in milagro/pkg/milagroservice/proto.go</li></ol><p>Add structs for http transport
+Add responses to milagro/swagger/swagger.config,yaml</p><ol start="2"><li>Add and endpoint definition</li></ol><p>milagro/pkg/milagroendpoints/endpoints.go</p><ol start="3"><li>Create a handler factory</li></ol><p><strong>Thise instructions still aren&#x27;t perfect</strong></p><ol><li>Clone the repo and make sure that it works by following the <a href="/docs/dta-details/quickstart">Quick Start</a> instructions</li><li>Copy the plugin template</li></ol><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">cp -r pkg/plugintemplate pkg/encryptastring</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path 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"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><ol start="3"><li>Rename the package and service
+on a mac you could do this...</li></ol><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">sed -i &quot;&quot; &quot;s/template/encryptastring/g&quot; pkg/encryptastring/service.go</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path 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"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><ol start="4"><li>Now create a plugin regsitration file</li></ol><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">sed -i &quot;&quot; &quot;s/plugintemplate/encryptastring/g&quot; plugins/encryptastring.go</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">sed -i &quot;&quot; &quot;s/pluginTemplate/encryptAString/g&quot; plugins/encryptastring.go</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path 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"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><ol start="5"><li>Update the Config File</li></ol><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">nano ~/.milagro/config.yaml</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">update....</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">plugins:</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">  service: encryptastring</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path 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"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><ol start="6"><li>See your plugin in action!</li></ol><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">go build -o target/service github.com/apache/incubator-milagro-dta/cmd/service</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">target/service</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path 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"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Point your browser at:
+http://localhost:5555/status</p><p>you should see</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#developer-notes" class="table-of-contents__link toc-highlight">Developer Notes</a></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/dta-details/plugins-overview/index.html b/docs/dta-details/plugins-overview/index.html
index a6e0cfd..4d91c29 100644
--- a/docs/dta-details/plugins-overview/index.html
+++ b/docs/dta-details/plugins-overview/index.html
@@ -1,107 +1,22 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>D-TA Plugins Overview · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="The out-of-the-box Milagro D-TA doesn&#x27;t do much: a Principal&#x27;s D-TA gets a public key from a Fiduciary&#x27;s D-TA, and at a later date, can request the corresponding secret key. It is simple conceptually, but the core operation does this in a hard-to-hack, and fully auditable way. "/><meta name="docsearch:language" content="en"/><meta property="og:title" content="D-TA Plugins Overview · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="The out-of-the-box Milagro D-TA doesn&#x27;t do much: a Principal&#x27;s D-TA gets a public key from a Fiduciary&#x27;s D-TA, and at a later date, can request the corresponding secret key. It is simple conceptually, but the core operation does this in a hard-to-hack, and fully auditable way. "/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>D-TA</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-dta-details/plugins-overview">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">D-TA Plugins Overview | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/dta-details/plugins-overview"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="D-TA Plugins Overview | Apache Milagro"><meta data-rh="true" name="description" content="The out-of-the-box Milagro D-TA doesn&#x27;t do much: a Principal&#x27;s D-TA gets a public key from a Fiduciary&#x27;s D-TA, and at a later date, can request the corresponding secret key. It is simple conceptually, but the core operation does this in a hard-to-hack, and fully auditable way."><meta data-rh="true" property="og:description" content="The out-of-the-box Milagro D-TA doesn&#x27;t do much: a Principal&#x27;s D-TA gets a public key from a Fiduciary&#x27;s D-TA, and at a later date, can request the corresponding secret key. It is simple conceptually, but the core operation does this in a hard-to-hack, and fully auditable way."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/dta-details/plugins-overview"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/dta-details/plugins-overview" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/dta-details/plugins-overview" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">D-TA Plugins Overview</h1></header><article><div><span><p>The out-of-the-box Milagro D-TA doesn't do much: a Principal's D-TA gets a public key from a Fiduciary's D-TA, and at a later date, can request the corresponding secret key. It is simple conceptually, but the core operation does this in a hard-to-hack, and fully auditable way.</p>
-<p>However, this basic capability unlocks a huge range of potential uses cases. Some use cases relate to the Principal i.e. what the keys can be used for, and some relate to the Fiduciary i.e. how the secret key is kept safe (a.k.a. custody).</p>
-<p>The open source &quot;vanilla&quot; Milagro is an attempt to engage a wider community to make the communication between these parties as robust as possible, and the plugin framework enables developers to extend the Milagro D-TA's core capability and apply it to solve real world problems.</p>
-<p>Out of the box the Milagro D-TA comes with two plugins:</p>
-<ol>
-<li><p><strong>Safeguard Secret</strong> - allows the Principal to use a public key obtained from the Fiduciary's D-TA to encrypt a string using ECIES, then obtain the secret key back from the Fiduciary's D-TA to decrypt the same string.</p></li>
-<li><p><strong>Bitcoin Wallet Security</strong> - uses the public key to generate a Bitcoin address and then constructs the corresponding secret key only when it is needed (this is a neat trick using elliptic curve magic).</p></li>
-</ol>
-<p><strong><em>A Note About Security</em></strong></p>
-<p>The point of these plugins is to show you how the framework works and encourage you to develop your own. They do not (out of the box) provide a secure way to store your secret keys. The key pair seed is stored only in the Fiduciary's onboard database - this is not how you should be doing it in production. Future releases will provide guidance on securing these seeds via PKCS#11 integrations and tie-ins to service providers.</p>
-<h2><a class="anchor" aria-hidden="true" id="approach"></a><a href="#approach" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Approach</h2>
-<p>The Milagro D-TA plugin framework has been designed with following assumptions:</p>
-<ul>
-<li><p><strong>Compile-Time</strong></p>
-<p>Milagro D-TA plugins are compiled into the Milagro D-TA - to include one you simply clone the plugin into to the pkg directory and pass a reference to the plugin as a build directive like this...</p>
-<pre><code class="hljs">go build -tags <span class="hljs-string">"plugin encryptAThing"</span> -o target<span class="hljs-built_in">/service </span>github.com/apache/incubator-milagro-dta/cmd<span class="hljs-built_in">/service
-</span></code></pre>
-<p>We considered run-time plugins using shared objects via the <a href="https://golang.org/pkg/plugin/">Go Plugin Package</a> however this presented significant security challenges. We would very much like explore this idea further with the developer community.</p></li>
-<li><p><strong>One-at-a-Time</strong></p>
-<p>Each Milagro D-TA server can only run one plugin at a time. We considered how to allow multiple plugins to interoperate but this produces significant operational and security concerns. Of course if you run a pair of servers, (example: as Principal and Fiduciary) then they can each run different plugins.</p></li>
-<li><p><strong>No New Endpoints</strong></p>
-<p>You can only write plugins to support the <a href="http://localhost:3000/swagger/">Standard Endpoints</a>. This probably seems quite restrictive but we think it is important that Milagro D-TA operates within a defined scope and in a predictable way. The Milagro D-TA is about the distributed management of key pairs, we are concerned that if the plugin framework allowed developers to add endpoints such as <em>GET fastfood/burger?orderby=mostTasty</em> then Milagro would just become a cool implementation of <a href="https://gokit.io/">Go kit</a> and it would become impossible for users and integrators to predict what it will do. <strong>However...</strong></p>
-<ul>
-<li><strong>Let's Talk</strong>: As a community we're excited to add new features to the Milagro D-TA. Propose your new endpoint as a feature (or even submit a PR) and we'll collectively consider adding it.</li>
-<li><strong>Let's Fork</strong>: Go ahead and fork the Milagro D-TA. (But remember that the Milagro D-TA is basically a communication protocol so keep it compatible with other Milagro users).</li>
-</ul></li>
-<li><p><strong>Extensions</strong></p>
-<p>Although we restrict what endpoints Milagro provides we give you a highly flexible way to define what data each endpoint accepts and returns via the <strong>extensions</strong> JSON prop. For example the Safeguard Secret plugin extends the POST /order endpoint like this:</p>
-<pre><code class="hljs"> POST /<span class="hljs-keyword">order</span>
- 
- <span class="hljs-title">Request</span>    
- {
-     <span class="hljs-string">"beneficiaryIDDocumentCID"</span> : <span class="hljs-string">"IPFSAddress"</span>,
-     <span class="hljs-string">"extensions"</span> : {
-         <span class="hljs-string">"plainText"</span>:<span class="hljs-string">"encryptme"</span>
-         }
- }
-
- Response
- {
-     <span class="hljs-string">"orderPart1CID"</span> : <span class="hljs-string">"IPFSAddress"</span>,
-     <span class="hljs-string">"orderPart2CID"</span> : <span class="hljs-string">"IPFSAddress"</span>,
-     <span class="hljs-string">"commitment"</span>    : <span class="hljs-string">"IPFSAddress"</span>,
-     <span class="hljs-string">"createdAt"</span>     : <span class="hljs-number">1563982017</span>,
-     <span class="hljs-string">"extensions"</span> : {
-         <span class="hljs-string">"cypherText"</span>:<span class="hljs-string">"iAmEncrypted"</span>
-     }       
- }
-</code></pre></li>
-</ul>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/dta-details/ipfs"><span class="arrow-prev">← </span><span>IPFS</span></a><a class="docs-next button" href="/docs/dta-details/authentication"><span>Authentication</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#approach">Approach</a></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/amcl-overview">AMCL Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/d-ta-overview">D-TA</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/api">API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/configuration">Configuration</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/ipfs">IPFS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/authentication">Authentication</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">D-TA</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">Plugins Overview</span><meta itemprop="position" content="2"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>D-TA Plugins Overview</h1></header><p>The out-of-the-box Milagro D-TA doesn&#x27;t do much: a Principal&#x27;s D-TA gets a public key from a Fiduciary&#x27;s D-TA, and at a later date, can request the corresponding secret key. It is simple conceptually, but the core operation does this in a hard-to-hack, and fully auditable way. </p><p>However, this basic capability unlocks a huge range of potential uses cases. Some use cases relate to the Principal i.e. what the keys can be used for, and some relate to the Fiduciary i.e. how the secret key is kept safe (a.k.a. custody). </p><p>The open source &quot;vanilla&quot; Milagro is an attempt to engage a wider community to make the communication between these parties as robust as possible, and the plugin framework enables developers to extend the Milagro D-TA&#x27;s core capability and apply it to solve real world problems.</p><p>Out of the box the Milagro D-TA comes with two plugins:</p><ol><li><p><strong>Safeguard Secret</strong> - allows the Principal to use a public key obtained from the Fiduciary&#x27;s D-TA to encrypt a string using ECIES, then obtain the secret key back from the Fiduciary&#x27;s D-TA to decrypt the same string.</p></li><li><p><strong>Bitcoin Wallet Security</strong> - uses the public key to generate a Bitcoin address and then constructs the corresponding secret key only when it is needed (this is a neat trick using elliptic curve magic).</p></li></ol><p><strong><em>A Note About Security</em></strong></p><p>The point of these plugins is to show you how the framework works and encourage you to develop your own. They do not (out of the box) provide a secure way to store your secret keys. The key pair seed is stored only in the Fiduciary&#x27;s onboard database - this is not how you should be doing it in production. Future releases will provide guidance on securing these seeds via PKCS#11 integrations and tie-ins to service providers.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="approach">Approach<a class="hash-link" href="#approach" title="Direct link to heading">​</a></h2><p>The Milagro D-TA plugin framework has been designed with following assumptions:</p><ul><li><p><strong>Compile-Time</strong></p><p>  Milagro D-TA plugins are compiled into the Milagro D-TA - to include one you simply clone the plugin into to the pkg directory and pass a reference to the plugin as a build directive like this...</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">go build -tags &quot;plugin encryptAThing&quot; -o target/service github.com/apache/incubator-milagro-dta/cmd/service</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path 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"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>  We considered run-time plugins using shared objects via the <a href="https://golang.org/pkg/plugin/" target="_blank" rel="noopener noreferrer">Go Plugin Package</a> however this presented significant security challenges. We would very much like explore this idea further with the developer community.</p></li><li><p><strong>One-at-a-Time</strong></p><p> Each Milagro D-TA server can only run one plugin at a time. We considered how to allow multiple plugins to interoperate but this produces significant operational and security concerns. Of course if you run a pair of servers, (example: as Principal and Fiduciary) then they can each run different plugins.</p></li><li><p><strong>No New Endpoints</strong></p><p>  You can only write plugins to support the <a href="http://localhost:3000/swagger/" target="_blank" rel="noopener noreferrer">Standard Endpoints</a>. This probably seems quite restrictive but we think it is important that Milagro D-TA operates within a defined scope and in a predictable way. The Milagro D-TA is about the distributed management of key pairs, we are concerned that if the plugin framework allowed developers to add endpoints such as <em>GET fastfood/burger?orderby=mostTasty</em> then Milagro would just become a cool implementation of <a href="https://gokit.io/" target="_blank" rel="noopener noreferrer">Go kit</a> and it would become impossible for users and integrators to predict what it will do. <strong>However...</strong></p><ul><li><strong>Let&#x27;s Talk</strong>: As a community we&#x27;re excited to add new features to the Milagro D-TA. Propose your new endpoint as a feature (or even submit a PR) and we&#x27;ll collectively consider adding it.</li><li><strong>Let&#x27;s Fork</strong>: Go ahead and fork the Milagro D-TA. (But remember that the Milagro D-TA is basically a communication protocol so keep it compatible with other Milagro users).</li></ul></li><li><p><strong>Extensions</strong> </p><p> Although we restrict what endpoints Milagro provides we give you a highly flexible way to define what data each endpoint accepts and returns via the <strong>extensions</strong> JSON prop. For example the Safeguard Secret plugin extends the POST /order endpoint like this:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> POST /order</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> Request    </span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> {</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">     &quot;beneficiaryIDDocumentCID&quot; : &quot;IPFSAddress&quot;,</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">     &quot;extensions&quot; : {</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">         &quot;plainText&quot;:&quot;encryptme&quot;</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">         }</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> }</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> Response</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> {</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">    &quot;orderPart1CID&quot; : &quot;IPFSAddress&quot;,</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">   &quot;orderPart2CID&quot; : &quot;IPFSAddress&quot;,</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">   &quot;commitment&quot;    : &quot;IPFSAddress&quot;,</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">   &quot;createdAt&quot;     : 1563982017,</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">     &quot;extensions&quot; : {</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">         &quot;cypherText&quot;:&quot;iAmEncrypted&quot;</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">     }      </span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> }</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path 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"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></li></ul></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/dta-details/ipfs"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">IPFS</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/dta-details/authentication"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Authentication</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#approach" class="table-of-contents__link toc-highlight">Approach</a></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/dta-details/quickstart/index.html b/docs/dta-details/quickstart/index.html
index 4d57645..f641609 100644
--- a/docs/dta-details/quickstart/index.html
+++ b/docs/dta-details/quickstart/index.html
@@ -1,111 +1,22 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Quick Start · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="## Docker"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Quick Start · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="## Docker"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>D-TA</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-dta-details/quickstart">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">Quick Start | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/dta-details/quickstart"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Quick Start | Apache Milagro"><meta data-rh="true" name="description" content="Docker"><meta data-rh="true" property="og:description" content="Docker"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/dta-details/quickstart"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/dta-details/quickstart" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/dta-details/quickstart" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">Quick Start</h1></header><article><div><span><h2><a class="anchor" aria-hidden="true" id="docker"></a><a href="#docker" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Docker</h2>
-<p>The easiest way to see a D-TA in action is to run it in a Docker container. The default settings will run a single D-TA that acts as Principal, Fiduciary and Beneficiary. The default settings include an embedded IPFS node connected to a private IPFS network and an embedded &quot;Bolt&quot; database. This will get you up and running quickly but is <strong>not for production use!</strong></p>
-<p>Please see the repo's <a href="https://github.com/apache/incubator-milagro-dta">README</a> for alternative build instructions.</p>
-<pre><code class="hljs"><span class="hljs-attr">git</span> <span class="hljs-string">clone https://github.com/apache/incubator-milagro-dta.git</span>
-
-<span class="hljs-attr">cd</span> <span class="hljs-string">incubator-milagro-dta</span>
-
-<span class="hljs-attr">docker</span> <span class="hljs-string">build -t milagrodta .</span>
-
-<span class="hljs-attr">docker</span> <span class="hljs-string">run -it -p 5556:5556 milagrodta</span>
-
-</code></pre>
-<p>Now you can test if the D-TA is running by hitting <a href="http://localhost:5556/v1/status">http://localhost:5556/v1/status</a></p>
-<p>You should see something like...</p>
-<pre><code class="hljs">{
-<span class="hljs-attr">"application"</span>: <span class="hljs-string">"Milagro Distributed Trust"</span>,
-<span class="hljs-attr">"timeStamp"</span>: <span class="hljs-string">"2019-08-29T11:11:15.9089824Z"</span>,
-<span class="hljs-attr">"apiVersion"</span>: <span class="hljs-string">"v1"</span>,
-<span class="hljs-attr">"nodeCID"</span>: <span class="hljs-string">"QmckgCeQRenUk7WHPcD5fxjLxScxyKp5QY1P7GW69NZnR1"</span>,
-<span class="hljs-attr">"extensionVendor"</span>: <span class="hljs-string">"Milagro"</span>,
-<span class="hljs-attr">"plugin"</span>: <span class="hljs-string">"milagro"</span>
-}
-
-</code></pre>
-<h2><a class="anchor" aria-hidden="true" id="plugins"></a><a href="#plugins" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Plugins</h2>
-<p>The Milagro D-TA comes with two additional plugins out-of-the box, which are intended to demonstrate how it can be extended.</p>
-<h3><a class="anchor" aria-hidden="true" id="safeguard-secret"></a><a href="#safeguard-secret" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Safeguard Secret</h3>
-<p>The Safeguard Secret plugin encrypts a string with the public key using <a href="https://medium.com/asecuritysite-when-bob-met-alice/generating-an-encryption-key-without-a-pass-phrase-meet-ecies-bbea1787d846">ECIES</a> and decrypts it when the Fiduciary's D-TA returns the secret key.</p>
-<p><strong>To Run Safeguard Secret</strong></p>
-<pre><code class="hljs">docker run -it -p <span class="hljs-number">5556</span>:<span class="hljs-number">5556</span> milagrodta -service safeguardsecret
-</code></pre>
-<h3><a class="anchor" aria-hidden="true" id="bitcoin-wallet-security"></a><a href="#bitcoin-wallet-security" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Bitcoin Wallet Security</h3>
-<p>A Bitcoin Wallet uses a public key (derived from a private key) to create a Bitcoin address. To spend funds from that address, the private key is needed. Insufficient security of private keys has let to billions of dollars in theft. The Principal's Bitcoin Wallet Security plugin receives one half of the public key from the Fiduciary to ultimately create the wallet address. To spend the funds, the Fiduciary D-TA returns a secret to the Beneficiary's D-TA. A process adds this secret to one that is resident within the Principal's D-TA to materialize the wallet's private key.</p>
-<p><strong>To Run Bitcoin Wallet Security</strong></p>
-<pre><code class="hljs">docker run -it -p <span class="hljs-number">5556</span>:<span class="hljs-number">5556</span> milagrodta -service bitcoinwallet
-</code></pre>
-<p>You can confirm that the plugins have loaded by hitting <a href="http://localhost:5556/v1/status">http://localhost:5556/v1/status</a></p>
-<h2><a class="anchor" aria-hidden="true" id="d-ta-api"></a><a href="#d-ta-api" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>D-TA API</h2>
-<p>A Swagger description of the API is accessed <a href="/swagger/index.html">via this link.</a></p>
-<p>The Milagro D-TA can easily be integrated with an existing back office system, called from a front-end application or called from CURL, Postman, Swagger etc.</p>
-<p>The API has three parts to it:</p>
-<ol>
-<li><strong>Identity Endpoints</strong> - that support creation and retrieval of <a href="/docs/dta-details/identity-documents">identity documents</a></li>
-<li><strong>Order Endpoints</strong>
-<ol>
-<li>Creates orders for new public keys</li>
-<li>Requests for secret keys to be transferred</li>
-<li>Allows orders to be searched and listed</li>
-</ol></li>
-<li><strong>Fulfillment RPC</strong> - these are the server-to-server remote procedure calls that enable a Principal D-TA to communicate with a Master Fiduciary D-TA</li>
-</ol>
-<h3><a class="anchor" aria-hidden="true" id="example---to-create-a-new-identity"></a><a href="#example---to-create-a-new-identity" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Example - To create a new Identity</h3>
-<pre><code class="hljs">curl -X POST <span class="hljs-string">"http://localhost:5556/v1/identity"</span> -H <span class="hljs-string">"accept: application/json"</span> -H <span class="hljs-string">"Content-Type: application/json"</span> -d <span class="hljs-string">"{<span class="hljs-subst">\"</span>name<span class="hljs-subst">\"</span>:<span class="hljs-subst">\"</span>thisNode<span class="hljs-subst">\"</span>}"</span>
-</code></pre>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/d-ta-overview"><span class="arrow-prev">← </span><span>D-TA Overview</span></a><a class="docs-next button" href="/docs/dta-details/api"><span>API</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#docker">Docker</a></li><li><a href="#plugins">Plugins</a><ul class="toc-headings"><li><a href="#safeguard-secret">Safeguard Secret</a></li><li><a href="#bitcoin-wallet-security">Bitcoin Wallet Security</a></li></ul></li><li><a href="#d-ta-api">D-TA API</a><ul class="toc-headings"><li><a href="#example---to-create-a-new-identity">Example - To create a new Identity</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/amcl-overview">AMCL Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/d-ta-overview">D-TA</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/api">API</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/configuration">Configuration</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/ipfs">IPFS</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/dta-details/authentication">Authentication</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">D-TA</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">Quick Start</span><meta itemprop="position" content="2"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Quick Start</h1></header><h2 class="anchor anchorWithStickyNavbar_LWe7" id="docker">Docker<a class="hash-link" href="#docker" title="Direct link to heading">​</a></h2><p>The easiest way to see a D-TA in action is to run it in a Docker container. The default settings will run a single D-TA that acts as Principal, Fiduciary and Beneficiary. The default settings include an embedded IPFS node connected to a private IPFS network and an embedded &quot;Bolt&quot; database. This will get you up and running quickly but is <strong>not for production use!</strong></p><p>Please see the repo&#x27;s <a href="https://github.com/apache/incubator-milagro-dta" target="_blank" rel="noopener noreferrer">README</a> for alternative build instructions.</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">git clone https://github.com/apache/incubator-milagro-dta.git</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">cd incubator-milagro-dta</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">docker build -t milagrodta .</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">docker run -it -p 5556:5556 milagrodta</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path 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"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>Now you can test if the D-TA is running by hitting http:</p><p>You should see something like...</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path 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"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h2 class="anchor anchorWithStickyNavbar_LWe7" id="plugins">Plugins<a class="hash-link" href="#plugins" title="Direct link to heading">​</a></h2><p>The Milagro D-TA comes with two additional plugins out-of-the box, which are intended to demonstrate how it can be extended.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="safeguard-secret">Safeguard Secret<a class="hash-link" href="#safeguard-secret" title="Direct link to heading">​</a></h3><p>The Safeguard Secret plugin encrypts a string with the public key using <a href="https://medium.com/asecuritysite-when-bob-met-alice/generating-an-encryption-key-without-a-pass-phrase-meet-ecies-bbea1787d846" target="_blank" rel="noopener noreferrer">ECIES</a> and decrypts it when the Fiduciary&#x27;s D-TA returns the secret key.</p><p><strong>To Run Safeguard Secret</strong></p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path 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"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bitcoin-wallet-security">Bitcoin Wallet Security<a class="hash-link" href="#bitcoin-wallet-security" title="Direct link to heading">​</a></h3><p>A Bitcoin Wallet uses a public key (derived from a private key) to create a Bitcoin address. To spend funds from that address, the private key is needed. Insufficient security of private keys has let to billions of dollars in theft. The Principal&#x27;s Bitcoin Wallet Security plugin receives one half of the public key from the Fiduciary to ultimately create the wallet address. To spend the funds, the Fiduciary D-TA returns a secret to the Beneficiary&#x27;s D-TA. A process adds this secret to one that is resident within the Principal&#x27;s D-TA to materialize the wallet&#x27;s private key.</p><p><strong>To Run Bitcoin Wallet Security</strong></p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path 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"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>You can confirm that the plugins have loaded by hitting </p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="d-ta-api">D-TA API<a class="hash-link" href="#d-ta-api" title="Direct link to heading">​</a></h2><p>A Swagger description of the API is accessed <a href="/swagger/index.html">via this link.</a></p><p>The Milagro D-TA can easily be integrated with an existing back office system, called from a front-end application or called from CURL, Postman, Swagger etc.</p><p>The API has three parts to it:</p><ol><li><strong>Identity Endpoints</strong> - that support creation and retrieval of <a href="/docs/dta-details/identity-documents">identity documents</a></li><li><strong>Order Endpoints</strong> <ol><li>Creates orders for new public keys</li><li>Requests for secret keys to be transferred</li><li>Allows orders to be searched and listed</li></ol></li><li><strong>Fulfillment RPC</strong> - these are the server-to-server remote procedure calls that enable a Principal D-TA to communicate with a Master Fiduciary D-TA</li></ol><h3 class="anchor anchorWithStickyNavbar_LWe7" id="example---to-create-a-new-identity">Example - To create a new Identity<a class="hash-link" href="#example---to-create-a-new-identity" title="Direct link to heading">​</a></h3><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path 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"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/d-ta-overview"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">D-TA Overview</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/dta-details/api"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">API</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#docker" class="table-of-contents__link toc-highlight">Docker</a></li><li><a href="#plugins" class="table-of-contents__link toc-highlight">Plugins</a><ul><li><a href="#safeguard-secret" class="table-of-contents__link toc-highlight">Safeguard Secret</a></li><li><a href="#bitcoin-wallet-security" class="table-of-contents__link toc-highlight">Bitcoin Wallet Security</a></li></ul></li><li><a href="#d-ta-api" class="table-of-contents__link toc-highlight">D-TA API</a><ul><li><a href="#example---to-create-a-new-identity" class="table-of-contents__link toc-highlight">Example - To create a new Identity</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/milagro-crypto/index.html b/docs/milagro-crypto/index.html
index 51354b4..115cf17 100644
--- a/docs/milagro-crypto/index.html
+++ b/docs/milagro-crypto/index.html
@@ -1,127 +1,28 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Milagro Crypto · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="One of the critical points about information security is to give access to resources only to authorized entities and deny access to unauthorized ones."/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Milagro Crypto · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="One of the critical points about information security is to give access to resources only to authorized entities and deny access to unauthorized ones."/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>About Milagro</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-milagro-crypto">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">Milagro Crypto | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/milagro-crypto"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Milagro Crypto | Apache Milagro"><meta data-rh="true" name="description" content="One of the critical points about information security is to give access to resources only to authorized entities and deny access to unauthorized ones."><meta data-rh="true" property="og:description" content="One of the critical points about information security is to give access to resources only to authorized entities and deny access to unauthorized ones."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/milagro-crypto"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/milagro-crypto" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/milagro-crypto" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">Milagro Crypto</h1></header><article><div><span><p>One of the critical points about information security is to give access to resources only to authorized entities and deny access to unauthorized ones.
-Preventing unauthorized access very often comes down to making it <strong><em>almost impossible</em></strong>, i.e., tough, expensive, complicated, and time-consuming for the unauthorized entities to get access to resources.</p>
-<p>The same principles apply to cryptography. In most cases, a suitable encryption mechanism satisfies at least two basic requirements:</p>
-<ol>
-<li>It is possible to give easy access to encrypted, cryptographically protected content to authorized entities.</li>
-<li>It is possible to make it extremely challenging for unauthorized entities to access encrypted (ditto) content.</li>
-</ol>
-<p>Using the above, we can define an operation: Encryption that is tough to reverse without possessing a particular parameter, for example, a decryption key.
-In RSA-based encryption two prime numbers, the private key, are multiplied to generate a public key, so that it is almost impossible to reverse the operation and retrieve the original prime numbers.</p>
-<p>Multiple sources are available online to read more on the topic. We recommend this short paper from <a href="https://math.berkeley.edu/~kpmann/encryption.pdf">Cal Berkeley at this link</a>.</p>
-<p>As noted in the mentioned paper, with RSA, we need enormous prime numbers to make it <strong><em>almost impossible</em></strong> to break the encryption, hence to find the two big prime numbers.
-On elliptic curves, multiplication of a point by a number can be defined so that much shorter numbers than in the big prime number case are needed to reach the same level of <strong><em>almost impossibility</em></strong>.</p>
-<h2><a class="anchor" aria-hidden="true" id="elliptic-curve-cryptography"></a><a href="#elliptic-curve-cryptography" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Elliptic Curve Cryptography</h2>
-<p>Elliptic curves are another way to do encryption. Elliptic curves are mathematical structures, on which operations like addition and multiplications of points are easily defined.
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/milagro-intro">About Milagro</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/milagro-design">Milagro Design</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/amcl-overview">AMCL Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">About Milagro</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">Milagro Crypto</span><meta itemprop="position" content="2"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Milagro Crypto</h1></header><p>One of the critical points about information security is to give access to resources only to authorized entities and deny access to unauthorized ones.
+Preventing unauthorized access very often comes down to making it <strong><em>almost impossible</em></strong>, i.e., tough, expensive, complicated, and time-consuming for the unauthorized entities to get access to resources.</p><p>The same principles apply to cryptography. In most cases, a suitable encryption mechanism satisfies at least two basic requirements:</p><ol><li>It is possible to give easy access to encrypted, cryptographically protected content to authorized entities.</li><li>It is possible to make it extremely challenging for unauthorized entities to access encrypted (ditto) content.</li></ol><p>Using the above, we can define an operation: Encryption that is tough to reverse without possessing a particular parameter, for example, a decryption key.
+In RSA-based encryption two prime numbers, the private key, are multiplied to generate a public key, so that it is almost impossible to reverse the operation and retrieve the original prime numbers.</p><p>Multiple sources are available online to read more on the topic. We recommend this short paper from <a href="https://math.berkeley.edu/~kpmann/encryption.pdf" target="_blank" rel="noopener noreferrer">Cal Berkeley at this link</a>.</p><p>As noted in the mentioned paper, with RSA, we need enormous prime numbers to make it <strong><em>almost impossible</em></strong> to break the encryption, hence to find the two big prime numbers.
+On elliptic curves, multiplication of a point by a number can be defined so that much shorter numbers than in the big prime number case are needed to reach the same level of <strong><em>almost impossibility</em></strong>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="elliptic-curve-cryptography">Elliptic Curve Cryptography<a class="hash-link" href="#elliptic-curve-cryptography" title="Direct link to heading">​</a></h2><p>Elliptic curves are another way to do encryption. Elliptic curves are mathematical structures, on which operations like addition and multiplications of points are easily defined.
 In particular, multiplication of a point by a number is a relatively easy operation to compute, while it is <strong><em>almost impossible</em></strong> to reverse the process, that is, to determine
-the multiplier knowing the result of the multiplication.</p>
-<p>The problem of reversing the multiplication is known as the Discrete Logarithm Problem on elliptic curves (ECDLP).
-The difference in computational complexity (between performing the multiplication and reversing the result to retrieve the multiplier) is one of the essential cornerstones of elliptic curve cryptography.</p>
-<h2><a class="anchor" aria-hidden="true" id="pairing-based-cryptography"></a><a href="#pairing-based-cryptography" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Pairing Based Cryptography</h2>
-<p>Using elliptic curves we can now define on some elliptic curve a bilinear function called a <strong><em>pairing</em></strong>, which enables a mapping from two points on the same curve (or points on two related curves) into a different mathematical structure called a finite field. The bilinearity of the pairing is the key characteristic that makes pairing interesting and widely used in cryptography.</p>
-<p>A <strong><em>bilinear pairing</em></strong> \( e \) maps a pair of points (hence the name pairing) on an elliptic curve \( E \), defined over some field \( F_{q} \) to an element of the multiplicative group of a finite extension of \( {F}_{q^k} \).</p>
-<p>$$ e(mA+B, nP + Q) = e(A,P)^{mn} e(B, Q) $$</p>
-<p>The elements \( P \) and \( Q \) lie in two different groups, respectively \( G_{1} \) and \( G_{2} \). The choice of those two different group determines a different <strong><em>types</em></strong> of pairing.</p>
-<p>Let \( E \) an ordinary elliptic curve, take \( G_{1} \neq G_{2} \), and if there is not an efficiently computable isomorphism \( \phi:G_{1}\to G_{2} \) then the pairing is said to be of <strong><em>Type\( -3 \)</em></strong>.</p>
-<p>Currently, most of the state-of-the-art implementations of pairings take place on ordinary curves that assume the <strong><em>Type\( -3 \)</em></strong> scenario for reasons of efficiency and secure implementation.</p>
-<h2><a class="anchor" aria-hidden="true" id="identity-based-encryption"></a><a href="#identity-based-encryption" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Identity Based Encryption</h2>
-<p>Pairing-based cryptography builds on elliptic curve-based cryptography, but the extra functionality of the pairing enables us to design schemes which would otherwise be impossible to realize, or would be prohibitively expensive to do using RSA-based cryptosystems.</p>
-<p>Identity-based encryption (IBE) is one such scheme that has received a large of amount of attention from the crypto community, and where commercially available products have been on the market for some time and are in wide use today.</p>
-<p>IBE is similar to classical asymmetric key cryptography, in that each user has a public key for encryption and a private key for decryption. But there are many differences:</p>
-<ol>
-<li>IBE allows public keys to be set to the value of a pre-existing identifier, such as an email address, while in PKI the public key does not contain the notion of an identity, and the association with an identifier is created by a certificate signed by a third party (Certification Authority).</li>
-<li>Clients or individual users do not generate private keys, but must instead download them from a trusted third party known as the Trust Authority (TA).</li>
-<li>In IBE, to encrypt messages, the sender must obtain public “system parameters” from the Trust Authority (TA). These system parameters are used in combination with the intended recipient’s identity string (e.g. email address) to generate an encrypted message.</li>
-</ol>
-<h2><a class="anchor" aria-hidden="true" id="post-quantum-cryptography"></a><a href="#post-quantum-cryptography" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Post-Quantum Cryptography</h2>
-<p>&quot;Post-quantum cryptography (sometimes referred to as quantum-proof, quantum-safe or quantum-resistant) refers to cryptographic algorithms (usually public-key algorithms) that are thought to be secure against an attack by a quantum computer. As of 2018, this is not true for the most popular public-key algorithms, which can be efficiently broken by a sufficiently strong hypothetical quantum computer.</p>
-<p>The problem with currently popular algorithms is that their security relies on one of three hard mathematical problems: the integer factorization problem, the discrete logarithm problem or the elliptic-curve discrete logarithm problem. All of these problems can be easily solved on a sufficiently powerful quantum computer running Shor's algorithm.</p>
-<p>Even though current, publicly known, experimental quantum computers lack processing power to break any real cryptographic algorithm, many cryptographers are designing new algorithms to prepare for a time when quantum computing becomes a threat.&quot;<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup></p>
-<h2><a class="anchor" aria-hidden="true" id="zero-knowledge-proof"></a><a href="#zero-knowledge-proof" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Zero Knowledge Proof</h2>
-<p>&quot;In cryptography, a <strong>zero-knowledge proof</strong> or <strong>zero-knowledge protocol</strong> is a method by which one party (the <em>prover</em>) can prove to another party (the <em>verifier</em>) that a given statement is true, without conveying any information apart from the fact that the statement is indeed true.</p>
-<p>If proving the statement requires knowledge of some secret information on the part of the prover, the definition implies that the verifier will not be able to prove the statement in turn to anyone else, since the verifier does not possess the secret information.</p>
-<p>Notice that the statement being proved must include the assertion that the prover has such knowledge (otherwise, the statement would not be proved in zero-knowledge, since at the end of the protocol the verifier would gain the additional information that the prover has knowledge of the required secret information).</p>
-<p>If the statement consists <em>only</em> of the fact that the prover possesses the secret information, it is a special case known as <em>zero-knowledge proof of knowledge</em>, and it nicely illustrates the essence of the notion of zero-knowledge proofs: proving that one has knowledge of certain information is trivial if one is allowed to simply reveal that information; the challenge is proving that one has such knowledge without revealing the secret information or anything else.&quot;<sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup></p>
-<h2><a class="anchor" aria-hidden="true" id="summary"></a><a href="#summary" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Summary</h2>
-<p><strong>Elliptic curve cryptography</strong> is an attractive alternative to conventional public key cryptography for implementation on constrained devices, where the significant computational resources i.e. speed, memory are limited and low-power wireless communication protocols is essential. It attains the same security levels as traditional cryptosystems using smaller parameter sizes.</p>
-<p><strong>Pairing-based cryptography</strong> builds on elliptic curve-based cryptography, but the extra functionality of the pairing enables us to design schemes which would otherwise be impossible to realize, or would be prohibitively expensive. Examples include identity-based encryption, group signatures and non-interactive zero-knowledge proofs.</p>
-<p><strong>Identity-based encryption</strong> doesn’t require certificates and certificate authorities. A trusted third party generates all the private keys, but all the public keys can be derived knowing the identity of the public key owner, for example, an email address.  That means that no certificate is needed to bind a public key to its owner.  Typically, it is up to the application to verify the owner possesses access to the unique identity attribute during the enrollment process in which a client obtains a private key.</p>
-<p><strong>Post-quantum cryptography</strong> Post-quantum cryptography are cryptosystems which can be run on a classical computer, but are secure even if an adversary possesses a quantum computer. For data that must be private, but has the potential to be long lived and publicly available, using post-quantum secure algorithms like AES 256-bit for encryption and SIKE for encapsulation of encryption keys is essential.</p>
-<p><strong>Zero-knowledge proof</strong> is a method by which one party (the prover) can prove to another party (the verifier) that a given statement is true, without conveying any information apart from the fact that the statement is indeed true.</p>
-<p>For an in-depth dive into the cryptographic protocols in use within the Milagro framework, see the next section <a href="/docs/milagro-protocols">Milagro Protocols</a>.</p>
-<hr>
-
-    <div class="admonition admonition-note">
-      <div class="admonition-heading">
-        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="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"/></svg></div>  See an error in this documentation?</h5>
-      </div>
-      <div class="admonition-content">
-    <p>Submit a pull request on the development branch of <a href="https://github.com/apache/incubator-milagro">Milagro Website Repo</a>.</p>
-</div></div><!--
-Supported admonition types are: caution, note, important, tip, warning.
--->
-<hr class="footnotes-sep">
-<section class="footnotes">
-<ol class="footnotes-list">
-<li id="fn1"  class="footnote-item"><p><a href="https://en.wikipedia.org/wiki/Post-quantum_cryptography">Wikipedia article</a> <a href="#fnref1" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn2"  class="footnote-item"><p><a href="https://en.wikipedia.org/wiki/Zero-knowledge_proof">Wikipedia article</a> <a href="#fnref2" class="footnote-backref">↩</a></p>
-</li>
-</ol>
-</section>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/milagro-intro"><span class="arrow-prev">← </span><span>Milagro Introduction</span></a><a class="docs-next button" href="/docs/milagro-protocols"><span>Milagro Protocols</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#elliptic-curve-cryptography">Elliptic Curve Cryptography</a></li><li><a href="#pairing-based-cryptography">Pairing Based Cryptography</a></li><li><a href="#identity-based-encryption">Identity Based Encryption</a></li><li><a href="#post-quantum-cryptography">Post-Quantum Cryptography</a></li><li><a href="#zero-knowledge-proof">Zero Knowledge Proof</a></li><li><a href="#summary">Summary</a></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+the multiplier knowing the result of the multiplication.</p><p>The problem of reversing the multiplication is known as the Discrete Logarithm Problem on elliptic curves (ECDLP).
+The difference in computational complexity (between performing the multiplication and reversing the result to retrieve the multiplier) is one of the essential cornerstones of elliptic curve cryptography.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="pairing-based-cryptography">Pairing Based Cryptography<a class="hash-link" href="#pairing-based-cryptography" title="Direct link to heading">​</a></h2><p>Using elliptic curves we can now define on some elliptic curve a bilinear function called a <strong><em>pairing</em></strong>, which enables a mapping from two points on the same curve (or points on two related curves) into a different mathematical structure called a finite field. The bilinearity of the pairing is the key characteristic that makes pairing interesting and widely used in cryptography.</p><p>A <strong><em>bilinear pairing</em></strong> <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>e</mi></mrow><annotation encoding="application/x-tex">e</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal">e</span></span></span></span></span> maps a pair of points (hence the name pairing) on an elliptic curve <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>E</mi></mrow><annotation encoding="application/x-tex">E</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.05764em">E</span></span></span></span></span>, defined over some field <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>F</mi><mi>q</mi></msub></mrow><annotation encoding="application/x-tex">F_{q}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9694em;vertical-align:-0.2861em"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.13889em">F</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em"><span style="top:-2.55em;margin-left:-0.1389em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em">q</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em"><span></span></span></span></span></span></span></span></span></span></span> to an element of the multiplicative group of a finite extension of <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>F</mi><msup><mi>q</mi><mi>k</mi></msup></msub></mrow><annotation encoding="application/x-tex">{F}_{q^k}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0221em;vertical-align:-0.3387em"></span><span class="mord"><span class="mord"><span class="mord mathnormal" style="margin-right:0.13889em">F</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em"><span style="top:-2.4974em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em">q</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.782em"><span style="top:-2.786em;margin-right:0.0714em"><span class="pstrut" style="height:2.5em"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em">k</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3387em"><span></span></span></span></span></span></span></span></span></span></span>.</p><div class="math math-display"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>e</mi><mo stretchy="false">(</mo><mi>m</mi><mi>A</mi><mo>+</mo><mi>B</mi><mo separator="true">,</mo><mi>n</mi><mi>P</mi><mo>+</mo><mi>Q</mi><mo stretchy="false">)</mo><mo>=</mo><mi>e</mi><mo stretchy="false">(</mo><mi>A</mi><mo separator="true">,</mo><mi>P</mi><msup><mo stretchy="false">)</mo><mrow><mi>m</mi><mi>n</mi></mrow></msup><mi>e</mi><mo stretchy="false">(</mo><mi>B</mi><mo separator="true">,</mo><mi>Q</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">e(mA+B, nP + Q) = e(A,P)^{mn} e(B, Q)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal">e</span><span class="mopen">(</span><span class="mord mathnormal">m</span><span class="mord mathnormal">A</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:0.8778em;vertical-align:-0.1944em"></span><span class="mord mathnormal" style="margin-right:0.05017em">B</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal">n</span><span class="mord mathnormal" style="margin-right:0.13889em">P</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal">Q</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal">e</span><span class="mopen">(</span><span class="mord mathnormal">A</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal" style="margin-right:0.13889em">P</span><span class="mclose"><span class="mclose">)</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7144em"><span style="top:-3.113em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">mn</span></span></span></span></span></span></span></span></span><span class="mord mathnormal">e</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.05017em">B</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal">Q</span><span class="mclose">)</span></span></span></span></span></div><p>The elements <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>P</mi></mrow><annotation encoding="application/x-tex">P</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.13889em">P</span></span></span></span></span> and <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>Q</mi></mrow><annotation encoding="application/x-tex">Q</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8778em;vertical-align:-0.1944em"></span><span class="mord mathnormal">Q</span></span></span></span></span> lie in two different groups, respectively <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>G</mi><mn>1</mn></msub></mrow><annotation encoding="application/x-tex">G_{1}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal">G</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></span> and <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>G</mi><mn>2</mn></msub></mrow><annotation encoding="application/x-tex">G_{2}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal">G</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></span>. The choice of those two different group determines a different <strong><em>types</em></strong> of pairing.</p><p>Let <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>E</mi></mrow><annotation encoding="application/x-tex">E</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.05764em">E</span></span></span></span></span> an ordinary elliptic curve, take <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>G</mi><mn>1</mn></msub><mo mathvariant="normal">≠</mo><msub><mi>G</mi><mn>2</mn></msub></mrow><annotation encoding="application/x-tex">G_{1} \neq G_{2}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em"></span><span class="mord"><span class="mord mathnormal">G</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel"><span class="mrel"><span class="mord vbox"><span class="thinbox"><span class="rlap"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em"></span><span class="inner"><span class="mord"><span class="mrel"></span></span></span><span class="fix"></span></span></span></span></span><span class="mrel">=</span></span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal">G</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></span>, and if there is not an efficiently computable isomorphism <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>Ï•</mi><mo>:</mo><msub><mi>G</mi><mn>1</mn></msub><mo>→</mo><msub><mi>G</mi><mn>2</mn></msub></mrow><annotation encoding="application/x-tex">\phi:G_{1}\to G_{2}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em"></span><span class="mord mathnormal">Ï•</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">:</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal">G</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">1</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal">G</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></span> then the pairing is said to be of <strong><em>Type<span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>−</mo><mn>3</mn></mrow><annotation encoding="application/x-tex">-3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em"></span><span class="mord">−</span><span class="mord">3</span></span></span></span></span></em></strong>.</p><p>Currently, most of the state-of-the-art implementations of pairings take place on ordinary curves that assume the <strong><em>Type<span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>−</mo><mn>3</mn></mrow><annotation encoding="application/x-tex">-3</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7278em;vertical-align:-0.0833em"></span><span class="mord">−</span><span class="mord">3</span></span></span></span></span></em></strong> scenario for reasons of efficiency and secure implementation.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="identity-based-encryption">Identity Based Encryption<a class="hash-link" href="#identity-based-encryption" title="Direct link to heading">​</a></h2><p>Pairing-based cryptography builds on elliptic curve-based cryptography, but the extra functionality of the pairing enables us to design schemes which would otherwise be impossible to realize, or would be prohibitively expensive to do using RSA-based cryptosystems.</p><p>Identity-based encryption (IBE) is one such scheme that has received a large of amount of attention from the crypto community, and where commercially available products have been on the market for some time and are in wide use today.</p><p>IBE is similar to classical asymmetric key cryptography, in that each user has a public key for encryption and a private key for decryption. But there are many differences:</p><ol><li>IBE allows public keys to be set to the value of a pre-existing identifier, such as an email address, while in PKI the public key does not contain the notion of an identity, and the association with an identifier is created by a certificate signed by a third party (Certification Authority).</li><li>Clients or individual users do not generate private keys, but must instead download them from a trusted third party known as the Trust Authority (TA).</li><li>In IBE, to encrypt messages, the sender must obtain public “system parameters” from the Trust Authority (TA). These system parameters are used in combination with the intended recipient’s identity string (e.g. email address) to generate an encrypted message.</li></ol><h2 class="anchor anchorWithStickyNavbar_LWe7" id="post-quantum-cryptography">Post-Quantum Cryptography<a class="hash-link" href="#post-quantum-cryptography" title="Direct link to heading">​</a></h2><p>&quot;Post-quantum cryptography (sometimes referred to as quantum-proof, quantum-safe or quantum-resistant) refers to cryptographic algorithms (usually public-key algorithms) that are thought to be secure against an attack by a quantum computer. As of 2018, this is not true for the most popular public-key algorithms, which can be efficiently broken by a sufficiently strong hypothetical quantum computer. </p><p>The problem with currently popular algorithms is that their security relies on one of three hard mathematical problems: the integer factorization problem, the discrete logarithm problem or the elliptic-curve discrete logarithm problem. All of these problems can be easily solved on a sufficiently powerful quantum computer running Shor&#x27;s algorithm. </p><p>Even though current, publicly known, experimental quantum computers lack processing power to break any real cryptographic algorithm, many cryptographers are designing new algorithms to prepare for a time when quantum computing becomes a threat.&quot;<sup id="fnref-first"><a href="#fn-first" class="footnote-ref">first</a></sup></p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="zero-knowledge-proof">Zero Knowledge Proof<a class="hash-link" href="#zero-knowledge-proof" title="Direct link to heading">​</a></h2><p>&quot;In cryptography, a <strong>zero-knowledge proof</strong> or <strong>zero-knowledge protocol</strong> is a method by which one party (the <em>prover</em>) can prove to another party (the <em>verifier</em>) that a given statement is true, without conveying any information apart from the fact that the statement is indeed true.</p><p>If proving the statement requires knowledge of some secret information on the part of the prover, the definition implies that the verifier will not be able to prove the statement in turn to anyone else, since the verifier does not possess the secret information.</p><p>Notice that the statement being proved must include the assertion that the prover has such knowledge (otherwise, the statement would not be proved in zero-knowledge, since at the end of the protocol the verifier would gain the additional information that the prover has knowledge of the required secret information).</p><p>If the statement consists <em>only</em> of the fact that the prover possesses the secret information, it is a special case known as <em>zero-knowledge proof of knowledge</em>, and it nicely illustrates the essence of the notion of zero-knowledge proofs: proving that one has knowledge of certain information is trivial if one is allowed to simply reveal that information; the challenge is proving that one has such knowledge without revealing the secret information or anything else.&quot;<sup id="fnref-second"><a href="#fn-second" class="footnote-ref">second</a></sup></p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="summary">Summary<a class="hash-link" href="#summary" title="Direct link to heading">​</a></h2><p><strong>Elliptic curve cryptography</strong> is an attractive alternative to conventional public key cryptography for implementation on constrained devices, where the significant computational resources i.e. speed, memory are limited and low-power wireless communication protocols is essential. It attains the same security levels as traditional cryptosystems using smaller parameter sizes.</p><p><strong>Pairing-based cryptography</strong> builds on elliptic curve-based cryptography, but the extra functionality of the pairing enables us to design schemes which would otherwise be impossible to realize, or would be prohibitively expensive. Examples include identity-based encryption, group signatures and non-interactive zero-knowledge proofs.</p><p><strong>Identity-based encryption</strong> doesn’t require certificates and certificate authorities. A trusted third party generates all the private keys, but all the public keys can be derived knowing the identity of the public key owner, for example, an email address.  That means that no certificate is needed to bind a public key to its owner.  Typically, it is up to the application to verify the owner possesses access to the unique identity attribute during the enrollment process in which a client obtains a private key.</p><p><strong>Post-quantum cryptography</strong> Post-quantum cryptography are cryptosystems which can be run on a classical computer, but are secure even if an adversary possesses a quantum computer. For data that must be private, but has the potential to be long lived and publicly available, using post-quantum secure algorithms like AES 256-bit for encryption and SIKE for encapsulation of encryption keys is essential. </p><p><strong>Zero-knowledge proof</strong> is a method by which one party (the prover) can prove to another party (the verifier) that a given statement is true, without conveying any information apart from the fact that the statement is indeed true.</p><p>For an in-depth dive into the cryptographic protocols in use within the Milagro framework, see the next section <a href="/docs/milagro-protocols">Milagro Protocols</a>.</p><hr><div class="theme-admonition theme-admonition-note alert alert--secondary admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="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"></path></svg></span>See an error in this documentation? </div><div class="admonitionContent_S0QG"><p>Submit a pull request on the development branch of <a href="https://github.com/apache/incubator-milagro" target="_blank" rel="noopener noreferrer">Milagro Website Repo</a>.</p></div></div><p>Supported admonition types are: caution, note, important, tip, warning.</p><div class="footnotes"><hr><ol><li id="fn-first"><a href="https://en.wikipedia.org/wiki/Post-quantum_cryptography" target="_blank" rel="noopener noreferrer">Wikipedia article</a><a href="#fnref-first" class="footnote-backref">↩</a></li><li id="fn-second"><a href="https://en.wikipedia.org/wiki/Zero-knowledge_proof" target="_blank" rel="noopener noreferrer">Wikipedia article</a><a href="#fnref-second" class="footnote-backref">↩</a></li></ol></div></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/milagro-intro"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Milagro Introduction</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/milagro-protocols"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Milagro Protocols</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#elliptic-curve-cryptography" class="table-of-contents__link toc-highlight">Elliptic Curve Cryptography</a></li><li><a href="#pairing-based-cryptography" class="table-of-contents__link toc-highlight">Pairing Based Cryptography</a></li><li><a href="#identity-based-encryption" class="table-of-contents__link toc-highlight">Identity Based Encryption</a></li><li><a href="#post-quantum-cryptography" class="table-of-contents__link toc-highlight">Post-Quantum Cryptography</a></li><li><a href="#zero-knowledge-proof" class="table-of-contents__link toc-highlight">Zero Knowledge Proof</a></li><li><a href="#summary" class="table-of-contents__link toc-highlight">Summary</a></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/milagro-design/index.html b/docs/milagro-design/index.html
index f51d49d..fddc278 100644
--- a/docs/milagro-design/index.html
+++ b/docs/milagro-design/index.html
@@ -1,145 +1,22 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Milagro Design · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="## Protocols and Technology"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Milagro Design · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="## Protocols and Technology"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>About Milagro</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-milagro-design">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">Milagro Design | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/milagro-design"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Milagro Design | Apache Milagro"><meta data-rh="true" name="description" content="Protocols and Technology"><meta data-rh="true" property="og:description" content="Protocols and Technology"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/milagro-design"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/milagro-design" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/milagro-design" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">Milagro Design</h1></header><article><div><span><h2><a class="anchor" aria-hidden="true" id="protocols-and-technology"></a><a href="#protocols-and-technology" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Protocols and Technology</h2>
-<h3><a class="anchor" aria-hidden="true" id="identity-based-encryption"></a><a href="#identity-based-encryption" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Identity Based Encryption</h3>
-<p>M-Pin and Chow Choo are in the class of Identity Based Encryption protocols, which use pairings in their construction. The M-Pin Protocol is intended to replace the well-known Username/Password authentication mechanism which is widely considered to be effectively broken.</p>
-<p>The main problem is the existence of a password file on the server, which is commonly stolen and hacked, revealing most user passwords.</p>
-<p>The idea behind Milagro's Zero-Knowledge Proof Multi-Factor Authentication (ZKP-MFA) Server is that each registered client is issued with a secret cryptographic key derived from their identity. They then prove to the Milagro ZKP-MFA Server that they are in possession of this key using a zero-knowledge proof protocol, which can be extended to include authenticated key agreement.</p>
-<p>This protocol design eliminates the need for any information related to clients, or their keys, to be kept on the authentication server. Should an attacker penetrate the server, it is impossible to deduct any information about end users because it doesn't exist, at least within the authentication system.</p>
-<p>Common to both Chow-Choo and M-Pin is that the keys are issued in shares, not as whole keys, by entities called Decentralized Trust Authorities. Only the clients who receive all of the shares from the D-TA's, will ever know their completed whole keys.</p>
-<p>Industry commentators have long advocated a multi-factor solution. The novel feature of M-Pin and Chow-Choo is that the cryptographic secrets issued to clients or peers may be safely split up into any number of independent factors.</p>
-<p>Each of these factors has the same form; they are points on an elliptic curve. To recreate the original secret, they are simply added together again -- it's as simple as that.</p>
-<p>One factor might be derived from a key unlocked from the biometric login (ex: FaceID) which is available as a PIN input on a successful biometric authentication. This 'biometric based' PIN is, on Apple hardware, stored in the secure element of the device (something you are). Another factor might be the remainder token securely stored in the authenticator app on a smartphone (something you have). Yet a final piece can be a PIN or passphrase (something you know), which is secure as the M-Pin client secret cannot be brute force attacked offline.</p>
-<h3><a class="anchor" aria-hidden="true" id="decentralized-identity"></a><a href="#decentralized-identity" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Decentralized Identity</h3>
-<p>Milagro applications use these identity based protocols in combination with classical cryptosystems where the endpoint generates a public/private key pair and the private key never leaves the application or device.</p>
-<p>An entity running a Milagro application attaches the public keys it has generated upon initialization to a self sovereign identity document (ID Document), that only reveals a unique account code as identifier. This ID document is signed by the Milagro and distributed over a decentralized identity system built upon IPFS<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>, so each ID Document lives on an immutable, operation-based conflict-free replicated data structure (CRDT), which is accessible to any other Milagro application.</p>
-<p><em>For further detail, please see the format specification for ID Documents.</em></p>
-<h3><a class="anchor" aria-hidden="true" id="encrypted-envelope"></a><a href="#encrypted-envelope" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Encrypted Envelope</h3>
-<p>ID Documents enable messages, called Encrypted Envelopes, containing secrets to be sent between endpoints running Milagro software. This can include clients, servers and peers and Milagro ZKP-MFA Servers, ZKP-MFA clients and Decentralized Trust Authorities. The ID Documents of recipients are available to any endpoint, so their public keys can be used to secure secrets in transit. In the case of digital asset custody, these messages need to be part of a permanent record, available in a decentralized, immutable data structure (like a blockchain). Given the permanence of this data, the privacy design of these immutable records need to account for advances in quantum cryptography.</p>
-<p>Messages and immutable records are encrypted with AES-GCM at a 256-bit level with parameters anticipating quantum cryptography. It is necessary to know the recipient's public key, obtained via the ID Document, in order to encapsulate the encryption key for each recipient of the message or entity who has access to the Immutable Record.</p>
-<p>SIKE keys pairs are generated locally by endpoints running Milagro software, are not received in shares from D-TAs. SIKE public keys are used by the sender of a message to encapsulate the AES 256-bit key used to create the Encrypted Envelope. An encapsulation takes place once for every recipient and is affixed to the Encrypted Envelope.</p>
-<p>BLS signatures handle two jobs. Like SIKE key pairs, BLS signature key pairs are generated locally by endpoints running Milagro software, are not received in shares from D-TAs. The signatures these keys generate enable the non-repudiation of Encrypted Envelopes between endpoints and stored long term as immutable records. This is a classic use case of digital signatures, like PGP signatures over email.</p>
-<p><em>For further detail, please see the format specification for Encrypted Envelopes.</em></p>
-<p>The other use of BLS signatures is more complex. As described previously, BLS signatures have unique properties. Milagro leverages its own Encrypted Envelope format to enable the BLS ability of splitting signing keys by with a secure mechanism to securely distribute the split BLS signing keys. When delivered securely to the right entities, these part shares of BLS signing keys themselves become signature keys. The thresholds of these signatures can be aggregated securely to produce an aggregated single signature which would have been produced by the original whole signing key prior to the original key being split. This signature can be verified by an aggregated public key.</p>
-<p>Another capability is for a public key to be aggregated from multiple public keys in advance of aggregating signatures created by the corresponding private keys. These private keys are generated locally, and never leave the device, vs the method described previously. Signatures made from these keys can themselves be aggregated into a complete signature, verified by the aggregated public key.</p>
-<p>These capabilities are well suited to safeguarding secrets with an example in the following section.</p>
-<h2><a class="anchor" aria-hidden="true" id="decentralized-trust-authorities-d-ta"></a><a href="#decentralized-trust-authorities-d-ta" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Decentralized Trust Authorities: D-TA</h2>
-<p>The Milagro framework protocols rely on Decentralized Trust Authorities for two jobs: Issuing shares of secrets, or safeguarding shares of secrets.</p>
-<p>D-TAs can issue shares, or fractions, of Type-3 Pairing private keys to Milagro Applications, such as the Milagro ZKP-MFA Servers or clients or to other D-TAs, which can be any software or hardware applications that have embedded some Milagro code in order derive the functional capabilities.</p>
-<p>These clients or peers become the only entities that know the completed whole keys assembled from shares issued by different Decentralized Trust Authorities.</p>
-<p>Type-3 pairings were selected as they are the most efficient pairing and will work with non-supersingular pairing-friendly curves.</p>
-<p>These operate as \( G_1 \) x \( G_2 \rightarrow G_T \), where \( G_2 \) is a particular group of points, again of the order \( q \), but on a twisted elliptic curve defined over an extension which is a divisor of \( k \).</p>
-<p>These curves can be constructed to be a near perfect fit at any required level of security. The pairing protocols within the Milagro framework all work on a Type-3 pairing.</p>
-<p>One of the novel aspects of pairing-based cryptography is that deployed secrets are commonly represented as points on an elliptic curve, which are the result of multiplying a known point by a master secret \( s \).</p>
-<p>So for example a secret might be of the form \( sP \), where \( P \) is known.</p>
-<p>There are a number of interesting things we can do with secrets that have this form, that are not possible with the secrets that arise when using other cryptographic technologies.</p>
-<p>For example they can be split into two, into \( s_1P \) and \( s_2P \) where \( s=s_1+s_2 \) and \( sP = s_1P +s_2P \).</p>
-<p>In fact they can be just as easily split into multiple parts, just like chopping up a cucumber.</p>
-<p>We can also add extra components to create a secret of the form \( s(P_1+P_2) = sP_1+sP_2 \).</p>
-<p>It is the flexibility that arises from this form of the secret that allows us to introduce the idea of chopping off a tiny sliver of the secret to support a PIN number.</p>
-<p>It also facilitates the concept of <em>Time Permits</em> as discussed in a later section.</p>
-<p>Lastly, it enables Decentralized Trust.</p>
-<h3><a class="anchor" aria-hidden="true" id="issuing-secrets"></a><a href="#issuing-secrets" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Issuing Secrets</h3>
-<p>A Trusted Authority will be in possession of a master secret \( s \), a random element of \( F_q \).</p>
-<p>A client secret is of the form \( s.H(ID) \), where ID is the client identity and \( H(.) \) a hash function which maps to a point on \( G_1 \).</p>
-<p>From prior art, we assume that \( H \) is modeled as a random oracle where \( H(ID) = r_{ID}.P \)</p>
-<p>where \( r_{ID} \in F_q \) is random and \( P \) is a fixed generator of \( G_1 \).</p>
-<p>A Milagro ZKP-MFA Server will be issued with \( sQ \), where \( Q \) is a fixed generator of \( G_2 \).</p>
-<p>Note that this will be the only multiple of \( s \) in \( G_2 \) ever provided by the TA. Servers will always be associated with their own unique master secrets.</p>
-<p>Note that the TA functionality can be trivially decentralized and distributed using a secret sharing scheme, to remove from the overall system a single point of compromise or coercion.</p>
-<p>In the simplest possible case there may be two Decentralized Trusted Authorities (D-TAs), each of which independently maintains their own share of the master key.</p>
-<p>So \( s=s_1+s_2 \), and each D-TA issues a part-client key to the client \( s_1 H(ID) \) and \( s_2 H(ID) \), which the client, after receiving the shares, adds together to form their full key.</p>
-<p>Now even if one D-TA is compromised, the client key is still safe.</p>
-<p>In the age of self sovereign identity, any entity can be a Decentralized Trust Authority as long as its Beneficiary trusts it to securely issue shares of secrets, or hold them for safekeeping.</p>
-<h3><a class="anchor" aria-hidden="true" id="safekeeping-secrets"></a><a href="#safekeeping-secrets" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Safekeeping Secrets</h3>
-<p>A D-TA may act as a Fiduciary over secrets where it can participate in a process to enable a Beneficiary to recover the secret. Using aggregated BLS signatures in a simple example, an entity running Milagro software may engage multiple D-TAs to act as Fiduciaries over its seed value used to generate and back up a cryptocurrency HD Wallet.</p>
-<p>As described in<sup class="footnote-ref"><a href="#fn1" id="fnref1:1">[1]</a></sup> the first step is for each D-TA to generate a key pair by choosing \( s k \stackrel{s}{\leftarrow} \mathbb{Z}_{q} \) to compute:</p>
-<p>$$ p k \leftarrow g_{2}^{s k}$$</p>
-<p>which outputs the \( (p k, s k) \).</p>
-<p>The Beneficiary would select which D-TA service providers (acting in concert) it would use to help it generate a secret. Assume a Beneficiary is also a participant in this protocol, it also runs a D-TA and acts as the designated combiner in the protocol.</p>
-<p>In advance of creating the HD Wallet seed, a Beneficiary would elicit the services of Decentralized Trust Authorities to act as Fiduciaries in a decentralized secret recovery protocol. The Beneficiary's next step calculates the aggregate public key by running protocol \( \text { KAg }\)({\( p k_{1}, \ldots, p k_{n} \)}) using the D-TA's known public keys as input (who have agreed to act as Fiduciaries to this process) and also its own public key.</p>
-<p>The Beneficiary then requests a signature \( \sigma \) on a message \( m \) from each of the D-TAs acting as Fiduciaries, including itself. For each D-TA, singing is a single round protocol.</p>
-<p>To finalize setup, each D-TA transmits its signature \( \sigma \) to the Beneficiary (acting as designated combiner). The Beneficiary generates its own signature and combines it with the received D-TA signatures for the final aggregated signature of \( \sigma \leftarrow \prod_{j=1}^{n} s_{j} \).</p>
-<p>The final signature is verified against the aggregated public key if the verifier function outputs 1. Assuming so, the setup completes by hashing the aggregated signature where \( H(\tilde{\sigma}) \) is the seed of the HD Wallet.</p>
-<p>Assuming the Beneficiary has backed up their BLS signature key, recovering the HD Wallet seed from multiple Fiduciaries becomes as simple as re-running the setup protocol again. It is easy to envision Fiduciary services running D-TAs, responding and authenticating requests for recovering secrets.</p>
-<h2><a class="anchor" aria-hidden="true" id="summary"></a><a href="#summary" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Summary</h2>
-<h3><a class="anchor" aria-hidden="true" id="pairing-and-pq-cryptography"></a><a href="#pairing-and-pq-cryptography" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Pairing and PQ Cryptography</h3>
-<p>Milagro leverages a combination of pairing and post-quantum algorithms to distribute cryptographic operations and split cryptographic parameters, providing a level of security and functionality that is a step forward in when compared to the certificate backed cryptosystems in service today. With pairing cryptography, security systems such as multi-factor authentication using zero knowledge protocols, certificate-less authenticated key agreement with perfect forward secrecy and decentralized secret recovery can be deployed in real world scenarios. AES-256 bit encryption and post-quantum key encapsulation ensure that long-lived data is safe from intrusion, even in the face of a post-quantum adversary.</p>
-<h3><a class="anchor" aria-hidden="true" id="decentralized-cryptosystem"></a><a href="#decentralized-cryptosystem" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Decentralized Cryptosystem</h3>
-<p>Bitcoin's blockchain provides an alternative distributed approach to managing a currency without the need for a central bank. With bitcoin, the ledger is distributed, not centralized. Milagro's cryptosystem is decentralized to create the same advantages as a distributed ledger. While architecturally different to the blockchain, Milagro's cryptosystem and the applications built on it are compatible with and can add significant value to cryptocurrencies and other decentralized networks.</p>
-<p>Milagro envisions a new class of cryptographic service providers called Decentralized Trust Authorities, or D-TAs for short. The purpose of a D-TA is to independently issue shares, or fractions, of cryptographic keys to Milagro clients and servers and application endpoints which have embedded Milagro cryptographic libraries. D-TA's also operate as 'Fiduciaries', to enable their 'Beneficiaries' to recover secrets in a decentralized manner, without keeping a share of the secret itself. D-TAs operate independently from each other, are isolated in totality, and completely unaware of the existence of other D-TAs.</p>
-<h3><a class="anchor" aria-hidden="true" id="no-single-point-of-compromise"></a><a href="#no-single-point-of-compromise" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>No Single Point of Compromise</h3>
-<p>Milagro entities receive issued shares cryptographic keys or signatures and combine them to create the whole completed key or signature, thus becoming the only audience who possess knowledge of the entire key or signature. If D-TAs are under separate organizational controls, current root key compromises and key escrow threats inherent in PKI systems are an order of magnitude harder to achieve in a Milagro cryptosystem.  An attacker would need to subvert all independent parties.</p>
-<p>In other words, all D-TAs used to generate shares, or fractions, of keys for Milagro clients and servers must be compromised to create the equivalent of a PKI root key compromise. All D-TAs under the threshold needed to recreate a signature would need to be compromised (including the Beneficiary) in order to generate a final signature.</p>
-<hr>
-
-    <div class="admonition admonition-note">
-      <div class="admonition-heading">
-        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="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"/></svg></div>  See an error in this documentation?</h5>
-      </div>
-      <div class="admonition-content">
-    <p>Submit a pull request on the development branch of <a href="https://github.com/apache/incubator-milagro">Milagro Website Repo</a>.</p>
-</div></div><!--
-Supported admonition types are: caution, note, important, tip, warning.
---><hr class="footnotes-sep">
-<section class="footnotes">
-<ol class="footnotes-list">
-<li id="fn1"  class="footnote-item"><p><a href="https://eprint.iacr.org/2018/483">Compact Multi-Signatures for Smaller Blockchains</a> <a href="#fnref1" class="footnote-backref">↩</a> <a href="#fnref1:1" class="footnote-backref">↩</a></p>
-</li>
-</ol>
-</section>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/milagro-protocols"><span class="arrow-prev">← </span><span>Milagro Protocols</span></a><a class="docs-next button" href="/docs/amcl-overview"><span>AMCL Overview</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#protocols-and-technology">Protocols and Technology</a><ul class="toc-headings"><li><a href="#identity-based-encryption">Identity Based Encryption</a></li><li><a href="#decentralized-identity">Decentralized Identity</a></li><li><a href="#encrypted-envelope">Encrypted Envelope</a></li></ul></li><li><a href="#decentralized-trust-authorities-d-ta">Decentralized Trust Authorities: D-TA</a><ul class="toc-headings"><li><a href="#issuing-secrets">Issuing Secrets</a></li><li><a href="#safekeeping-secrets">Safekeeping Secrets</a></li></ul></li><li><a href="#summary">Summary</a><ul class="toc-headings"><li><a href="#pairing-and-pq-cryptography">Pairing and PQ Cryptography</a></li><li><a href="#decentralized-cryptosystem">Decentralized Cryptosystem</a></li><li><a href="#no-single-point-of-compromise">No Single Point of Compromise</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/milagro-intro">About Milagro</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/milagro-design">Milagro Design</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/amcl-overview">AMCL Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">About Milagro</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">Milagro Design</span><meta itemprop="position" content="2"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Milagro Design</h1></header><h2 class="anchor anchorWithStickyNavbar_LWe7" id="protocols-and-technology">Protocols and Technology<a class="hash-link" href="#protocols-and-technology" title="Direct link to heading">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="identity-based-encryption">Identity Based Encryption<a class="hash-link" href="#identity-based-encryption" title="Direct link to heading">​</a></h3><p>M-Pin and Chow Choo are in the class of Identity Based Encryption protocols, which use pairings in their construction. The M-Pin Protocol is intended to replace the well-known Username/Password authentication mechanism which is widely considered to be effectively broken.</p><p>The main problem is the existence of a password file on the server, which is commonly stolen and hacked, revealing most user passwords.</p><p>The idea behind Milagro&#x27;s Zero-Knowledge Proof Multi-Factor Authentication (ZKP-MFA) Server is that each registered client is issued with a secret cryptographic key derived from their identity. They then prove to the Milagro ZKP-MFA Server that they are in possession of this key using a zero-knowledge proof protocol, which can be extended to include authenticated key agreement.</p><p>This protocol design eliminates the need for any information related to clients, or their keys, to be kept on the authentication server. Should an attacker penetrate the server, it is impossible to deduct any information about end users because it doesn&#x27;t exist, at least within the authentication system.</p><p>Common to both Chow-Choo and M-Pin is that the keys are issued in shares, not as whole keys, by entities called Decentralized Trust Authorities. Only the clients who receive all of the shares from the D-TA&#x27;s, will ever know their completed whole keys.</p><p>Industry commentators have long advocated a multi-factor solution. The novel feature of M-Pin and Chow-Choo is that the cryptographic secrets issued to clients or peers may be safely split up into any number of independent factors.</p><p>Each of these factors has the same form; they are points on an elliptic curve. To recreate the original secret, they are simply added together again -- it&#x27;s as simple as that.</p><p>One factor might be derived from a key unlocked from the biometric login (ex: FaceID) which is available as a PIN input on a successful biometric authentication. This &#x27;biometric based&#x27; PIN is, on Apple hardware, stored in the secure element of the device (something you are). Another factor might be the remainder token securely stored in the authenticator app on a smartphone (something you have). Yet a final piece can be a PIN or passphrase (something you know), which is secure as the M-Pin client secret cannot be brute force attacked offline.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="decentralized-identity">Decentralized Identity<a class="hash-link" href="#decentralized-identity" title="Direct link to heading">​</a></h3><p>Milagro applications use these identity based protocols in combination with classical cryptosystems where the endpoint generates a public/private key pair and the private key never leaves the application or device.</p><p>An entity running a Milagro application attaches the public keys it has generated upon initialization to a self sovereign identity document (ID Document), that only reveals a unique account code as identifier. This ID document is signed by the Milagro and distributed over a decentralized identity system built upon IPFS<sup id="fnref-first"><a href="#fn-first" class="footnote-ref">first</a></sup>, so each ID Document lives on an immutable, operation-based conflict-free replicated data structure (CRDT), which is accessible to any other Milagro application.</p><p><em>For further detail, please see the format specification for ID Documents.</em></p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="encrypted-envelope">Encrypted Envelope<a class="hash-link" href="#encrypted-envelope" title="Direct link to heading">​</a></h3><p>ID Documents enable messages, called Encrypted Envelopes, containing secrets to be sent between endpoints running Milagro software. This can include clients, servers and peers and Milagro ZKP-MFA Servers, ZKP-MFA clients and Decentralized Trust Authorities. The ID Documents of recipients are available to any endpoint, so their public keys can be used to secure secrets in transit. In the case of digital asset custody, these messages need to be part of a permanent record, available in a decentralized, immutable data structure (like a blockchain). Given the permanence of this data, the privacy design of these immutable records need to account for advances in quantum cryptography. </p><p>Messages and immutable records are encrypted with AES-GCM at a 256-bit level with parameters anticipating quantum cryptography. It is necessary to know the recipient&#x27;s public key, obtained via the ID Document, in order to encapsulate the encryption key for each recipient of the message or entity who has access to the Immutable Record.</p><p>SIKE keys pairs are generated locally by endpoints running Milagro software, are not received in shares from D-TAs. SIKE public keys are used by the sender of a message to encapsulate the AES 256-bit key used to create the Encrypted Envelope. An encapsulation takes place once for every recipient and is affixed to the Encrypted Envelope.</p><p>BLS signatures handle two jobs. Like SIKE key pairs, BLS signature key pairs are generated locally by endpoints running Milagro software, are not received in shares from D-TAs. The signatures these keys generate enable the non-repudiation of Encrypted Envelopes between endpoints and stored long term as immutable records. This is a classic use case of digital signatures, like PGP signatures over email.</p><p><em>For further detail, please see the format specification for Encrypted Envelopes.</em></p><p>The other use of BLS signatures is more complex. As described previously, BLS signatures have unique properties. Milagro leverages its own Encrypted Envelope format to enable the BLS ability of splitting signing keys by with a secure mechanism to securely distribute the split BLS signing keys. When delivered securely to the right entities, these part shares of BLS signing keys themselves become signature keys. The thresholds of these signatures can be aggregated securely to produce an aggregated single signature which would have been produced by the original whole signing key prior to the original key being split. This signature can be verified by an aggregated public key.</p><p>Another capability is for a public key to be aggregated from multiple public keys in advance of aggregating signatures created by the corresponding private keys. These private keys are generated locally, and never leave the device, vs the method described previously. Signatures made from these keys can themselves be aggregated into a complete signature, verified by the aggregated public key.</p><p>These capabilities are well suited to safeguarding secrets with an example in the following section.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="decentralized-trust-authorities-d-ta">Decentralized Trust Authorities: D-TA<a class="hash-link" href="#decentralized-trust-authorities-d-ta" title="Direct link to heading">​</a></h2><p>The Milagro framework protocols rely on Decentralized Trust Authorities for two jobs: Issuing shares of secrets, or safeguarding shares of secrets.</p><p>D-TAs can issue shares, or fractions, of Type-3 Pairing private keys to Milagro Applications, such as the Milagro ZKP-MFA Servers or clients or to other D-TAs, which can be any software or hardware applications that have embedded some Milagro code in order derive the functional capabilities.</p><p>These clients or peers become the only entities that know the completed whole keys assembled from shares issued by different Decentralized Trust Authorities.</p><p>Type-3 pairings were selected as they are the most efficient pairing and will work with non-supersingular pairing-friendly curves.</p><p>These operate as <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>G</mi><mn>1</mn></msub></mrow><annotation encoding="application/x-tex">G_1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal">G</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></span> x <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>G</mi><mn>2</mn></msub><mo>→</mo><msub><mi>G</mi><mi>T</mi></msub></mrow><annotation encoding="application/x-tex">G_2\rightarrow G_T</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal">G</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal">G</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3283em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.13889em">T</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></span>, where <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>G</mi><mn>2</mn></msub></mrow><annotation encoding="application/x-tex">G_2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal">G</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></span> is a particular group of points, again of the order <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>q</mi></mrow><annotation encoding="application/x-tex">q</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em"></span><span class="mord mathnormal" style="margin-right:0.03588em">q</span></span></span></span></span>, but on a twisted elliptic curve defined over an extension which is a divisor of <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em"></span><span class="mord mathnormal" style="margin-right:0.03148em">k</span></span></span></span></span>.</p><p>These curves can be constructed to be a near perfect fit at any required level of security. The pairing protocols within the Milagro framework all work on a Type-3 pairing.</p><p>One of the novel aspects of pairing-based cryptography is that deployed secrets are commonly represented as points on an elliptic curve, which are the result of multiplying a known point by a master secret <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi></mrow><annotation encoding="application/x-tex">s</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal">s</span></span></span></span></span>.</p><p>So for example a secret might be of the form <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi><mi>P</mi></mrow><annotation encoding="application/x-tex">sP</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal">s</span><span class="mord mathnormal" style="margin-right:0.13889em">P</span></span></span></span></span>, where <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>P</mi></mrow><annotation encoding="application/x-tex">P</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.13889em">P</span></span></span></span></span> is known.</p><p>There are a number of interesting things we can do with secrets that have this form, that are not possible with the secrets that arise when using other cryptographic technologies.</p><p>For example they can be split into two, into <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>s</mi><mn>1</mn></msub><mi>P</mi></mrow><annotation encoding="application/x-tex">s_1P</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal">s</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mord mathnormal" style="margin-right:0.13889em">P</span></span></span></span></span> and <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>s</mi><mn>2</mn></msub><mi>P</mi></mrow><annotation encoding="application/x-tex">s_2P</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal">s</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mord mathnormal" style="margin-right:0.13889em">P</span></span></span></span></span> where <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi><mo>=</mo><msub><mi>s</mi><mn>1</mn></msub><mo>+</mo><msub><mi>s</mi><mn>2</mn></msub></mrow><annotation encoding="application/x-tex">s=s_1+s_2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal">s</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.7333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal">s</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal">s</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></span> and <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi><mi>P</mi><mo>=</mo><msub><mi>s</mi><mn>1</mn></msub><mi>P</mi><mo>+</mo><msub><mi>s</mi><mn>2</mn></msub><mi>P</mi></mrow><annotation encoding="application/x-tex">sP = s_1P +s_2P</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal">s</span><span class="mord mathnormal" style="margin-right:0.13889em">P</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal">s</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mord mathnormal" style="margin-right:0.13889em">P</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal">s</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mord mathnormal" style="margin-right:0.13889em">P</span></span></span></span></span>.</p><p>In fact they can be just as easily split into multiple parts, just like chopping up a cucumber.</p><p>We can also add extra components to create a secret of the form <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi><mo stretchy="false">(</mo><msub><mi>P</mi><mn>1</mn></msub><mo>+</mo><msub><mi>P</mi><mn>2</mn></msub><mo stretchy="false">)</mo><mo>=</mo><mi>s</mi><msub><mi>P</mi><mn>1</mn></msub><mo>+</mo><mi>s</mi><msub><mi>P</mi><mn>2</mn></msub></mrow><annotation encoding="application/x-tex">s(P_1+P_2) = sP_1+sP_2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal">s</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.13889em">P</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:-0.1389em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.13889em">P</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:-0.1389em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord mathnormal">s</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.13889em">P</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:-0.1389em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord mathnormal">s</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.13889em">P</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:-0.1389em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></span>.</p><p>It is the flexibility that arises from this form of the secret that allows us to introduce the idea of chopping off a tiny sliver of the secret to support a PIN number.</p><p>It also facilitates the concept of <em>Time Permits</em> as discussed in a later section.</p><p>Lastly, it enables Decentralized Trust.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="issuing-secrets">Issuing Secrets<a class="hash-link" href="#issuing-secrets" title="Direct link to heading">​</a></h3><p>A Trusted Authority will be in possession of a master secret <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi></mrow><annotation encoding="application/x-tex">s</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal">s</span></span></span></span></span>, a random element of <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>F</mi><mi>q</mi></msub></mrow><annotation encoding="application/x-tex">F_q</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9694em;vertical-align:-0.2861em"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.13889em">F</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em"><span style="top:-2.55em;margin-left:-0.1389em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em">q</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em"><span></span></span></span></span></span></span></span></span></span></span>.</p><p>A client secret is of the form <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi><mi mathvariant="normal">.</mi><mi>H</mi><mo stretchy="false">(</mo><mi>I</mi><mi>D</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">s.H(ID)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal">s</span><span class="mord">.</span><span class="mord mathnormal" style="margin-right:0.08125em">H</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.07847em">I</span><span class="mord mathnormal" style="margin-right:0.02778em">D</span><span class="mclose">)</span></span></span></span></span>, where ID is the client identity and <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>H</mi><mo stretchy="false">(</mo><mi mathvariant="normal">.</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">H(.)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.08125em">H</span><span class="mopen">(</span><span class="mord">.</span><span class="mclose">)</span></span></span></span></span> a hash function which maps to a point on <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>G</mi><mn>1</mn></msub></mrow><annotation encoding="application/x-tex">G_1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal">G</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></span>.</p><p>From prior art, we assume that <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>H</mi></mrow><annotation encoding="application/x-tex">H</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.08125em">H</span></span></span></span></span> is modeled as a random oracle where <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>H</mi><mo stretchy="false">(</mo><mi>I</mi><mi>D</mi><mo stretchy="false">)</mo><mo>=</mo><mi>r</mi><mi mathvariant="normal">_</mi><mrow><mi>I</mi><mi>D</mi></mrow><mi mathvariant="normal">.</mi><mi>P</mi></mrow><annotation encoding="application/x-tex">H(ID) = r\_{ID}.P</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.08125em">H</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.07847em">I</span><span class="mord mathnormal" style="margin-right:0.02778em">D</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.9933em;vertical-align:-0.31em"></span><span class="mord mathnormal" style="margin-right:0.02778em">r</span><span class="mord" style="margin-right:0.02778em">_</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.07847em">I</span><span class="mord mathnormal" style="margin-right:0.02778em">D</span></span><span class="mord">.</span><span class="mord mathnormal" style="margin-right:0.13889em">P</span></span></span></span></span></p><p>where <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>r</mi><mi mathvariant="normal">_</mi><mrow><mi>I</mi><mi>D</mi></mrow><mo>∈</mo><msub><mi>F</mi><mi>q</mi></msub></mrow><annotation encoding="application/x-tex">r\_{ID}\in F_q</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9933em;vertical-align:-0.31em"></span><span class="mord mathnormal" style="margin-right:0.02778em">r</span><span class="mord" style="margin-right:0.02778em">_</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.07847em">I</span><span class="mord mathnormal" style="margin-right:0.02778em">D</span></span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.9694em;vertical-align:-0.2861em"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.13889em">F</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em"><span style="top:-2.55em;margin-left:-0.1389em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em">q</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em"><span></span></span></span></span></span></span></span></span></span></span> is random and <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>P</mi></mrow><annotation encoding="application/x-tex">P</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.13889em">P</span></span></span></span></span> is a fixed generator of <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>G</mi><mn>1</mn></msub></mrow><annotation encoding="application/x-tex">G_1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal">G</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></span>.</p><p>A Milagro ZKP-MFA Server will be issued with <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi><mi>Q</mi></mrow><annotation encoding="application/x-tex">sQ</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8778em;vertical-align:-0.1944em"></span><span class="mord mathnormal">s</span><span class="mord mathnormal">Q</span></span></span></span></span>, where <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>Q</mi></mrow><annotation encoding="application/x-tex">Q</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8778em;vertical-align:-0.1944em"></span><span class="mord mathnormal">Q</span></span></span></span></span> is a fixed generator of <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>G</mi><mn>2</mn></msub></mrow><annotation encoding="application/x-tex">G_2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal">G</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></span>.</p><p>Note that this will be the only multiple of <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi></mrow><annotation encoding="application/x-tex">s</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal">s</span></span></span></span></span> in <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>G</mi><mn>2</mn></msub></mrow><annotation encoding="application/x-tex">G_2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal">G</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></span> ever provided by the TA. Servers will always be associated with their own unique master secrets.</p><p>Note that the TA functionality can be trivially decentralized and distributed using a secret sharing scheme, to remove from the overall system a single point of compromise or coercion.</p><p>In the simplest possible case there may be two Decentralized Trusted Authorities (D-TAs), each of which independently maintains their own share of the master key.</p><p>So <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi><mo>=</mo><msub><mi>s</mi><mn>1</mn></msub><mo>+</mo><msub><mi>s</mi><mn>2</mn></msub></mrow><annotation encoding="application/x-tex">s=s_1+s_2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal">s</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.7333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal">s</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:0.5806em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal">s</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></span>, and each D-TA issues a part-client key to the client <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>s</mi><mn>1</mn></msub><mi>H</mi><mo stretchy="false">(</mo><mi>I</mi><mi>D</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">s_1 H(ID)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord"><span class="mord mathnormal">s</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mord mathnormal" style="margin-right:0.08125em">H</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.07847em">I</span><span class="mord mathnormal" style="margin-right:0.02778em">D</span><span class="mclose">)</span></span></span></span></span> and <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>s</mi><mn>2</mn></msub><mi>H</mi><mo stretchy="false">(</mo><mi>I</mi><mi>D</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">s_2 H(ID)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord"><span class="mord mathnormal">s</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mord mathnormal" style="margin-right:0.08125em">H</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.07847em">I</span><span class="mord mathnormal" style="margin-right:0.02778em">D</span><span class="mclose">)</span></span></span></span></span>, which the client, after receiving the shares, adds together to form their full key.</p><p>Now even if one D-TA is compromised, the client key is still safe.</p><p>In the age of self sovereign identity, any entity can be a Decentralized Trust Authority as long as its Beneficiary trusts it to securely issue shares of secrets, or hold them for safekeeping.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="safekeeping-secrets">Safekeeping Secrets<a class="hash-link" href="#safekeeping-secrets" title="Direct link to heading">​</a></h3><p>A D-TA may act as a Fiduciary over secrets where it can participate in a process to enable a Beneficiary to recover the secret. Using aggregated BLS signatures in a simple example, an entity running Milagro software may engage multiple D-TAs to act as Fiduciaries over its seed value used to generate and back up a cryptocurrency HD Wallet.</p><p>As described in<sup id="fnref-first"><a href="#fn-first" class="footnote-ref">first</a></sup> the first step is for each D-TA to generate a key pair by choosing <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi><mi>k</mi><mo><mover><mo><mo>←</mo></mo><mi>s</mi></mover></mo><mi mathvariant="double-struck">Z</mi><mi mathvariant="normal">_</mi><mi>q</mi></mrow><annotation encoding="application/x-tex">s k\stackrel{s}{\leftarrow}\mathbb{Z}\_{q}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9683em"></span><span class="mord mathnormal">s</span><span class="mord mathnormal" style="margin-right:0.03148em">k</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel"><span class="mop op-limits"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.9683em"><span style="top:-3em"><span class="pstrut" style="height:3em"></span><span><span class="mop">←</span></span></span><span style="top:-3.5669em;margin-left:0em"><span class="pstrut" style="height:3em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">s</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.9989em;vertical-align:-0.31em"></span><span class="mord mathbb">Z</span><span class="mord" style="margin-right:0.02778em">_</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em">q</span></span></span></span></span></span> to compute:</p><div class="math math-display"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>p</mi><mi>k</mi><mo>←</mo><mi>g</mi><mi mathvariant="normal">_</mi><msup><mn>2</mn><mrow><mi>s</mi><mi>k</mi></mrow></msup></mrow><annotation encoding="application/x-tex">p k\leftarrow g\_{2}^{s k}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em"></span><span class="mord mathnormal">p</span><span class="mord mathnormal" style="margin-right:0.03148em">k</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">←</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:1.2091em;vertical-align:-0.31em"></span><span class="mord mathnormal" style="margin-right:0.03588em">g</span><span class="mord" style="margin-right:0.02778em">_</span><span class="mord"><span class="mord"><span class="mord">2</span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8991em"><span style="top:-3.113em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">s</span><span class="mord mathnormal mtight" style="margin-right:0.03148em">k</span></span></span></span></span></span></span></span></span></span></span></span></span></div><p>which outputs the <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>p</mi><mi>k</mi><mo separator="true">,</mo><mi>s</mi><mi>k</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(p k, s k)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mopen">(</span><span class="mord mathnormal">p</span><span class="mord mathnormal" style="margin-right:0.03148em">k</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal">s</span><span class="mord mathnormal" style="margin-right:0.03148em">k</span><span class="mclose">)</span></span></span></span></span>.</p><p>The Beneficiary would select which D-TA service providers (acting in concert) it would use to help it generate a secret. Assume a Beneficiary is also a participant in this protocol, it also runs a D-TA and acts as the designated combiner in the protocol.</p><p>In advance of creating the HD Wallet seed, a Beneficiary would elicit the services of Decentralized Trust Authorities to act as Fiduciaries in a decentralized secret recovery protocol. The Beneficiary&#x27;s next step calculates the aggregate public key by running protocol <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mtext>KAg</mtext><mo stretchy="false">(</mo><mo stretchy="false">{</mo><mi>p</mi><msub><mi>k</mi><mn>1</mn></msub><mo separator="true">,</mo><mo>…</mo><mo separator="true">,</mo><mi>p</mi><msub><mi>k</mi><mi>n</mi></msub><mo stretchy="false">}</mo><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\text{KAg}(\{p k_1,\ldots, p k_n\})</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord text"><span class="mord">KAg</span></span><span class="mopen">({</span><span class="mord mathnormal">p</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03148em">k</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:-0.0315em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="minner">…</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal">p</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03148em">k</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em"><span style="top:-2.55em;margin-left:-0.0315em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mclose">})</span></span></span></span></span> using the D-TA&#x27;s known public keys as input (who have agreed to act as Fiduciaries to this process) and also its own public key.</p><p>The Beneficiary then requests a signature <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>σ</mi></mrow><annotation encoding="application/x-tex">\sigma</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal" style="margin-right:0.03588em">σ</span></span></span></span></span> on a message <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>m</mi></mrow><annotation encoding="application/x-tex">m</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal">m</span></span></span></span></span> from each of the D-TAs acting as Fiduciaries, including itself. For each D-TA, singing is a single round protocol.</p><p>To finalize setup, each D-TA transmits its signature <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>σ</mi></mrow><annotation encoding="application/x-tex">\sigma</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal" style="margin-right:0.03588em">σ</span></span></span></span></span> to the Beneficiary (acting as designated combiner). The Beneficiary generates its own signature and combines it with the received D-TA signatures for the final aggregated signature of <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>σ</mi><mo>←</mo><msubsup><mo>∏</mo><mrow><mi>j</mi><mo>=</mo><mn>1</mn></mrow><mi>n</mi></msubsup><msub><mi>s</mi><mi>j</mi></msub></mrow><annotation encoding="application/x-tex">\sigma\leftarrow\prod_{j=1}^{n} s_{j}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal" style="margin-right:0.03588em">σ</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">←</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:1.2401em;vertical-align:-0.4358em"></span><span class="mop"><span class="mop op-symbol small-op" style="position:relative;top:0em">∏</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.8043em"><span style="top:-2.4003em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em">j</span><span class="mrel mtight">=</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.2029em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.4358em"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord"><span class="mord mathnormal">s</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.05724em">j</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em"><span></span></span></span></span></span></span></span></span></span></span>.</p><p>The final signature is verified against the aggregated public key if the verifier function outputs 1. Assuming so, the setup completes by hashing the aggregated signature where <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>H</mi><mo stretchy="false">(</mo><mover accent="true"><mi>σ</mi><mo>~</mo></mover><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">H(\tilde{\sigma})</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.08125em">H</span><span class="mopen">(</span><span class="mord accent"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6679em"><span style="top:-3em"><span class="pstrut" style="height:3em"></span><span class="mord mathnormal" style="margin-right:0.03588em">σ</span></span><span style="top:-3.35em"><span class="pstrut" style="height:3em"></span><span class="accent-body" style="left:-0.25em"><span class="mord">~</span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></span> is the seed of the HD Wallet.</p><p>Assuming the Beneficiary has backed up their BLS signature key, recovering the HD Wallet seed from multiple Fiduciaries becomes as simple as re-running the setup protocol again. It is easy to envision Fiduciary services running D-TAs, responding and authenticating requests for recovering secrets.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="summary">Summary<a class="hash-link" href="#summary" title="Direct link to heading">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="pairing-and-pq-cryptography">Pairing and PQ Cryptography<a class="hash-link" href="#pairing-and-pq-cryptography" title="Direct link to heading">​</a></h3><p>Milagro leverages a combination of pairing and post-quantum algorithms to distribute cryptographic operations and split cryptographic parameters, providing a level of security and functionality that is a step forward in when compared to the certificate backed cryptosystems in service today. With pairing cryptography, security systems such as multi-factor authentication using zero knowledge protocols, certificate-less authenticated key agreement with perfect forward secrecy and decentralized secret recovery can be deployed in real world scenarios. AES-256 bit encryption and post-quantum key encapsulation ensure that long-lived data is safe from intrusion, even in the face of a post-quantum adversary.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="decentralized-cryptosystem">Decentralized Cryptosystem<a class="hash-link" href="#decentralized-cryptosystem" title="Direct link to heading">​</a></h3><p>Bitcoin&#x27;s blockchain provides an alternative distributed approach to managing a currency without the need for a central bank. With bitcoin, the ledger is distributed, not centralized. Milagro&#x27;s cryptosystem is decentralized to create the same advantages as a distributed ledger. While architecturally different to the blockchain, Milagro&#x27;s cryptosystem and the applications built on it are compatible with and can add significant value to cryptocurrencies and other decentralized networks. </p><p>Milagro envisions a new class of cryptographic service providers called Decentralized Trust Authorities, or D-TAs for short. The purpose of a D-TA is to independently issue shares, or fractions, of cryptographic keys to Milagro clients and servers and application endpoints which have embedded Milagro cryptographic libraries. D-TA&#x27;s also operate as &#x27;Fiduciaries&#x27;, to enable their &#x27;Beneficiaries&#x27; to recover secrets in a decentralized manner, without keeping a share of the secret itself. D-TAs operate independently from each other, are isolated in totality, and completely unaware of the existence of other D-TAs.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="no-single-point-of-compromise">No Single Point of Compromise<a class="hash-link" href="#no-single-point-of-compromise" title="Direct link to heading">​</a></h3><p>Milagro entities receive issued shares cryptographic keys or signatures and combine them to create the whole completed key or signature, thus becoming the only audience who possess knowledge of the entire key or signature. If D-TAs are under separate organizational controls, current root key compromises and key escrow threats inherent in PKI systems are an order of magnitude harder to achieve in a Milagro cryptosystem.  An attacker would need to subvert all independent parties.</p><p>In other words, all D-TAs used to generate shares, or fractions, of keys for Milagro clients and servers must be compromised to create the equivalent of a PKI root key compromise. All D-TAs under the threshold needed to recreate a signature would need to be compromised (including the Beneficiary) in order to generate a final signature.</p><hr><div class="theme-admonition theme-admonition-note alert alert--secondary admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="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"></path></svg></span>See an error in this documentation? </div><div class="admonitionContent_S0QG"><p>Submit a pull request on the development branch of <a href="https://github.com/apache/incubator-milagro" target="_blank" rel="noopener noreferrer">Milagro Website Repo</a>.</p></div></div><p>Supported admonition types are: caution, note, important, tip, warning.</p><div class="footnotes"><hr><ol><li id="fn-first"><a href="https://github.com/ipfs/ipfs" target="_blank" rel="noopener noreferrer">IPFS</a><a href="#fnref-first" class="footnote-backref">↩</a></li></ol></div></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/milagro-protocols"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Milagro Protocols</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/amcl-overview"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">AMCL Overview</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#protocols-and-technology" class="table-of-contents__link toc-highlight">Protocols and Technology</a><ul><li><a href="#identity-based-encryption" class="table-of-contents__link toc-highlight">Identity Based Encryption</a></li><li><a href="#decentralized-identity" class="table-of-contents__link toc-highlight">Decentralized Identity</a></li><li><a href="#encrypted-envelope" class="table-of-contents__link toc-highlight">Encrypted Envelope</a></li></ul></li><li><a href="#decentralized-trust-authorities-d-ta" class="table-of-contents__link toc-highlight">Decentralized Trust Authorities: D-TA</a><ul><li><a href="#issuing-secrets" class="table-of-contents__link toc-highlight">Issuing Secrets</a></li><li><a href="#safekeeping-secrets" class="table-of-contents__link toc-highlight">Safekeeping Secrets</a></li></ul></li><li><a href="#summary" class="table-of-contents__link toc-highlight">Summary</a><ul><li><a href="#pairing-and-pq-cryptography" class="table-of-contents__link toc-highlight">Pairing and PQ Cryptography</a></li><li><a href="#decentralized-cryptosystem" class="table-of-contents__link toc-highlight">Decentralized Cryptosystem</a></li><li><a href="#no-single-point-of-compromise" class="table-of-contents__link toc-highlight">No Single Point of Compromise</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/milagro-intro/index.html b/docs/milagro-intro/index.html
index 6b3d8d5..64bfa96 100644
--- a/docs/milagro-intro/index.html
+++ b/docs/milagro-intro/index.html
@@ -1,127 +1,22 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Milagro Introduction · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Apache Milagro is a set of core security infrastructure and crypto libraries purpose-built for decentralized networks and distributed systems, while also providing value to cloud-connected app-centric software and IoT devices that require Internet scale."/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Milagro Introduction · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="Apache Milagro is a set of core security infrastructure and crypto libraries purpose-built for decentralized networks and distributed systems, while also providing value to cloud-connected app-centric software and IoT devices that require Internet scale."/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive siteNavItemActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>About Milagro</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem navListItemActive"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-milagro-intro">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">Milagro Introduction | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/milagro-intro"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Milagro Introduction | Apache Milagro"><meta data-rh="true" name="description" content="Apache Milagro is a set of core security infrastructure and crypto libraries purpose-built for decentralized networks and distributed systems, while also providing value to cloud-connected app-centric software and IoT devices that require Internet scale."><meta data-rh="true" property="og:description" content="Apache Milagro is a set of core security infrastructure and crypto libraries purpose-built for decentralized networks and distributed systems, while also providing value to cloud-connected app-centric software and IoT devices that require Internet scale."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/milagro-intro"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/milagro-intro" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/milagro-intro" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">Milagro Introduction</h1></header><article><div><span><p>Apache Milagro is a set of core security infrastructure and crypto libraries purpose-built for decentralized networks and distributed systems, while also providing value to cloud-connected app-centric software and IoT devices that require Internet scale.</p>
-<p>Milagro's purpose is to provide a secure and positive open source alternative to centralized and proprietary monolithic trust providers such as commercial certificate authorities and the certificate backed cryptosystems that rely on them.</p>
-<h2><a class="anchor" aria-hidden="true" id="pairing-cryptography"></a><a href="#pairing-cryptography" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Pairing Cryptography</h2>
-<p>Over the last decade, pairings on elliptic curves have been a very active area of research in cryptography, particularly within decentralized networks and distributed systems.</p>
-<p>A pairing is a kind of the bilinear map defined over an elliptic curve. Examples include Weil pairing, Tate pairing, optimal Ate pairing and so on.</p>
-<p>Pairings map pairs of points on an elliptic curve into the multiplicative group of a finite field. Their unique properties have enabled many new cryptographic protocols that had not previously been feasible.</p>
-<p><a href="https://en.wikipedia.org/wiki/Pairing-based_cryptography">Pairing-Based Cryptography (PBC)</a> is emerging as a solution to complex problems that proved intractable to the standard mathematics of Public-Key Cryptography such as Identity-Based Encryption (IBE), whereby the identity of a client can be used as their public key.</p>
-<p>In certain use cases, this removes the need for a PKI infrastructure, since the main reason to issue certificates is to bind a public / private key pair to an identity - a function not required when using IBE.</p>
-<p>Removing the certificate management burden enables the identity management and key lifecycle to take place within the decentralized cryptosystem itself.</p>
-<p>As a result, Milagro's decentralized cryptosystem design goals seek to deliver products that are easier to scale and manage than traditional PKI, eliminate root key 'single point of compromise' weaknesses and are a seamless fit for today's decentralized networks and distributed systems.</p>
-<h2><a class="anchor" aria-hidden="true" id="pairings-go-mainstream"></a><a href="#pairings-go-mainstream" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Pairings Go Mainstream</h2>
-<p>Pairings are key building blocks in Apache Milagro's crypto libraries and products. As examples, BLS signatures feature prominently in Milagro Decentralized Trust Authorities (D-TA), while the M-Pin protocol used in the Milagro ZKP-MFA clients and servers.</p>
-<p><a href="https://en.wikipedia.org/wiki/Boneh-Lynn-Shacham">BLS signatures</a> are widely recognized within the cryptocurrency space for their signature aggregation abilities. BLS signatures are now going through an IETF submission review<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup> standardization process.</p>
-<p>The <a href="https://eprint.iacr.org/2002/164">M-Pin protocol</a><sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup>, which is a multi-factor authentication protocol built upon zero-knowledge proofs, is widely deployed across cloud infrastructures and in public facing deployments by the UK Government<sup class="footnote-ref"><a href="#fn3" id="fnref3">[3]</a></sup>.</p>
-<p>Zcash implements their own zero-knowledge proof algorithm named zk-SNARKs (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge)<sup class="footnote-ref"><a href="#fn4" id="fnref4">[4]</a></sup>. zk-SNARKs is used for protecting privacy of transactions of Zcash. Pairings are a key ingredient for constructing zk-SNARKS.</p>
-<p>Cloudflare introduced Geo Key Manager<sup class="footnote-ref"><a href="#fn5" id="fnref5">[5]</a></sup> to restrict distribution of customers' private keys to the subset of their data centers. To achieve this functionality, attribute-based encryption is used and pairings again are a key building block.</p>
-<p>The Trusted Computing Group (TCG) specifies ECDAA (Elliptic Curve Direct Anonymous Attestation) in the specification of Trusted Platform Module<sup class="footnote-ref"><a href="#fn6" id="fnref6">[6]</a></sup>. ECDAA is a protocol for proving the attestation held by a Trusted Platform Module (TPM) to a verifier without revealing the attestation held by that TPM. Pairing cryptography is used for constructing ECDAA. FIDO Alliance<sup class="footnote-ref"><a href="#fn7" id="fnref7">[7]</a></sup> and W3C<sup class="footnote-ref"><a href="#fn8" id="fnref8">[8]</a></sup> have also published ECDAA algorithms similar to TCG.</p>
-<p>In 2015, NIST <a href="http://www.theregister.co.uk/2014/05/26/congress_divorces_nist_from_nsa/">(<strong><em>the 'post-NSA' NIST</em></strong>)</a> goes so far as to recommend standardization of pairing based cryptography in their publication, <a href="http://nvlpubs.nist.gov/nistpubs/jres/120/jres.120.002.pdf">Report on Pairing-Based Cryptography</a>.</p>
-<blockquote>
-<p>&quot;Based on the study, the report suggests an approach for including pairing-based cryptography schemes in the NIST cryptographic toolkit. As we have seen, pairing-based cryptography has much to offer. Pairing-based schemes, such as IBE, provide special properties which cannot be provided through traditional PKI in a straightforward way. Therefore, pairing-based cryptographic schemes would make a nice addition to NIST’s cryptographic toolkit. In particular, we have focused attention on IBE. IBE simplifies key management procedures of certificate-based public key infrastructures. IBE also offers interesting features arising from the possibility of encoding additional information into a user’s identity.  It has been a decade since the first IBE schemes were proposed. These schemes have received sufficient attention from the cryptographic community and no weakness has been identified.&quot;</p>
-<pre><code class="hljs"> --- NIST, Report on Pairing-Based Cryptography
-</code></pre>
-</blockquote>
-<h2><a class="anchor" aria-hidden="true" id="the-move-to-post-quantum"></a><a href="#the-move-to-post-quantum" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>The Move to Post-Quantum</h2>
-<p>The security of almost all public-key cryptosystems in use today rely on computational assumptions such as the Integer Factorization (IF) and Discrete Logarithm (DL) problems as the foundation of their security. These are problems that today's classical computers cannot solve. In 1994, Shor<sup class="footnote-ref"><a href="#fn9" id="fnref9">[9]</a></sup> showed that both IF and DL problems are easy to solve on a quantum computer, based on the laws of quantum physics. As a consequence, almost all currently deployed public-key cryptosystems will become completely insecure if quantum computers become a practical reality.</p>
-<p>According to NIST in its Report on Post-Quantum Cryptography<sup class="footnote-ref"><a href="#fn10" id="fnref10">[10]</a></sup>, &quot;It will take significant effort to ensure a smooth and secure migration from the current widely used cryptosystems to their quantum computing resistant counterparts. Therefore, regardless of whether we can estimate the exact time of the arrival of the quantum computing era, we must begin now to prepare our information security systems to be able to resist quantum computing.&quot;</p>
-<p>Most experts have a range of quantum computing being strong enough to crack today's cryptosystems being on the horizon anywhere from five to twenty years. It should also be stated that quantum computation only speeds up a brute-force keysearch by a factor of a square root, so any symmetric algorithm can be made secure against a quantum computer by doubling the key length, i.e., take AES from 128 bits to 256.</p>
-<p>Milagro has begun implementing post-quantum algorithms into its code base, beginning with the Supersingular Isogeny Key Encapsulation<sup class="footnote-ref"><a href="#fn11" id="fnref11">[11]</a></sup> protocol. Why?</p>
-<p>Obviously, data that is transient and that does not retain a long term value doesn't require a level of protection against a post-quantum adversary. It becomes an issue when data is retained for the long term. If data is harvested and stored, and has retained value even after decades, then it should be protected to a post-quantum degree. In short, you are protecting the data for the day <em>WHEN</em> a working quantum computer comes online.</p>
-<hr>
-<p><strong>It is hoped that Apache Milagro will become a safe, IPR free island of innovation for cryptographers interested in pairing protocols that deliver much needed core security infrastructure for the advancement of decentralized networks and distributed systems.</strong></p>
-<p><strong>We hope you join us and become part of this journey.</strong></p>
-<hr>
-
-    <div class="admonition admonition-note">
-      <div class="admonition-heading">
-        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="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"/></svg></div>  See an error in this documentation?</h5>
-      </div>
-      <div class="admonition-content">
-    <p>Submit a pull request on the development branch of <a href="https://github.com/apache/incubator-milagro">Milagro Website Repo</a>.</p>
-</div></div><!--
-Supported admonition types are: caution, note, important, tip, warning.
--->
-<hr class="footnotes-sep">
-<section class="footnotes">
-<ol class="footnotes-list">
-<li id="fn1"  class="footnote-item"><p><a href="https://datatracker.ietf.org/doc/draft-boneh-bls-signature/">IETF BLS Signature Internet Draft</a> <a href="#fnref1" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn2"  class="footnote-item"><p><a href="https://tools.ietf.org/html/draft-scott-mpin-00">IETF M-Pin Informational Draft</a> <a href="#fnref2" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn3"  class="footnote-item"><p><a href="https://www.computerweekly.com/news/4500260479/Experian-chooses-UK-authentication-startup-for-GovUK-Verify">UK Government selects M-Pin protocol based authentication provider</a> <a href="#fnref3" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn4"  class="footnote-item"><p><a href="https://z.cash/technology/zksnarks.html">Lindemann, R., &quot;What are zk-SNARKs?&quot;, July 2018</a> <a href="#fnref4" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn5"  class="footnote-item"><p><a href="https://blog.cloudflare.com/geo-key-manager-how-it-works">Geo Key Manager: How It Works</a> <a href="#fnref5" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn6"  class="footnote-item"><p><a href="https://trustedcomputinggroup.org/resource/tpm-library-specification/">TPM 2.0 Library Specification&quot;, September 2016</a> <a href="#fnref6" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn7"  class="footnote-item"><p><a href="https://fidoalliance.org/specs/fido-v2.0-rd-20180702/fido-ecdaa-algorithm-v2.0-rd-20180702.html">FIDO ECDAA Algorithm - FIDO Alliance Review Draft 02</a> <a href="#fnref7" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn8"  class="footnote-item"><p><a href="https://www.w3.org/TR/webauthn">Web Authentication: An API for accessing Public Key Credentials Level 1 - W3C Candidate Recommendation</a> <a href="#fnref8" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn9"  class="footnote-item"><p><a href="https://pdfs.semanticscholar.org/6902/cb196ec032852ff31cc178ca822a5f67b2f2.pdf">Algorithms for quantum computation: discrete logarithms and factoring</a> <a href="#fnref9" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn10"  class="footnote-item"><p><a href="https://nvlpubs.nist.gov/nistpubs/ir/2016/NIST.IR.8105.pdf">Report on post-quantum cryptography</a> <a href="#fnref10" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn11"  class="footnote-item"><p><a href="https://sike.org/">SIKE</a> <a href="#fnref11" class="footnote-backref">↩</a></p>
-</li>
-</ol>
-</section>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-next button" href="/docs/milagro-crypto"><span>Milagro Crypto</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#pairing-cryptography">Pairing Cryptography</a></li><li><a href="#pairings-go-mainstream">Pairings Go Mainstream</a></li><li><a href="#the-move-to-post-quantum">The Move to Post-Quantum</a></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/milagro-intro">About Milagro</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/milagro-design">Milagro Design</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/amcl-overview">AMCL Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">About Milagro</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">Milagro Introduction</span><meta itemprop="position" content="2"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Milagro Introduction</h1></header><p>Apache Milagro is a set of core security infrastructure and crypto libraries purpose-built for decentralized networks and distributed systems, while also providing value to cloud-connected app-centric software and IoT devices that require Internet scale.</p><p>Milagro&#x27;s purpose is to provide a secure and positive open source alternative to centralized and proprietary monolithic trust providers such as commercial certificate authorities and the certificate backed cryptosystems that rely on them.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="pairing-cryptography">Pairing Cryptography<a class="hash-link" href="#pairing-cryptography" title="Direct link to heading">​</a></h2><p>Over the last decade, pairings on elliptic curves have been a very active area of research in cryptography, particularly within decentralized networks and distributed systems.</p><p>A pairing is a kind of the bilinear map defined over an elliptic curve. Examples include Weil pairing, Tate pairing, optimal Ate pairing and so on.  </p><p>Pairings map pairs of points on an elliptic curve into the multiplicative group of a finite field. Their unique properties have enabled many new cryptographic protocols that had not previously been feasible.</p><p><a href="https://en.wikipedia.org/wiki/Pairing-based_cryptography" target="_blank" rel="noopener noreferrer">Pairing-Based Cryptography (PBC)</a> is emerging as a solution to complex problems that proved intractable to the standard mathematics of Public-Key Cryptography such as Identity-Based Encryption (IBE), whereby the identity of a client can be used as their public key.</p><p>In certain use cases, this removes the need for a PKI infrastructure, since the main reason to issue certificates is to bind a public / private key pair to an identity - a function not required when using IBE.</p><p>Removing the certificate management burden enables the identity management and key lifecycle to take place within the decentralized cryptosystem itself.</p><p>As a result, Milagro&#x27;s decentralized cryptosystem design goals seek to deliver products that are easier to scale and manage than traditional PKI, eliminate root key &#x27;single point of compromise&#x27; weaknesses and are a seamless fit for today&#x27;s decentralized networks and distributed systems.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="pairings-go-mainstream">Pairings Go Mainstream<a class="hash-link" href="#pairings-go-mainstream" title="Direct link to heading">​</a></h2><p>Pairings are key building blocks in Apache Milagro&#x27;s crypto libraries and products. As examples, BLS signatures feature prominently in Milagro Decentralized Trust Authorities (D-TA), while the M-Pin protocol used in the Milagro ZKP-MFA clients and servers.</p><p><a href="https://en.wikipedia.org/wiki/Boneh-Lynn-Shacham" target="_blank" rel="noopener noreferrer">BLS signatures</a> are widely recognized within the cryptocurrency space for their signature aggregation abilities. BLS signatures are now going through an IETF submission review<sup id="fnref-first"><a href="#fn-first" class="footnote-ref">first</a></sup> standardization process.</p><p>The <a href="https://eprint.iacr.org/2002/164" target="_blank" rel="noopener noreferrer">M-Pin protocol</a><sup id="fnref-second"><a href="#fn-second" class="footnote-ref">second</a></sup>, which is a multi-factor authentication protocol built upon zero-knowledge proofs, is widely deployed across cloud infrastructures and in public facing deployments by the UK Government<sup id="fnref-third"><a href="#fn-third" class="footnote-ref">third</a></sup>. </p><p>Zcash implements their own zero-knowledge proof algorithm named zk-SNARKs (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge)<sup id="fnref-fourth"><a href="#fn-fourth" class="footnote-ref">fourth</a></sup>. zk-SNARKs is used for protecting privacy of transactions of Zcash. Pairings are a key ingredient for constructing zk-SNARKS.</p><p>Cloudflare introduced Geo Key Manager<sup id="fnref-fifth"><a href="#fn-fifth" class="footnote-ref">fifth</a></sup> to restrict distribution of customers&#x27; private keys to the subset of their data centers. To achieve this functionality, attribute-based encryption is used and pairings again are a key building block.</p><p>The Trusted Computing Group (TCG) specifies ECDAA (Elliptic Curve Direct Anonymous Attestation) in the specification of Trusted Platform Module<sup id="fnref-sixth"><a href="#fn-sixth" class="footnote-ref">sixth</a></sup>. ECDAA is a protocol for proving the attestation held by a Trusted Platform Module (TPM) to a verifier without revealing the attestation held by that TPM. Pairing cryptography is used for constructing ECDAA. FIDO Alliance<sup id="fnref-seventh"><a href="#fn-seventh" class="footnote-ref">seventh</a></sup> and W3C<sup id="fnref-eighth"><a href="#fn-eighth" class="footnote-ref">eighth</a></sup> have also published ECDAA algorithms similar to TCG.</p><p>In 2015, NIST (<a href="http://www.theregister.co.uk/2014/05/26/congress_divorces_nist_from_nsa/" target="_blank" rel="noopener noreferrer">the &#x27;post-NSA&#x27; NIST</a>) goes so far as to recommend standardization of pairing based cryptography in their publication, <a href="http://nvlpubs.nist.gov/nistpubs/jres/120/jres.120.002.pdf" target="_blank" rel="noopener noreferrer">Report on Pairing-Based Cryptography</a>.</p><blockquote><p>&quot;Based on the study, the report suggests an approach for including pairing-based cryptography schemes in the NIST cryptographic toolkit. As we have seen, pairing-based cryptography has much to offer. Pairing-based schemes, such as IBE, provide special properties which cannot be provided through traditional PKI in a straightforward way. Therefore, pairing-based cryptographic schemes would make a nice addition to NIST’s cryptographic toolkit. In particular, we have focused attention on IBE. IBE simplifies key management procedures of certificate-based public key infrastructures. IBE also offers interesting features arising from the possibility of encoding additional information into a user’s identity.  It has been a decade since the first IBE schemes were proposed. These schemes have received sufficient attention from the cryptographic community and no weakness has been identified.&quot;</p><p> --- NIST, <em>Report on Pairing-Based Cryptography</em></p></blockquote><h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-move-to-post-quantum">The Move to Post-Quantum<a class="hash-link" href="#the-move-to-post-quantum" title="Direct link to heading">​</a></h2><p>The security of almost all public-key cryptosystems in use today rely on computational assumptions such as the Integer Factorization (IF) and Discrete Logarithm (DL) problems as the foundation of their security. These are problems that today&#x27;s classical computers cannot solve. In 1994, Shor<sup id="fnref-ninth"><a href="#fn-ninth" class="footnote-ref">ninth</a></sup> showed that both IF and DL problems are easy to solve on a quantum computer, based on the laws of quantum physics. As a consequence, almost all currently deployed public-key cryptosystems will become completely insecure if quantum computers become a practical reality.</p><p>According to NIST in its Report on Post-Quantum Cryptography<sup id="fnref-tenth"><a href="#fn-tenth" class="footnote-ref">tenth</a></sup>, &quot;It will take significant effort to ensure a smooth and secure migration from the current widely used cryptosystems to their quantum computing resistant counterparts. Therefore, regardless of whether we can estimate the exact time of the arrival of the quantum computing era, we must begin now to prepare our information security systems to be able to resist quantum computing.&quot;</p><p>Most experts have a range of quantum computing being strong enough to crack today&#x27;s cryptosystems being on the horizon anywhere from five to twenty years. It should also be stated that quantum computation only speeds up a brute-force keysearch by a factor of a square root, so any symmetric algorithm can be made secure against a quantum computer by doubling the key length, i.e., take AES from 128 bits to 256.</p><p>Milagro has begun implementing post-quantum algorithms into its code base, beginning with the Supersingular Isogeny Key Encapsulation<sup id="fnref-eleventh"><a href="#fn-eleventh" class="footnote-ref">eleventh</a></sup> protocol. Why? </p><p>Obviously, data that is transient and that does not retain a long term value doesn&#x27;t require a level of protection against a post-quantum adversary. It becomes an issue when data is retained for the long term. If data is harvested and stored, and has retained value even after decades, then it should be protected to a post-quantum degree. In short, you are protecting the data for the day <em>WHEN</em> a working quantum computer comes online.</p><hr><p><strong>It is hoped that Apache Milagro will become a safe, IPR free island of innovation for cryptographers interested in pairing protocols that deliver much needed core security infrastructure for the advancement of decentralized networks and distributed systems.</strong></p><p><strong>We hope you join us and become part of this journey.</strong></p><hr><div class="theme-admonition theme-admonition-note alert alert--secondary admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 14 16"><path fill-rule="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"></path></svg></span>See an error in this documentation? </div><div class="admonitionContent_S0QG"><p>Submit a pull request on the development branch of <a href="https://github.com/apache/incubator-milagro" target="_blank" rel="noopener noreferrer">Milagro Website Repo</a>.</p></div></div><p>Supported admonition types are: caution, note, important, tip, warning.</p><div class="footnotes"><hr><ol><li id="fn-first"><a href="https://datatracker.ietf.org/doc/draft-boneh-bls-signature/" target="_blank" rel="noopener noreferrer">IETF BLS Signature Internet Draft</a><a href="#fnref-first" class="footnote-backref">↩</a></li><li id="fn-second"><a href="https://tools.ietf.org/html/draft-scott-mpin-00" target="_blank" rel="noopener noreferrer">IETF M-Pin Informational Draft</a><a href="#fnref-second" class="footnote-backref">↩</a></li><li id="fn-third"><a href="https://www.computerweekly.com/news/4500260479/Experian-chooses-UK-authentication-startup-for-GovUK-Verify" target="_blank" rel="noopener noreferrer">UK Government selects M-Pin protocol based authentication provider</a><a href="#fnref-third" class="footnote-backref">↩</a></li><li id="fn-fourth"><a href="https://z.cash/technology/zksnarks.html" target="_blank" rel="noopener noreferrer">Lindemann, R., &quot;What are zk-SNARKs?&quot;, July 2018</a><a href="#fnref-fourth" class="footnote-backref">↩</a></li><li id="fn-fifth"><a href="https://blog.cloudflare.com/geo-key-manager-how-it-works" target="_blank" rel="noopener noreferrer">Geo Key Manager: How It Works</a><a href="#fnref-fifth" class="footnote-backref">↩</a></li><li id="fn-sixth"><a href="https://trustedcomputinggroup.org/resource/tpm-library-specification/" target="_blank" rel="noopener noreferrer">TPM 2.0 Library Specification&quot;, September 2016</a><a href="#fnref-sixth" class="footnote-backref">↩</a></li><li id="fn-seventh"><a href="https://fidoalliance.org/specs/fido-v2.0-rd-20180702/fido-ecdaa-algorithm-v2.0-rd-20180702.html" target="_blank" rel="noopener noreferrer">FIDO ECDAA Algorithm - FIDO Alliance Review Draft 02</a><a href="#fnref-seventh" class="footnote-backref">↩</a></li><li id="fn-eighth"><a href="https://www.w3.org/TR/webauthn" target="_blank" rel="noopener noreferrer">Web Authentication: An API for accessing Public Key Credentials Level 1 - W3C Candidate Recommendation</a><a href="#fnref-eighth" class="footnote-backref">↩</a></li><li id="fn-ninth"><a href="https://pdfs.semanticscholar.org/6902/cb196ec032852ff31cc178ca822a5f67b2f2.pdf" target="_blank" rel="noopener noreferrer">Algorithms for quantum computation: discrete logarithms and factoring</a><a href="#fnref-ninth" class="footnote-backref">↩</a></li><li id="fn-tenth"><a href="https://nvlpubs.nist.gov/nistpubs/ir/2016/NIST.IR.8105.pdf" target="_blank" rel="noopener noreferrer">Report on post-quantum cryptography</a><a href="#fnref-tenth" class="footnote-backref">↩</a></li><li id="fn-eleventh"><a href="https://sike.org/" target="_blank" rel="noopener noreferrer">SIKE</a><a href="#fnref-eleventh" class="footnote-backref">↩</a></li></ol></div></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--next" href="/docs/milagro-crypto"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Milagro Crypto</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#pairing-cryptography" class="table-of-contents__link toc-highlight">Pairing Cryptography</a></li><li><a href="#pairings-go-mainstream" class="table-of-contents__link toc-highlight">Pairings Go Mainstream</a></li><li><a href="#the-move-to-post-quantum" class="table-of-contents__link toc-highlight">The Move to Post-Quantum</a></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/milagro-protocols/index.html b/docs/milagro-protocols/index.html
index c211abf..1d1cb26 100644
--- a/docs/milagro-protocols/index.html
+++ b/docs/milagro-protocols/index.html
@@ -1,862 +1,22 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Milagro Protocols · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="The Apache Milagro crypto libraries contain an (almost) overwhelming choice of algorithms and cryptographic primitives for robust and rapid application development. This section focuses specifically on a few protocols that are used extensively as key building blocks within the Milagro Zero-Knowledge Proof Multi-Factor Authentication (ZKP-MFA) server and clients, and Milagro Decentralized Trust Authority (D-TA) applications. Both applications implement these protocols using the Milagro crypto libraries."/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Milagro Protocols · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="The Apache Milagro crypto libraries contain an (almost) overwhelming choice of algorithms and cryptographic primitives for robust and rapid application development. This section focuses specifically on a few protocols that are used extensively as key building blocks within the Milagro Zero-Knowledge Proof Multi-Factor Authentication (ZKP-MFA) server and clients, and Milagro Decentralized Trust Authority (D-TA) applications. Both applications implement these protocols using the Milagro crypto libraries."/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>About Milagro</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-milagro-protocols">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">Milagro Protocols | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/milagro-protocols"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Milagro Protocols | Apache Milagro"><meta data-rh="true" name="description" content="The Apache Milagro crypto libraries contain an (almost) overwhelming choice of algorithms and cryptographic primitives for robust and rapid application development. This section focuses specifically on a few protocols that are used extensively as key building blocks within the Milagro Zero-Knowledge Proof Multi-Factor Authentication (ZKP-MFA) server and clients, and Milagro Decentralized Trust Authority (D-TA) applications. Both applications implement these protocols using the Milagro crypto libraries."><meta data-rh="true" property="og:description" content="The Apache Milagro crypto libraries contain an (almost) overwhelming choice of algorithms and cryptographic primitives for robust and rapid application development. This section focuses specifically on a few protocols that are used extensively as key building blocks within the Milagro Zero-Knowledge Proof Multi-Factor Authentication (ZKP-MFA) server and clients, and Milagro Decentralized Trust Authority (D-TA) applications. Both applications implement these protocols using the Milagro crypto libraries."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/milagro-protocols"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/milagro-protocols" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/milagro-protocols" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">Milagro Protocols</h1></header><article><div><span><p>The Apache Milagro crypto libraries contain an (almost) overwhelming choice of algorithms and cryptographic primitives for robust and rapid application development. This section focuses specifically on a few protocols that are used extensively as key building blocks within the Milagro Zero-Knowledge Proof Multi-Factor Authentication (ZKP-MFA) server and clients, and Milagro Decentralized Trust Authority (D-TA) applications. Both applications implement these protocols using the Milagro crypto libraries.</p>
-<h2><a class="anchor" aria-hidden="true" id="m-pin-protocol---introduction"></a><a href="#m-pin-protocol---introduction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>M-Pin Protocol - Introduction</h2>
-<p>The genesis of the M-Pin Protocol was first put forward in a research paper by <a href="https://scholar.google.com/citations?user=GsM-aeEAAAAJ&amp;hl=en">Dr. Michael Scott</a> in 2002<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>.</p>
-<p>The M-Pin Protocol has been iterated on several times over the years since, to develop three distinct modes, which will be explored in the following sections.</p>
-<p>As noted in <a href="milagro-crypto.html">Milagro Crypto</a>, the M-Pin Protocol is of these classifications and exploits the features of:</p>
-<ul>
-<li>Elliptic Curve Cryptography</li>
-<li>Pairing Based Cryptography</li>
-<li>Identity Based Encryption</li>
-<li>Zero Knowledge Proof</li>
-</ul>
-<p>Because of the characteristics that M-Pin inherits from the four techniques above, the M-Pin Protocol and its variants are able to deliver:</p>
-<ul>
-<li>Multi-factor authentication (MFA) using Zero Knowledge Proof</li>
-<li>Authenticated Key Agreement</li>
-<li>Distribution, or splitting, of Trust Authorities</li>
-<li><a href="https://en.wikipedia.org/wiki/Subliminal_channel">Subliminal Channel Communication</a><sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup></li>
-</ul>
-<p>The three modes of operation of the M-Pin Protocol are as follows:</p>
-<ul>
-<li><strong>M-Pin 1-pass</strong>: Client to server authentication via digital signature, this mode implements a <em>non-interactive</em> zero knowledge proof and is resistant to <a href="https://en.wikipedia.org/wiki/Man-in-the-middle_attack">MITM (man in the middle)</a> attacks.</li>
-<li><strong>M-Pin 2-pass</strong>: Client to server authentication via a <em>interactive</em> zero knowledge proof, resistant to <a href="https://en.wikipedia.org/wiki/Man-in-the-middle_attack">MITM</a> and <a href="https://kcitls.org">KCI (Key Compromise Impersonation)</a> attacks.</li>
-<li><strong>M-Pin FULL</strong>: Mutual client to server authentication via a <em>interactive</em> zero knowledge proof, resistant to MITM and KCI attacks and able to drive an Authenticated <a href="https://en.wikipedia.org/wiki/Key-agreement_protocol">Key Agreement</a> between client and server, resulting in 128 bit shared secret key.</li>
-</ul>
-<p>Note that the M-Pin Full Authenticated Key Agreement possesses the quality of <a href="https://en.wikipedia.org/wiki/Forward_secrecy">perfect forward secrecy (PFS)</a>, meaning, even if the client and server long term keys are compromised, the past session keys (used to encrypt TLS traffic, for example) are not compromised.</p>
-<h2><a class="anchor" aria-hidden="true" id="chow-choo-protocol---introduction"></a><a href="#chow-choo-protocol---introduction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Chow-Choo Protocol - Introduction</h2>
-<p>The Chow-Choo Protocol was developed by Sherman S.M. Chow and Kim-Kwang Raymond Choo and published in 2007 via a research paper titled Strongly-Secure Identity-based Key Agreement<sup class="footnote-ref"><a href="#fn3" id="fnref3">[3]</a></sup>.  The Chow-Choo Protocol can be technically described as an identity-based key agreement protocol.</p>
-<p>The Chow-Choo Protocol is of these classifications and exploits the features of:</p>
-<ul>
-<li>Elliptic Curve Cryptography</li>
-<li>Pairing Based Cryptography</li>
-<li>Identity Based Encryption</li>
-</ul>
-<p>Because of the characteristics that Chow-Choo inherits from the three techniques above, the Chow-Choo Protocol can deliver:</p>
-<ul>
-<li>Authenticated Key Agreement</li>
-<li>Distribution, or splitting, of Trust Authorities</li>
-</ul>
-<p>Note that the Chow-Choo Protocol is not a Zero Knowledge Proof protocol.</p>
-<h2><a class="anchor" aria-hidden="true" id="bls-signatures---introduction"></a><a href="#bls-signatures---introduction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>BLS Signatures - Introduction</h2>
-<p>The BLS signature (Boneh-Lynn-Schacham) scheme<sup class="footnote-ref"><a href="#fn4" id="fnref4">[4]</a></sup> uses a bilinear pairing for verification, and signatures are elements of an elliptic curve group. Working in an elliptic curve group provides some defense against index calculus attacks (with the caveat that such attacks are still possible in the target group \( G_{T} \) of the pairing), allowing shorter signatures than other systems for similar levels of security.</p>
-<p>BLS signatures have become the subject of much work as they are seen as being a possible way forward to solve privacy issues within cryptocurrencies through a process of signature aggregation. Apache Milagro uses signature aggregation and key splitting, and further aggregation of signatures from those split keys, as a key component of the Milagro Custody Node digital asset safekeeping protocol.</p>
-<h2><a class="anchor" aria-hidden="true" id="supersingular-isogeny-key-encapsulation---introduction"></a><a href="#supersingular-isogeny-key-encapsulation---introduction" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Supersingular Isogeny Key Encapsulation - Introduction</h2>
-<p>Supersingular isogeny Diffie–Hellman key exchange (SIDH) and the key encapsulation protocol, SIKE<sup class="footnote-ref"><a href="#fn5" id="fnref5">[5]</a></sup> (derived from SIDH), are post-quantum cryptographic algorithms used to establish a secret key between two parties over an otherwise insecure communications channel. SIKE boasts one of the smallest key sizes of all post-quantum key encapsulations; with compression, SIKE uses 2688-bit public keys at a 128-bit quantum security level.</p>
-<p>SIKE also distinguishes itself from similar systems such as NTRU and Ring-LWE by supporting perfect forward secrecy, a property that prevents compromised long-term keys from compromising the confidentiality of old communication sessions. These properties make SIKE a natural candidate to replace Diffie–Hellman (DHE and elliptic curve Diffie–Hellman (ECDHE), which are widely used in Internet communication.</p>
-<p>Since it is the only post-quantum cryptography protocol which is constructed on elliptic curves, hybrid cryptography protocols can be derived from SIKE and classical elliptic curve cryptography (ECC) to make the transition towards post-quantum cryptography more convenient and practical.</p>
-<p>Milagro Custody Node implements SIKE for key encapsulation within Milagro's encrypted envelope format.</p>
-<hr>
-<table>
-<thead>
-<tr><th>Protocols</th><th>Use Cases</th></tr>
-</thead>
-<tbody>
-<tr><td>M-Pin 1-Pass</td><td>Digital signature authentication in battery or bandwidth constrained environments such as IoT devices, embedded applications and mobile apps. <br>This should be considered the default implementation for client to server authentication suitable for almost all use cases.</td></tr>
-<tr><td>M-Pin 1-Pass + <br>M-Pin 2-Pass</td><td>Digital signature and client to server authentication in smartphones apps, desktop browsers and software applications.</td></tr>
-<tr><td>M-Pin 2-Pass</td><td>Client to server authentication in smartphone apps, desktop browsers and software applications.</td></tr>
-<tr><td>M-Pin FULL</td><td>Mutual client and server authentication with authenticated key agreement for use in smartphone apps, hardware and software applications. <br>Authenticated Key Agreement with PFS can be used as the basis for TLS sessions between clients and servers.</td></tr>
-<tr><td>Chow-Choo</td><td>Mutual peer to peer authentication with authenticated key agreement for use in smartphone apps, hardware and software applications. <br>Authenticated Key Agreement with PFS can be used as the basis for TLS sessions between clients and servers and peer to peer.</td></tr>
-<tr><td>BLS Signing + <br>Key Splitting + <br>Signature Aggregation</td><td>A simple approach for splitting keys and aggregating many BLS signatures (from the shares of keys acting as signing keys) on a common message. Public keys are not needed for verifying the multi-signature. <br>An important property of the construction is that the scheme is secure against a rogue public-key attack without requiring users to prove knowledge of their secret keys.</td></tr>
-<tr><td>SIKE (Key Encapsulation)</td><td>SIKE is a family of post-quantum key encapsulation mechanisms based on the Supersingular Isogeny Diffie-Hellman (SIDH) key exchange protocol. <br>The algorithms use arithmetic operations on elliptic curves defined over finite fields and compute maps, so-called isogenies, between such curves. <br>SIKE can also delivery perfect forward secrecy.</td></tr>
-</tbody>
-</table>
-<hr>
-<h2><a class="anchor" aria-hidden="true" id="protocols-in-depth"></a><a href="#protocols-in-depth" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Protocols In Depth</h2>
-<h3><a class="anchor" aria-hidden="true" id="m-pin-1-pass"></a><a href="#m-pin-1-pass" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>M-Pin 1-Pass</h3>
-<p>As opposed to Chow-Choo, which can be used in a client to server as well as a peer to peer setting, M-Pin is strictly a client-server protocol.</p>
-<p>To embellish the security of the client-server protocol, it is important that client and server secrets should be kept distinct.</p>
-<p>A simple way to do this is to exploit the structure of a Type-3 pairing and put client secrets in \( G_1 \) and the server secret in \( G_2 \) as previously noted in the preceding section.</p>
-<p>For a Type-3 pairing there is assumed to be no computable isomorphism between these groups, even though both are of the same order.</p>
-<p>In the original implementation, the client was supplied with a challenge by the server as part of the second step within the protocol, after the first step whereby the client announced her identity to the server.</p>
-<p>In a later proposal, it was realised that an M-Pin 1-Pass Protocol could be obtained if the client itself derived the challenge as \( y \) as \( y=H(U|T) \) where \( T \) is a time-stamp transmitted by the Client along her claimed identity, \( U \) and \( V \).</p>
-<p>The protocol could then be reduced in an obvious way to a secure 1-pass protocol. However, this assumes that the Server checks the accuracy of the time-stamp before completing the protocol.</p>
-<p>This all works thanks to the pairing function \( e(.,.) \) and its remarkable bilinearity property \( e(aP,Q) = e(P,aQ) = e(P,Q)^{a} \).</p>
-<hr>
-<table>
-<thead>
-<tr><th style="text-align:center">Alice - identity \( ID_a \)</th><th style="text-align:center">Server</th></tr>
-</thead>
-<tbody>
-<tr><td style="text-align:center">Generates random \( x&lt;q \)</td><td style="text-align:center"></td></tr>
-<tr><td style="text-align:center">\( A=H(ID_a) \)</td><td style="text-align:center"></td></tr>
-<tr><td style="text-align:center">\( U=x{A} \)</td><td style="text-align:center"></td></tr>
-<tr><td style="text-align:center">\( ID_a \), \( U~~ \)</td><td style="text-align:center"></td></tr>
-<tr><td style="text-align:center">\( y=H(U \) | \( T) \)</td><td style="text-align:center"></td></tr>
-<tr><td style="text-align:center">\( V=-(x+y){((s-\alpha)A+\alpha A)} \rightarrow \)</td><td style="text-align:center"></td></tr>
-<tr><td style="text-align:center"></td><td style="text-align:center">\( A=H(ID_a) \)</td></tr>
-<tr><td style="text-align:center"></td><td style="text-align:center">\( g=e(V,Q).e(U+yA,sQ) \)</td></tr>
-<tr><td style="text-align:center"></td><td style="text-align:center">if \( g \ne 1 \), reject the connection</td></tr>
-</tbody>
-</table>
-<figure>
-  <caption><strong>Figure 1.</strong> M-Pin 1-Pass</caption>
-</figure>
----
-<h3><a class="anchor" aria-hidden="true" id="m-pin-2-pass"></a><a href="#m-pin-2-pass" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>M-Pin 2-Pass</h3>
-<p>As you can see below in Fig 2., M-Pin in the two pass operation operates in a challenge (from the Server) to client, who responds to challenge. This implementation obviates the any risk of Key Compromise Impersonation attack vector, at the cost of of a full roundtrip.</p>
-<hr>
-<table>
-<thead>
-<tr><th style="text-align:center">Alice - identity \( ID_a \)</th><th style="text-align:center">Server</th></tr>
-</thead>
-<tbody>
-<tr><td style="text-align:center">Generates random \( x&lt;q \)</td><td style="text-align:center">Generates random \( y&lt;q \)</td></tr>
-<tr><td style="text-align:center">\( A=H(ID_a) \)</td><td style="text-align:center"></td></tr>
-<tr><td style="text-align:center">\( U=x{A} \)</td><td style="text-align:center"></td></tr>
-<tr><td style="text-align:center">\( ID_a$, $U~~ \rightarrow  \)</td><td style="text-align:center"></td></tr>
-<tr><td style="text-align:center"></td><td style="text-align:center">\( \leftarrow y \)</td></tr>
-<tr><td style="text-align:center">\( V=-(x+y){((s-\alpha)A+\alpha A)} \rightarrow \)</td><td style="text-align:center"></td></tr>
-<tr><td style="text-align:center"></td><td style="text-align:center">\( A=H(ID_a) \)</td></tr>
-<tr><td style="text-align:center"></td><td style="text-align:center">\( g=e(V,Q).e(U+yA,sQ) \)</td></tr>
-<tr><td style="text-align:center"></td><td style="text-align:center">if \( g \ne 1 \), reject the connection</td></tr>
-</tbody>
-</table>
-<figure>
-  <caption><strong>Figure 2.</strong> M-Pin 2-Pass</caption>
-</figure>
----
-<h3><a class="anchor" aria-hidden="true" id="m-pin-full"></a><a href="#m-pin-full" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>M-Pin FULL</h3>
-<p>This more elaborate protocol not only replaces Username/Password, but replaces the functionality of digital certificates being utilised to drive key agreement for TLS or VPN protocols as well.</p>
-<p>Our starting point is the M-Pin protocol as described above.</p>
-<p>The idea is to run it first (to authenticate the client to the server), and then proceed to authenticate the server to the client via an authenticated key exchange, which also establishes the agreed key of 128 bits.</p>
-<p>The first thing to note is that both the client and the server can already calculate a mutual authenticated encryption key!</p>
-<p>This protocol requires another general hash function \( H_g(.) \) which serializes, and hashes its input to a 256-bit value. Both sides can then extract a key from this value \( K \).</p>
-<p>It is left as a simple exercise for the reader to confirm that both client and server end up with the same key.</p>
-<p>Note that since the first part of the protocol is just the original M-Pin protocol, all of its features and extensions still apply.</p>
-<hr>
-<table>
-<thead>
-<tr><th style="text-align:center">Alice - identity \( ID_a \)</th><th style="text-align:center">Server</th></tr>
-</thead>
-<tbody>
-<tr><td style="text-align:center">Generates random \( x&lt;q \)</td><td style="text-align:center">Generates random \( y&lt;q \)</td></tr>
-<tr><td style="text-align:center">\( A=H(ID_a) \)</td><td style="text-align:center"></td></tr>
-<tr><td style="text-align:center">\( U=x{A} \)</td><td style="text-align:center"></td></tr>
-<tr><td style="text-align:center">\( ID_a$, $U~~ \rightarrow  \)</td><td style="text-align:center"></td></tr>
-<tr><td style="text-align:center"></td><td style="text-align:center">\( \leftarrow y \)</td></tr>
-<tr><td style="text-align:center">\( V=-(x+y){((s-\alpha)A+\alpha A)} \rightarrow \)</td><td style="text-align:center"></td></tr>
-<tr><td style="text-align:center"></td><td style="text-align:center">\( A=H(ID_a) \)</td></tr>
-<tr><td style="text-align:center"></td><td style="text-align:center">\( g=e(V,Q).e(U+yA,sQ) \)</td></tr>
-<tr><td style="text-align:center"></td><td style="text-align:center">if \( g \ne 1 \), reject the connection</td></tr>
-<tr><td style="text-align:center">\( R=r{A} \rightarrow \)</td><td style="text-align:center">\( \leftarrow W=w{A} \)</td></tr>
-<tr><td style="text-align:center">\( h=H(A,U,y,V,R,W) \)</td><td style="text-align:center">\( h=H(A,U,y,V,R,W) \)</td></tr>
-<tr><td style="text-align:center">\( K=H_g((g_1.{g_2}^\alpha)^{r+h} \ \) | \( x{W}) \)</td><td style="text-align:center">\( K=H_g(e(R+hA,sQ) \ \) | \( w{U}) \)</td></tr>
-</tbody>
-</table>
-<figure>
-  <caption><strong>Figure 3.</strong> M-Pin FULL</caption>
-</figure>
-<hr>
-<p>Note that the transmission of \( R \) from the client to the server can be done at the same time as \( V \) is transmitted, and the transmission of \( W \) from the server to the client can be done at the same time as  \( y \) is transmitted, to avoid introducing any extra flows into the protocol.</p>
-<h3><a class="anchor" aria-hidden="true" id="chow-choo-protocol"></a><a href="#chow-choo-protocol" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Chow-Choo Protocol</h3>
-<p>As initially proposed, the Chow-Choo Protocol was based on a type-1 pairing. Note that in the Milagro framework, the Chow-Choo Protocol is made to work in a Type-3 setting.</p>
-<p>Pairings are usually written as functions of the form \( g=e(A,B) \), where \( A \in G_1 \), \( g \in G_T \), and for a Type-1 pairing \( B \in G_1 \) and for Type-3 \( B \in G_2 \).</p>
-<p>Consider now an application of this protocol to an imagined Internet of Things (IoT) setting.</p>
-<p>Each 'Thing' is issued with a serial number and its own Chow-Choo key (which can double as an M-Pin Key) based on that serial number as an identity.</p>
-<p>These keys may be embedded at the time of manufacture, by the manufacturer acting as a naturally trusted authority.</p>
-<p>When a Thing needs to communicate with another Thing, an action which requires knowing only the identity of the other, both parties can activate the Chow-Choo Protocol to calculate the same key to encrypt their communication.</p>
-<p>For both sending and receiving, Alice is issued with \( sA_1 \) and \( sA_2 \), where \( A_1=H_1 \) and \( A_2=H_2 \) both in the \( ID = Alice \).</p>
-<p>Similarly Bob is issued with \( sB_1 \) and \( sB_2 \). Now if Alice initiates and Bob responds, Alice calculates the key as \( e(sA_1,B_2) \) and Bob can calculate the same key as \( e(A_1,sB_2) \), where by convention the initiator uses their <em>sender</em> key and the responder uses their <em>receiver</em> key.</p>
-<p>One thing we can exploit -- in any communication context there is an initiator and a responder, or a <em>sender</em> and <em>receiver</em>, if you will.</p>
-<p>In the above example, Alice and Bob both were issued <em>sender</em> and <em>receiver</em> keys respectively, as this describes where they can appear in the pairing.</p>
-<p>An obvious advantage is to issue each Thing with two keys, one in \( G_1 \) and the other in \( G_2 \), <strong>if</strong> the Thing is approved to send and receive.</p>
-<p>However, the capability exists to cryptographically bound Things to only receiving information, or only sending information, based upon whether or not a Thing has been issued a sender and / or a receiver key.</p>
-<p>This capability is exploited in the Milagro framework to enable peer to peer authenticated key agreement.</p>
-<hr>
-<!--- This is the Chow Choo protocol in a Mathml table / frame because redering in Math LaTex equations exposes a bug in MathJax. It's just one equation that has this bug!  --->
-<figure>
-    <html>
-    <math xmlns="http://www.w3.org/1998/Math/MathML" display='block'>
-            <mtable frame="solid" rowlines="solid" rowalign="center" mathbackground="white">
-            <mstyle mathsize='.85em'>
-        <mtr>
-            <mtd>
-                <mspace width="0.1em" />
-            </mtd>
-            <mtd columnalign="left">
-                <mtable class="m-matrix">
-                    <mtr>
-                        <mtd>
-                            <mtext>SENDER</mtext>
-                        </mtd>
-                        <mtd>
-                            <mtext>RECEIVER</mtext>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                            <mi>x</mi>
-                            <mo>&#x02208;</mo>
-                            <msubsup>
-                                <mi>&#x02124;</mi>
-                                <mi>q</mi>
-                                <mo>*</mo>
-                            </msubsup>
-                        </mtd>
-                        <mtd>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                            <mi>A</mi>
-                            <mi>G</mi>
-                            <mn>1</mn>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <msub>
-                                <mi>H</mi>
-                                <mn>1</mn>
-                            </msub>
-                            <mrow>
-                                <mo form="prefix">(</mo>
-                                <mi>I</mi>
-                                <mo>&#x02146;</mo>
-                                <mi>A</mi>
-                                <mo form="postfix">)</mo>
-                            </mrow>
-                        </mtd>
-                        <mtd>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                            <mi>P</mi>
-                            <mi>a</mi>
-                            <msub>
-                                <mi>G</mi>
-                                <mn>1</mn>
-                            </msub>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <mi>x</mi>
-                            <mo>&#x022C5;</mo>
-                            <mi>A</mi>
-                            <msub>
-                                <mi>G</mi>
-                                <mn>1</mn>
-                            </msub>
-                        </mtd>
-                        <mtd>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                            <mi>I</mi>
-                            <mo>&#x02146;</mo>
-                            <mi>A</mi>
-                            <mo>,</mo>
-                            <mi>P</mi>
-                            <mi>a</mi>
-                            <msub>
-                                <mi>G</mi>
-                                <mn>1</mn>
-                            </msub>
-                            <mo>&#x027F6;</mo>
-                        </mtd>
-                        <mtd>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                        </mtd>
-                        <mtd>
-                            <mi>y</mi>
-                            <mo>,</mo>
-                            <mi>w</mi>
-                            <mo>&#x02208;</mo>
-                            <msubsup>
-                                <mi>&#x02124;</mi>
-                                <mi>q</mi>
-                                <mo>*</mo>
-                            </msubsup>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                        </mtd>
-                        <mtd>
-                            <mi>A</mi>
-                            <msub>
-                                <mi>G</mi>
-                                <mn>1</mn>
-                            </msub>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <msub>
-                                <mi>H</mi>
-                                <mn>1</mn>
-                            </msub>
-                            <mrow>
-                                <mo form="prefix">(</mo>
-                                <mi>I</mi>
-                                <mo>&#x02146;</mo>
-                                <mi>A</mi>
-                                <mo form="postfix">)</mo>
-                            </mrow>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                        </mtd>
-                        <mtd>
-                            <mi>B</mi>
-                            <msub>
-                                <mi>G</mi>
-                                <mn>2</mn>
-                            </msub>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <msub>
-                                <mi>H</mi>
-                                <mn>2</mn>
-                            </msub>
-                            <mrow>
-                                <mo form="prefix">(</mo>
-                                <mi>I</mi>
-                                <mo>&#x02146;</mo>
-                                <mi>B</mi>
-                                <mo form="postfix">)</mo>
-                            </mrow>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                        </mtd>
-                        <mtd>
-                            <mi>P</mi>
-                            <mi>b</mi>
-                            <msub>
-                                <mi>G</mi>
-                                <mn>2</mn>
-                            </msub>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <mi>y</mi>
-                            <mo>&#x022C5;</mo>
-                            <mi>B</mi>
-                            <msub>
-                                <mi>G</mi>
-                                <mn>2</mn>
-                            </msub>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                        </mtd>
-                        <mtd>
-                            <mi>P</mi>
-                            <mi>g</mi>
-                            <msub>
-                                <mi>G</mi>
-                                <mn>1</mn>
-                            </msub>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <mi>w</mi>
-                            <mo>&#x022C5;</mo>
-                            <mi>A</mi>
-                            <msub>
-                                <mi>G</mi>
-                                <mn>1</mn>
-                            </msub>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                        </mtd>
-                        <mtd>
-                            <mtext>pia</mtext>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <msub>
-                                <mi>H</mi>
-                                <mi>q</mi>
-                            </msub>
-                            <mrow>
-                                <mo form="prefix">(</mo>
-                                <mi>P</mi>
-                                <mi>a</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>1</mn>
-                                </msub>
-                                <mo>&#x02016;</mo>
-                                <mi>P</mi>
-                                <mi>b</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>2</mn>
-                                </msub>
-                                <mo>&#x02016;</mo>
-                                <mi>P</mi>
-                                <mi>g</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>1</mn>
-                                </msub>
-                                <mo>&#x02016;</mo>
-                                <mi>I</mi>
-                                <mo>&#x02146;</mo>
-                                <mi>B</mi>
-                                <mo form="postfix">)</mo>
-                            </mrow>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                        </mtd>
-                        <mtd>
-                            <mtext>pib</mtext>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <msub>
-                                <mi>H</mi>
-                                <mi>q</mi>
-                            </msub>
-                            <mrow>
-                                <mo form="prefix">(</mo>
-                                <mi>P</mi>
-                                <mi>b</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>2</mn>
-                                </msub>
-                                <mo>&#x02016;</mo>
-                                <mi>P</mi>
-                                <mi>a</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>1</mn>
-                                </msub>
-                                <mo>&#x02016;</mo>
-                                <mi>P</mi>
-                                <mi>g</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>1</mn>
-                                </msub>
-                                <mo>&#x02016;</mo>
-                                <mi>I</mi>
-                                <mo>&#x02146;</mo>
-                                <mi>A</mi>
-                                <mo form="postfix">)</mo>
-                            </mrow>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                        </mtd>
-                        <mtd>
-                            <mi>k</mi>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <mi>e</mi>
-                            <mrow>
-                                <mo form="prefix">(</mo>
-                                <mtext>pia</mtext>
-                                <mo>&#x022C5;</mo>
-                                <mi>A</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>1</mn>
-                                </msub>
-                                <mo>+</mo>
-                                <mi>P</mi>
-                                <mi>a</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>1</mn>
-                                </msub>
-                                <mo>,</mo>
-                                <mo form="prefix">(</mo>
-                                <mi>y</mi>
-                                <mo>+</mo>
-                                <mtext>pib</mtext>
-                                <mo form="postfix">)</mo>
-                                <mo>&#x022EF;</mo>
-                                <mo>&#x022C5;</mo>
-                                <mi>B</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>2</mn>
-                                </msub>
-                                <mo form="postfix">)</mo>
-                            </mrow>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                        </mtd>
-                        <mtd>
-                            <mi>K</mi>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <mi>H</mi>
-                            <mrow>
-                                <mo form="prefix">(</mo>
-                                <mi>k</mi>
-                                <mo>,</mo>
-                                <mi>w</mi>
-                                <mo>&#x022C5;</mo>
-                                <mi>P</mi>
-                                <mi>a</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>1</mn>
-                                </msub>
-                                <mo form="postfix">)</mo>
-                            </mrow>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                        </mtd>
-                        <mtd>
-                            <mo>&#x027F5;</mo>
-                            <mi>I</mi>
-                            <mo>&#x02146;</mo>
-                            <mi>B</mi>
-                            <mo>,</mo>
-                            <mi>P</mi>
-                            <mi>g</mi>
-                            <msub>
-                                <mi>G</mi>
-                                <mn>1</mn>
-                            </msub>
-                            <mo>,</mo>
-                            <mi>P</mi>
-                            <mi>b</mi>
-                            <msub>
-                                <mi>G</mi>
-                                <mn>2</mn>
-                            </msub>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                            <mi>B</mi>
-                            <msub>
-                                <mi>G</mi>
-                                <mn>2</mn>
-                            </msub>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <msub>
-                                <mi>H</mi>
-                                <mn>2</mn>
-                            </msub>
-                            <mrow>
-                                <mo form="prefix">(</mo>
-                                <mi>I</mi>
-                                <mo>&#x02146;</mo>
-                                <mi>B</mi>
-                                <mo form="postfix">)</mo>
-                            </mrow>
-                        </mtd>
-                        <mtd>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                            <mtext>pia</mtext>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <msub>
-                                <mi>H</mi>
-                                <mi>q</mi>
-                            </msub>
-                            <mrow>
-                                <mo form="prefix">(</mo>
-                                <mi>P</mi>
-                                <mi>a</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>1</mn>
-                                </msub>
-                                <mo>&#x02016;</mo>
-                                <mi>P</mi>
-                                <mi>b</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>2</mn>
-                                </msub>
-                                <mo>&#x02016;</mo>
-                                <mi>P</mi>
-                                <mi>g</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>1</mn>
-                                </msub>
-                                <mo>&#x02016;</mo>
-                                <mi>I</mi>
-                                <mo>&#x02146;</mo>
-                                <mi>B</mi>
-                                <mo form="postfix">)</mo>
-                            </mrow>
-                        </mtd>
-                        <mtd>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                            <mtext>pib</mtext>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <msub>
-                                <mi>H</mi>
-                                <mi>q</mi>
-                            </msub>
-                            <mrow>
-                                <mo form="prefix">(</mo>
-                                <mi>P</mi>
-                                <mi>b</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>2</mn>
-                                </msub>
-                                <mo>&#x02016;</mo>
-                                <mi>P</mi>
-                                <mi>a</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>1</mn>
-                                </msub>
-                                <mo>&#x02016;</mo>
-                                <mi>P</mi>
-                                <mi>g</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>1</mn>
-                                </msub>
-                                <mo>&#x02016;</mo>
-                                <mi>I</mi>
-                                <mo>&#x02146;</mo>
-                                <mi>A</mi>
-                                <mo form="postfix">)</mo>
-                            </mrow>
-                        </mtd>
-                        <mtd>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                            <mi>k</mi>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <mi>e</mi>
-                            <mrow>
-                                <mo form="prefix">(</mo>
-                                <mo form="prefix">(</mo>
-                                <mi>x</mi>
-                                <mo>+</mo>
-                                <mi>p</mi>
-                                <mi>i</mi>
-                                <mi>a</mi>
-                                <mo form="postfix">)</mo>
-                                <mo>&#x022EF;</mo>
-                                <mo>&#x022C5;</mo>
-                                <mi>A</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>1</mn>
-                                </msub>
-                                <mo>,</mo>
-                                <mtext>pib</mtext>
-                                <mo>&#x022C5;</mo>
-                                <mi>B</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>2</mn>
-                                </msub>
-                                <mo>+</mo>
-                                <mi>P</mi>
-                                <mi>b</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>2</mn>
-                                </msub>
-                                <mo form="postfix">)</mo>
-                            </mrow>
-                        </mtd>
-                        <mtd>
-                        </mtd>
-                    </mtr>
-                    <mtr>
-                        <mtd>
-                            <mi>K</mi>
-                            <mo>:</mo>
-                            <mo>=</mo>
-                            <mi>H</mi>
-                            <mrow>
-                                <mo form="prefix">(</mo>
-                                <mi>k</mi>
-                                <mo>,</mo>
-                                <mi>x</mi>
-                                <mo>&#x022C5;</mo>
-                                <mi>P</mi>
-                                <mi>g</mi>
-                                <msub>
-                                    <mi>G</mi>
-                                    <mn>1</mn>
-                                </msub>
-                                <mo form="postfix">)</mo>
-                            </mrow>
-                        </mtd>
-                        <mtd>
-                        </mtd>
-                    </mtr>
-                </mtable>
-            </mtd>
-        </mtr>
-    </mtable>
-    </math>
-    </html>
-</figure>
-<figure>
-  <caption><strong>Figure 4.</strong> Chow-Choo Protocol</caption>
-</figure>
-<hr>
-<p><strong>Notes on Chow-Choo Protocol:</strong></p>
-<ul>
-<li>\( G_1 \): a \( r \)-order cyclic subgroup of \( E(F_p) \).</li>
-<li>\( G_2 \): a subgroup of \( E(F_{p^k}) \), where \( k \) is the embedding degree of the Curve.</li>
-<li>\( H1 \): Maps string value to a point on the curve in \( G_1 \).</li>
-<li>\( H2 \): Maps string value to a point on the curve in \( G_2 \).</li>
-<li>\( Hq \): Hashes inputs to an integer modulo the curve order \( q \).When run in the simple SIDH</li>
-<li>H(): Hash function.</li>
-<li>\( || \): denotes the concatenation of messages.</li>
-</ul>
-<hr>
-<h3><a class="anchor" aria-hidden="true" id="secret-revocation"></a><a href="#secret-revocation" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Secret Revocation</h3>
-<p>We introduce Time Permits to handle the revocation issue. Normally in Identity-Based Encryption the problem of client revocation is solved by date-stamping identities so that the private key issued for an identity becomes useless once the time period expires. Now a new private key must be issued, and we will simply not issue one to a revoked client.</p>
-<p>Milagro achieves a much more immediate revocation capability through the use of Time Permits. The D-TA that is controlled by the application owner is envisioned to be the controlling D-TA to issue Time Permits at the point where a client needs to authenticate to a server, or create an authenticated key agreement between client and server or peer to peer.</p>
-<p>The idea is that the server includes an explicitly described time slot in its construction of Alice's hashed identity. Unless Alice has a corresponding &quot;Time permit&quot; for the same time slot, she cannot complete the protocol.</p>
-<p>In the protocol above we instead calculate \( H(ID_a) + H_T(T_i|ID_a) \) on both sides of the protocol where \( T_i \) is a textual description of the \( i \)-th time slot and \( H_T(.) \) is a hash function distinct from \( H(.) \).</p>
-<p>For the protocol to work correctly Alice must be issued by the Trusted Authority with a permit \( s.H_T(T_i|ID_a) \) which gets added to her combined PIN-plus-token secret \( s.H(ID_a) \).</p>
-<p>Observe that the permit is of no use to any other party, and hence can be issued publicly, uploaded to a public cloud data store (AWS S3), or delivered via the server directly.</p>
-<p>A proof of security for this idea in the context of Boneh and Franklin IBE can be found in Tseng<sup class="footnote-ref"><a href="#fn6" id="fnref6">[6]</a></sup> et al.</p>
-<hr>
-<h3><a class="anchor" aria-hidden="true" id="bls-subgroup-multi-signatures"></a><a href="#bls-subgroup-multi-signatures" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>BLS Subgroup Multi-Signatures</h3>
-<p>Dan Boneh, Ben Lynn and Hovav Schacham introduced their paper entitled &quot;Short Signatures from the Weil Pairing&quot; in 2001<sup class="footnote-ref"><a href="#fn4" id="fnref4:1">[4]</a></sup>. The paper described a short signature scheme based on the computational Diffie-Hellman assumption on certain elliptic and hyper-elliptic curves.</p>
-<p>In a simple instantiation, given a secret key \( sk \), a public key \( p k=g^{S k} \), a message \( m \), a hashing-into-the-curve function \( H \), and a bilinear pairing \( e \):</p>
-<ul>
-<li>Key Generation: \( sk \) is a random integer over the field, \( p k=g^{S k} \)</li>
-<li>Signature: \( S=H(m)^{s k} \)</li>
-<li>Verify: \( e(H(m), p k)=e(S, g) \)</li>
-</ul>
-<p>Biliniarity is on display as the signature</p>
-<p>$$ \begin{array}{c}{e(H(m), p k)=e\left(H(m), g^{s k}\right)=e(H(m), g)^{s k}=} \ {=e\left(H(m)^{s k}, g\right)=e(S, g)}\end{array} $$</p>
-<p>but is also unique and deterministic, something missing from ECDSA.</p>
-<p>In June of 2018 Dan Boneh, Manu Drijvers and Gregory Neven released research that constructs the first practical, short accountable-subgroup multi-signature (ASM) scheme based on BLS signatures<sup class="footnote-ref"><a href="#fn7" id="fnref7">[7]</a></sup>.</p>
-<p>An ASM scheme enables any subset \( S \) of a set of \( n \) parties to sign a message \( m \) so that a valid signature discloses which subset generated the signature (hence the subset \( S \) is accountable for signing \( m \)).</p>
-<p>In addition to the ASM scheme, Milagro exploits a unique property of BLS signatures: Signing Keys can be split using Shamir's Secret Sharing<sup class="footnote-ref"><a href="#fn8" id="fnref8">[8]</a></sup> in which the 'shares' of the keys, when distributed to signers, themselves become signing keys. By using a 'key splitter' and 'signature aggregator' role who also performs the Shamir Secret Sharing (SSS) dealer function, several benefits emerge.</p>
-<p>Thresholds can be set on the distribution of key shares just as in a normal SSS routine. So once the shares of the original signing key are distributed, the original signing key can be securely deleted, and is never re-created again. Instead, signatures derived from the shares of the original signing key are created. Again, the properties of BLS enable these shares of signature keys to be themselves used a signature keys. The object of the exercise is for the signature aggregator, who is collecting the signatures created from these shares, to complete the threshold and achieve the signature that the original signature would have created, which can be validated by its original public key component.</p>
-<p>In other words, if the aggregator takes m-of-n of these signature shares, and perform the same polynomial interpolation as one would usually do with the secret shares, you’ll recover a complete signature which is identical to what would have been created if the original complete private key would have been used.</p>
-<p>In this context, signing is a single round protocol and is non-interactive.</p>
-<hr>
-<h3><a class="anchor" aria-hidden="true" id="supersingular-isogeny-key-encapsulation-sike"></a><a href="#supersingular-isogeny-key-encapsulation-sike" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Supersingular Isogeny Key Encapsulation (SIKE)</h3>
-<p>A key encapsulation mechanism (KEM) is a set of three algorithms.</p>
-<ul>
-<li>key generation (KeyGen)</li>
-<li>encapsulation (Encaps)</li>
-<li>decapsulation (Decaps)</li>
-</ul>
-<p>and a defined key space, where</p>
-<ul>
-<li>KeyGen(): returns a public and a secret key \( (pk, sk) \).</li>
-<li>Encaps\( (pk) \): takes pk as input and outputs ciphertext \( c \) and a key \( K \) from the key space.</li>
-<li>Decaps\( (sk, c) \): takes \( sk \) and \( c \) as input, and returns a key \( K \) or ERROR. \( K \) is called the session key.</li>
-</ul>
-<p>SIKE uses Hofheinz transformation on SIDH to achieve CCA security. Let \( p=2^{e_{A}} 3^{e_{3}}-1 \), and let \( E \) be a supersingular elliptic curve defined over a field of characteristic \( p \). \( E \) can also be defined over \( \mathbb{F}_{p^{2}} \) up to its isomorphism. An isogeny \( \phi : E \rightarrow E^{\prime} \) is a non-constant map from \( E \) to \( E^{\prime} \) which translates the identity into the identity.</p>
-<p>An isogeny map is defined by its degree and kernel. The degree of an isogeny is its degree as morphism. An isogeny with degree \( \ell \) map is called \( \ell \)-isogeny. Let \( G \) be a subgroup of points on \( E \) which contains \( \ell \) + 1 cyclic subgroups of order \( \ell \). This subgroup is the torsion group \( E[\ell] \) and each element of this group is corresponding to an isogeny of degree \( \ell \); accordingly, an isogeny also can be identified by \( G \), i.e., the kernel of isogeny.</p>
-<p>This section provides a brief presentation of the SIKE protocol. We refer readers to <sup class="footnote-ref"><a href="#fn9" id="fnref9">[9]</a></sup> and <sup class="footnote-ref"><a href="#fn5" id="fnref5:1">[5]</a></sup> for more detailed explanation of the supersignular isogeny problem and the base key-exchange protocol which the SIKE is constructed upon.</p>
-<hr>
-
-    <div class="admonition admonition-note">
-      <div class="admonition-heading">
-        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="16" viewBox="0 0 14 16"><path fill-rule="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"/></svg></div>  See an error in this documentation?</h5>
-      </div>
-      <div class="admonition-content">
-    <p>Submit a pull request on the development branch of <a href="https://github.com/apache/incubator-milagro">Milagro Website Repo</a>.</p>
-</div></div><!--
-Supported admonition types are: caution, note, important, tip, warning.
---><hr class="footnotes-sep">
-<section class="footnotes">
-<ol class="footnotes-list">
-<li id="fn1"  class="footnote-item"><p><a href="https://eprint.iacr.org/2002/164">M-Pin protocol</a> <a href="#fnref1" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn2"  class="footnote-item"><p><a href="https://eprint.iacr.org/2015/576">The Carnac protocol -- or how to read the contents of a sealed envelope</a> <a href="#fnref2" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn3"  class="footnote-item"><p><a href="https://eprint.iacr.org/2007/018.pdf">Strongly-Secure Identity-based Key Agreement and Anonymous Extension</a> <a href="#fnref3" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn4"  class="footnote-item"><p><a href="https://www.iacr.org/archive/asiacrypt2001/22480516.pdf">Short Signatures from the Weil Pairing</a> <a href="#fnref4" class="footnote-backref">↩</a> <a href="#fnref4:1" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn5"  class="footnote-item"><p><a href="https://sike.org/">Supersingular isogeny key encapsulation - NIST Submission</a> <a href="#fnref5" class="footnote-backref">↩</a> <a href="#fnref5:1" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn6"  class="footnote-item"><p><a href="https://reader.elsevier.com/reader/sd/pii/S2213020915000592?token=5C2E08C17803B9549FB79F3A91A1ED2382360D3E840087C8C065BD06EFCABB55C4A5A300566388A2920786DCC63E631E">A brief review of revocable ID-based public key cryptosystem</a> <a href="#fnref6" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn7"  class="footnote-item"><p><a href="https://eprint.iacr.org/2018/483">Compact Multi-Signatures for Smaller Blockchains</a> <a href="#fnref7" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn8"  class="footnote-item"><p><a href="https://cs.jhu.edu/~sdoshi/crypto/papers/shamirturing.pdf">How to Share a Secret</a> <a href="#fnref8" class="footnote-backref">↩</a></p>
-</li>
-<li id="fn9"  class="footnote-item"><p><a href="https://eprint.iacr.org/2011/506.pdf">Towards quantum-resistant cryptosystems from supersingular elliptic curve isogenies</a> <a href="#fnref9" class="footnote-backref">↩</a></p>
-</li>
-</ol>
-</section>
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/milagro-crypto"><span class="arrow-prev">← </span><span>Milagro Crypto</span></a><a class="docs-next button" href="/docs/milagro-design"><span>Milagro Design</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#m-pin-protocol---introduction">M-Pin Protocol - Introduction</a></li><li><a href="#chow-choo-protocol---introduction">Chow-Choo Protocol - Introduction</a></li><li><a href="#bls-signatures---introduction">BLS Signatures - Introduction</a></li><li><a href="#supersingular-isogeny-key-encapsulation---introduction">Supersingular Isogeny Key Encapsulation - Introduction</a></li><li><a href="#protocols-in-depth">Protocols In Depth</a><ul class="toc-headings"><li><a href="#m-pin-1-pass">M-Pin 1-Pass</a></li><li><a href="#m-pin-2-pass">M-Pin 2-Pass</a></li><li><a href="#m-pin-full">M-Pin FULL</a></li><li><a href="#chow-choo-protocol">Chow-Choo Protocol</a></li><li><a href="#secret-revocation">Secret Revocation</a></li><li><a href="#bls-subgroup-multi-signatures">BLS Subgroup Multi-Signatures</a></li><li><a href="#supersingular-isogeny-key-encapsulation-sike">Supersingular Isogeny Key Encapsulation (SIKE)</a></li></ul></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/milagro-intro">About Milagro</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/milagro-design">Milagro Design</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/amcl-overview">AMCL Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">About Milagro</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">Milagro Protocols</span><meta itemprop="position" content="2"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Milagro Protocols</h1></header><p>The Apache Milagro crypto libraries contain an (almost) overwhelming choice of algorithms and cryptographic primitives for robust and rapid application development. This section focuses specifically on a few protocols that are used extensively as key building blocks within the Milagro Zero-Knowledge Proof Multi-Factor Authentication (ZKP-MFA) server and clients, and Milagro Decentralized Trust Authority (D-TA) applications. Both applications implement these protocols using the Milagro crypto libraries.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="m-pin-protocol---introduction">M-Pin Protocol - Introduction<a class="hash-link" href="#m-pin-protocol---introduction" title="Direct link to heading">​</a></h2><p>The genesis of the M-Pin Protocol was first put forward in a research paper by <a href="https://scholar.google.com/citations?user=GsM-aeEAAAAJ&amp;hl=en" target="_blank" rel="noopener noreferrer">Dr. Michael Scott</a> in 2002<sup id="fnref-first"><a href="#fn-first" class="footnote-ref">first</a></sup>.</p><p>The M-Pin Protocol has been iterated on several times over the years since, to develop three distinct modes, which will be explored in the following sections.</p><p>Because of the characteristics that M-Pin inherits from the four techniques above, the M-Pin Protocol and its variants are able to deliver:</p><ul><li>Multi-factor authentication (MFA) using Zero Knowledge Proof</li><li>Authenticated Key Agreement</li><li>Distribution, or splitting, of Trust Authorities</li><li><a href="https://en.wikipedia.org/wiki/Subliminal_channel" target="_blank" rel="noopener noreferrer">Subliminal Channel Communication</a><sup id="fnref-second"><a href="#fn-second" class="footnote-ref">second</a></sup></li></ul><p>The three modes of operation of the M-Pin Protocol are as follows:</p><ul><li><strong>M-Pin 1-pass</strong>: Client to server authentication via digital signature, this mode implements a <em>non-interactive</em> zero knowledge proof and is resistant to <a href="https://en.wikipedia.org/wiki/Man-in-the-middle_attack" target="_blank" rel="noopener noreferrer">MITM (man in the middle)</a> attacks.</li><li><strong>M-Pin 2-pass</strong>: Client to server authentication via a <em>interactive</em> zero knowledge proof, resistant to <a href="https://en.wikipedia.org/wiki/Man-in-the-middle_attack" target="_blank" rel="noopener noreferrer">MITM</a> and <a href="https://kcitls.org" target="_blank" rel="noopener noreferrer">KCI (Key Compromise Impersonation)</a> attacks.</li><li><strong>M-Pin FULL</strong>: Mutual client to server authentication via a <em>interactive</em> zero knowledge proof, resistant to MITM and KCI attacks and able to drive an Authenticated <a href="https://en.wikipedia.org/wiki/Key-agreement_protocol" target="_blank" rel="noopener noreferrer">Key Agreement</a> between client and server, resulting in 128 bit shared secret key.</li></ul><p>Note that the M-Pin Full Authenticated Key Agreement possesses the quality of <a href="https://en.wikipedia.org/wiki/Forward_secrecy" target="_blank" rel="noopener noreferrer">perfect forward secrecy (PFS)</a>, meaning, even if the client and server long term keys are compromised, the past session keys (used to encrypt TLS traffic, for example) are not compromised.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="chow-choo-protocol---introduction">Chow-Choo Protocol - Introduction<a class="hash-link" href="#chow-choo-protocol---introduction" title="Direct link to heading">​</a></h2><p>The Chow-Choo Protocol was developed by Sherman S.M. Chow and Kim-Kwang Raymond Choo and published in 2007 via a research paper titled Strongly-Secure Identity-based Key Agreement<sup id="fnref-third"><a href="#fn-third" class="footnote-ref">third</a></sup>.  The Chow-Choo Protocol can be technically described as an identity-based key agreement protocol.</p><p>The Chow-Choo Protocol is of these classifications and exploits the features of:</p><ul><li>Elliptic Curve Cryptography</li><li>Pairing Based Cryptography</li><li>Identity Based Encryption</li></ul><p>Because of the characteristics that Chow-Choo inherits from the three techniques above, the Chow-Choo Protocol can deliver:</p><ul><li>Authenticated Key Agreement</li><li>Distribution, or splitting, of Trust Authorities</li></ul><p>Note that the Chow-Choo Protocol is not a Zero Knowledge Proof protocol.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="bls-signatures---introduction">BLS Signatures - Introduction<a class="hash-link" href="#bls-signatures---introduction" title="Direct link to heading">​</a></h2><p>The BLS signature (Boneh-Lynn-Schacham) scheme<sup id="fnref-fourth"><a href="#fn-fourth" class="footnote-ref">fourth</a></sup> uses a bilinear pairing for verification, and signatures are elements of an elliptic curve group. Working in an elliptic curve group provides some defense against index calculus attacks (with the caveat that such attacks are still possible in the target group <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>G</mi><mi mathvariant="normal">_</mi><mi>T</mi></mrow><annotation encoding="application/x-tex">G\_{T}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.9933em;vertical-align:-0.31em"></span><span class="mord mathnormal">G</span><span class="mord" style="margin-right:0.02778em">_</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.13889em">T</span></span></span></span></span></span> of the pairing), allowing shorter signatures than other systems for similar levels of security. </p><p>BLS signatures have become the subject of much work as they are seen as being a possible way forward to solve privacy issues within cryptocurrencies through a process of signature aggregation. Apache Milagro uses signature aggregation and key splitting, and further aggregation of signatures from those split keys, as a key component of the Milagro Custody Node digital asset safekeeping protocol.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="supersingular-isogeny-key-encapsulation---introduction">Supersingular Isogeny Key Encapsulation - Introduction<a class="hash-link" href="#supersingular-isogeny-key-encapsulation---introduction" title="Direct link to heading">​</a></h2><p>Supersingular isogeny Diffie–Hellman key exchange (SIDH) and the key encapsulation protocol, SIKE<sup id="fnref-fifth"><a href="#fn-fifth" class="footnote-ref">fifth</a></sup> <!-- -->(<!-- -->derived from SIDH), are post-quantum cryptographic algorithms used to establish a secret key between two parties over an otherwise insecure communications channel. SIKE boasts one of the smallest key sizes of all post-quantum key encapsulations; with compression, SIKE uses 2688-bit public keys at a 128-bit quantum security level. </p><p>SIKE also distinguishes itself from similar systems such as NTRU and Ring-LWE by supporting perfect forward secrecy, a property that prevents compromised long-term keys from compromising the confidentiality of old communication sessions. These properties make SIKE a natural candidate to replace Diffie–Hellman (DHE and elliptic curve Diffie–Hellman (ECDHE), which are widely used in Internet communication.</p><p>Since it is the only post-quantum cryptography protocol which is constructed on elliptic curves, hybrid cryptography protocols can be derived from SIKE and classical elliptic curve cryptography (ECC) to make the transition towards post-quantum cryptography more convenient and practical.</p><p>Milagro Custody Node implements SIKE for key encapsulation within Milagro&#x27;s encrypted envelope format.</p><hr><table><thead><tr><th>Protocols</th><th>Use Cases</th></tr></thead><tbody><tr><td>M-Pin 1-Pass</td><td>Digital signature authentication in battery or bandwidth constrained environments such as IoT devices, embedded applications and mobile apps. <br>This should be considered the default implementation for client to server authentication suitable for almost all use cases.</td></tr><tr><td>M-Pin 1-Pass + <br>M-Pin 2-Pass</td><td>Digital signature and client to server authentication in smartphones apps, desktop browsers and software applications.</td></tr><tr><td>M-Pin 2-Pass</td><td>Client to server authentication in smartphone apps, desktop browsers and software applications.</td></tr><tr><td>M-Pin FULL</td><td>Mutual client and server authentication with authenticated key agreement for use in smartphone apps, hardware and software applications. <br>Authenticated Key Agreement with PFS can be used as the basis for TLS sessions between clients and servers.</td></tr><tr><td>Chow-Choo</td><td>Mutual peer to peer authentication with authenticated key agreement for use in smartphone apps, hardware and software applications. <br>Authenticated Key Agreement with PFS can be used as the basis for TLS sessions between clients and servers and peer to peer.</td></tr><tr><td>BLS Signing + <br>Key Splitting + <br>Signature Aggregation</td><td>A simple approach for splitting keys and aggregating many BLS signatures (from the shares of keys acting as signing keys) on a common message. Public keys are not needed for verifying the multi-signature. <br>An important property of the construction is that the scheme is secure against a rogue public-key attack without requiring users to prove knowledge of their secret keys.</td></tr><tr><td>SIKE (Key Encapsulation)</td><td>SIKE is a family of post-quantum key encapsulation mechanisms based on the Supersingular Isogeny Diffie-Hellman (SIDH) key exchange protocol. <br>The algorithms use arithmetic operations on elliptic curves defined over finite fields and compute maps, so-called isogenies, between such curves. <br>SIKE can also delivery perfect forward secrecy.</td></tr></tbody></table><hr><h2 class="anchor anchorWithStickyNavbar_LWe7" id="protocols-in-depth">Protocols In Depth<a class="hash-link" href="#protocols-in-depth" title="Direct link to heading">​</a></h2><h3 class="anchor anchorWithStickyNavbar_LWe7" id="m-pin-1-pass">M-Pin 1-Pass<a class="hash-link" href="#m-pin-1-pass" title="Direct link to heading">​</a></h3><p>As opposed to Chow-Choo, which can be used in a client to server as well as a peer to peer setting, M-Pin is strictly a client-server protocol.</p><p>To embellish the security of the client-server protocol, it is important that client and server secrets should be kept distinct.</p><p>A simple way to do this is to exploit the structure of a Type-3 pairing and put client secrets in <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>G</mi><mn>1</mn></msub></mrow><annotation encoding="application/x-tex">G_1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal">G</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></span> and the server secret in <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>G</mi><mn>2</mn></msub></mrow><annotation encoding="application/x-tex">G_2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal">G</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></span> as previously noted in the preceding section.</p><p>For a Type-3 pairing there is assumed to be no computable isomorphism between these groups, even though both are of the same order.</p><p>In the original implementation, the client was supplied with a challenge by the server as part of the second step within the protocol, after the first step whereby the client announced her identity to the server.</p><p>In a later proposal, it was realised that an M-Pin 1-Pass Protocol could be obtained if the client itself derived the challenge as <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>y</mi></mrow><annotation encoding="application/x-tex">y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em"></span><span class="mord mathnormal" style="margin-right:0.03588em">y</span></span></span></span></span> as <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>y</mi><mo>=</mo><mi>H</mi><mo stretchy="false">(</mo><mi>U</mi><mi mathvariant="normal">∣</mi><mi>T</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">y=H(U|T)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em"></span><span class="mord mathnormal" style="margin-right:0.03588em">y</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.08125em">H</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.10903em">U</span><span class="mord">∣</span><span class="mord mathnormal" style="margin-right:0.13889em">T</span><span class="mclose">)</span></span></span></span></span> where <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>T</mi></mrow><annotation encoding="application/x-tex">T</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.13889em">T</span></span></span></span></span> is a time-stamp transmitted by the Client along her claimed identity, <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>U</mi></mrow><annotation encoding="application/x-tex">U</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.10903em">U</span></span></span></span></span> and <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>V</mi></mrow><annotation encoding="application/x-tex">V</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.22222em">V</span></span></span></span></span>.</p><p>The protocol could then be reduced in an obvious way to a secure 1-pass protocol. However, this assumes that the Server checks the accuracy of the time-stamp before completing the protocol.</p><p>This all works thanks to the pairing function <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>e</mi><mo stretchy="false">(</mo><mi mathvariant="normal">.</mi><mo separator="true">,</mo><mi mathvariant="normal">.</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">e(.,.)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal">e</span><span class="mopen">(</span><span class="mord">.</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord">.</span><span class="mclose">)</span></span></span></span></span> and its remarkable bilinearity property <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>e</mi><mo stretchy="false">(</mo><mi>a</mi><mi>P</mi><mo separator="true">,</mo><mi>Q</mi><mo stretchy="false">)</mo><mo>=</mo><mi>e</mi><mo stretchy="false">(</mo><mi>P</mi><mo separator="true">,</mo><mi>a</mi><mi>Q</mi><mo stretchy="false">)</mo><mo>=</mo><mi>e</mi><mo stretchy="false">(</mo><mi>P</mi><mo separator="true">,</mo><mi>Q</mi><msup><mo stretchy="false">)</mo><mi>a</mi></msup></mrow><annotation encoding="application/x-tex">e(aP,Q) = e(P,aQ) = e(P,Q)^{a}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal">e</span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mord mathnormal" style="margin-right:0.13889em">P</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal">Q</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal">e</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.13889em">P</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal">a</span><span class="mord mathnormal">Q</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal">e</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.13889em">P</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal">Q</span><span class="mclose"><span class="mclose">)</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6644em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">a</span></span></span></span></span></span></span></span></span></span></span></span></span>.</p><hr><table><thead><tr><th align="center">Alice - identity <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>I</mi><msub><mi>D</mi><mi>a</mi></msub></mrow><annotation encoding="application/x-tex">ID_a</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord mathnormal" style="margin-right:0.07847em">I</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em">D</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em"><span style="top:-2.55em;margin-left:-0.0278em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">a</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></span></th><th align="center">Server</th></tr></thead><tbody><tr><td align="center">Generates random <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>&lt;</mo><mi>q</mi></mrow><annotation encoding="application/x-tex">x&lt;q</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5782em;vertical-align:-0.0391em"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em"></span><span class="mord mathnormal" style="margin-right:0.03588em">q</span></span></span></span></span></td><td align="center"></td></tr><tr><td align="center"><span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>A</mi><mo>=</mo><mi>H</mi><mo stretchy="false">(</mo><mi>I</mi><msub><mi>D</mi><mi>a</mi></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">A=H(ID_a)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal">A</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.08125em">H</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.07847em">I</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em">D</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em"><span style="top:-2.55em;margin-left:-0.0278em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">a</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></span></td><td align="center"></td></tr><tr><td align="center"><span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>U</mi><mo>=</mo><mi>x</mi><mi>A</mi></mrow><annotation encoding="application/x-tex">U=x{A}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.10903em">U</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal">x</span><span class="mord"><span class="mord mathnormal">A</span></span></span></span></span></span></td><td align="center"></td></tr><tr><td align="center"><span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>I</mi><msub><mi>D</mi><mi>a</mi></msub></mrow><annotation encoding="application/x-tex">ID_a</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord mathnormal" style="margin-right:0.07847em">I</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em">D</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em"><span style="top:-2.55em;margin-left:-0.0278em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">a</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></span>, <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>U</mi><mover accent="true"><mtext> </mtext><mo>˜</mo></mover></mrow><annotation encoding="application/x-tex">U\~~</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.10903em">U</span><span class="mord accent"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6679em"><span style="top:-3em"><span class="pstrut" style="height:3em"></span><span class="mspace nobreak"> </span></span><span style="top:-3em"><span class="pstrut" style="height:3em"></span><span class="accent-body" style="left:-0.25em"><span class="mord">˜</span></span></span></span></span></span></span></span></span></span></span></td><td align="center"></td></tr><tr><td align="center"><span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>y</mi><mo>=</mo><mi>H</mi><mo stretchy="false">(</mo><mi>U</mi></mrow><annotation encoding="application/x-tex">y=H(U</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em"></span><span class="mord mathnormal" style="margin-right:0.03588em">y</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.08125em">H</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.10903em">U</span></span></span></span></span> <!-- -->|<!-- --> <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>T</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">T)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.13889em">T</span><span class="mclose">)</span></span></span></span></span></td><td align="center"></td></tr><tr><td align="center"><span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>V</mi><mo>=</mo><mo>−</mo><mo stretchy="false">(</mo><mi>x</mi><mo>+</mo><mi>y</mi><mo stretchy="false">)</mo><mrow><mo stretchy="false">(</mo><mo stretchy="false">(</mo><mi>s</mi><mo>−</mo><mi>α</mi><mo stretchy="false">)</mo><mi>A</mi><mo>+</mo><mi>α</mi><mi>A</mi><mo stretchy="false">)</mo></mrow><mo>→</mo></mrow><annotation encoding="application/x-tex">V=-(x+y){((s-\alpha)A+\alpha A)} \rightarrow</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.22222em">V</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord">−</span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.03588em">y</span><span class="mclose">)</span><span class="mord"><span class="mopen">((</span><span class="mord mathnormal">s</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mord mathnormal" style="margin-right:0.0037em">α</span><span class="mclose">)</span><span class="mord mathnormal">A</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mord mathnormal" style="margin-right:0.0037em">α</span><span class="mord mathnormal">A</span><span class="mclose">)</span></span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">→</span></span></span></span></span></td><td align="center"></td></tr><tr><td align="center"></td><td align="center"><span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>A</mi><mo>=</mo><mi>H</mi><mo stretchy="false">(</mo><mi>I</mi><msub><mi>D</mi><mi>a</mi></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">A=H(ID_a)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal">A</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.08125em">H</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.07847em">I</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em">D</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em"><span style="top:-2.55em;margin-left:-0.0278em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">a</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></span></td></tr><tr><td align="center"></td><td align="center"><span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>g</mi><mo>=</mo><mi>e</mi><mo stretchy="false">(</mo><mi>V</mi><mo separator="true">,</mo><mi>Q</mi><mo stretchy="false">)</mo><mi mathvariant="normal">.</mi><mi>e</mi><mo stretchy="false">(</mo><mi>U</mi><mo>+</mo><mi>y</mi><mi>A</mi><mo separator="true">,</mo><mi>s</mi><mi>Q</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">g=e(V,Q).e(U+yA,sQ)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em"></span><span class="mord mathnormal" style="margin-right:0.03588em">g</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal">e</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.22222em">V</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal">Q</span><span class="mclose">)</span><span class="mord">.</span><span class="mord mathnormal">e</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.10903em">U</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.03588em">y</span><span class="mord mathnormal">A</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal">s</span><span class="mord mathnormal">Q</span><span class="mclose">)</span></span></span></span></span></td></tr><tr><td align="center"></td><td align="center">if <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>g</mi><mo mathvariant="normal">≠</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">g \ne 1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em"></span><span class="mord mathnormal" style="margin-right:0.03588em">g</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel"><span class="mrel"><span class="mord vbox"><span class="thinbox"><span class="rlap"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em"></span><span class="inner"><span class="mord"><span class="mrel"></span></span></span><span class="fix"></span></span></span></span></span><span class="mrel">=</span></span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.6444em"></span><span class="mord">1</span></span></span></span></span>, reject the connection</td></tr></tbody></table><figure><strong>Figure 1.</strong> M-Pin 1-Pass</figure><h3 class="anchor anchorWithStickyNavbar_LWe7" id="m-pin-2-pass">M-Pin 2-Pass<a class="hash-link" href="#m-pin-2-pass" title="Direct link to heading">​</a></h3><p>As you can see below in Fig 2., M-Pin in the two pass operation operates in a challenge (from the Server) to client, who responds to challenge. This implementation obviates the any risk of Key Compromise Impersonation attack vector, at the cost of of a full roundtrip.</p><hr><table><thead><tr><th align="center">Alice - identity <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>I</mi><msub><mi>D</mi><mi>a</mi></msub></mrow><annotation encoding="application/x-tex">ID_a</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord mathnormal" style="margin-right:0.07847em">I</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em">D</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em"><span style="top:-2.55em;margin-left:-0.0278em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">a</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></span></th><th align="center">Server</th></tr></thead><tbody><tr><td align="center">Generates random <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>&lt;</mo><mi>q</mi></mrow><annotation encoding="application/x-tex">x&lt;q</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5782em;vertical-align:-0.0391em"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em"></span><span class="mord mathnormal" style="margin-right:0.03588em">q</span></span></span></span></span></td><td align="center">Generates random <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>y</mi><mo>&lt;</mo><mi>q</mi></mrow><annotation encoding="application/x-tex">y&lt;q</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7335em;vertical-align:-0.1944em"></span><span class="mord mathnormal" style="margin-right:0.03588em">y</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em"></span><span class="mord mathnormal" style="margin-right:0.03588em">q</span></span></span></span></span></td></tr><tr><td align="center"><span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>A</mi><mo>=</mo><mi>H</mi><mo stretchy="false">(</mo><mi>I</mi><msub><mi>D</mi><mi>a</mi></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">A=H(ID_a)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal">A</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.08125em">H</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.07847em">I</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em">D</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em"><span style="top:-2.55em;margin-left:-0.0278em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">a</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></span></td><td align="center"></td></tr><tr><td align="center"><span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>U</mi><mo>=</mo><mi>x</mi><mi>A</mi></mrow><annotation encoding="application/x-tex">U=x{A}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.10903em">U</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal">x</span><span class="mord"><span class="mord mathnormal">A</span></span></span></span></span></span></td><td align="center"></td></tr><tr><td align="center"><span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>I</mi><msub><mi>D</mi><mi>a</mi></msub></mrow><annotation encoding="application/x-tex">ID_a</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord mathnormal" style="margin-right:0.07847em">I</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em">D</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em"><span style="top:-2.55em;margin-left:-0.0278em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">a</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></span>, <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>U</mi><mover accent="true"><mtext> </mtext><mo>˜</mo></mover><mo>→</mo></mrow><annotation encoding="application/x-tex">U\~~ \rightarrow</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.10903em">U</span><span class="mord accent"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6679em"><span style="top:-3em"><span class="pstrut" style="height:3em"></span><span class="mspace nobreak"> </span></span><span style="top:-3em"><span class="pstrut" style="height:3em"></span><span class="accent-body" style="left:-0.25em"><span class="mord">˜</span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">→</span></span></span></span></span></td><td align="center"></td></tr><tr><td align="center"></td><td align="center"><span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>←</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">\leftarrow y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.3669em"></span><span class="mrel">←</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em"></span><span class="mord mathnormal" style="margin-right:0.03588em">y</span></span></span></span></span></td></tr><tr><td align="center"><span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>V</mi><mo>=</mo><mo>−</mo><mo stretchy="false">(</mo><mi>x</mi><mo>+</mo><mi>y</mi><mo stretchy="false">)</mo><mrow><mo stretchy="false">(</mo><mo stretchy="false">(</mo><mi>s</mi><mo>−</mo><mi>α</mi><mo stretchy="false">)</mo><mi>A</mi><mo>+</mo><mi>α</mi><mi>A</mi><mo stretchy="false">)</mo></mrow><mo>→</mo></mrow><annotation encoding="application/x-tex">V=-(x+y){((s-\alpha)A+\alpha A)} \rightarrow</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.22222em">V</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord">−</span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.03588em">y</span><span class="mclose">)</span><span class="mord"><span class="mopen">((</span><span class="mord mathnormal">s</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mord mathnormal" style="margin-right:0.0037em">α</span><span class="mclose">)</span><span class="mord mathnormal">A</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mord mathnormal" style="margin-right:0.0037em">α</span><span class="mord mathnormal">A</span><span class="mclose">)</span></span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">→</span></span></span></span></span></td><td align="center"></td></tr><tr><td align="center"></td><td align="center"><span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>A</mi><mo>=</mo><mi>H</mi><mo stretchy="false">(</mo><mi>I</mi><msub><mi>D</mi><mi>a</mi></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">A=H(ID_a)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal">A</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.08125em">H</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.07847em">I</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em">D</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em"><span style="top:-2.55em;margin-left:-0.0278em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">a</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></span></td></tr><tr><td align="center"></td><td align="center"><span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>g</mi><mo>=</mo><mi>e</mi><mo stretchy="false">(</mo><mi>V</mi><mo separator="true">,</mo><mi>Q</mi><mo stretchy="false">)</mo><mi mathvariant="normal">.</mi><mi>e</mi><mo stretchy="false">(</mo><mi>U</mi><mo>+</mo><mi>y</mi><mi>A</mi><mo separator="true">,</mo><mi>s</mi><mi>Q</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">g=e(V,Q).e(U+yA,sQ)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em"></span><span class="mord mathnormal" style="margin-right:0.03588em">g</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal">e</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.22222em">V</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal">Q</span><span class="mclose">)</span><span class="mord">.</span><span class="mord mathnormal">e</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.10903em">U</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.03588em">y</span><span class="mord mathnormal">A</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal">s</span><span class="mord mathnormal">Q</span><span class="mclose">)</span></span></span></span></span></td></tr><tr><td align="center"></td><td align="center">if <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>g</mi><mo mathvariant="normal">≠</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">g \ne 1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em"></span><span class="mord mathnormal" style="margin-right:0.03588em">g</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel"><span class="mrel"><span class="mord vbox"><span class="thinbox"><span class="rlap"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em"></span><span class="inner"><span class="mord"><span class="mrel"></span></span></span><span class="fix"></span></span></span></span></span><span class="mrel">=</span></span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.6444em"></span><span class="mord">1</span></span></span></span></span>, reject the connection</td></tr></tbody></table><figure><strong>Figure 2.</strong> M-Pin 2-Pass</figure><h3 class="anchor anchorWithStickyNavbar_LWe7" id="m-pin-full">M-Pin FULL<a class="hash-link" href="#m-pin-full" title="Direct link to heading">​</a></h3><p>This more elaborate protocol not only replaces Username/Password, but replaces the functionality of digital certificates being utilised to drive key agreement for TLS or VPN protocols as well.</p><p>Our starting point is the M-Pin protocol as described above.</p><p>The idea is to run it first (to authenticate the client to the server), and then proceed to authenticate the server to the client via an authenticated key exchange, which also establishes the agreed key of 128 bits.</p><p>The first thing to note is that both the client and the server can already calculate a mutual authenticated encryption key!</p><p>This protocol requires another general hash function <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>H</mi><mi>g</mi></msub><mo stretchy="false">(</mo><mi mathvariant="normal">.</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">H_g(.)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0361em;vertical-align:-0.2861em"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.08125em">H</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em"><span style="top:-2.55em;margin-left:-0.0813em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em">g</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord">.</span><span class="mclose">)</span></span></span></span></span> which serializes, and hashes its input to a 256-bit value. Both sides can then extract a key from this value <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>K</mi></mrow><annotation encoding="application/x-tex">K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.07153em">K</span></span></span></span></span>.</p><p>It is left as a simple exercise for the reader to confirm that both client and server end up with the same key.</p><p>Note that since the first part of the protocol is just the original M-Pin protocol, all of its features and extensions still apply.</p><hr><table><thead><tr><th align="center">Alice - identity <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>I</mi><msub><mi>D</mi><mi>a</mi></msub></mrow><annotation encoding="application/x-tex">ID_a</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord mathnormal" style="margin-right:0.07847em">I</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em">D</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em"><span style="top:-2.55em;margin-left:-0.0278em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">a</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></span></th><th align="center">Server</th></tr></thead><tbody><tr><td align="center">Generates random <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mo>&lt;</mo><mi>q</mi></mrow><annotation encoding="application/x-tex">x&lt;q</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.5782em;vertical-align:-0.0391em"></span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em"></span><span class="mord mathnormal" style="margin-right:0.03588em">q</span></span></span></span></span></td><td align="center">Generates random <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>y</mi><mo>&lt;</mo><mi>q</mi></mrow><annotation encoding="application/x-tex">y&lt;q</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7335em;vertical-align:-0.1944em"></span><span class="mord mathnormal" style="margin-right:0.03588em">y</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">&lt;</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em"></span><span class="mord mathnormal" style="margin-right:0.03588em">q</span></span></span></span></span></td></tr><tr><td align="center"><span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>A</mi><mo>=</mo><mi>H</mi><mo stretchy="false">(</mo><mi>I</mi><msub><mi>D</mi><mi>a</mi></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">A=H(ID_a)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal">A</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.08125em">H</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.07847em">I</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em">D</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em"><span style="top:-2.55em;margin-left:-0.0278em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">a</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></span></td><td align="center"></td></tr><tr><td align="center"><span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>U</mi><mo>=</mo><mi>x</mi><mi>A</mi></mrow><annotation encoding="application/x-tex">U=x{A}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.10903em">U</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal">x</span><span class="mord"><span class="mord mathnormal">A</span></span></span></span></span></span></td><td align="center"></td></tr><tr><td align="center"><span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>I</mi><msub><mi>D</mi><mi>a</mi></msub></mrow><annotation encoding="application/x-tex">ID_a</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord mathnormal" style="margin-right:0.07847em">I</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em">D</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em"><span style="top:-2.55em;margin-left:-0.0278em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">a</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></span>, <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>U</mi><mover accent="true"><mtext> </mtext><mo>˜</mo></mover><mo>→</mo></mrow><annotation encoding="application/x-tex">U\~~ \rightarrow</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.10903em">U</span><span class="mord accent"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6679em"><span style="top:-3em"><span class="pstrut" style="height:3em"></span><span class="mspace nobreak"> </span></span><span style="top:-3em"><span class="pstrut" style="height:3em"></span><span class="accent-body" style="left:-0.25em"><span class="mord">˜</span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">→</span></span></span></span></span></td><td align="center"></td></tr><tr><td align="center"></td><td align="center"><span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>←</mo><mi>y</mi></mrow><annotation encoding="application/x-tex">\leftarrow y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.3669em"></span><span class="mrel">←</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em"></span><span class="mord mathnormal" style="margin-right:0.03588em">y</span></span></span></span></span></td></tr><tr><td align="center"><span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>V</mi><mo>=</mo><mo>−</mo><mo stretchy="false">(</mo><mi>x</mi><mo>+</mo><mi>y</mi><mo stretchy="false">)</mo><mrow><mo stretchy="false">(</mo><mo stretchy="false">(</mo><mi>s</mi><mo>−</mo><mi>α</mi><mo stretchy="false">)</mo><mi>A</mi><mo>+</mo><mi>α</mi><mi>A</mi><mo stretchy="false">)</mo></mrow><mo>→</mo></mrow><annotation encoding="application/x-tex">V=-(x+y){( (s-\alpha)A+\alpha A)} \rightarrow</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.22222em">V</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord">−</span><span class="mopen">(</span><span class="mord mathnormal">x</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.03588em">y</span><span class="mclose">)</span><span class="mord"><span class="mopen">((</span><span class="mord mathnormal">s</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mord mathnormal" style="margin-right:0.0037em">α</span><span class="mclose">)</span><span class="mord mathnormal">A</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mord mathnormal" style="margin-right:0.0037em">α</span><span class="mord mathnormal">A</span><span class="mclose">)</span></span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">→</span></span></span></span></span></td><td align="center"></td></tr><tr><td align="center"></td><td align="center"><span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>A</mi><mo>=</mo><mi>H</mi><mo stretchy="false">(</mo><mi>I</mi><msub><mi>D</mi><mi>a</mi></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">A=H(ID_a)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal">A</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.08125em">H</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.07847em">I</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em">D</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em"><span style="top:-2.55em;margin-left:-0.0278em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">a</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></span></td></tr><tr><td align="center"></td><td align="center"><span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>g</mi><mo>=</mo><mi>e</mi><mo stretchy="false">(</mo><mi>V</mi><mo separator="true">,</mo><mi>Q</mi><mo stretchy="false">)</mo><mi mathvariant="normal">.</mi><mi>e</mi><mo stretchy="false">(</mo><mi>U</mi><mo>+</mo><mi>y</mi><mi>A</mi><mo separator="true">,</mo><mi>s</mi><mi>Q</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">g=e(V,Q).e(U+yA,sQ)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em"></span><span class="mord mathnormal" style="margin-right:0.03588em">g</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal">e</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.22222em">V</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal">Q</span><span class="mclose">)</span><span class="mord">.</span><span class="mord mathnormal">e</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.10903em">U</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.03588em">y</span><span class="mord mathnormal">A</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal">s</span><span class="mord mathnormal">Q</span><span class="mclose">)</span></span></span></span></span></td></tr><tr><td align="center"></td><td align="center">if <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>g</mi><mo mathvariant="normal">≠</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">g \ne 1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em"></span><span class="mord mathnormal" style="margin-right:0.03588em">g</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel"><span class="mrel"><span class="mord vbox"><span class="thinbox"><span class="rlap"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em"></span><span class="inner"><span class="mord"><span class="mrel"></span></span></span><span class="fix"></span></span></span></span></span><span class="mrel">=</span></span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.6444em"></span><span class="mord">1</span></span></span></span></span>, reject the connection</td></tr><tr><td align="center"><span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>R</mi><mo>=</mo><mi>r</mi><mi>A</mi><mo>→</mo></mrow><annotation encoding="application/x-tex">R=r{A} \rightarrow</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.00773em">R</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.02778em">r</span><span class="mord"><span class="mord mathnormal">A</span></span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">→</span></span></span></span></span></td><td align="center"><span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo>←</mo><mi>W</mi><mo>=</mo><mi>w</mi><mi>A</mi></mrow><annotation encoding="application/x-tex">\leftarrow W=w{A}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.3669em"></span><span class="mrel">←</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.13889em">W</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.02691em">w</span><span class="mord"><span class="mord mathnormal">A</span></span></span></span></span></span></td></tr><tr><td align="center"><span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>h</mi><mo>=</mo><mi>H</mi><mo stretchy="false">(</mo><mi>A</mi><mo separator="true">,</mo><mi>U</mi><mo separator="true">,</mo><mi>y</mi><mo separator="true">,</mo><mi>V</mi><mo separator="true">,</mo><mi>R</mi><mo separator="true">,</mo><mi>W</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">h=H(A,U,y,V,R,W)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em"></span><span class="mord mathnormal">h</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.08125em">H</span><span class="mopen">(</span><span class="mord mathnormal">A</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal" style="margin-right:0.10903em">U</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal" style="margin-right:0.03588em">y</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal" style="margin-right:0.22222em">V</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal" style="margin-right:0.00773em">R</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal" style="margin-right:0.13889em">W</span><span class="mclose">)</span></span></span></span></span></td><td align="center"><span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>h</mi><mo>=</mo><mi>H</mi><mo stretchy="false">(</mo><mi>A</mi><mo separator="true">,</mo><mi>U</mi><mo separator="true">,</mo><mi>y</mi><mo separator="true">,</mo><mi>V</mi><mo separator="true">,</mo><mi>R</mi><mo separator="true">,</mo><mi>W</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">h=H(A,U,y,V,R,W)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em"></span><span class="mord mathnormal">h</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.08125em">H</span><span class="mopen">(</span><span class="mord mathnormal">A</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal" style="margin-right:0.10903em">U</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal" style="margin-right:0.03588em">y</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal" style="margin-right:0.22222em">V</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal" style="margin-right:0.00773em">R</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal" style="margin-right:0.13889em">W</span><span class="mclose">)</span></span></span></span></span></td></tr><tr><td align="center"><span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>K</mi><mo>=</mo><msub><mi>H</mi><mi>g</mi></msub><mo stretchy="false">(</mo><mo stretchy="false">(</mo><msub><mi>g</mi><mn>1</mn></msub><mi mathvariant="normal">.</mi><msup><msub><mi>g</mi><mn>2</mn></msub><mi>α</mi></msup><msup><mo stretchy="false">)</mo><mrow><mi>r</mi><mo>+</mo><mi>h</mi></mrow></msup><mspace linebreak="newline"></mspace></mrow><annotation encoding="application/x-tex">K=H_g( (g_1.{g_2}^\alpha)^{r+h} \\</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.07153em">K</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:1.1352em;vertical-align:-0.2861em"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.08125em">H</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em"><span style="top:-2.55em;margin-left:-0.0813em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em">g</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em"><span></span></span></span></span></span></span><span class="mopen">((</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em">g</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mord">.</span><span class="mord"><span class="mord"><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em">g</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:-0.0359em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6644em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.0037em">α</span></span></span></span></span></span></span></span><span class="mclose"><span class="mclose">)</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.02778em">r</span><span class="mbin mtight">+</span><span class="mord mathnormal mtight">h</span></span></span></span></span></span></span></span></span></span><span class="mspace newline"></span></span></span></span> <!-- -->|<!-- --> <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>x</mi><mi>W</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">x{W})</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal">x</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.13889em">W</span></span><span class="mclose">)</span></span></span></span></span></td><td align="center"><span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>K</mi><mo>=</mo><msub><mi>H</mi><mi>g</mi></msub><mo stretchy="false">(</mo><mi>e</mi><mo stretchy="false">(</mo><mi>R</mi><mo>+</mo><mi>h</mi><mi>A</mi><mo separator="true">,</mo><mi>s</mi><mi>Q</mi><mo stretchy="false">)</mo><mspace linebreak="newline"></mspace></mrow><annotation encoding="application/x-tex">K=H_g(e(R+hA,sQ) \\</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.07153em">K</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:1.0361em;vertical-align:-0.2861em"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.08125em">H</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em"><span style="top:-2.55em;margin-left:-0.0813em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03588em">g</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord mathnormal">e</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.00773em">R</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal">h</span><span class="mord mathnormal">A</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal">s</span><span class="mord mathnormal">Q</span><span class="mclose">)</span></span><span class="mspace newline"></span></span></span></span> <!-- -->|<!-- --> <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>w</mi><mi>U</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">w{U})</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.02691em">w</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.10903em">U</span></span><span class="mclose">)</span></span></span></span></span></td></tr></tbody></table><figure><strong>Figure 3.</strong> M-Pin FULL</figure><hr><p>Note that the transmission of <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>R</mi></mrow><annotation encoding="application/x-tex">R</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.00773em">R</span></span></span></span></span> from the client to the server can be done at the same time as <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>V</mi></mrow><annotation encoding="application/x-tex">V</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.22222em">V</span></span></span></span></span> is transmitted, and the transmission of <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>W</mi></mrow><annotation encoding="application/x-tex">W</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.13889em">W</span></span></span></span></span> from the server to the client can be done at the same time as  <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>y</mi></mrow><annotation encoding="application/x-tex">y</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em"></span><span class="mord mathnormal" style="margin-right:0.03588em">y</span></span></span></span></span> is transmitted, to avoid introducing any extra flows into the protocol.</p><h3 class="anchor anchorWithStickyNavbar_LWe7" id="chow-choo-protocol">Chow-Choo Protocol<a class="hash-link" href="#chow-choo-protocol" title="Direct link to heading">​</a></h3><p>As initially proposed, the Chow-Choo Protocol was based on a type-1 pairing. Note that in the Milagro framework, the Chow-Choo Protocol is made to work in a Type-3 setting.</p><p>Pairings are usually written as functions of the form <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>g</mi><mo>=</mo><mi>e</mi><mo stretchy="false">(</mo><mi>A</mi><mo separator="true">,</mo><mi>B</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">g=e(A,B)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em"></span><span class="mord mathnormal" style="margin-right:0.03588em">g</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal">e</span><span class="mopen">(</span><span class="mord mathnormal">A</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal" style="margin-right:0.05017em">B</span><span class="mclose">)</span></span></span></span></span>, where <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>A</mi><mo>∈</mo><msub><mi>G</mi><mn>1</mn></msub></mrow><annotation encoding="application/x-tex">A \in G_1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7224em;vertical-align:-0.0391em"></span><span class="mord mathnormal">A</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal">G</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></span>, <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>g</mi><mo>∈</mo><msub><mi>G</mi><mi>T</mi></msub></mrow><annotation encoding="application/x-tex">g \in G_T</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7335em;vertical-align:-0.1944em"></span><span class="mord mathnormal" style="margin-right:0.03588em">g</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal">G</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3283em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.13889em">T</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></span>, and for a Type-1 pairing <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>B</mi><mo>∈</mo><msub><mi>G</mi><mn>1</mn></msub></mrow><annotation encoding="application/x-tex">B \in G_1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7224em;vertical-align:-0.0391em"></span><span class="mord mathnormal" style="margin-right:0.05017em">B</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal">G</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></span> and for Type-3 <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>B</mi><mo>∈</mo><msub><mi>G</mi><mn>2</mn></msub></mrow><annotation encoding="application/x-tex">B \in G_2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7224em;vertical-align:-0.0391em"></span><span class="mord mathnormal" style="margin-right:0.05017em">B</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal">G</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></span>.</p><p>Consider now an application of this protocol to an imagined Internet of Things (IoT) setting.</p><p>Each &#x27;Thing&#x27; is issued with a serial number and its own Chow-Choo key (which can double as an M-Pin Key) based on that serial number as an identity.</p><p>These keys may be embedded at the time of manufacture, by the manufacturer acting as a naturally trusted authority.</p><p>When a Thing needs to communicate with another Thing, an action which requires knowing only the identity of the other, both parties can activate the Chow-Choo Protocol to calculate the same key to encrypt their communication.</p><p>For both sending and receiving, Alice is issued with <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi><msub><mi>A</mi><mn>1</mn></msub></mrow><annotation encoding="application/x-tex">sA_1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord mathnormal">s</span><span class="mord"><span class="mord mathnormal">A</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></span> and <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi><msub><mi>A</mi><mn>2</mn></msub></mrow><annotation encoding="application/x-tex">sA_2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord mathnormal">s</span><span class="mord"><span class="mord mathnormal">A</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></span>, where <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>A</mi><mn>1</mn></msub><mo>=</mo><msub><mi>H</mi><mn>1</mn></msub></mrow><annotation encoding="application/x-tex">A_1=H_1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal">A</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.08125em">H</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:-0.0813em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></span> and <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>A</mi><mn>2</mn></msub><mo>=</mo><msub><mi>H</mi><mn>2</mn></msub></mrow><annotation encoding="application/x-tex">A_2=H_2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal">A</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.08125em">H</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:-0.0813em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></span> both in the <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>I</mi><mi>D</mi><mo>=</mo><mtext>Alice</mtext></mrow><annotation encoding="application/x-tex">ID = \text{Alice}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.07847em">I</span><span class="mord mathnormal" style="margin-right:0.02778em">D</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.6944em"></span><span class="mord text"><span class="mord">Alice</span></span></span></span></span></span>.</p><p>Similarly Bob is issued with <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi><msub><mi>B</mi><mn>1</mn></msub></mrow><annotation encoding="application/x-tex">sB_1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord mathnormal">s</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.05017em">B</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:-0.0502em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></span> and <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi><msub><mi>B</mi><mn>2</mn></msub></mrow><annotation encoding="application/x-tex">sB_2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord mathnormal">s</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.05017em">B</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:-0.0502em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></span>. Now if Alice initiates and Bob responds, Alice calculates the key as <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>e</mi><mo stretchy="false">(</mo><mi>s</mi><msub><mi>A</mi><mn>1</mn></msub><mo separator="true">,</mo><msub><mi>B</mi><mn>2</mn></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">e(sA_1,B_2)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal">e</span><span class="mopen">(</span><span class="mord mathnormal">s</span><span class="mord"><span class="mord mathnormal">A</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.05017em">B</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:-0.0502em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></span> and Bob can calculate the same key as <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>e</mi><mo stretchy="false">(</mo><msub><mi>A</mi><mn>1</mn></msub><mo separator="true">,</mo><mi>s</mi><msub><mi>B</mi><mn>2</mn></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">e(A_1,sB_2)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal">e</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal">A</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal">s</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.05017em">B</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:-0.0502em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></span>, where by convention the initiator uses their <em>sender</em> key and the responder uses their <em>receiver</em> key.</p><p>One thing we can exploit -- in any communication context there is an initiator and a responder, or a <em>sender</em> and <em>receiver</em>, if you will.</p><p>In the above example, Alice and Bob both were issued <em>sender</em> and <em>receiver</em> keys respectively, as this describes where they can appear in the pairing.</p><p>An obvious advantage is to issue each Thing with two keys, one in <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>G</mi><mn>1</mn></msub></mrow><annotation encoding="application/x-tex">G_1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal">G</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></span> and the other in <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>G</mi><mn>2</mn></msub></mrow><annotation encoding="application/x-tex">G_2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal">G</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></span>, <strong>if</strong> the Thing is approved to send and receive.</p><p>However, the capability exists to cryptographically bound Things to only receiving information, or only sending information, based upon whether or not a Thing has been issued a sender and / or a receiver key.</p><p>This capability is exploited in the Milagro framework to enable peer to peer authenticated key agreement.</p><hr><p><img loading="lazy" alt="Alt text" src="/assets/images/Chow-ChooProtocol-1aa57e8d61146f9a9a0741dd614493be.png" width="1362" height="1056" class="img_ev3q"></p><hr><p><strong>Notes on Chow-Choo Protocol:</strong></p><ul><li><span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>G</mi><mn>1</mn></msub></mrow><annotation encoding="application/x-tex">G_1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal">G</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></span>: a <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>r</mi></mrow><annotation encoding="application/x-tex">r</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal" style="margin-right:0.02778em">r</span></span></span></span></span>-order cyclic subgroup of <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>E</mi><mo stretchy="false">(</mo><msub><mi>F</mi><mi>p</mi></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">E(F_p)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0361em;vertical-align:-0.2861em"></span><span class="mord mathnormal" style="margin-right:0.05764em">E</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.13889em">F</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em"><span style="top:-2.55em;margin-left:-0.1389em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></span>.</li><li><span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>G</mi><mn>2</mn></msub></mrow><annotation encoding="application/x-tex">G_2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal">G</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></span>: a subgroup of <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>E</mi><mo stretchy="false">(</mo><msub><mi>F</mi><msup><mi>p</mi><mi>k</mi></msup></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">E(F_{p^k})</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.0887em;vertical-align:-0.3387em"></span><span class="mord mathnormal" style="margin-right:0.05764em">E</span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.13889em">F</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em"><span style="top:-2.4974em;margin-left:-0.1389em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">p</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.782em"><span style="top:-2.786em;margin-right:0.0714em"><span class="pstrut" style="height:2.5em"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathnormal mtight" style="margin-right:0.03148em">k</span></span></span></span></span></span></span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.3387em"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></span>, where <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>k</mi></mrow><annotation encoding="application/x-tex">k</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em"></span><span class="mord mathnormal" style="margin-right:0.03148em">k</span></span></span></span></span> is the embedding degree of the Curve.</li><li><span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>H</mi><mn>1</mn></mrow><annotation encoding="application/x-tex">H1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.08125em">H</span><span class="mord">1</span></span></span></span></span>: Maps string value to a point on the curve in <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>G</mi><mn>1</mn></msub></mrow><annotation encoding="application/x-tex">G_1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal">G</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></span>.</li><li><span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>H</mi><mn>2</mn></mrow><annotation encoding="application/x-tex">H2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.08125em">H</span><span class="mord">2</span></span></span></span></span>: Maps string value to a point on the curve in <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>G</mi><mn>2</mn></msub></mrow><annotation encoding="application/x-tex">G_2</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal">G</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></span>.</li><li><span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>H</mi><mi>q</mi></mrow><annotation encoding="application/x-tex">Hq</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8778em;vertical-align:-0.1944em"></span><span class="mord mathnormal" style="margin-right:0.08125em">H</span><span class="mord mathnormal" style="margin-right:0.03588em">q</span></span></span></span></span>: Hashes inputs to an integer modulo the curve order <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>q</mi></mrow><annotation encoding="application/x-tex">q</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em"></span><span class="mord mathnormal" style="margin-right:0.03588em">q</span></span></span></span></span>.When run in the simple SIDH </li><li>H(): Hash function.</li><li><span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">∣</mi><mi mathvariant="normal">∣</mi></mrow><annotation encoding="application/x-tex">||</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord">∣∣</span></span></span></span></span>: denotes the concatenation of messages.</li></ul><hr><h3 class="anchor anchorWithStickyNavbar_LWe7" id="secret-revocation">Secret Revocation<a class="hash-link" href="#secret-revocation" title="Direct link to heading">​</a></h3><p>We introduce Time Permits to handle the revocation issue. Normally in Identity-Based Encryption the problem of client revocation is solved by date-stamping identities so that the private key issued for an identity becomes useless once the time period expires. Now a new private key must be issued, and we will simply not issue one to a revoked client.</p><p>Milagro achieves a much more immediate revocation capability through the use of Time Permits. The D-TA that is controlled by the application owner is envisioned to be the controlling D-TA to issue Time Permits at the point where a client needs to authenticate to a server, or create an authenticated key agreement between client and server or peer to peer.</p><p>The idea is that the server includes an explicitly described time slot in its construction of Alice&#x27;s hashed identity. Unless Alice has a corresponding &quot;Time permit&quot; for the same time slot, she cannot complete the protocol.</p><p>In the protocol above we instead calculate <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>H</mi><mo stretchy="false">(</mo><mi>I</mi><msub><mi>D</mi><mi>a</mi></msub><mo stretchy="false">)</mo><mo>+</mo><msub><mi>H</mi><mi>T</mi></msub><mo stretchy="false">(</mo><msub><mi>T</mi><mi>i</mi></msub><mi mathvariant="normal">∣</mi><mi>I</mi><msub><mi>D</mi><mi>a</mi></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">H(ID_a) + H_T(T_i|ID_a)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.08125em">H</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.07847em">I</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em">D</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em"><span style="top:-2.55em;margin-left:-0.0278em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">a</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.08125em">H</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3283em"><span style="top:-2.55em;margin-left:-0.0813em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.13889em">T</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.13889em">T</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em"><span style="top:-2.55em;margin-left:-0.1389em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mord">∣</span><span class="mord mathnormal" style="margin-right:0.07847em">I</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em">D</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em"><span style="top:-2.55em;margin-left:-0.0278em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">a</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></span> on both sides of the protocol where <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>T</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex">T_i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8333em;vertical-align:-0.15em"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.13889em">T</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em"><span style="top:-2.55em;margin-left:-0.1389em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span></span></span></span></span> is a textual description of the <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>i</mi></mrow><annotation encoding="application/x-tex">i</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6595em"></span><span class="mord mathnormal">i</span></span></span></span></span>-th time slot and <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>H</mi><mi>T</mi></msub><mo stretchy="false">(</mo><mi mathvariant="normal">.</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">H_T(.)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.08125em">H</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3283em"><span style="top:-2.55em;margin-left:-0.0813em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.13889em">T</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord">.</span><span class="mclose">)</span></span></span></span></span> is a hash function distinct from <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>H</mi><mo stretchy="false">(</mo><mi mathvariant="normal">.</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">H(.)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.08125em">H</span><span class="mopen">(</span><span class="mord">.</span><span class="mclose">)</span></span></span></span></span>.</p><p>For the protocol to work correctly Alice must be issued by the Trusted Authority with a permit <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi><mi mathvariant="normal">.</mi><msub><mi>H</mi><mi>T</mi></msub><mo stretchy="false">(</mo><msub><mi>T</mi><mi>i</mi></msub><mi mathvariant="normal">∣</mi><mi>I</mi><msub><mi>D</mi><mi>a</mi></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">s.H_T(T_i|ID_a)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal">s</span><span class="mord">.</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.08125em">H</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3283em"><span style="top:-2.55em;margin-left:-0.0813em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight" style="margin-right:0.13889em">T</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mopen">(</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.13889em">T</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em"><span style="top:-2.55em;margin-left:-0.1389em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mord">∣</span><span class="mord mathnormal" style="margin-right:0.07847em">I</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em">D</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em"><span style="top:-2.55em;margin-left:-0.0278em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">a</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></span> which gets added to her combined PIN-plus-token secret <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi><mi mathvariant="normal">.</mi><mi>H</mi><mo stretchy="false">(</mo><mi>I</mi><msub><mi>D</mi><mi>a</mi></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">s.H(ID_a)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal">s</span><span class="mord">.</span><span class="mord mathnormal" style="margin-right:0.08125em">H</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.07847em">I</span><span class="mord"><span class="mord mathnormal" style="margin-right:0.02778em">D</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em"><span style="top:-2.55em;margin-left:-0.0278em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">a</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em"><span></span></span></span></span></span></span><span class="mclose">)</span></span></span></span></span>.</p><p>Observe that the permit is of no use to any other party, and hence can be issued publicly, uploaded to a public cloud data store (AWS S3), or delivered via the server directly.</p><p>A proof of security for this idea in the context of Boneh and Franklin IBE can be found in Tseng<sup id="fnref-ninth"><a href="#fn-ninth" class="footnote-ref">ninth</a></sup> et al.</p><hr><h3 class="anchor anchorWithStickyNavbar_LWe7" id="bls-subgroup-multi-signatures">BLS Subgroup Multi-Signatures<a class="hash-link" href="#bls-subgroup-multi-signatures" title="Direct link to heading">​</a></h3><p>Dan Boneh, Ben Lynn and Hovav Schacham introduced their paper entitled &quot;Short Signatures from the Weil Pairing&quot; in 2001<sup id="fnref-fourth"><a href="#fn-fourth" class="footnote-ref">fourth</a></sup>. The paper described a short signature scheme based on the computational Diffie-Hellman assumption on certain elliptic and hyper-elliptic curves. </p><p>In a simple instantiation, given a secret key <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi><mi>k</mi></mrow><annotation encoding="application/x-tex">sk</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em"></span><span class="mord mathnormal">s</span><span class="mord mathnormal" style="margin-right:0.03148em">k</span></span></span></span></span>, a public key <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi><mi>k</mi><mo>=</mo><msup><mi>g</mi><mrow><mi>S</mi><mi>k</mi></mrow></msup></mrow><annotation encoding="application/x-tex">p k=g^{S k}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em"></span><span class="mord mathnormal">p</span><span class="mord mathnormal" style="margin-right:0.03148em">k</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:1.0435em;vertical-align:-0.1944em"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em">g</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.05764em">S</span><span class="mord mathnormal mtight" style="margin-right:0.03148em">k</span></span></span></span></span></span></span></span></span></span></span></span></span>, a message <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>m</mi></mrow><annotation encoding="application/x-tex">m</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal">m</span></span></span></span></span>, a hashing-into-the-curve function <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>H</mi></mrow><annotation encoding="application/x-tex">H</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.08125em">H</span></span></span></span></span>, and a bilinear pairing <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>e</mi></mrow><annotation encoding="application/x-tex">e</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal">e</span></span></span></span></span>:</p><ul><li>Key Generation: <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi><mi>k</mi></mrow><annotation encoding="application/x-tex">sk</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em"></span><span class="mord mathnormal">s</span><span class="mord mathnormal" style="margin-right:0.03148em">k</span></span></span></span></span> is a random integer over the field, <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi><mi>k</mi><mo>=</mo><msup><mi>g</mi><mrow><mi>S</mi><mi>k</mi></mrow></msup></mrow><annotation encoding="application/x-tex">p k=g^{S k}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em"></span><span class="mord mathnormal">p</span><span class="mord mathnormal" style="margin-right:0.03148em">k</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:1.0435em;vertical-align:-0.1944em"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em">g</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight" style="margin-right:0.05764em">S</span><span class="mord mathnormal mtight" style="margin-right:0.03148em">k</span></span></span></span></span></span></span></span></span></span></span></span></span></li><li>Signature: <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>S</mi><mo>=</mo><mi>H</mi><mo stretchy="false">(</mo><mi>m</mi><msup><mo stretchy="false">)</mo><mrow><mi>s</mi><mi>k</mi></mrow></msup></mrow><annotation encoding="application/x-tex">S=H(m)^{s k}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.05764em">S</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:1.0991em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.08125em">H</span><span class="mopen">(</span><span class="mord mathnormal">m</span><span class="mclose"><span class="mclose">)</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">s</span><span class="mord mathnormal mtight" style="margin-right:0.03148em">k</span></span></span></span></span></span></span></span></span></span></span></span></span></li><li>Verify: <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>e</mi><mo stretchy="false">(</mo><mi>H</mi><mo stretchy="false">(</mo><mi>m</mi><mo stretchy="false">)</mo><mo separator="true">,</mo><mi>p</mi><mi>k</mi><mo stretchy="false">)</mo><mo>=</mo><mi>e</mi><mo stretchy="false">(</mo><mi>S</mi><mo separator="true">,</mo><mi>g</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">e(H(m), p k)=e(S, g)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal">e</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.08125em">H</span><span class="mopen">(</span><span class="mord mathnormal">m</span><span class="mclose">)</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal">p</span><span class="mord mathnormal" style="margin-right:0.03148em">k</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal">e</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.05764em">S</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal" style="margin-right:0.03588em">g</span><span class="mclose">)</span></span></span></span></span></li></ul><p>Biliniarity is on display as the signature </p><div class="math math-display"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mtable rowspacing="0.16em" columnalign="center" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>e</mi><mo stretchy="false">(</mo><mi>H</mi><mo stretchy="false">(</mo><mi>m</mi><mo stretchy="false">)</mo><mo separator="true">,</mo><mi>p</mi><mi>k</mi><mo stretchy="false">)</mo><mo>=</mo><mi>e</mi><mrow><mo fence="true">(</mo><mi>H</mi><mo stretchy="false">(</mo><mi>m</mi><mo stretchy="false">)</mo><mo separator="true">,</mo><msup><mi>g</mi><mrow><mi>s</mi><mi>k</mi></mrow></msup><mo fence="true">)</mo></mrow><mo>=</mo><mi>e</mi><mo stretchy="false">(</mo><mi>H</mi><mo stretchy="false">(</mo><mi>m</mi><mo stretchy="false">)</mo><mo separator="true">,</mo><mi>g</mi><msup><mo stretchy="false">)</mo><mrow><mi>s</mi><mi>k</mi></mrow></msup><mo>=</mo></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mo>=</mo><mi>e</mi><mrow><mo fence="true">(</mo><mi>H</mi><mo stretchy="false">(</mo><mi>m</mi><msup><mo stretchy="false">)</mo><mrow><mi>s</mi><mi>k</mi></mrow></msup><mo separator="true">,</mo><mi>g</mi><mo fence="true">)</mo></mrow><mo>=</mo><mi>e</mi><mo stretchy="false">(</mo><mi>S</mi><mo separator="true">,</mo><mi>g</mi><mo stretchy="false">)</mo></mrow></mstyle></mtd></mtr></mtable><annotation encoding="application/x-tex">\begin{array}{c}{e(H(m), p k)=e\left(H(m), g^{s k}\right)=e(H(m), g)^{s k}=} \\ {=e\left(H(m)^{s k}, g\right)=e(S, g)}\end{array}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:2.42em;vertical-align:-0.96em"></span><span class="mord"><span class="mtable"><span class="arraycolsep" style="width:0.5em"></span><span class="col-align-c"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.46em"><span style="top:-3.61em"><span class="pstrut" style="height:3em"></span><span class="mord"><span class="mord"><span class="mord mathnormal">e</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.08125em">H</span><span class="mopen">(</span><span class="mord mathnormal">m</span><span class="mclose">)</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal">p</span><span class="mord mathnormal" style="margin-right:0.03148em">k</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mord mathnormal">e</span><span class="mspace" style="margin-right:0.1667em"></span><span class="minner"><span class="mopen delimcenter" style="top:0em"><span class="delimsizing size1">(</span></span><span class="mord mathnormal" style="margin-right:0.08125em">H</span><span class="mopen">(</span><span class="mord mathnormal">m</span><span class="mclose">)</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.03588em">g</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">s</span><span class="mord mathnormal mtight" style="margin-right:0.03148em">k</span></span></span></span></span></span></span></span></span><span class="mclose delimcenter" style="top:0em"><span class="delimsizing size1">)</span></span></span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mord mathnormal">e</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.08125em">H</span><span class="mopen">(</span><span class="mord mathnormal">m</span><span class="mclose">)</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal" style="margin-right:0.03588em">g</span><span class="mclose"><span class="mclose">)</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">s</span><span class="mord mathnormal mtight" style="margin-right:0.03148em">k</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span></span></span></span><span style="top:-2.4em"><span class="pstrut" style="height:3em"></span><span class="mord"><span class="mord"><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mord mathnormal">e</span><span class="mspace" style="margin-right:0.1667em"></span><span class="minner"><span class="mopen delimcenter" style="top:0em"><span class="delimsizing size1">(</span></span><span class="mord mathnormal" style="margin-right:0.08125em">H</span><span class="mopen">(</span><span class="mord mathnormal">m</span><span class="mclose"><span class="mclose">)</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8491em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">s</span><span class="mord mathnormal mtight" style="margin-right:0.03148em">k</span></span></span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal" style="margin-right:0.03588em">g</span><span class="mclose delimcenter" style="top:0em"><span class="delimsizing size1">)</span></span></span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mord mathnormal">e</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.05764em">S</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal" style="margin-right:0.03588em">g</span><span class="mclose">)</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.96em"><span></span></span></span></span></span><span class="arraycolsep" style="width:0.5em"></span></span></span></span></span></span></span></div><p>but is also unique and deterministic, something missing from ECDSA. </p><p>In June of 2018 Dan Boneh, Manu Drijvers and Gregory Neven released research that constructs the first practical, short accountable-subgroup multi-signature (ASM) scheme based on BLS signatures<sup id="fnref-sixth"><a href="#fn-sixth" class="footnote-ref">sixth</a></sup>.</p><p>An ASM scheme enables any subset <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>S</mi></mrow><annotation encoding="application/x-tex">S</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.05764em">S</span></span></span></span></span> of a set of <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal">n</span></span></span></span></span> parties to sign a message <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>m</mi></mrow><annotation encoding="application/x-tex">m</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal">m</span></span></span></span></span> so that a valid signature discloses which subset generated the signature (hence the subset <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>S</mi></mrow><annotation encoding="application/x-tex">S</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.05764em">S</span></span></span></span></span> is accountable for signing <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>m</mi></mrow><annotation encoding="application/x-tex">m</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal">m</span></span></span></span></span>).</p><p>In addition to the ASM scheme, Milagro exploits a unique property of BLS signatures: Signing Keys can be split using Shamir&#x27;s Secret Sharing<sup id="fnref-seventh"><a href="#fn-seventh" class="footnote-ref">seventh</a></sup> in which the &#x27;shares&#x27; of the keys, when distributed to signers, themselves become signing keys. By using a &#x27;key splitter&#x27; and &#x27;signature aggregator&#x27; role who also performs the Shamir Secret Sharing (SSS) dealer function, several benefits emerge.</p><p>Thresholds can be set on the distribution of key shares just as in a normal SSS routine. So once the shares of the original signing key are distributed, the original signing key can be securely deleted, and is never re-created again. Instead, signatures derived from the shares of the original signing key are created. Again, the properties of BLS enable these shares of signature keys to be themselves used a signature keys. The object of the exercise is for the signature aggregator, who is collecting the signatures created from these shares, to complete the threshold and achieve the signature that the original signature would have created, which can be validated by its original public key component.</p><p>In other words, if the aggregator takes m-of-n of these signature shares, and perform the same polynomial interpolation as one would usually do with the secret shares, you’ll recover a complete signature which is identical to what would have been created if the original complete private key would have been used.</p><p>In this context, signing is a single round protocol and is non-interactive.</p><hr><h3 class="anchor anchorWithStickyNavbar_LWe7" id="supersingular-isogeny-key-encapsulation-sike">Supersingular Isogeny Key Encapsulation (SIKE)<a class="hash-link" href="#supersingular-isogeny-key-encapsulation-sike" title="Direct link to heading">​</a></h3><p>A key encapsulation mechanism (KEM) is a set of three algorithms.</p><ul><li>key generation (KeyGen)</li><li>encapsulation (Encaps)</li><li>decapsulation (Decaps)</li></ul><p>and a defined key space, where</p><ul><li>KeyGen(): returns a public and a secret key <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>p</mi><mi>k</mi><mo separator="true">,</mo><mi>s</mi><mi>k</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(pk, sk)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mopen">(</span><span class="mord mathnormal">p</span><span class="mord mathnormal" style="margin-right:0.03148em">k</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal">s</span><span class="mord mathnormal" style="margin-right:0.03148em">k</span><span class="mclose">)</span></span></span></span></span>.</li><li>Encaps<span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>p</mi><mi>k</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(pk)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mopen">(</span><span class="mord mathnormal">p</span><span class="mord mathnormal" style="margin-right:0.03148em">k</span><span class="mclose">)</span></span></span></span></span>: takes pk as input and outputs ciphertext <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>c</mi></mrow><annotation encoding="application/x-tex">c</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal">c</span></span></span></span></span> and a key <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>K</mi></mrow><annotation encoding="application/x-tex">K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.07153em">K</span></span></span></span></span> from the key space.</li><li>Decaps<span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mo stretchy="false">(</mo><mi>s</mi><mi>k</mi><mo separator="true">,</mo><mi>c</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">(sk, c)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mopen">(</span><span class="mord mathnormal">s</span><span class="mord mathnormal" style="margin-right:0.03148em">k</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em"></span><span class="mord mathnormal">c</span><span class="mclose">)</span></span></span></span></span>: takes <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>s</mi><mi>k</mi></mrow><annotation encoding="application/x-tex">sk</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em"></span><span class="mord mathnormal">s</span><span class="mord mathnormal" style="margin-right:0.03148em">k</span></span></span></span></span> and <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>c</mi></mrow><annotation encoding="application/x-tex">c</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em"></span><span class="mord mathnormal">c</span></span></span></span></span> as input, and returns a key <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>K</mi></mrow><annotation encoding="application/x-tex">K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.07153em">K</span></span></span></span></span> or ERROR. <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>K</mi></mrow><annotation encoding="application/x-tex">K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.07153em">K</span></span></span></span></span> is called the session key.</li></ul><p>SIKE uses Hofheinz transformation on SIDH to achieve CCA security. Let <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi><mo>=</mo><msup><mn>2</mn><msub><mi>e</mi><mi>A</mi></msub></msup><msup><mn>3</mn><msub><mi>e</mi><mn>3</mn></msub></msup><mo>−</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">p=2^{e_{A}} 3^{e_{3}}-1</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em"></span><span class="mord mathnormal">p</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.7477em;vertical-align:-0.0833em"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6644em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">e</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3448em"><span style="top:-2.3567em;margin-left:0em;margin-right:0.0714em"><span class="pstrut" style="height:2.5em"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">A</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.1433em"><span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span class="mord"><span class="mord">3</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6644em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathnormal mtight">e</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3173em"><span style="top:-2.357em;margin-left:0em;margin-right:0.0714em"><span class="pstrut" style="height:2.5em"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mtight"><span class="mord mtight">3</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.143em"><span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em"></span></span><span class="base"><span class="strut" style="height:0.6444em"></span><span class="mord">1</span></span></span></span></span>, and let <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>E</mi></mrow><annotation encoding="application/x-tex">E</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.05764em">E</span></span></span></span></span> be a supersingular elliptic curve defined over a field of characteristic <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi></mrow><annotation encoding="application/x-tex">p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em"></span><span class="mord mathnormal">p</span></span></span></span></span>. <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>E</mi></mrow><annotation encoding="application/x-tex">E</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.05764em">E</span></span></span></span></span> can also be defined over <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="double-struck">F</mi><mi mathvariant="normal">_</mi><msup><mi>p</mi><mn>2</mn></msup></mrow><annotation encoding="application/x-tex">\mathbb{F}\_{p^{2}}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.1241em;vertical-align:-0.31em"></span><span class="mord mathbb">F</span><span class="mord" style="margin-right:0.02778em">_</span><span class="mord"><span class="mord"><span class="mord mathnormal">p</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span></span></span></span></span></span></span> up to its isomorphism. An isogeny <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>Ï•</mi><mo>:</mo><mi>E</mi><mo>→</mo><msup><mi>E</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup></mrow><annotation encoding="application/x-tex">\phi : E \rightarrow E^{\prime}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em"></span><span class="mord mathnormal">Ï•</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">:</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.05764em">E</span><span class="mspace" style="margin-right:0.2778em"></span><span class="mrel">→</span><span class="mspace" style="margin-right:0.2778em"></span></span><span class="base"><span class="strut" style="height:0.7519em"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.05764em">E</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span></span></span></span></span> is a non-constant map from <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>E</mi></mrow><annotation encoding="application/x-tex">E</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.05764em">E</span></span></span></span></span> to <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>E</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup></mrow><annotation encoding="application/x-tex">E^{\prime}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7519em"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.05764em">E</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em"><span style="top:-3.063em;margin-right:0.05em"><span class="pstrut" style="height:2.7em"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span></span></span></span></span> which translates the identity into the identity. </p><p>An isogeny map is defined by its degree and kernel. The degree of an isogeny is its degree as morphism. An isogeny with degree <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">â„“</mi></mrow><annotation encoding="application/x-tex">\ell</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em"></span><span class="mord">â„“</span></span></span></span></span> map is called <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">â„“</mi></mrow><annotation encoding="application/x-tex">\ell</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em"></span><span class="mord">â„“</span></span></span></span></span>-isogeny. Let <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>G</mi></mrow><annotation encoding="application/x-tex">G</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal">G</span></span></span></span></span> be a subgroup of points on <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>E</mi></mrow><annotation encoding="application/x-tex">E</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal" style="margin-right:0.05764em">E</span></span></span></span></span> which contains <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">â„“</mi></mrow><annotation encoding="application/x-tex">\ell</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em"></span><span class="mord">â„“</span></span></span></span></span> + 1 cyclic subgroups of order <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">â„“</mi></mrow><annotation encoding="application/x-tex">\ell</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em"></span><span class="mord">â„“</span></span></span></span></span>. This subgroup is the torsion group <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>E</mi><mo stretchy="false">[</mo><mi mathvariant="normal">â„“</mi><mo stretchy="false">]</mo></mrow><annotation encoding="application/x-tex">E[\ell]</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em"></span><span class="mord mathnormal" style="margin-right:0.05764em">E</span><span class="mopen">[</span><span class="mord">â„“</span><span class="mclose">]</span></span></span></span></span> and each element of this group is corresponding to an isogeny of degree <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">â„“</mi></mrow><annotation encoding="application/x-tex">\ell</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6944em"></span><span class="mord">â„“</span></span></span></span></span>; accordingly, an isogeny also can be identified by <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>G</mi></mrow><annotation encoding="application/x-tex">G</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em"></span><span class="mord mathnormal">G</span></span></span></span></span>, i.e., the kernel of isogeny.</p><p>This section provides a brief presentation of the SIKE protocol. We refer readers to <sup id="fnref-eighth"><a href="#fn-eighth" class="footnote-ref">eighth</a></sup> and <sup id="fnref-fifth"><a href="#fn-fifth" class="footnote-ref">fifth</a></sup> for more detailed explanation of the supersignular isogeny problem and the base key-exchange protocol which the SIKE is constructed upon.</p><div class="theme-admonition theme-admonition-tip alert alert--success admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 12 16"><path fill-rule="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"></path></svg></span>See an error in this documentation? </div><div class="admonitionContent_S0QG"><p>Submit a pull request on the development branch of <a href="https://github.com/apache/incubator-milagro" target="_blank" rel="noopener noreferrer">Milagro Website Repo</a>.</p></div></div><div class="footnotes"><hr><ol><li id="fn-first"><p><a href="https://eprint.iacr.org/2002/164" target="_blank" rel="noopener noreferrer">M-Pin protocol</a>. As noted in <a href="/docs/milagro-crypto">Milagro Crypto</a>, the M-Pin Protocol is of these classifications and exploits the features of:</p><ul><li>Elliptic Curve Cryptography</li><li>Pairing Based Cryptography</li><li>Identity Based Encryption</li><li>Zero Knowledge Proof</li></ul><p><a href="#fnref-first" class="footnote-backref">↩</a></p></li><li id="fn-second"><p><a href="https://eprint.iacr.org/2015/576" target="_blank" rel="noopener noreferrer">The Carnac protocol -- or how to read the contents of a sealed envelope</a><a href="#fnref-second" class="footnote-backref">↩</a></p></li><li id="fn-third"><p><a href="https://eprint.iacr.org/2007/018.pdf" target="_blank" rel="noopener noreferrer">Strongly-Secure Identity-based Key Agreement and Anonymous Extension</a><a href="#fnref-third" class="footnote-backref">↩</a></p></li><li id="fn-fourth"><p><a href="https://www.iacr.org/archive/asiacrypt2001/22480516.pdf" target="_blank" rel="noopener noreferrer">Short Signatures from the Weil Pairing</a><a href="#fnref-fourth" class="footnote-backref">↩</a></p></li><li id="fn-fifth"><p><a href="https://sike.org/" target="_blank" rel="noopener noreferrer">Supersingular isogeny key encapsulation - NIST Submission</a><a href="#fnref-fifth" class="footnote-backref">↩</a></p></li><li id="fn-ninth"><p><a href="https://reader.elsevier.com/reader/sd/pii/S2213020915000592?token=5C2E08C17803B9549FB79F3A91A1ED2382360D3E840087C8C065BD06EFCABB55C4A5A300566388A2920786DCC63E631E" target="_blank" rel="noopener noreferrer">A brief review of revocable ID-based public key cryptosystem</a><a href="#fnref-ninth" class="footnote-backref">↩</a></p></li><li id="fn-sixth"><p><a href="https://eprint.iacr.org/2018/483" target="_blank" rel="noopener noreferrer">Compact Multi-Signatures for Smaller Blockchains</a><a href="#fnref-sixth" class="footnote-backref">↩</a></p></li><li id="fn-seventh"><p><a href="https://cs.jhu.edu/~sdoshi/crypto/papers/shamirturing.pdf" target="_blank" rel="noopener noreferrer">How to Share a Secret</a><a href="#fnref-seventh" class="footnote-backref">↩</a></p></li><li id="fn-eighth"><p><a href="https://eprint.iacr.org/2011/506.pdf" target="_blank" rel="noopener noreferrer">Towards quantum-resistant cryptosystems from supersingular elliptic curve isogenies</a><a href="#fnref-eighth" class="footnote-backref">↩</a></p></li></ol></div></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/milagro-crypto"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Milagro Crypto</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/milagro-design"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Milagro Design</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#m-pin-protocol---introduction" class="table-of-contents__link toc-highlight">M-Pin Protocol - Introduction</a></li><li><a href="#chow-choo-protocol---introduction" class="table-of-contents__link toc-highlight">Chow-Choo Protocol - Introduction</a></li><li><a href="#bls-signatures---introduction" class="table-of-contents__link toc-highlight">BLS Signatures - Introduction</a></li><li><a href="#supersingular-isogeny-key-encapsulation---introduction" class="table-of-contents__link toc-highlight">Supersingular Isogeny Key Encapsulation - Introduction</a></li><li><a href="#protocols-in-depth" class="table-of-contents__link toc-highlight">Protocols In Depth</a><ul><li><a href="#m-pin-1-pass" class="table-of-contents__link toc-highlight">M-Pin 1-Pass</a></li><li><a href="#m-pin-2-pass" class="table-of-contents__link toc-highlight">M-Pin 2-Pass</a></li><li><a href="#m-pin-full" class="table-of-contents__link toc-highlight">M-Pin FULL</a></li><li><a href="#chow-choo-protocol" class="table-of-contents__link toc-highlight">Chow-Choo Protocol</a></li><li><a href="#secret-revocation" class="table-of-contents__link toc-highlight">Secret Revocation</a></li><li><a href="#bls-subgroup-multi-signatures" class="table-of-contents__link toc-highlight">BLS Subgroup Multi-Signatures</a></li><li><a href="#supersingular-isogeny-key-encapsulation-sike" class="table-of-contents__link toc-highlight">Supersingular Isogeny Key Encapsulation (SIKE)</a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/mpc-api-0.1/index.html b/docs/mpc-api-0.1/index.html
index 79574cd..d1254a3 100644
--- a/docs/mpc-api-0.1/index.html
+++ b/docs/mpc-api-0.1/index.html
@@ -1,80 +1,22 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Multi-Party Computation (MPC) Library 0.1 (libmpc) · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Apache Milagro&#x27;s Multi-Party Computation library (libmpc) is the latest addition to the project (as of June 2022), and uses the [Apache Milagro C Library](/docs/amcl-c-api-2.0.0) to implement Multi-Party Computation. It offers and API to allow for customs computations to be perfomed."/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Multi-Party Computation (MPC) Library 0.1 (libmpc) · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="Apache Milagro&#x27;s Multi-Party Computation library (libmpc) is the latest addition to the project (as of June 2022), and uses the [Apache Milagro C Library](/docs/amcl-c-api-2.0.0) to implement Multi-Party Computation. It offers and API to allow for customs computations to be perfomed."/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>MPC Library</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem navListItemActive"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-mpc-api-0.1">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">Multi-Party Computation (MPC) Library 0.1 (libmpc) | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/mpc-api-0.1"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Multi-Party Computation (MPC) Library 0.1 (libmpc) | Apache Milagro"><meta data-rh="true" name="description" content="Apache Milagro&#x27;s Multi-Party Computation library (libmpc) is the latest addition to the project (as of June 2022), and uses the Apache Milagro C Library to implement Multi-Party Computation. It offers and API to allow for customs computations to be perfomed."><meta data-rh="true" property="og:description" content="Apache Milagro&#x27;s Multi-Party Computation library (libmpc) is the latest addition to the project (as of June 2022), and uses the Apache Milagro C Library to implement Multi-Party Computation. It offers and API to allow for customs computations to be perfomed."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/mpc-api-0.1"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/mpc-api-0.1" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/mpc-api-0.1" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">Multi-Party Computation (MPC) Library 0.1 (libmpc)</h1></header><article><div><span><p>Apache Milagro's Multi-Party Computation library (libmpc) is the latest addition to the project (as of June 2022), and uses the <a href="/docs/amcl-c-api-2.0.0">Apache Milagro C Library</a> to implement Multi-Party Computation. It offers and API to allow for customs computations to be perfomed.</p>
-<h2><a class="anchor" aria-hidden="true" id="building-and-running-libmpc"></a><a href="#building-and-running-libmpc" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Building and running libmpc</h2>
-<p>The preferred way to get libmpc built and tested is through the use of docker.</p>
-<p>Once your docker installation is correctly set-up, simply run:</p>
-<pre><code class="hljs"> git <span class="hljs-keyword">clone</span> <span class="hljs-title">https</span>://github.com/apache/incubator-milagro-MPC.git &amp;&amp; cd incubator-milagro-MPC
-</code></pre>
-<pre><code class="hljs"> docker <span class="hljs-keyword">build </span>-t libmpc .
-</code></pre>
-<p>If you want to run tests and ensure all routines perform as expected, run:</p>
-<pre><code class="hljs">docker <span class="hljs-builtin-name">run</span> --cap-<span class="hljs-builtin-name">add</span> SYS_PTRACE --rm libmpc
-</code></pre>
-<p>This procedure has been tested on all major platforms (Linux, Mac OS, Windows) on arm64 and x86_64 platforms. If your build or execution fails, please open a bug.</p>
-<p>You can also build and run libmpc natively, and you can build the docker image for multiple platforms. To know more, check out <a href="https://github.com/apache/incubator-milagro-MPC">the readme in the GitHub repository</a>.</p>
-<h2><a class="anchor" aria-hidden="true" id="api-documentation"></a><a href="#api-documentation" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>API Documentation</h2>
-<p>Doxygen support is available for Apache Milagro Multi-Party Computation (MPC) Library.</p>
-<p>If you build libmpc, you can generate the documentation by running</p>
-<pre><code class="hljs">make <span class="hljs-meta">doc</span>
-</code></pre>
-<p>in the build directory. If you use Docker, and you want the build to generate the documentation, make sure <code>build_doc</code> is set to <code>true</code>.</p>
-<p>An online version of the Doxygen output is available for viewing in a web browser <a href="/mpcdocs/index.html" target="_blank">here</a>.</p>
-<!--
-Supported admonition types are: caution, note, important, tip, warning.
--->
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/dta-details/authentication"><span class="arrow-prev">← </span><span>Authentication</span></a><a class="docs-next button" href="/docs/zkp-mfa-overview"><span>ZKP-MFA Overview</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#building-and-running-libmpc">Building and running libmpc</a></li><li><a href="#api-documentation">API Documentation</a></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/amcl-overview">AMCL Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/mpc-api-0.1">MPC Library</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">MPC Library</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">Multi-Party Computation Library 0.1</span><meta itemprop="position" content="2"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Multi-Party Computation (MPC) Library 0.1 (libmpc)</h1></header><p>Apache Milagro&#x27;s Multi-Party Computation library (libmpc) is the latest addition to the project (as of June 2022), and uses the <a href="/docs/amcl-c-api-2.0.0">Apache Milagro C Library</a> to implement Multi-Party Computation. It offers and API to allow for customs computations to be perfomed.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="building-and-running-libmpc">Building and running libmpc<a class="hash-link" href="#building-and-running-libmpc" title="Direct link to heading">​</a></h2><p>The preferred way to get libmpc built and tested is through the use of docker.</p><p>Once your docker installation is correctly set-up, simply run:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain"> git clone https://github.com/apache/incubator-milagro-MPC.git &amp;&amp; cd incubator-milagro-MPC</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path 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"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain"> docker build -t libmpc .</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path 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"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>If you want to run tests and ensure all routines perform as expected, run:</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">docker run --cap-add SYS_PTRACE --rm libmpc</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path 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"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>This procedure has been tested on all major platforms (Linux, Mac OS, Windows) on arm64 and x86_64 platforms. If your build or execution fails, please open a bug.</p><p>You can also build and run libmpc natively, and you can build the docker image for multiple platforms. To know more, check out <a href="https://github.com/apache/incubator-milagro-MPC" target="_blank" rel="noopener noreferrer">the readme in the GitHub repository</a>.</p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="api-documentation">API Documentation<a class="hash-link" href="#api-documentation" title="Direct link to heading">​</a></h2><p>Doxygen support is available for Apache Milagro Multi-Party Computation (MPC) Library.</p><p>If you build libmpc, you can generate the documentation by running</p><div class="codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">make doc</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path 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"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>in the build directory. If you use Docker, and you want the build to generate the documentation, make sure <code>build_doc</code> is set to <code>true</code>.</p><p>An online version of the Doxygen output is available for viewing in a web browser <a target="_blank" href="/mpcdocs/index.html">here</a>.</p><p>Supported admonition types are: caution, note, important, tip, warning.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/dta-details/authentication"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Authentication</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/zkp-mfa-overview"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">ZKP-MFA Overview</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#building-and-running-libmpc" class="table-of-contents__link toc-highlight">Building and running libmpc</a></li><li><a href="#api-documentation" class="table-of-contents__link toc-highlight">API Documentation</a></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/support/index.html b/docs/support/index.html
index 7062a78..6df7ab1 100644
--- a/docs/support/index.html
+++ b/docs/support/index.html
@@ -1,79 +1,22 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Support · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="## Issues"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Support · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="## Issues"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive siteNavItemActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>Project Info</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-support">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">Support | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/support"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Support | Apache Milagro"><meta data-rh="true" name="description" content="Issues"><meta data-rh="true" property="og:description" content="Issues"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/support"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/support" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/support" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">Support</h1></header><article><div><span><h2><a class="anchor" aria-hidden="true" id="issues"></a><a href="#issues" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Issues</h2>
-<p>Please report any bugs or feature requests using the &quot;Issues&quot; tab within our GitHub repositories:</p>
-<ul>
-<li><a href="https://github.com/apache/incubator-milagro/issues"><strong>incubator-milagro</strong> (used to build this website)</a></li>
-<li><a href="https://github.com/apache/incubator-milagro-crypto-c/issues"><strong>incubator-milagro-crypto-c</strong> (standards compliant cryptographic library written in C)</a></li>
-<li><a href="https://github.com/apache/incubator-milagro-MPC/issues"><strong>incubator-milagro-MPC</strong> (Multi-Party Computation Library)</a></li>
-<li><a href="https://github.com/apache/incubator-milagro-crypto-js/issues"><strong>incubator-milagro-crypto-js</strong> (standards compliant cryptographic library written in JavaScript)</a></li>
-<li><a href="https://github.com/apache/incubator-milagro-crypto-rust/issues"><strong>incubator-milagro-crypto-rust</strong> (standards compliant cryptographic library written in Rust)</a></li>
-<li><a href="https://github.com/apache/incubator-milagro-dta/issues"><strong>incubator-milagro-dta</strong> (Decentralized Trust Authority (D-TA) - a collaborative key management server)</a></li>
-</ul>
-<h2><a class="anchor" aria-hidden="true" id="get-involved"></a><a href="#get-involved" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Get Involved</h2>
-<p>To join the Milagro developer's mailing list, please send an email to:
-<a href="mailto:dev-subscribe@milagro.apache.org?Subject=Subscribe" target="_top">dev-subscribe @ milagro.apache.org</a></p>
-<h2><a class="anchor" aria-hidden="true" id="milagro-overview"></a><a href="#milagro-overview" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Milagro Overview</h2>
-<p>Learn more about Milagro.  <a href="/docs/milagro-intro">Read the docs.</a></p>
-<h2><a class="anchor" aria-hidden="true" id="like-cutting-edge-crypto"></a><a href="#like-cutting-edge-crypto" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Like cutting-edge crypto?</h2>
-<p>Join us.  <a href="/docs/contributor-guide">Become a contributor.</a></p>
-<h2><a class="anchor" aria-hidden="true" id="need-status"></a><a href="#need-status" aria-hidden="true" class="hash-link"><svg class="hash-link-icon" aria-hidden="true" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path></svg></a>Need Status?</h2>
-<p>We blog. <a href="http://milagro.apache.org/blog/">No, really.</a></p>
-<!--
-Supported admonition types are: caution, note, important, tip, warning.
--->
-</span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/downloads"><span class="arrow-prev">← </span><span>Downloads</span></a><a class="docs-next button" href="/help"><span>Next</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"><ul class="toc-headings"><li><a href="#issues">Issues</a></li><li><a href="#get-involved">Get Involved</a></li><li><a href="#milagro-overview">Milagro Overview</a></li><li><a href="#like-cutting-edge-crypto">Like cutting-edge crypto?</a></li><li><a href="#need-status">Need Status?</a></li></ul></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/amcl-overview">AMCL Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/contributor-guide">Project Info</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/downloads">Downloads</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/support">Support</a></li></ul></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">Project Info</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">Support</span><meta itemprop="position" content="2"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Support</h1></header><h2 class="anchor anchorWithStickyNavbar_LWe7" id="issues">Issues<a class="hash-link" href="#issues" title="Direct link to heading">​</a></h2><p>Please report any bugs or feature requests using the &quot;Issues&quot; tab within our GitHub repositories:</p><ul><li><a href="https://github.com/apache/incubator-milagro/issues" target="_blank" rel="noopener noreferrer"><strong>incubator-milagro</strong> (used to build this website)</a></li><li><a href="https://github.com/apache/incubator-milagro-crypto-c/issues" target="_blank" rel="noopener noreferrer"><strong>incubator-milagro-crypto-c</strong> (standards compliant cryptographic library written in C)</a></li><li><a href="https://github.com/apache/incubator-milagro-MPC/issues" target="_blank" rel="noopener noreferrer"><strong>incubator-milagro-MPC</strong> (Multi-Party Computation Library)</a></li><li><a href="https://github.com/apache/incubator-milagro-crypto-js/issues" target="_blank" rel="noopener noreferrer"><strong>incubator-milagro-crypto-js</strong> (standards compliant cryptographic library written in JavaScript)</a></li><li><a href="https://github.com/apache/incubator-milagro-crypto-rust/issues" target="_blank" rel="noopener noreferrer"><strong>incubator-milagro-crypto-rust</strong> (standards compliant cryptographic library written in Rust)</a></li><li><a href="https://github.com/apache/incubator-milagro-dta/issues" target="_blank" rel="noopener noreferrer"><strong>incubator-milagro-dta</strong> (Decentralized Trust Authority (D-TA) - a collaborative key management server)</a></li></ul><h2 class="anchor anchorWithStickyNavbar_LWe7" id="get-involved">Get Involved<a class="hash-link" href="#get-involved" title="Direct link to heading">​</a></h2><p>To join the Milagro developer&#x27;s mailing list, please send an email to:</p><a href="mailto:dev-subscribe@milagro.apache.org?Subject=Subscribe" target="_top" rel="noopener noreferrer">dev-subscribe @ milagro.apache.org</a><h2 class="anchor anchorWithStickyNavbar_LWe7" id="milagro-overview">Milagro Overview<a class="hash-link" href="#milagro-overview" title="Direct link to heading">​</a></h2><p>Learn more about Milagro.  <a href="/docs/milagro-intro">Read the docs.</a></p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="like-cutting-edge-crypto">Like cutting-edge crypto?<a class="hash-link" href="#like-cutting-edge-crypto" title="Direct link to heading">​</a></h2><p>Join us.  <a href="/docs/contributor-guide">Become a contributor.</a></p><h2 class="anchor anchorWithStickyNavbar_LWe7" id="need-status">Need Status?<a class="hash-link" href="#need-status" title="Direct link to heading">​</a></h2><p>We blog. <a href="http://milagro.apache.org/blog/" target="_blank" rel="noopener noreferrer">No, really.</a></p><p>Supported admonition types are: caution, note, important, tip, warning.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/downloads"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Downloads</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#issues" class="table-of-contents__link toc-highlight">Issues</a></li><li><a href="#get-involved" class="table-of-contents__link toc-highlight">Get Involved</a></li><li><a href="#milagro-overview" class="table-of-contents__link toc-highlight">Milagro Overview</a></li><li><a href="#like-cutting-edge-crypto" class="table-of-contents__link toc-highlight">Like cutting-edge crypto?</a></li><li><a href="#need-status" class="table-of-contents__link toc-highlight">Need Status?</a></li></ul></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/zkp-mfa-api/index.html b/docs/zkp-mfa-api/index.html
index fdd2182..bbcb29e 100644
--- a/docs/zkp-mfa-api/index.html
+++ b/docs/zkp-mfa-api/index.html
@@ -1,67 +1,23 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Zero Knowledge Proof MFA API · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content=":::tip WE NEED HELP DOCUMENTING!"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Zero Knowledge Proof MFA API · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content=":::tip WE NEED HELP DOCUMENTING!"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>ZKP-MFA Clients/Servers</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem navListItemActive"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-zkp-mfa-api">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">Zero Knowledge Proof MFA API | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/zkp-mfa-api"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Zero Knowledge Proof MFA API | Apache Milagro"><meta data-rh="true" name="description" content="Interested in becoming a contributor? Milagro is looking for you."><meta data-rh="true" property="og:description" content="Interested in becoming a contributor? Milagro is looking for you."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/zkp-mfa-api"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/zkp-mfa-api" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/zkp-mfa-api" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">Zero Knowledge Proof MFA API</h1></header><article><div><span>
-    <div class="admonition admonition-tip">
-      <div class="admonition-heading">
-        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="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"/></svg></div>  WE NEED HELP DOCUMENTING!</h5>
-      </div>
-      <div class="admonition-content">
-    <p>Interested in becoming a contributor? Milagro is looking for you.</p>
-<p><a href="/docs/contributor-guide.html">CONTRIBUTOR'S GUIDE</a>.</p>
-</div></div><!--
-Supported admonition types are: caution, note, important, tip, warning.
---></span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/zkp-mfa-overview"><span class="arrow-prev">← </span><span>ZKP-MFA Overview</span></a><a class="docs-next button" href="/docs/contributor-guide"><span>Contributor&#x27;s Guide</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/amcl-overview">AMCL Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">ZKP-MFA Clients/Servers</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">ZKP-MFA API</span><meta itemprop="position" content="2"></li></ul></nav><div class="theme-doc-markdown markdown"><header><h1>Zero Knowledge Proof MFA API</h1></header><div class="theme-admonition theme-admonition-tip alert alert--success admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 12 16"><path fill-rule="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"></path></svg></span>WE NEED HELP DOCUMENTING!</div><div class="admonitionContent_S0QG"><p>Interested in becoming a contributor? Milagro is looking for you.
+<a href="/docs/contributor-guide">CONTRIBUTOR&#x27;S GUIDE</a>.</p></div></div><p>Supported admonition types are: caution, note, important, tip, warning.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/zkp-mfa-overview"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">ZKP-MFA Overview</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/contributor-guide"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Contributor&#x27;s Guide</div></a></nav></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/zkp-mfa-overview/index.html b/docs/zkp-mfa-overview/index.html
index 34c21d9..28052d3 100644
--- a/docs/zkp-mfa-overview/index.html
+++ b/docs/zkp-mfa-overview/index.html
@@ -1,67 +1,23 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Zero Knowledge Proof MFA Overview · Apache Milagro</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content=":::tip WE NEED HELP DOCUMENTING!"/><meta name="docsearch:language" content="en"/><meta property="og:title" content="Zero Knowledge Proof MFA Overview · Apache Milagro"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content=":::tip WE NEED HELP DOCUMENTING!"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body class="sideNavVisible separateOnPageNav"><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class="siteNavGroupActive"><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class="siteNavGroupActive"><a href="/docs/support" target="_self">Support</a></li><li class="siteNavGroupActive"><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class="siteNavGroupActive"><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="docsNavContainer" id="docsNav"><nav class="toc"><div class="toggleNav"><section class="navWrapper wrapper"><div class="navBreadcrumb wrapper"><div class="navToggle" id="navToggler"><div class="hamburger-menu"><div class="line1"></div><div class="line2"></div><div class="line3"></div></div></div><h2><i>›</i><span>ZKP-MFA Clients/Servers</span></h2><div class="tocToggler" id="tocToggler"><i class="icon-toc"></i></div></div><div class="navGroups"><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">About Milagro<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/milagro-intro">Milagro Introduction</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-crypto">Milagro Crypto</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-protocols">Milagro Protocols</a></li><li class="navListItem"><a class="navItem" href="/docs/milagro-design">Milagro Design</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">AMCL Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/amcl-overview">AMCL Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/amcl-c-api-2.0.0">AMCL C API 2.0.0</a></li><div class="navGroup subNavGroup"><h4 class="navGroupSubcategoryTitle">AMCL JavaScript API 1.0.0</h4><ul><li class="navListItem"><a class="navItem" href="/docs/cryptojs/aes">AES</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/big">BIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls">BLS</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls192">BLS192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/bls256">BLS256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/dbig">DBIG</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecdh">ECDH</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp">ECP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp2">ECP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp4">ECP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ecp8">ECP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/ff">FF</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp">FP</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp2">FP2</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp4">FP4</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp8">FP8</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp12">FP12</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp16">FP16</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp24">FP24</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/fp48">FP48</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/gcm">GCM</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash256">HASH256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash384">HASH384</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/hash512">HASH512</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin">MPIN</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin192">MPIN192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/mpin256">MPIN256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair">PAIR</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair192">PAIR192</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/pair256">PAIR256</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rand">RAND</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/rsa">RSA</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/sha3">SHA3</a></li><li class="navListItem"><a class="navItem" href="/docs/cryptojs/unit64">UInt64</a></li></ul></div></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">D-TA<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/d-ta-overview">D-TA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/quickstart">Quick Start</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/api">API</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/configuration">Configuration</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/identity-documents">Identity Documents</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/encrypted-envelope">Encrypted Envelope</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/ipfs">IPFS</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/plugins-overview">Plugins Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/dta-details/authentication">Authentication</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">MPC Library<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/mpc-api-0.1">Multi-Party Computation Library 0.1</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">ZKP-MFA Clients/Servers<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem navListItemActive"><a class="navItem" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="navListItem"><a class="navItem" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></div><div class="navGroup"><h3 class="navGroupCategoryTitle collapsible">Project Info<span class="arrow"><svg width="24" height="24" viewBox="0 0 24 24"><path fill="#565656" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path><path d="M0 0h24v24H0z" fill="none"></path></svg></span></h3><ul class="hide"><li class="navListItem"><a class="navItem" href="/docs/contributor-guide">Contributor&#x27;s Guide</a></li><li class="navListItem"><a class="navItem" href="/docs/downloads">Downloads</a></li><li class="navListItem"><a class="navItem" href="/docs/support">Support</a></li></ul></div></div></section></div><script>
-            var coll = document.getElementsByClassName('collapsible');
-            var checkActiveCategory = true;
-            for (var i = 0; i < coll.length; i++) {
-              var links = coll[i].nextElementSibling.getElementsByTagName('*');
-              if (checkActiveCategory){
-                for (var j = 0; j < links.length; j++) {
-                  if (links[j].classList.contains('navListItemActive')){
-                    coll[i].nextElementSibling.classList.toggle('hide');
-                    coll[i].childNodes[1].classList.toggle('rotate');
-                    checkActiveCategory = false;
-                    break;
-                  }
-                }
-              }
+<!doctype html>
+<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-zkp-mfa-overview">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">Zero Knowledge Proof MFA Overview | Apache Milagro</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/docs/zkp-mfa-overview"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Zero Knowledge Proof MFA Overview | Apache Milagro"><meta data-rh="true" name="description" content="Interested in becoming a contributor? Milagro is looking for you."><meta data-rh="true" property="og:description" content="Interested in becoming a contributor? Milagro is looking for you."><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/docs/zkp-mfa-overview"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/zkp-mfa-overview" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/docs/zkp-mfa-overview" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
 
-              coll[i].addEventListener('click', function() {
-                var arrow = this.childNodes[1];
-                arrow.classList.toggle('rotate');
-                var content = this.nextElementSibling;
-                content.classList.toggle('hide');
-              });
-            }
 
-            document.addEventListener('DOMContentLoaded', function() {
-              createToggler('#navToggler', '#docsNav', 'docsSliderActive');
-              createToggler('#tocToggler', 'body', 'tocActive');
 
-              var headings = document.querySelector('.toc-headings');
-              headings && headings.addEventListener('click', function(event) {
-                var el = event.target;
-                while(el !== headings){
-                  if (el.tagName === 'A') {
-                    document.body.classList.remove('tocActive');
-                    break;
-                  } else{
-                    el = el.parentNode;
-                  }
-                }
-              }, false);
-
-              function createToggler(togglerSelector, targetSelector, className) {
-                var toggler = document.querySelector(togglerSelector);
-                var target = document.querySelector(targetSelector);
-
-                if (!toggler) {
-                  return;
-                }
-
-                toggler.onclick = function(event) {
-                  event.preventDefault();
-
-                  target.classList.toggle(className);
-                };
-              }
-            });
-        </script></nav></div><div class="container mainContainer docsContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1 id="__docusaurus" class="postHeaderTitle">Zero Knowledge Proof MFA Overview</h1></header><article><div><span>
-    <div class="admonition admonition-tip">
-      <div class="admonition-heading">
-        <h5><div class="admonition-icon"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill-rule="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"/></svg></div>  WE NEED HELP DOCUMENTING!</h5>
-      </div>
-      <div class="admonition-content">
-    <p>Interested in becoming a contributor? Milagro is looking for you.</p>
-<p><a href="/docs/contributor-guide.html">CONTRIBUTOR'S GUIDE</a>.</p>
-</div></div><!--
-Supported admonition types are: caution, note, important, tip, warning.
---></span></div></article></div><div class="docs-prevnext"><a class="docs-prev button" href="/docs/mpc-api-0.1"><span class="arrow-prev">← </span><span>Multi-Party Computation Library 0.1</span></a><a class="docs-next button" href="/docs/zkp-mfa-api"><span>ZKP-MFA API</span><span class="arrow-next"> →</span></a></div></div></div><nav class="onPageNav"></nav></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebar_njMd"><nav class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/milagro-intro">About Milagro</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/amcl-overview">AMCL Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/d-ta-overview">D-TA</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/mpc-api-0.1">MPC Library</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/zkp-mfa-overview">ZKP-MFA Clients/Servers</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/zkp-mfa-overview">ZKP-MFA Overview</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/zkp-mfa-api">ZKP-MFA API</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/contributor-guide">Project Info</a></div></li></ul></nav></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_OVgt"><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"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">ZKP-MFA Clients/Servers</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">ZKP-MFA Overview</span><meta itemprop="position" content="2"></li></ul></nav><div class="theme-doc-markdown markdown"><header><h1>Zero Knowledge Proof MFA Overview</h1></header><div class="theme-admonition theme-admonition-tip alert alert--success admonition_LlT9"><div class="admonitionHeading_tbUL"><span class="admonitionIcon_kALy"><svg viewBox="0 0 12 16"><path fill-rule="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"></path></svg></span>WE NEED HELP DOCUMENTING!</div><div class="admonitionContent_S0QG"><p>Interested in becoming a contributor? Milagro is looking for you.
+<a href="/docs/contributor-guide">CONTRIBUTOR&#x27;S GUIDE</a>.</p></div></div><p>Supported admonition types are: caution, note, important, tip, warning.</p></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/mpc-api-0.1"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Multi-Party Computation Library 0.1</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/zkp-mfa-api"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">ZKP-MFA API</div></a></nav></div></div></div></div></main></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/files/amcl-doxygen-2.0.0.pdf b/files/amcl-doxygen-2.0.0.pdf
old mode 100755
new mode 100644
Binary files differ
diff --git a/help/index.html b/help/index.html
index 9f08167..fd9f189 100644
--- a/help/index.html
+++ b/help/index.html
@@ -1,7 +1,22 @@
-<!DOCTYPE html><html lang=""><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Apache Milagro · Core security infrastructure for decentralized networks</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Core security infrastructure for decentralized networks"/><meta property="og:title" content="Apache Milagro · Core security infrastructure for decentralized networks"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="Core security infrastructure for decentralized networks"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class=""><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class=""><a href="/docs/support" target="_self">Support</a></li><li class=""><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class=""><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="docMainWrapper wrapper"><div class="container mainContainer documentContainer postContainer"><div class="wrapper"><div class="post"><header class="postHeader"><h1>Get involved.</h1></header><p>Send an email to <a href="mailto:dev-subscribe@milagro.apache.org?Subject=Subscribe" target="_top">dev-subscribe @ milagro.apache.org</a> to join our mailing list.</p><div class="gridBlock"><div class="blockElement threeByGridBlock"><div class="blockContent"><h2><div><span><p>Milagro Overview</p>
-</span></div></h2><div><span><p>Learn more about Milagro. <a href="/docs/milagro-intro.html">Read the docs.</a></p>
-</span></div></div></div><div class="blockElement threeByGridBlock"><div class="blockContent"><h2><div><span><p>Like cutting-edge crypto?</p>
-</span></div></h2><div><span><p>Join us. <a href="/docs/contributor-guide.html">Become a contributor.</a></p>
-</span></div></div></div><div class="blockElement threeByGridBlock"><div class="blockContent"><h2><div><span><p>Need Status?</p>
-</span></div></h2><div><span><p>We blog. <a href="/docs/../blog/">No, really.</a></p>
-</span></div></div></div></div></div></div></div></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<!doctype html>
+<html lang="en" dir="ltr" class="plugin-pages plugin-id-default">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">Apache Milagro</title><meta data-rh="true" property="og:title" content="Apache Milagro"><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/help"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/help"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/help" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/help" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
+
+
+
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><div class="docMainWrapper wrapper"><div class="mainContainer documentContainer postContainer"><div class="post"><header class="postHeader"><h1>Get involved.</h1></header><p>Send an email to <a href="mailto:dev-subscribe@milagro.apache.org?Subject=Subscribe" target="_top">dev-subscribe @ milagro.apache.org</a> to join our mailing list.</p><div contents="[object Object],[object Object],[object Object]" layout="threeColumn"></div></div></div></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/images/7000x1080&text=Slide-One.png b/images/7000x1080&text=Slide-One.png
index a7c2736..c59e88f 100644
--- a/images/7000x1080&text=Slide-One.png
+++ b/images/7000x1080&text=Slide-One.png
Binary files differ
diff --git a/images/7000x1080&text=Slide-Three.png b/images/7000x1080&text=Slide-Three.png
index 1a429e9..855a748 100644
--- a/images/7000x1080&text=Slide-Three.png
+++ b/images/7000x1080&text=Slide-Three.png
Binary files differ
diff --git a/images/7000x1080&text=Slide-Two.png b/images/7000x1080&text=Slide-Two.png
index 329971b..76dcf6e 100644
--- a/images/7000x1080&text=Slide-Two.png
+++ b/images/7000x1080&text=Slide-Two.png
Binary files differ
diff --git a/images/Milagro-Crypto-Library.png b/images/Milagro-Crypto-Library.png
index 7c17823..20e06e1 100644
--- a/images/Milagro-Crypto-Library.png
+++ b/images/Milagro-Crypto-Library.png
Binary files differ
diff --git a/images/Milagro-MFA.jpg b/images/Milagro-MFA.jpg
index ef8a07e..f04b1f0 100644
--- a/images/Milagro-MFA.jpg
+++ b/images/Milagro-MFA.jpg
Binary files differ
diff --git a/images/Milagro-TLS.jpg b/images/Milagro-TLS.jpg
index 97f3c8b..d7669be 100644
--- a/images/Milagro-TLS.jpg
+++ b/images/Milagro-TLS.jpg
Binary files differ
diff --git a/images/Milagro-TLS2.png b/images/Milagro-TLS2.png
index 28531f4..b55709e 100644
--- a/images/Milagro-TLS2.png
+++ b/images/Milagro-TLS2.png
Binary files differ
diff --git a/images/apache-feather.png b/images/apache-feather.png
index d7db4f9..3dcc64d 100644
--- a/images/apache-feather.png
+++ b/images/apache-feather.png
Binary files differ
diff --git a/images/apache-incubator.png b/images/apache-incubator.png
index b37e747..b38ab2f 100644
--- a/images/apache-incubator.png
+++ b/images/apache-incubator.png
Binary files differ
diff --git a/images/milagro-footer.png b/images/milagro-footer.png
index e970c36..8fb02e3 100644
--- a/images/milagro-footer.png
+++ b/images/milagro-footer.png
Binary files differ
diff --git a/images/milagro-header.png b/images/milagro-header.png
index 6beedcf..92ca506 100644
--- a/images/milagro-header.png
+++ b/images/milagro-header.png
Binary files differ
diff --git a/images/milagro-hero-inc-subheader.png b/images/milagro-hero-inc-subheader.png
index 79bf6f0..a188020 100644
--- a/images/milagro-hero-inc-subheader.png
+++ b/images/milagro-hero-inc-subheader.png
Binary files differ
diff --git a/images/milagro-hero.png b/images/milagro-hero.png
index 9d4545a..9eb6c7e 100644
--- a/images/milagro-hero.png
+++ b/images/milagro-hero.png
Binary files differ
diff --git a/images/milagro-mfa-3-things.png b/images/milagro-mfa-3-things.png
index 2e11599..9ed63d0 100644
--- a/images/milagro-mfa-3-things.png
+++ b/images/milagro-mfa-3-things.png
Binary files differ
diff --git a/images/milagro_logo.svg b/images/milagro_logo.svg
new file mode 100644
index 0000000..b172a8c
--- /dev/null
+++ b/images/milagro_logo.svg
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="581.8px" height="117px" viewBox="0 0 581.8 117" enable-background="new 0 0 581.8 117" xml:space="preserve">
+<g>
+	<path fill="#3E454C" d="M179.1,95h-6.9L148,34.1V95h-9.9V22.9h15.7l21.9,56.3L198,22.9h15.7V95h-9.9V34.1L179.1,95z"/>
+	<path fill="#3E454C" d="M230.6,95V22.9h9.9V95H230.6z"/>
+	<path fill="#3E454C" d="M257.5,95V22.9h9.9v63.2h31.301V95H257.5z"/>
+	<path fill="#3E454C" d="M354,95L348.3,79.7h-30.7L312.1,95h-10.8l27.9-72.1h8.699L365.4,95H354z M321,70.8h24.201L333.1,37.9H333
+		L321,70.8z"/>
+	<path fill="#3E454C" d="M408.6,63.9V55h28.2v27.4c-6.9,8.8-17.7,13.8-29.6,13.8c-22,0-38.701-14.9-38.701-37.3
+		c0-21.3,17.4-37.3,38.701-37.3c11.1,0,21,4.9,27.898,12.8l-7,5.8c-5-5.7-12.699-9.7-20.898-9.7C391,30.5,379,42.5,379,58.9
+		c0,17.5,11.701,28.4,28.201,28.4c7.6,0,14.6-2.7,19.699-7.5v-16h-18.3V63.9z"/>
+	<path fill="#3E454C" d="M491.201,95l-21.602-30.5h-7.398V95h-9.9V22.9h21.4c11,0,24.6,5.8,24.6,20.7c0,12.3-8.801,18.4-17.6,20.3
+		L503.599,95H491.201z M473.201,31.8h-11v23.9h9c9.6,0,16.699-3.5,16.699-11.7C487.8,36.6,481.9,31.8,473.201,31.8z"/>
+	<path fill="#3E454C" d="M544.8,96.2c-21,0-37.1-16.7-37.1-37.3s16.1-37.3,37.1-37.3s37.1,16.7,37.1,37.3
+		C581.8,79.5,565.8,96.2,544.8,96.2z M544.8,30.5c-15.301,0-26.6,12.5-26.6,28.4s11.199,28.4,26.6,28.4s26.6-12.5,26.6-28.4
+		S560.099,30.5,544.8,30.5z"/>
+</g>
+<g>
+	<path fill="#C2FF17" d="M85.9,105.4L1.8,66.2C0.7,65.7,0,64.6,0,63.4v-49c0-2.3,2.4-3.8,4.4-2.8l84.1,39.2c1.1,0.5,1.8,1.6,1.8,2.8
+		v49C90.3,104.9,88,106.4,85.9,105.4z"/>
+	<g>
+		<path fill="#31BCA4" d="M88.8,52.3L0,93.7v20.2c0,2.3,2.4,3.8,4.4,2.8l84.1-39.2c1.1-0.5,1.8-1.6,1.8-2.8V53.6
+			c0-0.7-0.2-1.3-0.5-1.8l0,0l0,0l0,0l0,0c-0.2-0.4-0.6-0.6-1-0.9c0.2,0.2,0.3,0.4,0.3,0.7C89.1,51.9,89,52.1,88.8,52.3z"/>
+	</g>
+	<g>
+		<path fill="#40D37B" d="M1.6,64.7l88.8-41.4V3.1c0-2.3-2.4-3.8-4.4-2.8L1.8,39.5C0.7,40,0,41.1,0,42.3V63.4
+			c0,0.699,0.2,1.3,0.5,1.8l0,0l0,0l0,0l0,0c0.2,0.399,0.6,0.6,1,0.899C1.3,65.9,1.2,65.7,1.2,65.4C1.2,65.1,1.3,64.9,1.6,64.7z"/>
+	</g>
+</g>
+</svg>
diff --git a/img/Chow-ChooProtocol.png b/img/Chow-ChooProtocol.png
new file mode 100644
index 0000000..fa96b89
--- /dev/null
+++ b/img/Chow-ChooProtocol.png
Binary files differ
diff --git a/img/MILAGRO_LOGO.svg b/img/MILAGRO_LOGO.svg
index d0172bc..2e5fded 100644
--- a/img/MILAGRO_LOGO.svg
+++ b/img/MILAGRO_LOGO.svg
@@ -1 +1,40 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="581.8" height="117" viewBox="0 0 581.8 117"><path d="M179.1 95h-6.9L148 34.1V95h-9.9V22.9h15.7l21.9 56.3L198 22.9h15.7V95h-9.9V34.1L179.1 95zm51.5 0V22.9h9.9V95h-9.9zm26.9 0V22.9h9.9v63.2h31.3V95h-41.2zm96.5 0l-5.7-15.3h-30.7L312.1 95h-10.8l27.9-72.1h8.7L365.4 95H354zm-33-24.2h24.2l-12.1-32.9h-.1l-12 32.9zm87.6-6.9V55h28.2v27.4c-6.9 8.8-17.7 13.8-29.6 13.8-22 0-38.7-14.9-38.7-37.3 0-21.3 17.4-37.3 38.7-37.3 11.1 0 21 4.9 27.9 12.8l-7 5.8c-5-5.7-12.7-9.7-20.9-9.7-16.2 0-28.2 12-28.2 28.4 0 17.5 11.7 28.4 28.2 28.4 7.6 0 14.6-2.7 19.7-7.5v-16h-18.3zM491.2 95l-21.6-30.5h-7.4V95h-9.9V22.9h21.4c11 0 24.6 5.8 24.6 20.7 0 12.3-8.8 18.4-17.6 20.3L503.6 95h-12.4zm-18-63.2h-11v23.9h9c9.6 0 16.7-3.5 16.7-11.7-.1-7.4-6-12.2-14.7-12.2zm71.6 64.4c-21 0-37.1-16.7-37.1-37.3 0-20.6 16.1-37.3 37.1-37.3s37.1 16.7 37.1 37.3c-.1 20.6-16.1 37.3-37.1 37.3zm0-65.7c-15.3 0-26.6 12.5-26.6 28.4s11.2 28.4 26.6 28.4 26.6-12.5 26.6-28.4-11.3-28.4-26.6-28.4z" fill="#3e454c"/><path d="M85.9 105.4L1.8 66.2C.7 65.7 0 64.6 0 63.4v-49c0-2.3 2.4-3.8 4.4-2.8l84.1 39.2c1.1.5 1.8 1.6 1.8 2.8v49c0 2.3-2.3 3.8-4.4 2.8z" fill="#c2ff17"/><path d="M88.8 52.3L0 93.7v20.2c0 2.3 2.4 3.8 4.4 2.8l84.1-39.2c1.1-.5 1.8-1.6 1.8-2.8V53.6c0-.7-.2-1.3-.5-1.8-.2-.4-.6-.6-1-.9.2.2.3.4.3.7 0 .3-.1.5-.3.7z" fill="#31bca4"/><path d="M1.6 64.7l88.8-41.4V3.1C90.4.8 88-.7 86 .3L1.8 39.5C.7 40 0 41.1 0 42.3v21.1c0 .7.2 1.3.5 1.8.2.4.6.6 1 .9-.2-.2-.3-.4-.3-.7 0-.3.1-.5.4-.7z" fill="#40d37b"/></svg>
\ No newline at end of file
+<svg version="1.1"
+	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+	 x="0px" y="0px" width="581.8px" height="117px" viewBox="0 0 581.8 117" style="enable-background:new 0 0 581.8 117;"
+	 xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#3E454C;}
+	.st1{fill:#C2FF17;}
+	.st2{fill:#31BCA4;}
+	.st3{fill:#40D37B;}
+</style>
+<defs>
+</defs>
+<g>
+	<path class="st0" d="M179.1,95h-6.9L148,34.1V95h-9.9V22.9h15.7l21.9,56.3L198,22.9h15.7V95h-9.9V34.1L179.1,95z"/>
+	<path class="st0" d="M230.6,95V22.9h9.9V95H230.6z"/>
+	<path class="st0" d="M257.5,95V22.9h9.9v63.2h31.3V95H257.5z"/>
+	<path class="st0" d="M354,95l-5.7-15.3h-30.7L312.1,95h-10.8l27.9-72.1h8.7L365.4,95H354z M321,70.8h24.2l-12.1-32.9H333L321,70.8z
+		"/>
+	<path class="st0" d="M408.6,63.9V55h28.2v27.4c-6.9,8.8-17.7,13.8-29.6,13.8c-22,0-38.7-14.9-38.7-37.3c0-21.3,17.4-37.3,38.7-37.3
+		c11.1,0,21,4.9,27.9,12.8l-7,5.8c-5-5.7-12.7-9.7-20.9-9.7C391,30.5,379,42.5,379,58.9c0,17.5,11.7,28.4,28.2,28.4
+		c7.6,0,14.6-2.7,19.7-7.5v-16H408.6z"/>
+	<path class="st0" d="M491.2,95l-21.6-30.5h-7.4V95h-9.9V22.9h21.4c11,0,24.6,5.8,24.6,20.7c0,12.3-8.8,18.4-17.6,20.3L503.6,95
+		H491.2z M473.2,31.8h-11v23.9h9c9.6,0,16.7-3.5,16.7-11.7C487.8,36.6,481.9,31.8,473.2,31.8z"/>
+	<path class="st0" d="M544.8,96.2c-21,0-37.1-16.7-37.1-37.3c0-20.6,16.1-37.3,37.1-37.3c21,0,37.1,16.7,37.1,37.3
+		C581.8,79.5,565.8,96.2,544.8,96.2z M544.8,30.5c-15.3,0-26.6,12.5-26.6,28.4s11.2,28.4,26.6,28.4s26.6-12.5,26.6-28.4
+		S560.1,30.5,544.8,30.5z"/>
+</g>
+<g>
+	<path class="st1" d="M85.9,105.4L1.8,66.2C0.7,65.7,0,64.6,0,63.4v-49c0-2.3,2.4-3.8,4.4-2.8l84.1,39.2c1.1,0.5,1.8,1.6,1.8,2.8v49
+		C90.3,104.9,88,106.4,85.9,105.4z"/>
+	<g>
+		<path class="st2" d="M88.8,52.3L0,93.7l0,20.2c0,2.3,2.4,3.8,4.4,2.8l84.1-39.2c1.1-0.5,1.8-1.6,1.8-2.8V53.6
+			c0-0.7-0.2-1.3-0.5-1.8l0,0l0,0c0,0,0,0,0,0l0,0c-0.2-0.4-0.6-0.6-1-0.9c0.2,0.2,0.3,0.4,0.3,0.7C89.1,51.9,89,52.1,88.8,52.3z"/>
+	</g>
+	<g>
+		<path class="st3" d="M1.6,64.7l88.8-41.4V3.1c0-2.3-2.4-3.8-4.4-2.8L1.8,39.5C0.7,40,0,41.1,0,42.3v21.1c0,0.7,0.2,1.3,0.5,1.8
+			l0,0c0,0,0,0,0,0c0,0,0,0,0,0l0,0c0.2,0.4,0.6,0.6,1,0.9c-0.2-0.2-0.3-0.4-0.3-0.7C1.2,65.1,1.3,64.9,1.6,64.7z"/>
+	</g>
+</g>
+</svg>
diff --git a/img/MILAGRO_emblem.svg b/img/MILAGRO_emblem.svg
index 32afb59..df1a8c1 100644
--- a/img/MILAGRO_emblem.svg
+++ b/img/MILAGRO_emblem.svg
@@ -1 +1,24 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="90.3" height="117" viewBox="0 0 90.3 117"><path d="M85.9 105.4L1.8 66.2C.7 65.7 0 64.6 0 63.4v-49c0-2.3 2.4-3.8 4.4-2.8l84.1 39.2c1.1.5 1.8 1.6 1.8 2.8v49c0 2.3-2.3 3.8-4.4 2.8z" fill="#c2ff17"/><path d="M88.8 52.3L0 93.7v20.2c0 2.3 2.4 3.8 4.4 2.8l84.1-39.2c1.1-.5 1.8-1.6 1.8-2.8V53.6c0-.7-.2-1.3-.5-1.8-.2-.4-.6-.6-1-.9.2.2.3.4.3.7 0 .3-.1.5-.3.7z" fill="#31bca4"/><path d="M1.6 64.7l88.8-41.4V3.1C90.4.8 88-.7 86 .3L1.8 39.5C.7 40 0 41.1 0 42.3v21.1c0 .7.2 1.3.5 1.8.2.4.6.6 1 .9-.2-.2-.3-.4-.3-.7 0-.3.1-.5.4-.7z" fill="#40d37b"/></svg>
\ No newline at end of file
+<svg version="1.1"
+	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+	 x="0px" y="0px" width="90.3px" height="117px" viewBox="0 0 90.3 117" style="enable-background:new 0 0 90.3 117;"
+	 xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#C2FF17;}
+	.st1{fill:#31BCA4;}
+	.st2{fill:#40D37B;}
+</style>
+<defs>
+</defs>
+<g>
+	<path class="st0" d="M85.9,105.4L1.8,66.2C0.7,65.7,0,64.6,0,63.4v-49c0-2.3,2.4-3.8,4.4-2.8l84.1,39.2c1.1,0.5,1.8,1.6,1.8,2.8v49
+		C90.3,104.9,88,106.4,85.9,105.4z"/>
+	<g>
+		<path class="st1" d="M88.8,52.3L0,93.7l0,20.2c0,2.3,2.4,3.8,4.4,2.8l84.1-39.2c1.1-0.5,1.8-1.6,1.8-2.8V53.6
+			c0-0.7-0.2-1.3-0.5-1.8l0,0l0,0c0,0,0,0,0,0l0,0c-0.2-0.4-0.6-0.6-1-0.9c0.2,0.2,0.3,0.4,0.3,0.7C89.1,51.9,89,52.1,88.8,52.3z"/>
+	</g>
+	<g>
+		<path class="st2" d="M1.6,64.7l88.8-41.4V3.1c0-2.3-2.4-3.8-4.4-2.8L1.8,39.5C0.7,40,0,41.1,0,42.3v21.1c0,0.7,0.2,1.3,0.5,1.8
+			l0,0c0,0,0,0,0,0c0,0,0,0,0,0l0,0c0.2,0.4,0.6,0.6,1,0.9c-0.2-0.2-0.3-0.4-0.3-0.7C1.2,65.1,1.3,64.9,1.6,64.7z"/>
+	</g>
+</g>
+</svg>
diff --git a/img/apache-incubator-logo-small.png b/img/apache-incubator-logo-small.png
index 4186940..c04e70d 100644
--- a/img/apache-incubator-logo-small.png
+++ b/img/apache-incubator-logo-small.png
Binary files differ
diff --git a/img/apache-logo-small.gif b/img/apache-logo-small.gif
index aa27713..fb4445f 100644
--- a/img/apache-logo-small.gif
+++ b/img/apache-logo-small.gif
Binary files differ
diff --git a/img/apache_incubator.svg b/img/apache_incubator.svg
index f846a2e..c0a601e 100644
--- a/img/apache_incubator.svg
+++ b/img/apache_incubator.svg
@@ -1 +1,91 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000" viewBox="0 0 1000 1000"><path fill-rule="evenodd" clip-rule="evenodd" fill="#E4E2E1" d="M.04-.04h1000v1000H.04z"/><path fill-rule="evenodd" clip-rule="evenodd" fill="#FFF" d="M200.04 199.96h600v600h-600z"/><path fill-rule="evenodd" clip-rule="evenodd" d="M709.219 458.14h21.215v2.002h-19v11.8h17.083v2.002h-17.083v12.014h19.212v2.002h-21.427zm-68.162 0h2.215v13.845h19.085V458.14h2.215v29.82h-2.215v-13.973h-19.085v13.973h-2.215zm-53.719 30.332c-2.131 0-4.104-.398-5.922-1.193-1.817-.795-3.387-1.882-4.707-3.259-1.321-1.377-2.351-3.003-3.089-4.878-.738-1.874-1.107-3.876-1.107-6.006v-.085c0-2.102.376-4.089 1.129-5.964.752-1.875 1.788-3.515 3.109-4.92a14.45 14.45 0 014.707-3.323c1.818-.81 3.806-1.214 5.965-1.214 1.335 0 2.542.114 3.62.341 1.08.228 2.081.554 3.004.98.923.426 1.789.93 2.599 1.512.81.583 1.598 1.229 2.364 1.938l-1.576 1.619c-.653-.625-1.335-1.207-2.045-1.747s-1.47-1.001-2.279-1.384a13.439 13.439 0 00-2.641-.916 13.241 13.241 0 00-3.089-.341c-1.789 0-3.451.341-4.984 1.022s-2.861 1.626-3.983 2.833c-1.121 1.207-2.002 2.621-2.641 4.239-.64 1.619-.959 3.365-.959 5.24v.085c0 1.875.327 3.628.98 5.261s1.54 3.053 2.662 4.26 2.449 2.158 3.982 2.854c1.534.696 3.196 1.044 4.985 1.044 2.158 0 4.032-.397 5.623-1.193 1.59-.795 3.138-1.945 4.644-3.45l1.491 1.448c-.796.767-1.612 1.47-2.45 2.109s-1.732 1.186-2.684 1.64-1.98.81-3.089 1.065c-1.106.255-2.313.383-3.619.383zm-71.612-30.545h2.13l13.888 30.033h-2.428l-3.792-8.35H507.93l-3.792 8.35h-2.3l13.888-30.033zm8.86 19.681l-7.838-17.253-7.881 17.253h15.719zm-84.435-19.468h10.821c1.647 0 3.145.206 4.494.618 1.349.412 2.514 1.008 3.493 1.789a8.082 8.082 0 012.279 2.854c.54 1.122.81 2.407.81 3.855v.085c0 1.562-.313 2.939-.937 4.132a8.722 8.722 0 01-2.535 2.982c-1.065.795-2.3 1.392-3.706 1.789a16.266 16.266 0 01-4.452.597h-8.051v11.119h-2.215v-29.82h-.001zm10.395 16.699c1.392 0 2.655-.17 3.792-.511 1.136-.348 2.108-.838 2.918-1.484a6.786 6.786 0 001.896-2.336c.454-.909.682-1.924.682-3.039v-.085c0-1.2-.22-2.251-.661-3.153a6.247 6.247 0 00-1.853-2.25c-.795-.597-1.747-1.051-2.854-1.371-1.107-.312-2.329-.468-3.663-.468h-8.435v14.697h8.178zm-68.502-16.912h2.13l13.888 30.033h-2.428l-3.792-8.35h-17.594l-3.792 8.35h-2.301l13.889-30.033zm8.861 19.681l-7.839-17.253-7.881 17.253h15.72zm343.765 38.098c0 7.213-3.147 11.758-9.443 13.634l11.445 15.886h-9.382l-10.444-14.697h-9.693v14.697h-7.38V501.51h16.261c6.671 0 11.444 1.126 14.322 3.377 2.875 2.252 4.314 5.858 4.314 10.819zm-18.324 8.131c4.169 0 7.005-.646 8.506-1.939 1.501-1.292 2.251-3.366 2.251-6.223 0-2.855-.771-4.815-2.313-5.878-1.543-1.064-4.295-1.596-8.256-1.596h-9.381v15.636h9.193zm-30.808 15.353c-4.419 4.315-9.881 6.473-16.386 6.473-6.504 0-11.966-2.157-16.385-6.473-4.42-4.315-6.63-9.694-6.63-16.136s2.21-11.82 6.63-16.136c4.419-4.314 9.881-6.473 16.385-6.473 6.505 0 11.967 2.158 16.386 6.473 4.42 4.315 6.63 9.694 6.63 16.136s-2.21 11.821-6.63 16.136zm-5.409-27.361c-2.981-3.086-6.64-4.628-10.977-4.628-4.336 0-7.994 1.542-10.976 4.628-2.98 3.085-4.472 6.827-4.472 11.226s1.491 8.141 4.472 11.227c2.981 3.085 6.64 4.628 10.976 4.628 4.337 0 7.995-1.543 10.977-4.628 2.98-3.086 4.471-6.828 4.471-11.227s-1.491-8.141-4.471-11.226zm-49.538-3.565v36.962h-7.38v-36.962h-13.259v-6.754h33.897v6.754zm-51.571 27.017l-4.378 9.944h-7.88l19.263-43.716h7.88l19.263 43.716h-7.88l-4.379-9.944H579.02zm18.886-6.817l-7.942-18.011-7.942 18.011h15.884zm-47.88 16.762h-19.138V501.51H547.9c2.96 0 5.514.354 7.661 1.063 2.146.709 3.741 1.668 4.784 2.878 2.001 2.251 3.002 4.795 3.002 7.63 0 3.418-1.084 5.962-3.253 7.63-.792.584-1.334.948-1.626 1.094-.292.146-.813.386-1.563.72 2.71.584 4.868 1.803 6.474 3.658 1.604 1.855 2.407 4.159 2.407 6.911 0 3.043-1.042 5.732-3.127 8.067-2.46 2.709-6.671 4.065-12.633 4.065zm-11.757-6.818h11.57c2.71 0 4.784-.427 6.223-1.281 1.438-.855 2.157-2.471 2.157-4.848 0-3.877-3.105-5.815-9.318-5.815h-10.632v11.944zm0-18.762h9.381c5.337 0 8.005-1.813 8.005-5.441 0-2.084-.646-3.585-1.938-4.503-1.292-.917-3.294-1.376-6.004-1.376h-9.443v11.32zm-43.879 15.573c2.001 2.335 4.711 3.502 8.13 3.502s6.129-1.167 8.13-3.502c2.002-2.335 3.002-5.504 3.002-9.506V501.51h7.38v24.516c0 6.296-1.729 11.143-5.19 14.541-3.461 3.397-7.901 5.097-13.321 5.097s-9.861-1.699-13.321-5.097c-3.461-3.398-5.191-8.245-5.191-14.541V501.51h7.38v24.203c-.001 4.002 1 7.171 3.001 9.506zm-34.184 3.314c2.543 0 4.732-.427 6.567-1.281 1.834-.855 3.752-2.221 5.753-4.097l4.753 4.878c-4.628 5.128-10.247 7.692-16.854 7.692-6.609 0-12.091-2.126-16.448-6.379s-6.536-9.632-6.536-16.136 2.22-11.924 6.661-16.26c4.44-4.337 10.048-6.505 16.823-6.505s12.435 2.502 16.979 7.505l-4.69 5.129c-2.084-2.002-4.055-3.398-5.91-4.19-1.855-.792-4.034-1.188-6.536-1.188-4.419 0-8.13 1.428-11.132 4.284-3.002 2.855-4.503 6.504-4.503 10.944s1.491 8.151 4.472 11.132c2.981 2.982 6.515 4.472 10.601 4.472zm-37.75-37.023h7.38v43.716h-8.005l-24.766-31.896v31.896h-7.379V501.51h7.379l25.391 32.645zm-50.569 0h7.379v43.716h-7.379z"/><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="298.372" y1="547.527" x2="313.065" y2="470.183"><stop offset="0" stop-color="#1a1853"/><stop offset=".5" stop-color="#ca2026"/><stop offset="1" stop-color="#f8991d"/></linearGradient><path fill-rule="evenodd" clip-rule="evenodd" fill="url(#a)" d="M308.331 459.957a64.852 64.852 0 00-.016-.978c.067.107.256.435.569.978h-.553zm-11.763 34.23c-3.432 6.382-5.389 13.041-5.889 19.971-.445 6.171.222 11.492 2.021 15.953.246.607.484 1.168.722 1.688a59.758 59.758 0 01-4.073-3.149c-.109-.086-.188-.122-.238-.109 1.699 2.717 3.816 5.179 6.354 7.387.392.342 1.046.504 1.207 1.007.459 1.443-.789 14.4 3.219 17.419 2.549 1.918 13.815-.494 17.293-1.617 18.147-5.861 32.222-22.622 30.128-46.777-2.296-26.491-19.748-53.431-37.154-59.906-4.705-1.751-5.749-1.591-10.635.499-16.984 7.263-33.667 33.549-35.908 59.407-2.153 24.846 12.797 41.868 31.693 47.252.511.146 1.005.28 1.485.407-.487-1.007-.885-2.148-1.208-3.356-19.792-5.886-30.863-23.434-29.076-44.051 1.708-19.71 14.918-48.76 34.154-56.987 4.021-1.718 4.402-1.963 8.479-.446 19.745 7.344 33.537 37.397 35.273 57.434 1.857 21.422-10.222 39.447-31.112 44.609-2.101.519-3.923.862-5.629 1.033-5.413.543-7.295 1.501-8.288-4.136-2.187-12.433-.534-34.932 4.876-43.565.043-.627.007.521-.4 1.501-.188.44-.309.709-.362.847-3.24 7.422-5.048 28.953-3.506 33.042-.446-1.465.353-4.55 1.51-5.183l.663-.464c3.628-2.613 5.973-6.718 8.595-11.917-.045-.072-.13-.063-.252.025a34.354 34.354 0 01-3.783 2.755c2.953-3.102 5.531-7.062 7.741-11.886-.06-.088-.162-.072-.308.042a43.564 43.564 0 01-2.667 2.224c3.708-6.714 6.974-14.491 7.316-23.379a38.682 38.682 0 00-3.159-16.59c-.785-1.81-1.88-3.973-3.292-6.525-2.087-3.763-3.215-5.801-3.395-6.097.093 8.157-1.346 14.788-4.315 19.84-.766 1.341-2.125 3.296-4.089 5.859-1.824 2.39-3.162 4.369-3.991 5.939z"/></svg>
\ No newline at end of file
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 43363)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="1000px" height="1000px" viewBox="0 0 1000 1000" enable-background="new 0 0 1000 1000" xml:space="preserve">
+<rect x="0.04" y="-0.04" fill-rule="evenodd" clip-rule="evenodd" fill="#E4E2E1" width="1000" height="1000"/>
+<rect x="200.04" y="199.96" fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" width="600" height="600"/>
+<polygon fill-rule="evenodd" clip-rule="evenodd" points="709.219,458.14 730.434,458.14 730.434,460.142 711.434,460.142 
+	711.434,471.942 728.517,471.942 728.517,473.944 711.434,473.944 711.434,485.958 730.646,485.958 730.646,487.96 709.219,487.96 
+	"/>
+<polygon fill-rule="evenodd" clip-rule="evenodd" points="641.057,458.14 643.272,458.14 643.272,471.985 662.357,471.985 
+	662.357,458.14 664.572,458.14 664.572,487.96 662.357,487.96 662.357,473.987 643.272,473.987 643.272,487.96 641.057,487.96 "/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M587.338,488.472c-2.131,0-4.104-0.398-5.922-1.193
+	c-1.817-0.795-3.387-1.882-4.707-3.259c-1.321-1.377-2.351-3.003-3.089-4.878c-0.738-1.874-1.107-3.876-1.107-6.006v-0.085
+	c0-2.102,0.376-4.089,1.129-5.964c0.752-1.875,1.788-3.515,3.109-4.92c1.32-1.406,2.89-2.513,4.707-3.323
+	c1.818-0.81,3.806-1.214,5.965-1.214c1.335,0,2.542,0.114,3.62,0.341c1.08,0.228,2.081,0.554,3.004,0.98
+	c0.923,0.426,1.789,0.93,2.599,1.512c0.81,0.583,1.598,1.229,2.364,1.938l-1.576,1.619c-0.653-0.625-1.335-1.207-2.045-1.747
+	s-1.47-1.001-2.279-1.384c-0.809-0.384-1.689-0.688-2.641-0.916c-0.952-0.228-1.981-0.341-3.089-0.341
+	c-1.789,0-3.451,0.341-4.984,1.022s-2.861,1.626-3.983,2.833c-1.121,1.207-2.002,2.621-2.641,4.239
+	c-0.64,1.619-0.959,3.365-0.959,5.24v0.085c0,1.875,0.327,3.628,0.98,5.261s1.54,3.053,2.662,4.26s2.449,2.158,3.982,2.854
+	c1.534,0.696,3.196,1.044,4.985,1.044c2.158,0,4.032-0.397,5.623-1.193c1.59-0.795,3.138-1.945,4.644-3.45l1.491,1.448
+	c-0.796,0.767-1.612,1.47-2.45,2.109s-1.732,1.186-2.684,1.64s-1.98,0.81-3.089,1.065
+	C589.851,488.344,588.644,488.472,587.338,488.472z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M515.726,457.927h2.13l13.888,30.033h-2.428l-3.792-8.35H507.93l-3.792,8.35h-2.3
+	L515.726,457.927L515.726,457.927z M524.586,477.608l-7.838-17.253l-7.881,17.253H524.586z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M440.151,458.14h10.821c1.647,0,3.145,0.206,4.494,0.618
+	c1.349,0.412,2.514,1.008,3.493,1.789c0.98,0.781,1.74,1.732,2.279,2.854c0.54,1.122,0.81,2.407,0.81,3.855v0.085
+	c0,1.562-0.313,2.939-0.937,4.132c-0.625,1.193-1.47,2.187-2.535,2.982c-1.065,0.795-2.3,1.392-3.706,1.789
+	c-1.406,0.398-2.889,0.597-4.452,0.597h-8.051v11.119h-2.215V458.14L440.151,458.14z M450.546,474.839
+	c1.392,0,2.655-0.17,3.792-0.511c1.136-0.348,2.108-0.838,2.918-1.484c0.81-0.639,1.441-1.42,1.896-2.336
+	c0.454-0.909,0.682-1.924,0.682-3.039v-0.085c0-1.2-0.22-2.251-0.661-3.153c-0.44-0.895-1.058-1.647-1.853-2.25
+	c-0.795-0.597-1.747-1.051-2.854-1.371c-1.107-0.312-2.329-0.468-3.663-0.468h-8.435v14.697H450.546z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M382.044,457.927h2.13l13.888,30.033h-2.428l-3.792-8.35h-17.594l-3.792,8.35
+	h-2.301L382.044,457.927L382.044,457.927z M390.905,477.608l-7.839-17.253l-7.881,17.253H390.905z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M734.67,515.706c0,7.213-3.147,11.758-9.443,13.634l11.445,15.886h-9.382
+	l-10.444-14.697h-9.693v14.697h-7.38V501.51h16.261c6.671,0,11.444,1.126,14.322,3.377
+	C733.231,507.139,734.67,510.745,734.67,515.706L734.67,515.706z M716.346,523.837c4.169,0,7.005-0.646,8.506-1.939
+	c1.501-1.292,2.251-3.366,2.251-6.223c0-2.855-0.771-4.815-2.313-5.878c-1.543-1.064-4.295-1.596-8.256-1.596h-9.381v15.636H716.346
+	z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M685.538,539.19c-4.419,4.315-9.881,6.473-16.386,6.473
+	c-6.504,0-11.966-2.157-16.385-6.473c-4.42-4.315-6.63-9.694-6.63-16.136s2.21-11.82,6.63-16.136
+	c4.419-4.314,9.881-6.473,16.385-6.473c6.505,0,11.967,2.158,16.386,6.473c4.42,4.315,6.63,9.694,6.63,16.136
+	S689.958,534.875,685.538,539.19L685.538,539.19z M680.129,511.829c-2.981-3.086-6.64-4.628-10.977-4.628
+	c-4.336,0-7.994,1.542-10.976,4.628c-2.98,3.085-4.472,6.827-4.472,11.226s1.491,8.141,4.472,11.227
+	c2.981,3.085,6.64,4.628,10.976,4.628c4.337,0,7.995-1.543,10.977-4.628c2.98-3.086,4.471-6.828,4.471-11.227
+	S683.109,514.914,680.129,511.829z"/>
+<polygon fill-rule="evenodd" clip-rule="evenodd" points="630.591,508.264 630.591,545.226 623.211,545.226 623.211,508.264 
+	609.952,508.264 609.952,501.51 643.849,501.51 643.849,508.264 "/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M579.02,535.281l-4.378,9.944h-7.88l19.263-43.716h7.88l19.263,43.716h-7.88
+	l-4.379-9.944H579.02L579.02,535.281z M597.906,528.464l-7.942-18.011l-7.942,18.011H597.906z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M550.026,545.226h-19.138V501.51H547.9c2.96,0,5.514,0.354,7.661,1.063
+	c2.146,0.709,3.741,1.668,4.784,2.878c2.001,2.251,3.002,4.795,3.002,7.63c0,3.418-1.084,5.962-3.253,7.63
+	c-0.792,0.584-1.334,0.948-1.626,1.094c-0.292,0.146-0.813,0.386-1.563,0.72c2.71,0.584,4.868,1.803,6.474,3.658
+	c1.604,1.855,2.407,4.159,2.407,6.911c0,3.043-1.042,5.732-3.127,8.067C560.199,543.87,555.988,545.226,550.026,545.226
+	L550.026,545.226z M538.269,538.408h11.57c2.71,0,4.784-0.427,6.223-1.281c1.438-0.855,2.157-2.471,2.157-4.848
+	c0-3.877-3.105-5.815-9.318-5.815h-10.632V538.408L538.269,538.408z M538.269,519.646h9.381c5.337,0,8.005-1.813,8.005-5.441
+	c0-2.084-0.646-3.585-1.938-4.503c-1.292-0.917-3.294-1.376-6.004-1.376h-9.443V519.646z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M494.39,535.219c2.001,2.335,4.711,3.502,8.13,3.502s6.129-1.167,8.13-3.502
+	c2.002-2.335,3.002-5.504,3.002-9.506V501.51h7.38v24.516c0,6.296-1.729,11.143-5.19,14.541c-3.461,3.397-7.901,5.097-13.321,5.097
+	s-9.861-1.699-13.321-5.097c-3.461-3.398-5.191-8.245-5.191-14.541V501.51h7.38v24.203
+	C491.388,529.715,492.389,532.884,494.39,535.219z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M460.206,538.533c2.543,0,4.732-0.427,6.567-1.281
+	c1.834-0.855,3.752-2.221,5.753-4.097l4.753,4.878c-4.628,5.128-10.247,7.692-16.854,7.692c-6.609,0-12.091-2.126-16.448-6.379
+	s-6.536-9.632-6.536-16.136s2.22-11.924,6.661-16.26c4.44-4.337,10.048-6.505,16.823-6.505c6.775,0,12.435,2.502,16.979,7.505
+	l-4.69,5.129c-2.084-2.002-4.055-3.398-5.91-4.19c-1.855-0.792-4.034-1.188-6.536-1.188c-4.419,0-8.13,1.428-11.132,4.284
+	c-3.002,2.855-4.503,6.504-4.503,10.944s1.491,8.151,4.472,11.132C452.586,537.043,456.12,538.533,460.206,538.533z"/>
+<polygon fill-rule="evenodd" clip-rule="evenodd" points="422.456,501.51 429.836,501.51 429.836,545.226 421.831,545.226 
+	397.065,513.33 397.065,545.226 389.686,545.226 389.686,501.51 397.065,501.51 422.456,534.155 "/>
+<rect x="371.887" y="501.51" fill-rule="evenodd" clip-rule="evenodd" width="7.379" height="43.716"/>
+<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="298.3716" y1="547.5273" x2="313.0645" y2="470.1827">
+	<stop  offset="0" style="stop-color:#1A1853"/>
+	<stop  offset="0.5" style="stop-color:#CA2026"/>
+	<stop  offset="1" style="stop-color:#F8991D"/>
+</linearGradient>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="url(#SVGID_1_)" d="M308.331,459.957c-0.003-0.324-0.008-0.649-0.016-0.978
+	c0.067,0.107,0.256,0.435,0.569,0.978H308.331L308.331,459.957z M296.568,494.187c-3.432,6.382-5.389,13.041-5.889,19.971
+	c-0.445,6.171,0.222,11.492,2.021,15.953c0.246,0.607,0.484,1.168,0.722,1.688c-1.422-1.006-2.779-2.055-4.073-3.149
+	c-0.109-0.086-0.188-0.122-0.238-0.109c1.699,2.717,3.816,5.179,6.354,7.387c0.392,0.342,1.046,0.504,1.207,1.007
+	c0.459,1.443-0.789,14.4,3.219,17.419c2.549,1.918,13.815-0.494,17.293-1.617c18.147-5.861,32.222-22.622,30.128-46.777
+	c-2.296-26.491-19.748-53.431-37.154-59.906c-4.705-1.751-5.749-1.591-10.635,0.499c-16.984,7.263-33.667,33.549-35.908,59.407
+	c-2.153,24.846,12.797,41.868,31.693,47.252c0.511,0.146,1.005,0.28,1.485,0.407c-0.487-1.007-0.885-2.148-1.208-3.356
+	c-19.792-5.886-30.863-23.434-29.076-44.051c1.708-19.71,14.918-48.76,34.154-56.987c4.021-1.718,4.402-1.963,8.479-0.446
+	c19.745,7.344,33.537,37.397,35.273,57.434c1.857,21.422-10.222,39.447-31.112,44.609c-2.101,0.519-3.923,0.862-5.629,1.033
+	c-5.413,0.543-7.295,1.501-8.288-4.136c-2.187-12.433-0.534-34.932,4.876-43.565c0.043-0.627,0.007,0.521-0.4,1.501
+	c-0.188,0.44-0.309,0.709-0.362,0.847c-3.24,7.422-5.048,28.953-3.506,33.042c-0.446-1.465,0.353-4.55,1.51-5.183l0.663-0.464
+	c3.628-2.613,5.973-6.718,8.595-11.917c-0.045-0.072-0.13-0.063-0.252,0.025c-1.224,1.023-2.486,1.942-3.783,2.755
+	c2.953-3.102,5.531-7.062,7.741-11.886c-0.06-0.088-0.162-0.072-0.308,0.042c-0.872,0.787-1.76,1.528-2.667,2.224
+	c3.708-6.714,6.974-14.491,7.316-23.379c0.169-5.753-0.883-11.296-3.159-16.59c-0.785-1.81-1.88-3.973-3.292-6.525
+	c-2.087-3.763-3.215-5.801-3.395-6.097c0.093,8.157-1.346,14.788-4.315,19.84c-0.766,1.341-2.125,3.296-4.089,5.859
+	C298.735,490.638,297.397,492.617,296.568,494.187z"/>
+</svg>
diff --git a/img/apache_incubator_white_RGB.png b/img/apache_incubator_white_RGB.png
index ef8e564..981ffa2 100644
--- a/img/apache_incubator_white_RGB.png
+++ b/img/apache_incubator_white_RGB.png
Binary files differ
diff --git a/img/clint.eps.jpg b/img/clint.eps.jpg
index a0966dd..fc215b0 100644
--- a/img/clint.eps.jpg
+++ b/img/clint.eps.jpg
Binary files differ
diff --git a/img/dta/Envelope.png b/img/dta/Envelope.png
index 84c7dea..28f8ff4 100644
--- a/img/dta/Envelope.png
+++ b/img/dta/Envelope.png
Binary files differ
diff --git a/img/dta/RC1-Ecosystem.png b/img/dta/RC1-Ecosystem.png
index ff7510f..33826c0 100644
--- a/img/dta/RC1-Ecosystem.png
+++ b/img/dta/RC1-Ecosystem.png
Binary files differ
diff --git a/img/dta/RC1-Overview-1.png b/img/dta/RC1-Overview-1.png
index cdcfc5e..5fdfa85 100644
--- a/img/dta/RC1-Overview-1.png
+++ b/img/dta/RC1-Overview-1.png
Binary files differ
diff --git a/img/dta/RC1.png b/img/dta/RC1.png
index 32b6b1d..30d7d16 100644
--- a/img/dta/RC1.png
+++ b/img/dta/RC1.png
Binary files differ
diff --git a/img/dta/initID.png b/img/dta/initID.png
index 2269e8c..713c6dd 100644
--- a/img/dta/initID.png
+++ b/img/dta/initID.png
Binary files differ
diff --git a/img/feather.svg b/img/feather.svg
index 3240046..2c4e274 100644
--- a/img/feather.svg
+++ b/img/feather.svg
@@ -1 +1,138 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2392.5 4226.6"><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="-5167.096" y1="697.555" x2="-4570.116" y2="1395.619" gradientTransform="rotate(-65.001 -2052.924 -4777.854)"><stop offset="0" stop-color="#f69923"/><stop offset=".312" stop-color="#f79a23"/><stop offset=".838" stop-color="#e97826"/></linearGradient><path fill="url(#a)" d="M1798.9 20.1C1732.6 59.2 1622.5 170 1491 330.5l120.8 228c84.8-121.3 170.9-230.4 257.8-323.6 6.7-7.4 10.2-10.9 10.2-10.9-3.4 3.6-6.8 7.3-10.2 10.9-28.1 31-113.4 130.5-242.1 328.1 123.9-6.2 314.3-31.5 469.6-58.1 46.2-258.8-45.3-377.3-45.3-377.3S1935.5-60.6 1798.9 20.1z"/><path fill="none" d="M1594.4 1320.7c.9-.2 1.8-.3 2.7-.5l-17.4 1.9c-1.1.5-2 1-3.1 1.4 6-.9 11.9-1.9 17.8-2.8zm-123.3 408.4c-9.9 2.2-20 3.9-30.2 5.4 10.2-1.5 20.3-3.3 30.2-5.4zm-838 916.1c1.3-3.4 2.6-6.8 3.8-10.2 26.6-70.2 52.9-138.4 79-204.9 29.3-74.6 58.2-146.8 86.8-216.8 30.1-73.8 59.8-145.1 89.1-214 30.7-72.3 61-141.9 90.7-208.9 24.2-54.5 48-107.3 71.5-158.4 7.8-17 15.6-33.9 23.4-50.6 15.4-33.1 30.7-65.6 45.7-97.3 13.9-29.3 27.7-57.9 41.4-86 4.5-9.4 9.1-18.6 13.6-27.9.7-1.5 1.5-3 2.2-4.5l-14.8 1.6-11.8-23.2c-1.1 2.3-2.3 4.5-3.5 6.8-21.2 42.1-42.2 84.6-63 127.5-12 24.8-24 49.7-35.9 74.7-33 69.3-65.5 139.2-97.4 209.6-32.3 71.1-63.9 142.6-94.9 214.2-30.5 70.3-60.3 140.7-89.6 210.9-29.2 70.1-57.7 140-85.6 209.4-29.1 72.5-57.4 144.3-84.8 215.3-6.2 16-12.4 32-18.5 48-22 57.3-43.4 113.8-64.3 169.6l18.6 36.7 16.6-1.8c.6-1.7 1.2-3.4 1.8-5 26.9-73.5 53.5-145.1 79.9-214.8zm800.1-909.5c.1 0 .1-.1.2-.1 0 0-.1 0-.2.1z"/><path fill="#BE202E" d="M1393.2 1934.8c-15.4 2.8-31.3 5.5-47.6 8.3-.1 0-.2.1-.3.1 8.2-1.2 16.3-2.4 24.3-3.8s15.8-2.9 23.6-4.6z"/><path opacity=".35" fill="#BE202E" d="M1393.2 1934.8c-15.4 2.8-31.3 5.5-47.6 8.3-.1 0-.2.1-.3.1 8.2-1.2 16.3-2.4 24.3-3.8s15.8-2.9 23.6-4.6z"/><path fill="#BE202E" d="M1433.6 1735.5s-.1 0-.1.1c-.1 0-.1.1-.2.1 2.6-.3 5.1-.8 7.6-1.1 10.3-1.5 20.4-3.3 30.2-5.4-12.3 2-24.8 4.2-37.5 6.3z"/><path opacity=".35" fill="#BE202E" d="M1433.6 1735.5s-.1 0-.1.1c-.1 0-.1.1-.2.1 2.6-.3 5.1-.8 7.6-1.1 10.3-1.5 20.4-3.3 30.2-5.4-12.3 2-24.8 4.2-37.5 6.3z"/><linearGradient id="b" gradientUnits="userSpaceOnUse" x1="-9585.342" y1="620.505" x2="-5326.209" y2="620.505" gradientTransform="rotate(-65.001 -2052.924 -4777.854)"><stop offset=".323" stop-color="#9e2064"/><stop offset=".63" stop-color="#c92037"/><stop offset=".751" stop-color="#cd2335"/><stop offset="1" stop-color="#e97826"/></linearGradient><path fill="url(#b)" d="M1255.7 1147.6c36.7-68.6 73.9-135.7 111.5-201 39-67.8 78.5-133.6 118.4-197 2.3-3.7 4.7-7.5 7-11.3 39.4-62.4 79.2-122.4 119.3-179.8l-120.8-228c-9.1 11.1-18.2 22.4-27.5 33.9-34.8 43.4-71 90.1-108.1 139.6-41.8 55.8-84.8 115.4-128.5 177.9-40.3 57.8-81.2 118.3-122.1 180.9-34.8 53.3-69.8 108.2-104.5 164.5l-3.9 6.3 157.2 310.5c33.6-66.5 67.6-132.1 102-196.5z"/><linearGradient id="c" gradientUnits="userSpaceOnUse" x1="-9071.207" y1="1047.69" x2="-6533.178" y2="1047.69" gradientTransform="rotate(-65.001 -2052.924 -4777.854)"><stop offset="0" stop-color="#282662"/><stop offset=".095" stop-color="#662e8d"/><stop offset=".788" stop-color="#9f2064"/><stop offset=".949" stop-color="#cd2032"/></linearGradient><path fill="url(#c)" d="M539.7 2897.1c-20.8 57.2-41.7 115.4-62.7 174.9-.3.9-.6 1.7-.9 2.6-3 8.4-5.9 16.8-8.9 25.2-14.1 40.1-26.4 76.2-54.5 158.3 46.3 21.1 83.5 76.7 118.7 139.8-3.7-65.3-30.8-126.7-82.1-174.2 228.3 10.3 425-47.4 526.7-214.3 9.1-14.9 17.4-30.5 24.9-47.2-46.2 58.6-103.5 83.5-211.4 77.4-.2.1-.5.2-.7.3.2-.1.5-.2.7-.3 158.8-71.1 238.5-139.3 308.9-252.4 16.7-26.8 32.9-56.1 49.5-88.6-138.9 142.6-299.8 183.2-469.3 152.4l-127.1 13.9c-4 10.7-7.9 21.4-11.8 32.2z"/><linearGradient id="d" gradientUnits="userSpaceOnUse" x1="-9346.126" y1="580.817" x2="-5086.994" y2="580.817" gradientTransform="rotate(-65.001 -2052.924 -4777.854)"><stop offset=".323" stop-color="#9e2064"/><stop offset=".63" stop-color="#c92037"/><stop offset=".751" stop-color="#cd2335"/><stop offset="1" stop-color="#e97826"/></linearGradient><path fill="url(#d)" d="M599 2612.4c27.5-71 55.8-142.8 84.8-215.3 27.8-69.4 56.4-139.2 85.6-209.4 29.2-70.2 59.1-140.5 89.6-210.9 31-71.6 62.7-143.1 94.9-214.2 31.9-70.3 64.4-140.3 97.4-209.6 11.9-25 23.9-49.9 35.9-74.7 20.8-42.9 41.8-85.4 63-127.5 1.1-2.3 2.3-4.5 3.5-6.8l-157.2-310.5c-2.6 4.2-5.1 8.4-7.7 12.6-36.6 59.8-73.1 121-108.9 183.5-36.2 63.1-71.7 127.4-106.4 192.6-29.3 55-57.9 110.5-85.7 166.5-5.6 11.4-11.1 22.6-16.6 33.9-34.3 70.5-65.2 138.6-93.2 204.1-31.7 74.2-59.6 145.1-84 212.3-16.1 44.2-30.7 86.9-44.1 127.9-11 35-21.5 70.1-31.4 105-23.5 82.3-43.7 164.4-60.3 246.2l158 311.9c20.9-55.8 42.3-112.3 64.3-169.6 6.1-15.9 12.3-32 18.5-48z"/><linearGradient id="e" gradientUnits="userSpaceOnUse" x1="-9035.503" y1="638.441" x2="-6797.201" y2="638.441" gradientTransform="rotate(-65.001 -2052.924 -4777.854)"><stop offset="0" stop-color="#282662"/><stop offset=".095" stop-color="#662e8d"/><stop offset=".788" stop-color="#9f2064"/><stop offset=".949" stop-color="#cd2032"/></linearGradient><path fill="url(#e)" d="M356.1 2529.2c-19.8 99.8-33.9 199.2-41 298-.2 3.5-.6 6.9-.8 10.4-49.3-79-181.3-156.1-181-155.4 94.5 137 166.2 273 176.9 406.5-50.6 10.4-119.9-4.6-200-34.1 83.5 76.7 146.2 97.9 170.6 103.6-76.7 4.8-156.6 57.5-237.1 118.2 117.7-48 212.8-67 280.9-51.6-108 305.8-216.3 643.4-324.6 1001.8 33.2-9.8 53-32.1 64.1-62.3 19.3-64.9 147.4-490.7 348.1-1050.4 5.7-15.9 11.5-31.9 17.3-48 1.6-4.5 3.3-9 4.9-13.4 21.2-58.7 43.2-118.6 65.9-179.7 5.2-13.9 10.4-27.8 15.6-41.8.1-.3.2-.6.3-.8l-157.8-311.8c-.7 3.5-1.6 7.1-2.3 10.8z"/><linearGradient id="f" gradientUnits="userSpaceOnUse" x1="-9346.126" y1="1021.622" x2="-5086.994" y2="1021.622" gradientTransform="rotate(-65.001 -2052.924 -4777.854)"><stop offset=".323" stop-color="#9e2064"/><stop offset=".63" stop-color="#c92037"/><stop offset=".751" stop-color="#cd2335"/><stop offset="1" stop-color="#e97826"/></linearGradient><path fill="url(#f)" d="M1178.1 1370.3c-4.5 9.2-9 18.5-13.6 27.9-13.6 28.1-27.4 56.7-41.4 86-15.1 31.7-30.3 64.1-45.7 97.3-7.8 16.7-15.5 33.5-23.4 50.6-23.5 51.1-47.3 103.9-71.5 158.4-29.7 67-60 136.6-90.7 208.9-29.3 68.9-59 140.2-89.1 214-28.6 70-57.5 142.3-86.8 216.8-26.1 66.5-52.4 134.7-79 204.9-1.3 3.4-2.6 6.8-3.8 10.2-26.4 69.7-53 141.3-79.8 214.7-.6 1.7-1.2 3.4-1.8 5l127.1-13.9c-2.5-.5-5.1-.8-7.6-1.3 152-18.9 354-132.5 484.6-272.7 60.2-64.6 114.8-140.8 165.3-230 37.6-66.4 72.9-140 106.5-221.5 29.4-71.2 57.6-148.3 84.8-231.9-34.9 18.4-74.9 31.9-119 41.3-7.7 1.6-15.6 3.2-23.6 4.6-8 1.4-16.1 2.7-24.3 3.8.1 0 .2-.1.3-.1 141.7-54.5 231.1-159.8 296.1-288.7-37.3 25.4-97.9 58.7-170.5 74.7-9.9 2.2-20 3.9-30.2 5.4-2.6.4-5.1.8-7.6 1.1.1 0 .1-.1.2-.1 0 0 .1 0 .1-.1 49.2-20.6 90.7-43.6 126.7-70.8 7.7-5.8 15.2-11.8 22.4-18.1 11-9.5 21.4-19.5 31.4-30 6.4-6.7 12.6-13.6 18.6-20.8 14.1-16.8 27.3-34.9 39.7-54.6 3.8-6 7.5-12.1 11.2-18.4 4.7-9.1 9.2-18 13.6-26.8 19.8-39.8 35.6-75.3 48.2-106.5 6.3-15.6 11.8-30 16.5-43.4 1.9-5.3 3.7-10.5 5.4-15.5 5-15 9.1-28.3 12.3-40 4.8-17.5 7.7-31.4 9.3-41.5-4.8 3.8-10.3 7.6-16.5 11.3-42.8 25.6-116.2 48.8-175.4 59.7l116.7-12.8-116.7 12.8c-.9.2-1.8.3-2.7.5-5.9 1-11.9 1.9-17.9 2.9 1.1-.5 2-1 3.1-1.4l-399.3 43.8c-.7 1.4-1.4 2.8-2.2 4.3z"/><linearGradient id="g" gradientUnits="userSpaceOnUse" x1="-9610.334" y1="999.733" x2="-5351.202" y2="999.733" gradientTransform="rotate(-65.001 -2052.924 -4777.854)"><stop offset=".323" stop-color="#9e2064"/><stop offset=".63" stop-color="#c92037"/><stop offset=".751" stop-color="#cd2335"/><stop offset="1" stop-color="#e97826"/></linearGradient><path fill="url(#g)" d="M1627.6 563.1c-35.5 54.5-74.3 116.4-116 186.5-2.2 3.6-4.4 7.4-6.6 11.1-36 60.7-74.3 127.3-114.5 200.3-34.8 63-71 130.6-108.6 203.3-32.8 63.3-66.7 130.5-101.5 201.6l399.3-43.8c116.3-53.5 168.3-101.9 218.8-171.9 13.4-19.3 26.9-39.5 40.3-60.4 41-64 81.2-134.5 117.2-204.6 34.7-67.7 65.3-134.8 88.8-195.3 14.9-38.5 26.9-74.3 35.2-105.7 7.3-27.7 13-54 17.4-79.1-155.5 26.5-345.9 51.9-469.8 58z"/><path fill="#BE202E" d="M1369.6 1939.4c-8 1.4-16.1 2.7-24.3 3.8 8.2-1.1 16.3-2.4 24.3-3.8z"/><path opacity=".35" fill="#BE202E" d="M1369.6 1939.4c-8 1.4-16.1 2.7-24.3 3.8 8.2-1.1 16.3-2.4 24.3-3.8z"/><linearGradient id="h" gradientUnits="userSpaceOnUse" x1="-9346.126" y1="1152.726" x2="-5086.994" y2="1152.726" gradientTransform="rotate(-65.001 -2052.924 -4777.854)"><stop offset=".323" stop-color="#9e2064"/><stop offset=".63" stop-color="#c92037"/><stop offset=".751" stop-color="#cd2335"/><stop offset="1" stop-color="#e97826"/></linearGradient><path fill="url(#h)" d="M1369.6 1939.4c-8 1.4-16.1 2.7-24.3 3.8 8.2-1.1 16.3-2.4 24.3-3.8z"/><path fill="#BE202E" d="M1433.2 1735.7c2.6-.3 5.1-.8 7.6-1.1-2.5.3-5 .7-7.6 1.1z"/><path opacity=".35" fill="#BE202E" d="M1433.2 1735.7c2.6-.3 5.1-.8 7.6-1.1-2.5.3-5 .7-7.6 1.1z"/><linearGradient id="i" gradientUnits="userSpaceOnUse" x1="-9346.126" y1="1137.725" x2="-5086.994" y2="1137.725" gradientTransform="rotate(-65.001 -2052.924 -4777.854)"><stop offset=".323" stop-color="#9e2064"/><stop offset=".63" stop-color="#c92037"/><stop offset=".751" stop-color="#cd2335"/><stop offset="1" stop-color="#e97826"/></linearGradient><path fill="url(#i)" d="M1433.2 1735.7c2.6-.3 5.1-.8 7.6-1.1-2.5.3-5 .7-7.6 1.1z"/><path fill="#BE202E" d="M1433.5 1735.6s.1 0 .1-.1c0 0-.1 0-.1.1z"/><path opacity=".35" fill="#BE202E" d="M1433.5 1735.6s.1 0 .1-.1c0 0-.1 0-.1.1z"/><linearGradient id="j" gradientUnits="userSpaceOnUse" x1="-6953.407" y1="1134.716" x2="-6011.999" y2="1134.716" gradientTransform="rotate(-65.001 -2052.924 -4777.854)"><stop offset=".323" stop-color="#9e2064"/><stop offset=".63" stop-color="#c92037"/><stop offset=".751" stop-color="#cd2335"/><stop offset="1" stop-color="#e97826"/></linearGradient><path fill="url(#j)" d="M1433.5 1735.6s.1 0 .1-.1c0 0-.1 0-.1.1z"/><path fill="#6D6E71" d="M2218.7 387v11.7h27.4v77.4h12.7v-77.4h27.6V387h-67.7zm158.3 0l-30.6 62.2-30.8-62.2h-15.3v89.1h11.7v-70.7l30.3 61.3h8.1l30.3-61.3v70.7h11.7V387H2377z"/></svg>
\ No newline at end of file
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Feather" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 2392.5 4226.6" enable-background="new 0 0 2392.5 4226.6" xml:space="preserve">
+<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="-5167.0962" y1="697.5549" x2="-4570.1162" y2="1395.619" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 3144.8108 -4619.2983)">
+	<stop  offset="0" style="stop-color:#F69923"/>
+	<stop  offset="0.3123" style="stop-color:#F79A23"/>
+	<stop  offset="0.8383" style="stop-color:#E97826"/>
+</linearGradient>
+<path fill="url(#SVGID_1_)" d="M1798.9,20.1C1732.6,59.2,1622.5,170,1491,330.5l120.8,228c84.8-121.3,170.9-230.4,257.8-323.6
+	c6.7-7.4,10.2-10.9,10.2-10.9c-3.4,3.6-6.8,7.3-10.2,10.9c-28.1,31-113.4,130.5-242.1,328.1c123.9-6.2,314.3-31.5,469.6-58.1
+	c46.2-258.8-45.3-377.3-45.3-377.3S1935.5-60.6,1798.9,20.1z"/>
+<path fill="none" d="M1594.4,1320.7c0.9-0.2,1.8-0.3,2.7-0.5l-17.4,1.9c-1.1,0.5-2,1-3.1,1.4
+	C1582.6,1322.6,1588.5,1321.6,1594.4,1320.7z"/>
+<path fill="none" d="M1471.1,1729.1c-9.9,2.2-20,3.9-30.2,5.4C1451.1,1733,1461.2,1731.2,1471.1,1729.1z"/>
+<path fill="none" d="M633.1,2645.2c1.3-3.4,2.6-6.8,3.8-10.2c26.6-70.2,52.9-138.4,79-204.9c29.3-74.6,58.2-146.8,86.8-216.8
+	c30.1-73.8,59.8-145.1,89.1-214c30.7-72.3,61-141.9,90.7-208.9c24.2-54.5,48-107.3,71.5-158.4c7.8-17,15.6-33.9,23.4-50.6
+	c15.4-33.1,30.7-65.6,45.7-97.3c13.9-29.3,27.7-57.9,41.4-86c4.5-9.4,9.1-18.6,13.6-27.9c0.7-1.5,1.5-3,2.2-4.5l-14.8,1.6
+	l-11.8-23.2c-1.1,2.3-2.3,4.5-3.5,6.8c-21.2,42.1-42.2,84.6-63,127.5c-12,24.8-24,49.7-35.9,74.7c-33,69.3-65.5,139.2-97.4,209.6
+	c-32.3,71.1-63.9,142.6-94.9,214.2c-30.5,70.3-60.3,140.7-89.6,210.9c-29.2,70.1-57.7,140-85.6,209.4
+	c-29.1,72.5-57.4,144.3-84.8,215.3c-6.2,16-12.4,32-18.5,48c-22,57.3-43.4,113.8-64.3,169.6l18.6,36.7l16.6-1.8
+	c0.6-1.7,1.2-3.4,1.8-5C580.1,2786.5,606.7,2714.9,633.1,2645.2z"/>
+<path fill="none" d="M1433.2,1735.7L1433.2,1735.7c0.1,0,0.1-0.1,0.2-0.1C1433.4,1735.6,1433.3,1735.6,1433.2,1735.7z"/>
+<path fill="#BE202E" d="M1393.2,1934.8c-15.4,2.8-31.3,5.5-47.6,8.3c-0.1,0-0.2,0.1-0.3,0.1c8.2-1.2,16.3-2.4,24.3-3.8
+	C1377.6,1938,1385.4,1936.5,1393.2,1934.8z"/>
+<path opacity="0.35" fill="#BE202E" d="M1393.2,1934.8c-15.4,2.8-31.3,5.5-47.6,8.3c-0.1,0-0.2,0.1-0.3,0.1
+	c8.2-1.2,16.3-2.4,24.3-3.8C1377.6,1938,1385.4,1936.5,1393.2,1934.8z"/>
+<path fill="#BE202E" d="M1433.6,1735.5c0,0-0.1,0-0.1,0.1c-0.1,0-0.1,0.1-0.2,0.1c2.6-0.3,5.1-0.8,7.6-1.1
+	c10.3-1.5,20.4-3.3,30.2-5.4C1458.8,1731.2,1446.3,1733.4,1433.6,1735.5L1433.6,1735.5L1433.6,1735.5z"/>
+<path opacity="0.35" fill="#BE202E" d="M1433.6,1735.5c0,0-0.1,0-0.1,0.1c-0.1,0-0.1,0.1-0.2,0.1c2.6-0.3,5.1-0.8,7.6-1.1
+	c10.3-1.5,20.4-3.3,30.2-5.4C1458.8,1731.2,1446.3,1733.4,1433.6,1735.5L1433.6,1735.5L1433.6,1735.5z"/>
+<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="-9585.3418" y1="620.5048" x2="-5326.209" y2="620.5048" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 3144.8108 -4619.2983)">
+	<stop  offset="0.3233" style="stop-color:#9E2064"/>
+	<stop  offset="0.6302" style="stop-color:#C92037"/>
+	<stop  offset="0.7514" style="stop-color:#CD2335"/>
+	<stop  offset="1" style="stop-color:#E97826"/>
+</linearGradient>
+<path fill="url(#SVGID_2_)" d="M1255.7,1147.6c36.7-68.6,73.9-135.7,111.5-201c39-67.8,78.5-133.6,118.4-197c2.3-3.7,4.7-7.5,7-11.3
+	c39.4-62.4,79.2-122.4,119.3-179.8l-120.8-228c-9.1,11.1-18.2,22.4-27.5,33.9c-34.8,43.4-71,90.1-108.1,139.6
+	c-41.8,55.8-84.8,115.4-128.5,177.9c-40.3,57.8-81.2,118.3-122.1,180.9c-34.8,53.3-69.8,108.2-104.5,164.5c-1.3,2.1-2.6,4.2-3.9,6.3
+	l157.2,310.5C1187.3,1277.6,1221.3,1212,1255.7,1147.6z"/>
+<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="-9071.207" y1="1047.6898" x2="-6533.1782" y2="1047.6898" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 3144.8108 -4619.2983)">
+	<stop  offset="0" style="stop-color:#282662"/>
+	<stop  offset="9.548390e-02" style="stop-color:#662E8D"/>
+	<stop  offset="0.7882" style="stop-color:#9F2064"/>
+	<stop  offset="0.9487" style="stop-color:#CD2032"/>
+</linearGradient>
+<path fill="url(#SVGID_3_)" d="M539.7,2897.1c-20.8,57.2-41.7,115.4-62.7,174.9c-0.3,0.9-0.6,1.7-0.9,2.6c-3,8.4-5.9,16.8-8.9,25.2
+	c-14.1,40.1-26.4,76.2-54.5,158.3c46.3,21.1,83.5,76.7,118.7,139.8c-3.7-65.3-30.8-126.7-82.1-174.2
+	c228.3,10.3,425-47.4,526.7-214.3c9.1-14.9,17.4-30.5,24.9-47.2c-46.2,58.6-103.5,83.5-211.4,77.4c-0.2,0.1-0.5,0.2-0.7,0.3
+	c0.2-0.1,0.5-0.2,0.7-0.3c158.8-71.1,238.5-139.3,308.9-252.4c16.7-26.8,32.9-56.1,49.5-88.6C1009,2841.2,848.1,2881.8,678.6,2851
+	l-127.1,13.9C547.5,2875.6,543.6,2886.3,539.7,2897.1z"/>
+<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="-9346.126" y1="580.817" x2="-5086.9941" y2="580.817" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 3144.8108 -4619.2983)">
+	<stop  offset="0.3233" style="stop-color:#9E2064"/>
+	<stop  offset="0.6302" style="stop-color:#C92037"/>
+	<stop  offset="0.7514" style="stop-color:#CD2335"/>
+	<stop  offset="1" style="stop-color:#E97826"/>
+</linearGradient>
+<path fill="url(#SVGID_4_)" d="M599,2612.4c27.5-71,55.8-142.8,84.8-215.3c27.8-69.4,56.4-139.2,85.6-209.4
+	c29.2-70.2,59.1-140.5,89.6-210.9c31-71.6,62.7-143.1,94.9-214.2c31.9-70.3,64.4-140.3,97.4-209.6c11.9-25,23.9-49.9,35.9-74.7
+	c20.8-42.9,41.8-85.4,63-127.5c1.1-2.3,2.3-4.5,3.5-6.8l-157.2-310.5c-2.6,4.2-5.1,8.4-7.7,12.6c-36.6,59.8-73.1,121-108.9,183.5
+	c-36.2,63.1-71.7,127.4-106.4,192.6c-29.3,55-57.9,110.5-85.7,166.5c-5.6,11.4-11.1,22.6-16.6,33.9
+	c-34.3,70.5-65.2,138.6-93.2,204.1c-31.7,74.2-59.6,145.1-84,212.3c-16.1,44.2-30.7,86.9-44.1,127.9c-11,35-21.5,70.1-31.4,105
+	c-23.5,82.3-43.7,164.4-60.3,246.2L516.2,2830c20.9-55.8,42.3-112.3,64.3-169.6C586.6,2644.5,592.8,2628.4,599,2612.4z"/>
+<linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="-9035.5029" y1="638.4408" x2="-6797.2012" y2="638.4408" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 3144.8108 -4619.2983)">
+	<stop  offset="0" style="stop-color:#282662"/>
+	<stop  offset="9.548390e-02" style="stop-color:#662E8D"/>
+	<stop  offset="0.7882" style="stop-color:#9F2064"/>
+	<stop  offset="0.9487" style="stop-color:#CD2032"/>
+</linearGradient>
+<path fill="url(#SVGID_5_)" d="M356.1,2529.2c-19.8,99.8-33.9,199.2-41,298c-0.2,3.5-0.6,6.9-0.8,10.4
+	c-49.3-79-181.3-156.1-181-155.4c94.5,137,166.2,273,176.9,406.5c-50.6,10.4-119.9-4.6-200-34.1c83.5,76.7,146.2,97.9,170.6,103.6
+	c-76.7,4.8-156.6,57.5-237.1,118.2c117.7-48,212.8-67,280.9-51.6C216.6,3530.6,108.3,3868.2,0,4226.6c33.2-9.8,53-32.1,64.1-62.3
+	c19.3-64.9,147.4-490.7,348.1-1050.4c5.7-15.9,11.5-31.9,17.3-48c1.6-4.5,3.3-9,4.9-13.4c21.2-58.7,43.2-118.6,65.9-179.7
+	c5.2-13.9,10.4-27.8,15.6-41.8c0.1-0.3,0.2-0.6,0.3-0.8l-157.8-311.8C357.7,2521.9,356.8,2525.5,356.1,2529.2z"/>
+<linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="-9346.126" y1="1021.6218" x2="-5086.9941" y2="1021.6218" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 3144.8108 -4619.2983)">
+	<stop  offset="0.3233" style="stop-color:#9E2064"/>
+	<stop  offset="0.6302" style="stop-color:#C92037"/>
+	<stop  offset="0.7514" style="stop-color:#CD2335"/>
+	<stop  offset="1" style="stop-color:#E97826"/>
+</linearGradient>
+<path fill="url(#SVGID_6_)" d="M1178.1,1370.3c-4.5,9.2-9,18.5-13.6,27.9c-13.6,28.1-27.4,56.7-41.4,86
+	c-15.1,31.7-30.3,64.1-45.7,97.3c-7.8,16.7-15.5,33.5-23.4,50.6c-23.5,51.1-47.3,103.9-71.5,158.4c-29.7,67-60,136.6-90.7,208.9
+	c-29.3,68.9-59,140.2-89.1,214c-28.6,70-57.5,142.3-86.8,216.8c-26.1,66.5-52.4,134.7-79,204.9c-1.3,3.4-2.6,6.8-3.8,10.2
+	c-26.4,69.7-53,141.3-79.8,214.7c-0.6,1.7-1.2,3.4-1.8,5l127.1-13.9c-2.5-0.5-5.1-0.8-7.6-1.3c152-18.9,354-132.5,484.6-272.7
+	c60.2-64.6,114.8-140.8,165.3-230c37.6-66.4,72.9-140,106.5-221.5c29.4-71.2,57.6-148.3,84.8-231.9c-34.9,18.4-74.9,31.9-119,41.3
+	c-7.7,1.6-15.6,3.2-23.6,4.6c-8,1.4-16.1,2.7-24.3,3.8l0,0l0,0c0.1,0,0.2-0.1,0.3-0.1c141.7-54.5,231.1-159.8,296.1-288.7
+	c-37.3,25.4-97.9,58.7-170.5,74.7c-9.9,2.2-20,3.9-30.2,5.4c-2.6,0.4-5.1,0.8-7.6,1.1l0,0l0,0c0.1,0,0.1-0.1,0.2-0.1
+	c0,0,0.1,0,0.1-0.1l0,0c49.2-20.6,90.7-43.6,126.7-70.8c7.7-5.8,15.2-11.8,22.4-18.1c11-9.5,21.4-19.5,31.4-30
+	c6.4-6.7,12.6-13.6,18.6-20.8c14.1-16.8,27.3-34.9,39.7-54.6c3.8-6,7.5-12.1,11.2-18.4c4.7-9.1,9.2-18,13.6-26.8
+	c19.8-39.8,35.6-75.3,48.2-106.5c6.3-15.6,11.8-30,16.5-43.4c1.9-5.3,3.7-10.5,5.4-15.5c5-15,9.1-28.3,12.3-40
+	c4.8-17.5,7.7-31.4,9.3-41.5l0,0l0,0c-4.8,3.8-10.3,7.6-16.5,11.3c-42.8,25.6-116.2,48.8-175.4,59.7l116.7-12.8l-116.7,12.8
+	c-0.9,0.2-1.8,0.3-2.7,0.5c-5.9,1-11.9,1.9-17.9,2.9c1.1-0.5,2-1,3.1-1.4l-399.3,43.8C1179.6,1367.4,1178.9,1368.8,1178.1,1370.3z"
+	/>
+<linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="-9610.334" y1="999.733" x2="-5351.2017" y2="999.733" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 3144.8108 -4619.2983)">
+	<stop  offset="0.3233" style="stop-color:#9E2064"/>
+	<stop  offset="0.6302" style="stop-color:#C92037"/>
+	<stop  offset="0.7514" style="stop-color:#CD2335"/>
+	<stop  offset="1" style="stop-color:#E97826"/>
+</linearGradient>
+<path fill="url(#SVGID_7_)" d="M1627.6,563.1c-35.5,54.5-74.3,116.4-116,186.5c-2.2,3.6-4.4,7.4-6.6,11.1
+	c-36,60.7-74.3,127.3-114.5,200.3c-34.8,63-71,130.6-108.6,203.3c-32.8,63.3-66.7,130.5-101.5,201.6l399.3-43.8
+	c116.3-53.5,168.3-101.9,218.8-171.9c13.4-19.3,26.9-39.5,40.3-60.4c41-64,81.2-134.5,117.2-204.6c34.7-67.7,65.3-134.8,88.8-195.3
+	c14.9-38.5,26.9-74.3,35.2-105.7c7.3-27.7,13-54,17.4-79.1C1941.9,531.6,1751.5,557,1627.6,563.1z"/>
+<path fill="#BE202E" d="M1369.6,1939.4c-8,1.4-16.1,2.7-24.3,3.8l0,0C1353.5,1942.1,1361.6,1940.8,1369.6,1939.4z"/>
+<path opacity="0.35" fill="#BE202E" d="M1369.6,1939.4c-8,1.4-16.1,2.7-24.3,3.8l0,0C1353.5,1942.1,1361.6,1940.8,1369.6,1939.4z"/>
+<linearGradient id="SVGID_8_" gradientUnits="userSpaceOnUse" x1="-9346.126" y1="1152.7261" x2="-5086.9941" y2="1152.7261" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 3144.8108 -4619.2983)">
+	<stop  offset="0.3233" style="stop-color:#9E2064"/>
+	<stop  offset="0.6302" style="stop-color:#C92037"/>
+	<stop  offset="0.7514" style="stop-color:#CD2335"/>
+	<stop  offset="1" style="stop-color:#E97826"/>
+</linearGradient>
+<path fill="url(#SVGID_8_)" d="M1369.6,1939.4c-8,1.4-16.1,2.7-24.3,3.8l0,0C1353.5,1942.1,1361.6,1940.8,1369.6,1939.4z"/>
+<path fill="#BE202E" d="M1433.2,1735.7c2.6-0.3,5.1-0.8,7.6-1.1C1438.3,1734.9,1435.8,1735.3,1433.2,1735.7L1433.2,1735.7z"/>
+<path opacity="0.35" fill="#BE202E" d="M1433.2,1735.7c2.6-0.3,5.1-0.8,7.6-1.1C1438.3,1734.9,1435.8,1735.3,1433.2,1735.7
+	L1433.2,1735.7z"/>
+<linearGradient id="SVGID_9_" gradientUnits="userSpaceOnUse" x1="-9346.126" y1="1137.7247" x2="-5086.9941" y2="1137.7247" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 3144.8108 -4619.2983)">
+	<stop  offset="0.3233" style="stop-color:#9E2064"/>
+	<stop  offset="0.6302" style="stop-color:#C92037"/>
+	<stop  offset="0.7514" style="stop-color:#CD2335"/>
+	<stop  offset="1" style="stop-color:#E97826"/>
+</linearGradient>
+<path fill="url(#SVGID_9_)" d="M1433.2,1735.7c2.6-0.3,5.1-0.8,7.6-1.1C1438.3,1734.9,1435.8,1735.3,1433.2,1735.7L1433.2,1735.7z"
+	/>
+<path fill="#BE202E" d="M1433.5,1735.6c0,0,0.1,0,0.1-0.1l0,0l0,0l0,0C1433.6,1735.5,1433.5,1735.5,1433.5,1735.6z"/>
+<path opacity="0.35" fill="#BE202E" d="M1433.5,1735.6c0,0,0.1,0,0.1-0.1l0,0l0,0l0,0C1433.6,1735.5,1433.5,1735.5,1433.5,1735.6z"
+	/>
+<linearGradient id="SVGID_10_" gradientUnits="userSpaceOnUse" x1="-6953.4072" y1="1134.7161" x2="-6011.9995" y2="1134.7161" gradientTransform="matrix(0.4226 -0.9063 0.9063 0.4226 3144.8108 -4619.2983)">
+	<stop  offset="0.3233" style="stop-color:#9E2064"/>
+	<stop  offset="0.6302" style="stop-color:#C92037"/>
+	<stop  offset="0.7514" style="stop-color:#CD2335"/>
+	<stop  offset="1" style="stop-color:#E97826"/>
+</linearGradient>
+<path fill="url(#SVGID_10_)" d="M1433.5,1735.6c0,0,0.1,0,0.1-0.1l0,0l0,0l0,0C1433.6,1735.5,1433.5,1735.5,1433.5,1735.6z"/>
+<path fill="#6D6E71" d="M2218.7,387v11.7h27.4v77.4h12.7v-77.4h27.6V387H2218.7z M2377,387l-30.6,62.2l-30.8-62.2h-15.3v89.1h11.7
+	v-70.7l30.3,61.3h8.1l30.3-61.3v70.7h11.7V387H2377z"/>
+</svg>
diff --git a/img/milagro.svg b/img/milagro.svg
index 32afb59..df1a8c1 100644
--- a/img/milagro.svg
+++ b/img/milagro.svg
@@ -1 +1,24 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="90.3" height="117" viewBox="0 0 90.3 117"><path d="M85.9 105.4L1.8 66.2C.7 65.7 0 64.6 0 63.4v-49c0-2.3 2.4-3.8 4.4-2.8l84.1 39.2c1.1.5 1.8 1.6 1.8 2.8v49c0 2.3-2.3 3.8-4.4 2.8z" fill="#c2ff17"/><path d="M88.8 52.3L0 93.7v20.2c0 2.3 2.4 3.8 4.4 2.8l84.1-39.2c1.1-.5 1.8-1.6 1.8-2.8V53.6c0-.7-.2-1.3-.5-1.8-.2-.4-.6-.6-1-.9.2.2.3.4.3.7 0 .3-.1.5-.3.7z" fill="#31bca4"/><path d="M1.6 64.7l88.8-41.4V3.1C90.4.8 88-.7 86 .3L1.8 39.5C.7 40 0 41.1 0 42.3v21.1c0 .7.2 1.3.5 1.8.2.4.6.6 1 .9-.2-.2-.3-.4-.3-.7 0-.3.1-.5.4-.7z" fill="#40d37b"/></svg>
\ No newline at end of file
+<svg version="1.1"
+	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+	 x="0px" y="0px" width="90.3px" height="117px" viewBox="0 0 90.3 117" style="enable-background:new 0 0 90.3 117;"
+	 xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#C2FF17;}
+	.st1{fill:#31BCA4;}
+	.st2{fill:#40D37B;}
+</style>
+<defs>
+</defs>
+<g>
+	<path class="st0" d="M85.9,105.4L1.8,66.2C0.7,65.7,0,64.6,0,63.4v-49c0-2.3,2.4-3.8,4.4-2.8l84.1,39.2c1.1,0.5,1.8,1.6,1.8,2.8v49
+		C90.3,104.9,88,106.4,85.9,105.4z"/>
+	<g>
+		<path class="st1" d="M88.8,52.3L0,93.7l0,20.2c0,2.3,2.4,3.8,4.4,2.8l84.1-39.2c1.1-0.5,1.8-1.6,1.8-2.8V53.6
+			c0-0.7-0.2-1.3-0.5-1.8l0,0l0,0c0,0,0,0,0,0l0,0c-0.2-0.4-0.6-0.6-1-0.9c0.2,0.2,0.3,0.4,0.3,0.7C89.1,51.9,89,52.1,88.8,52.3z"/>
+	</g>
+	<g>
+		<path class="st2" d="M1.6,64.7l88.8-41.4V3.1c0-2.3-2.4-3.8-4.4-2.8L1.8,39.5C0.7,40,0,41.1,0,42.3v21.1c0,0.7,0.2,1.3,0.5,1.8
+			l0,0c0,0,0,0,0,0c0,0,0,0,0,0l0,0c0.2,0.4,0.6,0.6,1,0.9c-0.2-0.2-0.3-0.4-0.3-0.7C1.2,65.1,1.3,64.9,1.6,64.7z"/>
+	</g>
+</g>
+</svg>
diff --git a/img/oss_logo.png b/img/oss_logo.png
index 4e12efb..ae7dee9 100644
--- a/img/oss_logo.png
+++ b/img/oss_logo.png
Binary files differ
diff --git a/img/undraw_code_review.svg b/img/undraw_code_review.svg
index b42acae..c54dda2 100644
--- a/img/undraw_code_review.svg
+++ b/img/undraw_code_review.svg
@@ -1 +1 @@
-<svg data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="1126.194" height="855" viewBox="0 0 1126.194 855"><path d="M544.864 755.938C302.465 737.49 13.394 549.672 28.111 356.28S322.797-17.142 565.196 1.305 947.128 381.167 932.41 574.558s-145.148 199.827-387.547 181.38z" fill="#f2f2f2"/><ellipse cx="565.194" cy="756" rx="506" ry="31" fill="#3f3d56"/><ellipse cx="565.194" cy="755.5" rx="431" ry="20.5" opacity=".1"/><ellipse cx="212.194" cy="836.5" rx="212.194" ry="18.5" fill="#3f3d56"/><ellipse cx="212.194" cy="836.202" rx="180.742" ry="12.234" opacity=".1"/><path fill="#3f3d56" d="M196.194 162h752v590h-752z"/><path d="M563.638 242.63H378.12a2.251 2.251 0 110-4.504h185.518a2.251 2.251 0 010 4.503zm203.079 24.765H474.932a2.251 2.251 0 010-4.503h291.785a2.251 2.251 0 110 4.503zM564.539 292.16H379.02a2.251 2.251 0 110-4.502h185.518a2.251 2.251 0 110 4.503zm202.178.45H581.199a2.251 2.251 0 010-4.502h185.518a2.251 2.251 0 110 4.503zm-201.728 24.316H379.471a2.251 2.251 0 010-4.503H564.99a2.251 2.251 0 110 4.503zm.451 24.766H379.921a2.251 2.251 0 010-4.503h185.517a2.251 2.251 0 110 4.503zm84.203-98.612h-53.134a2.251 2.251 0 010-4.503h53.134a2.251 2.251 0 110 4.502zm0 73.846h-53.134a2.251 2.251 0 010-4.503h53.134a2.251 2.251 0 110 4.503zm0 24.316h-53.134a2.251 2.251 0 110-4.503h53.134a2.251 2.251 0 110 4.503zm89.157 0h-53.134a2.251 2.251 0 010-4.503h53.133a2.251 2.251 0 110 4.503zm-307.996-73.847H377.67a2.251 2.251 0 010-4.503h53.134a2.251 2.251 0 010 4.503zM563.863 607.36H378.346a2.251 2.251 0 010-4.502h185.517a2.251 2.251 0 010 4.503zm-.9 49.532H377.445a2.251 2.251 0 110-4.503h185.518a2.251 2.251 0 010 4.503zm.45 24.766H377.895a2.251 2.251 0 110-4.503h185.518a2.251 2.251 0 110 4.503zm79.25-24.316H589.53a2.251 2.251 0 010-4.503h53.133a2.251 2.251 0 010 4.503zm0 24.316H589.53a2.251 2.251 0 010-4.503h53.133a2.251 2.251 0 110 4.503zm89.157-24.316h-53.134a2.251 2.251 0 110-4.503h53.134a2.251 2.251 0 010 4.503zm35.122-25.216H475.157a2.251 2.251 0 010-4.503h291.785a2.251 2.251 0 010 4.503zm-335.913 0h-53.134a2.251 2.251 0 010-4.503h53.134a2.251 2.251 0 010 4.503zm335.913 74.748H475.157a2.251 2.251 0 110-4.503h291.785a2.251 2.251 0 010 4.503zm-335.913 0h-53.134a2.251 2.251 0 110-4.503h53.134a2.251 2.251 0 110 4.503z" fill="#f2f2f2"/><path fill="#0f5d40" d="M519.06 401.13l-72.046 71.145 72.046 71.145 16.21-16.21-54.484-54.485 54.934-54.935-16.66-16.66zm106.267 0l72.046 71.145-72.046 71.145-16.21-16.21 54.485-54.485-54.935-54.935 16.66-16.66z"/><circle cx="216.194" cy="177" r="9" fill="#0f5d40"/><circle cx="240.194" cy="177" r="9" fill="#0f5d40"/><circle cx="264.194" cy="177" r="9" fill="#0f5d40"/><path opacity=".1" d="M196.194 192h752v3h-752z"/><path d="M1126.194 607.454c0 63.77-37.911 86.037-84.677 86.037s-84.676-22.266-84.676-86.037 84.676-144.898 84.676-144.898 84.677 81.126 84.677 144.898z" fill="#f2f2f2"/><path fill="#3f3d56" d="M1038.433 683.736l.867-53.371 36.091-66.027-35.955 57.655.39-23.998 24.873-47.769-24.77 41.419.701-43.161 26.635-38.031-26.525 31.244.438-79.141-2.753 104.769.226-4.322-27.08-41.451 26.646 49.748-2.523 48.203-.075-1.28-31.219-43.621 31.124 48.141-.315 6.028-.057.091.026.495-6.402 122.296h8.553l1.026-63.168 31.049-48.024-30.971 43.275z"/><path d="M122.622 751.091a43.126 43.126 0 01-8.178 3.503c-5.08 1.387-10.508.878-15.638 2.063-2.1.485-4.386 1.499-5.054 3.548-.49 1.504.043 3.127.554 4.624 5.668 16.62 9.085 34.266 18.125 49.32a74.64 74.64 0 0013.992 16.988c2.056 1.852 4.385 3.664 7.136 3.955a7.248 7.248 0 007.37-10.182c-.81-1.801-2.317-3.197-3.289-4.916a18.757 18.757 0 01-1.819-6.99c-.893-7.11-1.754-14.538.71-21.266 1.651-4.512 4.681-8.359 7.206-12.447s4.621-8.772 4.06-13.544c-.384-3.257-1.972-6.237-3.65-9.054-1.682-2.823-5.005-10.409-8.383-11.35-3.507-.979-10.084 4.181-13.142 5.748zm92.435 57.409a14.019 14.019 0 01-.664 4.745c-1.057 2.793-3.68 4.706-5.036 7.367-1.885 3.7-1.03 8.174.218 12.135.783 2.483 1.81 5.067 3.913 6.602a12.893 12.893 0 005.954 1.908c18.036 2.496 36.358 1.064 54.558 1.587 3.317.095 6.83.211 9.725-1.41s4.686-5.697 2.717-8.368c-1.769-2.398-5.265-2.376-8.242-2.517a33.912 33.912 0 01-20.913-8.615 15.112 15.112 0 01-2.934-3.377 20.753 20.753 0 01-1.534-3.517 156.799 156.799 0 00-9.083-20.119c-.98-1.815-2.087-3.705-3.906-4.676a10.323 10.323 0 00-4.24-.926c-4.536-.294-16.283-1.838-19.79 1.69-3.242 3.26-.672 13.351-.743 17.491z" fill="#2f2e41"/><circle cx="242.971" cy="376.72" r="28.975" fill="#fbbebe"/><path d="M216.806 400.646c-1.724 4.614-4.647 8.947-8.9 11.43l40.074 8.174a42.453 42.453 0 01-.562-17.869 10.3 10.3 0 00.24-4.409c-.754-2.907-4.027-4.306-6.955-4.974-7.314-1.667-13.782-2.561-20.579-5.792-2.077 3.557-1.787 9.34-3.318 13.44z" fill="#fbbebe"/><path d="M207.57 401.227a31.338 31.338 0 0127.314.714c5.138 2.707 9.392 6.794 13.571 10.826 3.853 3.717 7.963 7.972 8.236 13.319.133 2.59-.676 5.122-1.084 7.683a25.766 25.766 0 0013.78 26.47c3.184 5.303 3.84 11.729 3.89 17.914.185 23.436-7.21 47.16-1.93 69.995 1.239 5.362 3.16 10.554 4.231 15.952 1.387 6.99 1.319 14.18 2.044 21.27a95.266 95.266 0 005.114 22.495c-1.744 2.774-5.374 3.837-8.643 3.613s-6.325-1.644-9.242-3.136c-14.123-7.227-27.059-16.757-41.687-22.9-9.677-4.063-19.987-6.595-29.376-11.288s-18.12-12.142-20.99-22.238c-1.241-4.365-1.318-8.965-1.385-13.503-.286-19.114-.55-38.436 3.61-57.094 3.669-16.453 10.741-32.194 12.284-48.98.502-5.465.513-11.314 3.566-15.874 4.315-6.445 13.632-8.114 16.698-15.238z" fill="#2f2e41"/><path d="M226.492 377.13c1.707-2.228 5-2.531 7.727-1.872s5.243 2.064 7.998 2.598a4.675 4.675 0 003.743-.526 5.444 5.444 0 001.616-3.57 68.163 68.163 0 00.67-17.38 5.147 5.147 0 01.16-2.438c.681-1.643 2.762-2.034 4.461-2.562a13.316 13.316 0 009.013-13.633 5.42 5.42 0 00-1.657-3.74c-1.175-.958-2.82-1.017-4.336-1.029q-11.683-.094-23.366.006c-2.883.024-5.91.095-8.41 1.532-1.847 1.063-3.221 2.773-4.88 4.112-4.326 3.491-10.178 4.201-15.441 5.99a15.308 15.308 0 00-6.768 4.036c-1.75 2-2.592 4.974-1.492 7.393a26.252 26.252 0 001.886 2.904c3.105 4.964 1.038 11.403 1.502 17.24.579 7.288 11.365 19.111 18.679 20.836 11.807 2.784 4.986-15.113 8.895-19.898zm-16.358 319.553c.745 5.321 1.701 10.661 1.446 16.029-.357 7.493-3.06 14.714-3.56 22.2-.372 5.59.49 11.241-.286 16.79-.497 3.554-1.656 6.979-2.373 10.494a43.395 43.395 0 006.973 33.266 5.448 5.448 0 002.024 1.96 5.714 5.714 0 002.507.333 179.947 179.947 0 0025.17-2.288 2.414 2.414 0 001.617-.713 2.266 2.266 0 00.35-.954c1.545-7.936-1.976-15.893-2.871-23.928-.956-8.58 1.103-17.178 3.146-25.565a113.548 113.548 0 013.467-12.228c.988-2.697 2.181-5.32 3.037-8.063a61.46 61.46 0 002.202-13.202q.892-10.575.945-21.2a88.958 88.958 0 00-1.665-20.01c-1.878-8.337-5.724-16.08-9.536-23.73a15.029 15.029 0 00-5.618 2.67 125.38 125.38 0 01-15.35 8.481c-3.567 1.657-10.522 2.834-12.786 6.286-2.232 3.405-.792 10.35-.621 14.106q.439 9.667 1.782 19.266z" fill="#2f2e41"/><path d="M210.134 696.683c.745 5.321 1.701 10.661 1.446 16.029-.357 7.493-3.06 14.714-3.56 22.2-.372 5.59.49 11.241-.286 16.79-.497 3.554-1.656 6.979-2.373 10.494a43.395 43.395 0 006.973 33.266 5.448 5.448 0 002.024 1.96 5.714 5.714 0 002.507.333 179.947 179.947 0 0025.17-2.288 2.414 2.414 0 001.617-.713 2.266 2.266 0 00.35-.954c1.545-7.936-1.976-15.893-2.871-23.928-.956-8.58 1.103-17.178 3.146-25.565a113.548 113.548 0 013.467-12.228c.988-2.697 2.181-5.32 3.037-8.063a61.46 61.46 0 002.202-13.202q.892-10.575.945-21.2a88.958 88.958 0 00-1.665-20.01c-1.878-8.337-5.724-16.08-9.536-23.73a15.029 15.029 0 00-5.618 2.67 125.38 125.38 0 01-15.35 8.481c-3.567 1.657-10.522 2.834-12.786 6.286-2.232 3.405-.792 10.35-.621 14.106q.439 9.667 1.782 19.266z" opacity=".1"/><path d="M170.961 583.018c-3.848 10.36 1.808 21.554 6.722 31.452 12.106 24.386 20.513 50.408 28.875 76.317.626 1.941 1.252 4.059.554 5.975a7.825 7.825 0 01-2.822 3.347c-5.766 4.379-13.107 5.938-19.975 8.23a90.184 90.184 0 00-18.943 8.88c-4.976 3.083-9.639 6.643-14.291 10.197l-14.812 11.312a9.903 9.903 0 00-2.476 2.397c-1.429 2.241-.844 5.167-.132 7.728a131.432 131.432 0 007.252 19.792 6.911 6.911 0 002.63 3.447c2.312 1.242 5.14-.405 6.905-2.347s3.292-4.36 5.78-5.193c2.487-.833 5.223.176 7.819-.189 4.198-.59 6.986-4.457 10.012-7.426 12.366-12.131 33.01-11.251 46.613-21.977a59.228 59.228 0 016.23-4.868c2.3-1.36 4.908-2.105 7.294-3.307 7.257-3.654 11.819-11.208 14.262-18.957s3.141-15.928 4.897-23.86c.908-4.101 2.103-8.158 2.507-12.339a66.094 66.094 0 00-.253-11.666l-4.908-60.715c-.4-4.943-.8-9.893-1.576-14.79-14.577.52-29.143 1.107-43.728 1.28-11.605.136-23.424.948-34.436-2.72z" fill="#2f2e41"/><path d="M165.602 597.221c1.978 3.18 6.79 3.114 10.105 1.37s5.889-4.672 9.21-6.4c4.464-2.323 9.747-2.236 14.777-2.094 7.963.225 16.025.465 23.687 2.647 7.924 2.257 15.64 6.603 23.834 5.736 1.425-.15 2.985-.56 3.76-1.765a5.544 5.544 0 00.62-2.836l.268-7.159a6.464 6.464 0 00-.57-3.625 6.082 6.082 0 00-2.716-2.08c-11.663-5.646-24.964-6.697-37.915-7.14q-9.874-.34-19.757-.28c-5.591.035-12.303-.774-17.739.72-7.295 2.005-11.265 16.954-7.563 22.906z" fill="#2f2e41"/><path d="M238.84 409.726c-15.283-.136-29.132-10.223-44.413-10.469a11.514 11.514 0 00-5.392.93c-2.13 1.073-3.53 3.147-5.147 4.9-4.518 4.892-11.061 7.504-15.703 12.28-4.352 4.478-6.773 11.15-5.055 17.153s8.204 10.609 14.28 9.165a36.8 36.8 0 0114.336-19.479 72.887 72.887 0 0111.206-5.882c6.868-3.112 14.547-6.283 21.718-3.95a30.638 30.638 0 017.409 4.04l11.954 8.03c-1.393-5.494-2.646-11.656-5.194-16.718z" fill="#0f5d40"/><path d="M175.65 438.374c-2.03 2.532.893 6.2.446 9.413-.298 2.135-2.055 3.766-2.786 5.793-.758 2.1-.356 4.427-.644 6.642a28.489 28.489 0 01-1.275 4.73 84.975 84.975 0 00-2.686 14.025l-2.675 19.975a75.681 75.681 0 00-.846 9.078 27.107 27.107 0 01-.452 6.787c-.592 2.183-1.904 4.093-2.786 6.176s-1.292 4.602-.1 6.524c-3.991 3.325-5.178 9.854-2.387 14.235a7.9 7.9 0 011.23 2.265 5.82 5.82 0 01-.542 3.34l-2.704 7.207c-.693 1.845-.912 4.653 1.013 5.074a17.006 17.006 0 00-3.651 5.767 6.866 6.866 0 00.972 6.506 8.289 8.289 0 011.695 2.056 5.473 5.473 0 01-.196 3.243 11.906 11.906 0 001.473 9.334 8.371 8.371 0 008.418 3.608c5.41-1.22 10.273-3.147 15.728-2.146 11.746 2.156 23.53 4.32 34.906 7.952 12.984 4.146 25.556 10.225 39.126 11.5a3.798 3.798 0 002.617-.406 3.93 3.93 0 001.21-2.488l4.194-19.665a202.363 202.363 0 003.855-22.027c.477-4.781.613-9.59.75-14.393l1.08-38.23a38.197 38.197 0 00-2.2-16.62l-6.218-19.848c-3.548-11.327-11.687-21.372-14.585-32.882-1.834-7.285-3.19-15.103-8.108-20.781-7.013-8.095-19.145-9.354-29.764-7.962-4.797.628-9.636 1.714-13.785 4.201-4.798 2.877-8.333 7.41-11.753 11.837-2.818 3.649-5.687 6.582-8.57 10.18z" fill="#0f5d40"/><path d="M200.444 550.823c.875 3.773 2.712 7.252 3.837 10.957 1.884 6.21 1.725 12.896 3.605 19.106.79 2.606 1.933 5.109 2.5 7.773 1.32 6.21-.608 12.635-3.004 18.515s-5.313 11.678-6.09 17.98c-.549 4.438.238 9.45 3.66 12.33 3.551 2.99 8.712 2.788 13.338 2.39a14.016 14.016 0 004.841-1.008c3.538-1.673 5.028-5.86 5.855-9.685 2.771-12.819 1.98-26.106 1.174-39.196l-2.106-34.235c-.405-6.59-.84-13.318-2.87-19.646-.74-2.302-2.027-6.954-4.13-8.424-2.082-1.455-8.03-1.52-10.608-1.641-12.098-.569-11.963 16.317-10.002 24.784z" fill="#fbbebe"/><path d="M213.848 424.423c-2.47-1.293-5.583-.736-7.972.705a24.568 24.568 0 00-5.972 5.798c-5.338 6.517-10.99 13.995-10.198 22.382.296 3.145 1.5 6.12 2.317 9.172 3.58 13.38-.379 27.53.075 41.373.263 7.999 2.003 15.867 3.737 23.68.353 1.594.92 3.44 2.462 3.977 1.16.403 2.41-.115 3.558-.551a28.371 28.371 0 0125.963 3.272c2.865-1.529 1.791-6.363 1.149-9.546-1.909-9.457.682-19.214 3.828-28.335s6.91-18.23 7.432-27.865c.59-10.916-3.029-21.57-6.6-31.903-.78-2.255-1.631-4.62-3.438-6.178a13.665 13.665 0 00-5.203-2.377c-3.793-1.121-7.634-1.769-11.138-3.604z" fill="#2f2e41"/></svg>
\ No newline at end of file
+<svg id="a594ac37-6d44-4297-8862-1cbd9c01c0b7" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="1126.19355" height="855" viewBox="0 0 1126.19355 855"><title>code review</title><path d="M581.7675,778.43794C339.36866,759.99137,50.29677,572.17166,65.01385,378.78054S359.70017,5.35846,602.099,23.805,984.03089,403.667,969.31381,597.05809,824.16633,796.88451,581.7675,778.43794Z" transform="translate(-36.90323 -22.5)" fill="#f2f2f2"/><ellipse cx="565.19355" cy="756" rx="506" ry="31" fill="#3f3d56"/><ellipse cx="565.19355" cy="755.5" rx="431" ry="20.5" opacity="0.1"/><ellipse cx="212.19355" cy="836.5" rx="212.19355" ry="18.5" fill="#3f3d56"/><ellipse cx="212.19355" cy="836.20161" rx="180.74194" ry="12.23387" opacity="0.1"/><rect x="196.19355" y="162" width="752" height="590" fill="#3f3d56"/><path d="M600.54135,265.12914H415.02363a2.25143,2.25143,0,1,1,0-4.50285H600.54135a2.25143,2.25143,0,0,1,0,4.50285Z" transform="translate(-36.90323 -22.5)" fill="#f2f2f2"/><path d="M803.6202,289.89486H511.83506a2.25143,2.25143,0,0,1,0-4.50286H803.6202a2.25143,2.25143,0,1,1,0,4.50286Z" transform="translate(-36.90323 -22.5)" fill="#f2f2f2"/><path d="M601.44192,314.66057H415.9242a2.25143,2.25143,0,1,1,0-4.50286H601.44192a2.25143,2.25143,0,1,1,0,4.50286Z" transform="translate(-36.90323 -22.5)" fill="#f2f2f2"/><path d="M803.6202,315.11086H618.10249a2.25143,2.25143,0,0,1,0-4.50286H803.6202a2.25143,2.25143,0,1,1,0,4.50286Z" transform="translate(-36.90323 -22.5)" fill="#f2f2f2"/><path d="M601.8922,339.42629H416.37449a2.25143,2.25143,0,0,1,0-4.50286H601.8922a2.25143,2.25143,0,1,1,0,4.50286Z" transform="translate(-36.90323 -22.5)" fill="#f2f2f2"/><path d="M602.34249,364.192H416.82477a2.25143,2.25143,0,0,1,0-4.50286H602.34249a2.25143,2.25143,0,1,1,0,4.50286Z" transform="translate(-36.90323 -22.5)" fill="#f2f2f2"/><path d="M686.54592,265.57943H633.4122a2.25143,2.25143,0,0,1,0-4.50286h53.13372a2.25143,2.25143,0,1,1,0,4.50286Z" transform="translate(-36.90323 -22.5)" fill="#f2f2f2"/><path d="M686.54592,339.42629H633.4122a2.25143,2.25143,0,0,1,0-4.50286h53.13372a2.25143,2.25143,0,1,1,0,4.50286Z" transform="translate(-36.90323 -22.5)" fill="#f2f2f2"/><path d="M686.54592,363.74171H633.4122a2.25143,2.25143,0,1,1,0-4.50285h53.13372a2.25143,2.25143,0,1,1,0,4.50285Z" transform="translate(-36.90323 -22.5)" fill="#f2f2f2"/><path d="M775.70249,363.74171H722.56877a2.25143,2.25143,0,0,1,0-4.50285h53.13372a2.25143,2.25143,0,1,1,0,4.50285Z" transform="translate(-36.90323 -22.5)" fill="#f2f2f2"/><path d="M467.70706,289.89486H414.57335a2.25143,2.25143,0,0,1,0-4.50286h53.13371a2.25143,2.25143,0,0,1,0,4.50286Z" transform="translate(-36.90323 -22.5)" fill="#f2f2f2"/><path d="M600.76649,629.86057H415.24877a2.25143,2.25143,0,0,1,0-4.50286H600.76649a2.25143,2.25143,0,0,1,0,4.50286Z" transform="translate(-36.90323 -22.5)" fill="#f2f2f2"/><path d="M599.86592,679.392H414.3482a2.25143,2.25143,0,1,1,0-4.50286H599.86592a2.25143,2.25143,0,0,1,0,4.50286Z" transform="translate(-36.90323 -22.5)" fill="#f2f2f2"/><path d="M600.3162,704.15771H414.79849a2.25143,2.25143,0,1,1,0-4.50285H600.3162a2.25143,2.25143,0,1,1,0,4.50285Z" transform="translate(-36.90323 -22.5)" fill="#f2f2f2"/><path d="M679.56649,679.84229H626.43277a2.25143,2.25143,0,0,1,0-4.50286h53.13372a2.25143,2.25143,0,0,1,0,4.50286Z" transform="translate(-36.90323 -22.5)" fill="#f2f2f2"/><path d="M679.56649,704.15771H626.43277a2.25142,2.25142,0,0,1,0-4.50285h53.13372a2.25142,2.25142,0,1,1,0,4.50285Z" transform="translate(-36.90323 -22.5)" fill="#f2f2f2"/><path d="M768.72306,679.84229H715.58935a2.25143,2.25143,0,1,1,0-4.50286h53.13371a2.25143,2.25143,0,0,1,0,4.50286Z" transform="translate(-36.90323 -22.5)" fill="#f2f2f2"/><path d="M803.84535,654.62629H512.0602a2.25143,2.25143,0,0,1,0-4.50286H803.84535a2.25143,2.25143,0,0,1,0,4.50286Z" transform="translate(-36.90323 -22.5)" fill="#f2f2f2"/><path d="M467.9322,654.62629H414.79849a2.25143,2.25143,0,0,1,0-4.50286H467.9322a2.25143,2.25143,0,0,1,0,4.50286Z" transform="translate(-36.90323 -22.5)" fill="#f2f2f2"/><path d="M803.84535,729.37371H512.0602a2.25143,2.25143,0,1,1,0-4.50285H803.84535a2.25142,2.25142,0,0,1,0,4.50285Z" transform="translate(-36.90323 -22.5)" fill="#f2f2f2"/><path d="M467.9322,729.37371H414.79849a2.25143,2.25143,0,1,1,0-4.50285H467.9322a2.25143,2.25143,0,1,1,0,4.50285Z" transform="translate(-36.90323 -22.5)" fill="#f2f2f2"/><polygon points="519.06 401.13 447.014 472.275 519.06 543.42 535.27 527.21 480.786 472.725 535.72 417.79 519.06 401.13" fill="#0f5d40"/><polygon points="625.327 401.13 697.373 472.275 625.327 543.42 609.117 527.21 663.602 472.725 608.667 417.79 625.327 401.13" fill="#0f5d40"/><circle cx="216.19355" cy="177" r="9" fill="#0f5d40"/><circle cx="240.19355" cy="177" r="9" fill="#0f5d40"/><circle cx="264.19355" cy="177" r="9" fill="#0f5d40"/><rect x="196.19355" y="192" width="752" height="3" opacity="0.1"/><path d="M1163.09677,629.95357c0,63.77108-37.91089,86.03756-84.67635,86.03756s-84.67635-22.26648-84.67635-86.03756,84.67635-144.898,84.67635-144.898S1163.09677,566.18249,1163.09677,629.95357Z" transform="translate(-36.90323 -22.5)" fill="#f2f2f2"/><polygon points="1038.433 683.736 1039.3 630.365 1075.391 564.338 1039.436 621.993 1039.826 597.995 1064.699 550.226 1039.929 591.645 1039.929 591.645 1040.63 548.484 1067.265 510.453 1040.74 541.697 1041.178 462.556 1038.425 567.325 1038.651 563.003 1011.571 521.552 1038.217 571.3 1035.694 619.503 1035.619 618.223 1004.4 574.602 1035.524 622.743 1035.209 628.771 1035.152 628.862 1035.178 629.357 1028.776 751.653 1037.329 751.653 1038.355 688.485 1069.404 640.461 1038.433 683.736" fill="#3f3d56"/><path d="M159.52481,773.59144a43.12568,43.12568,0,0,1-8.17805,3.50253c-5.07883,1.38739-10.50718.8784-15.63716,2.06274-2.10034.4849-4.38629,1.49916-5.05424,3.54866-.48995,1.50331.04306,3.12668.55347,4.62317,5.66852,16.61991,9.08515,34.26625,18.12518,49.32052a74.64075,74.64075,0,0,0,13.99269,16.98766c2.05512,1.85228,4.38405,3.6643,7.13541,3.95491a7.24769,7.24769,0,0,0,7.37055-10.182c-.81056-1.8011-2.31727-3.19619-3.289-4.91569a18.757,18.757,0,0,1-1.81948-6.99071c-.89312-7.10831-1.7535-14.53764.70942-21.26517,1.6519-4.5122,4.68207-8.35894,7.20641-12.4475s4.62171-8.7719,4.06-13.544c-.38332-3.25659-1.97189-6.23685-3.65-9.054-1.68146-2.8227-5.00472-10.40837-8.38287-11.35035C169.16047,766.86441,162.583,772.02411,159.52481,773.59144Z" transform="translate(-36.90323 -22.5)" fill="#2f2e41"/><path d="M251.95981,831.00007a14.01882,14.01882,0,0,1-.66321,4.74531c-1.05756,2.79253-3.681,4.70608-5.03631,7.36685-1.885,3.70061-1.03063,8.17372.21823,12.13454.78295,2.48316,1.8099,5.067,3.91246,6.60271a12.89278,12.89278,0,0,0,5.95383,1.90719c18.03627,2.49619,36.35793,1.064,54.5586,1.587,3.31731.09532,6.82944.21147,9.72521-1.40969s4.686-5.6968,2.71651-8.36789c-1.76854-2.39854-5.26537-2.37621-8.24208-2.51756a33.912,33.912,0,0,1-20.913-8.61479,15.11172,15.11172,0,0,1-2.93335-3.37658,20.75292,20.75292,0,0,1-1.53436-3.51757,156.79876,156.79876,0,0,0-9.08354-20.11857c-.97877-1.81492-2.087-3.705-3.906-4.67631a10.32271,10.32271,0,0,0-4.23932-.92554c-4.53631-.294-16.28319-1.83785-19.791,1.68963C249.46137,816.76814,252.03167,826.86031,251.95981,831.00007Z" transform="translate(-36.90323 -22.5)" fill="#2f2e41"/><circle cx="242.9708" cy="376.72033" r="28.97496" fill="#fbbebe"/><path d="M253.709,423.14584c-1.72342,4.6139-4.64671,8.94711-8.90039,11.42995l40.0746,8.17466a42.45319,42.45319,0,0,1-.56181-17.869,10.30012,10.30012,0,0,0,.23975-4.409c-.75354-2.90746-4.02646-4.30693-6.95489-4.97449-7.31406-1.66731-13.7821-2.56141-20.57892-5.79173C254.9498,413.26279,255.24069,419.04525,253.709,423.14584Z" transform="translate(-36.90323 -22.5)" fill="#fbbebe"/><path d="M244.47385,423.72685a31.33845,31.33845,0,0,1,27.31312.71368c5.13776,2.70749,9.39191,6.79432,13.57151,10.82645,3.85264,3.71671,7.96244,7.97238,8.23588,13.31859.13245,2.58993-.67591,5.12286-1.08406,7.68385a25.76566,25.76566,0,0,0,13.78,26.46946c3.1836,5.30339,3.84065,11.7287,3.88948,17.91408.185,23.43592-7.20915,47.16094-1.93041,69.99538,1.23937,5.36117,3.16161,10.55391,4.2323,15.95129,1.38681,6.991,1.31835,14.17959,2.04391,21.26977a95.26625,95.26625,0,0,0,5.11322,22.49547c-1.744,2.7737-5.37357,3.83728-8.64228,3.61264s-6.3252-1.64311-9.24191-3.13567c-14.12327-7.22727-27.05918-16.75729-41.687-22.89955-9.67764-4.06367-19.98746-6.59488-29.37589-11.28823s-18.11988-12.14194-20.99049-22.238c-1.24124-4.36546-1.31765-8.96508-1.3854-13.50306-.28534-19.11376-.55046-38.43617,3.61-57.09382,3.669-16.45362,10.74145-32.1938,12.28438-48.98077.50223-5.46424.51295-11.31378,3.56594-15.87332C232.09135,432.52045,241.40863,430.85143,244.47385,423.72685Z" transform="translate(-36.90323 -22.5)" fill="#2f2e41"/><path d="M263.3948,399.62932c1.70735-2.22683,5.00024-2.53051,7.72786-1.87181s5.24265,2.06449,7.99738,2.59858a4.67544,4.67544,0,0,0,3.74325-.52575,5.44429,5.44429,0,0,0,1.61547-3.57028,68.16318,68.16318,0,0,0,.67089-17.38048,5.14652,5.14652,0,0,1,.15877-2.43744c.682-1.6434,2.7627-2.03456,4.46209-2.56176a13.31574,13.31574,0,0,0,9.01289-13.63308,5.42087,5.42087,0,0,0-1.6567-3.74055c-1.17523-.95765-2.82014-1.01649-4.33609-1.02867q-11.68307-.09382-23.36661.00565c-2.88278.02455-5.91029.09552-8.40937,1.53276-1.84769,1.06263-3.22171,2.773-4.88046,4.11154-4.32621,3.49111-10.17785,4.20145-15.44116,5.99071a15.30822,15.30822,0,0,0-6.76753,4.03565c-1.75035,1.99965-2.5919,4.97311-1.49261,7.39258a26.25205,26.25205,0,0,0,1.88685,2.9039c3.10463,4.96416,1.03778,11.40306,1.50139,17.23972.57892,7.28838,11.36495,19.11157,18.67879,20.83626C266.30761,422.31124,259.486,404.41359,263.3948,399.62932Z" transform="translate(-36.90323 -22.5)" fill="#2f2e41"/><path d="M247.0375,719.1826c.74512,5.32168,1.7007,10.66172,1.44525,16.02924-.35664,7.49365-3.05912,14.71381-3.55872,22.19929-.37315,5.59084.48989,11.24214-.28652,16.79137-.49715,3.55325-1.65585,6.97849-2.37315,10.49392a43.39491,43.39491,0,0,0,6.97307,33.26545,5.44788,5.44788,0,0,0,2.02339,1.961,5.7137,5.7137,0,0,0,2.50788.3318,179.9472,179.9472,0,0,0,25.17023-2.28749,2.41432,2.41432,0,0,0,1.61622-.71311,2.26567,2.26567,0,0,0,.351-.954c1.54379-7.936-1.97676-15.89332-2.872-23.92837-.95593-8.57968,1.10271-17.17733,3.14612-25.56477a113.54767,113.54767,0,0,1,3.46738-12.22773c.9877-2.69735,2.18054-5.32086,3.0366-8.06284a61.46035,61.46035,0,0,0,2.202-13.20261q.89161-10.57524.94476-21.19892a88.95779,88.95779,0,0,0-1.66511-20.01c-1.878-8.338-5.7238-16.08066-9.53591-23.73028a15.02852,15.02852,0,0,0-5.61784,2.67008,125.37991,125.37991,0,0,1-15.35,8.48057c-3.56655,1.65676-10.52195,2.83342-12.78554,6.28577-2.23228,3.40461-.792,10.35082-.62145,14.10572Q245.69419,709.58425,247.0375,719.1826Z" transform="translate(-36.90323 -22.5)" fill="#2f2e41"/><path d="M247.0375,719.1826c.74512,5.32168,1.7007,10.66172,1.44525,16.02924-.35664,7.49365-3.05912,14.71381-3.55872,22.19929-.37315,5.59084.48989,11.24214-.28652,16.79137-.49715,3.55325-1.65585,6.97849-2.37315,10.49392a43.39491,43.39491,0,0,0,6.97307,33.26545,5.44788,5.44788,0,0,0,2.02339,1.961,5.7137,5.7137,0,0,0,2.50788.3318,179.9472,179.9472,0,0,0,25.17023-2.28749,2.41432,2.41432,0,0,0,1.61622-.71311,2.26567,2.26567,0,0,0,.351-.954c1.54379-7.936-1.97676-15.89332-2.872-23.92837-.95593-8.57968,1.10271-17.17733,3.14612-25.56477a113.54767,113.54767,0,0,1,3.46738-12.22773c.9877-2.69735,2.18054-5.32086,3.0366-8.06284a61.46035,61.46035,0,0,0,2.202-13.20261q.89161-10.57524.94476-21.19892a88.95779,88.95779,0,0,0-1.66511-20.01c-1.878-8.338-5.7238-16.08066-9.53591-23.73028a15.02852,15.02852,0,0,0-5.61784,2.67008,125.37991,125.37991,0,0,1-15.35,8.48057c-3.56655,1.65676-10.52195,2.83342-12.78554,6.28577-2.23228,3.40461-.792,10.35082-.62145,14.10572Q245.69419,709.58425,247.0375,719.1826Z" transform="translate(-36.90323 -22.5)" opacity="0.1"/><path d="M207.86438,605.518c-3.84776,10.35941,1.80816,21.55375,6.722,31.45209,12.106,24.38615,20.51267,50.40745,28.87447,76.31727.62635,1.9408,1.2522,4.05818.55393,5.97428a7.82535,7.82535,0,0,1-2.82176,3.347c-5.76549,4.37915-13.10677,5.93873-19.97473,8.2298a90.18354,90.18354,0,0,0-18.94265,8.87995c-4.97678,3.08387-9.63891,6.64386-14.29189,10.1975l-14.812,11.31248a9.903,9.903,0,0,0-2.47578,2.39658c-1.4286,2.24131-.84344,5.16734-.13218,7.72829a131.43212,131.43212,0,0,0,7.25213,19.792,6.911,6.911,0,0,0,2.63,3.44664c2.31193,1.24241,5.13971-.405,6.90515-2.34714s3.29242-4.35894,5.78108-5.1927c2.48574-.83278,5.2216.17573,7.81767-.18871,4.19867-.58943,6.98621-4.45724,10.01273-7.42649,12.36533-12.13133,33.01009-11.25124,46.61244-21.97723a59.22781,59.22781,0,0,1,6.231-4.86753c2.29954-1.35929,4.90732-2.10533,7.29316-3.30673,7.25663-3.65411,11.81865-11.20854,14.26244-18.957s3.14074-15.92786,4.89686-23.86053c.90786-4.10092,2.10291-8.15769,2.50676-12.33845a66.09392,66.09392,0,0,0-.25308-11.6661L287.604,621.74782c-.3996-4.94331-.79987-9.89239-1.57574-14.79076-14.57664.5211-29.14284,1.10754-43.72778,1.28C230.69491,608.37423,218.87609,609.18554,207.86438,605.518Z" transform="translate(-36.90323 -22.5)" fill="#2f2e41"/><path d="M202.50573,619.721c1.97737,3.18011,6.79016,3.11442,10.10427,1.37092s5.8888-4.67259,9.21071-6.40118c4.46387-2.32282,9.74611-2.23547,14.77617-2.0934,7.96357.22492,16.02491.46432,23.68692,2.64671,7.92486,2.25727,15.63969,6.60332,23.834,5.7363,1.4259-.15087,2.98505-.55979,3.76106-1.76551a5.54448,5.54448,0,0,0,.61966-2.83582l.26794-7.159a6.46407,6.46407,0,0,0-.57-3.62533,6.08162,6.08162,0,0,0-2.71588-2.07944c-11.66338-5.64612-24.96458-6.69742-37.91511-7.14107q-9.87458-.33828-19.75748-.27827c-5.591.03409-12.303-.77486-17.73873.71906C202.77416,598.81994,198.8047,613.76883,202.50573,619.721Z" transform="translate(-36.90323 -22.5)" fill="#2f2e41"/><path d="M275.74249,432.22556c-15.28217-.13537-29.131-10.22251-44.4118-10.46824a11.51447,11.51447,0,0,0-5.39263.93046c-2.12932,1.07263-3.52928,3.14668-5.14679,4.89829-4.51828,4.89285-11.0612,7.50531-15.703,12.28109-4.35234,4.47793-6.77287,11.14957-5.05456,17.15307s8.20353,10.60849,14.279,9.16523A36.80081,36.80081,0,0,1,228.64955,446.706a72.88717,72.88717,0,0,1,11.20533-5.88209c6.86792-3.11167,14.54778-6.28282,21.71787-3.95031a30.63793,30.63793,0,0,1,7.40918,4.04034l11.95388,8.03C279.54293,443.44994,278.29044,437.28837,275.74249,432.22556Z" transform="translate(-36.90323 -22.5)" fill="#0f5d40"/><path d="M212.55243,460.87394c-2.0293,2.53158.894,6.19965.44656,9.41317-.29726,2.13512-2.05431,3.76539-2.786,5.79313-.75791,2.10039-.356,4.427-.64344,6.64132a28.48866,28.48866,0,0,1-1.2751,4.72964,84.97452,84.97452,0,0,0-2.68638,14.02574l-2.6749,19.97555a75.68111,75.68111,0,0,0-.846,9.07789,27.10744,27.10744,0,0,1-.45211,6.78677c-.59232,2.183-1.90386,4.09275-2.78616,6.17547s-1.29127,4.602-.09937,6.52435c-3.99144,3.32456-5.17826,9.85376-2.38732,14.235a7.89943,7.89943,0,0,1,1.23013,2.26518,5.81983,5.81983,0,0,1-.54176,3.34034l-2.7047,7.20665c-.69232,1.84469-.91128,4.65314,1.01352,5.07422a17.00617,17.00617,0,0,0-3.65133,5.76681,6.86617,6.86617,0,0,0,.97247,6.50559,8.28879,8.28879,0,0,1,1.69441,2.0563,5.47266,5.47266,0,0,1-.19586,3.24315,11.90573,11.90573,0,0,0,1.473,9.33345,8.37146,8.37146,0,0,0,8.41846,3.60852c5.41045-1.22031,10.27226-3.1467,15.72755-2.14571,11.746,2.15529,23.52979,4.31989,34.90618,7.952,12.984,4.1454,25.55606,10.22443,39.12586,11.50045a3.79783,3.79783,0,0,0,2.61662-.407,3.93069,3.93069,0,0,0,1.21-2.48763q2.097-9.83241,4.19405-19.66481a202.36327,202.36327,0,0,0,3.85525-22.02765c.47742-4.78125.61351-9.58923.7493-14.39234l1.08084-38.23106a38.19731,38.19731,0,0,0-2.2-16.61961l-6.21748-19.8483c-3.54813-11.32685-11.68773-21.37125-14.58576-32.8816-1.83417-7.285-3.18913-15.10292-8.10789-20.781-7.01237-8.09492-19.1447-9.354-29.76373-7.96222-4.79727.62876-9.63561,1.71382-13.78522,4.20176-4.79825,2.87682-8.33308,7.40861-11.75286,11.8363C218.30489,454.34281,215.43623,457.27636,212.55243,460.87394Z" transform="translate(-36.90323 -22.5)" fill="#0f5d40"/><path d="M237.34735,573.32348c.87491,3.77256,2.71233,7.25107,3.837,10.95684,1.88437,6.20878,1.72443,12.89561,3.60511,19.10551.78937,2.60646,1.93305,5.109,2.49961,7.77276,1.32091,6.21057-.60773,12.6356-3.0035,18.51576s-5.31347,11.678-6.0912,17.97962c-.54778,4.43849.23913,9.45012,3.66018,12.33051,3.55169,2.99038,8.71308,2.78787,13.33894,2.39a14.01584,14.01584,0,0,0,4.84121-1.00807c3.53766-1.67361,5.02767-5.85984,5.85461-9.685,2.77128-12.81912,1.97957-26.10621,1.17422-39.19671l-2.10613-34.2342c-.40547-6.59081-.83988-13.31809-2.87081-19.64644-.73878-2.302-2.02646-6.95382-4.12917-8.42371-2.0826-1.45584-8.02994-1.52068-10.60853-1.64177C235.25108,547.97044,235.3867,564.856,237.34735,573.32348Z" transform="translate(-36.90323 -22.5)" fill="#fbbebe"/><path d="M250.75137,446.9235c-2.47072-1.29382-5.58357-.736-7.97179.70446a24.56772,24.56772,0,0,0-5.9719,5.79818c-5.33892,6.51687-10.99072,13.99464-10.19889,22.38194.29689,3.14472,1.501,6.12087,2.31737,9.17226,3.57944,13.37964-.37874,27.53015.07542,41.37287.26243,7.99873,2.00293,15.86638,3.7363,23.67945.35375,1.59451.92034,3.44035,2.46284,3.97727,1.15873.40334,2.41033-.11521,3.55715-.55127A28.371,28.371,0,0,1,264.721,556.731c2.865-1.52869,1.79145-6.36261,1.14913-9.54579-1.90842-9.45767.68218-19.21438,3.82837-28.3353s6.91058-18.23032,7.43185-27.86453c.59061-10.91607-3.02875-21.57071-6.59987-31.903-.77948-2.25528-1.63134-4.6202-3.43861-6.17831a13.66523,13.66523,0,0,0-5.20292-2.377C258.09582,449.40594,254.25539,448.75842,250.75137,446.9235Z" transform="translate(-36.90323 -22.5)" fill="#2f2e41"/></svg>
diff --git a/img/undraw_monitor.svg b/img/undraw_monitor.svg
index aa75d79..2982cdc 100644
--- a/img/undraw_monitor.svg
+++ b/img/undraw_monitor.svg
@@ -1 +1 @@
-<svg data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1094.72" height="788.69" viewBox="0 0 1094.72 788.69"><defs><linearGradient id="a" x1="2938.83" y1="215.4" x2="2938.83" y2="-91.93" gradientTransform="rotate(59.3 1726.545 -1812.88)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="gray" stop-opacity=".25"/><stop offset=".54" stop-color="gray" stop-opacity=".12"/><stop offset="1" stop-color="gray" stop-opacity=".1"/></linearGradient><linearGradient id="b" x1="1364.21" y1="820.42" x2="1364.21" y2="492.03" gradientTransform="matrix(-1 -.04 -.04 1 2349.24 29.65)" xlink:href="#a"/></defs><g opacity=".5"><rect x="960.72" y="367.69" width="134" height="134" rx="14.12" fill="#d0d2d5"/><path d="M1008.72 406.2h38s32 28 0 57h-38s-32-26 0-57z" opacity=".1"/><path fill="#3f3d56" d="M1012.72 422.19h5v15h-5zm25-2h5v18h-5zm-10 26a6 6 0 016 6v5h-12v-5a6 6 0 016-6z"/></g><path d="M674.41 294.11c3.17-.07 6.33.17 9.49 0 2.89-.14 5.76-.61 8.65-.9 4.94-.49 9.92-.45 14.88-.66 3.26-.14 6.7-.46 9.34-2.38 2.48-1.79 3.86-4.71 6.07-6.83 9-8.65 15.17-20.22 23.17-29.82 2-2.44 4.09-4.87 5.9-7.48 3.47-5 5.92-10.67 8.36-16.27a45.11 45.11 0 002.4-6.42c.45-1.76.68-3.58 1.28-5.3 1.24-3.52 4.22-6.6 4.58-10.31l-.42.06c3.64-4.63 3.08-12.7 4.88-18.63a80.28 80.28 0 014.17-10.29l6.69-14.57c1.15-2.5 2.35-5.08 4.34-7 2.41-2.33 5.77-3.49 8.19-5.81a12.71 12.71 0 003.14-5.11l.21.2c1.28 1.25 2.28 2.78 3.53 4.07 2.69 2.78 6.42 4.37 9.16 7.1 1.4 1.39 2.55 3.08 4.24 4.09a4.7 4.7 0 005.44-.67c4.91-4.32 12.23-4.72 17.54-8.53 1.47-1.06 2.75-2.35 4.13-3.51a56.32 56.32 0 0110.67-6.7 26.61 26.61 0 016.59.94c3.08.85 6.09 2.26 9.29 2.2a13.4 13.4 0 007.81-3c1.63-1.26 3.12-3 3.36-5a6.42 6.42 0 00-2.4-5.4c-.22-.19-.45-.36-.68-.53A6.68 6.68 0 00876 127a16 16 0 00-5.45-2.78 11.69 11.69 0 00-3.44-.78 15.7 15.7 0 00-5.34 1.25 51.34 51.34 0 01-10.47 2.2c-.63.06-1.91-.07-3-.08l-.37-1.06c-4.16 1.92-9 .34-13.56.35-2.22 0-4.43.39-6.64.53a59.92 59.92 0 01-7.34-.16L813 126a87.11 87.11 0 01-9.42-1c-.83-1.69-1.66-3.38-2.59-5a46.27 46.27 0 00-5.49-7.63 26.52 26.52 0 012.64-2l.18-.11c.23-.13.51-.27.82-.41a18.93 18.93 0 0027.06-17.08 14.5 14.5 0 001.6-.73c.3-.16.6-.33.89-.52l.43-.29a8.34 8.34 0 00.78-.67c.12-.12.24-.24.35-.37a4.78 4.78 0 00.57-.84c.06-.12.12-.23.17-.35s0-.09.05-.14.07-.18.1-.26 0-.12.05-.18l.06-.24a1.29 1.29 0 000-.19v-.44a1.64 1.64 0 010-.22 1.7 1.7 0 000-.22v-.22a1.62 1.62 0 000-.22v-.27a1.79 1.79 0 000-.23v-.91a1.16 1.16 0 000-.18 2.33 2.33 0 000-.28v-.16c0-.05 0-.2-.07-.3v-.14l-.09-.32v-.12c0-.11-.07-.22-.1-.33v-.1l-.12-.36v-.06c0-.17-.11-.35-.17-.52-.75-2.16-1.56-4.31-2.42-6.43a15.64 15.64 0 00-2.78-4.86c-1.77-1.88-4.31-2.82-6.43-4.32-2.5-1.76-4.37-4.25-6.49-6.47s-4.69-4.23-7.74-4.6a15.16 15.16 0 00-7.06 1.29c-18.37 6.78-33.41 20.14-49.88 30.74-6.41 4.13-13.59 8-21.18 7.47l6.7 10.64c.32.52.65 1 1 1.54s.7 1 1.07 1.5a12.07 12.07 0 003.51 3.22 7.69 7.69 0 001.08.52 8.88 8.88 0 001 .31c2.39.57 5 .09 7.42-.39.83-.16 1.66-.33 2.48-.52l1-.28h.16v.16c-.56 1-1.09 1.91-1.56 2.9a60.81 60.81 0 00-3.57 11.12c-1.89 7.5-3.79 15.16-3.29 22.86.17 2.6.61 5.26-.14 7.76-.36 1.23-1 2.49-.66 3.71a17.12 17.12 0 01.92 2.18c.16 1.16-.76 2.16-1.42 3.12s-1 2.49-.06 3.16a5.39 5.39 0 00-3.57 4.45 3.79 3.79 0 01-.34 1.71 4.23 4.23 0 01-1 .93 5.39 5.39 0 00-1.87 3.36c-1.93 0-3.56 1.88-5.32 3a21.45 21.45 0 01-4.85 1.76c-4.83 1.54-9 4.71-12.77 8.05-2.1 1.83-4.22 3.85-5.14 6.47-.3.86-.46 1.76-.72 2.63a18.14 18.14 0 01-2.32 4.74 34.23 34.23 0 01-7 7.82 18.59 18.59 0 00-3.6 3.86c-1.53 2.21-4.64 2.87-6.28 5a23.75 23.75 0 01-2 3c-1.27 1.2-3.19 1.3-4.81 2-3.79 1.57-5.54 6-8.92 8.34a.94.94 0 01-.67.22c-.29 0-.46-.35-.71-.52-.49-.33-1.14-.08-1.72.07s-1.36.09-1.51-.49c-8.15-4.94-16.16-10.3-24.32-15.24l-3.72-2.25-19.9-12.06a1.48 1.48 0 00-1.57 0l-.62.43c-1-1.06-2.11-2-2.77-2.78-.27-.31-.54-.62-.82-.92a1.22 1.22 0 00.53-.1 1 1 0 00.43-1.3 3.26 3.26 0 00-.92-1.17 22.15 22.15 0 01-2.39-2.73 25.24 25.24 0 00-2.63-3.44 4.83 4.83 0 00-3.9-1.55 6.33 6.33 0 00-2.26.91 37.09 37.09 0 00-7.5 5.75.79.79 0 00-.33.62c0 .2.2.35.22.54a.7.7 0 01-.19.5 20.93 20.93 0 01-4.73 4.31q-3.81 2.85-7.45 5.92a10.42 10.42 0 00-3.48 4.25 8.31 8.31 0 00.61 5.9c1.66 3.91 4.57 7.15 7.45 10.28a3.64 3.64 0 001.91 1.34 2.43 2.43 0 001.73-.42c1.77-1.16 2.06-3.56 2.19-5.66.05-1 .11-1.92.17-2.88a1.33 1.33 0 01.11-.56 1.4 1.4 0 01.61-.49l2.75-1.45c-.08-.13-.17-.26-.26-.39a11.21 11.21 0 016.49-.42c1.46.43 2.8 1.3 4.2 1.84a9.29 9.29 0 001 5.42c5.13.53 9.75 2.81 14.34 5.11a114.33 114.33 0 0110.78 6.09q4.24 2.76 8.3 5.77c3.84 2.84 7.55 5.85 11.22 8.89a54.11 54.11 0 007.67 5.65c7.22 4.05 16.9 4.19 23.53-.86 8.36-6.37 19-9.68 28-15.19a31.6 31.6 0 007.25-5.57 4.94 4.94 0 01-.12.77c-.54 2.49-2.69 4.29-3.5 6.81-.63 2-.4 4.31-1.62 6-.93 1.29-2.67 2.21-2.72 3.8 0 .44.13.88.13 1.32a4.13 4.13 0 01-.48 1.59c-1 2.25-2.12 4.61-4.17 6-.8.55-1.82 1.05-2 2a1.89 1.89 0 01-.21.79c-.34.47-1.09.22-1.63.42-.75.28-.87 1.25-1.17 2a3.24 3.24 0 01-3.27 1.92c-6.83-.83-13.54 2.26-20.42 2.08-2.37-.07-4.73-.31-7.11-.33-7.3-.06-14.45 2-21.48 4a11.34 11.34 0 00-1.42 4.5 17.37 17.37 0 01-7.35.28 15.67 15.67 0 00-1.84-.25 2.77 2.77 0 00.16-1.42 40.15 40.15 0 00-8.23 3.67c-1.71 1-3.52 2.4-3.68 4.37a6.57 6.57 0 00.32 2.24l.93 3.53a3.72 3.72 0 00.83 1.77c.31.3.72.48 1 .8a3.14 3.14 0 01.54 1.27l.78 3.06a19.46 19.46 0 01.62 3.11c.09 1 0 1.92.07 2.88a29.93 29.93 0 00.69 4.7l1.11 5.54a18.91 18.91 0 001.31 4.5c.47 1 1.1 1.86 1.48 2.86.3.77.44 1.59.8 2.32a6.19 6.19 0 002.9 2.68 3.23 3.23 0 001.41.44c1.42 0 2.44-1.32 3.1-2.58a15.6 15.6 0 002.07-7.52c0-1.06-.21-2.11-.3-3.17-.24-3 .62-5.92.62-8.91a1.75 1.75 0 00-1.25-1.82c.09-2.54.08-5.23 1.42-7.4a11.15 11.15 0 012.44-2.65c.37 1.18.78 2.35 1.24 3.49 7.61-2.22 15.47-4.36 23.44-4.56zM837 140.54c-.54.2-1.09.4-1.65.58-4.66 1.55-10 3.06-14.82 2a12.87 12.87 0 01-4.06-2l-.35-.22c6.79-1.19 13.88-.9 20.88-.36z" transform="translate(-52.64 -55.65)" fill="url(#a)"/><path d="M811.42 74.6a15.45 15.45 0 015.31-1.23 11.65 11.65 0 013.42.79 16.08 16.08 0 015.44 2.8 6.51 6.51 0 012.41 5.4c-.23 2-1.71 3.73-3.33 5a13.27 13.27 0 01-7.76 3c-3.18.05-6.18-1.38-9.25-2.23a26.56 26.56 0 00-6.86-1 15 15 0 01-3.49-.22 3.74 3.74 0 01-2.68-2.06 5.28 5.28 0 010-3c.23-1.24.19-4.18 1.29-4.92.88-.6 4-.12 5.08-.21a50.14 50.14 0 0010.42-2.12z" fill="#fbbebe"/><path d="M740.03 54.47a46.24 46.24 0 017.75 10c3.52 6.14 5.76 13.28 11.06 18a37.32 37.32 0 004.47 3.23 12.9 12.9 0 004.06 2c4.76 1.07 10.1-.42 14.74-2a93.35 93.35 0 0013.33-6 11 11 0 001.56 5.48c1.11 1.57 3.38 2.49 5 1.5a59.3 59.3 0 00-11.53 7.13c-1.37 1.16-2.64 2.44-4.1 3.49-5.27 3.79-12.56 4.17-17.43 8.47a4.69 4.69 0 01-5.41.65c-1.69-1-2.84-2.72-4.23-4.11-2.74-2.74-6.46-4.34-9.15-7.13-1.25-1.29-2.25-2.82-3.53-4.08-1.83-1.8-4.21-3-5.89-5-1.25-1.47-2-3.26-3.17-4.83-1-1.36-2.18-2.55-3.07-4-2.18-3.47-2.16-8-.91-11.89s4.12-7.52 6.45-10.91z" fill="#f86d70"/><path d="M740.03 54.47a46.24 46.24 0 017.75 10c3.52 6.14 5.76 13.28 11.06 18a37.32 37.32 0 004.47 3.23 12.9 12.9 0 004.06 2c4.76 1.07 10.1-.42 14.74-2a93.35 93.35 0 0013.33-6 11 11 0 001.56 5.48c1.11 1.57 3.38 2.49 5 1.5a59.3 59.3 0 00-11.53 7.13c-1.37 1.16-2.64 2.44-4.1 3.49-5.27 3.79-12.56 4.17-17.43 8.47a4.69 4.69 0 01-5.41.65c-1.69-1-2.84-2.72-4.23-4.11-2.74-2.74-6.46-4.34-9.15-7.13-1.25-1.29-2.25-2.82-3.53-4.08-1.83-1.8-4.21-3-5.89-5-1.25-1.47-2-3.26-3.17-4.83-1-1.36-2.18-2.55-3.07-4-2.18-3.47-2.16-8-.91-11.89s4.12-7.52 6.45-10.91z" opacity=".1"/><path d="M562.3 146.82a10.36 10.36 0 00-2.82-2.55 8.54 8.54 0 00-5.27-.54c-4.46.68-8.6 2.72-12.52 5-3.16 1.81-6.3 3.82-8.56 6.67a6.85 6.85 0 00-1.51 3 6.18 6.18 0 00.23 2.73 6.6 6.6 0 003.57 4.62c2.09.82 4.42-.05 6.52-.85 2.82-1.09 5.92-2.1 8.82-1.24 2.15.64 4 2.27 6.27 2.33 2.67.08 4.83-2.08 6.53-4.14 1.47-1.8 4.69-5.05 4.48-7.58s-4.16-5.64-5.74-7.45zm33.7 77.83a17.27 17.27 0 01-7.5.31c-1.52-.28-3.38-.64-4.35.55a3.58 3.58 0 00-.61 1.48c-2.49 10.19-.21 21 4 30.65a.94.94 0 00.28.42c.27.2.64.06.95-.07a11.28 11.28 0 002.83-1.65c1.92-1.74 2.33-4.57 2.42-7.16s.05-5.33 1.39-7.55c1.68-2.75 5.19-4.09 6.57-7 1.11-2.37.53-5.18-.45-7.6-.33-.84-.46-3-1.24-3.41s-3.4.79-4.29 1.03z" fill="#fbbebe"/><path d="M562.01 145.8a1 1 0 00.42-1.3 3.38 3.38 0 00-.92-1.18 20.69 20.69 0 01-2.38-2.74 27.68 27.68 0 00-2.63-3.44 4.85 4.85 0 00-3.89-1.56 6 6 0 00-2.25.9 36.36 36.36 0 00-7.45 5.72c-.17.17-.36.38-.32.62s.2.34.22.54a.69.69 0 01-.18.49 20.68 20.68 0 01-4.7 4.29q-3.78 2.84-7.4 5.9a10.3 10.3 0 00-3.45 4.23 8.41 8.41 0 00.63 5.89c1.67 3.92 4.58 7.16 7.45 10.31a3.78 3.78 0 001.92 1.35 2.42 2.42 0 001.72-.42c1.75-1.15 2-3.55 2.15-5.64l.16-2.89a1.29 1.29 0 01.11-.55 1.35 1.35 0 01.61-.49l2.72-1.44a8.77 8.77 0 00-8-4.16 3 3 0 01-2.14-.29 1.76 1.76 0 010-2.44 5.38 5.38 0 012.36-1.31c7.17-2.63 13.65-6.85 20.61-10a5.29 5.29 0 012.46-.57c.7.05 1.52.46 2.17.18zm28.25 104.72c-.32.6-.43 1.3-.78 1.89s-1.11 1-1.7.7a1.75 1.75 0 01-.66-.89 37.36 37.36 0 01-2.45-22.06 13.91 13.91 0 011.07-3.52c.53-1.08 1.3-2.18 1.08-3.36a39.64 39.64 0 00-8.18 3.64c-1.7 1-3.49 2.39-3.65 4.35a6.84 6.84 0 00.33 2.24l.94 3.53a3.65 3.65 0 00.84 1.77c.3.3.71.49 1 .81a3 3 0 01.54 1.26l.79 3.06a19.6 19.6 0 01.63 3.12c.09 1 0 1.92.08 2.88a31 31 0 00.7 4.69l1.13 5.54a19.26 19.26 0 001.32 4.5c.47 1 1.1 1.86 1.49 2.87.29.77.44 1.59.8 2.32a6.29 6.29 0 002.89 2.69 3.39 3.39 0 001.41.45c1.41.05 2.42-1.32 3.08-2.58a15.56 15.56 0 002-7.5c0-1.06-.22-2.11-.31-3.17-.25-3 .59-5.91.58-8.9.02-2.8-3.94-2.27-4.97-.33z" fill="#f86d70"/><path d="M736.98 76.29a22.08 22.08 0 01-8-6.25 38.19 38.19 0 01-3-4.45 135.15 135.15 0 01-9.75-20.07c4.26.87 8.73 1.66 12.92.46a17.84 17.84 0 006-3.18 51.87 51.87 0 006.32-6.17 60.76 60.76 0 005 8c1.07 1.44 4.69 4.37 4.42 6.33s-4.27 2.94-5.89 3.87l-.17.11a22.68 22.68 0 00-6.15 5.73c-3.14 4.46-4.23 10.68-1.7 15.62z" fill="#fbbebe"/><path d="M745.08 54.79a18.74 18.74 0 01-9.85-12 51.87 51.87 0 006.32-6.17 60.76 60.76 0 005 8c1.07 1.44 4.69 4.37 4.42 6.33s-4.27 2.91-5.89 3.84z" opacity=".1"/><circle cx="754.08" cy="37.53" r="18.73" fill="#fbbebe"/><path d="M713.11 154.2a8.74 8.74 0 01-8.62.21 16.59 16.59 0 01-3.72-3.13c-6.15-6.31-12-13-16.11-20.83a14.44 14.44 0 01-1.82-5.37 5.9 5.9 0 011.93-5.12 4.16 4.16 0 001-.93 3.75 3.75 0 00.33-1.7 5.31 5.31 0 013.54-4.43c-1-.68-.6-2.19.05-3.16s1.56-2 1.4-3.12a17.12 17.12 0 00-.92-2.18c-.36-1.22.29-2.48.64-3.7.73-2.5.29-5.16.11-7.76-.53-7.7 1.34-15.34 3.19-22.83a61.24 61.24 0 013.52-11.1c.47-1 1-2 1.54-2.89a76.83 76.83 0 016.29-8.75 11.36 11.36 0 014.29-3.84 4.24 4.24 0 01.5-.18 10.88 10.88 0 013.82-.29c3.38.21 6.93 1 9.34 3.38s3.19 5.72 4.28 8.94a24.63 24.63 0 001.26 3.15c1.59 3.16 4.18 5.68 6.73 8.13l2.77 2.67c1.39 1.34 3.8 1 5.11 2.41a6.48 6.48 0 011.17 2.24 34.75 34.75 0 012.55 11.33 18.75 18.75 0 01-.15 2.59 13.64 13.64 0 01-3.79 8c-2.4 2.31-5.74 3.45-8.13 5.77-2 1.92-3.16 4.49-4.3 7l-6.61 14.54a82.39 82.39 0 00-4.11 10.25c-2.08 6.99-.9 16.85-7.08 20.7z" fill="#f86d70"/><path d="M655.36 236.6c-4.94.2-9.89.14-14.81.61-2.87.28-5.73.75-8.61.87-3.14.14-6.29-.11-9.44-.05-7.93.17-15.75 2.28-23.38 4.46a44.4 44.4 0 01-3.31-16.57 10.57 10.57 0 010-1.13 11.37 11.37 0 011.41-4.58c7-2 14.1-4 21.37-3.9 2.37 0 4.72.28 7.08.35 6.85.21 13.51-2.86 20.31-2a3.2 3.2 0 003.25-1.91c.29-.74.41-1.71 1.16-2 .54-.2 1.28.05 1.62-.41a2.1 2.1 0 00.21-.79c.2-1 1.21-1.45 2-2 2-1.38 3.13-3.74 4.13-6a4.07 4.07 0 00.47-1.58c0-.44-.14-.88-.13-1.33 0-1.58 1.77-2.49 2.69-3.78 1.21-1.7 1-4 1.59-6 .8-2.52 2.93-4.31 3.46-6.79a4.94 4.94 0 00.12-.77 31.32 31.32 0 01-7.21 5.54c-8.88 5.47-19.5 8.74-27.79 15.07-6.58 5-16.22 4.85-23.42.78a54.16 54.16 0 01-7.66-5.67c-3.66-3-7.36-6.07-11.19-8.93q-4-3-8.29-5.79a114.13 114.13 0 00-10.74-6.29c-4.58-2.32-9.19-4.62-14.29-5.17a10.53 10.53 0 01-.28-8.64 29.14 29.14 0 014.68-7.55 21.78 21.78 0 015.36-5.47 1.46 1.46 0 011.56 0l19.82 12.17 3.71 2.27c8.13 5 16.13 10.35 24.26 15.32.15.57.94.64 1.51.49s1.22-.39 1.71-.06c.24.16.41.46.71.52a1 1 0 00.66-.22c3.36-2.31 5.08-6.75 8.85-8.3 1.61-.66 3.52-.76 4.78-2a22.71 22.71 0 002-3c1.63-2.13 4.72-2.77 6.23-5a18.35 18.35 0 013.57-3.84 33.83 33.83 0 007-7.79 18.08 18.08 0 002.29-4.72c.26-.87.42-1.77.71-2.63.91-2.62 3-4.63 5.09-6.45 3.79-3.32 7.88-6.47 12.68-8a21.44 21.44 0 004.83-1.75c1.93-1.18 3.7-3.37 5.91-2.86a5 5 0 012.19 1.38 69.61 69.61 0 017.45 8.53q5.35 6.81 10.69 13.63a15.75 15.75 0 004.19 4.15 11.49 11.49 0 007.75 1c-.35 3.71-3.3 6.77-4.52 10.29-.59 1.71-.82 3.53-1.26 5.28a43.25 43.25 0 01-2.37 6.41c-2.4 5.59-4.82 11.21-8.26 16.23-1.78 2.61-3.83 5-5.84 7.45-7.93 9.57-14 21.11-23 29.72-2.18 2.11-3.56 5-6 6.81-2.65 1.96-6.07 2.26-9.26 2.39z" fill="#434175"/><path d="M693.04 109.72a5.43 5.43 0 00-2.5.75c1.83-.64 4.06 1.07 5.75.26.79-.38.67-.49 0-.72-1.01-.34-2.23-.03-3.25-.29z" opacity=".1"/><path fill="#d0d2d5" d="M935.241 466.28l73.503-26.101 4.685 13.192-73.503 26.102zm24.589 27.357l66.906-23.759a7 7 0 018.94 4.254 7 7 0 01-4.255 8.94l-66.907 23.758-4.684-13.193z"/><path d="M896.087 452.598l16.303-5.789a58 58 0 0174.065 35.248l5.789 16.303a22.68 22.68 0 01-13.783 28.962l-49.587 17.608a22.68 22.68 0 01-28.962-13.783l-17.608-49.587a22.68 22.68 0 0113.783-28.962z" fill="#3f3d56"/><path d="M692.14 119.48a3.88 3.88 0 00-2.11-.13 4.46 4.46 0 00-2.75 1.35 1.5 1.5 0 001.23 0 7.27 7.27 0 012-.22c.58 0 2.31.64 2.76.36.66-.43-.68-1.19-1.13-1.36zm54.99-31.54a19.42 19.42 0 01-4.28-2.06c-3.51-2.23-6.46-5.26-9.93-7.54a55.25 55.25 0 00-5.43-3l-11.71-6a11.87 11.87 0 00-2.84-1.16c-1.91-.42-4.06.86-6 .59a7.23 7.23 0 01-4.88-3.37 17.57 17.57 0 01-2.2-5.67 29.09 29.09 0 01-.67-3.59 16 16 0 01-.07-3.79 9.48 9.48 0 013.3-6.46 12.09 12.09 0 014.64-2 19.37 19.37 0 013.21-.53 11.43 11.43 0 011.85 0c4.42.35 8.16 3.35 11.11 6.65 1.55 1.74 3 3.61 4.48 5.38a24.63 24.63 0 001.26 3.15c1.59 3.16 4.18 5.68 6.73 8.13l2.77 2.67c1.39 1.34 3.8 1 5.11 2.41a6.48 6.48 0 011.17 2.24 34.75 34.75 0 012.53 11.36 18.75 18.75 0 01-.15 2.59zm-91.07 127.98l-60.26 8.87a11.37 11.37 0 011.41-4.58c7-2 14.1-4 21.37-3.9 2.37 0 4.72.28 7.08.35 6.85.21 13.51-2.86 20.31-2a3.2 3.2 0 003.25-1.91c.29-.74.41-1.71 1.16-2 .54-.2 1.28.05 1.62-.41a2.1 2.1 0 00.21-.79c.2-1 1.21-1.45 2-2 2-1.38 3.13-3.74 4.13-6a4.07 4.07 0 00.47-1.58c0-.44-.14-.88-.13-1.33 0-1.58 1.77-2.49 2.69-3.78 1.21-1.7 1-4 1.59-6 .8-2.52 2.93-4.31 3.46-6.79l.26-.34 10.26-4z" opacity=".1"/><ellipse cx="425" cy="668.67" rx="425" ry="33" fill="#0f5d40" opacity=".1"/><ellipse cx="800.72" cy="752.92" rx="275" ry="35.77" fill="#0f5d40" opacity=".1"/><path d="M475.25 641.95l.28-14.16q20-1.14 40-1.52c7.74-.14 15.58-.19 23.07 1.75 5.19 1.35 10.1 3.63 15.22 5.23 10.2 3.18 21 3.6 31.71 3.89 10.39.29 21.24.39 30.57-4.2 16.15-8 22.94-27.65 23.73-45.64s-2.79-36.12-.3-54" fill="none" stroke="#3f3d56" stroke-miterlimit="10" stroke-width="12"/><path fill="#d0d2d5" d="M511.81 669.66l-178.19-2.28.52-4.57 8.62-75.39h156.48l11.52 75.39.88 5.71.17 1.14z"/><path opacity=".1" d="M511.64 668.52h-88.93l-89.09-1.14.52-4.57h176.62l.88 5.71z"/><path fill="#d0d2d5" d="M303.92 663.95h236.45v5.71H303.92z"/><path d="M765.96 134.62a14.87 14.87 0 00-14.8-15H90.84a14.88 14.88 0 00-14.8 15v400.26h689.92z" fill="#3f3d56"/><path d="M76.04 530.88v46.89a14.8 14.8 0 0014.8 14.8h660.32a14.8 14.8 0 0014.8-14.8v-46.89z" fill="#d0d2d5"/><path fill="#2f2e41" d="M104.6 144.8h636.23v359.81H104.6z"/><path d="M424.43 574.78a15.43 15.43 0 0012.13-5.89 15.28 15.28 0 001.2-1.77l-8.46-1.39 9.15.07a15.44 15.44 0 00.29-12.22l-12.27 6.37 11.32-8.32a15.42 15.42 0 10-25.43 17.25 15.4 15.4 0 0012.07 5.9z" fill="#0f5d40"/><path opacity=".1" d="M439.85 592.56l71.09 71.39-10.91-71.39h-60.18z"/><path d="M745.18 141.87l38.18-50.59c2.28-3 4.63-6.13 7.76-8.29 9-6.22 22.19-2.54 29.72 5.43s10.69 19.06 13 29.78a316.11 316.11 0 017.16 75.15c-.32 13.29-1.51 26.72-5.74 39.33-6.42 19.18-19.43 35.33-29.26 53-15.83 28.47-22.46 66.44-2.42 92.13 6.53 8.37 15.42 14.77 21.45 23.51 6.81 9.87 9.46 21.94 12 33.66 3.79 17.7 7.59 35.51 8.29 53.6 2.26 58.49-31.09 116.93-82.59 144.75-35.75 19.32-79 24.92-110.09 51.12-11 9.23-20.48 22.8-17.78 36.86 2.2 11.41 12.22 20.08 23.22 23.85s22.93 3.46 34.53 2.8a636.33 636.33 0 0083-10.25c23.23-4.44 46.42-8.27 66.67-20.49a14 14 0 005.05-4.53c1.31-2.19 1.53-4.84 1.71-7.39.55-7.51 1.07-15.3-1.58-22.35-3.09-8.24-10.14-14.48-13.52-22.6s-2.77-17.47-.58-26c2.7-10.54 7.61-20.36 12.55-30.05 4.81-9.44 9.69-18.85 15.35-27.8 15.94-25.16 37.72-46 59.27-66.55" fill="none" stroke="#3f3d56" stroke-miterlimit="10" stroke-width="12"/><path d="M808.36 69.35a15 15 0 015.31-1.23 12 12 0 013.42.78 16.1 16.1 0 015.44 2.81 6.49 6.49 0 012.41 5.4c-.23 2-1.71 3.72-3.33 5a13.22 13.22 0 01-7.76 3c-3.18 0-6.18-1.38-9.25-2.24a26.55 26.55 0 00-6.86-1 15 15 0 01-3.49-.23 3.73 3.73 0 01-2.68-2.05 5.38 5.38 0 010-2.95c.24-1.24.2-4.19 1.3-4.93.88-.59 4-.11 5.08-.2a51.46 51.46 0 0010.41-2.16z" fill="#fbbebe"/><path d="M794.49 70.35c-4.14 1.9-9 .32-13.5.31-2.21 0-4.41.37-6.61.5a59.44 59.44 0 01-7.31-.19l-7.32-.5a62.44 62.44 0 01-12.79-1.76c-3.58-4.22-9.39-6.08-13.71-9.52-3.46-2.76-5.94-6.52-8.89-9.83s-6.69-6.3-11.1-6.65a16.41 16.41 0 00-5.07.54 11.82 11.82 0 00-4.63 2 9.44 9.44 0 00-3.3 6.46 21.68 21.68 0 00.73 7.38 17.62 17.62 0 002.2 5.68 7.34 7.34 0 004.89 3.37c1.93.26 4.07-1 6-.6a11.87 11.87 0 012.84 1.16l11.72 6a56.26 56.26 0 015.42 3c3.48 2.28 6.42 5.31 9.93 7.54s7.94 3.63 11.84 2.17c12-4.47 25.52-2.39 38.25-1.28-.08-.24.44-.46.59-.66a10.75 10.75 0 002-7.49c-.31-2.63-1.31-5.11-2.18-7.63z" fill="#f86d70"/><path d="M774.36 36.66a6.85 6.85 0 003-2.68c1.14-2.11.44-4.7-.34-7s-1.57-4.31-2.44-6.43a15.49 15.49 0 00-2.78-4.87c-1.77-1.89-4.3-2.84-6.41-4.33-2.5-1.77-4.37-4.28-6.48-6.49S754.22.6 751.18.23a14.94 14.94 0 00-6.82 1.27c-18.26 6.71-33.19 20-49.54 30.54-6.36 4.11-13.5 7.94-21 7.39l6.71 10.66c1.71 2.73 3.63 5.62 6.63 6.79 2.65 1 5.61.5 8.39 0a22.61 22.61 0 006.39-1.92c4-2.17 6.57-6.68 10.87-8.25 3.21-1.17 6.79-.45 10 .67s6.36 2.64 9.74 3.1c6 .81 12-1.9 17-5.4 3-2.08 5.73-4.47 9-6a13.56 13.56 0 018-1.41c3.03.42 4.81.56 7.81-1.01z" fill="#2f2e41"/><path d="M777.36 33.98c1.12-2.07.46-4.61-.3-6.84a6 6 0 01-.5 3.77 7 7 0 01-3 2.68c-3 1.58-4.82 1.44-7.9.93a13.66 13.66 0 00-8 1.41c-3.25 1.57-6 4-9 6-5 3.5-11 6.2-17 5.39-3.39-.45-6.52-2-9.74-3.1s-6.81-1.84-10-.67c-4.29 1.57-6.83 6.09-10.86 8.25a22.71 22.71 0 01-6.39 1.92c-2.79.54-5.75 1.07-8.39 0-3-1.16-4.92-4.06-6.64-6.79l-4.75-7.55h-1.15l6.71 10.66c1.71 2.73 3.63 5.62 6.63 6.79 2.65 1 5.61.5 8.39 0a22.61 22.61 0 006.39-1.92c4-2.17 6.57-6.68 10.87-8.25 3.21-1.17 6.79-.45 10 .67s6.36 2.64 9.74 3.1c6 .81 12-1.9 17-5.4 3-2.08 5.73-4.47 9-6a13.56 13.56 0 018-1.41c3.08.5 4.9.64 7.89-.93a6.85 6.85 0 003-2.71z" opacity=".1"/><path d="M881.7 773.66a10 10 0 012.18-2.42c4.37-4.12 6.4-10.18 7.48-16.12s1.39-12 3.12-17.81a57.24 57.24 0 013.52-8.67c1-2.14 2.25-6.34 4.09-7.83a2.66 2.66 0 011.26-.61 14.65 14.65 0 013.62-4.82c2.86-2.59 6.35-4.65 8.26-8a17.64 17.64 0 011.93-3.29c1.29-1.43 3.33-2 4.52-3.51 1.55-1.94 1.2-4.71 1-7.19s0-5.43 2.14-6.72c1.28-.79 2.93-.72 4.26-1.41 2-1 2.79-3.53 2.75-5.78s-.74-4.44-.92-6.68c-.56-7.16 4.16-14.28 2.33-21.22-.69-2.63-2.26-4.92-3.43-7.36a17.2 17.2 0 01-1-2.54 35.57 35.57 0 01-9.73 2.35c5.51-12.36 4.11-26.73 6.68-40l-.33-.46a20.71 20.71 0 01-4.22-11.85c0-5 2.31-9.57 3.35-14.4.88-4.12.85-8.41 2-12.45a38.32 38.32 0 013.17-7.22c1.25-2.32 2.56-4.59 3.93-6.83q1.92-6.36 3.85-12.72c1.8-6 3.65-12 7.15-17.14 1.28-1.89 1.67-5.7 3.64-6.84a8.73 8.73 0 015.2-.91c2.78-1.56 5.22-3.81 5.57-6.89a6.68 6.68 0 00-.2-2h-.34c-4.41-.41-6.63-4.29-8.92-7.68-3.71-5.51-2.29-12.95 0-19.2a13 13 0 013-5.29c3.21-3 8.29-2.34 12.43-3.79a42.64 42.64 0 014.11-1.55c2.75-.65 5.63.26 8.15 1.52s4.87 2.92 7.51 3.92 5.9 1.79 6.55 4.5a4.91 4.91 0 01-.23 2.73 10.18 10.18 0 01-3.08 4.45 17.82 17.82 0 01-10.87 24.83 49 49 0 00-2.12 3.73c-1.16 2.24-2.14 4.88-1.75 7.28a21.37 21.37 0 012 2.44c2.87 4 4.5 8.7 6 13.38a139.66 139.66 0 014.84 18.27c2.44 5.18 5.42 10.14 7.19 15.59a35.2 35.2 0 009.38-1.25l8.44-1.92c2.93-.66 6-1.38 8.3-3.32 1.22-1 2.17-2.33 3.41-3.33s3.73-2.15 5.09-1.33a4 4 0 01.69.53c1.23-2.5 9.1 7.73 3.72 8.74l.35 1c.71 2.07 2.22 4.59 1.84 6.75L997 588.21a23.19 23.19 0 01-7.56 1.67 12.21 12.21 0 01-3-.4v1.99c-.1 13.19 2 26.3 2.39 39.48.07 2.4 0 5-1.52 6.88-1.7 2.06-4.72 2.46-7.35 2a16.65 16.65 0 01-1.86-.41 69.45 69.45 0 00-1.92 10.1l-2.49 17.76a26.45 26.45 0 00-.39 5.54c.29 4.18 2.5 7.94 4.1 11.81s2.55 8.5.44 12.11c-.65 1.12-1.56 2.08-2.15 3.24a13.1 13.1 0 00-1 5.67q-.23 8.1-.44 16.18a1.89 1.89 0 011.26.26c2.08 1.61 1.85 9.33 2 11.72.16 4 0 8.08.22 12.12a71.1 71.1 0 002.68 16.13 10.29 10.29 0 002.29 4.61 9.82 9.82 0 004.06 2.11 46.58 46.58 0 0015.42 2.1c2.11-.07 4.31-.27 6.27.53s3.54 3 2.83 5c-.61 1.68-2.46 2.48-4.13 3.11a64.81 64.81 0 00-11 5.06 29.31 29.31 0 01-4.26 2.41 21.58 21.58 0 01-4.38 1.08l-17.72 3c-3.63.63-8 1-10.31-2-1.25-1.62-1.43-3.82-1.37-5.87.1-4 .9-8.07.37-12.07a36.46 36.46 0 00-1.85-6.94l-5.32-15.72c-1.78-5.27-3.58-10.58-4.27-16.1-.25-2-.23-4.27 1.3-5.52a3.54 3.54 0 011.32-.68c.06-4.82.69-9.65.42-14.47-.07-1.2-.19-2.41-.29-3.61a16.82 16.82 0 00-2.48 2.92c-1.7 2.67-2.33 6.21-4.94 8-2.22 1.52-5.51 1.44-7.07 3.64a10.26 10.26 0 00-1.12 2.71 19.6 19.6 0 01-4 6.35 32.91 32.91 0 01-2.47 6.34q-2.21 4.65-4.4 9.3c-1.57 3.32-3.15 6.64-5 9.78a27 27 0 00-3.35 6.46c-1.41 4.94.88 10.36 4.53 14s8.44 5.73 13.16 7.68a3.62 3.62 0 011.35.8 2.58 2.58 0 01.6 1.74c0 2.31-1.89 4.29-4.07 5a15.27 15.27 0 01-6.83.25c-12.78-1.55-25.52-4.67-36.82-10.88a13.22 13.22 0 01-4.4-3.39 5.18 5.18 0 01-.78-5.13z" transform="translate(-52.64 -55.65)" fill="url(#b)"/><path d="M883.08 493.76q-3.19 4.9-6 10.06a37.17 37.17 0 00-3.17 7.16c-1.17 4-1.13 8.28-2 12.36-1 4.8-3.34 9.38-3.34 14.29a20.5 20.5 0 004.22 11.77 56.63 56.63 0 008.82 9.1 187.62 187.62 0 0012.48-61.21c.1-2.9.11-5.9-.94-8.6-.66-1.7-3.77-6.36-5.78-4.53-.73.67-.92 3.69-1.37 4.69a36.23 36.23 0 01-2.92 4.91z" fill="#f86d70"/><path d="M883.08 493.76q-3.19 4.9-6 10.06a37.17 37.17 0 00-3.17 7.16c-1.17 4-1.13 8.28-2 12.36-1 4.8-3.34 9.38-3.34 14.29a20.5 20.5 0 004.22 11.77 56.63 56.63 0 008.82 9.1 187.62 187.62 0 0012.48-61.21c.1-2.9.11-5.9-.94-8.6-.66-1.7-3.77-6.36-5.78-4.53-.73.67-.92 3.69-1.37 4.69a36.23 36.23 0 01-2.92 4.91z" opacity=".1"/><path d="M990.43 504.69c3.91-.65 8.25-.33 11.29 2.2a9.32 9.32 0 013.24 6.16c.26 2.78-1.35 6.06-4.13 6.28a13.17 13.17 0 01-2-.13 29.88 29.88 0 00-5.24.43 21.42 21.42 0 01-18.24-7.36c-2.38-2.94.76-4.29 3.59-4.89 3.86-.82 7.63-2.03 11.49-2.69z" fill="#fbbebe"/><path d="M923.55 595.01l-2.48 17.62a26 26 0 00-.38 5.5c.29 4.15 2.49 7.88 4.09 11.72s2.56 8.43.45 12c-.65 1.12-1.57 2.06-2.15 3.21a13 13 0 00-1 5.64l-.68 25a158.71 158.71 0 01-23.18-.13 1.35 1.35 0 01-.86-.22 1.38 1.38 0 01-.29-.91c-.34-5.85.68-11.71.35-17.56-.12-2.14-.43-4.27-.46-6.42-.13-8.71 4.18-17.24 2.88-25.86a57.35 57.35 0 00-1.6-6.42c-4.11-15-3.24-30.77-2.34-46.25a1.18 1.18 0 01.2-.7 1.23 1.23 0 01.55-.3 28.48 28.48 0 0125.78 4.91c1.09.88 3.84 1.73 4.56 2.77 1 1.47-.32 2.92-.89 4.48a56.89 56.89 0 00-2.55 11.92z" fill="#3f3d56"/><path d="M923.55 595.01l-2.48 17.62a26 26 0 00-.38 5.5c.29 4.15 2.49 7.88 4.09 11.72s2.56 8.43.45 12c-.65 1.12-1.57 2.06-2.15 3.21a13 13 0 00-1 5.64l-.68 25a158.71 158.71 0 01-23.18-.13 1.35 1.35 0 01-.86-.22 1.38 1.38 0 01-.29-.91c-.34-5.85.68-11.71.35-17.56-.12-2.14-.43-4.27-.46-6.42-.13-8.71 4.18-17.24 2.88-25.86a57.35 57.35 0 00-1.6-6.42c-4.11-15-3.24-30.77-2.34-46.25a1.18 1.18 0 01.2-.7 1.23 1.23 0 01.55-.3 28.48 28.48 0 0125.78 4.91c1.09.88 3.84 1.73 4.56 2.77 1 1.47-.32 2.92-.89 4.48a56.89 56.89 0 00-2.55 11.92z" opacity=".1"/><path d="M877.18 589.69c1.17 2.43 2.74 4.7 3.43 7.31 1.83 6.89-2.88 14-2.32 21.06.18 2.23.87 4.4.92 6.63s-.77 4.71-2.75 5.73c-1.33.69-3 .62-4.25 1.4-2.11 1.28-2.35 4.22-2.14 6.67s.55 5.21-1 7.14c-1.19 1.49-3.23 2.06-4.51 3.47a17.3 17.3 0 00-1.94 3.27c-1.91 3.33-5.39 5.38-8.25 8s-5.28 6.46-4 10.08c.94 2.67 3.58 4.31 6.12 5.56a64.93 64.93 0 0014.57 5.15 3.51 3.51 0 001.67.08 3.64 3.64 0 001.46-1c2.95-2.89 6-5.92 7.36-9.81a10.27 10.27 0 011.12-2.69c1.56-2.18 4.84-2.11 7.07-3.61 2.6-1.77 3.23-5.29 4.93-7.94 1.61-2.5 4.19-4.22 6-6.56 3-3.88 3.81-9.05 6-13.48.93-1.89 2.12-3.64 2.86-5.61a30.4 30.4 0 001.37-7.23c1.41-11.68 5-23.44 2.74-35-.5-2.55-1.27-5-1.59-7.62-.56-4.54.32-9.17-.35-13.7a3.73 3.73 0 00-1.51-2.9 4.18 4.18 0 00-1.72-.36 118.6 118.6 0 00-17.78.41c-3 .29-6.37.9-8.16 3.35-1.53 2.09-1.45 4.91-2 7.46-.6 3.13-2.19 4.85-3.86 7.31s-.72 4.9.51 7.43z" fill="#3f3d56"/><path d="M900.25 670.95c-1.58 0-3.33-.09-4.55.91-1.52 1.24-1.55 3.53-1.3 5.49.7 5.47 2.49 10.74 4.28 16l5.32 15.61a35.87 35.87 0 011.85 6.88c.53 4-.27 8-.37 12 0 2 .13 4.22 1.38 5.83 2.26 2.9 6.67 2.56 10.3 1.94l17.71-3a21.72 21.72 0 004.38-1.07 29.68 29.68 0 004.25-2.4 65.38 65.38 0 0111-5c1.66-.62 3.52-1.42 4.12-3.09.71-2-.87-4.19-2.83-5s-4.15-.6-6.27-.53a46.72 46.72 0 01-15.4-2.09 9.61 9.61 0 01-4.06-2.09 10.12 10.12 0 01-2.3-4.57 71.27 71.27 0 01-2.68-16c-.2-4-.06-8-.22-12-.1-2.37.13-10-2-11.63-1.59-1.22-8.14 2.15-10.28 2.64a49.57 49.57 0 01-12.33 1.17zm-58.35 11.12c-1.72 5.74-2 11.79-3.11 17.68s-3.1 11.91-7.47 16a9.69 9.69 0 00-2.17 2.4 5.06 5.06 0 00.75 5.23 13.13 13.13 0 004.39 3.37c11.29 6.16 24 9.26 36.81 10.8a15.36 15.36 0 006.82-.24c2.18-.74 4.11-2.7 4.07-5a2.53 2.53 0 00-.6-1.72 3.73 3.73 0 00-1.35-.79c-4.72-1.94-9.52-4.06-13.16-7.63s-5.94-9-4.53-13.86a27.38 27.38 0 013.34-6.41 106.05 106.05 0 005-9.7l4.4-9.23c1.28-2.69 2.59-5.47 2.8-8.46a40.57 40.57 0 01-16.21-2.59 25.54 25.54 0 01-6.67-4c-1.7-1.42-3.25-4.06-5.54-2.21-1.84 1.48-3 5.64-4.09 7.76a59.48 59.48 0 00-3.48 8.6z" fill="#2f2e41"/><path d="M906.36 452.89c-.44 3.83-4.16 6.37-7.71 7.88l22.46 7.18c-1.45-2.78-.27-6.18 1.17-9a50.81 50.81 0 014-6.4c.22-.31.47-.71.31-1.06a1.12 1.12 0 00-.63-.49c-4.62-2.06-9.38-4.19-14.43-4.94-1.46-.22-4.22-.8-5.31.69s.38 4.37.14 6.14z" fill="#fbbebe"/><path d="M906.36 452.89c-.44 3.83-4.16 6.37-7.71 7.88l22.46 7.18c-1.45-2.78-.27-6.18 1.17-9a50.81 50.81 0 014-6.4c.22-.31.47-.71.31-1.06a1.12 1.12 0 00-.63-.49c-4.62-2.06-9.38-4.19-14.43-4.94-1.46-.22-4.22-.8-5.31.69s.38 4.37.14 6.14z" opacity=".1"/><circle cx="919.45" cy="438.38" r="17.62" fill="#fbbebe"/><path d="M934.67 583.35c-1.7 2-4.71 2.44-7.34 2-6.15-1-11.19-5.53-17.2-7.16-7.38-2-15.2.57-22.16 3.71s-13.9 6.95-21.52 7.55c6.89-15.36 2.95-33.85 9.53-49.34 1.62-3.78 3.87-7.44 4.23-11.53.45-5.09-2.09-10-2.48-15.07-.36-4.51 1-9 2.29-13.29l4.83-15.85c1.8-5.9 3.65-11.91 7.14-17 1.28-1.87 1.68-5.65 3.64-6.79 4.28-2.46 10.77.65 15.41.82s8.87 3.47 11.58 7.2c2.87 3.94 4.5 8.63 6 13.27a125.22 125.22 0 015.34 21.23c.15 1.08.28 2.16.38 3.25 1 10.27-.46 20.6-.54 30.91v.08c-.09 13.08 2 26.09 2.4 39.17.06 2.43 0 5.04-1.53 6.84z" fill="#f86d70"/><path d="M933.8 537.35c-3.45-.87-6.58-3.09-9.25-5.53a39 39 0 01-6.14-6.95 50.28 50.28 0 01-5.29-11.16 129.34 129.34 0 01-7-32.28c-.26-3-.34-6.21 1.45-8.59a7.23 7.23 0 018.74-2.13c2.37 1.16 3.9 3.49 5.31 5.71 2.82 4.43 5.65 8.9 7.46 13.82.8 2.18 1.39 4.43 2.17 6.62a61 61 0 002.74 6.33c.15 1.08.28 2.16.38 3.25.93 10.22-.49 20.55-.57 30.91z" opacity=".1"/><path d="M907.61 470.9c-1.78 2.37-1.7 5.62-1.45 8.59a129.28 129.28 0 007 32.27 49.43 49.43 0 005.29 11.16 38.67 38.67 0 006.14 6.95c3.4 3.11 7.54 5.88 12.15 5.92a23.42 23.42 0 007.56-1.65l37.51-12.74c.38-2.15-1.13-4.64-1.84-6.7l-2-5.94c-.57-1.63-1.24-3.4-2.72-4.29s-3.85.33-5.09 1.32-2.19 2.29-3.4 3.3c-2.32 1.92-5.37 2.63-8.3 3.29l-8.43 1.9a35.6 35.6 0 01-9.38 1.24c-2.35-7.17-6.82-13.49-9.35-20.61-.78-2.18-1.38-4.43-2.18-6.61-1.81-4.92-4.64-9.39-7.45-13.82-1.41-2.23-2.94-4.56-5.31-5.71a7.25 7.25 0 00-8.75 2.13z" fill="#f86d70"/><path d="M913.83 442.35a8.9 8.9 0 011.06-3.29 2.79 2.79 0 013-1.33c1.76.55 2.35 3.28 4.19 3.37 1.24.06 2.13-1.2 2.52-2.39s.6-2.52 1.53-3.36a5.61 5.61 0 012.18-1c4.27-1.35 8.68-3.85 10.1-8.1a4.9 4.9 0 00.23-2.7c-.65-2.69-4-3.5-6.55-4.48s-5-2.62-7.5-3.88-5.4-2.16-8.15-1.52a40.67 40.67 0 00-4.11 1.54c-4.14 1.43-9.22.77-12.43 3.75a13 13 0 00-3 5.25c-2.25 6.21-3.66 13.6.05 19.06 2.28 3.37 4.51 7.22 8.91 7.62 5.12.46 7.16-4.22 7.97-8.54z" fill="#2f2e41"/><path d="M921.65 436.59c.39-1.18.6-2.52 1.52-3.36a5.83 5.83 0 012.18-1c4.28-1.35 8.68-3.84 10.11-8.1a4.89 4.89 0 00.22-2.7 3.39 3.39 0 00-.53-1.19c1.63.7 3.05 1.65 3.45 3.31a4.9 4.9 0 01-.23 2.7c-1.42 4.25-5.83 6.75-10.1 8.1a5.61 5.61 0 00-2.18 1c-.93.84-1.14 2.18-1.53 3.36s-1.28 2.45-2.52 2.39-1.84-1.19-2.63-2.14c1.09-.14 1.87-1.28 2.24-2.37zm-18.72 12.16c5.14.47 7.17-4.2 8-8.52a8.9 8.9 0 011.06-3.29 2.78 2.78 0 013-1.32c.95.29 1.56 1.23 2.21 2a3 3 0 00-2.26 1.4 8.9 8.9 0 00-1.06 3.29c-.81 4.32-2.85 9-8 8.52a8.2 8.2 0 01-5.28-2.73 7.45 7.45 0 002.33.65z" opacity=".1"/><path d="M170.78 650.29l19.14-11.26a46.29 46.29 0 00-9.79-11.7l-36.11 11.23 28.34-16.64a46 46 0 00-68.1 40.35c0 25.4 20.59 26.29 46 26.29s46-.89 46-26.29a45.71 45.71 0 00-4-18.66z" fill="#0f5d40"/><path d="M175.65 674.99a35.81 35.81 0 00-6.78-5.33c-3.48-2.31-7.07-4.67-11.17-5.45-3.6-.69-7.31-.11-11-.31a25.65 25.65 0 01-16.81-7.71c-2.61-2.7-4.67-6-7.81-8.09-3.39-2.22-7.69-2.7-11.71-2.15a31.2 31.2 0 00-3.46.71 45.9 45.9 0 00-2.72 15.61c0 25.4 20.59 26.29 46 26.29 12.33 0 23.52-.21 31.78-3.33l-1.38-2.58a36.08 36.08 0 00-4.94-7.66z" opacity=".1"/><path d="M583.96 714.6l-25.39-14.93a61.14 61.14 0 0113-15.52l47.89 14.89-37.53-22.06a61 61 0 0190.31 53.5c0 33.69-27.31 34.86-61 34.86s-61-1.17-61-34.86a60.84 60.84 0 015.23-24.75z" fill="#0f5d40"/><path d="M577.49 747.35a47.57 47.57 0 019-7.07c4.61-3.06 9.38-6.18 14.81-7.22 4.77-.91 9.69-.14 14.54-.42a34.09 34.09 0 0022.3-10.21c3.46-3.59 6.19-8 10.36-10.73 4.49-3 10.19-3.59 15.52-2.85a38.27 38.27 0 014.6.94 60.88 60.88 0 013.6 20.69c0 33.69-27.31 34.86-61 34.86-16.35 0-31.19-.27-42.15-4.41l1.83-3.42c1.91-3.57 3.85-7.16 6.59-10.16z" opacity=".1"/></svg>
\ No newline at end of file
+<svg id="ad7c1fe1-eb22-473c-bc85-8b4fe073a50d" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1094.72" height="788.69" viewBox="0 0 1094.72 788.69"><defs><linearGradient id="f137b292-0aa2-40b3-a442-9a256144b6d8" x1="2938.83" y1="215.4" x2="2938.83" y2="-91.93" gradientTransform="matrix(0.51, 0.86, -0.86, 0.51, -713.07, -2373.14)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="gray" stop-opacity="0.25"/><stop offset="0.54" stop-color="gray" stop-opacity="0.12"/><stop offset="1" stop-color="gray" stop-opacity="0.1"/></linearGradient><linearGradient id="ab747304-1bb2-44ed-8687-72ce94e318d2" x1="1364.21" y1="820.42" x2="1364.21" y2="492.03" gradientTransform="matrix(-1, -0.04, -0.04, 1, 2349.24, 29.65)" xlink:href="#f137b292-0aa2-40b3-a442-9a256144b6d8"/></defs><title>monitor</title><g opacity="0.5"><rect x="960.72" y="367.69" width="134" height="134" rx="14.12" fill="#d0d2d5"/><path d="M1061.36,461.85h38s32,28,0,57h-38S1029.36,492.85,1061.36,461.85Z" transform="translate(-52.64 -55.65)" opacity="0.1"/><rect x="1012.72" y="422.19" width="5" height="15" fill="#3f3d56"/><rect x="1037.72" y="420.19" width="5" height="18" fill="#3f3d56"/><path d="M1027.72,446.19h0a6,6,0,0,1,6,6v5a0,0,0,0,1,0,0h-12a0,0,0,0,1,0,0v-5A6,6,0,0,1,1027.72,446.19Z" fill="#3f3d56"/></g><path d="M674.41,294.11c3.17-.07,6.33.17,9.49,0,2.89-.14,5.76-.61,8.65-.9,4.94-.49,9.92-.45,14.88-.66,3.26-.14,6.7-.46,9.34-2.38,2.48-1.79,3.86-4.71,6.07-6.83,9-8.65,15.17-20.22,23.17-29.82,2-2.44,4.09-4.87,5.9-7.48,3.47-5,5.92-10.67,8.36-16.27a45.11,45.11,0,0,0,2.4-6.42c.45-1.76.68-3.58,1.28-5.3,1.24-3.52,4.22-6.6,4.58-10.31l-.42.06c3.64-4.63,3.08-12.7,4.88-18.63a80.28,80.28,0,0,1,4.17-10.29l6.69-14.57c1.15-2.5,2.35-5.08,4.34-7,2.41-2.33,5.77-3.49,8.19-5.81a12.71,12.71,0,0,0,3.14-5.11l.21.2c1.28,1.25,2.28,2.78,3.53,4.07,2.69,2.78,6.42,4.37,9.16,7.1,1.4,1.39,2.55,3.08,4.24,4.09a4.7,4.7,0,0,0,5.44-.67c4.91-4.32,12.23-4.72,17.54-8.53,1.47-1.06,2.75-2.35,4.13-3.51a56.32,56.32,0,0,1,10.67-6.7,26.61,26.61,0,0,1,6.59.94c3.08.85,6.09,2.26,9.29,2.2a13.4,13.4,0,0,0,7.81-3c1.63-1.26,3.12-3,3.36-5a6.42,6.42,0,0,0-2.4-5.4c-.22-.19-.45-.36-.68-.53A6.68,6.68,0,0,0,876,127a16,16,0,0,0-5.45-2.78,11.69,11.69,0,0,0-3.44-.78,15.7,15.7,0,0,0-5.34,1.25,51.34,51.34,0,0,1-10.47,2.2c-.63.06-1.91-.07-3-.08l-.37-1.06c-4.16,1.92-9,.34-13.56.35-2.22,0-4.43.39-6.64.53a59.92,59.92,0,0,1-7.34-.16L813,126a87.11,87.11,0,0,1-9.42-1c-.83-1.69-1.66-3.38-2.59-5a46.27,46.27,0,0,0-5.49-7.63,26.52,26.52,0,0,1,2.64-2l.18-.11c.23-.13.51-.27.82-.41A18.93,18.93,0,0,0,826.2,92.77a14.5,14.5,0,0,0,1.6-.73c.3-.16.6-.33.89-.52l.43-.29a8.34,8.34,0,0,0,.78-.67c.12-.12.24-.24.35-.37a4.78,4.78,0,0,0,.57-.84l0,0c.06-.12.12-.23.17-.35s0-.09.05-.14.07-.18.1-.26,0-.12.05-.18l.06-.24a1.29,1.29,0,0,0,0-.19c0-.08,0-.16,0-.23l0-.21a1.64,1.64,0,0,1,0-.22,1.7,1.7,0,0,0,0-.22c0-.07,0-.15,0-.22a1.62,1.62,0,0,0,0-.22V86.4a1.79,1.79,0,0,0,0-.23c0-.07,0-.14,0-.21l0-.24,0-.2c0-.09,0-.18,0-.26a1.16,1.16,0,0,0,0-.18,2.33,2.33,0,0,0,0-.28c0-.06,0-.11,0-.16s0-.2-.07-.3l0-.14-.09-.32,0-.12c0-.11-.07-.22-.1-.33l0-.1-.12-.36,0-.06c0-.17-.11-.35-.17-.52-.75-2.16-1.56-4.31-2.42-6.43a15.64,15.64,0,0,0-2.78-4.86c-1.77-1.88-4.31-2.82-6.43-4.32-2.5-1.76-4.37-4.25-6.49-6.47s-4.69-4.23-7.74-4.6A15.16,15.16,0,0,0,797.78,57c-18.37,6.78-33.41,20.14-49.88,30.74-6.41,4.13-13.59,8-21.18,7.47l6.7,10.64c.32.52.65,1,1,1.54s.7,1,1.07,1.5a12.07,12.07,0,0,0,3.51,3.22,7.69,7.69,0,0,0,1.08.52,8.88,8.88,0,0,0,1,.31c2.39.57,5,.09,7.42-.39.83-.16,1.66-.33,2.48-.52l1-.28.16,0c0,.06,0,.11,0,.16-.56,1-1.09,1.91-1.56,2.9a60.81,60.81,0,0,0-3.57,11.12c-1.89,7.5-3.79,15.16-3.29,22.86.17,2.6.61,5.26-.14,7.76-.36,1.23-1,2.49-.66,3.71a17.12,17.12,0,0,1,.92,2.18c.16,1.16-.76,2.16-1.42,3.12s-1,2.49-.06,3.16a5.39,5.39,0,0,0-3.57,4.45,3.79,3.79,0,0,1-.34,1.71,4.23,4.23,0,0,1-1,.93,5.39,5.39,0,0,0-1.87,3.36c-1.93,0-3.56,1.88-5.32,3a21.45,21.45,0,0,1-4.85,1.76c-4.83,1.54-9,4.71-12.77,8.05-2.1,1.83-4.22,3.85-5.14,6.47-.3.86-.46,1.76-.72,2.63a18.14,18.14,0,0,1-2.32,4.74,34.23,34.23,0,0,1-7,7.82,18.59,18.59,0,0,0-3.6,3.86c-1.53,2.21-4.64,2.87-6.28,5a23.75,23.75,0,0,1-2,3c-1.27,1.2-3.19,1.3-4.81,2-3.79,1.57-5.54,6-8.92,8.34a.94.94,0,0,1-.67.22c-.29,0-.46-.35-.71-.52-.49-.33-1.14-.08-1.72.07s-1.36.09-1.51-.49c-8.15-4.94-16.16-10.3-24.32-15.24l-3.72-2.25-19.9-12.06a1.48,1.48,0,0,0-1.57,0l-.62.43c-1-1.06-2.11-2-2.77-2.78-.27-.31-.54-.62-.82-.92a1.22,1.22,0,0,0,.53-.1,1,1,0,0,0,.43-1.3,3.26,3.26,0,0,0-.92-1.17,22.15,22.15,0,0,1-2.39-2.73,25.24,25.24,0,0,0-2.63-3.44,4.83,4.83,0,0,0-3.9-1.55,6.33,6.33,0,0,0-2.26.91,37.09,37.09,0,0,0-7.5,5.75.79.79,0,0,0-.33.62c0,.2.2.35.22.54a.7.7,0,0,1-.19.5,20.93,20.93,0,0,1-4.73,4.31q-3.81,2.85-7.45,5.92a10.42,10.42,0,0,0-3.48,4.25,8.31,8.31,0,0,0,.61,5.9c1.66,3.91,4.57,7.15,7.45,10.28a3.64,3.64,0,0,0,1.91,1.34,2.43,2.43,0,0,0,1.73-.42c1.77-1.16,2.06-3.56,2.19-5.66.05-1,.11-1.92.17-2.88a1.33,1.33,0,0,1,.11-.56,1.4,1.4,0,0,1,.61-.49l2.75-1.45c-.08-.13-.17-.26-.26-.39a11.21,11.21,0,0,1,6.49-.42c1.46.43,2.8,1.3,4.2,1.84a9.29,9.29,0,0,0,1,5.42c5.13.53,9.75,2.81,14.34,5.11A114.33,114.33,0,0,1,633,238.52q4.24,2.76,8.3,5.77c3.84,2.84,7.55,5.85,11.22,8.89a54.11,54.11,0,0,0,7.67,5.65c7.22,4.05,16.9,4.19,23.53-.86,8.36-6.37,19-9.68,28-15.19a31.6,31.6,0,0,0,7.25-5.57,4.94,4.94,0,0,1-.12.77c-.54,2.49-2.69,4.29-3.5,6.81-.63,2-.4,4.31-1.62,6-.93,1.29-2.67,2.21-2.72,3.8,0,.44.13.88.13,1.32a4.13,4.13,0,0,1-.48,1.59c-1,2.25-2.12,4.61-4.17,6-.8.55-1.82,1.05-2,2a1.89,1.89,0,0,1-.21.79c-.34.47-1.09.22-1.63.42-.75.28-.87,1.25-1.17,2a3.24,3.24,0,0,1-3.27,1.92c-6.83-.83-13.54,2.26-20.42,2.08-2.37-.07-4.73-.31-7.11-.33-7.3-.06-14.45,2-21.48,4a11.34,11.34,0,0,0-1.42,4.5,17.37,17.37,0,0,1-7.35.28,15.67,15.67,0,0,0-1.84-.25,2.77,2.77,0,0,0,.16-1.42,40.15,40.15,0,0,0-8.23,3.67c-1.71,1-3.52,2.4-3.68,4.37a6.57,6.57,0,0,0,.32,2.24l.93,3.53a3.72,3.72,0,0,0,.83,1.77c.31.3.72.48,1,.8a3.14,3.14,0,0,1,.54,1.27l.78,3.06a19.46,19.46,0,0,1,.62,3.11c.09,1,0,1.92.07,2.88a29.93,29.93,0,0,0,.69,4.7l1.11,5.54a18.91,18.91,0,0,0,1.31,4.5c.47,1,1.1,1.86,1.48,2.86.3.77.44,1.59.8,2.32a6.19,6.19,0,0,0,2.9,2.68,3.23,3.23,0,0,0,1.41.44c1.42,0,2.44-1.32,3.1-2.58a15.6,15.6,0,0,0,2.07-7.52c0-1.06-.21-2.11-.3-3.17-.24-3,.62-5.92.62-8.91a1.75,1.75,0,0,0-1.25-1.82c.09-2.54.08-5.23,1.42-7.4a11.15,11.15,0,0,1,2.44-2.65c.37,1.18.78,2.35,1.24,3.49C658.58,296.45,666.44,294.31,674.41,294.11ZM837,140.54c-.54.2-1.09.4-1.65.58-4.66,1.55-10,3.06-14.82,2a12.87,12.87,0,0,1-4.06-2l-.35-.22C822.91,139.71,830,140,837,140.54Z" transform="translate(-52.64 -55.65)" fill="url(#f137b292-0aa2-40b3-a442-9a256144b6d8)"/><path d="M864.06,130.25a15.45,15.45,0,0,1,5.31-1.23,11.65,11.65,0,0,1,3.42.79,16.08,16.08,0,0,1,5.44,2.8,6.51,6.51,0,0,1,2.41,5.4c-.23,2-1.71,3.73-3.33,5a13.27,13.27,0,0,1-7.76,3c-3.18.05-6.18-1.38-9.25-2.23a26.56,26.56,0,0,0-6.86-1,15,15,0,0,1-3.49-.22,3.74,3.74,0,0,1-2.68-2.06,5.28,5.28,0,0,1,0-3c.23-1.24.19-4.18,1.29-4.92.88-.6,4-.12,5.08-.21A50.14,50.14,0,0,0,864.06,130.25Z" transform="translate(-52.64 -55.65)" fill="#fbbebe"/><path d="M792.67,110.12a46.24,46.24,0,0,1,7.75,10c3.52,6.14,5.76,13.28,11.06,18a37.32,37.32,0,0,0,4.47,3.23,12.9,12.9,0,0,0,4.06,2c4.76,1.07,10.1-.42,14.74-2a93.35,93.35,0,0,0,13.33-6,11,11,0,0,0,1.56,5.48c1.11,1.57,3.38,2.49,5,1.5a59.3,59.3,0,0,0-11.53,7.13c-1.37,1.16-2.64,2.44-4.1,3.49-5.27,3.79-12.56,4.17-17.43,8.47a4.69,4.69,0,0,1-5.41.65c-1.69-1-2.84-2.72-4.23-4.11-2.74-2.74-6.46-4.34-9.15-7.13-1.25-1.29-2.25-2.82-3.53-4.08-1.83-1.8-4.21-3-5.89-5-1.25-1.47-2-3.26-3.17-4.83-1-1.36-2.18-2.55-3.07-4-2.18-3.47-2.16-8-.91-11.89S790.34,113.51,792.67,110.12Z" transform="translate(-52.64 -55.65)" fill="#f86d70"/><path d="M792.67,110.12a46.24,46.24,0,0,1,7.75,10c3.52,6.14,5.76,13.28,11.06,18a37.32,37.32,0,0,0,4.47,3.23,12.9,12.9,0,0,0,4.06,2c4.76,1.07,10.1-.42,14.74-2a93.35,93.35,0,0,0,13.33-6,11,11,0,0,0,1.56,5.48c1.11,1.57,3.38,2.49,5,1.5a59.3,59.3,0,0,0-11.53,7.13c-1.37,1.16-2.64,2.44-4.1,3.49-5.27,3.79-12.56,4.17-17.43,8.47a4.69,4.69,0,0,1-5.41.65c-1.69-1-2.84-2.72-4.23-4.11-2.74-2.74-6.46-4.34-9.15-7.13-1.25-1.29-2.25-2.82-3.53-4.08-1.83-1.8-4.21-3-5.89-5-1.25-1.47-2-3.26-3.17-4.83-1-1.36-2.18-2.55-3.07-4-2.18-3.47-2.16-8-.91-11.89S790.34,113.51,792.67,110.12Z" transform="translate(-52.64 -55.65)" opacity="0.1"/><path d="M614.94,202.47a10.36,10.36,0,0,0-2.82-2.55,8.54,8.54,0,0,0-5.27-.54c-4.46.68-8.6,2.72-12.52,5-3.16,1.81-6.3,3.82-8.56,6.67a6.85,6.85,0,0,0-1.51,3,6.18,6.18,0,0,0,.23,2.73,6.6,6.6,0,0,0,3.57,4.62c2.09.82,4.42-.05,6.52-.85,2.82-1.09,5.92-2.1,8.82-1.24,2.15.64,4,2.27,6.27,2.33,2.67.08,4.83-2.08,6.53-4.14,1.47-1.8,4.69-5.05,4.48-7.58S616.52,204.28,614.94,202.47Z" transform="translate(-52.64 -55.65)" fill="#fbbebe"/><path d="M648.64,280.3a17.27,17.27,0,0,1-7.5.31c-1.52-.28-3.38-.64-4.35.55a3.58,3.58,0,0,0-.61,1.48c-2.49,10.19-.21,21,4,30.65a.94.94,0,0,0,.28.42c.27.2.64.06.95-.07a11.28,11.28,0,0,0,2.83-1.65c1.92-1.74,2.33-4.57,2.42-7.16s.05-5.33,1.39-7.55c1.68-2.75,5.19-4.09,6.57-7,1.11-2.37.53-5.18-.45-7.6-.33-.84-.46-3-1.24-3.41S649.53,280.06,648.64,280.3Z" transform="translate(-52.64 -55.65)" fill="#fbbebe"/><path d="M614.65,201.45a1,1,0,0,0,.42-1.3,3.38,3.38,0,0,0-.92-1.18,20.69,20.69,0,0,1-2.38-2.74,27.68,27.68,0,0,0-2.63-3.44,4.85,4.85,0,0,0-3.89-1.56,6,6,0,0,0-2.25.9,36.36,36.36,0,0,0-7.45,5.72c-.17.17-.36.38-.32.62s.2.34.22.54a.69.69,0,0,1-.18.49,20.68,20.68,0,0,1-4.7,4.29q-3.78,2.84-7.4,5.9a10.3,10.3,0,0,0-3.45,4.23,8.41,8.41,0,0,0,.63,5.89c1.67,3.92,4.58,7.16,7.45,10.31a3.78,3.78,0,0,0,1.92,1.35,2.42,2.42,0,0,0,1.72-.42c1.75-1.15,2-3.55,2.15-5.64l.16-2.89a1.29,1.29,0,0,1,.11-.55,1.35,1.35,0,0,1,.61-.49l2.72-1.44a8.77,8.77,0,0,0-8-4.16,3,3,0,0,1-2.14-.29,1.76,1.76,0,0,1,0-2.44,5.38,5.38,0,0,1,2.36-1.31c7.17-2.63,13.65-6.85,20.61-10a5.29,5.29,0,0,1,2.46-.57C613.18,201.32,614,201.73,614.65,201.45Z" transform="translate(-52.64 -55.65)" fill="#f86d70"/><path d="M642.9,306.17c-.32.6-.43,1.3-.78,1.89s-1.11,1-1.7.7a1.75,1.75,0,0,1-.66-.89,37.36,37.36,0,0,1-2.45-22.06,13.91,13.91,0,0,1,1.07-3.52c.53-1.08,1.3-2.18,1.08-3.36a39.64,39.64,0,0,0-8.18,3.64c-1.7,1-3.49,2.39-3.65,4.35a6.84,6.84,0,0,0,.33,2.24l.94,3.53a3.65,3.65,0,0,0,.84,1.77c.3.3.71.49,1,.81a3,3,0,0,1,.54,1.26l.79,3.06a19.6,19.6,0,0,1,.63,3.12c.09,1,0,1.92.08,2.88a31,31,0,0,0,.7,4.69l1.13,5.54a19.26,19.26,0,0,0,1.32,4.5c.47,1,1.1,1.86,1.49,2.87.29.77.44,1.59.8,2.32a6.29,6.29,0,0,0,2.89,2.69,3.39,3.39,0,0,0,1.41.45c1.41.05,2.42-1.32,3.08-2.58a15.56,15.56,0,0,0,2-7.5c0-1.06-.22-2.11-.31-3.17-.25-3,.59-5.91.58-8.9C647.89,303.7,643.93,304.23,642.9,306.17Z" transform="translate(-52.64 -55.65)" fill="#f86d70"/><path d="M789.62,131.94a22.08,22.08,0,0,1-8-6.25,38.19,38.19,0,0,1-3-4.45,135.15,135.15,0,0,1-9.75-20.07c4.26.87,8.73,1.66,12.92.46a17.84,17.84,0,0,0,6-3.18,51.87,51.87,0,0,0,6.32-6.17,60.76,60.76,0,0,0,5,8c1.07,1.44,4.69,4.37,4.42,6.33s-4.27,2.94-5.89,3.87l-.17.11a22.68,22.68,0,0,0-6.15,5.73C788.18,120.78,787.09,127,789.62,131.94Z" transform="translate(-52.64 -55.65)" fill="#fbbebe"/><path d="M797.72,110.44a18.74,18.74,0,0,1-9.85-12,51.87,51.87,0,0,0,6.32-6.17,60.76,60.76,0,0,0,5,8c1.07,1.44,4.69,4.37,4.42,6.33S799.34,109.51,797.72,110.44Z" transform="translate(-52.64 -55.65)" opacity="0.1"/><circle cx="754.08" cy="37.53" r="18.73" fill="#fbbebe"/><path d="M765.75,209.85a8.74,8.74,0,0,1-8.62.21,16.59,16.59,0,0,1-3.72-3.13c-6.15-6.31-12-13-16.11-20.83a14.44,14.44,0,0,1-1.82-5.37,5.9,5.9,0,0,1,1.93-5.12,4.16,4.16,0,0,0,1-.93,3.75,3.75,0,0,0,.33-1.7,5.31,5.31,0,0,1,3.54-4.43c-1-.68-.6-2.19.05-3.16s1.56-2,1.4-3.12a17.12,17.12,0,0,0-.92-2.18c-.36-1.22.29-2.48.64-3.7.73-2.5.29-5.16.11-7.76-.53-7.7,1.34-15.34,3.19-22.83a61.24,61.24,0,0,1,3.52-11.1c.47-1,1-2,1.54-2.89a76.83,76.83,0,0,1,6.29-8.75,11.36,11.36,0,0,1,4.29-3.84,4.24,4.24,0,0,1,.5-.18,10.88,10.88,0,0,1,3.82-.29c3.38.21,6.93,1,9.34,3.38s3.19,5.72,4.28,8.94a24.63,24.63,0,0,0,1.26,3.15c1.59,3.16,4.18,5.68,6.73,8.13l2.77,2.67c1.39,1.34,3.8,1,5.11,2.41a6.48,6.48,0,0,1,1.17,2.24A34.75,34.75,0,0,1,799.92,141a18.75,18.75,0,0,1-.15,2.59,13.64,13.64,0,0,1-3.79,8c-2.4,2.31-5.74,3.45-8.13,5.77-2,1.92-3.16,4.49-4.3,7q-3.3,7.26-6.61,14.54a82.39,82.39,0,0,0-4.11,10.25C770.75,196.14,771.93,206,765.75,209.85Z" transform="translate(-52.64 -55.65)" fill="#f86d70"/><path d="M708,292.25c-4.94.2-9.89.14-14.81.61-2.87.28-5.73.75-8.61.87-3.14.14-6.29-.11-9.44-.05-7.93.17-15.75,2.28-23.38,4.46a44.4,44.4,0,0,1-3.31-16.57,10.57,10.57,0,0,1,0-1.13,11.37,11.37,0,0,1,1.41-4.58c7-2,14.1-4,21.37-3.9,2.37,0,4.72.28,7.08.35,6.85.21,13.51-2.86,20.31-2a3.2,3.2,0,0,0,3.25-1.91c.29-.74.41-1.71,1.16-2,.54-.2,1.28.05,1.62-.41a2.1,2.1,0,0,0,.21-.79c.2-1,1.21-1.45,2-2,2-1.38,3.13-3.74,4.13-6a4.07,4.07,0,0,0,.47-1.58c0-.44-.14-.88-.13-1.33,0-1.58,1.77-2.49,2.69-3.78,1.21-1.7,1-4,1.59-6,.8-2.52,2.93-4.31,3.46-6.79a4.94,4.94,0,0,0,.12-.77,31.32,31.32,0,0,1-7.21,5.54c-8.88,5.47-19.5,8.74-27.79,15.07-6.58,5-16.22,4.85-23.42.78a54.16,54.16,0,0,1-7.66-5.67c-3.66-3-7.36-6.07-11.19-8.93q-4-3-8.29-5.79a114.13,114.13,0,0,0-10.74-6.29c-4.58-2.32-9.19-4.62-14.29-5.17a10.53,10.53,0,0,1-.28-8.64A29.14,29.14,0,0,1,613,210.3a21.78,21.78,0,0,1,5.36-5.47,1.46,1.46,0,0,1,1.56,0L639.74,217l3.71,2.27c8.13,5,16.13,10.35,24.26,15.32.15.57.94.64,1.51.49s1.22-.39,1.71-.06c.24.16.41.46.71.52a1,1,0,0,0,.66-.22c3.36-2.31,5.08-6.75,8.85-8.3,1.61-.66,3.52-.76,4.78-2a22.71,22.71,0,0,0,2-3c1.63-2.13,4.72-2.77,6.23-5a18.35,18.35,0,0,1,3.57-3.84,33.83,33.83,0,0,0,7-7.79,18.08,18.08,0,0,0,2.29-4.72c.26-.87.42-1.77.71-2.63.91-2.62,3-4.63,5.09-6.45,3.79-3.32,7.88-6.47,12.68-8a21.44,21.44,0,0,0,4.83-1.75c1.93-1.18,3.7-3.37,5.91-2.86a5,5,0,0,1,2.19,1.38,69.61,69.61,0,0,1,7.45,8.53q5.35,6.81,10.69,13.63a15.75,15.75,0,0,0,4.19,4.15,11.49,11.49,0,0,0,7.75,1c-.35,3.71-3.3,6.77-4.52,10.29-.59,1.71-.82,3.53-1.26,5.28a43.25,43.25,0,0,1-2.37,6.41c-2.4,5.59-4.82,11.21-8.26,16.23-1.78,2.61-3.83,5-5.84,7.45-7.93,9.57-14,21.11-23,29.72-2.18,2.11-3.56,5-6,6.81C714.61,291.82,711.19,292.12,708,292.25Z" transform="translate(-52.64 -55.65)" fill="#434175"/><path d="M745.68,165.37a5.43,5.43,0,0,0-2.5.75c1.83-.64,4.06,1.07,5.75.26.79-.38.67-.49,0-.72C747.92,165.32,746.7,165.63,745.68,165.37Z" transform="translate(-52.64 -55.65)" opacity="0.1"/><rect x="987.99" y="508.41" width="78" height="14" transform="translate(-165.92 317.79) rotate(-19.55)" fill="#d0d2d5"/><path d="M1012.57,535.77h71a7,7,0,0,1,7,7v0a7,7,0,0,1-7,7h-71a0,0,0,0,1,0,0v-14A0,0,0,0,1,1012.57,535.77Z" transform="translate(-173.65 327.59) rotate(-19.55)" fill="#d0d2d5"/><path d="M963.62,496.55h17.3a58,58,0,0,1,58,58v17.3a22.68,22.68,0,0,1-22.68,22.68H963.62a22.68,22.68,0,0,1-22.68-22.68V519.23a22.68,22.68,0,0,1,22.68-22.68Z" transform="translate(-178.14 307.13) rotate(-19.55)" fill="#3f3d56"/><path d="M744.78,175.13a3.88,3.88,0,0,0-2.11-.13,4.46,4.46,0,0,0-2.75,1.35,1.5,1.5,0,0,0,1.23,0,7.27,7.27,0,0,1,2-.22c.58,0,2.31.64,2.76.36C746.57,176.06,745.23,175.3,744.78,175.13Z" transform="translate(-52.64 -55.65)" opacity="0.1"/><path d="M799.77,143.59a19.42,19.42,0,0,1-4.28-2.06c-3.51-2.23-6.46-5.26-9.93-7.54a55.25,55.25,0,0,0-5.43-3l-11.71-6a11.87,11.87,0,0,0-2.84-1.16c-1.91-.42-4.06.86-6,.59a7.23,7.23,0,0,1-4.88-3.37,17.57,17.57,0,0,1-2.2-5.67,29.09,29.09,0,0,1-.67-3.59,16,16,0,0,1-.07-3.79,9.48,9.48,0,0,1,3.3-6.46,12.09,12.09,0,0,1,4.64-2,19.37,19.37,0,0,1,3.21-.53,11.43,11.43,0,0,1,1.85,0c4.42.35,8.16,3.35,11.11,6.65,1.55,1.74,3,3.61,4.48,5.38a24.63,24.63,0,0,0,1.26,3.15c1.59,3.16,4.18,5.68,6.73,8.13l2.77,2.67c1.39,1.34,3.8,1,5.11,2.41a6.48,6.48,0,0,1,1.17,2.24A34.75,34.75,0,0,1,799.92,141,18.75,18.75,0,0,1,799.77,143.59Z" transform="translate(-52.64 -55.65)" opacity="0.1"/><path d="M708.7,271.57l-60.26,8.87a11.37,11.37,0,0,1,1.41-4.58c7-2,14.1-4,21.37-3.9,2.37,0,4.72.28,7.08.35,6.85.21,13.51-2.86,20.31-2a3.2,3.2,0,0,0,3.25-1.91c.29-.74.41-1.71,1.16-2,.54-.2,1.28.05,1.62-.41a2.1,2.1,0,0,0,.21-.79c.2-1,1.21-1.45,2-2,2-1.38,3.13-3.74,4.13-6a4.07,4.07,0,0,0,.47-1.58c0-.44-.14-.88-.13-1.33,0-1.58,1.77-2.49,2.69-3.78,1.21-1.7,1-4,1.59-6,.8-2.52,2.93-4.31,3.46-6.79l.26-.34,10.26-4Z" transform="translate(-52.64 -55.65)" opacity="0.1"/><ellipse cx="425" cy="668.67" rx="425" ry="33" fill="#0f5d40" opacity="0.1"/><ellipse cx="800.72" cy="752.92" rx="275" ry="35.77" fill="#0f5d40" opacity="0.1"/><path d="M527.89,697.6l.28-14.16q20-1.14,40-1.52c7.74-.14,15.58-.19,23.07,1.75,5.19,1.35,10.1,3.63,15.22,5.23,10.2,3.18,21,3.6,31.71,3.89,10.39.29,21.24.39,30.57-4.2,16.15-8,22.94-27.65,23.73-45.64s-2.79-36.12-.3-54" transform="translate(-52.64 -55.65)" fill="none" stroke="#3f3d56" stroke-miterlimit="10" stroke-width="12"/><polygon points="511.81 669.66 333.62 667.38 334.14 662.81 342.76 587.42 499.24 587.42 510.76 662.81 511.64 668.52 511.81 669.66" fill="#d0d2d5"/><polygon points="511.64 668.52 422.71 668.52 333.62 667.38 334.14 662.81 510.76 662.81 511.64 668.52" opacity="0.1"/><rect x="303.92" y="663.95" width="236.45" height="5.71" fill="#d0d2d5"/><path d="M818.6,190.27a14.87,14.87,0,0,0-14.8-15H143.48a14.88,14.88,0,0,0-14.8,15V590.53H818.6Z" transform="translate(-52.64 -55.65)" fill="#3f3d56"/><path d="M128.68,586.53v46.89a14.8,14.8,0,0,0,14.8,14.8H803.8a14.8,14.8,0,0,0,14.8-14.8V586.53Z" transform="translate(-52.64 -55.65)" fill="#d0d2d5"/><rect x="104.6" y="144.8" width="636.23" height="359.81" fill="#2f2e41"/><path d="M477.07,630.43a15.43,15.43,0,0,0,12.13-5.89h0a15.28,15.28,0,0,0,1.2-1.77l-8.46-1.39,9.15.07a15.44,15.44,0,0,0,.29-12.22l-12.27,6.37,11.32-8.32A15.42,15.42,0,1,0,465,624.53h0A15.4,15.4,0,0,0,477.07,630.43Z" transform="translate(-52.64 -55.65)" fill="#0f5d40"/><polygon points="439.85 592.56 510.94 663.95 500.03 592.56 439.85 592.56" opacity="0.1"/><path d="M797.82,197.52,836,146.93c2.28-3,4.63-6.13,7.76-8.29,9-6.22,22.19-2.54,29.72,5.43s10.69,19.06,13,29.78A316.11,316.11,0,0,1,893.64,249c-.32,13.29-1.51,26.72-5.74,39.33-6.42,19.18-19.43,35.33-29.26,53-15.83,28.47-22.46,66.44-2.42,92.13,6.53,8.37,15.42,14.77,21.45,23.51,6.81,9.87,9.46,21.94,12,33.66,3.79,17.7,7.59,35.51,8.29,53.6,2.26,58.49-31.09,116.93-82.59,144.75-35.75,19.32-79,24.92-110.09,51.12-11,9.23-20.48,22.8-17.78,36.86,2.2,11.41,12.22,20.08,23.22,23.85s22.93,3.46,34.53,2.8a636.33,636.33,0,0,0,83-10.25c23.23-4.44,46.42-8.27,66.67-20.49a14,14,0,0,0,5.05-4.53c1.31-2.19,1.53-4.84,1.71-7.39.55-7.51,1.07-15.3-1.58-22.35-3.09-8.24-10.14-14.48-13.52-22.6s-2.77-17.47-.58-26c2.7-10.54,7.61-20.36,12.55-30.05,4.81-9.44,9.69-18.85,15.35-27.8,15.94-25.16,37.72-46,59.27-66.55" transform="translate(-52.64 -55.65)" fill="none" stroke="#3f3d56" stroke-miterlimit="10" stroke-width="12"/><path d="M861,125a15,15,0,0,1,5.31-1.23,12,12,0,0,1,3.42.78,16.1,16.1,0,0,1,5.44,2.81,6.49,6.49,0,0,1,2.41,5.4c-.23,2-1.71,3.72-3.33,5a13.22,13.22,0,0,1-7.76,3c-3.18,0-6.18-1.38-9.25-2.24a26.55,26.55,0,0,0-6.86-1,15,15,0,0,1-3.49-.23,3.73,3.73,0,0,1-2.68-2.05,5.38,5.38,0,0,1,0-2.95c.24-1.24.2-4.19,1.3-4.93.88-.59,4-.11,5.08-.2A51.46,51.46,0,0,0,861,125Z" transform="translate(-52.64 -55.65)" fill="#fbbebe"/><path d="M847.13,126c-4.14,1.9-9,.32-13.5.31-2.21,0-4.41.37-6.61.5a59.44,59.44,0,0,1-7.31-.19l-7.32-.5a62.44,62.44,0,0,1-12.79-1.76c-3.58-4.22-9.39-6.08-13.71-9.52-3.46-2.76-5.94-6.52-8.89-9.83s-6.69-6.3-11.1-6.65a16.41,16.41,0,0,0-5.07.54,11.82,11.82,0,0,0-4.63,2,9.44,9.44,0,0,0-3.3,6.46,21.68,21.68,0,0,0,.73,7.38,17.62,17.62,0,0,0,2.2,5.68,7.34,7.34,0,0,0,4.89,3.37c1.93.26,4.07-1,6-.6a11.87,11.87,0,0,1,2.84,1.16l11.72,6a56.26,56.26,0,0,1,5.42,3c3.48,2.28,6.42,5.31,9.93,7.54s7.94,3.63,11.84,2.17c12-4.47,25.52-2.39,38.25-1.28-.08-.24.44-.46.59-.66a10.75,10.75,0,0,0,2-7.49C849,131,848,128.52,847.13,126Z" transform="translate(-52.64 -55.65)" fill="#f86d70"/><path d="M827,92.31a6.85,6.85,0,0,0,3-2.68c1.14-2.11.44-4.7-.34-7s-1.57-4.31-2.44-6.43a15.49,15.49,0,0,0-2.78-4.87c-1.77-1.89-4.3-2.84-6.41-4.33-2.5-1.77-4.37-4.28-6.48-6.49s-4.69-4.26-7.73-4.63A14.94,14.94,0,0,0,797,57.15c-18.26,6.71-33.19,20-49.54,30.54-6.36,4.11-13.5,7.94-21,7.39l6.71,10.66c1.71,2.73,3.63,5.62,6.63,6.79,2.65,1,5.61.5,8.39,0a22.61,22.61,0,0,0,6.39-1.92c4-2.17,6.57-6.68,10.87-8.25,3.21-1.17,6.79-.45,10,.67s6.36,2.64,9.74,3.1c6,.81,12-1.9,17-5.4,3-2.08,5.73-4.47,9-6a13.56,13.56,0,0,1,8-1.41C822.22,93.74,824,93.88,827,92.31Z" transform="translate(-52.64 -55.65)" fill="#2f2e41"/><path d="M830,89.63c1.12-2.07.46-4.61-.3-6.84a6,6,0,0,1-.5,3.77,7,7,0,0,1-3,2.68c-3,1.58-4.82,1.44-7.9.93a13.66,13.66,0,0,0-8,1.41c-3.25,1.57-6,4-9,6-5,3.5-11,6.2-17,5.39-3.39-.45-6.52-2-9.74-3.1s-6.81-1.84-10-.67c-4.29,1.57-6.83,6.09-10.86,8.25a22.71,22.71,0,0,1-6.39,1.92c-2.79.54-5.75,1.07-8.39,0-3-1.16-4.92-4.06-6.64-6.79l-4.75-7.55c-.38,0-.77,0-1.15,0l6.71,10.66c1.71,2.73,3.63,5.62,6.63,6.79,2.65,1,5.61.5,8.39,0a22.61,22.61,0,0,0,6.39-1.92c4-2.17,6.57-6.68,10.87-8.25,3.21-1.17,6.79-.45,10,.67s6.36,2.64,9.74,3.1c6,.81,12-1.9,17-5.4,3-2.08,5.73-4.47,9-6a13.56,13.56,0,0,1,8-1.41c3.08.5,4.9.64,7.89-.93A6.85,6.85,0,0,0,830,89.63Z" transform="translate(-52.64 -55.65)" opacity="0.1"/><path d="M881.7,773.66a10,10,0,0,1,2.18-2.42c4.37-4.12,6.4-10.18,7.48-16.12s1.39-12,3.12-17.81a57.24,57.24,0,0,1,3.52-8.67c1-2.14,2.25-6.34,4.09-7.83a2.66,2.66,0,0,1,1.26-.61,14.65,14.65,0,0,1,3.62-4.82c2.86-2.59,6.35-4.65,8.26-8a17.64,17.64,0,0,1,1.93-3.29c1.29-1.43,3.33-2,4.52-3.51,1.55-1.94,1.2-4.71,1-7.19s0-5.43,2.14-6.72c1.28-.79,2.93-.72,4.26-1.41,2-1,2.79-3.53,2.75-5.78s-.74-4.44-.92-6.68c-.56-7.16,4.16-14.28,2.33-21.22-.69-2.63-2.26-4.92-3.43-7.36a17.2,17.2,0,0,1-1-2.54,35.57,35.57,0,0,1-9.73,2.35c5.51-12.36,4.11-26.73,6.68-40l-.33-.46a20.71,20.71,0,0,1-4.22-11.85c0-5,2.31-9.57,3.35-14.4.88-4.12.85-8.41,2-12.45a38.32,38.32,0,0,1,3.17-7.22c1.25-2.32,2.56-4.59,3.93-6.83q1.92-6.36,3.85-12.72c1.8-6,3.65-12,7.15-17.14,1.28-1.89,1.67-5.7,3.64-6.84a8.73,8.73,0,0,1,5.2-.91c2.78-1.56,5.22-3.81,5.57-6.89a6.68,6.68,0,0,0-.2-2l-.34,0c-4.41-.41-6.63-4.29-8.92-7.68-3.71-5.51-2.29-12.95,0-19.2a13,13,0,0,1,3-5.29c3.21-3,8.29-2.34,12.43-3.79a42.64,42.64,0,0,1,4.11-1.55c2.75-.65,5.63.26,8.15,1.52s4.87,2.92,7.51,3.92,5.9,1.79,6.55,4.5a4.91,4.91,0,0,1-.23,2.73,10.18,10.18,0,0,1-3.08,4.45,17.82,17.82,0,0,1-10.87,24.83c-.76,1.21-1.47,2.46-2.12,3.73-1.16,2.24-2.14,4.88-1.75,7.28a21.37,21.37,0,0,1,2,2.44c2.87,4,4.5,8.7,6,13.38a139.66,139.66,0,0,1,4.84,18.27c2.44,5.18,5.42,10.14,7.19,15.59a35.2,35.2,0,0,0,9.38-1.25l8.44-1.92c2.93-.66,6-1.38,8.3-3.32,1.22-1,2.17-2.33,3.41-3.33s3.73-2.15,5.09-1.33a4,4,0,0,1,.69.53c1.23-2.5,9.1,7.73,3.72,8.74l.35,1c.71,2.07,2.22,4.59,1.84,6.75L997,588.21a23.19,23.19,0,0,1-7.56,1.67,12.21,12.21,0,0,1-3-.4l0,1.92v.07c-.1,13.19,2,26.3,2.39,39.48.07,2.4,0,5-1.52,6.88-1.7,2.06-4.72,2.46-7.35,2a16.65,16.65,0,0,1-1.86-.41,69.45,69.45,0,0,0-1.92,10.1l-2.49,17.76a26.45,26.45,0,0,0-.39,5.54c.29,4.18,2.5,7.94,4.1,11.81s2.55,8.5.44,12.11c-.65,1.12-1.56,2.08-2.15,3.24a13.1,13.1,0,0,0-1,5.67q-.23,8.1-.44,16.18a1.89,1.89,0,0,1,1.26.26c2.08,1.61,1.85,9.33,2,11.72.16,4,0,8.08.22,12.12a71.1,71.1,0,0,0,2.68,16.13,10.29,10.29,0,0,0,2.29,4.61,9.82,9.82,0,0,0,4.06,2.11,46.58,46.58,0,0,0,15.42,2.1c2.11-.07,4.31-.27,6.27.53s3.54,3,2.83,5c-.61,1.68-2.46,2.48-4.13,3.11a64.81,64.81,0,0,0-11,5.06,29.31,29.31,0,0,1-4.26,2.41,21.58,21.58,0,0,1-4.38,1.08l-17.72,3c-3.63.63-8,1-10.31-2-1.25-1.62-1.43-3.82-1.37-5.87.1-4,.9-8.07.37-12.07a36.46,36.46,0,0,0-1.85-6.94l-5.32-15.72c-1.78-5.27-3.58-10.58-4.27-16.1-.25-2-.23-4.27,1.3-5.52a3.54,3.54,0,0,1,1.32-.68c.06-4.82.69-9.65.42-14.47-.07-1.2-.19-2.41-.29-3.61a16.82,16.82,0,0,0-2.48,2.92c-1.7,2.67-2.33,6.21-4.94,8-2.22,1.52-5.51,1.44-7.07,3.64a10.26,10.26,0,0,0-1.12,2.71,19.6,19.6,0,0,1-4,6.35,32.91,32.91,0,0,1-2.47,6.34q-2.21,4.65-4.4,9.3c-1.57,3.32-3.15,6.64-5,9.78a27,27,0,0,0-3.35,6.46c-1.41,4.94.88,10.36,4.53,14s8.44,5.73,13.16,7.68a3.62,3.62,0,0,1,1.35.8,2.58,2.58,0,0,1,.6,1.74c0,2.31-1.89,4.29-4.07,5a15.27,15.27,0,0,1-6.83.25c-12.78-1.55-25.52-4.67-36.82-10.88a13.22,13.22,0,0,1-4.4-3.39A5.18,5.18,0,0,1,881.7,773.66Z" transform="translate(-52.64 -55.65)" fill="url(#ab747304-1bb2-44ed-8687-72ce94e318d2)"/><path d="M935.72,549.41q-3.19,4.9-6,10.06a37.17,37.17,0,0,0-3.17,7.16c-1.17,4-1.13,8.28-2,12.36-1,4.8-3.34,9.38-3.34,14.29a20.5,20.5,0,0,0,4.22,11.77,56.63,56.63,0,0,0,8.82,9.1,187.62,187.62,0,0,0,12.48-61.21c.1-2.9.11-5.9-.94-8.6-.66-1.7-3.77-6.36-5.78-4.53-.73.67-.92,3.69-1.37,4.69A36.23,36.23,0,0,1,935.72,549.41Z" transform="translate(-52.64 -55.65)" fill="#f86d70"/><path d="M935.72,549.41q-3.19,4.9-6,10.06a37.17,37.17,0,0,0-3.17,7.16c-1.17,4-1.13,8.28-2,12.36-1,4.8-3.34,9.38-3.34,14.29a20.5,20.5,0,0,0,4.22,11.77,56.63,56.63,0,0,0,8.82,9.1,187.62,187.62,0,0,0,12.48-61.21c.1-2.9.11-5.9-.94-8.6-.66-1.7-3.77-6.36-5.78-4.53-.73.67-.92,3.69-1.37,4.69A36.23,36.23,0,0,1,935.72,549.41Z" transform="translate(-52.64 -55.65)" opacity="0.1"/><path d="M1043.07,560.34c3.91-.65,8.25-.33,11.29,2.2a9.32,9.32,0,0,1,3.24,6.16c.26,2.78-1.35,6.06-4.13,6.28a13.17,13.17,0,0,1-2-.13,29.88,29.88,0,0,0-5.24.43,21.42,21.42,0,0,1-18.24-7.36c-2.38-2.94.76-4.29,3.59-4.89C1035.44,562.21,1039.21,561,1043.07,560.34Z" transform="translate(-52.64 -55.65)" fill="#fbbebe"/><path d="M976.19,650.66l-2.48,17.62a26,26,0,0,0-.38,5.5c.29,4.15,2.49,7.88,4.09,11.72s2.56,8.43.45,12c-.65,1.12-1.57,2.06-2.15,3.21a13,13,0,0,0-1,5.64l-.68,25a158.71,158.71,0,0,1-23.18-.13A1.35,1.35,0,0,1,950,731a1.38,1.38,0,0,1-.29-.91c-.34-5.85.68-11.71.35-17.56-.12-2.14-.43-4.27-.46-6.42-.13-8.71,4.18-17.24,2.88-25.86a57.35,57.35,0,0,0-1.6-6.42c-4.11-15-3.24-30.77-2.34-46.25a1.18,1.18,0,0,1,.2-.7,1.23,1.23,0,0,1,.55-.3,28.48,28.48,0,0,1,25.78,4.91c1.09.88,3.84,1.73,4.56,2.77,1,1.47-.32,2.92-.89,4.48A56.89,56.89,0,0,0,976.19,650.66Z" transform="translate(-52.64 -55.65)" fill="#3f3d56"/><path d="M976.19,650.66l-2.48,17.62a26,26,0,0,0-.38,5.5c.29,4.15,2.49,7.88,4.09,11.72s2.56,8.43.45,12c-.65,1.12-1.57,2.06-2.15,3.21a13,13,0,0,0-1,5.64l-.68,25a158.71,158.71,0,0,1-23.18-.13A1.35,1.35,0,0,1,950,731a1.38,1.38,0,0,1-.29-.91c-.34-5.85.68-11.71.35-17.56-.12-2.14-.43-4.27-.46-6.42-.13-8.71,4.18-17.24,2.88-25.86a57.35,57.35,0,0,0-1.6-6.42c-4.11-15-3.24-30.77-2.34-46.25a1.18,1.18,0,0,1,.2-.7,1.23,1.23,0,0,1,.55-.3,28.48,28.48,0,0,1,25.78,4.91c1.09.88,3.84,1.73,4.56,2.77,1,1.47-.32,2.92-.89,4.48A56.89,56.89,0,0,0,976.19,650.66Z" transform="translate(-52.64 -55.65)" opacity="0.1"/><path d="M929.82,645.34c1.17,2.43,2.74,4.7,3.43,7.31,1.83,6.89-2.88,14-2.32,21.06.18,2.23.87,4.4.92,6.63s-.77,4.71-2.75,5.73c-1.33.69-3,.62-4.25,1.4-2.11,1.28-2.35,4.22-2.14,6.67s.55,5.21-1,7.14c-1.19,1.49-3.23,2.06-4.51,3.47a17.3,17.3,0,0,0-1.94,3.27c-1.91,3.33-5.39,5.38-8.25,8s-5.28,6.46-4,10.08c.94,2.67,3.58,4.31,6.12,5.56a64.93,64.93,0,0,0,14.57,5.15,3.51,3.51,0,0,0,1.67.08,3.64,3.64,0,0,0,1.46-1c2.95-2.89,6-5.92,7.36-9.81a10.27,10.27,0,0,1,1.12-2.69c1.56-2.18,4.84-2.11,7.07-3.61,2.6-1.77,3.23-5.29,4.93-7.94,1.61-2.5,4.19-4.22,6-6.56,3-3.88,3.81-9.05,6-13.48.93-1.89,2.12-3.64,2.86-5.61a30.4,30.4,0,0,0,1.37-7.23c1.41-11.68,5-23.44,2.74-35-.5-2.55-1.27-5-1.59-7.62-.56-4.54.32-9.17-.35-13.7a3.73,3.73,0,0,0-1.51-2.9,4.18,4.18,0,0,0-1.72-.36,118.6,118.6,0,0,0-17.78.41c-3,.29-6.37.9-8.16,3.35-1.53,2.09-1.45,4.91-2,7.46-.6,3.13-2.19,4.85-3.86,7.31S928.59,642.81,929.82,645.34Z" transform="translate(-52.64 -55.65)" fill="#3f3d56"/><path d="M952.89,726.6c-1.58,0-3.33-.09-4.55.91-1.52,1.24-1.55,3.53-1.3,5.49.7,5.47,2.49,10.74,4.28,16l5.32,15.61a35.87,35.87,0,0,1,1.85,6.88c.53,4-.27,8-.37,12,0,2,.13,4.22,1.38,5.83,2.26,2.9,6.67,2.56,10.3,1.94l17.71-3a21.72,21.72,0,0,0,4.38-1.07,29.68,29.68,0,0,0,4.25-2.4,65.38,65.38,0,0,1,11-5c1.66-.62,3.52-1.42,4.12-3.09.71-2-.87-4.19-2.83-5s-4.15-.6-6.27-.53a46.72,46.72,0,0,1-15.4-2.09,9.61,9.61,0,0,1-4.06-2.09,10.12,10.12,0,0,1-2.3-4.57,71.27,71.27,0,0,1-2.68-16c-.2-4-.06-8-.22-12-.1-2.37.13-10-2-11.63-1.59-1.22-8.14,2.15-10.28,2.64A49.57,49.57,0,0,1,952.89,726.6Z" transform="translate(-52.64 -55.65)" fill="#2f2e41"/><path d="M894.54,737.72c-1.72,5.74-2,11.79-3.11,17.68s-3.1,11.91-7.47,16a9.69,9.69,0,0,0-2.17,2.4,5.06,5.06,0,0,0,.75,5.23,13.13,13.13,0,0,0,4.39,3.37c11.29,6.16,24,9.26,36.81,10.8a15.36,15.36,0,0,0,6.82-.24c2.18-.74,4.11-2.7,4.07-5a2.53,2.53,0,0,0-.6-1.72,3.73,3.73,0,0,0-1.35-.79c-4.72-1.94-9.52-4.06-13.16-7.63s-5.94-9-4.53-13.86a27.38,27.38,0,0,1,3.34-6.41,106.05,106.05,0,0,0,5-9.7l4.4-9.23c1.28-2.69,2.59-5.47,2.8-8.46a40.57,40.57,0,0,1-16.21-2.59,25.54,25.54,0,0,1-6.67-4c-1.7-1.42-3.25-4.06-5.54-2.21-1.84,1.48-3,5.64-4.09,7.76A59.48,59.48,0,0,0,894.54,737.72Z" transform="translate(-52.64 -55.65)" fill="#2f2e41"/><path d="M959,508.54c-.44,3.83-4.16,6.37-7.71,7.88l22.46,7.18c-1.45-2.78-.27-6.18,1.17-9a50.81,50.81,0,0,1,4-6.4c.22-.31.47-.71.31-1.06a1.12,1.12,0,0,0-.63-.49c-4.62-2.06-9.38-4.19-14.43-4.94-1.46-.22-4.22-.8-5.31.69S959.24,506.77,959,508.54Z" transform="translate(-52.64 -55.65)" fill="#fbbebe"/><path d="M959,508.54c-.44,3.83-4.16,6.37-7.71,7.88l22.46,7.18c-1.45-2.78-.27-6.18,1.17-9a50.81,50.81,0,0,1,4-6.4c.22-.31.47-.71.31-1.06a1.12,1.12,0,0,0-.63-.49c-4.62-2.06-9.38-4.19-14.43-4.94-1.46-.22-4.22-.8-5.31.69S959.24,506.77,959,508.54Z" transform="translate(-52.64 -55.65)" opacity="0.1"/><circle cx="919.45" cy="438.38" r="17.62" fill="#fbbebe"/><path d="M987.31,639c-1.7,2-4.71,2.44-7.34,2-6.15-1-11.19-5.53-17.2-7.16-7.38-2-15.2.57-22.16,3.71s-13.9,6.95-21.52,7.55c6.89-15.36,2.95-33.85,9.53-49.34,1.62-3.78,3.87-7.44,4.23-11.53.45-5.09-2.09-10-2.48-15.07-.36-4.51,1-9,2.29-13.29l4.83-15.85c1.8-5.9,3.65-11.91,7.14-17,1.28-1.87,1.68-5.65,3.64-6.79,4.28-2.46,10.77.65,15.41.82s8.87,3.47,11.58,7.2c2.87,3.94,4.5,8.63,6,13.27a125.22,125.22,0,0,1,5.34,21.23c.15,1.08.28,2.16.38,3.25,1,10.27-.46,20.6-.54,30.91,0,0,0,0,0,.08-.09,13.08,2,26.09,2.4,39.17C988.9,634.59,988.84,637.2,987.31,639Z" transform="translate(-52.64 -55.65)" fill="#f86d70"/><path d="M986.44,593c-3.45-.87-6.58-3.09-9.25-5.53a39,39,0,0,1-6.14-6.95,50.28,50.28,0,0,1-5.29-11.16,129.34,129.34,0,0,1-7-32.28c-.26-3-.34-6.21,1.45-8.59a7.23,7.23,0,0,1,8.74-2.13c2.37,1.16,3.9,3.49,5.31,5.71,2.82,4.43,5.65,8.9,7.46,13.82.8,2.18,1.39,4.43,2.17,6.62a61,61,0,0,0,2.74,6.33c.15,1.08.28,2.16.38,3.25C987.94,572.31,986.52,582.64,986.44,593Z" transform="translate(-52.64 -55.65)" opacity="0.1"/><path d="M960.25,526.55c-1.78,2.37-1.7,5.62-1.45,8.59a129.28,129.28,0,0,0,7,32.27,49.43,49.43,0,0,0,5.29,11.16,38.67,38.67,0,0,0,6.14,6.95c3.4,3.11,7.54,5.88,12.15,5.92a23.42,23.42,0,0,0,7.56-1.65l37.51-12.74c.38-2.15-1.13-4.64-1.84-6.7l-2-5.94c-.57-1.63-1.24-3.4-2.72-4.29s-3.85.33-5.09,1.32-2.19,2.29-3.4,3.3c-2.32,1.92-5.37,2.63-8.3,3.29l-8.43,1.9a35.6,35.6,0,0,1-9.38,1.24c-2.35-7.17-6.82-13.49-9.35-20.61-.78-2.18-1.38-4.43-2.18-6.61-1.81-4.92-4.64-9.39-7.45-13.82-1.41-2.23-2.94-4.56-5.31-5.71A7.25,7.25,0,0,0,960.25,526.55Z" transform="translate(-52.64 -55.65)" fill="#f86d70"/><path d="M966.47,498a8.9,8.9,0,0,1,1.06-3.29,2.79,2.79,0,0,1,3-1.33c1.76.55,2.35,3.28,4.19,3.37,1.24.06,2.13-1.2,2.52-2.39s.6-2.52,1.53-3.36a5.61,5.61,0,0,1,2.18-1c4.27-1.35,8.68-3.85,10.1-8.1a4.9,4.9,0,0,0,.23-2.7c-.65-2.69-4-3.5-6.55-4.48s-5-2.62-7.5-3.88-5.4-2.16-8.15-1.52a40.67,40.67,0,0,0-4.11,1.54c-4.14,1.43-9.22.77-12.43,3.75a13,13,0,0,0-3,5.25c-2.25,6.21-3.66,13.6.05,19.06,2.28,3.37,4.51,7.22,8.91,7.62C963.62,507,965.66,502.32,966.47,498Z" transform="translate(-52.64 -55.65)" fill="#2f2e41"/><g opacity="0.1"><path d="M974.29,492.24c.39-1.18.6-2.52,1.52-3.36a5.83,5.83,0,0,1,2.18-1c4.28-1.35,8.68-3.84,10.11-8.1a4.89,4.89,0,0,0,.22-2.7,3.39,3.39,0,0,0-.53-1.19c1.63.7,3.05,1.65,3.45,3.31a4.9,4.9,0,0,1-.23,2.7c-1.42,4.25-5.83,6.75-10.1,8.1a5.61,5.61,0,0,0-2.18,1c-.93.84-1.14,2.18-1.53,3.36s-1.28,2.45-2.52,2.39-1.84-1.19-2.63-2.14C973.14,494.47,973.92,493.33,974.29,492.24Z" transform="translate(-52.64 -55.65)"/><path d="M955.57,504.4c5.14.47,7.17-4.2,8-8.52a8.9,8.9,0,0,1,1.06-3.29,2.78,2.78,0,0,1,3-1.32c.95.29,1.56,1.23,2.21,2a3,3,0,0,0-2.26,1.4,8.9,8.9,0,0,0-1.06,3.29c-.81,4.32-2.85,9-8,8.52a8.2,8.2,0,0,1-5.28-2.73A7.45,7.45,0,0,0,955.57,504.4Z" transform="translate(-52.64 -55.65)"/></g><path d="M223.42,705.94l19.14-11.26a46.29,46.29,0,0,0-9.79-11.7l-36.11,11.23L225,677.57a46,46,0,0,0-68.1,40.35c0,25.4,20.59,26.29,46,26.29s46-.89,46-26.29a45.71,45.71,0,0,0-4-18.66Z" transform="translate(-52.64 -55.65)" fill="#0f5d40"/><path d="M228.29,730.64a35.81,35.81,0,0,0-6.78-5.33c-3.48-2.31-7.07-4.67-11.17-5.45-3.6-.69-7.31-.11-11-.31a25.65,25.65,0,0,1-16.81-7.71c-2.61-2.7-4.67-6-7.81-8.09-3.39-2.22-7.69-2.7-11.71-2.15a31.2,31.2,0,0,0-3.46.71,45.9,45.9,0,0,0-2.72,15.61c0,25.4,20.59,26.29,46,26.29,12.33,0,23.52-.21,31.78-3.33l-1.38-2.58A36.08,36.08,0,0,0,228.29,730.64Z" transform="translate(-52.64 -55.65)" opacity="0.1"/><path d="M636.6,770.25l-25.39-14.93a61.14,61.14,0,0,1,13-15.52l47.89,14.89-37.53-22.06a61,61,0,0,1,90.31,53.5c0,33.69-27.31,34.86-61,34.86s-61-1.17-61-34.86a60.84,60.84,0,0,1,5.23-24.75Z" transform="translate(-52.64 -55.65)" fill="#0f5d40"/><path d="M630.13,803a47.57,47.57,0,0,1,9-7.07c4.61-3.06,9.38-6.18,14.81-7.22,4.77-.91,9.69-.14,14.54-.42a34.09,34.09,0,0,0,22.3-10.21c3.46-3.59,6.19-8,10.36-10.73,4.49-3,10.19-3.59,15.52-2.85a38.27,38.27,0,0,1,4.6.94,60.88,60.88,0,0,1,3.6,20.69c0,33.69-27.31,34.86-61,34.86-16.35,0-31.19-.27-42.15-4.41l1.83-3.42C625.45,809.59,627.39,806,630.13,803Z" transform="translate(-52.64 -55.65)" opacity="0.1"/></svg>
diff --git a/img/undraw_note_list.svg b/img/undraw_note_list.svg
index 6877b76..70b6ddd 100644
--- a/img/undraw_note_list.svg
+++ b/img/undraw_note_list.svg
@@ -1 +1 @@
-<svg data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="974" height="805.02" viewBox="0 0 974 805.02"><path d="M974 768.75v5a19.11 19.11 0 01-20.91 19c-39.15-3.72-78.12-10.64-117.4-9.43-72.42 2.21-145.44 31.83-215.54 13.53-19.77-5.16-39.32-14.13-59.66-12.2-18.25 1.73-34.49 12.05-52.17 16.89C454.55 816.3 399.8 779 344.06 780.51c-36.74 1-71.92 18.89-108.62 16.9-21.27-1.14-41.53-8.92-62.28-13.71-51.66-11.94-104.86-5.27-158.09-1.13A14 14 0 010 768.64v-4.28a14 14 0 0114-14l940.92-.76A19.11 19.11 0 01974 768.75z" fill="#3f3d56"/><path d="M974 768.75v5a19.11 19.11 0 01-20.91 19c-39.15-3.72-78.12-10.64-117.4-9.43-72.42 2.21-145.44 31.83-215.54 13.53-19.77-5.16-39.32-14.13-59.66-12.2-18.25 1.73-34.49 12.05-52.17 16.89C454.55 816.3 399.8 779 344.06 780.51c-36.74 1-71.92 18.89-108.62 16.9-21.27-1.14-41.53-8.92-62.28-13.71-51.66-11.94-104.86-5.27-158.09-1.13A14 14 0 010 768.64v-4.28a14 14 0 0114-14l940.92-.76A19.11 19.11 0 01974 768.75z" opacity=".1"/><path d="M974 759.61v5a20.39 20.39 0 01-.11 2.08 19.11 19.11 0 01-20.8 17c-39.15-3.73-78.12-10.65-117.4-9.44-72.42 2.22-145.44 31.84-215.54 13.53-19.77-5.16-39.32-14.13-59.66-12.2-18.25 1.73-34.49 12.05-52.17 16.9-53.77 14.72-108.52-22.58-164.26-21.08-36.74 1-71.92 18.89-108.62 16.91-21.27-1.15-41.53-8.92-62.28-13.72-51.65-11.93-104.86-5.26-158.09-1.12a14 14 0 01-14.86-11.5 13.7 13.7 0 01-.21-2.46v-4.28a14 14 0 0114-14l235.83-.19 481.81-.4 223.28-.18A19.11 19.11 0 01974 759.61z" fill="#3f3d56"/><path d="M743.59 743.51c0 2.21-4.36 4.33-12.4 6.32-32.19 7.95-123.19 13.68-230.6 13.68-105.67 0-195.58-5.55-229-13.31-9-2.09-14-4.34-14-6.69 0-.82.6-1.63 1.78-2.43l481.81-.4c1.59.93 2.41 1.83 2.41 2.83z" opacity=".1"/><g opacity=".5"><rect x="552" width="402" height="121" rx="19.03" fill="#36334a"/><path fill="#0f5d40" d="M601 26h93v21h-93z"/><path fill="#0f5d40" opacity=".3" d="M601 60h285v11H601zm0 24h114v11H601z"/></g><g opacity=".5"><rect x="48" y="98.51" width="402" height="121" rx="19.03" fill="#36334a"/><path fill="#36334a" d="M97 124.51h93v21H97zm0 34h285v11H97zm0 24h114v11H97z"/><rect x="48" y="98.51" width="402" height="121" rx="19.03" fill="#36334a"/><path fill="#0f5d40" d="M97 124.51h93v21H97z"/><path fill="#0f5d40" opacity=".3" d="M97 158.51h285v11H97zm0 24h114v11H97z"/></g><rect x="667.58" y="211.54" width="10.31" height="85.02" rx="2.29" fill="#3f3d56"/><rect x="324.76" y="144.93" width="5.79" height="27.99" rx="1.5" fill="#3f3d56"/><rect x="324.55" y="196.17" width="6.52" height="48.72" rx="1.69" fill="#3f3d56"/><rect x="324.65" y="261.94" width="6.21" height="49.14" rx="1.61" fill="#3f3d56"/><rect x="328.04" y="52.43" width="345.1" height="701.37" rx="35.69" fill="#3f3d56"/><rect x="467.3" y="73.38" width="48.19" height="9.79" rx="2.54" fill="#e6e8ec"/><circle cx="528.33" cy="78.27" r="5.55" fill="#e6e8ec"/><path d="M651.83 98.11v610a27.41 27.41 0 01-27.41 27.4H376.76a27.41 27.41 0 01-27.41-27.4v-610a27.41 27.41 0 0127.41-27.41h37.06v4.81a22.58 22.58 0 0022.57 22.57h126a22.57 22.57 0 0022.52-22.57v-4.76h39.51a27.41 27.41 0 0127.41 27.36z" fill="#36334a"/><path fill="#3f3d56" d="M358 129h31v4h-31zm0 7h31v4h-31zm0 7h31v4h-31z"/><path fill="#3f3d56" d="M358 129h31v4h-31zm0 7h31v4h-31zm0 7h31v4h-31zm279.66-4h-.91l-.35-.29a7.61 7.61 0 001.78-4.89 7.44 7.44 0 10-7.4 7.48 7.73 7.73 0 004.88-1.78l.34.29v.92l5.74 5.75 1.72-1.72zm-6.88 0a5.18 5.18 0 115.16-5.18 5.15 5.15 0 01-5.16 5.18z"/><path fill="#0f5d40" d="M358 200h93v21h-93z"/><path fill="#0f5d40" opacity=".3" d="M358 234h285v11H358zm0 24h114v11H358z"/><path fill="#0f5d40" d="M358 444h93v21h-93z"/><path fill="#0f5d40" opacity=".3" d="M358 478h285v11H358zm0 24h114v11H358z"/><path fill="#0f5d40" d="M358 566h93v21h-93z"/><path fill="#0f5d40" opacity=".3" d="M358 600h285v11H358zm0 24h114v11H358z"/><circle cx="592" cy="676" r="34" fill="#0f5d40"/><path d="M609.33 673.32v16.43a1.25 1.25 0 01-1.25 1.25h-33.5a1.25 1.25 0 01-1.25-1.25v-26.17a1.25 1.25 0 011.25-1.25h23.31M579.67 672h22.66M580 676.67h22.67m-22.34 4.66H603" fill="none" stroke="#fff" stroke-linecap="round" stroke-miterlimit="10"/><path fill="none" stroke="#f0f" stroke-miterlimit="10" d="M605 661v11.33m5.67-5.66h-11.34"/><path fill="none" stroke="#fff" stroke-linecap="round" stroke-miterlimit="10" d="M605 661v11.33m5.67-5.66h-11.34"/><path d="M888.6 745.17c3-5.51-.4-12.27-4.29-17.18s-8.61-10-8.51-16.29c.15-9 9.7-14.31 17.33-19.09a84 84 0 0015.56-12.51 22.8 22.8 0 004.78-6.4c1.58-3.52 1.54-7.52 1.44-11.37q-.51-19.26-1.91-38.49" fill="none" stroke="#3f3d56" stroke-miterlimit="10" stroke-width="4"/><path d="M927.51 623.14a14 14 0 00-7-11.5l-3.14 6.22.1-7.53a14.22 14.22 0 00-4.63-.56 14 14 0 1014.68 13.37zm-25.03 94.99a14 14 0 11.68-11.3l-8.77 7.13 9.65-2.23a14 14 0 01-1.56 6.4zm-6.93-27.25a14 14 0 01-4.45-27.53l-.08 5.78 3.18-6.29a14 14 0 0114.67 13.36 13.84 13.84 0 01-.6 4.79 14 14 0 01-12.72 9.89zm34.07-22.67a14 14 0 116.21-26.27l-2.48 6.8 5.1-4.9a14 14 0 014.55 9.67 13.79 13.79 0 01-.35 3.87 14 14 0 01-13.03 10.83z" fill="#57b894"/><path d="M925.62 626.88c-3.24.35-6.39 1.36-9.64 1.56s-6.82-.57-8.88-3.1c-1.1-1.36-1.66-3.08-2.59-4.57a10 10 0 00-3.54-3.33 14 14 0 1026.24 9.32q-.79.03-1.59.12zm4 41.33a14 14 0 01-13.35-20 10.37 10.37 0 012.82 2.82c1 1.51 1.61 3.26 2.78 4.64 2.19 2.57 5.92 3.41 9.31 3.26s6.66-1.12 10-1.43c.47 0 .94-.07 1.42-.08a14 14 0 01-12.98 10.79zm-34.07 22.67a14 14 0 01-13.46-19.76 11.48 11.48 0 013 2.85c1.09 1.54 1.77 3.32 3.05 4.74 2.37 2.63 6.35 3.56 9.93 3.48s6.83-.93 10.28-1.2a14 14 0 01-12.8 9.89zm6.93 27.25a14.017 14.017 0 01-25.59-11.45 13.84 13.84 0 013.08 2.75c1.34 1.62 2.22 3.47 3.76 5 2.87 2.82 7.5 4 11.63 4.09a60 60 0 007.12-.39z" opacity=".1"/><path d="M867.43 738.82s11.08-.34 14.42-2.72 17-5.21 17.86-1.4 16.65 19 4.15 19.06-29.06-1.94-32.4-4-4.03-10.94-4.03-10.94z" fill="#656380"/><path d="M904.08 752.44c-12.51.1-29.06-1.95-32.39-4-2.54-1.55-3.55-7.09-3.89-9.65h-.37s.7 8.94 4 11 19.89 4.07 32.4 4c3.61 0 4.85-1.31 4.78-3.21-.47 1.12-1.84 1.83-4.53 1.86z" opacity=".2"/><path d="M642 331.03v82.94a19 19 0 01-19 19H349.35v-121H623a19 19 0 0119 19.06z" fill="#3f3d56"/><rect x="208" y="295" width="402" height="121" rx="19.03" fill="#f2f2f2"/><rect x="208" y="295" width="402" height="121" rx="19.03" fill="#f2f2f2"/><path fill="#0f5d40" d="M257 321h93v21h-93z"/><path fill="#0f5d40" opacity=".3" d="M257 355h285v11H257zm0 24h114v11H257z"/><circle cx="92.34" cy="246.84" r="35.75" fill="#3f3d56"/><path d="M71.6 524.94c3.69 25.89-.81 52.29-7.82 77.48-1.31 4.69-2.72 9.42-5.17 13.63s-5.86 7.83-8.74 11.79c-6 8.26-9.52 18-12.81 27.64a779.65 779.65 0 00-22.82 81.32 5.57 5.57 0 000 3.47c.87 2 3.51 2.26 5.68 2.25l28.06-.15c1-1.92-.85-4-2-5.84-4-6.22-.16-14.3 3.37-20.81a223.74 223.74 0 0019.78-50c1.92-7.33 3.48-14.82 6.6-21.73 3.77-8.38 9.68-15.59 14.48-23.43 5.58-9.11 9.65-19 13.69-28.93 5.64-13.78 11.33-27.73 13.55-42.45 2.09-13.82 1.06-27.9-.3-41.81a2.64 2.64 0 00-3.06-3l-37.65-1.94c-7.76-.4-9.6-2.1-8.42 5.52.82 5.69 2.76 11.23 3.58 16.99z" fill="#3f3d56"/><path d="M71.6 524.94c3.69 25.89-.81 52.29-7.82 77.48-1.31 4.69-2.72 9.42-5.17 13.63s-5.86 7.83-8.74 11.79c-6 8.26-9.52 18-12.81 27.64a779.65 779.65 0 00-22.82 81.32 5.57 5.57 0 000 3.47c.87 2 3.51 2.26 5.68 2.25l28.06-.15c1-1.92-.85-4-2-5.84-4-6.22-.16-14.3 3.37-20.81a223.74 223.74 0 0019.78-50c1.92-7.33 3.48-14.82 6.6-21.73 3.77-8.38 9.68-15.59 14.48-23.43 5.58-9.11 9.65-19 13.69-28.93 5.64-13.78 11.33-27.73 13.55-42.45 2.09-13.82 1.06-27.9-.3-41.81a2.64 2.64 0 00-3.06-3l-37.65-1.94c-7.76-.4-9.6-2.1-8.42 5.52.82 5.69 2.76 11.23 3.58 16.99z" opacity=".1"/><path d="M79 461.99c-7.65 11-15.67 23.66-13.13 36.83 1.93 10 9.55 17.75 16.74 25 28.74 28.86 57 60.92 66.78 100.47 2.52 10.22 3.74 20.71 5.91 31 3.94 18.7 11 36.58 18 54.35l18.72 47.38a28.36 28.36 0 0027.1-18c-2.46-.19-5.67-2.57-7.11-4.57-8-11.07-9.64-25.31-11.69-38.81-2.27-14.92-5.3-29.72-8.34-44.51l-13.4-65.42c-1.55-7.55-3.1-15.11-5.12-22.54-7.82-28.83-22.64-56-24.93-85.81-.34-4.38-.55-9.19-3.52-12.44-3.12-3.43-8.24-4-12.87-4.27-18.73-1.24-34.89-3.07-53.14 1.34z" fill="#3f3d56"/><path d="M28.47 736.13a29.86 29.86 0 00-6.22-.8 12.92 12.92 0 00-10.16 5.55 25.25 25.25 0 00-2.73 6l-2.71 7.78c-.8 2.28-1.58 4.91-.39 7a7.42 7.42 0 003.64 2.85c6.56 2.92 13.95 3.08 21.1 3.78 6.94.68 13.82 1.9 20.67 3.19 2.36.44 4.71.89 7.1 1.13 5.34.54 10.72 0 16.06-.48l5.51-.53a19.84 19.84 0 005.42-1 6.83 6.83 0 004-3.59c1.36-3.37-1.56-7.36-5.13-8-1.45-.29-2.95-.16-4.42-.35a20.88 20.88 0 01-4.84-1.45c-7.05-2.77-14.17-5.57-20.37-9.93-1.72-1.21-3.52-2.9-3.33-5a10.19 10.19 0 01.89-2.59 9.46 9.46 0 00.08-6.69c-.34-.92-1-1.89-1.93-2-2.64-.32-2.32 3.53-2.71 5-.53 2-1.49 2.18-3.37 2-5.4-.58-10.8-.85-16.16-1.87zm157.87 26.83a17.65 17.65 0 003.82 10.75 8.36 8.36 0 002.72 2.19 10.92 10.92 0 004.95.79 40.05 40.05 0 0013.89-2.81 39.7 39.7 0 014.8-1.81 53.88 53.88 0 016.24-.9c8.27-1.19 15.53-6.07 23.52-8.54a49.45 49.45 0 007-2.3c3.16-1.49 5.72-4 8.23-6.43a19.89 19.89 0 003.78-4.52c1.47-2.74 1.56-6 1.62-9.1a2.59 2.59 0 00-.24-1.41 2.1 2.1 0 00-.9-.71c-2.43-1.2-5.31-.6-8-.13-9.72 1.73-19.67 1.41-29.54 1.09a4.29 4.29 0 01-4.54-2.59l-3.75-6c-1.07-1.72-2.77-3.69-4.71-3.1-1.55.47-2.18 2.37-2.12 4s.56 3.25.25 4.84a6.61 6.61 0 01-3.2 4.16 20.44 20.44 0 01-5 1.92c-5.52 1.56-11.94 3.33-16.21 7.39-3.09 2.92-2.8 9.37-2.61 13.22z" fill="#f2f2f2"/><path d="M184.4 366.26a23.17 23.17 0 005.46-5.94 24.21 24.21 0 002.33-8.21l1.57-9.92c.87-5.47 1.89-11.26 5.54-15.43s10.92-5.66 14.63-1.54c1.62 1.79 2.26 4.25 2.66 6.64a48.34 48.34 0 01-11.82 40c-4.49 4.92-10 8.83-14.75 13.48-4.14 4-7.73 8.59-11.55 12.94a159.42 159.42 0 01-31.47 27.5c.14-7.44 1.09-15.42 0-22.81-.81-5.34-3-8.22 2.17-11.71 12-8.16 24.11-15.54 35.23-25zM83.56 293.08c-.39 5.32-2.6 10.76-7 13.83q18.69 6.54 36.87 14.42c-2.34-2.25-3.05-5.7-3.16-8.94-.31-8.47 2.62-16.8 6.9-24.1a5.85 5.85 0 001.13-3.18c-.14-2.36-2.94-3.45-5.24-4a128.86 128.86 0 00-23.92-3.47c-3.45-.11-7.54-1.2-6.76 3.19.74 4.1 1.49 8.1 1.18 12.25z" fill="#fbbebe"/><circle cx="107.66" cy="266.7" r="29.23" fill="#fbbebe"/><path d="M136.6 345.65a35.36 35.36 0 00-3.71-6.22c-5.3-7.61-10.74-15.21-17.54-21.51a109.19 109.19 0 00-16.65-12.23 37.79 37.79 0 00-10.42-5 40.77 40.77 0 00-6.69-.91l-7.59-.62a6.21 6.21 0 00-2 .06c-2.06.52-3 3.08-2.56 5.15s2 3.75 3.38 5.32c.34 15.49-6.55 30.77-7.48 46.24-1.63 27 14.88 52.21 16.2 79.28a8.55 8.55 0 01-.38 3.63c-.22.56-.55 1.07-.8 1.62-.78 1.7-.75 3.63-.89 5.5a27.94 27.94 0 01-8.23 17.62 12.23 12.23 0 004.64 3.54c3.19 1.39 7 1.51 10.39 2.48 8.84 2.58 17.9 5.18 27.09 4.63a23.9 23.9 0 002.09-7.87c1.3-.81 2.8.92 3 2.44s-.09 3.29 1 4.39 2.47.93 3.8.76c5.61-.71 11-2.6 16.5-3.87s11.38-1.88 16.73-.06c1.08-1.37.62-3.4-.26-4.9s-2.13-2.82-2.63-4.49a10.08 10.08 0 01-.32-2.95c0-8.55 1.76-17.19.09-25.58-.49-2.46-1.27-4.86-1.77-7.33-1-4.79-.85-9.73-.72-14.62s-.46-10.18-.56-15.14a48.29 48.29 0 00-.4-6.13c-.34-2.13-1-4.21-1.18-6.36-.54-5.46 1.66-10.88 1.33-16.36-.55-8.32-10.22-12.84-13.46-20.51z" fill="#ff6584"/><path d="M70.63 341.73c-7.08 18.78-10.54 38.7-14 58.48l-8 46.46c-2.27 13.13-4.55 26.34-4.46 39.66 0 3.74.24 7.55-.74 11.16-1.28 4.74-4.46 8.69-6.87 13a42.78 42.78 0 00-4.6 28.93c.82 4.15 3.06 8.86 7.27 9.34 3.46.38 6.45-2.37 8.47-5.21 4.64-6.51 6.94-14.37 9-22.11a500.11 500.11 0 0013.87-77.09 75.06 75.06 0 011.39-9.8 69.54 69.54 0 013.38-9.76q4.59-11.38 9.19-22.76c7.07-17.53 14.18-35.14 23.89-51.36-9.6-2.76-19.59-6-29.19-8.73-2.77-.82-5.74-.33-8.6-.21z" fill="#fbbebe"/><path d="M87.27 355.97c-6.72-1.45-13.67-1-20.53-1.17a4.43 4.43 0 01-2.76-.72c-1.39-1.19-.8-3.42-.1-5.11l3.32-8a11.64 11.64 0 012.66-4.42c1.69-1.5 4.07-1.87 6.31-2.14 7.29-.84 14.79-1.12 21.86.85s13.72 6.45 16.88 13.08c1.32 2.76 1.93 6.24.18 8.75-2.6 3.73-8.43 7.9-12.78 5.86-5.21-2.44-9.2-5.71-15.04-6.98z" fill="#ff6584"/><path d="M123 221.3a29.52 29.52 0 00-16.28 4.69 35.75 35.75 0 00-35.1-8.22A20.43 20.43 0 1048 241.42a35.75 35.75 0 1068.57 20.09 32 32 0 006.41.65c14.1 0 25.54-9.15 25.54-20.43S137.08 221.3 123 221.3z" fill="#3f3d56"/><path d="M128.09 251.94a31.1 31.1 0 01-6.41-.65 35.57 35.57 0 01-4.68 10.29 32.11 32.11 0 006 .58c13.18 0 24-8 25.39-18.24-4.69 4.88-12.04 8.02-20.3 8.02zm-40.86 25.57a35.8 35.8 0 01-34.18-46.28 20.43 20.43 0 01-16.89-20.12 20.09 20.09 0 01.33-3.66 20.43 20.43 0 0011.46 34 35.75 35.75 0 0068.29 21.18 35.68 35.68 0 01-29.01 14.88z" opacity=".1"/></svg>
\ No newline at end of file
+<svg id="ada6f7ae-8394-4767-8700-18704e9e9034" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="974" height="805.02" viewBox="0 0 974 805.02"><title>note list</title><path d="M1087,816.24v5a19.11,19.11,0,0,1-20.91,19c-39.15-3.72-78.12-10.64-117.4-9.43-72.42,2.21-145.44,31.83-215.54,13.53-19.77-5.16-39.32-14.13-59.66-12.2-18.25,1.73-34.49,12.05-52.17,16.89C567.55,863.79,512.8,826.49,457.06,828c-36.74,1-71.92,18.89-108.62,16.9-21.27-1.14-41.53-8.92-62.28-13.71-51.66-11.94-104.86-5.27-158.09-1.13A14,14,0,0,1,113,816.13v-4.28a14,14,0,0,1,14-14l940.92-.76A19.11,19.11,0,0,1,1087,816.24Z" transform="translate(-113 -47.49)" fill="#3f3d56"/><path d="M1087,816.24v5a19.11,19.11,0,0,1-20.91,19c-39.15-3.72-78.12-10.64-117.4-9.43-72.42,2.21-145.44,31.83-215.54,13.53-19.77-5.16-39.32-14.13-59.66-12.2-18.25,1.73-34.49,12.05-52.17,16.89C567.55,863.79,512.8,826.49,457.06,828c-36.74,1-71.92,18.89-108.62,16.9-21.27-1.14-41.53-8.92-62.28-13.71-51.66-11.94-104.86-5.27-158.09-1.13A14,14,0,0,1,113,816.13v-4.28a14,14,0,0,1,14-14l940.92-.76A19.11,19.11,0,0,1,1087,816.24Z" transform="translate(-113 -47.49)" opacity="0.1"/><path d="M1087,807.1v5a20.39,20.39,0,0,1-.11,2.08,19.11,19.11,0,0,1-20.8,17c-39.15-3.73-78.12-10.65-117.4-9.44-72.42,2.22-145.44,31.84-215.54,13.53-19.77-5.16-39.32-14.13-59.66-12.2-18.25,1.73-34.49,12.05-52.17,16.9-53.77,14.72-108.52-22.58-164.26-21.08-36.74,1-71.92,18.89-108.62,16.91-21.27-1.15-41.53-8.92-62.28-13.72-51.65-11.93-104.86-5.26-158.09-1.12a14,14,0,0,1-14.86-11.5A13.7,13.7,0,0,1,113,807v-4.28a14,14,0,0,1,14-14l235.83-.19,481.81-.4,223.28-.18A19.11,19.11,0,0,1,1087,807.1Z" transform="translate(-113 -47.49)" fill="#3f3d56"/><path d="M856.59,791c0,2.21-4.36,4.33-12.4,6.32C812,805.27,721,811,613.59,811c-105.67,0-195.58-5.55-229-13.31-9-2.09-14-4.34-14-6.69,0-.82.6-1.63,1.78-2.43l481.81-.4C855.77,789.1,856.59,790,856.59,791Z" transform="translate(-113 -47.49)" opacity="0.1"/><g opacity="0.5"><rect x="552" width="402" height="121" rx="19.03" fill="#36334a"/><rect x="601" y="26" width="93" height="21" fill="#0f5d40"/><rect x="601" y="60" width="285" height="11" fill="#0f5d40" opacity="0.3"/><rect x="601" y="84" width="114" height="11" fill="#0f5d40" opacity="0.3"/></g><g opacity="0.5"><rect x="48" y="98.51" width="402" height="121" rx="19.03" fill="#36334a"/><rect x="97" y="124.51" width="93" height="21" fill="#36334a"/><rect x="97" y="158.51" width="285" height="11" fill="#36334a"/><rect x="97" y="182.51" width="114" height="11" fill="#36334a"/><rect x="48" y="98.51" width="402" height="121" rx="19.03" fill="#36334a"/><rect x="97" y="124.51" width="93" height="21" fill="#0f5d40"/><rect x="97" y="158.51" width="285" height="11" fill="#0f5d40" opacity="0.3"/><rect x="97" y="182.51" width="114" height="11" fill="#0f5d40" opacity="0.3"/></g><rect x="667.58" y="211.54" width="10.31" height="85.02" rx="2.29" fill="#3f3d56"/><rect x="324.76" y="144.93" width="5.79" height="27.99" rx="1.5" fill="#3f3d56"/><rect x="324.55" y="196.17" width="6.52" height="48.72" rx="1.69" fill="#3f3d56"/><rect x="324.65" y="261.94" width="6.21" height="49.14" rx="1.61" fill="#3f3d56"/><rect x="328.04" y="52.43" width="345.1" height="701.37" rx="35.69" fill="#3f3d56"/><rect x="467.3" y="73.38" width="48.19" height="9.79" rx="2.54" fill="#e6e8ec"/><circle cx="528.33" cy="78.27" r="5.55" fill="#e6e8ec"/><path d="M764.83,145.6v610A27.41,27.41,0,0,1,737.42,783H489.76a27.41,27.41,0,0,1-27.41-27.4v-610a27.41,27.41,0,0,1,27.41-27.41h37.06V123a22.58,22.58,0,0,0,22.57,22.57h126A22.57,22.57,0,0,0,697.91,123v-4.76h39.51A27.41,27.41,0,0,1,764.83,145.6Z" transform="translate(-113 -47.49)" fill="#36334a"/><rect x="358" y="129" width="31" height="4" fill="#3f3d56"/><rect x="358" y="136" width="31" height="4" fill="#3f3d56"/><rect x="358" y="143" width="31" height="4" fill="#3f3d56"/><rect x="358" y="129" width="31" height="4" fill="#3f3d56"/><rect x="358" y="136" width="31" height="4" fill="#3f3d56"/><rect x="358" y="143" width="31" height="4" fill="#3f3d56"/><path d="M750.66,186.49h-.91l-.35-.29a7.61,7.61,0,0,0,1.78-4.89,7.44,7.44,0,1,0-7.4,7.48,7.73,7.73,0,0,0,4.88-1.78l.34.29v.92l5.74,5.75,1.72-1.72Zm-6.88,0a5.18,5.18,0,1,1,5.16-5.18A5.15,5.15,0,0,1,743.78,186.49Z" transform="translate(-113 -47.49)" fill="#3f3d56"/><rect x="358" y="200" width="93" height="21" fill="#0f5d40"/><rect x="358" y="234" width="285" height="11" fill="#0f5d40" opacity="0.3"/><rect x="358" y="258" width="114" height="11" fill="#0f5d40" opacity="0.3"/><rect x="358" y="444" width="93" height="21" fill="#0f5d40"/><rect x="358" y="478" width="285" height="11" fill="#0f5d40" opacity="0.3"/><rect x="358" y="502" width="114" height="11" fill="#0f5d40" opacity="0.3"/><rect x="358" y="566" width="93" height="21" fill="#0f5d40"/><rect x="358" y="600" width="285" height="11" fill="#0f5d40" opacity="0.3"/><rect x="358" y="624" width="114" height="11" fill="#0f5d40" opacity="0.3"/><circle cx="592" cy="676" r="34" fill="#0f5d40"/><path d="M722.33,720.81v16.43a1.25,1.25,0,0,1-1.25,1.25h-33.5a1.25,1.25,0,0,1-1.25-1.25V711.07a1.25,1.25,0,0,1,1.25-1.25h23.31" transform="translate(-113 -47.49)" fill="none" stroke="#fff" stroke-linecap="round" stroke-miterlimit="10"/><line x1="579.67" y1="672" x2="602.33" y2="672" fill="none" stroke="#fff" stroke-linecap="round" stroke-miterlimit="10"/><line x1="580" y1="676.67" x2="602.67" y2="676.67" fill="none" stroke="#fff" stroke-linecap="round" stroke-miterlimit="10"/><line x1="580.33" y1="681.33" x2="603" y2="681.33" fill="none" stroke="#fff" stroke-linecap="round" stroke-miterlimit="10"/><line x1="605" y1="661" x2="605" y2="672.33" fill="none" stroke="#f0f" stroke-miterlimit="10"/><line x1="610.67" y1="666.67" x2="599.33" y2="666.67" fill="none" stroke="#f0f" stroke-miterlimit="10"/><line x1="605" y1="661" x2="605" y2="672.33" fill="none" stroke="#fff" stroke-linecap="round" stroke-miterlimit="10"/><line x1="610.67" y1="666.67" x2="599.33" y2="666.67" fill="none" stroke="#fff" stroke-linecap="round" stroke-miterlimit="10"/><path d="M1001.6,792.66c3-5.51-.4-12.27-4.29-17.18s-8.61-10-8.51-16.29c.15-9,9.7-14.31,17.33-19.09a84,84,0,0,0,15.56-12.51,22.8,22.8,0,0,0,4.78-6.4c1.58-3.52,1.54-7.52,1.44-11.37q-.51-19.26-1.91-38.49" transform="translate(-113 -47.49)" fill="none" stroke="#3f3d56" stroke-miterlimit="10" stroke-width="4"/><path d="M1040.51,670.63a14,14,0,0,0-7-11.5l-3.14,6.22.1-7.53a14.22,14.22,0,0,0-4.63-.56,14,14,0,1,0,14.68,13.37Z" transform="translate(-113 -47.49)" fill="#57b894"/><path d="M1015.48,765.62a14,14,0,1,1,.68-11.3l-8.77,7.13,9.65-2.23A14,14,0,0,1,1015.48,765.62Z" transform="translate(-113 -47.49)" fill="#57b894"/><path d="M1008.55,738.37a14,14,0,0,1-4.45-27.53l-.08,5.78,3.18-6.29h0a14,14,0,0,1,14.67,13.36,13.84,13.84,0,0,1-.6,4.79A14,14,0,0,1,1008.55,738.37Z" transform="translate(-113 -47.49)" fill="#57b894"/><path d="M1042.62,715.7a14,14,0,1,1,6.21-26.27l-2.48,6.8,5.1-4.9A14,14,0,0,1,1056,701a13.79,13.79,0,0,1-.35,3.87A14,14,0,0,1,1042.62,715.7Z" transform="translate(-113 -47.49)" fill="#57b894"/><path d="M1038.62,674.37c-3.24.35-6.39,1.36-9.64,1.56s-6.82-.57-8.88-3.1c-1.1-1.36-1.66-3.08-2.59-4.57a10,10,0,0,0-3.54-3.33,14,14,0,1,0,26.24,9.32Q1039.42,674.28,1038.62,674.37Z" transform="translate(-113 -47.49)" opacity="0.1"/><path d="M1042.62,715.7a14,14,0,0,1-13.35-20,10.37,10.37,0,0,1,2.82,2.82c1,1.51,1.61,3.26,2.78,4.64,2.19,2.57,5.92,3.41,9.31,3.26s6.66-1.12,10-1.43c.47,0,.94-.07,1.42-.08A14,14,0,0,1,1042.62,715.7Z" transform="translate(-113 -47.49)" opacity="0.1"/><path d="M1008.55,738.37a14,14,0,0,1-13.46-19.76,11.48,11.48,0,0,1,3,2.85c1.09,1.54,1.77,3.32,3.05,4.74,2.37,2.63,6.35,3.56,9.93,3.48s6.83-.93,10.28-1.2A14,14,0,0,1,1008.55,738.37Z" transform="translate(-113 -47.49)" opacity="0.1"/><path d="M1015.48,765.62a14,14,0,0,1-25.59-11.45,13.84,13.84,0,0,1,3.08,2.75c1.34,1.62,2.22,3.47,3.76,5,2.87,2.82,7.5,4,11.63,4.09A60,60,0,0,0,1015.48,765.62Z" transform="translate(-113 -47.49)" opacity="0.1"/><path d="M980.43,786.31s11.08-.34,14.42-2.72,17-5.21,17.86-1.4,16.65,19,4.15,19.06-29.06-1.94-32.4-4S980.43,786.31,980.43,786.31Z" transform="translate(-113 -47.49)" fill="#656380"/><path d="M1017.08,799.93c-12.51.1-29.06-1.95-32.39-4-2.54-1.55-3.55-7.09-3.89-9.65h-.37s.7,8.94,4,11,19.89,4.07,32.4,4c3.61,0,4.85-1.31,4.78-3.21C1021.14,799.19,1019.77,799.9,1017.08,799.93Z" transform="translate(-113 -47.49)" opacity="0.2"/><path d="M755,378.52v82.94a19,19,0,0,1-19,19H462.35v-121H736A19,19,0,0,1,755,378.52Z" transform="translate(-113 -47.49)" fill="#3f3d56"/><rect x="208" y="295" width="402" height="121" rx="19.03" fill="#f2f2f2"/><rect x="208" y="295" width="402" height="121" rx="19.03" fill="#f2f2f2"/><rect x="257" y="321" width="93" height="21" fill="#0f5d40"/><rect x="257" y="355" width="285" height="11" fill="#0f5d40" opacity="0.3"/><rect x="257" y="379" width="114" height="11" fill="#0f5d40" opacity="0.3"/><circle cx="92.34" cy="246.84" r="35.75" fill="#3f3d56"/><path d="M184.6,572.43c3.69,25.89-.81,52.29-7.82,77.48-1.31,4.69-2.72,9.42-5.17,13.63s-5.86,7.83-8.74,11.79c-6,8.26-9.52,18-12.81,27.64a779.65,779.65,0,0,0-22.82,81.32,5.57,5.57,0,0,0,0,3.47c.87,2,3.51,2.26,5.68,2.25l28.06-.15c1-1.92-.85-4-2-5.84-4-6.22-.16-14.3,3.37-20.81a223.74,223.74,0,0,0,19.78-50c1.92-7.33,3.48-14.82,6.6-21.73,3.77-8.38,9.68-15.59,14.48-23.43,5.58-9.11,9.65-19,13.69-28.93,5.64-13.78,11.33-27.73,13.55-42.45,2.09-13.82,1.06-27.9-.3-41.81a2.64,2.64,0,0,0-3.06-3l-37.65-1.94c-7.76-.4-9.6-2.1-8.42,5.52C181.84,561.13,183.78,566.67,184.6,572.43Z" transform="translate(-113 -47.49)" fill="#3f3d56"/><path d="M184.6,572.43c3.69,25.89-.81,52.29-7.82,77.48-1.31,4.69-2.72,9.42-5.17,13.63s-5.86,7.83-8.74,11.79c-6,8.26-9.52,18-12.81,27.64a779.65,779.65,0,0,0-22.82,81.32,5.57,5.57,0,0,0,0,3.47c.87,2,3.51,2.26,5.68,2.25l28.06-.15c1-1.92-.85-4-2-5.84-4-6.22-.16-14.3,3.37-20.81a223.74,223.74,0,0,0,19.78-50c1.92-7.33,3.48-14.82,6.6-21.73,3.77-8.38,9.68-15.59,14.48-23.43,5.58-9.11,9.65-19,13.69-28.93,5.64-13.78,11.33-27.73,13.55-42.45,2.09-13.82,1.06-27.9-.3-41.81a2.64,2.64,0,0,0-3.06-3l-37.65-1.94c-7.76-.4-9.6-2.1-8.42,5.52C181.84,561.13,183.78,566.67,184.6,572.43Z" transform="translate(-113 -47.49)" opacity="0.1"/><path d="M192,509.48c-7.65,11-15.67,23.66-13.13,36.83,1.93,10,9.55,17.75,16.74,25,28.74,28.86,57,60.92,66.78,100.47,2.52,10.22,3.74,20.71,5.91,31,3.94,18.7,11,36.58,18,54.35l18.72,47.38a28.36,28.36,0,0,0,27.1-18c-2.46-.19-5.67-2.57-7.11-4.57-8-11.07-9.64-25.31-11.69-38.81-2.27-14.92-5.3-29.72-8.34-44.51L291.58,633.2c-1.55-7.55-3.1-15.11-5.12-22.54-7.82-28.83-22.64-56-24.93-85.81-.34-4.38-.55-9.19-3.52-12.44-3.12-3.43-8.24-4-12.87-4.27C226.41,506.9,210.25,505.07,192,509.48Z" transform="translate(-113 -47.49)" fill="#3f3d56"/><path d="M141.47,783.62a29.86,29.86,0,0,0-6.22-.8,12.92,12.92,0,0,0-10.16,5.55,25.25,25.25,0,0,0-2.73,6l-2.71,7.78c-.8,2.28-1.58,4.91-.39,7A7.42,7.42,0,0,0,122.9,812c6.56,2.92,13.95,3.08,21.1,3.78,6.94.68,13.82,1.9,20.67,3.19,2.36.44,4.71.89,7.1,1.13,5.34.54,10.72,0,16.06-.48l5.51-.53a19.84,19.84,0,0,0,5.42-1,6.83,6.83,0,0,0,4-3.59c1.36-3.37-1.56-7.36-5.13-8-1.45-.29-2.95-.16-4.42-.35a20.88,20.88,0,0,1-4.84-1.45c-7.05-2.77-14.17-5.57-20.37-9.93-1.72-1.21-3.52-2.9-3.33-5a10.19,10.19,0,0,1,.89-2.59,9.46,9.46,0,0,0,.08-6.69c-.34-.92-1-1.89-1.93-2-2.64-.32-2.32,3.53-2.71,5-.53,2-1.49,2.18-3.37,2C152.23,784.91,146.83,784.64,141.47,783.62Z" transform="translate(-113 -47.49)" fill="#f2f2f2"/><path d="M299.34,810.45a17.65,17.65,0,0,0,3.82,10.75,8.36,8.36,0,0,0,2.72,2.19,10.92,10.92,0,0,0,4.95.79,40.05,40.05,0,0,0,13.89-2.81,39.7,39.7,0,0,1,4.8-1.81,53.88,53.88,0,0,1,6.24-.9c8.27-1.19,15.53-6.07,23.52-8.54a49.45,49.45,0,0,0,7-2.3c3.16-1.49,5.72-4,8.23-6.43a19.89,19.89,0,0,0,3.78-4.52c1.47-2.74,1.56-6,1.62-9.1a2.59,2.59,0,0,0-.24-1.41,2.1,2.1,0,0,0-.9-.71c-2.43-1.2-5.31-.6-8-.13-9.72,1.73-19.67,1.41-29.54,1.09a4.29,4.29,0,0,1-4.54-2.59l-3.75-6c-1.07-1.72-2.77-3.69-4.71-3.1-1.55.47-2.18,2.37-2.12,4s.56,3.25.25,4.84a6.61,6.61,0,0,1-3.2,4.16,20.44,20.44,0,0,1-5,1.92c-5.52,1.56-11.94,3.33-16.21,7.39C298.86,800.15,299.15,806.6,299.34,810.45Z" transform="translate(-113 -47.49)" fill="#f2f2f2"/><path d="M297.4,413.75a23.17,23.17,0,0,0,5.46-5.94,24.21,24.21,0,0,0,2.33-8.21l1.57-9.92c.87-5.47,1.89-11.26,5.54-15.43s10.92-5.66,14.63-1.54c1.62,1.79,2.26,4.25,2.66,6.64a48.34,48.34,0,0,1-11.82,40c-4.49,4.92-10,8.83-14.75,13.48-4.14,4-7.73,8.59-11.55,12.94A159.42,159.42,0,0,1,260,473.27c.14-7.44,1.09-15.42,0-22.81-.81-5.34-3-8.22,2.17-11.71C274.17,430.59,286.28,423.21,297.4,413.75Z" transform="translate(-113 -47.49)" fill="#fbbebe"/><path d="M196.56,340.57c-.39,5.32-2.6,10.76-7,13.83q18.69,6.54,36.87,14.42c-2.34-2.25-3.05-5.7-3.16-8.94-.31-8.47,2.62-16.8,6.9-24.1a5.85,5.85,0,0,0,1.13-3.18c-.14-2.36-2.94-3.45-5.24-4a128.86,128.86,0,0,0-23.92-3.47c-3.45-.11-7.54-1.2-6.76,3.19C196.12,332.42,196.87,336.42,196.56,340.57Z" transform="translate(-113 -47.49)" fill="#fbbebe"/><circle cx="107.66" cy="266.7" r="29.23" fill="#fbbebe"/><path d="M249.6,393.14a35.36,35.36,0,0,0-3.71-6.22c-5.3-7.61-10.74-15.21-17.54-21.51a109.19,109.19,0,0,0-16.65-12.23,37.79,37.79,0,0,0-10.42-5,40.77,40.77,0,0,0-6.69-.91l-7.59-.62a6.21,6.21,0,0,0-2,.06c-2.06.52-3,3.08-2.56,5.15s2,3.75,3.38,5.32c.34,15.49-6.55,30.77-7.48,46.24-1.63,27,14.88,52.21,16.2,79.28a8.55,8.55,0,0,1-.38,3.63c-.22.56-.55,1.07-.8,1.62-.78,1.7-.75,3.63-.89,5.5a27.94,27.94,0,0,1-8.23,17.62,12.23,12.23,0,0,0,4.64,3.54c3.19,1.39,7,1.51,10.39,2.48,8.84,2.58,17.9,5.18,27.09,4.63a23.9,23.9,0,0,0,2.09-7.87c1.3-.81,2.8.92,3,2.44s-.09,3.29,1,4.39,2.47.93,3.8.76c5.61-.71,11-2.6,16.5-3.87s11.38-1.88,16.73-.06c1.08-1.37.62-3.4-.26-4.9s-2.13-2.82-2.63-4.49a10.08,10.08,0,0,1-.32-2.95c0-8.55,1.76-17.19.09-25.58-.49-2.46-1.27-4.86-1.77-7.33-1-4.79-.85-9.73-.72-14.62s-.46-10.18-.56-15.14a48.29,48.29,0,0,0-.4-6.13c-.34-2.13-1-4.21-1.18-6.36-.54-5.46,1.66-10.88,1.33-16.36C262.51,405.33,252.84,400.81,249.6,393.14Z" transform="translate(-113 -47.49)" fill="#ff6584"/><path d="M183.63,389.22c-7.08,18.78-10.54,38.7-14,58.48l-8,46.46c-2.27,13.13-4.55,26.34-4.46,39.66,0,3.74.24,7.55-.74,11.16-1.28,4.74-4.46,8.69-6.87,13a42.78,42.78,0,0,0-4.6,28.93c.82,4.15,3.06,8.86,7.27,9.34,3.46.38,6.45-2.37,8.47-5.21,4.64-6.51,6.94-14.37,9-22.11a500.11,500.11,0,0,0,13.87-77.09,75.06,75.06,0,0,1,1.39-9.8,69.54,69.54,0,0,1,3.38-9.76q4.59-11.38,9.19-22.76c7.07-17.53,14.18-35.14,23.89-51.36-9.6-2.76-19.59-6-29.19-8.73C189.46,388.61,186.49,389.1,183.63,389.22Z" transform="translate(-113 -47.49)" fill="#fbbebe"/><path d="M200.27,403.46c-6.72-1.45-13.67-1-20.53-1.17a4.43,4.43,0,0,1-2.76-.72c-1.39-1.19-.8-3.42-.1-5.11l3.32-8a11.64,11.64,0,0,1,2.66-4.42c1.69-1.5,4.07-1.87,6.31-2.14,7.29-.84,14.79-1.12,21.86.85s13.72,6.45,16.88,13.08c1.32,2.76,1.93,6.24.18,8.75-2.6,3.73-8.43,7.9-12.78,5.86C210.1,408,206.11,404.73,200.27,403.46Z" transform="translate(-113 -47.49)" fill="#ff6584"/><path d="M236,268.79a29.52,29.52,0,0,0-16.28,4.69,35.75,35.75,0,0,0-35.1-8.22A20.43,20.43,0,1,0,161,288.91,35.75,35.75,0,1,0,229.57,309a32,32,0,0,0,6.41.65c14.1,0,25.54-9.15,25.54-20.43S250.08,268.79,236,268.79Z" transform="translate(-113 -47.49)" fill="#3f3d56"/><path d="M241.09,299.43a31.1,31.1,0,0,1-6.41-.65A35.57,35.57,0,0,1,230,309.07a32.11,32.11,0,0,0,6,.58c13.18,0,24-8,25.39-18.24C256.7,296.29,249.35,299.43,241.09,299.43Z" transform="translate(-113 -47.49)" opacity="0.1"/><path d="M200.23,325a35.8,35.8,0,0,1-34.18-46.28,20.43,20.43,0,0,1-16.89-20.12,20.09,20.09,0,0,1,.33-3.66,20.43,20.43,0,0,0,11.46,34,35.75,35.75,0,0,0,68.29,21.18A35.68,35.68,0,0,1,200.23,325Z" transform="translate(-113 -47.49)" opacity="0.1"/></svg>
diff --git a/img/undraw_online.svg b/img/undraw_online.svg
index 7781589..4ea4249 100644
--- a/img/undraw_online.svg
+++ b/img/undraw_online.svg
@@ -1 +1 @@
-<svg data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1082.19" height="847.94" viewBox="0 0 1082.19 847.94"><defs><linearGradient id="a" x1="276.42" y1="818" x2="276.42" y2="60" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="gray" stop-opacity=".25"/><stop offset=".54" stop-color="gray" stop-opacity=".12"/><stop offset="1" stop-color="gray" stop-opacity=".1"/></linearGradient><linearGradient id="b" x1="891.13" y1="675.02" x2="891.13" y2="214.93" gradientTransform="matrix(-1 0 0 1 1114 0)" xlink:href="#a"/></defs><path d="M909.2 36.16c37.27 12.37 51.62 19.46 88.51 32.93 15.11 5.52 30.64 11.41 42.27 22.52 12.21 11.67 18.87 27.95 23.58 44.17 10.1 34.82 12.19 74.1-5.42 105.79-16.11 29-47.49 49.78-54.54 82.18-5.2 23.89 4.26 48.17 8.9 72.17a184.8 184.8 0 01-6.35 93.79c-9.69 28.64-28.59 56.43-57.16 66.3-33.23 11.47-69.43-3.86-104.57-2.76-39.43 1.24-75.24 23.14-105.67 48.24s-57.89 54.24-91.65 74.55c-34.43 20.69-73.83 31.26-112.65 41.6-21.59 5.75-43.41 11.53-65.74 12.27-24.69.82-49.33-4.61-72.37-13.54-42.71-16.54-80.4-45.17-109.34-80.67-16.84-20.65-31.41-47.31-24.05-72.91 5.35-18.6 21-32 33-47.17 31.94-40.17 38.93-98.64 17.36-145.21-10.93-23.6-28.17-43.58-43.46-64.62s-29.13-44.43-31.5-70.33 9.64-54.65 33.65-64.64c29.45-12.24 71.25 3.84 90.26-21.78 7.2-9.71 8.12-22.5 10.32-34.38C384.29 51.68 444.1 1.12 508.1.02c49.92-.86 97 24.71 146.85 27.07 50.09 2.37 100.96-18.73 149.46-6.12 17.79 4.69 34.17 13.69 51.79 19s38 6.31 53.18-4.07" fill="#0f5d40" opacity=".1"/><path fill="#0f5d40" opacity=".1" d="M492.93 182.79h437.49v30.27H492.93zm0 130.7h437.49v30.27H492.93zm0 136.2h437.49v30.27H492.93z"/><path fill="#0f5d40" opacity=".1" d="M655.27 104.38h27.51v78.42h-27.51z"/><path fill="#0f5d40" opacity=".1" d="M655.27 116.76h27.51v5.5h-27.51zm0 42.65h27.51v5.5h-27.51zm41.28-55.03h27.51v78.42h-27.51z"/><path fill="#0f5d40" opacity=".1" d="M696.55 116.76h27.51v5.5h-27.51zm0 42.65h27.51v5.5h-27.51zm41.27-55.03h27.51v78.42h-27.51z"/><path fill="#0f5d40" opacity=".1" d="M737.82 116.76h27.51v5.5h-27.51zm0 42.65h27.51v5.5h-27.51zm41.27-55.03h27.51v78.42h-27.51z"/><path fill="#0f5d40" opacity=".1" d="M779.09 116.76h27.51v5.5h-27.51zm0 42.65h27.51v5.5h-27.51zm-13.365 222.142l24.591-12.331 35.15 70.101-24.591 12.33z"/><path fill="#0f5d40" opacity=".1" d="M771.276 392.623l24.592-12.33 2.465 4.916-24.592 12.33zm19.118 38.117l24.592-12.331 2.465 4.916-24.592 12.33zm-4.424-194.29h27.51v78.42h-27.51z"/><path fill="#0f5d40" opacity=".1" d="M785.97 248.83h27.51v5.5h-27.51zm0 42.65h27.51v5.5h-27.51zm41.27-55.03h27.51v78.42h-27.51z"/><path fill="#0f5d40" opacity=".1" d="M827.24 248.83h27.51v5.5h-27.51zm0 42.65h27.51v5.5h-27.51zm41.27-55.03h27.51v78.42h-27.51z"/><path fill="#0f5d40" opacity=".1" d="M868.51 248.83h27.51v5.5h-27.51zm0 42.65h27.51v5.5h-27.51zm-337.05 79.79h27.51v78.42h-27.51z"/><path fill="#0f5d40" opacity=".1" d="M531.46 383.65h27.51v5.5h-27.51zm0 42.65h27.51v5.5h-27.51zm41.27-55.03h27.51v78.42h-27.51z"/><path fill="#0f5d40" opacity=".1" d="M572.73 383.65h27.51v5.5h-27.51zm0 42.65h27.51v5.5h-27.51zM614 371.27h27.51v78.42H614z"/><path fill="#0f5d40" opacity=".1" d="M614 383.65h27.51v5.5H614zm0 42.65h27.51v5.5H614zm41.27-55.03h27.51v78.42h-27.51z"/><path fill="#0f5d40" opacity=".1" d="M655.27 383.65h27.51v5.5h-27.51zm0 42.65h27.51v5.5h-27.51zm41.28-55.03h27.51v78.42h-27.51z"/><path fill="#0f5d40" opacity=".1" d="M696.55 383.65h27.51v5.5h-27.51zm0 42.65h27.51v5.5h-27.51zm41.27-55.03h27.51v78.42h-27.51z"/><path fill="#0f5d40" opacity=".1" d="M737.82 383.65h27.51v5.5h-27.51zm0 42.65h27.51v5.5h-27.51z"/><g opacity=".1" fill="#0f5d40"><path d="M697.1 286.36s-8.34-2.83-12.36 4.52a13.41 13.41 0 00.18 12.91c2.64 4.77 8.07 11 18.37 10.41 8.73-.47 11.64-7.13 12.43-13.33a13.7 13.7 0 00-18.19-14.66z"/><path d="M686.66 304.45a13.41 13.41 0 01-.18-12.91c4-7.35 12.36-4.52 12.36-4.52l.43-.15a13.57 13.57 0 019.8.22 13.58 13.58 0 00-11.57-1.1l-.43.15s-8.34-2.83-12.36 4.52a13.41 13.41 0 00.18 12.91 20 20 0 009.43 8.93 20.68 20.68 0 01-7.66-8.05z" opacity=".1"/><path d="M692.77 289.89s3.09 2.43 10.61 0" opacity=".2"/><path d="M692.1 272.22s5.3 14.36 4.86 18.12l4.2-.44s-7.07-12.59-5.3-17.68z"/><path d="M692.1 272.22s5.3 14.36 4.86 18.12l4.2-.44s-7.07-12.59-5.3-17.68z" opacity=".2"/><path d="M713.75 273.42s-8.35-4.27-12.08-.74-4.31 12.54-4.31 12.54 13.61 1.87 16.39-11.8z"/><path d="M713.75 273.42s-8.35-4.27-12.08-.74-4.31 12.54-4.31 12.54 13.61 1.87 16.39-11.8z" opacity=".1"/><path d="M697.36 285.22s2.19-10.46 16.39-11.8"/></g><g opacity=".1" fill="#0f5d40"><path d="M873.17 422.56s-8.34-2.83-12.36 4.52a13.41 13.41 0 00.18 12.91c2.64 4.77 8.07 11 18.37 10.41 8.73-.47 11.64-7.13 12.43-13.33a13.7 13.7 0 00-18.19-14.66z"/><path d="M862.76 440.65a13.41 13.41 0 01-.18-12.91c4-7.35 12.36-4.52 12.36-4.52l.43-.15a13.57 13.57 0 019.8.22 13.58 13.58 0 00-11.57-1.1l-.43.15s-8.34-2.83-12.36 4.52a13.41 13.41 0 00.18 12.91 20 20 0 009.43 8.93 20.68 20.68 0 01-7.66-8.05z" opacity=".1"/><path d="M868.86 426.09s3.09 2.43 10.61 0" opacity=".2"/><path d="M868.2 408.42s5.3 14.36 4.86 18.12l4.2-.44s-7.07-12.59-5.3-17.68z"/><path d="M868.2 408.42s5.3 14.36 4.86 18.12l4.2-.44s-7.07-12.59-5.3-17.68z" opacity=".2"/><path d="M889.84 409.62s-8.35-4.27-12.08-.74-4.31 12.54-4.31 12.54 13.65 1.87 16.39-11.8z"/><path d="M889.84 409.62s-8.35-4.27-12.08-.74-4.31 12.54-4.31 12.54 13.65 1.87 16.39-11.8z" opacity=".1"/><path d="M873.46 421.41s2.19-10.46 16.39-11.8"/></g><path d="M33.66 748.97S166.2 876.16 532.2 842.16s512-12 512-12 66-64-23-93-313-17-383-17-215-35-215-35z" fill="#0f5d40"/><path d="M980.56 781.21s-21.72-110.07 23-185.51c18.77-31.66 27.41-68.35 23.45-104.94a285.89 285.89 0 00-10.46-51.23" fill="none" stroke="#535461" stroke-miterlimit="10" stroke-width="2"/><path d="M1044.46 391.82c-1.21 13.13-28.49 49-28.49 49s-20.28-40.27-19.08-53.41a23.88 23.88 0 1147.56 4.37zm32.64 76.37c-8.15 10.37-50.57 25.68-50.57 25.68s4.86-44.83 13-55.2a23.89 23.89 0 1137.57 29.52zm-13.15 124.17c-12.27 4.84-56.61-3.36-56.61-3.36s26.83-36.24 39.1-41.08a23.883 23.883 0 1117.51 44.44zm-31.1 91.71c-11.28 6.84-56.37 6.26-56.37 6.26s20.32-40.26 31.59-47.1a23.882 23.882 0 0124.77 40.84zm-56.5-192.24c8.58 10 51.6 23.53 51.6 23.53s-6.74-44.59-15.32-54.6a23.883 23.883 0 10-36.28 31.07zm-35 107.72c11.18 7 56.28 7 56.28 7s-19.78-40.53-31-47.52a23.882 23.882 0 00-25.32 40.5zm-19.66 109.37c9.84 8.78 54.28 16.42 54.28 16.42s-12.64-43.28-22.49-52.07a23.882 23.882 0 10-31.8 35.64z" fill="#0f5d40"/><path d="M847.04 159.97l-14.77-6.14 19.76-47.55 14.77 6.14zm15.06-57.14a9.31 9.31 0 1112.14-5.08 9.34 9.34 0 01-12.14 5.08zm40.21 80.08l-14.74-6.12 9.62-23.15c2.29-5.52 5.12-12.64-2.45-15.78s-11.35 2.31-13.92 8.51l-9.78 23.54-14.75-6.13 19.76-47.55 14.16 5.89-2.7 6.49.21.09c3.52-2.92 10-4.86 17.16-1.87 14.94 6.21 13.6 17.19 8.29 30l-10.85 26.12zm-365.63-87.8l-5.87 15v61.28h20.86v11.07h11.74l11.07-11.07h17l22.81-22.81V95.11zm69.76 49.54l-13 13h-20.91l-11.07 11.12V157.7h-17.61v-54.73h62.58zm-13-26.73v22.79h-7.82v-22.74zm-20.86 0v22.79h-7.82v-22.74z" fill="#0f5d40" opacity=".1"/><path d="M493.89 695.71l-.47-40.27v-1.18l-6.35-540.39c0-.66 0-1.31-.06-2a53.87 53.87 0 00-2.15-12.74c-.1-.33-.19-.65-.29-1s-.2-.61-.31-.92-.26-.77-.4-1.15-.21-.55-.31-.83-.31-.8-.47-1.2l-.33-.78c-.17-.41-.35-.81-.53-1.21l-.35-.74q-.29-.6-.59-1.2l-.37-.72q-.31-.59-.64-1.18l-.39-.7c-.23-.39-.46-.78-.69-1.16l-.41-.67c-.25-.39-.5-.78-.76-1.16l-.42-.51c-.28-.41-.57-.81-.86-1.21l-.37-.51q-.63-.85-1.3-1.67a55.29 55.29 0 00-46.39-20.51l-274 16.12a55.49 55.49 0 00-18.42 4.29C96.48 92.68 58 119.1 58.92 166.86L69.23 725c.85 46.12 39.53 83 84.46 90.81a55.35 55.35 0 0028.09.75l269.61-62.4a54.65 54.65 0 0042.55-53.71z" transform="translate(-58.9 -26.03)" fill="url(#a)"/><path d="M4.67 147.9l10.09 552.23c.94 51.45 48.94 91.34 99.71 91.34L91.76 59.3l-2 .51C47.75 70.42 3.74 96.83 4.67 147.9z" fill="#535461"/><path d="M4.67 147.9l10.09 552.23c.94 51.45 48.94 91.34 99.71 91.34L91.76 59.3l-2 .51C47.75 70.42 3.74 96.83 4.67 147.9z" opacity=".1"/><path d="M430.39 675.84a54 54 0 01-41.64 53.13L124.9 790.72a53.93 53.93 0 01-66.22-51.56l-.8-45.88v-.46l-2.5-141.19-7.59-430.05-.16-8.59a53.94 53.94 0 0150.73-54.78l268.17-15.95a53.89 53.89 0 0157 50c.09 1.05.13 2.13.14 3.21l6.21 534.69v2.76l.45 38.25z" fill="#0f5d40"/><path d="M430.39 675.84a54 54 0 01-41.64 53.13L124.9 790.72a53.93 53.93 0 01-66.22-51.56l-.8-45.88v-.46l-2.5-141.19-7.59-430.05-.16-8.59a53.94 53.94 0 0150.73-54.78l268.17-15.95a53.89 53.89 0 0157 50c.09 1.05.13 2.13.14 3.21l6.21 534.69v2.76l.45 38.25z" opacity=".1"/><path d="M430.34 671.17L190.1 696.74l-18.4-613.1L411.92 62.5a53.65 53.65 0 0111.74 33z" fill="#0f5d40"/><path fill="#0f5d40" d="M429.89 632.92l-372.02 59.9-2.5-141.18 129.87-17.37 244.65 98.65z"/><path fill="#fff" opacity=".1" d="M429.89 632.92l-372.02 59.9-2.5-141.18 129.87-17.37 244.65 98.65z"/><path d="M430.39 675.84a54 54 0 01-41.64 53.13L124.9 790.72a53.93 53.93 0 01-66.22-51.56l-.8-45.88 372-63.13v2.76l.45 38.25zm-6.88-583.58L47.78 121.58l-.16-8.59a53.94 53.94 0 0150.73-54.78l268.18-15.95a53.89 53.89 0 0157 50z" fill="#535461"/><circle cx="262.48" cy="711.22" r="26.31" fill="#fff"/><path fill="#fff" d="M271.69 78.69l-44.73 2.32v-2.63l44.73-2.32v2.63z"/><rect x="17.66" y="180.71" width="16" height="51.88" rx="8" ry="8" fill="#fff"/><circle cx="215.12" cy="81.01" r="2.63" fill="#fff"/><path d="M134.24 288.67a11.36 11.36 0 006.7 6.25c1.33.43 2.73.58 4.08.91 6.45 1.61 11 7.19 16.9 10.27a3.25 3.25 0 001.56.48h.2a1.92 1.92 0 00.37 0 3.13 3.13 0 001.65-.69l.26-.2a19.78 19.78 0 01.29 8c-2.34 0-17.49.93-15.42 18.83 2.25 19.38 24.72 46.52 24.72 46.52s15.73 16.06 10.67 70.89l-.56 26.58s6-.91 13.75-1.82q.27.53.55 1a41.39 41.39 0 008.3 10.26l12.79 30.39s1.1 2 2.72 5.1c.15 6.44-3.85 12.07-3.85 12.07-24.72 7.2-34.83 33.23-34.83 33.23s-14 8.36-17 17.67c-5.89 4.77-5.49 17.78-5.49 17.78s20.79 11.08 36 17.17a25 25 0 005.47 1.5l-3.38 7c-3.52 1.27-3.78 18.67-3.78 18.67s37.08 26.58 48.31 28.25 20.79-6.09 9-11.63c-9.5-4.46-20.1-21.5-23.86-28 4.7-6.45 19.54-27.35 20.49-35.73C252 589.5 266 581.19 266 581.19c20.22-21.6 6.74-47.08 5.06-60.37 0-.25-.07-.53-.12-.83a145.4 145.4 0 00-4.75-17c2.21-13.94 4-35.71 5-50.08 4.46 1.44 8.83 3.13 8.83 3.13 8.2-16.65-19.66-85.2-27.68-104.2 4.68-1.55 12.74-4 24.31-6.56 19.66-4.43 20.79-14.4 20.79-14.4l15.17-41c-1.29.58-3.27.55-5.59.15v-1.11c.12-3.89.49-10.1 1.63-11.23 0 0-3.73 0-8.26-.4v-.55l2-25.07s-2.81-27.69-12.36-23.82c-7.67 3.11-6.64 28-5.94 37.69a16.81 16.81 0 002.13 7l.64 1.14.44.78a9.44 9.44 0 01-1.21-.69v8.58c-1.06-.51-1.69-.82-1.69-.82.56 9.42-11.24 41-11.24 41s-20.79-2.22-27.53 2.22c-4.94 3.25-11.4-3-14.49-6.61l14.49-31.6a41.43 41.43 0 01-5.17-1.26c.06-.38.14-.79.21-1.21.74-4 2.06-9.56 3.84-10.26a63 63 0 00-8-3.66c.06-.32.13-.66.21-1 1.05-5.54 2.7-17.51-.65-25.77-4.49-11.08-6.18-32.68-14.61-27.69-6.69 4-7 27.79-6.85 37.46a16.61 16.61 0 001.92 7.51l3.25 6.15.45.85-.45.08v7.57c-1.42-.9-2.25-1.47-2.25-1.47-.28 10.65-7.33 24.84-14.22 36.26l-3.5-2.52-.86-.62a2.14 2.14 0 010-.33s-1.44-.41-3.72-.87c-2.83-5.37-4.41-11.85-5.29-17.23-.09-.56-.17-1.11-.25-1.64a22.35 22.35 0 002-9.17 22.81 22.81 0 00-19.26-22.4c.69-.77 1-1 1.2-1h.15a4.17 4.17 0 002.54-.68c1.78-.87 3.79-2.16 3.78-4.11 0-1.43-1.14-2.61-2.34-3.42-2.9-1.94-3-5.29-5.68-5a3.58 3.58 0 00-1.53.2c-2.47.81-4.62 2.36-7 3.34a16.64 16.64 0 01-5.28 1.2 21.85 21.85 0 00-3.46.27 10.16 10.16 0 00-2.61 1.06c-5.08 2.77-10.93 7-12.56 12.47-1.53 5.14.59 11.81-3.35 15.51a14.5 14.5 0 00-2 1.89 6.56 6.56 0 00-1 2.52 15.11 15.11 0 00.95 9.1zM237 555c.21 2.65-.29 4.53-1.84 5.14-8.43 3.32-18 33.78-18 33.78l-6.39 13.19a170 170 0 01-14.53-12.29l.69-4.77s18-13.29 19.1-17.17c.89-3.13 15.42-13.88 20.97-17.88z" transform="translate(-58.9 -26.03)" fill="url(#b)"/><path d="M190.6 322.34s38.2 88.42 28.93 107.52c0 0-15.28-6-17.47-4.91s-24-114.07-24-114.07z" fill="#c4c8e2"/><path d="M190.6 322.34s38.2 88.42 28.93 107.52c0 0-15.28-6-17.47-4.91s-24-114.07-24-114.07z" opacity=".05"/><path d="M169.86 603.97s13.1 24.56 24.56 30 2.18 13.1-8.73 11.46-46.94-27.84-46.94-27.84.25-17.15 3.67-18.4 27.44 4.78 27.44 4.78zm-34.39-39.85s18.56 18.56 26.74 20.19-7.1 12.55-21.83 6.55-34.93-16.89-34.93-16.89-.55-17.47 8.73-19.1 21.29 9.25 21.29 9.25z" fill="#4c495a"/><path d="M211.88 412.39s-3.78 66.58-8.78 75.87-23.47 37.66-23.47 37.66-21.29 15.28-22.38 19.1-18.5 16.95-18.5 16.95l-1.09 7.64s-28.93-1.64-27.29-11.46 16.92-19.18 16.92-19.18 9.81-25.61 33.81-32.7c0 0 7.64-10.92 1.09-19.65 0 0-16.37-40.93-25.65-45.85s3.82-33.29 3.82-33.29z" fill="#5f5d7e"/><path d="M211.88 412.39s-3.78 66.58-8.78 75.87-23.47 37.66-23.47 37.66-21.29 15.28-22.38 19.1-18.5 16.95-18.5 16.95l-1.09 7.64s-28.93-1.64-27.29-11.46 16.92-19.18 16.92-19.18 9.81-25.61 33.81-32.7c0 0 7.64-10.92 1.09-19.65 0 0-16.37-40.93-25.65-45.85s3.82-33.29 3.82-33.29z" opacity=".05"/><path d="M158.4 565.76l-17.47 36.57c2.73 9.28 28.93 6 28.93 6s20.24-27.29 21.24-37.11 14.74-18 14.74-18c19.65-21.29 6.55-46.39 4.91-59.49 0-.25-.07-.52-.12-.81-1.45-8.78-10.28-34.06-17.15-53-4.63-12.75-8.38-22.62-8.38-22.62s-36.57 1.64-44.21 14.74c-3.5 6-1.93 12.24.79 17.25a40.65 40.65 0 008.07 10.11l12.43 30s21.83 39.84 13.64 43.12-17.42 33.24-17.42 33.24z" fill="#5f5d7e"/><path d="M223.57 242.14a16.74 16.74 0 002.07 6.95l.62 1.12 3.08 5.55h9.82l.21-2.58 2-24.71s-2.73-27.29-12-23.47c-7.47 3.06-6.48 27.58-5.8 37.14z" fill="#fdc2cc"/><path d="M226.27 250.21l3.08 5.55h9.82l.21-2.58c-4.57-.41-10.02-1.21-13.11-2.97z" opacity=".1"/><path d="M225.53 250.3v12.55l20.19 5.46s0-1.3.05-3.13c.11-3.83.47-10 1.58-11.06.01 0-16.37 0-21.82-3.82z" fill="#eaeaf3"/><path d="M225.53 257.66v5.19l20.19 5.46s0-1.3.05-3.13c-6.67-1.21-16.42-5.67-20.24-7.52z" opacity=".1"/><path d="M107.74 278.37c4 11.51-1.2 16.68-1.2 16.68s49.12 3.27 37.11-5.46c-7-5.1-10.12-16.35-11.48-24.82a84.65 84.65 0 01-1.07-10.65s-39.25-.58-31.11 10.37a52.55 52.55 0 017.75 13.88z" fill="#fdc2cc"/><path d="M100 264.49c4 5.38 5.31 6.17 6.65 10.06a21.94 21.94 0 003.72.31c9.36 0 18.47-1.93 21.81-10.09a84.65 84.65 0 01-1.08-10.65s-39.25-.58-31.1 10.37z" opacity=".1"/><circle cx="111.45" cy="254.12" r="22.38" fill="#fdc2cc"/><path d="M223.89 257.97s21.29 10.92 27.29 8.19l-14.74 40.39s-1.09 9.82-20.19 14.19-28.38 8.19-28.38 8.19l-35.48-42 18 4.91s9.28 13.1 15.83 8.73 26.74-2.18 26.74-2.18 11.48-31.17 10.93-40.42z" fill="#c4c8e2"/><path d="M223.89 257.97s21.29 10.92 27.29 8.19l-14.74 40.39s-1.09 9.82-20.19 14.19-28.38 8.19-28.38 8.19l-35.48-42 18 4.91s9.28 13.1 15.83 8.73 26.74-2.18 26.74-2.18 11.48-31.17 10.93-40.42z" opacity=".05"/><path d="M140.93 283.7s-28.85-8.25-31.89 7.08c0 0 13.33-6.5 32.44 5 1.43.86 2.83 1.78 4.2 2.74 16.81 11.78 28.55 30 33.27 50.71l12.15 53.41 1.13 14.33s17.47 3.45 20.74-1.72 1.09-22.41-3.82-28.15-12.55-30.43-12.55-30.43l-4.78-14.33a95.85 95.85 0 00-18.72-32.78l-1.15-1.39a71.66 71.66 0 00-26.61-19.9c-2.77-1.23-4.79-2.76-4.41-4.57z" opacity=".1"/><path d="M140.93 282.61s-28.85-8.25-31.89 7.08c0 0 13.33-6.5 32.44 5 1.43.86 2.83 1.78 4.2 2.74 16.81 11.78 28.55 30 33.27 50.71l12.15 53.4 1.09 14.36s17.47 3.45 20.74-1.72 1.09-22.41-3.82-28.15-12.55-30.45-12.55-30.45l-4.78-14.33a95.85 95.85 0 00-18.68-32.79l-1.15-1.39a71.66 71.66 0 00-26.61-19.9c-2.77-1.2-4.79-2.75-4.41-4.56z" fill="#eaeaf3"/><path d="M213.49 392.63l-.24 9.4-7.64-4.91s-13.61-49.53-23.2-63c-1.13-1.59-1.68-4-2.73-4.37l-39-37.66v-8.73s19.92 14.74 21.56 17.47c.7 1.16 11.16 6.88 17.47 15.83a197.85 197.85 0 0115 25.92l13.08 29.39z" opacity=".1"/><path d="M140.66 282.77v8.46l39.57 37.93c1.05.4 1.6 2.78 2.73 4.37 9.59 13.51 23.2 63 23.2 63l7.64 4.91.24-9.4-5.7-20.62-13.1-29.45a197.8 197.8 0 00-15-25.92c-6.3-9-16.77-14.67-17.47-15.83-1.41-2.35-16.8-13.62-21-16.69z" fill="#d39999"/><rect x="163.19" y="153.16" width="78" height="78" rx="11.17" ry="11.17" fill="#0f5d40"/><rect x="163.19" y="153.16" width="78" height="78" rx="11.17" ry="11.17" fill="#fff" opacity=".1"/><path d="M202.2 175.81a16.36 16.36 0 1016.36 16.36 16.33 16.33 0 00-16.36-16.36zm0 27a10.63 10.63 0 1110.63-10.63 10.65 10.65 0 01-10.63 10.63zm20.84-27.66a3.82 3.82 0 11-3.82-3.82 3.81 3.81 0 013.83 3.81zm10.84 3.82c-.24-5.11-1.41-9.64-5.15-13.37s-8.26-4.9-13.37-5.15c-5.27-.3-21.06-.3-26.32 0-5.1.24-9.62 1.41-13.37 5.14s-4.9 8.26-5.15 13.37c-.3 5.27-.3 21.06 0 26.32.24 5.11 1.41 9.64 5.15 13.37s8.26 4.9 13.37 5.15c5.27.3 21.06.3 26.32 0 5.11-.24 9.64-1.41 13.37-5.15s4.9-8.26 5.15-13.37c.3-5.27.3-21 0-26.31zm-6.78 32a10.77 10.77 0 01-6.06 6.06c-4.2 1.67-14.17 1.28-18.81 1.28s-14.62.37-18.81-1.28a10.77 10.77 0 01-6.06-6.06c-1.67-4.2-1.28-14.17-1.28-18.81s-.37-14.62 1.28-18.81a10.77 10.77 0 016.06-6.06c4.2-1.67 14.17-1.28 18.81-1.28s14.62-.37 18.81 1.28a10.77 10.77 0 016.06 6.06c1.67 4.2 1.28 14.17 1.28 18.81s.36 14.62-1.28 18.81z" opacity=".2"/><path d="M118.91 230.36c1.73-.85 3.68-2.13 3.67-4.05a4.45 4.45 0 00-2.28-3.34c-3.12-2.12-2.88-6-6.46-4.77-2.4.8-4.49 2.32-6.83 3.29a16 16 0 01-5.13 1.19 20.93 20.93 0 00-3.37.27 9.79 9.79 0 00-2.54 1 21.92 21.92 0 00-10.31 12.86c-1.48 5.07-1.33 11.07-5.15 14.71a14.19 14.19 0 00-1.9 1.86 6.51 6.51 0 00-1 2.49 15.09 15.09 0 00.75 9.06 11.1 11.1 0 006.51 6.16c1.29.42 2.65.57 4 .9 6.27 1.58 10.71 7.08 16.42 10.12a3.13 3.13 0 001.52.48 3 3 0 001.6-.68c2.21-1.58 4-4 4-6.74a13.63 13.63 0 00-1.46-4.86 47.09 47.09 0 01-2.73-8.79 4.29 4.29 0 01-.06-2.13c.41-1.32 1.88-1.94 2.9-2.88 1.94-1.8 2.17-4.84 1.45-7.38s-2.21-4.78-3.33-7.17a5.65 5.65 0 01-.66-2.33c0-3.19 4.31-4.92 6.13-7 2.45-2.88.89-.6 4.26-2.27z" opacity=".1"/><path d="M118.36 230.36c1.73-.85 3.68-2.13 3.67-4.05a4.45 4.45 0 00-2.28-3.37c-3.12-2.12-2.88-6-6.46-4.77-2.4.8-4.49 2.32-6.83 3.29a16 16 0 01-5.13 1.19c-1.13.07-4.77-1.65-5.87-1.4a9.79 9.79 0 00-2.54 1 21.92 21.92 0 00-10.31 12.86c-1.48 5.07-.45 11.4-4.27 15-.64.61.23 2.47-.29 3.19a6.51 6.51 0 00-1 2.49 15.09 15.09 0 00.75 9.06 11.1 11.1 0 006.51 6.16c1.29.42 2.65.57 4 .9 6.27 1.58 10.71 7.08 16.42 10.12a3.13 3.13 0 001.52.48 3 3 0 001.6-.68c2.21-1.58 4-4 4-6.74a13.63 13.63 0 00-1.46-4.86 47.09 47.09 0 01-2.73-8.79 4.29 4.29 0 01-.06-2.13c.41-1.32 1.88-1.94 2.9-2.88 1.94-1.8 2.17-4.84 1.45-7.38s-2.21-4.78-3.33-7.17a5.65 5.65 0 01-.66-2.33c0-3.19 4.31-4.92 6.13-7 2.46-2.8.9-.52 4.27-2.19z" fill="#865a61"/><path d="M141.72 449.29c10-1.18 22.6-2.34 28.14-1.42 8.91 1.48 21.41-6.46 23.66-7.95-4.63-12.75-8.38-22.62-8.38-22.62s-36.57 1.64-44.21 14.74c-3.5 6-1.93 12.24.79 17.25z" opacity=".1"/><path d="M93.99 308.15c2.18 19.1 24 45.85 24 45.85s15.28 15.83 10.37 69.86l-.55 26.2s32.2-4.91 42-3.27 24-8.19 24-8.19 5.46-94.42-18-114.07a138.64 138.64 0 00-9.43-12.83c-6.3-7.63-14.87-16.22-22.88-18.34a14.32 14.32 0 00-3.16-.49s-24.56-13.64-31.11-3.27c.04-.01-17.42-.55-15.24 18.55z" fill="#c4c8e2"/><path d="M193.6 409.97s-8.73-3.82-23.47-2.73-41-12-41-12" opacity=".1"/><path d="M177.77 531.65s-.55 1.64 6.55 3.82 9.28 4.37 9.28 4.37" opacity=".05"/><path d="M156.1 229.91a16.56 16.56 0 001.87 7.4l3.13 6.06 2.18 4.2 13.64 1.09s.28-1.12.63-3c1-5.46 2.63-17.25-.63-25.4-4.37-10.92-6-32.2-14.19-27.29-6.46 3.92-6.77 27.41-6.63 36.94z" fill="#fdc2cc"/><path d="M161.1 243.2v.17l2.18 4.2 13.64 1.09s.28-1.12.63-3c-4.85-1.88-11.25-3.61-16.45-2.46z" opacity=".1"/><path d="M161.1 244.29v9.82l19.65 10.37s.22-1.78.64-4.08c.71-3.95 2-9.43 3.73-10.11-.02.01-14.17-8.18-24.02-6z" fill="#eaeaf3"/><path d="M107.99 333.5a23.12 23.12 0 0017.65 5.65c34.55-3.51 35.49-15.72 35.49-15.72l5.31-11.74c-6.3-7.63-14.87-16.22-22.88-18.34-5.73 9.23-10.8 15.89-10.8 15.89s-25.65-19.65-33.29-1.09c-4.47 10.82 2.18 19.76 8.52 25.35z" opacity=".05"/><path d="M161.1 250.31v3.81l19.65 10.37s.22-1.78.64-4.08c-8.44-2.72-16.82-7.86-20.29-10.1z" opacity=".1"/><path d="M158.94 250.3s14.74 10.37 27.29 12.55l-25.65 56.76s-.94 12.21-35.49 15.72a23.13 23.13 0 01-17.65-5.65c-6.33-5.6-13-14.55-8.53-25.35 7.64-18.56 33.29 1.09 33.29 1.09s26.2-34.38 26.74-55.12z" fill="#c4c8e2"/><path d="M369.3 162.97v2c0 20.59-15.67 44.32-44.32 44.32a44 44 0 01-23.92-7 32.22 32.22 0 003.76.19 31.2 31.2 0 0019.34-6.65 15.6 15.6 0 01-14.56-10.8 19.64 19.64 0 002.94.24 16.47 16.47 0 004.1-.53 15.58 15.58 0 01-12.49-15.29v-.19a15.69 15.69 0 007 2 15.6 15.6 0 01-4.82-20.83 44.28 44.28 0 0032.12 16.3 17.58 17.58 0 01-.39-3.57 15.59 15.59 0 0127-10.66 30.67 30.67 0 009.89-3.76 15.53 15.53 0 01-6.85 8.58 31.23 31.23 0 009-2.41 33.48 33.48 0 01-7.8 8.06zm-58.56 162.15v58.71a3.64 3.64 0 01-3.64 3.64h-16.83v-25.55h8.57l1.26-9.95h-9.87v-6.36c0-2.89.8-4.85 4.94-4.85h5.27v-8.91a70.91 70.91 0 00-7.69-.4c-7.6 0-12.82 4.64-12.82 13.17v7.35h-8.6v10h8.6v25.56h-31.55a3.65 3.65 0 01-3.64-3.64v-58.77a3.65 3.65 0 013.64-3.64h58.72a3.65 3.65 0 013.64 3.64z" opacity=".2"/><path d="M621.82 246.87a13.31 13.31 0 00-9.89-8.88c-8.38-1.76-41.45.11-41.45.11s-33.08 1.87-41.2 4.56a13.31 13.31 0 00-8.82 9.94c-1.74 8.43-.76 25.75-.76 25.75s1 17.32 3.66 25.5a13.11 13.11 0 009.88 8.73c8.38 1.76 41.45-.11 41.45-.11s33.08-1.87 41.2-4.56a13.11 13.11 0 008.83-9.79c1.74-8.43.76-25.75.76-25.75s-.98-17.32-3.66-25.5zm-59.16 44.84l-1.78-31.46 28.54 14.16-26.76 17.29z" fill="#0f5d40" opacity=".1"/></svg>
\ No newline at end of file
+<svg id="f9ea829a-01ef-4860-a3a7-641ca853f294" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1082.19" height="847.94" viewBox="0 0 1082.19 847.94"><defs><linearGradient id="0bbd7947-ca61-424a-a753-fb567ef3345a" x1="276.42" y1="818" x2="276.42" y2="60" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="gray" stop-opacity="0.25"/><stop offset="0.54" stop-color="gray" stop-opacity="0.12"/><stop offset="1" stop-color="gray" stop-opacity="0.1"/></linearGradient><linearGradient id="7762d21b-e061-4c19-a9a4-793dedfcbc4f" x1="891.13" y1="675.02" x2="891.13" y2="214.93" gradientTransform="matrix(-1, 0, 0, 1, 1114, 0)" xlink:href="#0bbd7947-ca61-424a-a753-fb567ef3345a"/></defs><title>online</title><path d="M968.1,62.19c37.27,12.37,51.62,19.46,88.51,32.93,15.11,5.52,30.64,11.41,42.27,22.52,12.21,11.67,18.87,27.95,23.58,44.17,10.1,34.82,12.19,74.1-5.42,105.79-16.11,29-47.49,49.78-54.54,82.18-5.2,23.89,4.26,48.17,8.9,72.17a184.8,184.8,0,0,1-6.35,93.79c-9.69,28.64-28.59,56.43-57.16,66.3-33.23,11.47-69.43-3.86-104.57-2.76-39.43,1.24-75.24,23.14-105.67,48.24S739.76,681.76,706,702.07c-34.43,20.69-73.83,31.26-112.65,41.6-21.59,5.75-43.41,11.53-65.74,12.27-24.69.82-49.33-4.61-72.37-13.54-42.71-16.54-80.4-45.17-109.34-80.67-16.84-20.65-31.41-47.31-24.05-72.91,5.35-18.6,21-32,33-47.17,31.94-40.17,38.93-98.64,17.36-145.21-10.93-23.6-28.17-43.58-43.46-64.62s-29.13-44.43-31.5-70.33,9.64-54.65,33.65-64.64c29.45-12.24,71.25,3.84,90.26-21.78,7.2-9.71,8.12-22.5,10.32-34.38C443.19,77.71,503,27.15,567,26.05c49.92-.86,97,24.71,146.85,27.07C763.94,55.49,814.81,34.39,863.31,47,881.1,51.69,897.48,60.69,915.1,66s38,6.31,53.18-4.07" transform="translate(-58.9 -26.03)" fill="#0f5d40" opacity="0.1"/><rect x="492.93" y="182.79" width="437.49" height="30.27" fill="#0f5d40" opacity="0.1"/><rect x="492.93" y="313.49" width="437.49" height="30.27" fill="#0f5d40" opacity="0.1"/><rect x="492.93" y="449.69" width="437.49" height="30.27" fill="#0f5d40" opacity="0.1"/><rect x="655.27" y="104.38" width="27.51" height="78.42" fill="#0f5d40" opacity="0.1"/><rect x="655.27" y="116.76" width="27.51" height="5.5" fill="#0f5d40" opacity="0.1"/><rect x="655.27" y="159.41" width="27.51" height="5.5" fill="#0f5d40" opacity="0.1"/><rect x="696.55" y="104.38" width="27.51" height="78.42" fill="#0f5d40" opacity="0.1"/><rect x="696.55" y="116.76" width="27.51" height="5.5" fill="#0f5d40" opacity="0.1"/><rect x="696.55" y="159.41" width="27.51" height="5.5" fill="#0f5d40" opacity="0.1"/><rect x="737.82" y="104.38" width="27.51" height="78.42" fill="#0f5d40" opacity="0.1"/><rect x="737.82" y="116.76" width="27.51" height="5.5" fill="#0f5d40" opacity="0.1"/><rect x="737.82" y="159.41" width="27.51" height="5.5" fill="#0f5d40" opacity="0.1"/><rect x="779.09" y="104.38" width="27.51" height="78.42" fill="#0f5d40" opacity="0.1"/><rect x="779.09" y="116.76" width="27.51" height="5.5" fill="#0f5d40" opacity="0.1"/><rect x="779.09" y="159.41" width="27.51" height="5.5" fill="#0f5d40" opacity="0.1"/><rect x="840.74" y="397.3" width="27.51" height="78.42" transform="translate(-163.91 403.24) rotate(-26.63)" fill="#0f5d40" opacity="0.1"/><rect x="829.95" y="412.24" width="27.51" height="5.5" transform="translate(-155.41 396.12) rotate(-26.63)" fill="#0f5d40" opacity="0.1"/><rect x="849.07" y="450.36" width="27.51" height="5.5" transform="translate(-170.47 408.73) rotate(-26.63)" fill="#0f5d40" opacity="0.1"/><rect x="785.97" y="236.45" width="27.51" height="78.42" fill="#0f5d40" opacity="0.1"/><rect x="785.97" y="248.83" width="27.51" height="5.5" fill="#0f5d40" opacity="0.1"/><rect x="785.97" y="291.48" width="27.51" height="5.5" fill="#0f5d40" opacity="0.1"/><rect x="827.24" y="236.45" width="27.51" height="78.42" fill="#0f5d40" opacity="0.1"/><rect x="827.24" y="248.83" width="27.51" height="5.5" fill="#0f5d40" opacity="0.1"/><rect x="827.24" y="291.48" width="27.51" height="5.5" fill="#0f5d40" opacity="0.1"/><rect x="868.51" y="236.45" width="27.51" height="78.42" fill="#0f5d40" opacity="0.1"/><rect x="868.51" y="248.83" width="27.51" height="5.5" fill="#0f5d40" opacity="0.1"/><rect x="868.51" y="291.48" width="27.51" height="5.5" fill="#0f5d40" opacity="0.1"/><rect x="531.46" y="371.27" width="27.51" height="78.42" fill="#0f5d40" opacity="0.1"/><rect x="531.46" y="383.65" width="27.51" height="5.5" fill="#0f5d40" opacity="0.1"/><rect x="531.46" y="426.3" width="27.51" height="5.5" fill="#0f5d40" opacity="0.1"/><rect x="572.73" y="371.27" width="27.51" height="78.42" fill="#0f5d40" opacity="0.1"/><rect x="572.73" y="383.65" width="27.51" height="5.5" fill="#0f5d40" opacity="0.1"/><rect x="572.73" y="426.3" width="27.51" height="5.5" fill="#0f5d40" opacity="0.1"/><rect x="614" y="371.27" width="27.51" height="78.42" fill="#0f5d40" opacity="0.1"/><rect x="614" y="383.65" width="27.51" height="5.5" fill="#0f5d40" opacity="0.1"/><rect x="614" y="426.3" width="27.51" height="5.5" fill="#0f5d40" opacity="0.1"/><rect x="655.27" y="371.27" width="27.51" height="78.42" fill="#0f5d40" opacity="0.1"/><rect x="655.27" y="383.65" width="27.51" height="5.5" fill="#0f5d40" opacity="0.1"/><rect x="655.27" y="426.3" width="27.51" height="5.5" fill="#0f5d40" opacity="0.1"/><rect x="696.55" y="371.27" width="27.51" height="78.42" fill="#0f5d40" opacity="0.1"/><rect x="696.55" y="383.65" width="27.51" height="5.5" fill="#0f5d40" opacity="0.1"/><rect x="696.55" y="426.3" width="27.51" height="5.5" fill="#0f5d40" opacity="0.1"/><rect x="737.82" y="371.27" width="27.51" height="78.42" fill="#0f5d40" opacity="0.1"/><rect x="737.82" y="383.65" width="27.51" height="5.5" fill="#0f5d40" opacity="0.1"/><rect x="737.82" y="426.3" width="27.51" height="5.5" fill="#0f5d40" opacity="0.1"/><g opacity="0.1"><path d="M756,312.39s-8.34-2.83-12.36,4.52a13.41,13.41,0,0,0,.18,12.91c2.64,4.77,8.07,11,18.37,10.41,8.73-.47,11.64-7.13,12.43-13.33a13.7,13.7,0,0,0-18.19-14.66Z" transform="translate(-58.9 -26.03)" fill="#0f5d40"/><path d="M745.56,330.48a13.41,13.41,0,0,1-.18-12.91c4-7.35,12.36-4.52,12.36-4.52l.43-.15a13.57,13.57,0,0,1,9.8.22,13.58,13.58,0,0,0-11.57-1.1l-.43.15s-8.34-2.83-12.36,4.52a13.41,13.41,0,0,0,.18,12.91,20,20,0,0,0,9.43,8.93A20.68,20.68,0,0,1,745.56,330.48Z" transform="translate(-58.9 -26.03)" fill="#0f5d40" opacity="0.1"/><path d="M751.67,315.92s3.09,2.43,10.61,0" transform="translate(-58.9 -26.03)" fill="#0f5d40" opacity="0.2"/><path d="M751,298.25s5.3,14.36,4.86,18.12l4.2-.44s-7.07-12.59-5.3-17.68Z" transform="translate(-58.9 -26.03)" fill="#0f5d40"/><path d="M751,298.25s5.3,14.36,4.86,18.12l4.2-.44s-7.07-12.59-5.3-17.68Z" transform="translate(-58.9 -26.03)" fill="#0f5d40" opacity="0.2"/><path d="M772.65,299.45s-8.35-4.27-12.08-.74-4.31,12.54-4.31,12.54S769.87,313.12,772.65,299.45Z" transform="translate(-58.9 -26.03)" fill="#0f5d40"/><path d="M772.65,299.45s-8.35-4.27-12.08-.74-4.31,12.54-4.31,12.54S769.87,313.12,772.65,299.45Z" transform="translate(-58.9 -26.03)" fill="#0f5d40" opacity="0.1"/><path d="M756.26,311.25s2.19-10.46,16.39-11.8" transform="translate(-58.9 -26.03)" fill="#0f5d40"/></g><g opacity="0.1"><path d="M932.07,448.59s-8.34-2.83-12.36,4.52a13.41,13.41,0,0,0,.18,12.91c2.64,4.77,8.07,11,18.37,10.41,8.73-.47,11.64-7.13,12.43-13.33a13.7,13.7,0,0,0-18.19-14.66Z" transform="translate(-58.9 -26.03)" fill="#0f5d40"/><path d="M921.66,466.68a13.41,13.41,0,0,1-.18-12.91c4-7.35,12.36-4.52,12.36-4.52l.43-.15a13.57,13.57,0,0,1,9.8.22,13.58,13.58,0,0,0-11.57-1.1l-.43.15s-8.34-2.83-12.36,4.52a13.41,13.41,0,0,0,.18,12.91,20,20,0,0,0,9.43,8.93A20.68,20.68,0,0,1,921.66,466.68Z" transform="translate(-58.9 -26.03)" fill="#0f5d40" opacity="0.1"/><path d="M927.76,452.12s3.09,2.43,10.61,0" transform="translate(-58.9 -26.03)" fill="#0f5d40" opacity="0.2"/><path d="M927.1,434.45s5.3,14.36,4.86,18.12l4.2-.44s-7.07-12.59-5.3-17.68Z" transform="translate(-58.9 -26.03)" fill="#0f5d40"/><path d="M927.1,434.45s5.3,14.36,4.86,18.12l4.2-.44s-7.07-12.59-5.3-17.68Z" transform="translate(-58.9 -26.03)" fill="#0f5d40" opacity="0.2"/><path d="M948.74,435.65s-8.35-4.27-12.08-.74-4.31,12.54-4.31,12.54S946,449.32,948.74,435.65Z" transform="translate(-58.9 -26.03)" fill="#0f5d40"/><path d="M948.74,435.65s-8.35-4.27-12.08-.74-4.31,12.54-4.31,12.54S946,449.32,948.74,435.65Z" transform="translate(-58.9 -26.03)" fill="#0f5d40" opacity="0.1"/><path d="M932.36,447.44s2.19-10.46,16.39-11.8" transform="translate(-58.9 -26.03)" fill="#0f5d40"/></g><path d="M92.56,775S225.1,902.19,591.1,868.19s512-12,512-12,66-64-23-93-313-17-383-17-215-35-215-35Z" transform="translate(-58.9 -26.03)" fill="#0f5d40"/><path d="M1039.46,807.24s-21.72-110.07,23-185.51c18.77-31.66,27.41-68.35,23.45-104.94a285.89,285.89,0,0,0-10.46-51.23" transform="translate(-58.9 -26.03)" fill="none" stroke="#535461" stroke-miterlimit="10" stroke-width="2"/><path d="M1103.36,417.85c-1.21,13.13-28.49,49-28.49,49s-20.28-40.27-19.08-53.41a23.88,23.88,0,1,1,47.56,4.37Z" transform="translate(-58.9 -26.03)" fill="#0f5d40"/><path d="M1136,494.22c-8.15,10.37-50.57,25.68-50.57,25.68s4.86-44.83,13-55.2A23.88,23.88,0,1,1,1136,494.22Z" transform="translate(-58.9 -26.03)" fill="#0f5d40"/><path d="M1122.85,618.39c-12.27,4.84-56.61-3.36-56.61-3.36s26.83-36.24,39.1-41.08a23.88,23.88,0,1,1,17.51,44.44Z" transform="translate(-58.9 -26.03)" fill="#0f5d40"/><path d="M1091.75,710.1c-11.28,6.84-56.37,6.26-56.37,6.26s20.32-40.26,31.59-47.1a23.88,23.88,0,0,1,24.77,40.84Z" transform="translate(-58.9 -26.03)" fill="#0f5d40"/><path d="M1035.25,517.86c8.58,10,51.6,23.53,51.6,23.53s-6.74-44.59-15.32-54.6a23.88,23.88,0,1,0-36.28,31.07Z" transform="translate(-58.9 -26.03)" fill="#0f5d40"/><path d="M1000.25,625.58c11.18,7,56.28,7,56.28,7s-19.78-40.53-31-47.52a23.88,23.88,0,0,0-25.32,40.5Z" transform="translate(-58.9 -26.03)" fill="#0f5d40"/><path d="M980.59,734.95c9.84,8.78,54.28,16.42,54.28,16.42s-12.64-43.28-22.49-52.07a23.88,23.88,0,1,0-31.8,35.64Z" transform="translate(-58.9 -26.03)" fill="#0f5d40"/><path d="M905.94,186l-14.77-6.14,19.76-47.55,14.77,6.14ZM921,128.86a9.31,9.31,0,1,1,12.14-5.08A9.34,9.34,0,0,1,921,128.86Zm40.21,80.08-14.74-6.12,9.62-23.15c2.29-5.52,5.12-12.64-2.45-15.78s-11.35,2.31-13.92,8.51l-9.78,23.54-14.75-6.13,19.76-47.55,14.16,5.89-2.7,6.49.21.09c3.52-2.92,10-4.86,17.16-1.87,14.94,6.21,13.6,17.19,8.29,30l-10.85,26.12Z" transform="translate(-58.9 -26.03)" fill="#0f5d40" opacity="0.1"/><path d="M595.58,121.14l-5.87,15v61.28h20.86v11.07h11.74l11.07-11.07h17l22.81-22.81V121.14Zm69.76,49.54-13,13H631.43L620.36,194.8V183.73H602.75V129h62.58Zm-13-26.73v22.79h-7.82V144Zm-20.86,0v22.79h-7.82V144Z" transform="translate(-58.9 -26.03)" fill="#0f5d40" opacity="0.1"/><path d="M493.89,695.71l-.47-40.27v-1.18l-6.35-540.39c0-.66,0-1.31-.06-2a53.87,53.87,0,0,0-2.15-12.74c-.1-.33-.19-.65-.29-1s-.2-.61-.31-.92-.26-.77-.4-1.15-.21-.55-.31-.83-.31-.8-.47-1.2l-.33-.78c-.17-.41-.35-.81-.53-1.21l-.35-.74q-.29-.6-.59-1.2l-.37-.72q-.31-.59-.64-1.18l-.39-.7c-.23-.39-.46-.78-.69-1.16l-.41-.67c-.25-.39-.5-.78-.76-1.16L477.6,84c-.28-.41-.57-.81-.86-1.21l-.37-.51q-.63-.85-1.3-1.67A55.29,55.29,0,0,0,428.68,60.1l-274,16.12a55.49,55.49,0,0,0-18.42,4.29C96.48,92.68,58,119.1,58.92,166.86L69.23,725c.85,46.12,39.53,83,84.46,90.81a55.35,55.35,0,0,0,28.09.75l269.61-62.4a54.65,54.65,0,0,0,42.55-53.71Z" transform="translate(-58.9 -26.03)" fill="url(#0bbd7947-ca61-424a-a753-fb567ef3345a)"/><path d="M63.57,173.93,73.66,726.16c.94,51.45,48.94,91.34,99.71,91.34h0L150.66,85.33l-2,.51C106.65,96.45,62.64,122.86,63.57,173.93Z" transform="translate(-58.9 -26.03)" fill="#535461"/><path d="M63.57,173.93,73.66,726.16c.94,51.45,48.94,91.34,99.71,91.34h0L150.66,85.33l-2,.51C106.65,96.45,62.64,122.86,63.57,173.93Z" transform="translate(-58.9 -26.03)" opacity="0.1"/><path d="M489.29,701.87A54,54,0,0,1,447.65,755L183.8,816.75a53.93,53.93,0,0,1-66.22-51.56l-.8-45.88v-.46l-2.5-141.19-7.59-430.05-.16-8.59a53.94,53.94,0,0,1,50.73-54.78L425.43,68.29a53.89,53.89,0,0,1,57,50c.09,1.05.13,2.13.14,3.21l6.21,534.69,0,2.76.45,38.25Z" transform="translate(-58.9 -26.03)" fill="#0f5d40"/><path d="M489.29,701.87A54,54,0,0,1,447.65,755L183.8,816.75a53.93,53.93,0,0,1-66.22-51.56l-.8-45.88v-.46l-2.5-141.19-7.59-430.05-.16-8.59a53.94,53.94,0,0,1,50.73-54.78L425.43,68.29a53.89,53.89,0,0,1,57,50c.09,1.05.13,2.13.14,3.21l6.21,534.69,0,2.76.45,38.25Z" transform="translate(-58.9 -26.03)" opacity="0.1"/><path d="M489.24,697.2,249,722.77,230.6,109.67,470.82,88.53a53.65,53.65,0,0,1,11.74,33Z" transform="translate(-58.9 -26.03)" fill="#0f5d40"/><polygon points="429.89 632.92 57.87 692.82 55.37 551.64 185.24 534.27 429.89 632.92" fill="#0f5d40"/><polygon points="429.89 632.92 57.87 692.82 55.37 551.64 185.24 534.27 429.89 632.92" fill="#fff" opacity="0.1"/><path d="M489.29,701.87A54,54,0,0,1,447.65,755L183.8,816.75a53.93,53.93,0,0,1-66.22-51.56l-.8-45.88,372-63.13,0,2.76.45,38.25Z" transform="translate(-58.9 -26.03)" fill="#535461"/><path d="M482.41,118.29,106.68,147.61l-.16-8.59a53.94,53.94,0,0,1,50.73-54.78L425.43,68.29a53.89,53.89,0,0,1,57,50Z" transform="translate(-58.9 -26.03)" fill="#535461"/><circle cx="262.48" cy="711.22" r="26.31" fill="#fff"/><polygon points="271.69 78.69 226.96 81.01 226.96 78.38 271.69 76.06 271.69 78.69" fill="#fff"/><rect x="17.66" y="180.71" width="16" height="51.88" rx="8" ry="8" fill="#fff"/><circle cx="215.12" cy="81.01" r="2.63" fill="#fff"/><path d="M134.24,288.67a11.36,11.36,0,0,0,6.7,6.25c1.33.43,2.73.58,4.08.91,6.45,1.61,11,7.19,16.9,10.27a3.25,3.25,0,0,0,1.56.48l.2,0a1.92,1.92,0,0,0,.37,0,3.13,3.13,0,0,0,1.65-.69l.26-.2a19.78,19.78,0,0,1,.29,8c-2.34,0-17.49.93-15.42,18.83,2.25,19.38,24.72,46.52,24.72,46.52s15.73,16.06,10.67,70.89l-.56,26.58s6-.91,13.75-1.82q.27.53.55,1a41.39,41.39,0,0,0,8.3,10.26l12.79,30.39s1.1,2,2.72,5.1c.15,6.44-3.85,12.07-3.85,12.07-24.72,7.2-34.83,33.23-34.83,33.23s-14,8.36-17,17.67c-5.89,4.77-5.49,17.78-5.49,17.78s20.79,11.08,36,17.17a25,25,0,0,0,5.47,1.5l-3.38,7h0c-3.52,1.27-3.78,18.67-3.78,18.67s37.08,26.58,48.31,28.25,20.79-6.09,9-11.63c-9.5-4.46-20.1-21.5-23.86-28,4.7-6.45,19.54-27.35,20.49-35.73C252,589.5,266,581.19,266,581.19c20.22-21.6,6.74-47.08,5.06-60.37,0-.25-.07-.53-.12-.83a145.4,145.4,0,0,0-4.75-17c2.21-13.94,4-35.71,5-50.08,4.46,1.44,8.83,3.13,8.83,3.13,8.2-16.65-19.66-85.2-27.68-104.2,4.68-1.55,12.74-4,24.31-6.56,19.66-4.43,20.79-14.4,20.79-14.4l15.17-41c-1.29.58-3.27.55-5.59.15,0-.34,0-.71,0-1.11.12-3.89.49-10.1,1.63-11.23,0,0-3.73,0-8.26-.4l0-.55,2-25.07s-2.81-27.69-12.36-23.82c-7.67,3.11-6.64,28-5.94,37.69a16.81,16.81,0,0,0,2.13,7l.64,1.14.44.78a9.44,9.44,0,0,1-1.21-.69v8.58c-1.06-.51-1.69-.82-1.69-.82.56,9.42-11.24,41-11.24,41s-20.79-2.22-27.53,2.22c-4.94,3.25-11.4-3-14.49-6.61l14.49-31.6a41.43,41.43,0,0,1-5.17-1.26c.06-.38.14-.79.21-1.21.74-4,2.06-9.56,3.84-10.26a63,63,0,0,0-8-3.66c.06-.32.13-.66.21-1,1.05-5.54,2.7-17.51-.65-25.77-4.49-11.08-6.18-32.68-14.61-27.69-6.69,4-7,27.79-6.85,37.46a16.61,16.61,0,0,0,1.92,7.51l3.25,6.15.45.85-.45.08v7.57c-1.42-.9-2.25-1.47-2.25-1.47-.28,10.65-7.33,24.84-14.22,36.26l-3.5-2.52-.86-.62a2.14,2.14,0,0,1,0-.33s-1.44-.41-3.72-.87c-2.83-5.37-4.41-11.85-5.29-17.23-.09-.56-.17-1.11-.25-1.64a22.35,22.35,0,0,0,2-9.17,22.81,22.81,0,0,0-19.26-22.4c.69-.77,1-1,1.2-1h.15a4.17,4.17,0,0,0,2.54-.68c1.78-.87,3.79-2.16,3.78-4.11,0-1.43-1.14-2.61-2.34-3.42-2.9-1.94-3-5.29-5.68-5a3.58,3.58,0,0,0-1.53.2c-2.47.81-4.62,2.36-7,3.34a16.64,16.64,0,0,1-5.28,1.2,21.85,21.85,0,0,0-3.46.27,10.16,10.16,0,0,0-2.61,1.06c-5.08,2.77-10.93,7-12.56,12.47-1.53,5.14.59,11.81-3.35,15.51a14.5,14.5,0,0,0-2,1.89,6.56,6.56,0,0,0-1,2.52A15.11,15.11,0,0,0,134.24,288.67ZM237,555c.21,2.65-.29,4.53-1.84,5.14-8.43,3.32-18,33.78-18,33.78l-6.39,13.19a170,170,0,0,1-14.53-12.29l.69-4.77s18-13.29,19.1-17.17C216.92,569.75,231.45,559,237,555Z" transform="translate(-58.9 -26.03)" fill="url(#7762d21b-e061-4c19-a9a4-793dedfcbc4f)"/><path d="M249.5,348.37s38.2,88.42,28.93,107.52c0,0-15.28-6-17.47-4.91s-24-114.07-24-114.07Z" transform="translate(-58.9 -26.03)" fill="#c4c8e2"/><path d="M249.5,348.37s38.2,88.42,28.93,107.52c0,0-15.28-6-17.47-4.91s-24-114.07-24-114.07Z" transform="translate(-58.9 -26.03)" opacity="0.05"/><path d="M228.76,630s13.1,24.56,24.56,30,2.18,13.1-8.73,11.46-46.94-27.84-46.94-27.84.25-17.15,3.67-18.4S228.76,630,228.76,630Z" transform="translate(-58.9 -26.03)" fill="#4c495a"/><path d="M194.37,590.15s18.56,18.56,26.74,20.19-7.1,12.55-21.83,6.55S164.35,600,164.35,600s-.55-17.47,8.73-19.1S194.37,590.15,194.37,590.15Z" transform="translate(-58.9 -26.03)" fill="#4c495a"/><path d="M270.78,438.42S267,505,262,514.29s-23.47,37.66-23.47,37.66-21.29,15.28-22.38,19.1S197.65,588,197.65,588l-1.09,7.64s-28.93-1.64-27.29-11.46S186.19,565,186.19,565,196,539.39,220,532.3c0,0,7.64-10.92,1.09-19.65,0,0-16.37-40.93-25.65-45.85s3.82-33.29,3.82-33.29Z" transform="translate(-58.9 -26.03)" fill="#5f5d7e"/><path d="M270.78,438.42S267,505,262,514.29s-23.47,37.66-23.47,37.66-21.29,15.28-22.38,19.1S197.65,588,197.65,588l-1.09,7.64s-28.93-1.64-27.29-11.46S186.19,565,186.19,565,196,539.39,220,532.3c0,0,7.64-10.92,1.09-19.65,0,0-16.37-40.93-25.65-45.85s3.82-33.29,3.82-33.29Z" transform="translate(-58.9 -26.03)" opacity="0.05"/><path d="M217.3,591.79l-17.47,36.57c2.73,9.28,28.93,6,28.93,6S249,607.07,250,597.25s14.74-18,14.74-18c19.65-21.29,6.55-46.39,4.91-59.49,0-.25-.07-.52-.12-.81-1.45-8.78-10.28-34.06-17.15-53-4.63-12.75-8.38-22.62-8.38-22.62s-36.57,1.64-44.21,14.74c-3.5,6-1.93,12.24.79,17.25a40.65,40.65,0,0,0,8.07,10.11l12.43,30s21.83,39.84,13.64,43.12S217.3,591.79,217.3,591.79Z" transform="translate(-58.9 -26.03)" fill="#5f5d7e"/><path d="M282.47,268.17a16.74,16.74,0,0,0,2.07,6.95l.62,1.12,3.08,5.55h9.82l.21-2.58,2-24.71s-2.73-27.29-12-23.47C280.8,234.09,281.79,258.61,282.47,268.17Z" transform="translate(-58.9 -26.03)" fill="#fdc2cc"/><path d="M285.17,276.24l3.08,5.55h9.82l.21-2.58C293.71,278.8,288.26,278,285.17,276.24Z" transform="translate(-58.9 -26.03)" opacity="0.1"/><path d="M284.43,276.33v12.55l20.19,5.46s0-1.3.05-3.13c.11-3.83.47-10,1.58-11.06C306.26,280.15,289.88,280.15,284.43,276.33Z" transform="translate(-58.9 -26.03)" fill="#eaeaf3"/><path d="M284.43,283.69v5.19l20.19,5.46s0-1.3.05-3.13C298,290,288.25,285.54,284.43,283.69Z" transform="translate(-58.9 -26.03)" opacity="0.1"/><path d="M166.64,304.4c4,11.51-1.2,16.68-1.2,16.68s49.12,3.27,37.11-5.46c-7-5.1-10.12-16.35-11.48-24.82A84.65,84.65,0,0,1,190,280.15s-39.25-.58-31.11,10.37A52.55,52.55,0,0,1,166.64,304.4Z" transform="translate(-58.9 -26.03)" fill="#fdc2cc"/><path d="M158.9,290.52c4,5.38,5.31,6.17,6.65,10.06a21.94,21.94,0,0,0,3.72.31c9.36,0,18.47-1.93,21.81-10.09A84.65,84.65,0,0,1,190,280.15S150.75,279.57,158.9,290.52Z" transform="translate(-58.9 -26.03)" opacity="0.1"/><circle cx="111.45" cy="254.12" r="22.38" fill="#fdc2cc"/><path d="M282.79,284s21.29,10.92,27.29,8.19l-14.74,40.39s-1.09,9.82-20.19,14.19-28.38,8.19-28.38,8.19l-35.48-42,18,4.91s9.28,13.1,15.83,8.73,26.74-2.18,26.74-2.18S283.34,293.25,282.79,284Z" transform="translate(-58.9 -26.03)" fill="#c4c8e2"/><path d="M282.79,284s21.29,10.92,27.29,8.19l-14.74,40.39s-1.09,9.82-20.19,14.19-28.38,8.19-28.38,8.19l-35.48-42,18,4.91s9.28,13.1,15.83,8.73,26.74-2.18,26.74-2.18S283.34,293.25,282.79,284Z" transform="translate(-58.9 -26.03)" opacity="0.05"/><path d="M199.83,309.73s-28.85-8.25-31.89,7.08c0,0,13.33-6.5,32.44,5,1.43.86,2.83,1.78,4.2,2.74,16.81,11.78,28.55,30,33.27,50.71L250,428.67,251.13,443s17.47,3.45,20.74-1.72,1.09-22.41-3.82-28.15S255.5,382.7,255.5,382.7l-4.78-14.33A95.85,95.85,0,0,0,232,335.59h0l-1.15-1.39a71.66,71.66,0,0,0-26.61-19.9C201.47,313.07,199.45,311.54,199.83,309.73Z" transform="translate(-58.9 -26.03)" opacity="0.1"/><path d="M199.83,308.64s-28.85-8.25-31.89,7.08c0,0,13.33-6.5,32.44,5,1.43.86,2.83,1.78,4.2,2.74,16.81,11.78,28.55,30,33.27,50.71L250,427.57l1.09,14.36s17.47,3.45,20.74-1.72,1.09-22.41-3.82-28.15-12.55-30.45-12.55-30.45l-4.78-14.33A95.85,95.85,0,0,0,232,334.49h0l-1.15-1.39a71.66,71.66,0,0,0-26.61-19.9C201.47,312,199.45,310.45,199.83,308.64Z" transform="translate(-58.9 -26.03)" fill="#eaeaf3"/><path d="M272.39,418.66l-.24,9.4-7.64-4.91s-13.61-49.53-23.2-63c-1.13-1.59-1.68-4-2.73-4.37l-39-37.66v-8.73s19.92,14.74,21.56,17.47c.7,1.16,11.16,6.88,17.47,15.83a197.85,197.85,0,0,1,15,25.92L266.69,398Z" transform="translate(-58.9 -26.03)" opacity="0.1"/><path d="M199.56,308.8v8.46l39.57,37.93c1.05.4,1.6,2.78,2.73,4.37,9.59,13.51,23.2,63,23.2,63l7.64,4.91.24-9.4-5.7-20.62L254.14,368a197.8,197.8,0,0,0-15-25.92c-6.3-9-16.77-14.67-17.47-15.83-1.41-2.35-16.8-13.62-21-16.69Z" transform="translate(-58.9 -26.03)" fill="#d39999"/><rect x="163.19" y="153.16" width="78" height="78" rx="11.17" ry="11.17" fill="#0f5d40"/><rect x="163.19" y="153.16" width="78" height="78" rx="11.17" ry="11.17" fill="#fff" opacity="0.1"/><path d="M261.1,201.84a16.36,16.36,0,1,0,16.36,16.36A16.33,16.33,0,0,0,261.1,201.84Zm0,27a10.63,10.63,0,1,1,10.63-10.63,10.65,10.65,0,0,1-10.63,10.63Zm20.84-27.66a3.82,3.82,0,1,1-3.82-3.82A3.81,3.81,0,0,1,281.95,201.17ZM292.78,205c-.24-5.11-1.41-9.64-5.15-13.37s-8.26-4.9-13.37-5.15c-5.27-.3-21.06-.3-26.32,0-5.1.24-9.62,1.41-13.37,5.14s-4.9,8.26-5.15,13.37c-.3,5.27-.3,21.06,0,26.32.24,5.11,1.41,9.64,5.15,13.37s8.26,4.9,13.37,5.15c5.27.3,21.06.3,26.32,0,5.11-.24,9.64-1.41,13.37-5.15s4.9-8.26,5.15-13.37c.3-5.27.3-21,0-26.31ZM286,237a10.77,10.77,0,0,1-6.06,6.06c-4.2,1.67-14.17,1.28-18.81,1.28s-14.62.37-18.81-1.28a10.77,10.77,0,0,1-6.06-6.06c-1.67-4.2-1.28-14.17-1.28-18.81s-.37-14.62,1.28-18.81a10.77,10.77,0,0,1,6.06-6.06c4.2-1.67,14.17-1.28,18.81-1.28s14.62-.37,18.81,1.28a10.77,10.77,0,0,1,6.06,6.06c1.67,4.2,1.28,14.17,1.28,18.81S287.64,232.81,286,237Z" transform="translate(-58.9 -26.03)" opacity="0.2"/><path d="M177.81,256.39c1.73-.85,3.68-2.13,3.67-4.05A4.45,4.45,0,0,0,179.2,249c-3.12-2.12-2.88-6-6.46-4.77-2.4.8-4.49,2.32-6.83,3.29a16,16,0,0,1-5.13,1.19,20.93,20.93,0,0,0-3.37.27,9.79,9.79,0,0,0-2.54,1,21.92,21.92,0,0,0-10.31,12.86c-1.48,5.07-1.33,11.07-5.15,14.71a14.19,14.19,0,0,0-1.9,1.86,6.51,6.51,0,0,0-1,2.49,15.09,15.09,0,0,0,.75,9.06,11.1,11.1,0,0,0,6.51,6.16c1.29.42,2.65.57,4,.9,6.27,1.58,10.71,7.08,16.42,10.12a3.13,3.13,0,0,0,1.52.48,3,3,0,0,0,1.6-.68c2.21-1.58,4-4,4-6.74a13.63,13.63,0,0,0-1.46-4.86,47.09,47.09,0,0,1-2.73-8.79,4.29,4.29,0,0,1-.06-2.13c.41-1.32,1.88-1.94,2.9-2.88,1.94-1.8,2.17-4.84,1.45-7.38s-2.21-4.78-3.33-7.17a5.65,5.65,0,0,1-.66-2.33c0-3.19,4.31-4.92,6.13-7C176,255.78,174.44,258.06,177.81,256.39Z" transform="translate(-58.9 -26.03)" opacity="0.1"/><path d="M177.26,256.39c1.73-.85,3.68-2.13,3.67-4.05a4.45,4.45,0,0,0-2.28-3.37c-3.12-2.12-2.88-6-6.46-4.77-2.4.8-4.49,2.32-6.83,3.29a16,16,0,0,1-5.13,1.19c-1.13.07-4.77-1.65-5.87-1.4a9.79,9.79,0,0,0-2.54,1,21.92,21.92,0,0,0-10.31,12.86c-1.48,5.07-.45,11.4-4.27,15-.64.61.23,2.47-.29,3.19a6.51,6.51,0,0,0-1,2.49,15.09,15.09,0,0,0,.75,9.06,11.1,11.1,0,0,0,6.51,6.16c1.29.42,2.65.57,4,.9,6.27,1.58,10.71,7.08,16.42,10.12a3.13,3.13,0,0,0,1.52.48,3,3,0,0,0,1.6-.68c2.21-1.58,4-4,4-6.74a13.63,13.63,0,0,0-1.46-4.86,47.09,47.09,0,0,1-2.73-8.79,4.29,4.29,0,0,1-.06-2.13c.41-1.32,1.88-1.94,2.9-2.88,1.94-1.8,2.17-4.84,1.45-7.38s-2.21-4.78-3.33-7.17a5.65,5.65,0,0,1-.66-2.33c0-3.19,4.31-4.92,6.13-7C175.45,255.78,173.89,258.06,177.26,256.39Z" transform="translate(-58.9 -26.03)" fill="#865a61"/><path d="M200.62,475.32c10-1.18,22.6-2.34,28.14-1.42,8.91,1.48,21.41-6.46,23.66-7.95-4.63-12.75-8.38-22.62-8.38-22.62s-36.57,1.64-44.21,14.74C196.33,464.07,197.9,470.31,200.62,475.32Z" transform="translate(-58.9 -26.03)" opacity="0.1"/><path d="M152.89,334.18c2.18,19.1,24,45.85,24,45.85s15.28,15.83,10.37,69.86l-.55,26.2s32.2-4.91,42-3.27,24-8.19,24-8.19,5.46-94.42-18-114.07a138.64,138.64,0,0,0-9.43-12.83c-6.3-7.63-14.87-16.22-22.88-18.34a14.32,14.32,0,0,0-3.16-.49s-24.56-13.64-31.11-3.27C168.17,315.62,150.71,315.08,152.89,334.18Z" transform="translate(-58.9 -26.03)" fill="#c4c8e2"/><path d="M252.5,436s-8.73-3.82-23.47-2.73-41-12-41-12" transform="translate(-58.9 -26.03)" opacity="0.1"/><path d="M236.67,557.68s-.55,1.64,6.55,3.82,9.28,4.37,9.28,4.37" transform="translate(-58.9 -26.03)" opacity="0.05"/><path d="M215,255.94a16.56,16.56,0,0,0,1.87,7.4L220,269.4l2.18,4.2,13.64,1.09s.28-1.12.63-3c1-5.46,2.63-17.25-.63-25.4-4.37-10.92-6-32.2-14.19-27.29C215.17,222.92,214.86,246.41,215,255.94Z" transform="translate(-58.9 -26.03)" fill="#fdc2cc"/><path d="M220,269.23v.17l2.18,4.2,13.64,1.09s.28-1.12.63-3C231.6,269.81,225.2,268.08,220,269.23Z" transform="translate(-58.9 -26.03)" opacity="0.1"/><path d="M220,270.32v9.82l19.65,10.37s.22-1.78.64-4.08c.71-3.95,2-9.43,3.73-10.11C244,276.33,229.85,268.14,220,270.32Z" transform="translate(-58.9 -26.03)" fill="#eaeaf3"/><path d="M166.89,359.53a23.12,23.12,0,0,0,17.65,5.65c34.55-3.51,35.49-15.72,35.49-15.72l5.31-11.74c-6.3-7.63-14.87-16.22-22.88-18.34-5.73,9.23-10.8,15.89-10.8,15.89s-25.65-19.65-33.29-1.09C153.9,345,160.55,353.94,166.89,359.53Z" transform="translate(-58.9 -26.03)" opacity="0.05"/><path d="M220,276.34v3.81l19.65,10.37s.22-1.78.64-4.08C231.85,283.72,223.47,278.58,220,276.34Z" transform="translate(-58.9 -26.03)" opacity="0.1"/><path d="M217.84,276.33s14.74,10.37,27.29,12.55l-25.65,56.76s-.94,12.21-35.49,15.72a23.13,23.13,0,0,1-17.65-5.65c-6.33-5.6-13-14.55-8.53-25.35,7.64-18.56,33.29,1.09,33.29,1.09S217.3,297.07,217.84,276.33Z" transform="translate(-58.9 -26.03)" fill="#c4c8e2"/><path d="M428.2,189c0,.68,0,1.35,0,2,0,20.59-15.67,44.32-44.32,44.32a44,44,0,0,1-23.92-7,32.22,32.22,0,0,0,3.76.19,31.2,31.2,0,0,0,19.34-6.65,15.6,15.6,0,0,1-14.56-10.8,19.64,19.64,0,0,0,2.94.24,16.47,16.47,0,0,0,4.1-.53,15.58,15.58,0,0,1-12.49-15.29v-.19a15.69,15.69,0,0,0,7,2,15.6,15.6,0,0,1-4.82-20.83,44.28,44.28,0,0,0,32.12,16.3,17.58,17.58,0,0,1-.39-3.57,15.59,15.59,0,0,1,27-10.66,30.67,30.67,0,0,0,9.89-3.76,15.53,15.53,0,0,1-6.85,8.58,31.23,31.23,0,0,0,9-2.41A33.48,33.48,0,0,1,428.2,189Z" transform="translate(-58.9 -26.03)" opacity="0.2"/><path d="M369.64,351.15v58.71a3.64,3.64,0,0,1-3.64,3.64H349.17V387.95h8.57L359,378h-9.87v-6.36c0-2.89.8-4.85,4.94-4.85h5.27v-8.91a70.91,70.91,0,0,0-7.69-.4c-7.6,0-12.82,4.64-12.82,13.17V378h-8.6v10h8.6v25.56H307.28a3.65,3.65,0,0,1-3.64-3.64V351.15a3.65,3.65,0,0,1,3.64-3.64H366A3.65,3.65,0,0,1,369.64,351.15Z" transform="translate(-58.9 -26.03)" opacity="0.2"/><path d="M680.72,272.9a13.31,13.31,0,0,0-9.89-8.88c-8.38-1.76-41.45.11-41.45.11s-33.08,1.87-41.2,4.56a13.31,13.31,0,0,0-8.82,9.94c-1.74,8.43-.76,25.75-.76,25.75s1,17.32,3.66,25.5a13.11,13.11,0,0,0,9.88,8.73c8.38,1.76,41.45-.11,41.45-.11s33.08-1.87,41.2-4.56a13.11,13.11,0,0,0,8.83-9.79c1.74-8.43.76-25.75.76-25.75S683.4,281.08,680.72,272.9Zm-59.16,44.84-1.78-31.46,28.54,14.16-26.76,17.29Z" transform="translate(-58.9 -26.03)" fill="#0f5d40" opacity="0.1"/></svg>
diff --git a/img/undraw_open_source.svg b/img/undraw_open_source.svg
index a83025d..437add7 100644
--- a/img/undraw_open_source.svg
+++ b/img/undraw_open_source.svg
@@ -1 +1 @@
-<svg data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="1028" height="598.997" viewBox="0 0 1028 598.997"><circle cx="332.005" cy="292.004" r="292.004" fill="#f2f2f2"/><path d="M1028 517.997a13.69 13.69 0 01-.17 2.12c-7.14 43.76-234.46 78.88-513.83 78.88S7.31 563.877.17 520.117a13.675 13.675 0 01-.17-2.12c0-.2 0-.41.02-.61 0-.11.01-.21.01-.32a.49.49 0 00.01-.12c.04-.45.1-.88.18-1.32 3.26-17.89 43.35-34.33 108.74-47.5 53.48-10.77 123.89-19.36 204.93-24.76 61.5-4.1 129.12-6.37 200.11-6.37 57.12 0 112.06 1.47 163.38 4.17h.02q16.11.855 31.74 1.87c71.33 4.62 134.63 11.69 185.63 20.54 31.37 5.45 58.1 11.58 79.19 18.22h.01c32.46 10.23 51.6 21.7 53.81 33.83.08.44.14.87.18 1.32a.487.487 0 00.01.12c0 .11.01.21.01.32.02.2.02.41.02.61z" fill="#3f3d56"/><ellipse cx="501" cy="571.997" rx="165" ry="24" opacity=".1"/><path d="M973.96 481.797c-5.77 1.65-12.27 3.18-19.4 4.58-29.36 5.78-69.42 9.33-113.53 9.33-49.28 0-93.45-4.43-123.38-11.44-24.84-5.82-39.88-13.39-39.88-21.7 0-7.3 11.64-14.06 31.37-19.53 71.33 4.62 134.63 11.69 185.63 20.54 31.37 5.45 58.1 11.58 79.19 18.22zM532 470.747c0 15.13-94.92 27.4-212 27.4s-212-12.27-212-27.4a4.372 4.372 0 01.96-2.62c53.48-10.77 123.89-19.36 204.93-24.76q3.045-.015 6.11-.01c117.08 0 212 12.26 212 27.39z" opacity=".1"/><path fill="#0f5d40" d="M416.472 334.975h41.685v134.584h-41.685zm-136.966-63.124h41.685v197.708h-41.685zm-135.776 0h41.685v197.708H143.73zm67.888 0h41.685v134.584h-41.685zm135.775 0h41.685v39.303h-41.685z"/><path fill="#8a8b8c" d="M347.393 334.975h41.685v134.584h-41.685z"/><path fill="#0f5d40" d="M416.472 271.851h109.573v39.303H416.472zm398.59-11.822q42.748 0 72.774 29.84a97.983 97.983 0 0121.832 32.838 107.346 107.346 0 01.095 78.409 93.533 93.533 0 01-21.74 32.294 104.704 104.704 0 01-33.84 22.56 101.425 101.425 0 01-39.115 7.824 99.015 99.015 0 01-38.661-7.734 104.845 104.845 0 01-55.4-55.396 101.764 101.764 0 01.09-77.594 102.307 102.307 0 0122.468-33.386q29.109-29.649 71.497-29.655zm.37 18.377q-34.93 0-58.769 24.38a87.595 87.595 0 00-18.466 27.38 80.789 80.789 0 000 63.312 86.249 86.249 0 0045.577 45.31 82.687 82.687 0 0063.41-.09 87.995 87.995 0 0027.741-18.374q23.831-23.287 23.828-58.405a83.659 83.659 0 00-6.186-32.02 81.465 81.465 0 00-18.002-26.93q-24.576-24.561-59.134-24.563zm-1.277 66.59l-13.65 7.098a14.006 14.006 0 00-5.364-6.368 12.087 12.087 0 00-5.916-1.818q-13.64 0-13.646 18.011 0 8.186 3.454 13.095 3.458 4.915 10.192 4.916 8.916 0 12.557-8.733l12.55 6.368a29.99 29.99 0 01-26.744 16.011q-13.644 0-22.016-8.37-8.367-8.367-8.367-23.284 0-14.556 8.46-23.105 8.457-8.549 21.379-8.552 18.926-.01 27.11 14.732zm58.764 0l-13.464 7.098a13.992 13.992 0 00-5.368-6.368 12.373 12.373 0 00-6.094-1.818q-13.645 0-13.65 18.011 0 8.186 3.458 13.095 3.453 4.915 10.192 4.916 8.907 0 12.547-8.733l12.736 6.368a31.277 31.277 0 01-11.274 11.736 29.398 29.398 0 01-15.464 4.275q-13.831 0-22.1-8.37-8.29-8.367-8.284-23.284 0-14.556 8.463-23.105 8.453-8.549 21.373-8.552 18.922-.01 26.93 14.732z"/><path d="M753.417 510.336c0 48.737-67.934 33.662-151.113 33.662S452.2 559.073 452.2 510.336s67.925-59.338 151.104-59.338 150.113 10.6 150.113 59.338z" opacity=".1"/><path d="M753.417 498.336c0 48.737-67.934 33.662-151.113 33.662S452.2 547.073 452.2 498.336s67.925-59.338 151.104-59.338 150.113 10.6 150.113 59.338z" fill="#3f3d56"/><path d="M739.542 410.842l3.433 14.164a.885.885 0 01-.017.478l-15.576 48.673a.885.885 0 01-1.721-.17l-2.155-18.961a.885.885 0 01.038-.374l14.297-43.876a.885.885 0 011.7.066z" fill="#2f2e41"/><path fill="#f2f2f2" d="M738.278 412.038l3.171 12.152-13.738 44.382-3.17-13.737 13.737-42.797z"/><path d="M669.064 478.083c.528 1.585 54.949-.529 55.477-1.057a11.469 11.469 0 001.163-2.114c.496-1.056.95-2.113.95-2.113l-2.113-17.108-53.892-1.913s-1.347 14.498-1.622 21.134a15.853 15.853 0 00.037 3.17z" fill="#2f2e41"/><path opacity=".1" d="M717.673 458.005l1.056 14.794h-23.776v-14.794h22.72zm-30.645 4.755l.142-.028-.67 6.368h-13.209v-6.34h13.737zm-17.964 15.323c.528 1.585 54.949-.529 55.477-1.057a11.469 11.469 0 001.163-2.114h-56.677a15.853 15.853 0 00.037 3.17z"/><path d="M585.055 422.605h14.794l36.457-14.265s25.89-10.568 23.776 9.51-5.812 47.024-5.812 47.024-11.624-5.284-17.964-3.699-2.114-32.23-2.114-32.23-51.778 24.833-56.534 21.663-5.811-25.361-5.811-25.361z" fill="#2f2e41"/><path d="M585.055 422.605h14.794l36.457-14.265s25.89-10.568 23.776 9.51-5.812 47.024-5.812 47.024-11.624-5.284-17.964-3.699-2.114-32.23-2.114-32.23-51.778 24.833-56.534 21.663-5.811-25.361-5.811-25.361z" opacity=".1"/><path d="M608.363 376.276l17.904 25.723 41.74 34.872s38.57 8.982 33.287 15.322-37.514-6.34-37.514-6.34-48.08-34.872-49.665-37.513-19.02-27.475-19.02-27.475z" fill="#a0616a"/><path d="M608.363 376.276l17.904 25.723 41.74 34.872s38.57 8.982 33.287 15.322-37.514-6.34-37.514-6.34-48.08-34.872-49.665-37.513-19.02-27.475-19.02-27.475z" opacity=".1"/><circle cx="605.661" cy="324.331" r="23.776" fill="#a0616a"/><path d="M604.076 345.465s-7.925 13.738-9.51 21.135-23.776-14.794-23.776-14.794l-2.906-7.662s20.87-9.774 19.285-17.7 16.907 19.021 16.907 19.021z" fill="#a0616a"/><path d="M597.736 355.504l11.624 22.72s-2.642 11.095-6.869 12.152-22.19-13.738-22.19-13.738z" fill="#d0cde1"/><path d="M608.303 386.677l21.663 28.531 51.778 38.57s37.514 7.925 29.06 13.737-32.758-5.283-32.758-5.283-52.307-28.003-63.403-39.627-31.701-31.173-31.701-31.173z" fill="#a0616a"/><path d="M579.244 431.059l6.34 10.039 37.84-11.905a29.751 29.751 0 0124.77 2.989c6.604 4.16 10.831 10.765 1.32 20.54-19.02 19.549-31.7 8.981-31.7 8.981s-63.932 30.117-74.499 15.323-11.095-22.191-11.095-22.191 40.683-25.361 47.024-23.776z" fill="#2f2e41"/><path d="M658.497 465.93s16.907 11.096-3.17 16.38-34.872-2.114-34.872-2.114-17.436 0-17.436-8.982 5.812-10.039 5.812-10.039l17.964 2.642s21.663-5.812 31.702 2.113z" fill="#d0cde1"/><path d="M625.166 318.35a17.728 17.728 0 004.982 1.785 4.548 4.548 0 004.596-1.97 6.18 6.18 0 00.522-2.794c.063-2.902-.147-6.038-1.985-8.283-1.17-1.43-2.878-2.33-4.09-3.724a17.598 17.598 0 01-2.067-3.378c-2.355-4.424-5.843-8.676-10.69-9.951a23.183 23.183 0 00-6.24-.477l-12.206.172a21.25 21.25 0 00-5.872.632c-3.93 1.188-6.79 4.492-9.41 7.651a47.851 47.851 0 00-5.396 7.448 26.133 26.133 0 00-3.098 12.804 11.98 11.98 0 00.44 3.388 18.801 18.801 0 001.33 2.925c2.29 4.496 3.649 10.112 1.071 14.45 4.478-1.83 8.909-4.228 11.863-8.059 1.322-1.714 2.358-3.72 4.12-4.977s4.63-1.367 5.76.479a5.163 5.163 0 01.582 2.418 11.084 11.084 0 00.668 4.081 3.058 3.058 0 003.322 1.896c2.3-.648 2.08-4.179 3.852-5.782 1.346-1.218 3.422-.986 5.15-1.538a7.643 7.643 0 004.387-4.321c.655-1.468.645-5.31 1.884-6.105 1.553-.997 5.085.588 6.525 1.23z" fill="#2f2e41"/><path d="M565.996 341.638a6.27 6.27 0 013.264.008c3.392.911 10.995 3.321 12.625 6.99 2.114 4.755 9.51 12.152 9.51 12.152s10.04 10.038 7.926 16.907-10.039 14.794-10.039 14.794 2.114 32.758-8.453 41.212-14.794 2.642-14.794 10.567-32.758 32.758-39.099 17.436c0 0 3.17-28.532 2.114-38.57-1.042-9.894.483-71.624 36.946-81.496z" fill="#d0cde1"/><path d="M582.942 354.976s32.23 23.776 26.418 33.814c0 0-19.55 9.51-23.776 8.982s-20.606-19.02-24.833-20.605-6.34-30.117 22.191-22.191z" fill="#d0cde1"/><path d="M493.81 376.281c-5.012 1.693-9.553 5.653-10.58 10.843-.476 2.406-.184 4.907-.584 7.327-.929 5.611-5.334 9.897-9.397 13.878s-8.258 8.606-8.555 14.286c-.324 6.22 4.187 12.047 3.406 18.226-.907 7.18-8.49 11.831-10.364 18.82-1.251 4.667.282 9.695 2.806 13.815 4.808 7.853 13.028 13.184 21.78 16.041s18.076 3.46 27.283 3.556c11.21.117 23.383-.845 31.806-8.244a25.48 25.48 0 008.459-16.588c.8-8.571-2.777-17.427-.31-25.674 1.553-5.19 5.447-9.93 4.866-15.316-.568-5.266-5.168-8.999-8.323-13.253-2.946-3.972-4.734-8.663-6.486-13.288l-5.995-15.824c-1.178-3.11-2.472-6.382-5.098-8.424-4.917-3.822-12.823-3.07-18.572-2.283-5.333.732-11.012.37-16.141 2.102z" fill="#2f2e41"/><path d="M495.688 422.376s2.658 8.637-17.274 18.603 1.994 20.595 1.994 20.595l23.252 5.315s23.918-3.322 26.575-7.308 7.308-17.274 5.98-19.267a31.061 31.061 0 00-3.322-3.986s-15.945-2.658-15.28-9.966-21.925-3.986-21.925-3.986z" fill="#ffb9b9"/><path d="M495.688 422.376s2.658 8.637-17.274 18.603 1.994 20.595 1.994 20.595l23.252 5.315s23.918-3.322 26.575-7.308 7.308-17.274 5.98-19.267a31.061 31.061 0 00-3.322-3.986s-15.945-2.658-15.28-9.966-21.925-3.986-21.925-3.986z" opacity=".1"/><circle cx="508.643" cy="414.736" r="21.26" fill="#ffb9b9"/><path d="M506.318 459.58s-25.604-1.872-26.09-19.538c0 0-9.122-1.057-11.78 1.6s-11.293 4.651-11.293 11.295 14.616 26.575 14.616 26.575 7.972 26.575 4.65 31.225-3.986 16.61-3.986 16.61 33.219-2.658 38.534 0 26.574 2.657 27.903 0-1.329-35.876-1.329-35.876 5.98-7.973 4.651-17.274l15.945-18.602s-5.98-17.938-15.28-17.938c0 0-12.624-3.322-12.956-1.661s6.312 20.263-23.585 23.585z" fill="#ff6584"/><path d="M446.525 518.045s5.979 9.302 21.26 11.295 17.938-3.322 16.609-4.65-17.274-7.309-17.274-7.309l-9.301-7.308zm108.956-7.972l-17.273 9.966s-22.589-1.33-13.952 5.315 24.582 3.986 24.582 3.986l15.28-7.308z" fill="#ffb9b9"/><path d="M469.113 527.347s-15.945 39.197 3.322 45.177 72.416 4.65 84.375-3.322 15.28-18.602 13.288-21.924-15.281-12.623-24.582-13.288-76.403-6.643-76.403-6.643z" fill="#2f2e41"/><path d="M469.113 527.347s-15.945 39.197 3.322 45.177 72.416 4.65 84.375-3.322 15.28-18.602 13.288-21.924-15.281-12.623-24.582-13.288-76.403-6.643-76.403-6.643z" opacity=".05"/><path d="M544.378 529.782s56.28-20.373 55.616 4.208-35.876 31.226-35.876 31.226l-10.63 1.328-58.464 1.994s1.993-10.63-2.658-11.96c0 0 15.28-3.985 15.945-4.65s38.534-13.951 41.191-14.616 10.63-5.98 16.61-5.315c0 0 6.643-5.315 13.951-3.986l-20.595 1.329z" fill="#2f2e41"/><path d="M544.378 529.782s56.28-20.373 55.616 4.208-35.876 31.226-35.876 31.226l-10.63 1.328-58.464 1.994s1.993-10.63-2.658-11.96c0 0 15.28-3.985 15.945-4.65s38.534-13.951 41.191-14.616 10.63-5.98 16.61-5.315c0 0 6.643-5.315 13.951-3.986l-20.595 1.329z" opacity=".1"/><path fill="#2f2e41" d="M534.434 533.081l7.096 16.19 43.184-15.281 3.322-8.636-11.295-1.994-22.706 3.987-9.848 2.657-9.753 3.077z"/><path opacity=".1" d="M534.434 533.081l7.096 16.19 43.184-15.281 3.322-8.636-11.295-1.994-22.706 3.987-9.848 2.657-9.753 3.077z"/><path d="M442.538 552.593s12.623 15.945 27.24 19.93 22.588-1.328 22.588-1.328l-4.65-18.602-1.993-11.959-8.637-5.98-17.274-7.972-20.595-6.643s-8.637-1.33-8.637 0 7.972 21.26 7.972 21.26z" fill="#2f2e41"/><path d="M457.819 561.23s2.657 19.266 5.98 20.595 13.287-1.329 15.944-2.657 11.69-7.46 11.69-7.46-31.62-11.807-33.614-10.478z" fill="#f2f2f2"/><path fill="#ffb9b9" d="M518.277 563.223l12.623 1.993-1.329 15.28-17.607-4.276 6.313-12.997z"/><path d="M526.186 567.475s-5.916 7.042.063 11.028l3.986 3.322s13.288 2.657 14.616 3.986 6.644-1.993 6.644-1.993.665-19.931 0-21.26-8.637-2.657-9.301-1.328-8.637 3.321-13.287 1.993z" fill="#f2f2f2"/><path d="M473.1 531.997s-46.506-27.239-53.815-17.273-15.28 23.917 5.98 34.547 87.697 32.554 87.697 32.554 9.965-15.28 9.965-19.267c0 0-35.211-15.945-41.19-17.273s-29.897-16.61-33.22-17.938-7.972-5.315-7.972-5.315z" fill="#2f2e41"/><path d="M459.812 449.615l-2.657 1.993s-5.98 15.281-6.644 23.918-8.637 35.211-7.973 38.533 1.33 5.98 5.315 9.301c0 0 5.315-11.958 14.617-9.965l11.294-41.191zm93.012 0l5.315 5.98s3.322 7.972 3.322 9.965 6.643 31.226 7.308 32.554 3.322 17.938 0 21.925-9.301 6.643-9.301 6.643 3.986-13.952-8.637-14.616l1.329-5.315-11.96-39.862z" fill="#ff6584"/><path d="M461.14 495.356v34.995a8.413 8.413 0 008.29 8.413l73.185 1.084a8.413 8.413 0 008.532-8.09l1.346-34.998a8.413 8.413 0 00-8.286-8.736l-74.53-1.08a8.413 8.413 0 00-8.536 8.412z" fill="#3f3d56"/><ellipse cx="509.89" cy="401.732" rx="22.884" ry="12.322" fill="#2f2e41"/><circle cx="505.986" cy="513.727" r="5.315" fill="#f2f2f2"/></svg>
\ No newline at end of file
+<svg id="a58ef234-55dd-4456-b368-278f056cc5c7" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="1028" height="598.99741" viewBox="0 0 1028 598.99741"><title>open source</title><circle cx="332.00497" cy="292.00357" r="292.00357" fill="#f2f2f2"/><path d="M1114,668.4987a13.68982,13.68982,0,0,1-.16992,2.12c-7.14014,43.76-234.46008,78.88-513.83008,78.88s-506.69-35.12-513.83-78.88a13.67509,13.67509,0,0,1-.17-2.12c0-.2,0-.41.02-.61,0-.11005.01-.21.01-.32a.48944.48944,0,0,0,.01-.12c.04-.45.1-.88.18-1.32,3.26-17.89,43.35-34.33,108.74-47.5,53.48-10.77,123.89-19.36,204.93-24.76,61.5-4.1,129.12-6.37,200.11-6.37,57.12,0,112.06,1.47,163.38,4.17h.02q16.11.855,31.74,1.87c71.33,4.62,134.63,11.69,185.63,20.54,31.37,5.45,58.1,11.58,79.18994,18.22h.01c32.46,10.23,51.6001,21.7,53.81006,33.83.08.44.13989.87.17993,1.32a.48659.48659,0,0,0,.01.12c0,.11.01.21.01.32C1114,668.08867,1114,668.29869,1114,668.4987Z" transform="translate(-86 -150.5013)" fill="#3f3d56"/><ellipse cx="501" cy="571.99741" rx="165" ry="24" opacity="0.1"/><path d="M1059.96,632.29869c-5.77,1.65-12.27,3.18-19.3999,4.58-29.36011,5.78-69.42005,9.33-113.53,9.33-49.28,0-93.45-4.43-123.38-11.44-24.84-5.81994-39.88-13.38995-39.88-21.69995,0-7.30005,11.63995-14.06,31.37-19.53,71.33,4.62,134.63,11.69,185.63,20.54C1012.14,619.52867,1038.87,625.65868,1059.96,632.29869Z" transform="translate(-86 -150.5013)" opacity="0.1"/><path d="M618,621.2487c0,15.13-94.92,27.4-212,27.4s-212-12.27-212-27.4a4.372,4.372,0,0,1,.96-2.62c53.48-10.77,123.89-19.36,204.93-24.76q3.045-.015,6.11-.01C523.08,593.85869,618,606.1187,618,621.2487Z" transform="translate(-86 -150.5013)" opacity="0.1"/><rect x="416.47191" y="334.97493" width="41.68539" height="134.58427" fill="#0f5d40"/><rect x="279.50562" y="271.85134" width="41.68539" height="197.70787" fill="#0f5d40"/><rect x="143.73034" y="271.85134" width="41.68539" height="197.70787" fill="#0f5d40"/><rect x="211.61798" y="271.85134" width="41.68539" height="134.58427" fill="#0f5d40"/><rect x="347.39326" y="271.85134" width="41.68539" height="39.30337" fill="#0f5d40"/><rect x="347.39326" y="334.97493" width="41.68539" height="134.58427" fill="#8a8b8c"/><rect x="416.47191" y="271.85134" width="109.57303" height="39.30337" fill="#0f5d40"/><path d="M901.062,410.53031q42.74823,0,72.77372,29.83923A97.98265,97.98265,0,0,1,995.66753,473.208a107.34579,107.34579,0,0,1,.09551,78.40916,93.53335,93.53335,0,0,1-21.73946,32.294,104.70367,104.70367,0,0,1-33.84136,22.5609,101.42451,101.42451,0,0,1-39.11384,7.82277,99.01466,99.01466,0,0,1-38.66173-7.73362A104.84511,104.84511,0,0,1,807.00731,551.165a101.7643,101.7643,0,0,1,.08913-77.59409A102.30668,102.30668,0,0,1,829.565,440.18488Q858.67354,410.53668,901.062,410.53031Zm.36932,18.3773q-34.93023,0-58.76787,24.37889A87.59486,87.59486,0,0,0,824.197,480.66778a80.78885,80.78885,0,0,0,0,63.31126,86.24851,86.24851,0,0,0,45.5771,45.30965,82.68682,82.68682,0,0,0,63.41-.08914,87.99456,87.99456,0,0,0,27.74106-18.37412q23.83128-23.28683,23.82809-58.40491a83.65859,83.65859,0,0,0-6.18627-32.02018,81.465,81.465,0,0,0-18.0016-26.92917Q935.98906,428.9092,901.43132,428.90761Zm-1.27673,66.59064-13.64925,7.09685a14.0061,14.0061,0,0,0-5.36482-6.36774,12.08742,12.08742,0,0,0-5.91563-1.818q-13.63969,0-13.64606,18.01115,0,8.18574,3.45449,13.09526,3.45768,4.9143,10.19157,4.91589,8.91644,0,12.55719-8.73335l12.55082,6.36774a29.99,29.99,0,0,1-26.74451,16.01168q-13.64448,0-22.01646-8.3704-8.36721-8.36721-8.36721-23.28364,0-14.55666,8.45954-23.10535,8.45795-8.5487,21.37969-8.55187Q891.97045,480.75694,900.15459,495.49825Zm58.76469,0-13.46459,7.09685a13.99175,13.99175,0,0,0-5.368-6.36774,12.37253,12.37253,0,0,0-6.09393-1.818q-13.64446,0-13.64924,18.01115,0,8.18574,3.45767,13.09526,3.45291,4.9143,10.19157,4.91589,8.90688,0,12.54764-8.73335l12.73548,6.36774a31.27658,31.27658,0,0,1-11.27409,11.73575,29.39766,29.39766,0,0,1-15.46405,4.27593q-13.83072,0-22.09923-8.3704-8.2908-8.36721-8.28444-23.28364,0-14.55666,8.46273-23.10535,8.45319-8.5487,21.37333-8.55187Q950.91184,480.75694,958.91928,495.49825Z" transform="translate(-86 -150.5013)" fill="#0f5d40"/><path d="M839.41688,660.83685c0,48.73748-67.93425,33.66253-151.11288,33.66253s-150.10359,15.075-150.10359-33.66253,67.925-59.33747,151.10359-59.33747S839.41688,612.09937,839.41688,660.83685Z" transform="translate(-86 -150.5013)" opacity="0.1"/><path d="M839.41688,648.83685c0,48.73748-67.93425,33.66253-151.11288,33.66253s-150.10359,15.075-150.10359-33.66253,67.925-59.33747,151.10359-59.33747S839.41688,600.09937,839.41688,648.83685Z" transform="translate(-86 -150.5013)" fill="#3f3d56"/><path d="M825.54156,561.34329l3.43359,14.16355a.88462.88462,0,0,1-.01719.478l-15.57547,48.67335a.88465.88465,0,0,1-1.72156-.16974l-2.15469-18.96122a.88471.88471,0,0,1,.03787-.374l14.29657-43.87567A.88465.88465,0,0,1,825.54156,561.34329Z" transform="translate(-86 -150.5013)" fill="#2f2e41"/><polygon points="738.278 412.038 741.449 424.19 727.711 468.572 724.541 454.835 738.278 412.038" fill="#f2f2f2"/><path d="M755.06392,628.58381c.52836,1.58507,54.949-.52835,55.47732-1.05671a11.4687,11.4687,0,0,0,1.16235-2.11342c.49669-1.05671.95107-2.11342.95107-2.11342l-2.11342-17.10815L756.649,604.27946s-1.34734,14.49808-1.62209,21.13422A15.85321,15.85321,0,0,0,755.06392,628.58381Z" transform="translate(-86 -150.5013)" fill="#2f2e41"/><polygon points="717.673 458.005 718.729 472.799 694.953 472.799 694.953 458.005 717.673 458.005" opacity="0.1"/><polygon points="687.028 462.76 687.17 462.732 686.5 469.1 673.291 469.1 673.291 462.76 687.028 462.76" opacity="0.1"/><path d="M755.06392,628.58381c.52836,1.58507,54.949-.52835,55.47732-1.05671a11.4687,11.4687,0,0,0,1.16235-2.11342H755.0269A15.85321,15.85321,0,0,0,755.06392,628.58381Z" transform="translate(-86 -150.5013)" opacity="0.1"/><path d="M671.05541,573.10649h14.79395l36.45652-14.26559s25.88942-10.56711,23.776,9.5104S740.27,615.37493,740.27,615.37493s-11.62382-5.28356-17.96409-3.69849-2.11342-32.22968-2.11342-32.22968-51.77883,24.8327-56.534,21.66257-5.81191-25.36106-5.81191-25.36106Z" transform="translate(-86 -150.5013)" fill="#2f2e41"/><path d="M671.05541,573.10649h14.79395l36.45652-14.26559s25.88942-10.56711,23.776,9.5104S740.27,615.37493,740.27,615.37493s-11.62382-5.28356-17.96409-3.69849-2.11342-32.22968-2.11342-32.22968-51.77883,24.8327-56.534,21.66257-5.81191-25.36106-5.81191-25.36106Z" transform="translate(-86 -150.5013)" opacity="0.1"/><path d="M694.36337,526.77716l17.90376,25.72347,41.74008,34.87146s38.56994,8.982,33.28639,15.32231-37.51323-6.34027-37.51323-6.34027S701.7,561.48268,700.115,558.8409s-19.0208-27.47448-19.0208-27.47448Z" transform="translate(-86 -150.5013)" fill="#a0616a"/><path d="M694.36337,526.77716l17.90376,25.72347,41.74008,34.87146s38.56994,8.982,33.28639,15.32231-37.51323-6.34027-37.51323-6.34027S701.7,561.48268,700.115,558.8409s-19.0208-27.47448-19.0208-27.47448Z" transform="translate(-86 -150.5013)" opacity="0.1"/><circle cx="605.66127" cy="324.33109" r="23.77599" fill="#a0616a"/><path d="M690.0762,495.9666s-7.92533,13.73724-9.51039,21.13422-23.776-14.79395-23.776-14.79395l-2.90595-7.66115s20.87-9.77458,19.285-17.69991S690.0762,495.9666,690.0762,495.9666Z" transform="translate(-86 -150.5013)" fill="#a0616a"/><path d="M683.73594,506.00536l11.62382,22.71928s-2.64178,11.09546-6.86862,12.15217-22.19093-13.73724-22.19093-13.73724Z" transform="translate(-86 -150.5013)" fill="#d0cde1"/><path d="M694.30305,537.17833l21.66257,28.53119,51.77883,38.56994s37.51323,7.92534,29.05955,13.73724-32.758-5.28355-32.758-5.28355-52.30718-28.00284-63.40265-39.62666-31.70132-31.173-31.70132-31.173Z" transform="translate(-86 -150.5013)" fill="#a0616a"/><path d="M665.2435,581.56018l6.34026,10.03875,37.83932-11.9045a29.75135,29.75135,0,0,1,24.7708,2.98851c6.60444,4.1608,10.83129,10.76524,1.32089,20.53981-19.0208,19.54915-31.70133,8.982-31.70133,8.982s-63.931,30.11625-74.49811,15.3223-11.09546-22.19093-11.09546-22.19093S658.90323,579.97511,665.2435,581.56018Z" transform="translate(-86 -150.5013)" fill="#2f2e41"/><path d="M744.49681,616.43164s16.90737,11.09546-3.17013,16.379-34.87146-2.11343-34.87146-2.11343-17.43573,0-17.43573-8.982,5.81191-10.03875,5.81191-10.03875l17.96409,2.64178S734.45806,608.50631,744.49681,616.43164Z" transform="translate(-86 -150.5013)" fill="#d0cde1"/><path d="M711.16583,468.8514a17.728,17.728,0,0,0,4.98235,1.78469,4.548,4.548,0,0,0,4.59533-1.96886,6.18073,6.18073,0,0,0,.522-2.7952c.06365-2.90132-.14619-6.03778-1.98475-8.28309-1.1701-1.429-2.87816-2.32977-4.08936-3.72406a17.59821,17.59821,0,0,1-2.06717-3.37767c-2.35552-4.42406-5.84318-8.67589-10.69025-9.9513a23.18347,23.18347,0,0,0-6.24-.47707l-12.20625.17221a21.25081,21.25081,0,0,0-5.872.632c-3.92885,1.1879-6.78945,4.49179-9.40936,7.65139a47.85117,47.85117,0,0,0-5.39639,7.44763,26.133,26.133,0,0,0-3.09771,12.80437,11.97989,11.97989,0,0,0,.43881,3.38808,18.80129,18.80129,0,0,0,1.33168,2.925c2.28907,4.49613,3.64824,10.1121,1.07032,14.44908,4.47812-1.82926,8.90892-4.22774,11.863-8.05834,1.3215-1.71364,2.35787-3.7197,4.119-4.9772s4.63076-1.36658,5.76072.479a5.163,5.163,0,0,1,.58258,2.41835,11.084,11.084,0,0,0,.66762,4.08133,3.05833,3.05833,0,0,0,3.32224,1.8956c2.30039-.648,2.0801-4.17861,3.85194-5.78243,1.3456-1.218,3.42157-.98516,5.15028-1.53807a7.64334,7.64334,0,0,0,4.38653-4.32052c.65453-1.46807.64508-5.3098,1.88365-6.10481C706.19386,466.62453,709.72609,468.20958,711.16583,468.8514Z" transform="translate(-86 -150.5013)" fill="#2f2e41"/><path d="M651.99646,492.13947a6.27057,6.27057,0,0,1,3.26389.00831c3.39162.91054,10.99473,3.321,12.62493,6.989,2.11342,4.7552,9.51039,12.15217,9.51039,12.15217s10.03876,10.03875,7.92534,16.90737-10.03876,14.794-10.03876,14.794,2.11342,32.758-8.45368,41.21172-14.794,2.64178-14.794,10.56711-32.758,32.758-39.0983,17.43573c0,0,3.17014-28.5312,2.11343-38.56995C614.00826,563.74087,615.53292,502.01108,651.99646,492.13947Z" transform="translate(-86 -150.5013)" fill="#d0cde1"/><path d="M668.942,505.477s32.22968,23.776,26.41777,33.81475c0,0-19.54915,9.5104-23.776,8.982s-20.60586-19.02079-24.8327-20.60586S640.4108,497.55167,668.942,505.477Z" transform="translate(-86 -150.5013)" fill="#d0cde1"/><path d="M579.81065,526.78274c-5.01266,1.69284-9.5539,5.65228-10.58039,10.84253-.47582,2.40592-.18409,4.907-.58451,7.32661-.92865,5.61161-5.33358,9.89722-9.39638,13.878s-8.2584,8.60617-8.55492,14.28636c-.3247,6.22,4.1862,12.047,3.40563,18.22633-.90687,7.17909-8.48947,11.831-10.36389,18.82016-1.25164,4.667.28211,9.6942,2.8055,13.81484,4.80858,7.85231,13.0279,13.18323,21.78085,16.041s18.07506,3.45905,27.28222,3.55552c11.21079.11746,23.38277-.845,31.806-8.244a25.48043,25.48043,0,0,0,8.459-16.5882c.8002-8.57064-2.77695-17.42641-.30951-25.67311,1.55287-5.19,5.44709-9.93,4.86592-15.316-.56823-5.26625-5.16773-8.99907-8.32312-13.25346-2.9461-3.97222-4.7338-8.66319-6.48587-13.28794l-5.99481-15.82383c-1.17848-3.1107-2.47257-6.38232-5.09885-8.424-4.91665-3.8221-12.82242-3.07115-18.57152-2.28285C590.61855,525.412,584.93966,525.0506,579.81065,526.78274Z" transform="translate(-86 -150.5013)" fill="#2f2e41"/><path d="M581.68806,572.87747s2.65748,8.63681-17.27362,18.60236,1.99311,20.59548,1.99311,20.59548l23.25295,5.315s23.91732-3.32185,26.5748-7.30808,7.30808-17.27362,5.97934-19.26673a31.0614,31.0614,0,0,0-3.32186-3.98622s-15.94488-2.65748-15.28051-9.96555S581.68806,572.87747,581.68806,572.87747Z" transform="translate(-86 -150.5013)" fill="#ffb9b9"/><path d="M581.68806,572.87747s2.65748,8.63681-17.27362,18.60236,1.99311,20.59548,1.99311,20.59548l23.25295,5.315s23.91732-3.32185,26.5748-7.30808,7.30808-17.27362,5.97934-19.26673a31.0614,31.0614,0,0,0-3.32186-3.98622s-15.94488-2.65748-15.28051-9.96555S581.68806,572.87747,581.68806,572.87747Z" transform="translate(-86 -150.5013)" opacity="0.1"/><circle cx="508.64328" cy="414.73592" r="21.25984" fill="#ffb9b9"/><path d="M592.318,610.08219s-25.60367-1.87245-26.08923-19.53858c0,0-9.12238-1.05689-11.77986,1.60059s-11.2943,4.65059-11.2943,11.29429,14.61615,26.57481,14.61615,26.57481,7.97244,26.5748,4.65059,31.22539-3.98622,16.60925-3.98622,16.60925,33.2185-2.65748,38.53346,0,26.57481,2.65748,27.90355,0-1.32874-35.876-1.32874-35.876,5.97933-7.97244,4.65059-17.27362L644.13885,606.096s-5.97933-17.938-15.28051-17.938c0,0-12.623-3.32185-12.95522-1.66092S622.21464,606.76034,592.318,610.08219Z" transform="translate(-86 -150.5013)" fill="#ff6584"/><path d="M532.52467,668.54676s5.97933,9.30118,21.25985,11.29429,17.938-3.32185,16.60925-4.65059-17.27362-7.30807-17.27362-7.30807l-9.30119-7.30807Z" transform="translate(-86 -150.5013)" fill="#ffb9b9"/><path d="M641.48137,660.57432l-17.27362,9.96555s-22.58859-1.32874-13.95178,5.315,24.5817,3.98622,24.5817,3.98622l15.28051-7.30807Z" transform="translate(-86 -150.5013)" fill="#ffb9b9"/><path d="M555.11326,677.84794s-15.94489,39.19784,3.32185,45.17717,72.41634,4.65059,84.375-3.32185,15.28051-18.60236,13.2874-21.92421-15.28051-12.623-24.58169-13.2874S555.11326,677.84794,555.11326,677.84794Z" transform="translate(-86 -150.5013)" fill="#2f2e41"/><path d="M555.11326,677.84794s-15.94489,39.19784,3.32185,45.17717,72.41634,4.65059,84.375-3.32185,15.28051-18.60236,13.2874-21.92421-15.28051-12.623-24.58169-13.2874S555.11326,677.84794,555.11326,677.84794Z" transform="translate(-86 -150.5013)" opacity="0.05"/><path d="M630.37766,680.28318s56.28087-20.37323,55.6165,4.20847-35.876,31.22539-35.876,31.22539l-10.62992,1.32874-58.46457,1.99311s1.99311-10.62992-2.65748-11.95866c0,0,15.28051-3.98622,15.94488-4.65059s38.53347-13.95177,41.19095-14.61614,10.62992-5.97934,16.60925-5.315c0,0,6.6437-5.315,13.95177-3.98622l-20.59547,1.32874Z" transform="translate(-86 -150.5013)" fill="#2f2e41"/><path d="M630.37766,680.28318s56.28087-20.37323,55.6165,4.20847-35.876,31.22539-35.876,31.22539l-10.62992,1.32874-58.46457,1.99311s1.99311-10.62992-2.65748-11.95866c0,0,15.28051-3.98622,15.94488-4.65059s38.53347-13.95177,41.19095-14.61614,10.62992-5.97934,16.60925-5.315c0,0,6.6437-5.315,13.95177-3.98622l-20.59547,1.32874Z" transform="translate(-86 -150.5013)" opacity="0.1"/><polygon points="534.434 533.081 541.53 549.271 584.714 533.99 588.036 525.354 576.741 523.36 554.035 527.347 544.187 530.004 534.434 533.081" fill="#2f2e41"/><polygon points="534.434 533.081 541.53 549.271 584.714 533.99 588.036 525.354 576.741 523.36 554.035 527.347 544.187 530.004 534.434 533.081" opacity="0.1"/><path d="M528.53845,703.094s12.623,15.94488,27.23918,19.9311,22.58858-1.32874,22.58858-1.32874L573.71562,703.094l-1.99311-11.95866L563.0857,685.156l-17.27363-7.97245-20.59547-6.6437s-8.63681-1.32874-8.63681,0,7.97244,21.25985,7.97244,21.25985Z" transform="translate(-86 -150.5013)" fill="#2f2e41"/><path d="M543.819,711.73082s2.65748,19.26673,5.97934,20.59547,13.2874-1.32874,15.94488-2.65748,11.69054-7.45919,11.69054-7.45919S545.81207,710.40208,543.819,711.73082Z" transform="translate(-86 -150.5013)" fill="#f2f2f2"/><polygon points="518.277 563.223 530.9 565.216 529.571 580.496 511.964 576.22 518.277 563.223" fill="#ffb9b9"/><path d="M612.18567,717.97655s-5.91592,7.04167.06341,11.02789l3.98622,3.32185s13.28741,2.65748,14.61615,3.98622,6.6437-1.99311,6.6437-1.99311.66437-19.9311,0-21.25984-8.63681-2.65748-9.30118-1.32874-8.63682,3.32185-13.28741,1.99311Z" transform="translate(-86 -150.5013)" fill="#f2f2f2"/><path d="M559.09948,682.49853s-46.50591-27.23917-53.814-17.27362-15.28051,23.91733,5.97933,34.54725,87.69685,32.55413,87.69685,32.55413,9.96555-15.28051,9.96555-19.26673c0,0-35.21161-15.94488-41.19094-17.27362s-29.89666-16.60926-33.21851-17.938-7.97244-5.315-7.97244-5.315Z" transform="translate(-86 -150.5013)" fill="#2f2e41"/><path d="M545.81207,600.11664l-2.65748,1.99311s-5.97933,15.28052-6.6437,23.91733-8.63681,35.21161-7.97244,38.53346,1.32874,5.97933,5.315,9.30118c0,0,5.315-11.95866,14.61615-9.96555l11.29429-41.19094Z" transform="translate(-86 -150.5013)" fill="#ff6584"/><path d="M638.82389,600.11664l5.315,5.97933s3.32185,7.97245,3.32185,9.96556,6.6437,31.22539,7.30807,32.55413,3.32185,17.938,0,21.92421-9.30118,6.6437-9.30118,6.6437,3.98622-13.95177-8.63681-14.61614l1.32874-5.315-11.95866-39.8622Z" transform="translate(-86 -150.5013)" fill="#ff6584"/><path d="M547.14082,645.85762v34.9949a8.41342,8.41342,0,0,0,8.2888,8.41251l73.18511,1.08423a8.41344,8.41344,0,0,0,8.53185-8.08916l1.34611-34.999a8.41344,8.41344,0,0,0-8.28529-8.73591l-74.53123-1.08016A8.41342,8.41342,0,0,0,547.14082,645.85762Z" transform="translate(-86 -150.5013)" fill="#3f3d56"/><ellipse cx="509.89011" cy="401.732" rx="22.88412" ry="12.32222" fill="#2f2e41"/><circle cx="505.9858" cy="513.72706" r="5.31496" fill="#f2f2f2"/></svg>
diff --git a/img/undraw_operating_system.svg b/img/undraw_operating_system.svg
index 9e03392..ef148c0 100644
--- a/img/undraw_operating_system.svg
+++ b/img/undraw_operating_system.svg
@@ -1 +1 @@
-<svg data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="1100" height="806.74" viewBox="0 0 1100 806.74"><defs><linearGradient id="a" x1="459.23" y1="847.99" x2="459.23" y2="385.75" gradientTransform="translate(250.84)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="gray" stop-opacity=".25"/><stop offset=".54" stop-color="gray" stop-opacity=".12"/><stop offset="1" stop-color="gray" stop-opacity=".1"/></linearGradient></defs><ellipse cx="629.72" cy="780.56" rx="122.56" ry="26.18" fill="#0f5d40" opacity=".1"/><path d="M1070.55 683.84c-24.35 20.2-59 28.56-92.51 33.84l-5.64.86c-58.57 8.74-118.32 10.52-177.79 12.28-165.87 4.91-332.17 9.81-497.6-1.51-73.16-5-148.13-13.76-212.25-43.7l-1.67-.79c-.83-.39-1.66-.78-2.49-1.19A224.11 224.11 0 0148 664.54c-18.31-13.06-33.43-29-41.42-47.91-12.52-29.66-5.9-63 8.4-92s35.8-55.12 54.34-82.43c5.44-8 10.6-16.3 15.4-24.81 30-53.37 44.88-115.13 13.43-166.56a228.58 228.58 0 00-13.43-19c-7.67-10-15.47-20-20.74-31.07-12.29-25.76-9.65-54.73-5.17-82.25 6-36.59 17.05-76 51.38-98.86 35.67-23.74 86.3-22.54 130.57-14 68.83 13.19 132.36 40.8 196.49 65.7s131.35 47.58 201.86 50.02c62.26 2.17 134.89-14 176.23-56.08 40.15-40.85 115.6-43.94 170-19.27 51.91 23.54 85.48 73.36 83 123.12-3.16 62.1-54.93 111.83-95.9 164.7-6.81 8.79-13.33 17.68-19.28 26.72-19.42 29.53-33.15 65-19.78 96.88 7.5 17.85 21.81 31.47 39.06 43.36 38.65 26.63 92 44.55 116 81.83 20.67 32.16 13.01 75.56-17.89 101.21z" fill="#0f5d40" opacity=".1"/><ellipse cx="972.5" cy="704.85" rx="57.01" ry="10.96" fill="#0f5d40"/><ellipse cx="971.55" cy="700.19" rx="6.64" ry="8.69" fill="#3f3d56"/><ellipse cx="971.55" cy="689.57" rx="6.64" ry="8.69" fill="#3f3d56"/><ellipse cx="971.55" cy="678.94" rx="6.64" ry="8.69" fill="#3f3d56"/><ellipse cx="971.55" cy="668.32" rx="6.64" ry="8.69" fill="#3f3d56"/><ellipse cx="971.55" cy="657.7" rx="6.64" ry="8.69" fill="#3f3d56"/><ellipse cx="971.55" cy="647.08" rx="6.64" ry="8.69" fill="#3f3d56"/><ellipse cx="971.55" cy="636.46" rx="6.64" ry="8.69" fill="#3f3d56"/><path d="M996.4 563.78a31 31 0 002.47-3.64l-17.44-2.86 18.86.14a31.78 31.78 0 00.61-25.2l-25.31 13.15 23.34-17.15a31.8 31.8 0 10-52.51 35.58 31.55 31.55 0 00-3.63 5.8l22.64 11.77-24.14-8.1a31.79 31.79 0 005.13 29.86 31.8 31.8 0 1050 0 31.78 31.78 0 000-39.32z" fill="#0f5d40"/><path d="M939.61 583.44a31.68 31.68 0 006.81 19.66 31.8 31.8 0 1050 0c4.24-5.41-56.81-23.23-56.81-19.66z" opacity=".1"/><path d="M134.73 673.91c0 5.59-21.81 10.21-50 10.87h-1.67c-.83-.39-1.66-.78-2.49-1.19A224.11 224.11 0 0148 664.54c6.85-.8 14.64-1.34 23-1.52h1.13c1.82 0 3.67-.06 5.54-.06h7.05c28.2.73 50.01 5.41 50.01 10.95z" fill="#0f5d40"/><ellipse cx="76.76" cy="669.25" rx="6.64" ry="8.69" fill="#3f3d56"/><ellipse cx="76.76" cy="658.63" rx="6.64" ry="8.69" fill="#3f3d56"/><ellipse cx="76.76" cy="648.01" rx="6.64" ry="8.69" fill="#3f3d56"/><ellipse cx="76.76" cy="637.39" rx="6.64" ry="8.69" fill="#3f3d56"/><ellipse cx="76.76" cy="626.77" rx="6.64" ry="8.69" fill="#3f3d56"/><ellipse cx="76.76" cy="616.15" rx="6.64" ry="8.69" fill="#3f3d56"/><ellipse cx="76.76" cy="605.52" rx="6.64" ry="8.69" fill="#3f3d56"/><path d="M101.61 532.84a32.28 32.28 0 002.48-3.63l-17.45-2.84 18.87.14a31.8 31.8 0 00.6-25.19l-25.3 13.13 23.34-17.16a31.8 31.8 0 10-52.52 35.58 32.45 32.45 0 00-3.63 5.8l22.64 11.7-24.14-8.07a31.87 31.87 0 005.13 29.86 31.8 31.8 0 1050 0 31.78 31.78 0 000-39.32z" fill="#0f5d40"/><path d="M44.83 552.5a31.67 31.67 0 006.8 19.66 31.8 31.8 0 1050 0c4.24-5.41-56.8-23.23-56.8-19.66z" opacity=".1"/><g opacity=".2"><path d="M305.84 555.29c0 .94-.1 1.86-.2 2.76q-11.64-4.68-22.92-9.93a18.59 18.59 0 01-10.6-5.17c-2.19-1.1-4.37-2.24-6.54-3.39a26.82 26.82 0 011.66-3c4.2-6.66 10.6-10.83 17.65-10.6s13.15 4.78 16.93 11.66a34.37 34.37 0 014.02 17.67z" fill="#3f3d56"/><path d="M307 520.37a34.56 34.56 0 01-5.13 17.32c-4.21 6.64-10.6 10.81-17.65 10.58-.49 0-1-.06-1.45-.1a18.59 18.59 0 01-10.6-5.17 25.27 25.27 0 01-4.88-6.37 35.82 35.82 0 011.1-35c4.21-6.66 10.6-10.83 17.65-10.6s13.15 4.78 16.93 11.66a34.47 34.47 0 014.03 17.68z" fill="#3f3d56"/><ellipse cx="336.18" cy="531.28" rx="28.63" ry="21.87" transform="rotate(-88.19 287.148 533.775)" fill="#3f3d56"/><ellipse cx="337.29" cy="496.31" rx="28.63" ry="21.87" transform="rotate(-88.19 288.252 498.807)" fill="#3f3d56"/><ellipse cx="338.39" cy="461.34" rx="28.63" ry="21.87" transform="rotate(-88.19 289.351 463.833)" fill="#3f3d56"/><path d="M214.12 172.83a105.78 105.78 0 01-7.76-12.24l57.72-7.62-62.08-1.5a104.92 104.92 0 01.62-83l82 45.85-75.15-58.95a104.75 104.75 0 11169.22 122.65A105.13 105.13 0 01390 197.48l-75.77 36.38 80.33-24.17a104.85 104.85 0 01-20 97.78A104.75 104.75 0 11210 302.28a104.73 104.73 0 014.08-129.45z" fill="#0f5d40"/><path d="M399.05 243.45a104.29 104.29 0 01-24.44 64A104.75 104.75 0 11210 302.28c-13.43-18.25 189.42-70.58 189.05-58.83z" opacity=".1"/></g><g opacity=".2"><path d="M798.18 480.51c0 .67-.07 1.32-.14 2q-8.31-3.29-16.31-7.06a13.31 13.31 0 01-7.55-3.68c-1.55-.79-3.11-1.6-4.65-2.41a19.78 19.78 0 011.18-2.13c3-4.74 7.54-7.7 12.56-7.54s9.36 3.4 12.05 8.3a24.5 24.5 0 012.86 12.52z" fill="#3f3d56"/><path d="M799 455.62a24.56 24.56 0 01-3.65 12.33c-3 4.72-7.54 7.69-12.56 7.53l-1-.07a13.31 13.31 0 01-7.55-3.68 18.32 18.32 0 01-3.47-4.54 25.51 25.51 0 01.78-24.88c3-4.74 7.55-7.71 12.56-7.55s9.37 3.4 12.05 8.3a24.55 24.55 0 012.84 12.56z" fill="#3f3d56"/><ellipse cx="834.19" cy="476.87" rx="20.37" ry="15.56" transform="rotate(-88.19 785.171 479.34)" fill="#3f3d56"/><ellipse cx="834.98" cy="451.98" rx="20.37" ry="15.56" transform="rotate(-88.19 785.957 454.46)" fill="#3f3d56"/><ellipse cx="835.76" cy="427.1" rx="20.37" ry="15.56" transform="rotate(-88.19 786.738 429.573)" fill="#3f3d56"/><path d="M732.91 208.37a73.57 73.57 0 01-5.52-8.71l41.08-5.42-44.21-1.07a74.67 74.67 0 01.43-59.07L783 166.69l-53.4-41.93A74.55 74.55 0 11850 212.02a74.71 74.71 0 018.06 13.86l-53.89 25.89 57.17-17.2a74.55 74.55 0 01-14.22 69.58A74.54 74.54 0 11730 300.46a74.55 74.55 0 012.91-92.09z" fill="#0f5d40"/><path d="M864.52 258.59a74.2 74.2 0 01-17.4 45.56A74.54 74.54 0 11730 300.46c-9.58-13 134.78-50.23 134.52-41.87z" opacity=".1"/></g><g opacity=".2"><path d="M585 402.46c0 .67-.08 1.32-.15 2q-8.31-3.29-16.31-7.06a13.28 13.28 0 01-7.54-3.68c-1.56-.79-3.11-1.6-4.65-2.41a19 19 0 011.17-2.13c3-4.73 7.55-7.7 12.56-7.54s9.36 3.4 12.05 8.3a24.5 24.5 0 012.87 12.52z" fill="#3f3d56"/><path d="M585.74 377.57a24.56 24.56 0 01-3.65 12.33c-3 4.72-7.54 7.69-12.56 7.53-.35 0-.68 0-1-.07a13.28 13.28 0 01-7.54-3.68 18.11 18.11 0 01-3.48-4.54 25.48 25.48 0 01.79-24.88c3-4.74 7.54-7.71 12.56-7.55s9.36 3.4 12 8.3a24.54 24.54 0 012.88 12.56z" fill="#3f3d56"/><ellipse cx="620.97" cy="398.82" rx="20.37" ry="15.56" transform="rotate(-88.3 571.11 401.206)" fill="#3f3d56"/><ellipse cx="621.75" cy="373.93" rx="20.37" ry="15.56" transform="rotate(-88.19 572.718 376.417)" fill="#3f3d56"/><ellipse cx="622.54" cy="349.05" rx="20.37" ry="15.56" transform="rotate(-88.19 573.504 351.525)" fill="#3f3d56"/><path d="M519.68 130.28a74.87 74.87 0 01-5.52-8.71l41.08-5.42-44.24-1.07a74.62 74.62 0 01.44-59.07l58.33 32.63-53.39-41.93a74.54 74.54 0 11120.42 87.26 74.76 74.76 0 018.07 13.86L591 173.72l57.16-17.2a74.55 74.55 0 01-14.22 69.58 74.54 74.54 0 11-117.16-3.73 74.57 74.57 0 012.9-92.13z" fill="#0f5d40"/><path d="M651.29 180.54a74.2 74.2 0 01-17.4 45.56 74.54 74.54 0 11-117.11-3.73c-9.59-12.95 134.77-50.19 134.51-41.83z" opacity=".1"/></g><path d="M972.4 500.81v217.73c-58.57 8.74-118.32 10.52-177.79 12.28-165.87 4.91-332.17 9.81-497.6-1.51-73.16-5-148.13-13.76-212.25-43.7V417.37c.24-185-.76 0 0-185.56v-66.59a14.1 14.1 0 0114.1-14.1H958.3a14.1 14.1 0 0114.1 14.1v168.63c.6 166.52-.4.52 0 166.96z" fill="#3f3d56"/><rect x="344.15" y="217.75" width="368.86" height="28.56" rx="5.22" fill="#0f5d40" opacity=".3"/><path d="M687.94 233.22h-.61l-.23-.19a5.1 5.1 0 001.19-3.25 4.94 4.94 0 10-4.92 5 5.09 5.09 0 003.24-1.18l.22.19v.58l3.81 3.82 1.14-1.14zm-4.57 0a3.44 3.44 0 113.43-3.44 3.42 3.42 0 01-3.43 3.44z" fill="#444053"/><rect x="222.84" y="493.2" width="34.42" height="11.9" rx="5" fill="#3f3d56" opacity=".7"/><rect x="222.84" y="522.95" width="53.54" height="11.9" rx="5" fill="#0f5d40" opacity=".3"/><rect x="222.84" y="508.08" width="107.09" height="11.9" rx="5" fill="#0f5d40" opacity=".3"/><path d="M164.57 522.58a5.74 5.74 0 00-5.8 5.69 3.88 3.88 0 01-3.87 3.79 10 10 0 007.73 3.8 7.67 7.67 0 007.75-7.59 5.75 5.75 0 00-5.81-5.69zm26.53-17.76l-2.6-2.55a1.94 1.94 0 00-2.72 0l-17.34 17 5.32 5.22 17.32-17a1.86 1.86 0 00.02-2.67z" fill="#0f5d40"/><rect x="222.84" y="345.66" width="34.42" height="11.9" rx="5" fill="#3f3d56" opacity=".7"/><rect x="222.84" y="375.41" width="53.54" height="11.9" rx="5" fill="#0f5d40" opacity=".3"/><rect x="222.84" y="360.53" width="107.09" height="11.9" rx="5" fill="#0f5d40" opacity=".3"/><path d="M191.18 378.15L176 362.87a10.82 10.82 0 00-2.51-11.58 11 11 0 00-12.35-2.18l7.18 7.22-5 5-7.32-7.18a10.86 10.86 0 002.17 12.41 10.66 10.66 0 0011.51 2.52l15.15 15.29a1.61 1.61 0 002.34 0l3.84-3.86a1.51 1.51 0 00.17-2.35z" fill="#0f5d40"/><rect x="509.6" y="493.2" width="34.42" height="11.9" rx="5" fill="#3f3d56" opacity=".7"/><rect x="509.6" y="522.95" width="53.54" height="11.9" rx="5" fill="#0f5d40" opacity=".3"/><rect x="509.6" y="508.08" width="107.09" height="11.9" rx="5" fill="#0f5d40" opacity=".3"/><path d="M459.44 526a10 10 0 01-9.89 0c-3.87 1.19-6.24 5.09-7.12 8.54h24.12c-.87-3.45-3.23-7.35-7.11-8.54zm-4.94-18.37a8.69 8.69 0 108.69 8.68 8.69 8.69 0 00-8.69-8.68zm0 15.3a6.71 6.71 0 01-6.07-4.14h12.14a6.71 6.71 0 01-6.07 4.14z" fill="#0f5d40"/><path d="M472.09 521.37a10.07 10.07 0 01-8.4.69 12 12 0 01-2.3 2.86 11.24 11.24 0 014.9 4.33h12.91a10.72 10.72 0 00-7.11-7.88zm-4.94-18.38a8.71 8.71 0 00-7.33 4 10.78 10.78 0 015.15 7.14h8.25a6.72 6.72 0 01-6.07 4.12 6 6 0 01-2.08-.38 11.65 11.65 0 01-.54 2.07 8.35 8.35 0 002.62.4 8.69 8.69 0 000-17.38z" fill="#0f5d40"/><rect x="222.84" y="603.86" width="34.42" height="11.9" rx="5" fill="#3f3d56" opacity=".7"/><rect x="222.84" y="633.61" width="53.54" height="11.9" rx="5" fill="#0f5d40" opacity=".3"/><rect x="222.84" y="618.74" width="107.09" height="11.9" rx="5" fill="#0f5d40" opacity=".3"/><path d="M176.57 607.62h-9.82a3.28 3.28 0 00-3.32 3.24v.7h-.62a3.28 3.28 0 00-3.32 3.24v23.63a3.34 3.34 0 003.32 3.32h17.08a3.27 3.27 0 003.23-3.32v-.62h.71a3.27 3.27 0 003.23-3.32v-16.37zm0 3.66l6.84 6.84h-6.84zm3.94 27.15a.67.67 0 01-.62.7h-17.08a.73.73 0 01-.69-.7V614.8a.67.67 0 01.69-.62h.62v21c0 1.82.86 2.66 2.67 2.66h14.41zm3.93-3.94a.66.66 0 01-.61.7h-17.08a.73.73 0 01-.69-.7v-23.63a.67.67 0 01.69-.62h7.19v10.51h10.5z" fill="#0f5d40"/><rect x="509.6" y="345.66" width="34.42" height="11.9" rx="5" fill="#3f3d56" opacity=".7"/><rect x="509.6" y="375.41" width="53.54" height="11.9" rx="5" fill="#0f5d40" opacity=".3"/><rect x="509.6" y="360.53" width="107.09" height="11.9" rx="5" fill="#0f5d40" opacity=".3"/><path d="M457.32 353.37h-11.38a3.51 3.51 0 00-3.5 3.51v19.25a3.5 3.5 0 003.5 3.5h29.76a3.5 3.5 0 003.5-3.5v-15.34a3.51 3.51 0 00-3.5-3.5h-14.88l-3.5-3.94z" fill="#0f5d40"/><rect x="792.79" y="493.2" width="34.42" height="11.9" rx="5" fill="#3f3d56" opacity=".7"/><rect x="792.79" y="522.95" width="53.54" height="11.9" rx="5" fill="#0f5d40" opacity=".3"/><rect x="792.79" y="508.08" width="107.09" height="11.9" rx="5" fill="#0f5d40" opacity=".3"/><path d="M762.93 509.28l-6.77-.32-.4-4.41a1.7 1.7 0 00-1.88-1.52l-24.27 2a1.67 1.67 0 00-1.59 1.79l1.73 19.35a1.7 1.7 0 001.88 1.49l1.23-.09-.19 3.76a1.87 1.87 0 001.83 1.93l27.09 1.28a1.88 1.88 0 002-1.74l1.14-21.6a1.86 1.86 0 00-1.8-1.92zm-29.12.44l-.58 11.06-1.44 2-1.32-14.61v-.09a.89.89 0 01.78-.77l21.42-1.75a.81.81 0 01.87.64l.21 2.52-18-.86a1.9 1.9 0 00-1.94 1.86zm27.4 19.44l-7-8.17-3.07 2.82-5.67-6.63-10.07 10.72.86-16.33a.94.94 0 011-.74l23.9 1.16a.87.87 0 01.85.83z" fill="#0f5d40"/><path d="M756.89 518.79a2.63 2.63 0 10-2.62-2.63 2.64 2.64 0 002.62 2.63z" fill="#0f5d40"/><rect x="795.17" y="345.66" width="34.42" height="11.9" rx="5" fill="#3f3d56" opacity=".7"/><rect x="795.17" y="375.41" width="53.54" height="11.9" rx="5" fill="#0f5d40" opacity=".3"/><rect x="795.17" y="360.53" width="107.09" height="11.9" rx="5" fill="#0f5d40" opacity=".3"/><circle cx="762.56" cy="356.63" r="5.25" fill="#0f5d40"/><path d="M758.53 362.82l-10.42 6.94-14.44-9.62v-3.51l14.44 9.63 8.3-5.53a7.39 7.39 0 01-.1-8h-23.07a3.52 3.52 0 00-3.51 3.51v21.88a3.52 3.52 0 003.51 3.51H763a3.51 3.51 0 003.5-3.51v-15.2a7.37 7.37 0 01-8-.06z" fill="#0f5d40"/><ellipse cx="509.64" cy="746.02" rx="26.08" ry="5.01" fill="#0f5d40"/><ellipse cx="509.21" cy="743.89" rx="3.04" ry="3.97" fill="#3f3d56"/><ellipse cx="509.21" cy="739.03" rx="3.04" ry="3.97" fill="#3f3d56"/><ellipse cx="509.21" cy="734.17" rx="3.04" ry="3.97" fill="#3f3d56"/><ellipse cx="509.21" cy="729.31" rx="3.04" ry="3.97" fill="#3f3d56"/><ellipse cx="509.21" cy="724.46" rx="3.04" ry="3.97" fill="#3f3d56"/><ellipse cx="509.21" cy="719.6" rx="3.04" ry="3.97" fill="#3f3d56"/><ellipse cx="509.21" cy="714.74" rx="3.04" ry="3.97" fill="#3f3d56"/><path d="M520.57 681.5a13.59 13.59 0 001.13-1.67l-8-1.31 8.62.07a14.59 14.59 0 00.28-11.52l-11.57 6 10.67-7.85a14.54 14.54 0 10-24 16.28 15.11 15.11 0 00-1.66 2.65l10.36 5.38-11-3.7a14.53 14.53 0 002.34 13.65 14.54 14.54 0 1022.86 0 14.55 14.55 0 000-18z" fill="#0f5d40"/><path d="M494.6 690.49a14.45 14.45 0 003.11 9 14.54 14.54 0 1022.86 0c1.95-2.48-25.97-10.63-25.97-9z" opacity=".1"/><path d="M802 436.86a13.68 13.68 0 01-1-2.7c-.1-1.07.32-2.48-.63-3-.53-.29-1.27-.07-1.74-.45a2.15 2.15 0 01-.51-1.2 4.1 4.1 0 00-3.8-3c1-2.71 4.68-3.37 6.3-5.76.81-1.19.55-3.38-.88-3.39a2.49 2.49 0 00-1 .25l-5.33 2.2a27.35 27.35 0 00-3 1.39c-2.93 1.67-5.12 4.38-7.09 7.13a30.49 30.49 0 00-4.41 8 18 18 0 00-.94 5.49v.56c-.87.15-1.58.53-2.49.71l-2.07 5.47a6.93 6.93 0 01-1.35 2.49 12.52 12.52 0 01-1.46 1.15 8.45 8.45 0 00-2.91 7.37 7.93 7.93 0 00-4.66 9.78 9.31 9.31 0 00-6.81 6 4.43 4.43 0 01-.89 1.88 3.55 3.55 0 01-2.37.73c-2.34.15-4.38 2-6.49 1a13.21 13.21 0 00-7.71-1.08 5.77 5.77 0 01-1.65.15 4.43 4.43 0 01-1.35-.47 10.46 10.46 0 00-3.06-1.21 2.84 2.84 0 00-2.9 1.12c-.74-.81-1.18-1.86-1.85-2.73a3 3 0 00-2.82-1.35c.7-.63 0-1.89-.93-2.11a11.56 11.56 0 00-2.81.1c-2.44 0-4.32-2.24-6.69-2.83-2.18-.53-5.09.11-6.21-1.85-.35-.63-.45-1.45-1-1.92a3.64 3.64 0 00-.71-1.45c-.9-1-2.41-1.16-3.76-1.12a15.68 15.68 0 00-4.37.75c0-.17-.09-.36-.15-.56a11.09 11.09 0 00-4.84-5.94 20 20 0 00-5.66-2.26v-.53a22.55 22.55 0 011.16-7.43c.08-.26.18-.52.27-.78a26.6 26.6 0 0012-44.63 6.83 6.83 0 00-.21-1.6 7.86 7.86 0 00-1.6-3.12c-1.22-2.72-3.12-3.92-5.55-5.06-.7-.33-1.44-.65-2.22-1-3.87-1.74-7.61-4.3-12-4.29-4 0-7.86 2.21-11.82 2.13h-.95c-1.11-.13-2.44-.39-3.17.46a4.5 4.5 0 00-.56 1.09 2.64 2.64 0 01-.2.37 4.4 4.4 0 01-.51.69c-1.28 1.4-3.43 2-5.2 2.94-4 2.05-6.62 6.23-7.66 10.61s-.68 9 .1 13.44c.4 2.22 1.26 4.74 2.84 6.14s-13.37 9.51-10.93 10.86c1.33.74 6.87-2.77 11.64-6.12.05.2.09.41.15.61a44 44 0 002.18 6.25c1 2.39 2.44 5 4.93 5.69a5.36 5.36 0 001.69.19h.44a39.39 39.39 0 01-1.15 10.87 6.61 6.61 0 00-4.09 1.13 3.29 3.29 0 01-1.66.88 2.89 2.89 0 01-1.71-.84 9.7 9.7 0 00-12.14.64c-4.84 4.57-4.29 13.49-10 16.95-1.56.95-3.56 1.46-4.48 3.05a11.41 11.41 0 01-.77 1.47 4.05 4.05 0 01-1.36 1 26.48 26.48 0 00-4.68 2.7 6.72 6.72 0 00-2.69 4.54 8.61 8.61 0 00.82 3.81 36.44 36.44 0 003.12 6 6.38 6.38 0 00-1.26 2.95c-.4 2.81.94 5.58 1.09 8.42.13 2.48-.66 4.9-1.1 7.34-1.76 9.54 1.61 19.2 5 28.26a14.58 14.58 0 011.2 4.65c.09 3-1.6 5.67-2.07 8.59-1 6.14 3.53 11.92 3.63 18.13 0 2.87-.86 5.78-.14 8.55.47 1.85 1.62 3.44 2.44 5.17 1.44 3.06 1.83 6.53 3.21 9.62a23.07 23.07 0 007.12 8.48c1.73 5.49-.73 12.12 0 18q1.41-.56 2.85-1a41.17 41.17 0 006.3 24.84c1.55 2.42 3.37 4.68 4.54 7.31a34.26 34.26 0 011.77 5.79q2.51 10.47 5 20.92c1.36 5.65 2.73 11.4 2.32 17.2-.28 4-1.3 8.57 1.18 11.77a8.51 8.51 0 011.49 2.06 5.22 5.22 0 010 2.72 180.71 180.71 0 00-2.48 20.39c-.56.75-1.12 1.51-1.63 2.26-4.11 6-6.09 13.21-7.69 20.32a245.83 245.83 0 00-5.16 42.44 28.38 28.38 0 00-5.26 6.41c-2.15 4-2.43 8.7-2.66 13.24a4.73 4.73 0 00.24 2.18 4.48 4.48 0 002.24 1.68l1.24.59c-.27 1-.51 2-.72 3.05-1.58-1.78-4.39-4.6-4.87-2.54a101.78 101.78 0 00-2.56 21 1.77 1.77 0 001.9 2.12A116.25 116.25 0 00660 848c5.65 0 11.29-.46 16.92-.89l5.77-.44a127.7 127.7 0 0017.67-2.19c2.55-.56 5.18-1.35 7.1-3.14s2.86-4.85 1.54-7.12c-1.61-2.74-5.37-2.94-8.51-3.38a27.85 27.85 0 01-8.92-2.84c-.63-.32-1.24-.68-1.85-1 .16 0 .33-.08.48-.14 2.7-.91 4.85-3 7.39-4.25 3-1.45 6.31-1.78 9.57-2.19s6.62-1 9.33-2.86c2.54-1.74 4.34-4.91 3.75-7.89a5.15 5.15 0 00-.16-.62c-1-3.23-4.5-5-7.76-5.8s-6.8-1.28-9.44-3.38l-.39-.31c-.22-.19-.45-.37-.69-.56a5.62 5.62 0 00.77-3.26c-.14-1.79-1.18-3.37-1.89-5-1.39-3.25-1.5-6.88-1.88-10.39-.94-8.83-3.65-17.35-5.69-26-.23-1-.45-2-.67-3a62.86 62.86 0 017.27-11.64 38 38 0 007-13.77c.42-1.54.73-3.1 1.05-4.67Q713.18 694.18 718 667a45.19 45.19 0 00.91-7.84 23.89 23.89 0 001.35-7.43c.94-3.67 1.89-7.52 1.12-9.92-.54-1.7-.81-7.51-1.11-13.08a50.24 50.24 0 00-.54-8.93c-.09-.51-.19-1-.3-1.51q-.09-.45-.18-.75a25.68 25.68 0 00-1.76-4.86 23.63 23.63 0 00-1.32-2.71 12.34 12.34 0 00-1-1.48 62 62 0 016.22.58c.5.07 1.12.11 1.43-.3a1.47 1.47 0 00.18-.77 12.75 12.75 0 00-1.62-6.76c-.8-1.42-1.91-2.8-1.88-4.43a6.53 6.53 0 01.55-2.2l2.77-7.44c2.35-6.29 1.23-13.58 2.45-20.18a118.46 118.46 0 001.82-15.61c.23-4.47.09-9.32-2.6-12.9a14.73 14.73 0 01-2-2.84 8.41 8.41 0 01-.48-3.39q-.07-10.51.42-21a206.38 206.38 0 0035.05-4 22 22 0 004-1.08 20.19 20.19 0 004-2.53c3.93-2.84 7.92-5.73 10.91-9.55a32.36 32.36 0 006.46-15.94c2.84-2.63 4.35-6.37 5.77-10a15.42 15.42 0 001.32-4.85c.07-1.72-1.06-3.52-.74-5.21a13.78 13.78 0 014.19-7.58 2.74 2.74 0 001-1.33 2.12 2.12 0 00-.23-1.3l-.09-.15c.28-.17.54-.35.81-.53.93-.66 1.82-1.39 2.69-2.1a17 17 0 003.49-3.54 5.75 5.75 0 00.94-4.7zM673.69 820.15c-.24 0-.48 0-.71.06a9.57 9.57 0 00-2.54.73l-.19.1c1.1-2.38 2.14-4.8 3.08-7.26.11-.29.21-.58.32-.88l-.12 1.64a20.22 20.22 0 00.16 5.61z" transform="translate(-50 -46.63)" fill="url(#a)"/><path d="M638 409.1c.1 3.88 1.42 7.64 1.62 11.52-11.43.57-22.72-5-34-3.28 3.17-2.05 4.86-5.74 5.86-9.37a38.9 38.9 0 001.11-14.41 6.61 6.61 0 00-.14-.79c-.42-1.9-1.51-4.59-1.22-6.08.39-2 2.25-1.59 3.93-1.48a150.51 150.51 0 0115.26 2c1.32.23 14.13 3.43 14.33 3.1a59.69 59.69 0 00-5.55 11.43 22.32 22.32 0 00-1.2 7.36zm113.05-12a16.64 16.64 0 01-3.49 3.52c-.87.71-1.76 1.44-2.69 2.09a11.5 11.5 0 01-5.72 2.33c-2.72.18-8.51-1.42-10.2-3.75a6.77 6.77 0 01-1-3.91 17.88 17.88 0 01.94-5.46 30.42 30.42 0 014.41-8c2-2.74 4.16-5.43 7.09-7.09a27.35 27.35 0 013-1.39l5.33-2.18a2.5 2.5 0 011-.26c1.43 0 1.69 2.2.88 3.38-1.62 2.38-5.27 3-6.3 5.73a4.09 4.09 0 013.8 2.95 2.11 2.11 0 00.51 1.19c.47.37 1.21.16 1.74.45.95.5.53 1.91.63 3a13.5 13.5 0 001 2.68 5.69 5.69 0 01-.93 4.72z" fill="#ee8e9e"/><path d="M593.4 786.45c.88-.88 2.32-.73 3.55-.54a132 132 0 0019.95 1.61c.84-4.08-1.59-8-2.37-12.14a10.76 10.76 0 00-.8-3.08c-.94-1.8-3.06-2.63-5.05-3-3.59-.76-9.21-2.09-11.22 1.54-2.41 4.31-3.18 10.75-4.06 15.61z" fill="#65617d"/><path d="M666.49 771.02c-2.71 1.85-6.07 2.42-9.33 2.84s-6.61.74-9.57 2.19c-2.54 1.26-4.69 3.32-7.39 4.22a15.31 15.31 0 01-7.67.12c-3-.57-6.26-1.67-7.89-4.29-1.46-2.32-1.31-5.27-1.11-8 .24-3.09.47-6.2.69-9.3a4.4 4.4 0 01.58-2.24c2.19-3.2 7.52 1.33 10.37 1.33 4.52 0 9.37-2.46 12.62-5.45a3.89 3.89 0 011-.74c1.29-.58 2.58.49 3.72 1.42l.39.31c2.64 2.09 6.18 2.52 9.44 3.37s6.75 2.55 7.76 5.77a4.57 4.57 0 01.16.61c.57 2.95-1.26 6.1-3.77 7.84z" fill="#3f3d56"/><path d="M666.49 771.02c-2.71 1.85-6.07 2.42-9.33 2.84s-6.61.74-9.57 2.19c-2.54 1.26-4.69 3.32-7.39 4.22a15.31 15.31 0 01-7.67.12c-3-.57-6.26-1.67-7.89-4.29-1.46-2.32-1.31-5.27-1.11-8 .24-3.09.47-6.2.69-9.3a4.4 4.4 0 01.58-2.24c2.19-3.2 7.52 1.33 10.37 1.33 4.52 0 9.37-2.46 12.62-5.45a3.89 3.89 0 011-.74c1.29-.58 2.58.49 3.72 1.42l.39.31c2.64 2.09 6.18 2.52 9.44 3.37s6.75 2.55 7.76 5.77a4.57 4.57 0 01.16.61c.57 2.95-1.26 6.1-3.77 7.84z" fill="#434175"/><path d="M666.49 772.06c-2.71 1.85-6.07 2.43-9.33 2.85s-6.61.73-9.57 2.18c-2.54 1.26-4.69 3.32-7.39 4.22a15.31 15.31 0 01-7.67.12 12.6 12.6 0 01-7.89-5.33c-1.46-2.32-1.31-5.27-1.11-8 .24-3.09.47-6.2.69-9.3a4.4 4.4 0 01.58-2.24c2.19-3.2 7.52 1.33 10.37 1.33 4.52 0 9.37-2.46 12.62-5.45a3.89 3.89 0 011-.74c1.29-.58 2.58.49 3.72 1.42a26.4 26.4 0 01-3.17 6.56 13.63 13.63 0 01-10 6.22c-2 .15-4.09-.25-6 .27s-3.77 2.52-3.08 4.42 3.06 2.25 5 2.36a22.38 22.38 0 008.21-.58c1.6-.53 3.07-1.41 4.62-2.06 6.62-2.74 15-1.21 20.46-5.85a13 13 0 011.67-1.28c1.45 2.99-1.22 7.19-3.73 8.88z" fill="#e8eaf2"/><path d="M666.49 772.06c-2.71 1.85-6.07 2.43-9.33 2.85s-6.61.73-9.57 2.18c-2.54 1.26-4.69 3.32-7.39 4.22a15.31 15.31 0 01-7.67.12 12.6 12.6 0 01-7.89-5.33c-1.46-2.32-1.31-5.27-1.11-8 .24-3.09.47-6.2.69-9.3a4.4 4.4 0 01.58-2.24c2.19-3.2 7.52 1.33 10.37 1.33 4.52 0 9.37-2.46 12.62-5.45a3.89 3.89 0 011-.74c1.29-.58 2.58.49 3.72 1.42a26.4 26.4 0 01-3.17 6.56 13.63 13.63 0 01-10 6.22c-2 .15-4.09-.25-6 .27s-3.77 2.52-3.08 4.42 3.06 2.25 5 2.36a22.38 22.38 0 008.21-.58c1.6-.53 3.07-1.41 4.62-2.06 6.62-2.74 15-1.21 20.46-5.85a13 13 0 011.67-1.28c1.45 2.99-1.22 7.19-3.73 8.88z" opacity=".05"/><path d="M594.64 569.44a40.77 40.77 0 005.58 30c1.55 2.4 3.37 4.66 4.54 7.27a33.77 33.77 0 011.77 5.77l5 20.8c1.36 5.62 2.73 11.34 2.32 17.11-.28 4-1.3 8.53 1.18 11.71a8.46 8.46 0 011.49 2.05 5.15 5.15 0 010 2.7c-2.54 15.11-4.43 30.9.16 45.51 4.17 13.25 4.41 27.93 7.95 41.35a9.24 9.24 0 002.19 4.59 7.27 7.27 0 003.3 1.56c5.22 1.25 10.73-.21 15.59-2.46 3.42-1.59 7.1-4.37 6.81-8.12-.14-1.79-1.18-3.36-1.89-5-1.39-3.23-1.5-6.83-1.88-10.33-.94-8.78-3.65-17.26-5.69-25.84s-3.44-17.57-1.71-26.23a229.79 229.79 0 0116.87-51.9 6.27 6.27 0 011.55-2.32 16.86 16.86 0 002.19-1.49 6.66 6.66 0 001-2.72c.76-2.74 3-4.77 4.53-7.17 3.83-6.08 2.62-13.87 2.48-21.05-.14-7 .86-14-.28-20.92s-5.04-13.94-11.69-16.06c-3.29-1.07-6.85-.82-10.29-.48-18.23 1.8-35.95 5.11-53.07 11.67z" fill="#696791"/><path d="M594.64 570.44a40.77 40.77 0 005.58 30c1.55 2.4 3.37 4.66 4.54 7.27a33.77 33.77 0 011.77 5.77l5 20.8c1.36 5.62 2.73 11.34 2.32 17.11-.28 4-1.3 8.53 1.18 11.71a8.46 8.46 0 011.49 2.05 5.15 5.15 0 010 2.7c-2.54 15.11-4.43 30.9.16 45.51 4.17 13.25 4.41 27.93 7.95 41.35a9.24 9.24 0 002.19 4.59 7.27 7.27 0 003.3 1.56c5.22 1.25 10.73-.21 15.59-2.46 3.42-1.59 7.1-4.37 6.81-8.12-.14-1.79-1.18-3.36-1.89-5-1.39-3.23-1.5-6.83-1.88-10.33-.94-8.78-3.65-17.26-5.69-25.84s-3.44-17.57-1.71-26.23a229.79 229.79 0 0116.87-51.9 6.27 6.27 0 011.55-2.32 16.86 16.86 0 002.19-1.49 6.66 6.66 0 001-2.72c.76-2.74 3-4.77 4.53-7.17 3.83-6.08 2.62-13.87 2.48-21.05-.14-7 .86-14-.28-20.92s-5.04-13.94-11.69-16.06c-3.29-1.07-6.85-.82-10.29-.48-18.23 1.8-35.95 5.11-53.07 11.67z" opacity=".1"/><path d="M668.92 613.23a44 44 0 01-.91 8.07q-4.83 27-10.28 54c-.32 1.56-.63 3.12-1.05 4.65a37.78 37.78 0 01-7 13.7c-15.15 18.89-16.46 46.32-24.68 69.1-.56 1.54-1.11 3.09-1.7 4.61a115.75 115.75 0 01-5.07 11.31 3.22 3.22 0 01-1 1.35 3.08 3.08 0 01-1.65.33 48.31 48.31 0 01-21.36-4.86 4.48 4.48 0 01-2.27-1.89 4.66 4.66 0 01-.24-2.17c.23-4.51.51-9.19 2.66-13.16a28.22 28.22 0 015.26-6.38 242.36 242.36 0 015.16-42.22c1.6-7.08 3.58-14.23 7.69-20.21 3-4.42 7.38-8.78 6.84-14.11-.23-2.34-1.21-5.25.69-6.62.83-.61 2.06-.69 2.63-1.55a3 3 0 00.37-1.32 32.66 32.66 0 00-.68-10.93 58.79 58.79 0 01-1.63-7.13 9 9 0 011.79-6.88c.1-4.87 0-9.92.07-14.78a27.16 27.16 0 00-.69-8.25c-.36-1.27-.93-2.49-1.21-3.79-1-4.67 1.52-10.27-1.5-14-1.26-1.54-3.2-2.31-4.85-3.42a17.71 17.71 0 01-6.66-9.57 52.59 52.59 0 01-1.9-11.74 11.28 11.28 0 010-2.53 4.35 4.35 0 01.34-1.27c.94-2.11 3.46-2.93 5.71-3.47a185.15 185.15 0 0143.61-5.1c5.44-3.7 8.49-2.37 10.8 1.54a41.09 41.09 0 013.07 7.51c1 3.18 1.12 21 2.14 24.17 1.3 4.15-2.55 12.65-2.5 17.01z" fill="#696791"/><path d="M570.68 451.29c-.4 2.8.94 5.55 1.09 8.38.13 2.47-.66 4.88-1.1 7.31-1.76 9.48 1.61 19.09 5 28.11a14.4 14.4 0 011.2 4.62c.09 2.94-1.6 5.64-2.07 8.55-1 6.11 3.53 11.85 3.63 18 0 2.85-.86 5.75-.14 8.5.47 1.84 1.62 3.43 2.43 5.14 1.45 3 1.84 6.5 3.22 9.57 2.49 5.55 7.84 9.18 12.94 12.51 2.89-1 6-2.11 7.62-4.72a11.63 11.63 0 001.33-4.14c1.1-6.33 1.06-12.79 1-19.21a118.59 118.59 0 00-.83-16.54c-1-7-3.29-13.7-4.92-20.57-2-8.65-3.09-17.59-6.28-25.9-2.81-7.29-7.17-13.84-11.77-20.12-1.75-2.39-3.14-5.81-6.54-5.26a7.13 7.13 0 00-5.81 5.77z" fill="#434175"/><path d="M570.68 449.29c-.4 2.8.94 5.55 1.09 8.38.13 2.47-.66 4.88-1.1 7.31-1.76 9.48 1.61 19.09 5 28.11a14.4 14.4 0 011.2 4.62c.09 2.94-1.6 5.64-2.07 8.55-1 6.11 3.53 11.85 3.63 18 0 2.85-.86 5.75-.14 8.5.47 1.84 1.62 3.43 2.43 5.14 1.45 3 1.84 6.5 3.22 9.57 2.49 5.55 7.84 9.18 12.94 12.51 2.89-1 6-2.11 7.62-4.72a11.63 11.63 0 001.33-4.14c1.1-6.33 1.06-12.79 1-19.21a118.59 118.59 0 00-.83-16.54c-1-7-3.29-13.7-4.92-20.57-2-8.65-3.09-17.59-6.28-25.9-2.81-7.29-7.17-13.84-11.77-20.12-1.75-2.39-3.14-5.81-6.54-5.26a7.13 7.13 0 00-5.81 5.77z" opacity=".05"/><path d="M644.66 390.28a59.69 59.69 0 00-5.55 11.43 26.19 26.19 0 01-6.3.76c-8.25 0-14.08-4.69-18.93-10.62-.42-1.9-3-3.67-2.74-5.16.39-2 2.25-1.59 3.93-1.48a150.51 150.51 0 0115.26 2c1.32.16 14.13 3.4 14.33 3.07z" opacity=".1"/><circle cx="632.81" cy="375.34" r="26.41" fill="#ee8e9e"/><path d="M666.18 564.56c-4.57-.27-9.18-.08-13.76.1a47.15 47.15 0 00-8.55.88c-3.47.79-6.71 2.37-10.13 3.36-5.48 1.59-11.26 1.66-16.93 2.22a94.36 94.36 0 00-11.09 1.74 4.35 4.35 0 01.34-1.27c.94-2.11 3.46-2.93 5.71-3.47a185.15 185.15 0 0143.61-5.1c5.44-3.65 8.49-2.37 10.8 1.54z" opacity=".1"/><path d="M648.18 418.58c-1.15 1.33-2.7 2.8-4.4 2.37a6.08 6.08 0 01-1.72-.92c-3-2-6.78-2.42-10.36-3a152.4 152.4 0 01-21.34-4.8 21.93 21.93 0 00-6.32-1.28c-4.47 0-8.44 3-11.24 6.48s-4.8 7.57-7.55 11.1c-2 2.52-4.3 4.74-6.13 7.35-4.62 6.59-5.62 15.19-4.42 23.15s4.37 15.47 7.53 22.88a78.47 78.47 0 006.14 12.46c-1.06 6-.5 13 2.38 18.4.93 1.77 2.08 3.49 2.39 5.47a13.85 13.85 0 01-.16 4l-1.35 9.56c-.41 2.91-.82 5.82-1.35 8.72-1 5.29-2.28 11 .17 15.82 2.93 5.74-.15 13.09.62 19.49a97.8 97.8 0 0125.74-6.11c5.67-.56 11.45-.63 16.93-2.22 3.42-1 6.66-2.57 10.13-3.37a47 47 0 018.55-.87c6.33-.25 12.7-.51 19 .42.5.08 1.12.12 1.43-.29a1.47 1.47 0 00.19-.75 12.63 12.63 0 00-1.62-6.72c-.8-1.41-1.91-2.79-1.88-4.41a6.48 6.48 0 01.55-2.19l2.77-7.4c2.35-6.25 1.23-13.51 2.45-20.07a117.46 117.46 0 001.82-15.53c.23-4.45.09-9.27-2.6-12.83a14.67 14.67 0 01-2-2.83 8.34 8.34 0 01-.48-3.37q-.09-13.36.73-26.72c-2.34-4.21-4.79-8.51-7.13-12.72-2.73-4.9-5.49-9.9-6.59-15.4-.73-3.63-.71-7.38-1.23-11.05a4.9 4.9 0 00-.93-2.59 4.69 4.69 0 00-3.76-1.11 16.44 16.44 0 00-4.96.88z" fill="#434175"/><path d="M744.87 402.71a11.5 11.5 0 01-5.72 2.33c-2.72.18-8.51-1.42-10.2-3.75a6.77 6.77 0 01-1-3.91 4.91 4.91 0 011.14-.22 29.88 29.88 0 018.86.36c2.88.7 5.66 2.45 6.87 5.16z" opacity=".1"/><path d="M657 459.83c1.61 2 3.28 4.06 5.56 5.25 2.63 1.36 5.72 1.39 8.67 1.33a208 208 0 0036.23-4 22.81 22.81 0 004-1.07 20.6 20.6 0 004-2.52c3.93-2.82 7.92-5.7 10.91-9.51a32.05 32.05 0 006.46-15.85c2.84-2.61 4.35-6.34 5.77-9.93a15.24 15.24 0 001.32-4.82c.07-1.71-1.06-3.5-.74-5.18a13.64 13.64 0 014.19-7.54 2.74 2.74 0 001-1.33 2.1 2.1 0 00-.23-1.29c-1.22-2.71-4-4.45-6.88-5.16a29.61 29.61 0 00-8.87-.36 20.06 20.06 0 00-2.9.78l-2.07 5.43a6.88 6.88 0 01-1.35 2.48 12.52 12.52 0 01-1.46 1.15 8.38 8.38 0 00-2.91 7.33 7.88 7.88 0 00-4.66 9.72 9.3 9.3 0 00-6.81 6 4.45 4.45 0 01-.89 1.87 3.66 3.66 0 01-2.34.76c-2.34.14-4.38 2-6.49 1a13.29 13.29 0 00-7.71-1.08 5.77 5.77 0 01-1.65.15 4.43 4.43 0 01-1.35-.47 10.72 10.72 0 00-3.06-1.2 2.84 2.84 0 00-2.9 1.12c-.74-.81-1.18-1.85-1.85-2.72a3 3 0 00-2.82-1.35c.7-.62 0-1.87-.93-2.1a12.66 12.66 0 00-2.81.1c-2.44 0-4.32-2.23-6.69-2.81-2.18-.53-5.09.11-6.21-1.84-.39-.69-.47-1.63-1.14-2a2.2 2.2 0 00-1.48-.17 14.24 14.24 0 00-4.45 1.35c-2.29 9-1.09 18.24.65 27.3a24.07 24.07 0 004.89 11.18z" fill="#434175"/><path d="M656.93 491.88l-11.37 22.94c1.23-2.13 3.82-3 5.87-4.31a15.54 15.54 0 005.57-7.54 47.14 47.14 0 002.15-9.29c.23-1.45.71-3.49 0-4.81-1.26.27-1.68 1.94-2.22 3.01zm-32.72 19.49c-2.57 2.54-5.71 4.41-8.53 6.66-6.6 5.26-11.3 12.46-15.89 19.53a30.77 30.77 0 00-3.25 5.92c.54.46 1.34 0 1.88-.49l8.93-7.84a20.19 20.19 0 003-3c1.55-2.09 2.24-4.69 3.65-6.88a26.84 26.84 0 015.43-5.53c2.05-1.76 11.47-9.73 9.18-12.83-1.69.8-3.05 3.1-4.4 4.46z" opacity=".1"/><path d="M643.72 411.95a26.78 26.78 0 00-9.45-3.11 20 20 0 00-6-.43c-1.86.23-3.65.95-5.52 1-2.63.15-5.14-.92-7.68-1.61s-5.47-1-7.6.57a3.29 3.29 0 01-1.66.88 3 3 0 01-1.71-.84 9.74 9.74 0 00-12.14.64c-4.84 4.54-4.29 13.41-10 16.86-1.56 1-3.56 1.45-4.48 3a12 12 0 01-.77 1.46 4 4 0 01-1.36 1 26.43 26.43 0 00-4.68 2.69 6.66 6.66 0 00-2.69 4.51 8.53 8.53 0 00.82 3.79 35.62 35.62 0 0034.61 22.13 5.42 5.42 0 003.63-1.13 6.93 6.93 0 001.27-2.09c2.67-5.59 7.68-9.72 10.86-15 1.89-3.17 3.11-6.72 5.09-9.84 3-4.73 7.54-8.23 12-11.62 2.52-1.91 5.31-3.92 8.47-3.79 2.81.12 4.86.27 3.82-3.17a11 11 0 00-4.83-5.9z" fill="#434175"/><path d="M643.72 411.95a26.78 26.78 0 00-9.45-3.11 20 20 0 00-6-.43c-1.86.23-3.65.95-5.52 1-2.63.15-5.14-.92-7.68-1.61s-5.47-1-7.6.57a3.29 3.29 0 01-1.66.88 3 3 0 01-1.71-.84 9.74 9.74 0 00-12.14.64c-4.84 4.54-4.29 13.41-10 16.86-1.56 1-3.56 1.45-4.48 3a12 12 0 01-.77 1.46 4 4 0 01-1.36 1 26.43 26.43 0 00-4.68 2.69 6.66 6.66 0 00-2.69 4.51 8.53 8.53 0 00.82 3.79 35.62 35.62 0 0034.61 22.13 5.42 5.42 0 003.63-1.13 6.93 6.93 0 001.27-2.09c2.67-5.59 7.68-9.72 10.86-15 1.89-3.17 3.11-6.72 5.09-9.84 3-4.73 7.54-8.23 12-11.62 2.52-1.91 5.31-3.92 8.47-3.79 2.81.12 4.86.27 3.82-3.17a11 11 0 00-4.83-5.9z" opacity=".05"/><path d="M657.47 794.73c-1.92 1.79-4.55 2.57-7.1 3.12a127.7 127.7 0 01-17.67 2.19l-5.77.44c-5.63.43-11.27.86-16.92.88a117.17 117.17 0 01-20.82-1.8 2.28 2.28 0 01-1.65-.8 2.24 2.24 0 01-.25-1.31 100.74 100.74 0 012.56-20.9c.65-2.81 5.7 3.5 5.93 3.77a5.76 5.76 0 004.59 2.43c5.81.32 12.32-3.21 16.93-6.35a22.18 22.18 0 013.14-1.95 9.19 9.19 0 012.54-.72 15.28 15.28 0 018.64 1.75c3.47 1.72 6.51 4.19 10 6a28.06 28.06 0 008.92 2.82c3.14.43 6.9.64 8.51 3.36 1.28 2.25.32 5.29-1.58 7.07z" fill="#434175"/><path d="M657.47 795.77c-1.92 1.79-4.55 2.57-7.1 3.12a127.7 127.7 0 01-17.67 2.19l-5.77.44c-5.63.43-11.27.86-16.92.88a116.24 116.24 0 01-20.82-1.8 2.27 2.27 0 01-1.65-.79 9.26 9.26 0 01-1.29-2.36c.12-7 2-14.05 3.6-20.9.65-2.81 5.7 3.5 5.93 3.77a5.76 5.76 0 004.59 2.43c5.81.32 12.32-3.21 16.93-6.35a22.18 22.18 0 013.14-1.95 9.19 9.19 0 012.54-.72c-.75 4.18-6.74 9.23-9.84 10.77-6.26 3.11-13.7 1.55-20.68 1.92a3 3 0 00-1.47.35c-.83.56-.88 1.75-.86 2.75.06 1.66.27 3.62 1.72 4.46a4.94 4.94 0 002.32.49 327.89 327.89 0 0051.57-1.81 28.23 28.23 0 008.4-1.87 21.44 21.44 0 004.87-3.14c2.2 1.72.36 6.34-1.54 8.12z" fill="#e8eaf2"/><path d="M643.09 375.06c-.1 2.73 1.76 8-3.35 6.55-3-.88-3.9-4.49-7.76-3.69s-4.76 5.57-6.06 8.68a16.59 16.59 0 01-12 9.72 7.26 7.26 0 01-3.31 0c-2.49-.71-3.91-3.28-4.93-5.66a44.08 44.08 0 01-2.18-6.22 25.31 25.31 0 01-.79-4.56 19.48 19.48 0 010-3.15c.46-6.21 4-11.87 8.52-16.15s10-7.38 15.45-10.43a22.9 22.9 0 015.7-2.54 19.21 19.21 0 016-.24 20.85 20.85 0 017.66 1.8 10.71 10.71 0 012.69 1.89 8.11 8.11 0 012.34 3.89c1 4-1.58 7.63-3.66 10.8-1.9 2.81-4.19 5.79-4.32 9.31z" fill="#434175"/><path d="M729 433.67c-1.09-2.75-5.67-10.36-4.35-13a33.77 33.77 0 013.49 6.24c.86 2.15.18 5.01.86 6.76zm-81.53-67.93c2.08-3.17 4.64-6.79 3.66-10.8a8.35 8.35 0 00-3-4.44 7.27 7.27 0 01.76 1.87c1 4-1.58 7.62-3.66 10.8-1.85 2.82-4.14 5.81-4.28 9.32-.1 2.73 1.77 8-3.34 6.55-3-.88-3.9-4.49-7.77-3.69s-4.75 5.56-6.06 8.68a16.57 16.57 0 01-12 9.72 7.26 7.26 0 01-3.31 0 5.05 5.05 0 01-1.56-.77 6.76 6.76 0 003.77 3.34 7.44 7.44 0 003.32 0 16.63 16.63 0 0012-9.73c1.31-3.12 2.16-7.86 6.06-8.67s4.72 2.8 7.77 3.68c5.11 1.48 3.24-3.82 3.34-6.55.16-3.5 2.46-6.49 4.3-9.31z" opacity=".1"/><path d="M648.6 360.31a21.84 21.84 0 01-1.56 2.24 26.58 26.58 0 01-3.61 3.74c-.79.68-1.6 1.31-2.44 1.91a38.47 38.47 0 01-4.93 2.95 91.47 91.47 0 01-15.78 5.65l-10.54 3.07c-1.3 1-3.67 2.74-6.28 4.57a25.31 25.31 0 01-.79-4.56 19.48 19.48 0 010-3.15c.46-6.21 4-11.87 8.52-16.15s10-7.38 15.45-10.43a22.9 22.9 0 015.7-2.54 19.21 19.21 0 016-.24 20.85 20.85 0 017.66 1.8 10.71 10.71 0 012.69 1.89 10.14 10.14 0 011.35 2.86c.66 2.15-.26 4.45-1.44 6.39z" opacity=".1"/><path d="M648.6 359.6a21.84 21.84 0 01-1.56 2.24 26.58 26.58 0 01-3.61 3.74c-.79.68-1.6 1.31-2.44 1.91a39.65 39.65 0 01-4.93 2.95 91.47 91.47 0 01-15.78 5.65l-10.54 3.06c-3.68 2.79-16 11.91-18.07 10.77-2.44-1.34 10.93-10.81 10.93-10.81l.61.47c-2-1.23-3-4.08-3.42-6.55-.78-4.42-1.15-9-.1-13.37s3.67-8.51 7.66-10.55c1.77-.92 3.92-1.53 5.2-2.93a4.4 4.4 0 00.51-.69 2.08 2.08 0 00.2-.36 4.32 4.32 0 01.56-1.09c.73-.84 2.06-.59 3.17-.45h.36a5.68 5.68 0 00.59 0c4 .09 7.81-2.12 11.82-2.12 4.39 0 8.13 2.54 12 4.28.78.35 1.52.67 2.22 1 2.8 1.3 4.9 2.69 6 6.38.72 2.24-.2 4.55-1.38 6.47z" fill="#0f5d40"/><path d="M617.94 343.65a1.8 1.8 0 01-.42 2.32 3.2 3.2 0 01-1.66.59 11.2 11.2 0 01-1.3.1 3.58 3.58 0 01-1.71-.29 2.2 2.2 0 01-.3-.19 4.4 4.4 0 00.51-.69c.1.08.2.06.59 0a9.13 9.13 0 002.14-.36 2.38 2.38 0 00.8-.39 2.48 2.48 0 00.76-1.15zm-15.08 35.36a4.87 4.87 0 001.83.68 8.29 8.29 0 001.41.23 7.84 7.84 0 003.45-1" opacity=".1"/></svg>
\ No newline at end of file
+<svg id="a91a722e-5259-4ef2-8c31-2e8a1147b313" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1100" height="806.74" viewBox="0 0 1100 806.74"><defs><linearGradient id="f0793c8d-2cc7-4dcf-96d3-b23677fc2573" x1="459.23" y1="847.99" x2="459.23" y2="385.75" gradientTransform="translate(250.84)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="gray" stop-opacity="0.25"/><stop offset="0.54" stop-color="gray" stop-opacity="0.12"/><stop offset="1" stop-color="gray" stop-opacity="0.1"/></linearGradient></defs><title>operating system</title><ellipse cx="629.72" cy="780.56" rx="122.56" ry="26.18" fill="#0f5d40" opacity="0.1"/><path d="M1120.55,730.47c-24.35,20.2-59,28.56-92.51,33.84l-5.64.86c-58.57,8.74-118.32,10.52-177.79,12.28-165.87,4.91-332.17,9.81-497.6-1.51-73.16-5-148.13-13.76-212.25-43.7l-1.67-.79c-.83-.39-1.66-.78-2.49-1.19A224.11,224.11,0,0,1,98,711.17c-18.31-13.06-33.43-29-41.42-47.91-12.52-29.66-5.9-63,8.4-92s35.8-55.12,54.34-82.43c5.44-8,10.6-16.3,15.4-24.81,30-53.37,44.88-115.13,13.43-166.56a228.58,228.58,0,0,0-13.43-19c-7.67-10-15.47-20-20.74-31.07-12.29-25.76-9.65-54.73-5.17-82.25,6-36.59,17.05-76,51.38-98.86,35.67-23.74,86.3-22.54,130.57-14,68.83,13.19,132.36,40.8,196.49,65.7S618.6,165.56,689.11,168c62.26,2.17,134.89-14,176.23-56.08,40.15-40.85,115.6-43.94,170-19.27,51.91,23.54,85.48,73.36,83,123.12-3.16,62.1-54.93,111.83-95.9,164.7-6.81,8.79-13.33,17.68-19.28,26.72-19.42,29.53-33.15,65-19.78,96.88,7.5,17.85,21.81,31.47,39.06,43.36,38.65,26.63,92,44.55,116,81.83C1159.11,661.42,1151.45,704.82,1120.55,730.47Z" transform="translate(-50 -46.63)" fill="#0f5d40" opacity="0.1"/><ellipse cx="972.5" cy="704.85" rx="57.01" ry="10.96" fill="#0f5d40"/><ellipse cx="971.55" cy="700.19" rx="6.64" ry="8.69" fill="#3f3d56"/><ellipse cx="971.55" cy="689.57" rx="6.64" ry="8.69" fill="#3f3d56"/><ellipse cx="971.55" cy="678.94" rx="6.64" ry="8.69" fill="#3f3d56"/><ellipse cx="971.55" cy="668.32" rx="6.64" ry="8.69" fill="#3f3d56"/><ellipse cx="971.55" cy="657.7" rx="6.64" ry="8.69" fill="#3f3d56"/><ellipse cx="971.55" cy="647.08" rx="6.64" ry="8.69" fill="#3f3d56"/><ellipse cx="971.55" cy="636.46" rx="6.64" ry="8.69" fill="#3f3d56"/><path d="M1046.4,610.41a31,31,0,0,0,2.47-3.64l-17.44-2.86,18.86.14a31.78,31.78,0,0,0,.61-25.2L1025.59,592l23.34-17.15a31.8,31.8,0,1,0-52.51,35.58,31.55,31.55,0,0,0-3.63,5.8L1015.43,628l-24.14-8.1a31.79,31.79,0,0,0,5.13,29.86,31.8,31.8,0,1,0,50,0,31.78,31.78,0,0,0,0-39.32Z" transform="translate(-50 -46.63)" fill="#0f5d40"/><path d="M989.61,630.07a31.68,31.68,0,0,0,6.81,19.66,31.8,31.8,0,1,0,50,0C1050.66,644.32,989.61,626.5,989.61,630.07Z" transform="translate(-50 -46.63)" opacity="0.1"/><path d="M184.73,720.54c0,5.59-21.81,10.21-50,10.87l-1.67,0c-.83-.39-1.66-.78-2.49-1.19A224.11,224.11,0,0,1,98,711.17c6.85-.8,14.64-1.34,23-1.52l1.13,0c1.82,0,3.67-.06,5.54-.06,1.22,0,2.43,0,3.62,0l1.18,0c.76,0,1.51,0,2.25,0C162.92,710.32,184.73,715,184.73,720.54Z" transform="translate(-50 -46.63)" fill="#0f5d40"/><ellipse cx="76.76" cy="669.25" rx="6.64" ry="8.69" fill="#3f3d56"/><ellipse cx="76.76" cy="658.63" rx="6.64" ry="8.69" fill="#3f3d56"/><ellipse cx="76.76" cy="648.01" rx="6.64" ry="8.69" fill="#3f3d56"/><ellipse cx="76.76" cy="637.39" rx="6.64" ry="8.69" fill="#3f3d56"/><ellipse cx="76.76" cy="626.77" rx="6.64" ry="8.69" fill="#3f3d56"/><ellipse cx="76.76" cy="616.15" rx="6.64" ry="8.69" fill="#3f3d56"/><ellipse cx="76.76" cy="605.52" rx="6.64" ry="8.69" fill="#3f3d56"/><path d="M151.61,579.47a32.28,32.28,0,0,0,2.48-3.63L136.64,573l18.87.14a31.8,31.8,0,0,0,.6-25.19l-25.3,13.13,23.34-17.16a31.8,31.8,0,1,0-52.52,35.58,32.45,32.45,0,0,0-3.63,5.8L120.64,597,96.5,588.93a31.87,31.87,0,0,0,5.13,29.86,31.8,31.8,0,1,0,50,0,31.78,31.78,0,0,0,0-39.32Z" transform="translate(-50 -46.63)" fill="#0f5d40"/><path d="M94.83,599.13a31.67,31.67,0,0,0,6.8,19.66,31.8,31.8,0,1,0,50,0C155.87,613.38,94.83,595.56,94.83,599.13Z" transform="translate(-50 -46.63)" opacity="0.1"/><g opacity="0.2"><path d="M355.84,601.92c0,.94-.1,1.86-.2,2.76Q344,600,332.72,594.75a18.59,18.59,0,0,1-10.6-5.17c-2.19-1.1-4.37-2.24-6.54-3.39a26.82,26.82,0,0,1,1.66-3c4.2-6.66,10.6-10.83,17.65-10.6s13.15,4.78,16.93,11.66A34.37,34.37,0,0,1,355.84,601.92Z" transform="translate(-50 -46.63)" fill="#3f3d56"/><path d="M357,567a34.56,34.56,0,0,1-5.13,17.32c-4.21,6.64-10.6,10.81-17.65,10.58-.49,0-1-.06-1.45-.1a18.59,18.59,0,0,1-10.6-5.17,25.27,25.27,0,0,1-4.88-6.37,35.82,35.82,0,0,1,1.1-35c4.21-6.66,10.6-10.83,17.65-10.6s13.15,4.78,16.93,11.66A34.47,34.47,0,0,1,357,567Z" transform="translate(-50 -46.63)" fill="#3f3d56"/><ellipse cx="336.18" cy="531.28" rx="28.63" ry="21.87" transform="translate(-255.43 803.92) rotate(-88.19)" fill="#3f3d56"/><ellipse cx="337.29" cy="496.31" rx="28.63" ry="21.87" transform="translate(-219.41 771.16) rotate(-88.19)" fill="#3f3d56"/><ellipse cx="338.39" cy="461.34" rx="28.63" ry="21.87" transform="translate(-183.39 738.39) rotate(-88.19)" fill="#3f3d56"/><path d="M264.12,219.46a105.78,105.78,0,0,1-7.76-12.24l57.72-7.62L252,198.1a104.92,104.92,0,0,1,.62-83l82,45.85L259.47,102A104.75,104.75,0,1,1,428.69,224.65,105.13,105.13,0,0,1,440,244.11l-75.77,36.38,80.33-24.17a104.85,104.85,0,0,1-20,97.78A104.75,104.75,0,1,1,260,348.91a104.73,104.73,0,0,1,4.08-129.45Z" transform="translate(-50 -46.63)" fill="#0f5d40"/><path d="M449.05,290.08a104.29,104.29,0,0,1-24.44,64A104.75,104.75,0,1,1,260,348.91C246.57,330.66,449.42,278.33,449.05,290.08Z" transform="translate(-50 -46.63)" opacity="0.1"/></g><g opacity="0.2"><path d="M848.18,527.14c0,.67-.07,1.32-.14,2q-8.31-3.29-16.31-7.06a13.31,13.31,0,0,1-7.55-3.68c-1.55-.79-3.11-1.6-4.65-2.41a19.78,19.78,0,0,1,1.18-2.13c3-4.74,7.54-7.7,12.56-7.54s9.36,3.4,12.05,8.3A24.5,24.5,0,0,1,848.18,527.14Z" transform="translate(-50 -46.63)" fill="#3f3d56"/><path d="M849,502.25a24.56,24.56,0,0,1-3.65,12.33c-3,4.72-7.54,7.69-12.56,7.53l-1-.07a13.31,13.31,0,0,1-7.55-3.68,18.32,18.32,0,0,1-3.47-4.54,25.51,25.51,0,0,1,.78-24.88c3-4.74,7.55-7.71,12.56-7.55s9.37,3.4,12.05,8.3A24.55,24.55,0,0,1,849,502.25Z" transform="translate(-50 -46.63)" fill="#3f3d56"/><ellipse cx="834.19" cy="476.87" rx="20.37" ry="15.56" transform="translate(281.27 1248.98) rotate(-88.19)" fill="#3f3d56"/><ellipse cx="834.98" cy="451.98" rx="20.37" ry="15.56" transform="translate(306.9 1225.67) rotate(-88.19)" fill="#3f3d56"/><ellipse cx="835.76" cy="427.1" rx="20.37" ry="15.56" transform="translate(332.53 1202.35) rotate(-88.19)" fill="#3f3d56"/><path d="M782.91,255a73.57,73.57,0,0,1-5.52-8.71l41.08-5.42-44.21-1.07a74.67,74.67,0,0,1,.43-59.07L833,213.32,779.6,171.39A74.55,74.55,0,1,1,900,258.65a74.71,74.71,0,0,1,8.06,13.86L854.17,298.4l57.17-17.2a74.55,74.55,0,0,1-14.22,69.58A74.54,74.54,0,1,1,780,347.09,74.55,74.55,0,0,1,782.91,255Z" transform="translate(-50 -46.63)" fill="#0f5d40"/><path d="M914.52,305.22a74.2,74.2,0,0,1-17.4,45.56A74.54,74.54,0,1,1,780,347.09C770.42,334.09,914.78,296.86,914.52,305.22Z" transform="translate(-50 -46.63)" opacity="0.1"/></g><g opacity="0.2"><path d="M635,449.09c0,.67-.08,1.32-.15,2q-8.31-3.29-16.31-7.06a13.28,13.28,0,0,1-7.54-3.68c-1.56-.79-3.11-1.6-4.65-2.41a19,19,0,0,1,1.17-2.13c3-4.73,7.55-7.7,12.56-7.54s9.36,3.4,12.05,8.3A24.5,24.5,0,0,1,635,449.09Z" transform="translate(-50 -46.63)" fill="#3f3d56"/><path d="M635.74,424.2a24.56,24.56,0,0,1-3.65,12.33c-3,4.72-7.54,7.69-12.56,7.53-.35,0-.68,0-1-.07a13.28,13.28,0,0,1-7.54-3.68,18.11,18.11,0,0,1-3.48-4.54,25.48,25.48,0,0,1,.79-24.88c3-4.74,7.54-7.71,12.56-7.55s9.36,3.4,12,8.3A24.54,24.54,0,0,1,635.74,424.2Z" transform="translate(-50 -46.63)" fill="#3f3d56"/><ellipse cx="620.97" cy="398.82" rx="20.37" ry="15.56" transform="matrix(0.03, -1, 1, 0.03, 152.77, 960.28)" fill="#3f3d56"/><ellipse cx="621.75" cy="373.93" rx="20.37" ry="15.56" transform="translate(178.4 936.96) rotate(-88.19)" fill="#3f3d56"/><ellipse cx="622.54" cy="349.05" rx="20.37" ry="15.56" transform="translate(204.04 913.64) rotate(-88.19)" fill="#3f3d56"/><path d="M569.68,176.91a74.87,74.87,0,0,1-5.52-8.71l41.08-5.42L561,161.71a74.62,74.62,0,0,1,.44-59.07l58.33,32.63L566.38,93.34A74.54,74.54,0,1,1,686.8,180.6a74.76,74.76,0,0,1,8.07,13.86L641,220.35l57.16-17.2a74.55,74.55,0,0,1-14.22,69.58A74.54,74.54,0,1,1,566.78,269a74.57,74.57,0,0,1,2.9-92.13Z" transform="translate(-50 -46.63)" fill="#0f5d40"/><path d="M701.29,227.17a74.2,74.2,0,0,1-17.4,45.56A74.54,74.54,0,1,1,566.78,269C557.19,256.05,701.55,218.81,701.29,227.17Z" transform="translate(-50 -46.63)" opacity="0.1"/></g><path d="M1022.4,547.44V765.17c-58.57,8.74-118.32,10.52-177.79,12.28-165.87,4.91-332.17,9.81-497.6-1.51-73.16-5-148.13-13.76-212.25-43.7V464c.24-185-.76,0,0-185.56V211.85a14.1,14.1,0,0,1,14.1-14.1H1008.3a14.1,14.1,0,0,1,14.1,14.1V380.48C1023,547,1022,381,1022.4,547.44Z" transform="translate(-50 -46.63)" fill="#3f3d56"/><rect x="344.15" y="217.75" width="368.86" height="28.56" rx="5.22" fill="#0f5d40" opacity="0.3"/><path d="M737.94,279.85h-.61l-.23-.19a5.1,5.1,0,0,0,1.19-3.25,4.94,4.94,0,1,0-4.92,5,5.09,5.09,0,0,0,3.24-1.18l.22.19V281l3.81,3.82,1.14-1.14Zm-4.57,0a3.44,3.44,0,1,1,3.43-3.44A3.42,3.42,0,0,1,733.37,279.85Z" transform="translate(-50 -46.63)" fill="#444053"/><rect x="222.84" y="493.2" width="34.42" height="11.9" rx="5" fill="#3f3d56" opacity="0.7"/><rect x="222.84" y="522.95" width="53.54" height="11.9" rx="5" fill="#0f5d40" opacity="0.3"/><rect x="222.84" y="508.08" width="107.09" height="11.9" rx="5" fill="#0f5d40" opacity="0.3"/><path d="M214.57,569.21a5.74,5.74,0,0,0-5.8,5.69,3.88,3.88,0,0,1-3.87,3.79,10,10,0,0,0,7.73,3.8,7.67,7.67,0,0,0,7.75-7.59A5.75,5.75,0,0,0,214.57,569.21Zm26.53-17.76-2.6-2.55a1.94,1.94,0,0,0-2.72,0l-17.34,17,5.32,5.22,17.32-17A1.86,1.86,0,0,0,241.1,551.45Z" transform="translate(-50 -46.63)" fill="#0f5d40"/><rect x="222.84" y="345.66" width="34.42" height="11.9" rx="5" fill="#3f3d56" opacity="0.7"/><rect x="222.84" y="375.41" width="53.54" height="11.9" rx="5" fill="#0f5d40" opacity="0.3"/><rect x="222.84" y="360.53" width="107.09" height="11.9" rx="5" fill="#0f5d40" opacity="0.3"/><path d="M241.18,424.78,226,409.5a10.82,10.82,0,0,0-2.51-11.58,11,11,0,0,0-12.35-2.18l7.18,7.22-5,5L206,400.78a10.86,10.86,0,0,0,2.17,12.41,10.66,10.66,0,0,0,11.51,2.52L234.83,431a1.61,1.61,0,0,0,2.34,0l3.84-3.86a1.51,1.51,0,0,0,.17-2.35Z" transform="translate(-50 -46.63)" fill="#0f5d40"/><rect x="509.6" y="493.2" width="34.42" height="11.9" rx="5" fill="#3f3d56" opacity="0.7"/><rect x="509.6" y="522.95" width="53.54" height="11.9" rx="5" fill="#0f5d40" opacity="0.3"/><rect x="509.6" y="508.08" width="107.09" height="11.9" rx="5" fill="#0f5d40" opacity="0.3"/><path d="M509.44,572.63a10,10,0,0,1-9.89,0c-3.87,1.19-6.24,5.09-7.12,8.54h24.12C515.68,577.72,513.32,573.82,509.44,572.63Zm-4.94-18.37a8.69,8.69,0,1,0,8.69,8.68A8.69,8.69,0,0,0,504.5,554.26Zm0,15.3a6.71,6.71,0,0,1-6.07-4.14h12.14A6.71,6.71,0,0,1,504.5,569.56Z" transform="translate(-50 -46.63)" fill="#0f5d40"/><path d="M522.09,568a10.07,10.07,0,0,1-8.4.69,12,12,0,0,1-2.3,2.86,11.24,11.24,0,0,1,4.9,4.33H529.2A10.72,10.72,0,0,0,522.09,568Zm-4.94-18.38a8.71,8.71,0,0,0-7.33,4,10.78,10.78,0,0,1,5.15,7.14h8.25a6.72,6.72,0,0,1-6.07,4.12,6,6,0,0,1-2.08-.38,11.65,11.65,0,0,1-.54,2.07,8.35,8.35,0,0,0,2.62.4,8.69,8.69,0,0,0,0-17.38Z" transform="translate(-50 -46.63)" fill="#0f5d40"/><rect x="222.84" y="603.86" width="34.42" height="11.9" rx="5" fill="#3f3d56" opacity="0.7"/><rect x="222.84" y="633.61" width="53.54" height="11.9" rx="5" fill="#0f5d40" opacity="0.3"/><rect x="222.84" y="618.74" width="107.09" height="11.9" rx="5" fill="#0f5d40" opacity="0.3"/><path d="M226.57,654.25h-9.82a3.28,3.28,0,0,0-3.32,3.24v.7h-.62a3.28,3.28,0,0,0-3.32,3.24v23.63a3.34,3.34,0,0,0,3.32,3.32h17.08a3.27,3.27,0,0,0,3.23-3.32v-.62h.71a3.27,3.27,0,0,0,3.23-3.32V664.75Zm0,3.66,6.84,6.84h-6.84Zm3.94,27.15a.67.67,0,0,1-.62.7H212.81a.73.73,0,0,1-.69-.7V661.43a.67.67,0,0,1,.69-.62h.62v21c0,1.82.86,2.66,2.67,2.66h14.41Zm3.93-3.94a.66.66,0,0,1-.61.7H216.75a.73.73,0,0,1-.69-.7V657.49a.67.67,0,0,1,.69-.62h7.19v10.51h10.5Z" transform="translate(-50 -46.63)" fill="#0f5d40"/><rect x="509.6" y="345.66" width="34.42" height="11.9" rx="5" fill="#3f3d56" opacity="0.7"/><rect x="509.6" y="375.41" width="53.54" height="11.9" rx="5" fill="#0f5d40" opacity="0.3"/><rect x="509.6" y="360.53" width="107.09" height="11.9" rx="5" fill="#0f5d40" opacity="0.3"/><path d="M507.32,400H495.94a3.51,3.51,0,0,0-3.5,3.51v19.25a3.5,3.5,0,0,0,3.5,3.5H525.7a3.5,3.5,0,0,0,3.5-3.5V407.42a3.51,3.51,0,0,0-3.5-3.5H510.82l-3.5-3.94Z" transform="translate(-50 -46.63)" fill="#0f5d40"/><rect x="792.79" y="493.2" width="34.42" height="11.9" rx="5" fill="#3f3d56" opacity="0.7"/><rect x="792.79" y="522.95" width="53.54" height="11.9" rx="5" fill="#0f5d40" opacity="0.3"/><rect x="792.79" y="508.08" width="107.09" height="11.9" rx="5" fill="#0f5d40" opacity="0.3"/><path d="M812.93,555.91l-6.77-.32-.4-4.41a1.7,1.7,0,0,0-1.88-1.52l-24.27,2a1.67,1.67,0,0,0-1.59,1.79l1.73,19.35a1.7,1.7,0,0,0,1.88,1.49l1.23-.09-.19,3.76a1.87,1.87,0,0,0,1.83,1.93l27.09,1.28a1.88,1.88,0,0,0,2-1.74l1.14-21.6A1.86,1.86,0,0,0,812.93,555.91Zm-29.12.44-.58,11.06-1.44,2-1.32-14.61v-.09a.89.89,0,0,1,.78-.77l21.42-1.75a.81.81,0,0,1,.87.64s0,0,0,0,0,0,0,0l.21,2.52-18-.86A1.9,1.9,0,0,0,783.81,556.35Zm27.4,19.44-7-8.17-3.07,2.82-5.67-6.63-10.07,10.72.86-16.33v0a.94.94,0,0,1,1-.74l23.9,1.16a.87.87,0,0,1,.85.83s0,0,0,0Z" transform="translate(-50 -46.63)" fill="#0f5d40"/><path d="M806.89,565.42a2.63,2.63,0,1,0-2.62-2.63A2.64,2.64,0,0,0,806.89,565.42Z" transform="translate(-50 -46.63)" fill="#0f5d40"/><rect x="795.17" y="345.66" width="34.42" height="11.9" rx="5" fill="#3f3d56" opacity="0.7"/><rect x="795.17" y="375.41" width="53.54" height="11.9" rx="5" fill="#0f5d40" opacity="0.3"/><rect x="795.17" y="360.53" width="107.09" height="11.9" rx="5" fill="#0f5d40" opacity="0.3"/><circle cx="762.56" cy="356.63" r="5.25" fill="#0f5d40"/><path d="M808.53,409.45l-10.42,6.94-14.44-9.62v-3.51l14.44,9.63,8.3-5.53a7.39,7.39,0,0,1-.1-8H783.24a3.52,3.52,0,0,0-3.51,3.51v21.88a3.52,3.52,0,0,0,3.51,3.51H813a3.51,3.51,0,0,0,3.5-3.51v-15.2a7.37,7.37,0,0,1-8-.06Z" transform="translate(-50 -46.63)" fill="#0f5d40"/><ellipse cx="509.64" cy="746.02" rx="26.08" ry="5.01" fill="#0f5d40"/><ellipse cx="509.21" cy="743.89" rx="3.04" ry="3.97" fill="#3f3d56"/><ellipse cx="509.21" cy="739.03" rx="3.04" ry="3.97" fill="#3f3d56"/><ellipse cx="509.21" cy="734.17" rx="3.04" ry="3.97" fill="#3f3d56"/><ellipse cx="509.21" cy="729.31" rx="3.04" ry="3.97" fill="#3f3d56"/><ellipse cx="509.21" cy="724.46" rx="3.04" ry="3.97" fill="#3f3d56"/><ellipse cx="509.21" cy="719.6" rx="3.04" ry="3.97" fill="#3f3d56"/><ellipse cx="509.21" cy="714.74" rx="3.04" ry="3.97" fill="#3f3d56"/><path d="M570.57,728.13a13.59,13.59,0,0,0,1.13-1.67l-8-1.31,8.62.07a14.59,14.59,0,0,0,.28-11.52l-11.57,6,10.67-7.85a14.54,14.54,0,1,0-24,16.28,15.11,15.11,0,0,0-1.66,2.65l10.36,5.38-11-3.7a14.53,14.53,0,0,0,2.34,13.65,14.54,14.54,0,1,0,22.86,0,14.55,14.55,0,0,0,0-18Z" transform="translate(-50 -46.63)" fill="#0f5d40"/><path d="M544.6,737.12a14.45,14.45,0,0,0,3.11,9,14.54,14.54,0,1,0,22.86,0C572.52,743.64,544.6,735.49,544.6,737.12Z" transform="translate(-50 -46.63)" opacity="0.1"/><path d="M802,436.86a13.68,13.68,0,0,1-1-2.7c-.1-1.07.32-2.48-.63-3-.53-.29-1.27-.07-1.74-.45a2.15,2.15,0,0,1-.51-1.2,4.1,4.1,0,0,0-3.8-3c1-2.71,4.68-3.37,6.3-5.76.81-1.19.55-3.38-.88-3.39a2.49,2.49,0,0,0-1,.25l-5.33,2.2a27.35,27.35,0,0,0-3,1.39c-2.93,1.67-5.12,4.38-7.09,7.13a30.49,30.49,0,0,0-4.41,8,18,18,0,0,0-.94,5.49c0,.19,0,.38,0,.56-.87.15-1.58.53-2.49.71l-2.07,5.47a6.93,6.93,0,0,1-1.35,2.49,12.52,12.52,0,0,1-1.46,1.15,8.45,8.45,0,0,0-2.91,7.37,7.93,7.93,0,0,0-4.66,9.78,9.31,9.31,0,0,0-6.81,6,4.43,4.43,0,0,1-.89,1.88,3.55,3.55,0,0,1-2.37.73c-2.34.15-4.38,2-6.49,1a13.21,13.21,0,0,0-7.71-1.08,5.77,5.77,0,0,1-1.65.15,4.43,4.43,0,0,1-1.35-.47,10.46,10.46,0,0,0-3.06-1.21,2.84,2.84,0,0,0-2.9,1.12c-.74-.81-1.18-1.86-1.85-2.73a3,3,0,0,0-2.82-1.35c.7-.63,0-1.89-.93-2.11a11.56,11.56,0,0,0-2.81.1c-2.44,0-4.32-2.24-6.69-2.83-2.18-.53-5.09.11-6.21-1.85-.35-.63-.45-1.45-1-1.92a3.64,3.64,0,0,0-.71-1.45c-.9-1-2.41-1.16-3.76-1.12a15.68,15.68,0,0,0-4.37.75c0-.17-.09-.36-.15-.56a11.09,11.09,0,0,0-4.84-5.94A20,20,0,0,0,688,454.2c0-.18,0-.35,0-.53a22.55,22.55,0,0,1,1.16-7.43c.08-.26.18-.52.27-.78a26.6,26.6,0,0,0,12-44.63,6.83,6.83,0,0,0-.21-1.6,7.86,7.86,0,0,0-1.6-3.12c-1.22-2.72-3.12-3.92-5.55-5.06-.7-.33-1.44-.65-2.22-1-3.87-1.74-7.61-4.3-12-4.29-4,0-7.86,2.21-11.82,2.13l-.3,0h-.29l-.36,0c-1.11-.13-2.44-.39-3.17.46a4.5,4.5,0,0,0-.56,1.09,2.64,2.64,0,0,1-.2.37h0a4.4,4.4,0,0,1-.51.69h0c-1.28,1.4-3.43,2-5.2,2.94-4,2.05-6.62,6.23-7.66,10.61s-.68,9,.1,13.44c.4,2.22,1.26,4.74,2.84,6.14h0l0,0s-13.37,9.51-10.93,10.86c1.33.74,6.87-2.77,11.64-6.12.05.2.09.41.15.61a44,44,0,0,0,2.18,6.25c1,2.39,2.44,5,4.93,5.69a5.36,5.36,0,0,0,1.69.19l.44,0a39.39,39.39,0,0,1-1.15,10.87,6.61,6.61,0,0,0-4.09,1.13,3.29,3.29,0,0,1-1.66.88,2.89,2.89,0,0,1-1.71-.84,9.7,9.7,0,0,0-12.14.64c-4.84,4.57-4.29,13.49-10,16.95-1.56.95-3.56,1.46-4.48,3.05a11.41,11.41,0,0,1-.77,1.47,4.05,4.05,0,0,1-1.36,1,26.48,26.48,0,0,0-4.68,2.7,6.72,6.72,0,0,0-2.69,4.54,8.61,8.61,0,0,0,.82,3.81,36.44,36.44,0,0,0,3.12,6,6.38,6.38,0,0,0-1.26,2.95c-.4,2.81.94,5.58,1.09,8.42.13,2.48-.66,4.9-1.1,7.34-1.76,9.54,1.61,19.2,5,28.26a14.58,14.58,0,0,1,1.2,4.65c.09,3-1.6,5.67-2.07,8.59-1,6.14,3.53,11.92,3.63,18.13,0,2.87-.86,5.78-.14,8.55.47,1.85,1.62,3.44,2.44,5.17,1.44,3.06,1.83,6.53,3.21,9.62a23.07,23.07,0,0,0,7.12,8.48c1.73,5.49-.73,12.12,0,18q1.41-.56,2.85-1a41.17,41.17,0,0,0,6.3,24.84c1.55,2.42,3.37,4.68,4.54,7.31a34.26,34.26,0,0,1,1.77,5.79q2.51,10.47,5,20.92c1.36,5.65,2.73,11.4,2.32,17.2-.28,4-1.3,8.57,1.18,11.77a8.51,8.51,0,0,1,1.49,2.06,5.22,5.22,0,0,1,0,2.72,180.71,180.71,0,0,0-2.48,20.39c-.56.75-1.12,1.51-1.63,2.26-4.11,6-6.09,13.21-7.69,20.32a245.83,245.83,0,0,0-5.16,42.44,28.38,28.38,0,0,0-5.26,6.41c-2.15,4-2.43,8.7-2.66,13.24a4.73,4.73,0,0,0,.24,2.18A4.48,4.48,0,0,0,644.2,822l1.24.59c-.27,1-.51,2-.72,3.05-1.58-1.78-4.39-4.6-4.87-2.54a101.78,101.78,0,0,0-2.56,21,1.77,1.77,0,0,0,1.9,2.12A116.25,116.25,0,0,0,660,848c5.65,0,11.29-.46,16.92-.89l5.77-.44a127.7,127.7,0,0,0,17.67-2.19c2.55-.56,5.18-1.35,7.1-3.14s2.86-4.85,1.54-7.12v0c-1.61-2.74-5.37-2.94-8.51-3.38a27.85,27.85,0,0,1-8.92-2.84c-.63-.32-1.24-.68-1.85-1,.16,0,.33-.08.48-.14,2.7-.91,4.85-3,7.39-4.25,3-1.45,6.31-1.78,9.57-2.19s6.62-1,9.33-2.86c2.54-1.74,4.34-4.91,3.75-7.89a5.15,5.15,0,0,0-.16-.62c-1-3.23-4.5-5-7.76-5.8s-6.8-1.28-9.44-3.38l-.39-.31c-.22-.19-.45-.37-.69-.56a5.62,5.62,0,0,0,.77-3.26c-.14-1.79-1.18-3.37-1.89-5-1.39-3.25-1.5-6.88-1.88-10.39-.94-8.83-3.65-17.35-5.69-26-.23-1-.45-2-.67-3a62.86,62.86,0,0,1,7.27-11.64,38,38,0,0,0,7-13.77c.42-1.54.73-3.1,1.05-4.67Q713.18,694.18,718,667a45.19,45.19,0,0,0,.91-7.84,23.89,23.89,0,0,0,1.35-7.43c.94-3.67,1.89-7.52,1.12-9.92-.54-1.7-.81-7.51-1.11-13.08a50.24,50.24,0,0,0-.54-8.93c-.09-.51-.19-1-.3-1.51q-.09-.45-.18-.75a25.68,25.68,0,0,0-1.76-4.86,23.63,23.63,0,0,0-1.32-2.71,12.34,12.34,0,0,0-1-1.48,62,62,0,0,1,6.22.58c.5.07,1.12.11,1.43-.3A1.47,1.47,0,0,0,723,608a12.75,12.75,0,0,0-1.62-6.76c-.8-1.42-1.91-2.8-1.88-4.43a6.53,6.53,0,0,1,.55-2.2l2.77-7.44c2.35-6.29,1.23-13.58,2.45-20.18a118.46,118.46,0,0,0,1.82-15.61c.23-4.47.09-9.32-2.6-12.9a14.73,14.73,0,0,1-2-2.84,8.41,8.41,0,0,1-.48-3.39q-.07-10.51.42-21a206.38,206.38,0,0,0,35.05-4,22,22,0,0,0,4-1.08,20.19,20.19,0,0,0,4-2.53c3.93-2.84,7.92-5.73,10.91-9.55a32.36,32.36,0,0,0,6.46-15.94c2.84-2.63,4.35-6.37,5.77-10a15.42,15.42,0,0,0,1.32-4.85c.07-1.72-1.06-3.52-.74-5.21a13.78,13.78,0,0,1,4.19-7.58,2.74,2.74,0,0,0,1-1.33,2.12,2.12,0,0,0-.23-1.3l-.09-.15c.28-.17.54-.35.81-.53.93-.66,1.82-1.39,2.69-2.1a17,17,0,0,0,3.49-3.54A5.75,5.75,0,0,0,802,436.86ZM673.69,820.15c-.24,0-.48,0-.71.06a9.57,9.57,0,0,0-2.54.73l-.19.1c1.1-2.38,2.14-4.8,3.08-7.26.11-.29.21-.58.32-.88l-.12,1.64A20.22,20.22,0,0,0,673.69,820.15Z" transform="translate(-50 -46.63)" fill="url(#f0793c8d-2cc7-4dcf-96d3-b23677fc2573)"/><path d="M688,455.73c.1,3.88,1.42,7.64,1.62,11.52-11.43.57-22.72-5-34-3.28,3.17-2.05,4.86-5.74,5.86-9.37a38.9,38.9,0,0,0,1.11-14.41,6.61,6.61,0,0,0-.14-.79c-.42-1.9-1.51-4.59-1.22-6.08.39-2,2.25-1.59,3.93-1.48a150.51,150.51,0,0,1,15.26,2c1.32.23,14.13,3.43,14.33,3.1a59.69,59.69,0,0,0-5.55,11.43A22.32,22.32,0,0,0,688,455.73Z" transform="translate(-50 -46.63)" fill="#ee8e9e"/><path d="M801.05,443.73a16.64,16.64,0,0,1-3.49,3.52c-.87.71-1.76,1.44-2.69,2.09a11.5,11.5,0,0,1-5.72,2.33c-2.72.18-8.51-1.42-10.2-3.75a6.77,6.77,0,0,1-1-3.91,17.88,17.88,0,0,1,.94-5.46,30.42,30.42,0,0,1,4.41-8c2-2.74,4.16-5.43,7.09-7.09a27.35,27.35,0,0,1,3-1.39l5.33-2.18a2.5,2.5,0,0,1,1-.26c1.43,0,1.69,2.2.88,3.38-1.62,2.38-5.27,3-6.3,5.73a4.09,4.09,0,0,1,3.8,2.95,2.11,2.11,0,0,0,.51,1.19c.47.37,1.21.16,1.74.45.95.5.53,1.91.63,3a13.5,13.5,0,0,0,1,2.68A5.69,5.69,0,0,1,801.05,443.73Z" transform="translate(-50 -46.63)" fill="#ee8e9e"/><path d="M643.4,833.08c.88-.88,2.32-.73,3.55-.54a132,132,0,0,0,19.95,1.61c.84-4.08-1.59-8-2.37-12.14a10.76,10.76,0,0,0-.8-3.08c-.94-1.8-3.06-2.63-5.05-3-3.59-.76-9.21-2.09-11.22,1.54C645.05,821.78,644.28,828.22,643.4,833.08Z" transform="translate(-50 -46.63)" fill="#65617d"/><path d="M716.49,817.65c-2.71,1.85-6.07,2.42-9.33,2.84s-6.61.74-9.57,2.19c-2.54,1.26-4.69,3.32-7.39,4.22a15.31,15.31,0,0,1-7.67.12c-3-.57-6.26-1.67-7.89-4.29-1.46-2.32-1.31-5.27-1.11-8,.24-3.09.47-6.2.69-9.3a4.4,4.4,0,0,1,.58-2.24c2.19-3.2,7.52,1.33,10.37,1.33,4.52,0,9.37-2.46,12.62-5.45a3.89,3.89,0,0,1,1-.74c1.29-.58,2.58.49,3.72,1.42l.39.31c2.64,2.09,6.18,2.52,9.44,3.37s6.75,2.55,7.76,5.77a4.57,4.57,0,0,1,.16.61C720.83,812.76,719,815.91,716.49,817.65Z" transform="translate(-50 -46.63)" fill="#3f3d56"/><path d="M716.49,817.65c-2.71,1.85-6.07,2.42-9.33,2.84s-6.61.74-9.57,2.19c-2.54,1.26-4.69,3.32-7.39,4.22a15.31,15.31,0,0,1-7.67.12c-3-.57-6.26-1.67-7.89-4.29-1.46-2.32-1.31-5.27-1.11-8,.24-3.09.47-6.2.69-9.3a4.4,4.4,0,0,1,.58-2.24c2.19-3.2,7.52,1.33,10.37,1.33,4.52,0,9.37-2.46,12.62-5.45a3.89,3.89,0,0,1,1-.74c1.29-.58,2.58.49,3.72,1.42l.39.31c2.64,2.09,6.18,2.52,9.44,3.37s6.75,2.55,7.76,5.77a4.57,4.57,0,0,1,.16.61C720.83,812.76,719,815.91,716.49,817.65Z" transform="translate(-50 -46.63)" fill="#434175"/><path d="M716.49,818.69c-2.71,1.85-6.07,2.43-9.33,2.85s-6.61.73-9.57,2.18c-2.54,1.26-4.69,3.32-7.39,4.22a15.31,15.31,0,0,1-7.67.12,12.6,12.6,0,0,1-7.89-5.33c-1.46-2.32-1.31-5.27-1.11-8,.24-3.09.47-6.2.69-9.3a4.4,4.4,0,0,1,.58-2.24c2.19-3.2,7.52,1.33,10.37,1.33,4.52,0,9.37-2.46,12.62-5.45a3.89,3.89,0,0,1,1-.74c1.29-.58,2.58.49,3.72,1.42a26.4,26.4,0,0,1-3.17,6.56,13.63,13.63,0,0,1-10,6.22c-2,.15-4.09-.25-6,.27s-3.77,2.52-3.08,4.42,3.06,2.25,5,2.36a22.38,22.38,0,0,0,8.21-.58c1.6-.53,3.07-1.41,4.62-2.06,6.62-2.74,15-1.21,20.46-5.85a13,13,0,0,1,1.67-1.28C721.67,812.8,719,817,716.49,818.69Z" transform="translate(-50 -46.63)" fill="#e8eaf2"/><path d="M716.49,818.69c-2.71,1.85-6.07,2.43-9.33,2.85s-6.61.73-9.57,2.18c-2.54,1.26-4.69,3.32-7.39,4.22a15.31,15.31,0,0,1-7.67.12,12.6,12.6,0,0,1-7.89-5.33c-1.46-2.32-1.31-5.27-1.11-8,.24-3.09.47-6.2.69-9.3a4.4,4.4,0,0,1,.58-2.24c2.19-3.2,7.52,1.33,10.37,1.33,4.52,0,9.37-2.46,12.62-5.45a3.89,3.89,0,0,1,1-.74c1.29-.58,2.58.49,3.72,1.42a26.4,26.4,0,0,1-3.17,6.56,13.63,13.63,0,0,1-10,6.22c-2,.15-4.09-.25-6,.27s-3.77,2.52-3.08,4.42,3.06,2.25,5,2.36a22.38,22.38,0,0,0,8.21-.58c1.6-.53,3.07-1.41,4.62-2.06,6.62-2.74,15-1.21,20.46-5.85a13,13,0,0,1,1.67-1.28C721.67,812.8,719,817,716.49,818.69Z" transform="translate(-50 -46.63)" opacity="0.05"/><path d="M644.64,616.07a40.77,40.77,0,0,0,5.58,30c1.55,2.4,3.37,4.66,4.54,7.27a33.77,33.77,0,0,1,1.77,5.77l5,20.8c1.36,5.62,2.73,11.34,2.32,17.11-.28,4-1.3,8.53,1.18,11.71a8.46,8.46,0,0,1,1.49,2.05,5.15,5.15,0,0,1,0,2.7c-2.54,15.11-4.43,30.9.16,45.51,4.17,13.25,4.41,27.93,7.95,41.35a9.24,9.24,0,0,0,2.19,4.59,7.27,7.27,0,0,0,3.3,1.56c5.22,1.25,10.73-.21,15.59-2.46,3.42-1.59,7.1-4.37,6.81-8.12-.14-1.79-1.18-3.36-1.89-5-1.39-3.23-1.5-6.83-1.88-10.33-.94-8.78-3.65-17.26-5.69-25.84s-3.44-17.57-1.71-26.23a229.79,229.79,0,0,1,16.87-51.9,6.27,6.27,0,0,1,1.55-2.32,16.86,16.86,0,0,0,2.19-1.49,6.66,6.66,0,0,0,1-2.72c.76-2.74,3-4.77,4.53-7.17,3.83-6.08,2.62-13.87,2.48-21.05-.14-7,.86-14-.28-20.92S714.65,607,708,604.88c-3.29-1.07-6.85-.82-10.29-.48C679.48,606.2,661.76,609.51,644.64,616.07Z" transform="translate(-50 -46.63)" fill="#696791"/><path d="M644.64,617.07a40.77,40.77,0,0,0,5.58,30c1.55,2.4,3.37,4.66,4.54,7.27a33.77,33.77,0,0,1,1.77,5.77l5,20.8c1.36,5.62,2.73,11.34,2.32,17.11-.28,4-1.3,8.53,1.18,11.71a8.46,8.46,0,0,1,1.49,2.05,5.15,5.15,0,0,1,0,2.7c-2.54,15.11-4.43,30.9.16,45.51,4.17,13.25,4.41,27.93,7.95,41.35a9.24,9.24,0,0,0,2.19,4.59,7.27,7.27,0,0,0,3.3,1.56c5.22,1.25,10.73-.21,15.59-2.46,3.42-1.59,7.1-4.37,6.81-8.12-.14-1.79-1.18-3.36-1.89-5-1.39-3.23-1.5-6.83-1.88-10.33-.94-8.78-3.65-17.26-5.69-25.84s-3.44-17.57-1.71-26.23a229.79,229.79,0,0,1,16.87-51.9,6.27,6.27,0,0,1,1.55-2.32,16.86,16.86,0,0,0,2.19-1.49,6.66,6.66,0,0,0,1-2.72c.76-2.74,3-4.77,4.53-7.17,3.83-6.08,2.62-13.87,2.48-21.05-.14-7,.86-14-.28-20.92S714.65,608,708,605.88c-3.29-1.07-6.85-.82-10.29-.48C679.48,607.2,661.76,610.51,644.64,617.07Z" transform="translate(-50 -46.63)" opacity="0.1"/><path d="M718.92,659.86a44,44,0,0,1-.91,8.07q-4.83,27-10.28,54c-.32,1.56-.63,3.12-1.05,4.65a37.78,37.78,0,0,1-7,13.7c-15.15,18.89-16.46,46.32-24.68,69.1-.56,1.54-1.11,3.09-1.7,4.61a115.75,115.75,0,0,1-5.07,11.31,3.22,3.22,0,0,1-1,1.35,3.08,3.08,0,0,1-1.65.33,48.31,48.31,0,0,1-21.36-4.86,4.48,4.48,0,0,1-2.27-1.89,4.66,4.66,0,0,1-.24-2.17c.23-4.51.51-9.19,2.66-13.16a28.22,28.22,0,0,1,5.26-6.38,242.36,242.36,0,0,1,5.16-42.22c1.6-7.08,3.58-14.23,7.69-20.21,3-4.42,7.38-8.78,6.84-14.11-.23-2.34-1.21-5.25.69-6.62.83-.61,2.06-.69,2.63-1.55a3,3,0,0,0,.37-1.32,32.66,32.66,0,0,0-.68-10.93,58.79,58.79,0,0,1-1.63-7.13,9,9,0,0,1,1.79-6.88c.1-4.87,0-9.92.07-14.78a27.16,27.16,0,0,0-.69-8.25c-.36-1.27-.93-2.49-1.21-3.79-1-4.67,1.52-10.27-1.5-14-1.26-1.54-3.2-2.31-4.85-3.42a17.71,17.71,0,0,1-6.66-9.57A52.59,52.59,0,0,1,655.75,622a11.28,11.28,0,0,1,0-2.53,4.35,4.35,0,0,1,.34-1.27c.94-2.11,3.46-2.93,5.71-3.47a185.15,185.15,0,0,1,43.61-5.1c5.44-3.7,8.49-2.37,10.8,1.54a41.09,41.09,0,0,1,3.07,7.51c1,3.18,1.12,21,2.14,24.17C722.72,647,718.87,655.5,718.92,659.86Z" transform="translate(-50 -46.63)" fill="#696791"/><path d="M620.68,497.92c-.4,2.8.94,5.55,1.09,8.38.13,2.47-.66,4.88-1.1,7.31-1.76,9.48,1.61,19.09,5,28.11a14.4,14.4,0,0,1,1.2,4.62c.09,2.94-1.6,5.64-2.07,8.55-1,6.11,3.53,11.85,3.63,18,0,2.85-.86,5.75-.14,8.5.47,1.84,1.62,3.43,2.43,5.14,1.45,3,1.84,6.5,3.22,9.57,2.49,5.55,7.84,9.18,12.94,12.51,2.89-1,6-2.11,7.62-4.72a11.63,11.63,0,0,0,1.33-4.14c1.1-6.33,1.06-12.79,1-19.21A118.59,118.59,0,0,0,656,564c-1-7-3.29-13.7-4.92-20.57-2-8.65-3.09-17.59-6.28-25.9-2.81-7.29-7.17-13.84-11.77-20.12-1.75-2.39-3.14-5.81-6.54-5.26A7.13,7.13,0,0,0,620.68,497.92Z" transform="translate(-50 -46.63)" fill="#434175"/><path d="M620.68,495.92c-.4,2.8.94,5.55,1.09,8.38.13,2.47-.66,4.88-1.1,7.31-1.76,9.48,1.61,19.09,5,28.11a14.4,14.4,0,0,1,1.2,4.62c.09,2.94-1.6,5.64-2.07,8.55-1,6.11,3.53,11.85,3.63,18,0,2.85-.86,5.75-.14,8.5.47,1.84,1.62,3.43,2.43,5.14,1.45,3,1.84,6.5,3.22,9.57,2.49,5.55,7.84,9.18,12.94,12.51,2.89-1,6-2.11,7.62-4.72a11.63,11.63,0,0,0,1.33-4.14c1.1-6.33,1.06-12.79,1-19.21A118.59,118.59,0,0,0,656,562c-1-7-3.29-13.7-4.92-20.57-2-8.65-3.09-17.59-6.28-25.9-2.81-7.29-7.17-13.84-11.77-20.12-1.75-2.39-3.14-5.81-6.54-5.26A7.13,7.13,0,0,0,620.68,495.92Z" transform="translate(-50 -46.63)" opacity="0.05"/><path d="M694.66,436.91a59.69,59.69,0,0,0-5.55,11.43,26.19,26.19,0,0,1-6.3.76c-8.25,0-14.08-4.69-18.93-10.62-.42-1.9-3-3.67-2.74-5.16.39-2,2.25-1.59,3.93-1.48a150.51,150.51,0,0,1,15.26,2C681.65,434,694.46,437.24,694.66,436.91Z" transform="translate(-50 -46.63)" opacity="0.1"/><circle cx="632.81" cy="375.34" r="26.41" fill="#ee8e9e"/><path d="M716.18,611.19c-4.57-.27-9.18-.08-13.76.1a47.15,47.15,0,0,0-8.55.88c-3.47.79-6.71,2.37-10.13,3.36-5.48,1.59-11.26,1.66-16.93,2.22a94.36,94.36,0,0,0-11.09,1.74,4.35,4.35,0,0,1,.34-1.27c.94-2.11,3.46-2.93,5.71-3.47a185.15,185.15,0,0,1,43.61-5.1C710.82,606,713.87,607.28,716.18,611.19Z" transform="translate(-50 -46.63)" opacity="0.1"/><path d="M698.18,465.21c-1.15,1.33-2.7,2.8-4.4,2.37a6.08,6.08,0,0,1-1.72-.92c-3-2-6.78-2.42-10.36-3a152.4,152.4,0,0,1-21.34-4.8,21.93,21.93,0,0,0-6.32-1.28c-4.47,0-8.44,3-11.24,6.48s-4.8,7.57-7.55,11.1c-2,2.52-4.3,4.74-6.13,7.35-4.62,6.59-5.62,15.19-4.42,23.15s4.37,15.47,7.53,22.88A78.47,78.47,0,0,0,638.37,541c-1.06,6-.5,13,2.38,18.4.93,1.77,2.08,3.49,2.39,5.47a13.85,13.85,0,0,1-.16,4l-1.35,9.56c-.41,2.91-.82,5.82-1.35,8.72-1,5.29-2.28,11,.17,15.82,2.93,5.74-.15,13.09.62,19.49a97.8,97.8,0,0,1,25.74-6.11c5.67-.56,11.45-.63,16.93-2.22,3.42-1,6.66-2.57,10.13-3.37a47,47,0,0,1,8.55-.87c6.33-.25,12.7-.51,19,.42.5.08,1.12.12,1.43-.29a1.47,1.47,0,0,0,.19-.75,12.63,12.63,0,0,0-1.62-6.72c-.8-1.41-1.91-2.79-1.88-4.41a6.48,6.48,0,0,1,.55-2.19l2.77-7.4c2.35-6.25,1.23-13.51,2.45-20.07a117.46,117.46,0,0,0,1.82-15.53c.23-4.45.09-9.27-2.6-12.83a14.67,14.67,0,0,1-2-2.83,8.34,8.34,0,0,1-.48-3.37q-.09-13.36.73-26.72c-2.34-4.21-4.79-8.51-7.13-12.72-2.73-4.9-5.49-9.9-6.59-15.4-.73-3.63-.71-7.38-1.23-11.05a4.9,4.9,0,0,0-.93-2.59,4.69,4.69,0,0,0-3.76-1.11A16.44,16.44,0,0,0,698.18,465.21Z" transform="translate(-50 -46.63)" fill="#434175"/><path d="M794.87,449.34a11.5,11.5,0,0,1-5.72,2.33c-2.72.18-8.51-1.42-10.2-3.75a6.77,6.77,0,0,1-1-3.91,4.91,4.91,0,0,1,1.14-.22,29.88,29.88,0,0,1,8.86.36c2.88.7,5.66,2.45,6.87,5.16Z" transform="translate(-50 -46.63)" opacity="0.1"/><path d="M707,506.46c1.61,2,3.28,4.06,5.56,5.25,2.63,1.36,5.72,1.39,8.67,1.33a208,208,0,0,0,36.23-4,22.81,22.81,0,0,0,4-1.07,20.6,20.6,0,0,0,4-2.52c3.93-2.82,7.92-5.7,10.91-9.51a32.05,32.05,0,0,0,6.46-15.85c2.84-2.61,4.35-6.34,5.77-9.93a15.24,15.24,0,0,0,1.32-4.82c.07-1.71-1.06-3.5-.74-5.18a13.64,13.64,0,0,1,4.19-7.54,2.74,2.74,0,0,0,1-1.33,2.1,2.1,0,0,0-.23-1.29c-1.22-2.71-4-4.45-6.88-5.16a29.61,29.61,0,0,0-8.87-.36,20.06,20.06,0,0,0-2.9.78l-2.07,5.43a6.88,6.88,0,0,1-1.35,2.48,12.52,12.52,0,0,1-1.46,1.15,8.38,8.38,0,0,0-2.91,7.33,7.88,7.88,0,0,0-4.66,9.72,9.3,9.3,0,0,0-6.81,6,4.45,4.45,0,0,1-.89,1.87A3.66,3.66,0,0,1,753,480c-2.34.14-4.38,2-6.49,1a13.29,13.29,0,0,0-7.71-1.08,5.77,5.77,0,0,1-1.65.15,4.43,4.43,0,0,1-1.35-.47,10.72,10.72,0,0,0-3.06-1.2,2.84,2.84,0,0,0-2.9,1.12c-.74-.81-1.18-1.85-1.85-2.72a3,3,0,0,0-2.82-1.35c.7-.62,0-1.87-.93-2.1a12.66,12.66,0,0,0-2.81.1c-2.44,0-4.32-2.23-6.69-2.81-2.18-.53-5.09.11-6.21-1.84-.39-.69-.47-1.63-1.14-2a2.2,2.2,0,0,0-1.48-.17,14.24,14.24,0,0,0-4.45,1.35c-2.29,9-1.09,18.24.65,27.3A24.07,24.07,0,0,0,707,506.46Z" transform="translate(-50 -46.63)" fill="#434175"/><path d="M706.93,538.51l-11.37,22.94c1.23-2.13,3.82-3,5.87-4.31A15.54,15.54,0,0,0,707,549.6a47.14,47.14,0,0,0,2.15-9.29c.23-1.45.71-3.49,0-4.81C707.89,535.77,707.47,537.44,706.93,538.51Z" transform="translate(-50 -46.63)" opacity="0.1"/><path d="M674.21,558c-2.57,2.54-5.71,4.41-8.53,6.66-6.6,5.26-11.3,12.46-15.89,19.53a30.77,30.77,0,0,0-3.25,5.92c.54.46,1.34,0,1.88-.49l8.93-7.84a20.19,20.19,0,0,0,3-3c1.55-2.09,2.24-4.69,3.65-6.88a26.84,26.84,0,0,1,5.43-5.53c2.05-1.76,11.47-9.73,9.18-12.83C676.92,554.34,675.56,556.64,674.21,558Z" transform="translate(-50 -46.63)" opacity="0.1"/><path d="M693.72,458.58a26.78,26.78,0,0,0-9.45-3.11,20,20,0,0,0-6-.43c-1.86.23-3.65.95-5.52,1-2.63.15-5.14-.92-7.68-1.61s-5.47-1-7.6.57a3.29,3.29,0,0,1-1.66.88,3,3,0,0,1-1.71-.84,9.74,9.74,0,0,0-12.14.64c-4.84,4.54-4.29,13.41-10,16.86-1.56,1-3.56,1.45-4.48,3a12,12,0,0,1-.77,1.46,4,4,0,0,1-1.36,1,26.43,26.43,0,0,0-4.68,2.69,6.66,6.66,0,0,0-2.69,4.51,8.53,8.53,0,0,0,.82,3.79,35.62,35.62,0,0,0,34.61,22.13,5.42,5.42,0,0,0,3.63-1.13,6.93,6.93,0,0,0,1.27-2.09c2.67-5.59,7.68-9.72,10.86-15,1.89-3.17,3.11-6.72,5.09-9.84,3-4.73,7.54-8.23,12-11.62,2.52-1.91,5.31-3.92,8.47-3.79,2.81.12,4.86.27,3.82-3.17A11,11,0,0,0,693.72,458.58Z" transform="translate(-50 -46.63)" fill="#434175"/><path d="M693.72,458.58a26.78,26.78,0,0,0-9.45-3.11,20,20,0,0,0-6-.43c-1.86.23-3.65.95-5.52,1-2.63.15-5.14-.92-7.68-1.61s-5.47-1-7.6.57a3.29,3.29,0,0,1-1.66.88,3,3,0,0,1-1.71-.84,9.74,9.74,0,0,0-12.14.64c-4.84,4.54-4.29,13.41-10,16.86-1.56,1-3.56,1.45-4.48,3a12,12,0,0,1-.77,1.46,4,4,0,0,1-1.36,1,26.43,26.43,0,0,0-4.68,2.69,6.66,6.66,0,0,0-2.69,4.51,8.53,8.53,0,0,0,.82,3.79,35.62,35.62,0,0,0,34.61,22.13,5.42,5.42,0,0,0,3.63-1.13,6.93,6.93,0,0,0,1.27-2.09c2.67-5.59,7.68-9.72,10.86-15,1.89-3.17,3.11-6.72,5.09-9.84,3-4.73,7.54-8.23,12-11.62,2.52-1.91,5.31-3.92,8.47-3.79,2.81.12,4.86.27,3.82-3.17A11,11,0,0,0,693.72,458.58Z" transform="translate(-50 -46.63)" opacity="0.05"/><path d="M707.47,841.36c-1.92,1.79-4.55,2.57-7.1,3.12a127.7,127.7,0,0,1-17.67,2.19l-5.77.44c-5.63.43-11.27.86-16.92.88a117.17,117.17,0,0,1-20.82-1.8,2.28,2.28,0,0,1-1.65-.8,2.24,2.24,0,0,1-.25-1.31,100.74,100.74,0,0,1,2.56-20.9c.65-2.81,5.7,3.5,5.93,3.77a5.76,5.76,0,0,0,4.59,2.43c5.81.32,12.32-3.21,16.93-6.35a22.18,22.18,0,0,1,3.14-1.95,9.19,9.19,0,0,1,2.54-.72,15.28,15.28,0,0,1,8.64,1.75c3.47,1.72,6.51,4.19,10,6a28.06,28.06,0,0,0,8.92,2.82c3.14.43,6.9.64,8.51,3.36v0C710.33,836.54,709.37,839.58,707.47,841.36Z" transform="translate(-50 -46.63)" fill="#434175"/><path d="M707.47,842.4c-1.92,1.79-4.55,2.57-7.1,3.12a127.7,127.7,0,0,1-17.67,2.19l-5.77.44c-5.63.43-11.27.86-16.92.88a116.24,116.24,0,0,1-20.82-1.8,2.27,2.27,0,0,1-1.65-.79,9.26,9.26,0,0,1-1.29-2.36c.12-7,2-14.05,3.6-20.9.65-2.81,5.7,3.5,5.93,3.77a5.76,5.76,0,0,0,4.59,2.43c5.81.32,12.32-3.21,16.93-6.35a22.18,22.18,0,0,1,3.14-1.95,9.19,9.19,0,0,1,2.54-.72c-.75,4.18-6.74,9.23-9.84,10.77-6.26,3.11-13.7,1.55-20.68,1.92a3,3,0,0,0-1.47.35c-.83.56-.88,1.75-.86,2.75.06,1.66.27,3.62,1.72,4.46a4.94,4.94,0,0,0,2.32.49,327.89,327.89,0,0,0,51.57-1.81,28.23,28.23,0,0,0,8.4-1.87,21.44,21.44,0,0,0,4.87-3.14C711.21,836,709.37,840.62,707.47,842.4Z" transform="translate(-50 -46.63)" fill="#e8eaf2"/><path d="M693.09,421.69c-.1,2.73,1.76,8-3.35,6.55-3-.88-3.9-4.49-7.76-3.69s-4.76,5.57-6.06,8.68a16.59,16.59,0,0,1-12,9.72,7.26,7.26,0,0,1-3.31,0c-2.49-.71-3.91-3.28-4.93-5.66a44.08,44.08,0,0,1-2.18-6.22,25.31,25.31,0,0,1-.79-4.56h0a19.48,19.48,0,0,1,0-3.15c.46-6.21,4-11.87,8.52-16.15s10-7.38,15.45-10.43a22.9,22.9,0,0,1,5.7-2.54,19.21,19.21,0,0,1,6-.24,20.85,20.85,0,0,1,7.66,1.8,10.71,10.71,0,0,1,2.69,1.89,8.11,8.11,0,0,1,2.34,3.89c1,4-1.58,7.63-3.66,10.8C695.51,415.19,693.22,418.17,693.09,421.69Z" transform="translate(-50 -46.63)" fill="#434175"/><path d="M779,480.3c-1.09-2.75-5.67-10.36-4.35-13a33.77,33.77,0,0,1,3.49,6.24C779,475.69,778.32,478.55,779,480.3Z" transform="translate(-50 -46.63)" opacity="0.1"/><path d="M697.47,412.37c2.08-3.17,4.64-6.79,3.66-10.8a8.35,8.35,0,0,0-3-4.44,7.27,7.27,0,0,1,.76,1.87c1,4-1.58,7.62-3.66,10.8-1.85,2.82-4.14,5.81-4.28,9.32-.1,2.73,1.77,8-3.34,6.55-3-.88-3.9-4.49-7.77-3.69s-4.75,5.56-6.06,8.68a16.57,16.57,0,0,1-12,9.72,7.26,7.26,0,0,1-3.31,0,5.05,5.05,0,0,1-1.56-.77,6.76,6.76,0,0,0,3.77,3.34,7.44,7.44,0,0,0,3.32,0,16.63,16.63,0,0,0,12-9.73c1.31-3.12,2.16-7.86,6.06-8.67s4.72,2.8,7.77,3.68c5.11,1.48,3.24-3.82,3.34-6.55C693.33,418.18,695.63,415.19,697.47,412.37Z" transform="translate(-50 -46.63)" opacity="0.1"/><path d="M698.6,406.94a21.84,21.84,0,0,1-1.56,2.24,26.58,26.58,0,0,1-3.61,3.74c-.79.68-1.6,1.31-2.44,1.91a38.47,38.47,0,0,1-4.93,2.95,91.47,91.47,0,0,1-15.78,5.65l-10.54,3.07c-1.3,1-3.67,2.74-6.28,4.57a25.31,25.31,0,0,1-.79-4.56h0a19.48,19.48,0,0,1,0-3.15c.46-6.21,4-11.87,8.52-16.15s10-7.38,15.45-10.43a22.9,22.9,0,0,1,5.7-2.54,19.21,19.21,0,0,1,6-.24,20.85,20.85,0,0,1,7.66,1.8,10.71,10.71,0,0,1,2.69,1.89,10.14,10.14,0,0,1,1.35,2.86C700.7,402.7,699.78,405,698.6,406.94Z" transform="translate(-50 -46.63)" opacity="0.1"/><path d="M698.6,406.23a21.84,21.84,0,0,1-1.56,2.24,26.58,26.58,0,0,1-3.61,3.74c-.79.68-1.6,1.31-2.44,1.91a39.65,39.65,0,0,1-4.93,2.95,91.47,91.47,0,0,1-15.78,5.65l-10.54,3.06c-3.68,2.79-16,11.91-18.07,10.77-2.44-1.34,10.93-10.81,10.93-10.81l.61.47c-2-1.23-3-4.08-3.42-6.55-.78-4.42-1.15-9-.1-13.37s3.67-8.51,7.66-10.55c1.77-.92,3.92-1.53,5.2-2.93a4.4,4.4,0,0,0,.51-.69,2.08,2.08,0,0,0,.2-.36,4.32,4.32,0,0,1,.56-1.09c.73-.84,2.06-.59,3.17-.45l.36,0a5.68,5.68,0,0,0,.59,0c4,.09,7.81-2.12,11.82-2.12,4.39,0,8.13,2.54,12,4.28.78.35,1.52.67,2.22,1,2.8,1.3,4.9,2.69,6,6.38C700.7,402,699.78,404.31,698.6,406.23Z" transform="translate(-50 -46.63)" fill="#0f5d40"/><path d="M667.94,390.28a1.8,1.8,0,0,1-.42,2.32,3.2,3.2,0,0,1-1.66.59,11.2,11.2,0,0,1-1.3.1,3.58,3.58,0,0,1-1.71-.29,2.2,2.2,0,0,1-.3-.19,4.4,4.4,0,0,0,.51-.69c.1.08.2.06.59,0a9.13,9.13,0,0,0,2.14-.36,2.38,2.38,0,0,0,.8-.39,2.48,2.48,0,0,0,.76-1.15Z" transform="translate(-50 -46.63)" opacity="0.1"/><path d="M652.86,425.64a4.87,4.87,0,0,0,1.83.68,8.29,8.29,0,0,0,1.41.23,7.84,7.84,0,0,0,3.45-1" transform="translate(-50 -46.63)" opacity="0.1"/></svg>
diff --git a/img/undraw_react.svg b/img/undraw_react.svg
index 5f8bae1..232a030 100644
--- a/img/undraw_react.svg
+++ b/img/undraw_react.svg
@@ -1 +1 @@
-<svg data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="1108" height="731.18" viewBox="0 0 1108 731.18"><path d="M767.68 330.79l6.89-2.7c.66-.26 1.31-.54 2-.81a59.85 59.85 0 0115.28-115.77l-4.8 24.2 18.22-23.92h.16a59.87 59.87 0 0151.16 67.45c-.15 1.13-.39 2.23-.6 3.34 5.61-4.43 10.87-9.32 14.81-15 8-11.54 10.71-25.76 13.47-43.17 5.47-34.48 10.4-69.34 14.84-104.18a59.83 59.83 0 01-42-65.36c.25-1.82.6-3.59 1-5.34.1-.44.2-.88.31-1.31.43-1.69.91-3.35 1.47-5 .09-.27.21-.52.3-.78.5-1.37 1-2.72 1.65-4 .22-.5.44-1 .67-1.47a57.69 57.69 0 012.22-4.19c.27-.45.56-.88.83-1.33.62-1 1.27-2 1.94-2.93.36-.5.71-1 1.08-1.49l.27-.39a59.81 59.81 0 0174.64-17l-6.24 31.49 18-23.64a59.5 59.5 0 0116.32 68.62h.07c-.17.4-.38.78-.55 1.18-.33.74-.67 1.47-1 2.2-.46.93-1 1.84-1.45 2.74-.38.68-.75 1.36-1.16 2-.59 1-1.23 1.9-1.87 2.83-.38.54-.73 1.1-1.12 1.63-1 1.39-2.12 2.72-3.26 4-.4.45-.83.86-1.25 1.3-.81.86-1.62 1.71-2.48 2.52-.53.5-1.09 1-1.64 1.46-.79.7-1.6 1.38-2.43 2-.59.47-1.19.92-1.79 1.36a77.101 77.101 0 01-4.45 2.96c-1 .61-2.05 1.17-3.1 1.72-.53.27-1 .57-1.59.83-1.58.77-3.2 1.48-4.85 2.11-.31.12-.64.21-.95.32-1.38.5-2.77 1-4.18 1.35-.61.17-1.23.31-1.85.46-1.15.28-2.31.54-3.48.76q-1 .18-2.07.33c-1.15.17-2.31.3-3.48.4-.69.06-1.37.12-2.07.16-1.26.06-2.53.07-3.8.06a2.08 2.08 0 00-.25 0q-2.82 22-5.92 44a59.82 59.82 0 0186.4-10.32l-15.68 26.58 25.21-16.59a59.68 59.68 0 0111.5 44.16 58.76 58.76 0 01-4.5 15.94 59.83 59.83 0 01-111.19-4c-.23 1.48-.45 3-.68 4.46-2.44 15.35-5.47 34.46-16.23 50-7.29 10.56-17.33 18.36-27.09 25.22q-9.52 6.7-19.48 12.77a59.85 59.85 0 01-24.53 13.74q-16 8.19-32.69 14.81l-6.95 2.72c-6.25 2.44-12.65 4.94-19 7.6 1 .09 2 .17 3 .3a59.9 59.9 0 0150.86 49.05l-42.31 23.11 42.18-1.89A59.16 59.16 0 01797 450.13a59.87 59.87 0 01-82.7 11.74l2.1 3.91c1.4 2.58 2.78 5.15 4.12 7.7 18.33 34.74 19.66 64.74 3.75 84.49l-13-10.45c15.49-19.22 3.2-49.77-5.5-66.27-1.32-2.5-2.68-5-4-7.56-11.77-21.83-25.12-46.57-19.77-72.9 8-39.7 51.05-56.5 85.68-70zM269.6 519.01l-5.38-2.11c-.52-.2-1-.43-1.54-.63a46.75 46.75 0 00-11.94-90.42l3.75 18.9-14.22-18.68h-.13a46.76 46.76 0 00-40 52.68c.12.89.31 1.74.47 2.61a55.84 55.84 0 01-11.56-11.73c-6.23-9-8.37-20.12-10.53-33.71-4.23-26.93-8.07-54.15-11.52-81.33a46.72 46.72 0 0032.77-51.05c-.2-1.42-.47-2.8-.79-4.17l-.24-1a48.36 48.36 0 00-1.15-3.88c-.07-.21-.16-.41-.24-.61a48.24 48.24 0 00-1.28-3.15c-.18-.38-.35-.77-.53-1.15-.54-1.11-1.11-2.2-1.73-3.26-.21-.36-.44-.7-.65-1-.49-.78-1-1.55-1.52-2.29-.28-.39-.55-.79-.84-1.17l-.21-.3a46.76 46.76 0 00-58.29-13.32l4.88 24.6-14.07-18.46a46.48 46.48 0 00-12.75 53.59h-.05c.13.31.29.61.43.92.26.58.52 1.15.8 1.72q.54 1.08 1.14 2.13c.29.54.58 1.07.9 1.59.46.75 1 1.48 1.46 2.21.3.42.57.86.88 1.27.8 1.08 1.65 2.12 2.54 3.13.31.35.65.67 1 1 .63.67 1.27 1.33 1.94 2 .41.4.85.77 1.28 1.14q.93.83 1.89 1.59c.46.36.93.71 1.4 1.06.68.49 1.37 1 2.06 1.41.47.31.94.61 1.42.9.79.48 1.6.91 2.42 1.34.42.22.82.45 1.24.66 1.24.6 2.5 1.15 3.79 1.64.24.1.5.16.74.25 1.07.39 2.16.75 3.27 1.06.47.13 1 .24 1.44.35.9.22 1.8.43 2.72.6l1.61.26c.9.13 1.81.23 2.72.31.54.05 1.07.09 1.62.12 1 .05 2 .06 3 .05h.19q2.2 17.22 4.62 34.41a46.71 46.71 0 00-67.48-8.14l12.14 20.64-19.68-12.95a46.57 46.57 0 00-9 34.49 45.8 45.8 0 003.53 12.46 46.73 46.73 0 0086.84-3.12c.18 1.15.35 2.32.53 3.48 1.9 12 4.27 26.92 12.67 39.08 5.7 8.24 13.54 14.33 21.16 19.69q7.44 5.24 15.21 10a46.88 46.88 0 0019.16 10.74c8.32 4.26 16.84 8.14 25.54 11.56l5.42 2.13c4.88 1.9 9.88 3.85 14.81 5.93-.78.07-1.57.13-2.36.24a46.77 46.77 0 00-39.72 38.27l33 18-32.94-1.47a46.78 46.78 0 0073.57 29.2c-.55 1-1.09 2-1.64 3.05-1.09 2-2.17 4-3.22 6-14.31 27.13-15.35 50.57-2.92 66l10.13-8.16c-12.1-15-2.5-38.87 4.3-51.76 1-1.95 2.09-3.92 3.16-5.9 9.19-17 19.61-36.37 15.46-56.94-6.21-30.94-39.86-44.02-66.9-54.6z" fill="#f2f2f2"/><ellipse cx="554" cy="707.68" rx="554" ry="23.5" fill="#3f3d56"/><ellipse cx="554" cy="707.68" rx="554" ry="23.5" opacity=".1"/><ellipse cx="554" cy="694.68" rx="554" ry="23.5" fill="#3f3d56"/><path d="M85 686.32c-3-5.51.4-12.26 4.28-17.18s8.61-10 8.51-16.29c-.14-9-9.7-14.31-17.33-19.08a84.78 84.78 0 01-15.56-12.51 23 23 0 01-4.78-6.4c-1.58-3.52-1.53-7.52-1.43-11.38q.5-19.26 1.9-38.48" fill="none" stroke="#3f3d56" stroke-miterlimit="10" stroke-width="4"/><path d="M46.11 564.29a14 14 0 017-11.49l3.14 6.21-.09-7.52a13.86 13.86 0 014.62-.56 14 14 0 11-14.67 13.36zm25.03 95a14 14 0 0026.5-5.76 13.82 13.82 0 00-.91-5.69 14 14 0 00-26.27.15l8.77 7.13-9.64-2.24a13.89 13.89 0 001.55 6.41zm6.93-27.25a14 14 0 004.46-27.54l.07 5.79-3.18-6.29a14.04 14.04 0 00-1.31 28.05zM44 609.37a14.016 14.016 0 001.32-28 13.88 13.88 0 00-7.52 1.78l2.48 6.8-5.11-4.9a14 14 0 00-4.53 9.69 13.33 13.33 0 00.36 3.85 14 14 0 0013 10.78z" fill="#0f5d40"/><path d="M48 568.03c3.24.36 6.39 1.37 9.64 1.57s6.82-.58 8.88-3.1c1.11-1.37 1.66-3.09 2.59-4.57a10.08 10.08 0 013.54-3.33 14 14 0 11-26.24 9.32c.53.02 1.06.06 1.59.11zm-4 41.34a14 14 0 0013.35-20 10.4 10.4 0 00-2.82 2.83c-1 1.51-1.61 3.25-2.78 4.64-2.19 2.57-5.92 3.41-9.31 3.25s-6.66-1.11-10-1.42c-.47 0-.94-.08-1.41-.09A14 14 0 0044 609.37zm34.07 22.67a14 14 0 0013.47-19.76 11.36 11.36 0 00-3 2.85c-1.09 1.54-1.77 3.31-3 4.73-2.36 2.64-6.34 3.57-9.93 3.48s-6.82-.93-10.28-1.19a14 14 0 0012.74 9.89zm-6.93 27.25a14 14 0 0026.5-5.76 13.82 13.82 0 00-.91-5.69 14 14 0 00-3.08 2.74c-1.34 1.63-2.21 3.47-3.76 5-2.87 2.82-7.5 4-11.62 4.09a62.35 62.35 0 01-7.13-.38z" opacity=".1"/><path d="M106.19 679.98s-11.08-.34-14.41-2.72-17-5.22-17.87-1.4-16.65 19-4.14 19.06 29.06-2 32.39-4 4.03-10.94 4.03-10.94z" fill="#656380"/><path d="M69.54 693.59c12.51.1 29.06-2 32.4-4 2.53-1.54 3.54-7.09 3.88-9.65h.37s-.7 8.93-4 11-19.89 4.08-32.39 4c-3.61 0-4.86-1.31-4.79-3.22.47 1.13 1.85 1.87 4.53 1.87z" opacity=".2"/><path d="M1055 695.32c-3-5.51.4-12.26 4.28-17.18s8.61-10 8.51-16.29c-.14-9-9.7-14.31-17.33-19.08a84.78 84.78 0 01-15.56-12.51 23 23 0 01-4.78-6.4c-1.58-3.52-1.53-7.52-1.43-11.38q.49-19.26 1.9-38.48" fill="none" stroke="#3f3d56" stroke-miterlimit="10" stroke-width="4"/><path d="M1016.11 573.29a14 14 0 017-11.49l3.14 6.21-.09-7.52a13.86 13.86 0 014.62-.56 14 14 0 11-14.68 13.36zm25.03 95a14 14 0 0026.5-5.76 13.82 13.82 0 00-.91-5.69 14 14 0 00-26.27.15l8.77 7.13-9.64-2.24a13.89 13.89 0 001.55 6.41zm6.93-27.25a14 14 0 004.46-27.54l.07 5.79-3.18-6.29a14.04 14.04 0 00-1.31 28.05zM1014 618.37a14.016 14.016 0 001.32-28 13.88 13.88 0 00-7.52 1.78l2.48 6.8-5.11-4.9a14 14 0 00-4.53 9.69 13.33 13.33 0 00.36 3.85 14 14 0 0013 10.78z" fill="#0f5d40"/><path d="M1018 577.03c3.24.36 6.39 1.37 9.64 1.57s6.82-.58 8.88-3.1c1.11-1.37 1.66-3.09 2.59-4.57a10.08 10.08 0 013.54-3.33 14 14 0 11-26.24 9.32c.53.02 1.06.06 1.59.11zm-4 41.34a14 14 0 0013.35-20 10.4 10.4 0 00-2.82 2.83c-1 1.51-1.61 3.25-2.78 4.64-2.19 2.57-5.92 3.41-9.31 3.25s-6.66-1.11-10-1.42c-.47 0-.94-.08-1.41-.09a14 14 0 0012.97 10.79zm34.07 22.67a14 14 0 0013.47-19.76 11.36 11.36 0 00-3 2.85c-1.09 1.54-1.77 3.31-3 4.73-2.36 2.64-6.34 3.57-9.93 3.48s-6.82-.93-10.28-1.19a14 14 0 0012.74 9.89zm-6.93 27.25a14 14 0 0026.5-5.76 13.82 13.82 0 00-.91-5.69 14 14 0 00-3.08 2.74c-1.34 1.63-2.21 3.47-3.76 5-2.87 2.82-7.5 4-11.62 4.09a62.35 62.35 0 01-7.13-.38z" opacity=".1"/><path d="M1076.19 688.98s-11.08-.34-14.41-2.72-17-5.22-17.87-1.4-16.65 19-4.14 19.06 29.06-2 32.39-4 4.03-10.94 4.03-10.94z" fill="#656380"/><path d="M1039.54 702.59c12.51.1 29.06-2 32.4-4 2.53-1.54 3.54-7.09 3.88-9.65h.37s-.7 8.93-4 11-19.89 4.08-32.39 4c-3.61 0-4.86-1.31-4.79-3.22.47 1.13 1.85 1.87 4.53 1.87z" opacity=".2"/><path d="M745.57 331.15q-9.92-3.4-20-6.3 1.66-6.79 3.09-13.65c15.14-73.51 5.24-132.73-28.57-152.22-32.42-18.7-85.44.8-139 47.39q-7.92 6.92-15.47 14.2-5.07-4.85-10.3-9.51c-56.11-49.83-112.32-70.82-146.14-51.27-32.39 18.75-42 74.42-28.35 144.09q2 10.35 4.59 20.58c-7.95 2.26-15.64 4.67-23 7.24-65.79 22.89-107.81 58.89-107.81 96.18 0 38.51 45.11 77.14 113.64 100.56q8.34 2.83 16.8 5.26-2.74 11-4.88 22.18c-13 68.46-2.84 122.82 29.46 141.45 33.37 19.26 89.37-.54 143.89-48.2 4.31-3.77 8.63-7.77 13-11.95q8.18 7.89 16.79 15.32c52.82 45.45 105 63.81 137.26 45.12 33.33-19.29 44.16-77.69 30.1-148.73q-1.6-8.14-3.73-16.61 5.91-1.74 11.56-3.61c71.24-23.6 117.6-61.76 117.6-100.79 0-37.43-43.38-73.62-110.5-96.73z" fill="#53c1de"/><path d="M730.12 503.47c-3.4 1.13-6.88 2.21-10.44 3.27a621.6 621.6 0 00-31.47-78.73 623.06 623.06 0 0030.25-77.58c6.35 1.84 12.53 3.78 18.47 5.83 57.51 19.79 92.59 49.06 92.59 71.62 0 24-37.89 55.21-99.4 75.59zm-25.52 50.58c6.22 31.41 7.1 59.81 3 82-3.7 19.95-11.14 33.25-20.34 38.58-19.59 11.33-61.47-3.4-106.64-42.27q-7.77-6.69-15.63-14.25a624.23 624.23 0 0052.09-66.14 620.2 620.2 0 0084.17-13q1.9 7.68 3.37 15zM446.48 672.69c-19.14 6.76-34.38 6.95-43.59 1.64-19.6-11.31-27.75-55-16.63-113.5q2-10.37 4.53-20.63a625.79 625.79 0 0083.75 12.13 645.09 645.09 0 0053.35 65.9q-5.79 5.61-11.84 10.91c-24.11 21.08-48.28 36-69.57 43.55zm-89.64-169.37c-30.31-10.36-55.33-23.82-72.49-38.5-15.41-13.2-23.19-26.31-23.19-36.94 0-22.63 33.74-51.5 90-71.11q10.6-3.69 21.39-6.73a637.08 637.08 0 0030.29 78.48 646.29 646.29 0 00-30.66 79.6q-7.74-2.21-15.34-4.8zm30.05-204.54c-11.68-59.69-3.93-104.72 15.59-116 20.79-12 66.76 5.12 115.22 48.15 3.1 2.75 6.21 5.63 9.32 8.6a635.89 635.89 0 00-52.93 65.52 648.42 648.42 0 00-82.93 12.89q-2.39-9.52-4.27-19.15zM655 364.97q-9.11-15.74-18.89-31.08c19.83 2.51 38.82 5.83 56.66 9.91a565.54 565.54 0 01-19.89 53.51q-8.61-16.35-17.88-32.34zM545.64 258.5a569.3 569.3 0 0136.57 44.14q-36.71-1.73-73.45 0c12.07-15.92 24.44-30.72 36.88-44.13zm-110 106.65q-9.15 15.87-17.55 32.14c-7.73-18.33-14.34-36.36-19.74-53.77 17.73-4 36.64-7.21 56.34-9.68q-9.92 15.44-19.07 31.31zm19.61 158.65a564.64 564.64 0 01-57.25-9.21c5.49-17.71 12.25-36.13 20.15-54.86q8.43 16.29 17.61 32.16 9.34 16.19 19.47 31.91zm91.14 75.33c-12.6-13.54-25.15-28.54-37.39-44.75q17.85.71 36.36.71 19 0 37.51-.84a563.94 563.94 0 01-36.5 44.88zm126.69-140.35A562.82 562.82 0 01694 513.44a561.35 561.35 0 01-58 9.89q9.85-15.63 19.08-31.63 9.38-16.26 18-32.92zm-41 19.66q-14.12 24.52-29.81 48.1c-18.44 1.32-37.49 2-56.91 2s-38.15-.6-56.27-1.78q-16.09-23.5-30.39-48.17t-26.51-50.08q12.27-25.53 26.43-50.1 14.14-24.56 30.13-48c18.49-1.4 37.43-2.13 56.59-2.13s38.22.74 56.69 2.14q15.81 23.37 30 47.81t26.79 49.87q-12.45 25.62-26.71 50.3zm54.77-296.46c20.81 12 28.9 60.4 15.83 123.87q-1.29 6.19-2.8 12.35a635.74 635.74 0 00-83.09-13.13 625.16 625.16 0 00-52.53-65.56q7-6.74 14.29-13.11c45.88-39.93 88.76-55.69 108.3-44.42z" fill="#fff"/><path d="M545.34 372.38a55.5 55.5 0 11-55.5 55.5 55.49 55.49 0 0155.5-55.5" fill="#53c1de"/><path d="M559.26 20.4a16.6 16.6 0 11-16.6-16.6 16.52 16.52 0 0116.6 16.6z" fill="#3f3d56"/><path d="M529.4 24.59A16.62 16.62 0 01541.89.05a16.6 16.6 0 101.41 33.07 16.6 16.6 0 01-13.9-8.53zm-7.49 18.93h44.47v69.37h-44.47z" fill="#3f3d56"/><path opacity=".1" d="M521.91 43.52h44.47v69.37h-44.47z"/><path d="M451.66 295.2s-4.75 13.05-16 14.83-17.79 4.74-17.79 4.74l26.68 17.19 14.23-1.78s1.78-18.38 7.71-22.53-14.83-12.45-14.83-12.45zm192.68 0s4.75 13.05 16 14.83 17.79 4.74 17.79 4.74l-26.68 17.19-14.23-1.78s-1.78-18.38-7.71-22.53 14.83-12.45 14.83-12.45z" fill="#a0616a"/><path d="M514.5 180.18s-7.11 3.56-9.48 10.68c0 0-13 4.15-20.16 15.41 0 0-8.9 9.49-10.08 14.23S460 253.7 460 253.7s-13.64 44.47-20.75 49.21c0 0 22.53-4.74 26.68 17.79 0 0 5.33 0 11.26-20.75s20.16-46.25 20.16-46.25 4.74-17.78 8.89-20.75 10.67-16.6 16.6-13 45.06-.6 45.06-.6 23.1 10.64 23.68 17.75 4.74 7.71 5.33 13.64 22.53 52.76 22.53 52.76 4.15 13 5.34 16c0 0 13-31.42 30.24-13.63 0 0-.6-11.86-5.93-19s-28.46-62.84-28.46-62.84-2.37-8.3-4.74-10.67-20.76-21.35-27.28-21.35c0 0-3.55-8.89-7.7-10.08zm-53.36 145.85a28.89 28.89 0 01-28.22-3.79 56.37 56.37 0 00-12.59-7.3c-6.29-2.54-13.81-4.42-16.1-.17-4.15 7.71 50.39 26.68 50.39 26.68s7.12-4.15 6.52-15.42zm173.72 0a28.89 28.89 0 0028.22-3.79 56.37 56.37 0 0112.59-7.3c6.29-2.54 13.81-4.42 16.1-.17 4.15 7.71-50.39 26.68-50.39 26.68s-7.12-4.15-6.52-15.42z" fill="#3f3d56"/><path d="M533.88 82.67c-.22 2.06-.9 4.29-2.66 5.38-1.44.9-3.26.83-4.92 1.17a11.46 11.46 0 00-7.82 6.77 17.51 17.51 0 00-.75 10.55 39.22 39.22 0 001.52 5.06c1.74 4.92 3.84 9.8 7.09 13.89a59 59 0 009.3 8.77c2.11 1.72 4.29 3.47 6.89 4.28a21.75 21.75 0 005.4.72c2.25.1 4.65.17 6.6-.95 3-1.73 3.89-5.55 5.52-8.62 1.38-2.6 3.44-4.81 4.73-7.46a29.49 29.49 0 002-6.52l2.77-12.3c1-4.47 1.92-9.51-.59-13.34a2.28 2.28 0 00-.74-.77 2.79 2.79 0 00-1.52-.15 16.44 16.44 0 01-9.15-2.09 3.93 3.93 0 01-1.15-.9 4.72 4.72 0 01-.7-2.12 22.2 22.2 0 00-1.28-4.45 3 3 0 00-.87-1.34 3.15 3.15 0 00-1.41-.47 114.47 114.47 0 00-12.93-1.35c-1.42-.07-3.56-.64-4.54.62s-.67 4.12-.79 5.62z" fill="#a0616a"/><path d="M533.88 82.67c-.22 2.06-.9 4.29-2.66 5.38-1.44.9-3.26.83-4.92 1.17a11.46 11.46 0 00-7.82 6.77 17.51 17.51 0 00-.75 10.55 39.22 39.22 0 001.52 5.06c1.74 4.92 3.84 9.8 7.09 13.89a59 59 0 009.3 8.77c2.11 1.72 4.29 3.47 6.89 4.28a21.75 21.75 0 005.4.72c2.25.1 4.65.17 6.6-.95 3-1.73 3.89-5.55 5.52-8.62 1.38-2.6 3.44-4.81 4.73-7.46a29.49 29.49 0 002-6.52l2.77-12.3c1-4.47 1.92-9.51-.59-13.34a2.28 2.28 0 00-.74-.77 2.79 2.79 0 00-1.52-.15 16.44 16.44 0 01-9.15-2.09 3.93 3.93 0 01-1.15-.9 4.72 4.72 0 01-.7-2.12 22.2 22.2 0 00-1.28-4.45 3 3 0 00-.87-1.34 3.15 3.15 0 00-1.41-.47 114.47 114.47 0 00-12.93-1.35c-1.42-.07-3.56-.64-4.54.62s-.67 4.12-.79 5.62z" opacity=".1"/><path d="M525.85 89.74a26.93 26.93 0 00-7.13-1.12c-5.72-.14-11.84 1.83-15.14 6.5a15.34 15.34 0 00-2.29 11.47 23.57 23.57 0 005.2 10.66 32 32 0 014 5.24c1.58 3 1.63 6.59 2.06 10 1 8.12 4.46 15.75 5.83 23.82s.19 17.42-6.18 22.55c-1.07.86-2.37 1.77-2.46 3.14-.14 2.19 2.71 3.12 4.9 3.33 6.55.62 13.27 1.23 19.63-.46 2.63-.7 5.17-1.79 7.85-2.29 6.8-1.27 13.64 1.34 20.45 2.59a90.61 90.61 0 0014.91 1.21 7.94 7.94 0 003.43-.45 2.75 2.75 0 001.74-2.74 4.76 4.76 0 00-1.18-2c-3.44-4.25-4.49-9.9-5.43-15.29l-3.15-18.11c-1.69-9.68-3.26-20.2 1.32-28.89 3.29-6.25 9.36-10.65 12.83-16.8a9.84 9.84 0 001.55-6.28c-.52-3.09-3.31-5.3-6.17-6.59a23.21 23.21 0 00-17.42-.64c.1 4.33-1 8.71-1.71 13l-1.21 7a88.83 88.83 0 01-2.71 12.2 12.85 12.85 0 01-2.17 4.42 11.43 11.43 0 01-3.83 2.79 22.83 22.83 0 01-10.14 2.32 13.54 13.54 0 01-4.48-.69 19 19 0 01-6.17-4.34 10.11 10.11 0 01-1.63-1.77 9.93 9.93 0 01-1.11-2.67 55.42 55.42 0 01-1.91-7.48c-.3-1.94-.4-3.91-.54-5.87-.39-5.79-.39-12.19-1.54-17.76z" fill="#0f5d40"/><path d="M519.84 204.49s-2.37 31.43 12.45 36.76 1.78-26.09 1.78-26.09l-4.75-9.48zm50.39 0s2.37 31.43-12.45 36.76-1.78-26.09-1.78-26.09l4.75-9.48z" fill="#a0616a"/><path d="M506.79 99.59l-4.74 7.71s4.15 26.68 4.74 31.42a62.2 62.2 0 002.38 10.08s.59 14.23.59 19.57 3 14.23 3 14.23a64.82 64.82 0 003 14.82c2.37 6.52 4.74 14.23 4.74 14.23s3-8.3 14.82 4.15a7.18 7.18 0 000-10.08s-3.55-16-3.55-24.31-6.53-48-6.53-48-4.24-45.12-18.45-33.82z" opacity=".1"/><path d="M505.61 98.96l-4.74 7.71s4.15 26.68 4.74 31.42a61.84 61.84 0 002.39 10.08s.59 14.23.59 19.56 3 14.23 3 14.23a64.53 64.53 0 003 14.82c2.37 6.53 4.75 14.23 4.75 14.23s3-8.3 14.82 4.15a7.18 7.18 0 000-10.07s-3.56-16-3.56-24.31-6.52-48-6.52-48-4.24-45.09-18.47-33.82z" fill="#0f5d40"/><path d="M583.87 94.81l3 3.53s3.49 20.18-4.22 45.68l-2.37 23.12s-4.15 19.57-4.74 24.31-.59 5.33-1.78 7.11a2.29 2.29 0 000 3l-3.56 13s-5.33-6.52-16 1.78c0 0-3-4.74-.6-8.89s2.37-5.93 1.78-7.12 2.37-7.11 2.37-8.3 4.18-28.44 4.18-28.44 1.78-26.68 3.56-35.57c1.09-5.47 1.07-17.66.88-26.24-.19-8.94 10.63-13.78 17-7.5.15.16.33.31.5.53z" opacity=".1"/><path d="M585.65 93.59l3 3.53s3.49 20.19-4.22 45.68l-2.37 23.12s-4.15 19.57-4.74 24.31-.6 5.34-1.78 7.12a2.28 2.28 0 000 3L572 213.39s-5.33-6.53-16 1.77c0 0-3-4.74-.59-8.89s2.37-5.93 1.78-7.11 2.37-7.12 2.37-8.3 4.15-28.46 4.15-28.46 1.78-26.68 3.56-35.58.59-35.57.59-35.57 9.49-6.52 17.79 2.34z" fill="#0f5d40"/><circle cx="545.92" cy="61.61" r="23.72" fill="#a0616a"/><path d="M558.29 26a16.6 16.6 0 01-31.09.44c9.26-3.73 18.72-.41 18.72-.41 4.73-1.66 8.83-1.51 12.37-.03z" opacity=".1"/><path d="M545.92 27.22s-45.65-16-34.38 61.66c0 0 10.08 6.52 17.78 2.37 0 0-5.33-53.95 15.42-51.58s17.19 50.4 17.19 50.4 11.86 3.55 15.42-3-1.19-70.48-31.43-59.85z" fill="#3f3d56"/><path d="M544.74 36.11c-14.24-1.62-16.2 23.27-16 39.05.17-15.69 2.81-37 16-35.49 14.81 1.69 17.24 26.66 17.41 40.8.17-12.98-1.25-42.51-17.41-44.36zm-33.2 49.21a159.38 159.38 0 01-1.77-20.53 152.12 152.12 0 001.77 24.09s10.08 6.52 17.78 2.37c0 0-.12-1.28-.26-3.43-7.67 3.87-17.52-2.5-17.52-2.5zm65.81-1.73c-3.32 6.08-13.83 3.41-15.25 3-.07 2.2-.17 3.52-.17 3.52s11.86 3.55 15.42-3c.73-1.34 1.11-5.13 1-10.2-.1 3.25-.45 5.68-1 6.68z" opacity=".1"/><path d="M826.73 672.96c4.74-8.78-.64-19.54-6.82-27.37s-13.73-16-13.57-26c.23-14.35 15.45-22.81 27.62-30.42a134.77 134.77 0 0024.79-19.93c3-3.05 5.87-6.31 7.62-10.21 2.52-5.6 2.45-12 2.29-18.12q-.79-30.71-3-61.34" fill="none" stroke="#3f3d56" stroke-miterlimit="10" stroke-width="4"/><path d="M888.74 478.49a22.31 22.31 0 00-11.16-18.32l-5 9.9.15-12a22.37 22.37 0 1016 20.41zm-39.88 151.39a22.36 22.36 0 111.08-18l-14 11.37 15.37-3.57a22.25 22.25 0 01-2.45 10.2zm-11.05-43.43a22.37 22.37 0 01-7.09-43.86l-.12 9.22 5.06-10h.06a22.37 22.37 0 112.09 44.69zm54.3-36.13a22.37 22.37 0 119.89-41.86l-4 10.83 8.13-7.8a22.37 22.37 0 01-14.07 38.83z" fill="#0f5d40"/><path d="M885.74 484.45c-5.17.57-10.19 2.18-15.37 2.5s-10.87-.92-14.14-5c-1.77-2.17-2.65-4.91-4.14-7.28a16 16 0 00-5.63-5.3 22.37 22.37 0 1041.81 14.84c-.85.09-1.69.15-2.53.24zm6.37 65.87a22.39 22.39 0 01-21.28-31.91 16.37 16.37 0 014.5 4.51c1.59 2.4 2.56 5.18 4.43 7.39 3.48 4.09 9.44 5.43 14.84 5.19s10.6-1.78 16-2.28c.75-.06 1.5-.11 2.26-.13a22.37 22.37 0 01-20.75 17.23zm-54.3 36.13a22.37 22.37 0 01-21.46-31.49 17.83 17.83 0 014.73 4.55c1.74 2.45 2.82 5.27 4.86 7.54 3.77 4.2 10.11 5.68 15.83 5.54 5.54-.12 10.87-1.48 16.38-1.9a22.36 22.36 0 01-20.34 15.76zm11.05 43.43a22.37 22.37 0 01-40.78-18.29 22.27 22.27 0 014.91 4.38c2.13 2.59 3.53 5.53 6 7.94 4.57 4.49 11.95 6.34 18.52 6.51a97.1 97.1 0 0011.35-.54z" opacity=".1"/><path d="M793 662.85s17.65-.54 23-4.33 27.16-8.31 28.48-2.24 26.53 30.22 6.6 30.38-46.31-3.1-51.62-6.34-6.46-17.47-6.46-17.47z" fill="#656380"/><path d="M851.4 684.59c-19.93.16-46.31-3.11-51.62-6.34-4-2.47-5.65-11.3-6.19-15.38H793s1.12 14.24 6.43 17.47 31.69 6.5 51.62 6.34c5.75 0 7.74-2.09 7.63-5.12-.8 1.81-2.99 2.95-7.28 3.03z" opacity=".2"/><path d="M323 42.86l-18.25 11.57 11.08-20.15a18 18 0 00-11-3.94h-.3a21.58 21.58 0 01-3.78-.28l-6.19 3.92 2.65-4.82a22.06 22.06 0 01-10.82-8.21l-11.07 7 7-12.72c-6.48-7.77-15.2-12.54-24.81-12.54-11.51 0-21.76 6.85-28.38 17.52a21.24 21.24 0 01-18.76 10.12h-.62c-12.71 0-23 14.41-23 32.19s10.3 32.18 23 32.18a17.2 17.2 0 008-2c8.29-4.31 19.17-4.39 27.85-.54a29 29 0 0023.68.05c8.62-3.77 19.37-3.69 27.61.54a17.23 17.23 0 007.93 2c12.71 0 23-14.41 23-32.18A40.86 40.86 0 00323 42.86z" fill="#f2f2f2"/><path d="M288.59 89.95a34 34 0 00-19.72 2.14 29 29 0 01-23.67-.05c-8.69-3.85-19.57-3.77-27.86.54a17.2 17.2 0 01-8 2c-11.29 0-20.68-11.38-22.64-26.38a21.58 21.58 0 005.64-6.08c6.66-10.66 16.87-17.53 28.38-17.53s21.64 6.77 28.26 17.32a21.79 21.79 0 0018.76 10.31h.26c9 .01 16.8 7.22 20.59 17.73z" opacity=".03"/><path d="M800.07 66.42L791 72.19l5.53-10a9 9 0 00-5.51-2h-.14a10.79 10.79 0 01-1.89-.14l-3.09 2 1.3-2.46a11 11 0 01-5.4-4.09l-5.52 3.5 3.49-6.34a16.17 16.17 0 00-12.37-6.26c-5.75 0-10.86 3.42-14.16 8.74a10.57 10.57 0 01-9.36 5h-.31c-6.34 0-11.48 7.19-11.48 16s5.14 16.05 11.48 16.05a8.62 8.62 0 004-1 16.56 16.56 0 0113.89-.27 14.52 14.52 0 0011.81 0 16.58 16.58 0 0113.77.27 8.61 8.61 0 004 1c6.34 0 11.48-7.18 11.48-16.05a20.28 20.28 0 00-2.45-9.72z" fill="#f2f2f2"/><path d="M782.92 89.91a17 17 0 00-9.83 1.07 14.52 14.52 0 01-11.81 0 16.58 16.58 0 00-13.9.27 8.55 8.55 0 01-4 1c-5.64 0-10.32-5.67-11.3-13.15a10.93 10.93 0 002.82-3c3.3-5.32 8.42-8.73 14.16-8.73s10.79 3.37 14.09 8.63a10.85 10.85 0 009.36 5.14h.15c4.49-.07 8.34 3.53 10.26 8.77z" opacity=".03"/><path d="M204.34 215.86l14.66 9.28-8.88-16.15a14.48 14.48 0 018.85-3.15h.23a17.08 17.08 0 003-.22l4.95 3.14-2.15-3.86a17.78 17.78 0 008.67-6.58l8.87 5.62-5.54-10.19c5.19-6.22 12.18-10 19.87-10 9.23 0 17.44 5.48 22.75 14a17 17 0 0015 8.11h.5c10.18 0 18.43 11.54 18.43 25.78s-8.25 25.79-18.43 25.79a13.86 13.86 0 01-6.43-1.61 26.59 26.59 0 00-22.31-.43 23.28 23.28 0 01-19 0 26.64 26.64 0 00-22.12.43 13.9 13.9 0 01-6.35 1.57c-10.19 0-18.44-11.54-18.44-25.79a32.78 32.78 0 013.87-15.74z" fill="#f2f2f2"/><path d="M231.89 253.59a27.36 27.36 0 0115.8 1.72 23.28 23.28 0 0019 0 26.61 26.61 0 0122.32.43 13.82 13.82 0 006.42 1.61c9.05 0 16.57-9.11 18.14-21.13a17.44 17.44 0 01-4.52-4.88c-5.31-8.54-13.52-14-22.75-14s-17.33 5.42-22.64 13.88a17.44 17.44 0 01-15 8.25h-.23c-7.26-.07-13.5 5.71-16.54 14.12z" opacity=".03"/></svg>
\ No newline at end of file
+<svg id="a75d69e6-d07c-4db3-9c83-72b2470e5561" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="1108" height="731.18" viewBox="0 0 1108 731.18"><title>react</title><path d="M813.68,415.2l6.89-2.7c.66-.26,1.31-.54,2-.81a59.85,59.85,0,0,1,15.28-115.77l-4.8,24.2,18.22-23.92.16,0a59.87,59.87,0,0,1,51.16,67.45c-.15,1.13-.39,2.23-.6,3.34,5.61-4.43,10.87-9.32,14.81-15,8-11.54,10.71-25.76,13.47-43.17,5.47-34.48,10.4-69.34,14.84-104.18a59.83,59.83,0,0,1-42-65.36c.25-1.82.6-3.59,1-5.34.1-.44.2-.88.31-1.31.43-1.69.91-3.35,1.47-5,.09-.27.21-.52.3-.78.5-1.37,1-2.72,1.65-4,.22-.5.44-1,.67-1.47.69-1.43,1.42-2.83,2.22-4.19.27-.45.56-.88.83-1.33.62-1,1.27-2,1.94-2.93.36-.5.71-1,1.08-1.49l.27-.39,0,0a59.81,59.81,0,0,1,74.64-17l-6.24,31.49,18-23.64a59.5,59.5,0,0,1,16.32,68.62h.07c-.17.4-.38.78-.55,1.18-.33.74-.67,1.47-1,2.2-.46.93-1,1.84-1.45,2.74-.38.68-.75,1.36-1.16,2-.59,1-1.23,1.9-1.87,2.83-.38.54-.73,1.1-1.12,1.63-1,1.39-2.12,2.72-3.26,4-.4.45-.83.86-1.25,1.3-.81.86-1.62,1.71-2.48,2.52-.53.5-1.09,1-1.64,1.46-.79.7-1.6,1.38-2.43,2-.59.47-1.19.92-1.79,1.36-.87.63-1.75,1.22-2.64,1.81-.6.39-1.2.78-1.81,1.15-1,.61-2.05,1.17-3.1,1.72-.53.27-1,.57-1.59.83-1.58.77-3.2,1.48-4.85,2.11-.31.12-.64.21-.95.32-1.38.5-2.77,1-4.18,1.35-.61.17-1.23.31-1.85.46-1.15.28-2.31.54-3.48.76q-1,.18-2.07.33c-1.15.17-2.31.3-3.48.4-.69.06-1.37.12-2.07.16-1.26.06-2.53.07-3.8.06a2.08,2.08,0,0,0-.25,0q-2.82,22-5.92,44A59.82,59.82,0,0,1,1042,240.88l-15.68,26.58,25.21-16.59a59.68,59.68,0,0,1,11.5,44.16,58.76,58.76,0,0,1-4.5,15.94,59.83,59.83,0,0,1-111.19-4c-.23,1.48-.45,3-.68,4.46-2.44,15.35-5.47,34.46-16.23,50-7.29,10.56-17.33,18.36-27.09,25.22q-9.52,6.7-19.48,12.77a59.85,59.85,0,0,1-24.53,13.74q-16,8.19-32.69,14.81l-6.95,2.72c-6.25,2.44-12.65,4.94-19,7.6,1,.09,2,.17,3,.3a59.9,59.9,0,0,1,50.86,49.05l-42.31,23.11,42.18-1.89A59.16,59.16,0,0,1,843,534.54a59.87,59.87,0,0,1-82.7,11.74l2.1,3.91c1.4,2.58,2.78,5.15,4.12,7.7,18.33,34.74,19.66,64.74,3.75,84.49l-13-10.45c15.49-19.22,3.2-49.77-5.5-66.27-1.32-2.5-2.68-5-4-7.56C736,536.27,722.65,511.53,728,485.2,736,445.5,779.05,428.7,813.68,415.2Z" transform="translate(-46 -84.41)" fill="#f2f2f2"/><path d="M315.6,603.42l-5.38-2.11c-.52-.2-1-.43-1.54-.63a46.75,46.75,0,0,0-11.94-90.42l3.75,18.9-14.22-18.68h-.13a46.76,46.76,0,0,0-40,52.68c.12.89.31,1.74.47,2.61a55.84,55.84,0,0,1-11.56-11.73c-6.23-9-8.37-20.12-10.53-33.71C220.29,493.4,216.45,466.18,213,439a46.72,46.72,0,0,0,32.77-51.05c-.2-1.42-.47-2.8-.79-4.17l-.24-1c-.34-1.32-.71-2.62-1.15-3.88-.07-.21-.16-.41-.24-.61-.39-1.07-.82-2.12-1.28-3.15-.18-.38-.35-.77-.53-1.15-.54-1.11-1.11-2.2-1.73-3.26-.21-.36-.44-.7-.65-1-.49-.78-1-1.55-1.52-2.29-.28-.39-.55-.79-.84-1.17l-.21-.3h0a46.76,46.76,0,0,0-58.29-13.32l4.88,24.6-14.07-18.46a46.48,46.48,0,0,0-12.75,53.59h-.05c.13.31.29.61.43.92.26.58.52,1.15.8,1.72q.54,1.08,1.14,2.13c.29.54.58,1.07.9,1.59.46.75,1,1.48,1.46,2.21.3.42.57.86.88,1.27.8,1.08,1.65,2.12,2.54,3.13.31.35.65.67,1,1,.63.67,1.27,1.33,1.94,2,.41.4.85.77,1.28,1.14q.93.83,1.89,1.59c.46.36.93.71,1.4,1.06.68.49,1.37,1,2.06,1.41.47.31.94.61,1.42.9.79.48,1.6.91,2.42,1.34.42.22.82.45,1.24.66,1.24.6,2.5,1.15,3.79,1.64.24.1.5.16.74.25,1.07.39,2.16.75,3.27,1.06.47.13,1,.24,1.44.35.9.22,1.8.43,2.72.6l1.61.26c.9.13,1.81.23,2.72.31.54.05,1.07.09,1.62.12,1,.05,2,.06,3,.05h.19q2.2,17.22,4.62,34.41a46.71,46.71,0,0,0-67.48-8.14L149.49,488l-19.68-12.95a46.57,46.57,0,0,0-9,34.49A45.8,45.8,0,0,0,124.34,522a46.73,46.73,0,0,0,86.84-3.12c.18,1.15.35,2.32.53,3.48,1.9,12,4.27,26.92,12.67,39.08,5.7,8.24,13.54,14.33,21.16,19.69q7.44,5.24,15.21,10a46.88,46.88,0,0,0,19.16,10.74c8.32,4.26,16.84,8.14,25.54,11.56l5.42,2.13c4.88,1.9,9.88,3.85,14.81,5.93-.78.07-1.57.13-2.36.24A46.77,46.77,0,0,0,283.6,660l33,18-32.94-1.47a46.78,46.78,0,0,0,73.57,29.2c-.55,1-1.09,2-1.64,3.05-1.09,2-2.17,4-3.22,6-14.31,27.13-15.35,50.57-2.92,66l10.13-8.16c-12.1-15-2.5-38.87,4.3-51.76,1-1.95,2.09-3.92,3.16-5.9,9.19-17,19.61-36.37,15.46-56.94C376.29,627.08,342.64,614,315.6,603.42Z" transform="translate(-46 -84.41)" fill="#f2f2f2"/><ellipse cx="554" cy="707.68" rx="554" ry="23.5" fill="#3f3d56"/><ellipse cx="554" cy="707.68" rx="554" ry="23.5" opacity="0.1"/><ellipse cx="554" cy="694.68" rx="554" ry="23.5" fill="#3f3d56"/><path d="M131,770.73c-3-5.51.4-12.26,4.28-17.18s8.61-10,8.51-16.29c-.14-9-9.7-14.31-17.33-19.08a84.78,84.78,0,0,1-15.56-12.51,23,23,0,0,1-4.78-6.4c-1.58-3.52-1.53-7.52-1.43-11.38q.5-19.26,1.9-38.48" transform="translate(-46 -84.41)" fill="none" stroke="#3f3d56" stroke-miterlimit="10" stroke-width="4"/><path d="M92.11,648.7a14,14,0,0,1,7-11.49l3.14,6.21-.09-7.52a13.86,13.86,0,0,1,4.62-.56A14,14,0,1,1,92.11,648.7Z" transform="translate(-46 -84.41)" fill="#0f5d40"/><path d="M117.14,743.7a14,14,0,0,0,26.5-5.76,13.82,13.82,0,0,0-.91-5.69,14,14,0,0,0-26.27.15l8.77,7.13-9.64-2.24A13.89,13.89,0,0,0,117.14,743.7Z" transform="translate(-46 -84.41)" fill="#0f5d40"/><path d="M124.07,716.45a14,14,0,0,0,4.46-27.54l.07,5.79-3.18-6.29h0a14,14,0,0,0-1.31,28.05Z" transform="translate(-46 -84.41)" fill="#0f5d40"/><path d="M90,693.78a14,14,0,0,0,1.32-28,13.88,13.88,0,0,0-7.52,1.78l2.48,6.8-5.11-4.9a14,14,0,0,0-4.53,9.69A13.33,13.33,0,0,0,77,683,14,14,0,0,0,90,693.78Z" transform="translate(-46 -84.41)" fill="#0f5d40"/><path d="M94,652.44c3.24.36,6.39,1.37,9.64,1.57s6.82-.58,8.88-3.1c1.11-1.37,1.66-3.09,2.59-4.57a10.08,10.08,0,0,1,3.54-3.33,14,14,0,1,1-26.24,9.32C92.94,652.35,93.47,652.39,94,652.44Z" transform="translate(-46 -84.41)" opacity="0.1"/><path d="M90,693.78a14,14,0,0,0,13.35-20,10.4,10.4,0,0,0-2.82,2.83c-1,1.51-1.61,3.25-2.78,4.64-2.19,2.57-5.92,3.41-9.31,3.25s-6.66-1.11-10-1.42c-.47,0-.94-.08-1.41-.09A14,14,0,0,0,90,693.78Z" transform="translate(-46 -84.41)" opacity="0.1"/><path d="M124.07,716.45a14,14,0,0,0,13.47-19.76,11.36,11.36,0,0,0-3,2.85c-1.09,1.54-1.77,3.31-3,4.73-2.36,2.64-6.34,3.57-9.93,3.48s-6.82-.93-10.28-1.19A14,14,0,0,0,124.07,716.45Z" transform="translate(-46 -84.41)" opacity="0.1"/><path d="M117.14,743.7a14,14,0,0,0,26.5-5.76,13.82,13.82,0,0,0-.91-5.69,14,14,0,0,0-3.08,2.74c-1.34,1.63-2.21,3.47-3.76,5-2.87,2.82-7.5,4-11.62,4.09A62.35,62.35,0,0,1,117.14,743.7Z" transform="translate(-46 -84.41)" opacity="0.1"/><path d="M152.19,764.39s-11.08-.34-14.41-2.72-17-5.22-17.87-1.4-16.65,19-4.14,19.06,29.06-2,32.39-4S152.19,764.39,152.19,764.39Z" transform="translate(-46 -84.41)" fill="#656380"/><path d="M115.54,778c12.51.1,29.06-2,32.4-4,2.53-1.54,3.54-7.09,3.88-9.65l.37,0s-.7,8.93-4,11-19.89,4.08-32.39,4c-3.61,0-4.86-1.31-4.79-3.22C111.48,777.26,112.86,778,115.54,778Z" transform="translate(-46 -84.41)" opacity="0.2"/><path d="M1101,779.73c-3-5.51.4-12.26,4.28-17.18s8.61-10,8.51-16.29c-.14-9-9.7-14.31-17.33-19.08a84.78,84.78,0,0,1-15.56-12.51,23,23,0,0,1-4.78-6.4c-1.58-3.52-1.53-7.52-1.43-11.38q.49-19.26,1.9-38.48" transform="translate(-46 -84.41)" fill="none" stroke="#3f3d56" stroke-miterlimit="10" stroke-width="4"/><path d="M1062.11,657.7a14,14,0,0,1,7-11.49l3.14,6.21-.09-7.52a13.86,13.86,0,0,1,4.62-.56,14,14,0,1,1-14.68,13.36Z" transform="translate(-46 -84.41)" fill="#0f5d40"/><path d="M1087.14,752.7a14,14,0,0,0,26.5-5.76,13.82,13.82,0,0,0-.91-5.69,14,14,0,0,0-26.27.15l8.77,7.13-9.64-2.24A13.89,13.89,0,0,0,1087.14,752.7Z" transform="translate(-46 -84.41)" fill="#0f5d40"/><path d="M1094.07,725.45a14,14,0,0,0,4.46-27.54l.07,5.79-3.18-6.29h0a14,14,0,0,0-1.31,28.05Z" transform="translate(-46 -84.41)" fill="#0f5d40"/><path d="M1060,702.78a14,14,0,0,0,1.32-28,13.88,13.88,0,0,0-7.52,1.78l2.48,6.8-5.11-4.9a14,14,0,0,0-4.53,9.69A13.33,13.33,0,0,0,1047,692,14,14,0,0,0,1060,702.78Z" transform="translate(-46 -84.41)" fill="#0f5d40"/><path d="M1064,661.44c3.24.36,6.39,1.37,9.64,1.57s6.82-.58,8.88-3.1c1.11-1.37,1.66-3.09,2.59-4.57a10.08,10.08,0,0,1,3.54-3.33,14,14,0,1,1-26.24,9.32C1062.94,661.35,1063.47,661.39,1064,661.44Z" transform="translate(-46 -84.41)" opacity="0.1"/><path d="M1060,702.78a14,14,0,0,0,13.35-20,10.4,10.4,0,0,0-2.82,2.83c-1,1.51-1.61,3.25-2.78,4.64-2.19,2.57-5.92,3.41-9.31,3.25s-6.66-1.11-10-1.42c-.47,0-.94-.08-1.41-.09A14,14,0,0,0,1060,702.78Z" transform="translate(-46 -84.41)" opacity="0.1"/><path d="M1094.07,725.45a14,14,0,0,0,13.47-19.76,11.36,11.36,0,0,0-3,2.85c-1.09,1.54-1.77,3.31-3,4.73-2.36,2.64-6.34,3.57-9.93,3.48s-6.82-.93-10.28-1.19A14,14,0,0,0,1094.07,725.45Z" transform="translate(-46 -84.41)" opacity="0.1"/><path d="M1087.14,752.7a14,14,0,0,0,26.5-5.76,13.82,13.82,0,0,0-.91-5.69,14,14,0,0,0-3.08,2.74c-1.34,1.63-2.21,3.47-3.76,5-2.87,2.82-7.5,4-11.62,4.09A62.35,62.35,0,0,1,1087.14,752.7Z" transform="translate(-46 -84.41)" opacity="0.1"/><path d="M1122.19,773.39s-11.08-.34-14.41-2.72-17-5.22-17.87-1.4-16.65,19-4.14,19.06,29.06-2,32.39-4S1122.19,773.39,1122.19,773.39Z" transform="translate(-46 -84.41)" fill="#656380"/><path d="M1085.54,787c12.51.1,29.06-2,32.4-4,2.53-1.54,3.54-7.09,3.88-9.65l.37,0s-.7,8.93-4,11-19.89,4.08-32.39,4c-3.61,0-4.86-1.31-4.79-3.22C1081.48,786.26,1082.86,787,1085.54,787Z" transform="translate(-46 -84.41)" opacity="0.2"/><path d="M791.57,415.56q-9.92-3.4-20-6.3,1.66-6.79,3.09-13.65c15.14-73.51,5.24-132.73-28.57-152.22-32.42-18.7-85.44.8-139,47.39q-7.92,6.92-15.47,14.2-5.07-4.85-10.3-9.51C525.21,245.64,469,224.65,435.18,244.2c-32.39,18.75-42,74.42-28.35,144.09q2,10.35,4.59,20.58c-7.95,2.26-15.64,4.67-23,7.24C322.63,439,280.61,475,280.61,512.29c0,38.51,45.11,77.14,113.64,100.56q8.34,2.83,16.8,5.26-2.74,11-4.88,22.18c-13,68.46-2.84,122.82,29.46,141.45C469,801,525,781.2,579.52,733.54c4.31-3.77,8.63-7.77,13-11.95q8.18,7.89,16.79,15.32c52.82,45.45,105,63.81,137.26,45.12,33.33-19.29,44.16-77.69,30.1-148.73q-1.6-8.14-3.73-16.61,5.91-1.74,11.56-3.61c71.24-23.6,117.6-61.76,117.6-100.79,0-37.43-43.38-73.62-110.5-96.73Z" transform="translate(-46 -84.41)" fill="#53c1de"/><path d="M776.12,587.88c-3.4,1.13-6.88,2.21-10.44,3.27a621.6,621.6,0,0,0-31.47-78.73,623.06,623.06,0,0,0,30.25-77.58c6.35,1.84,12.53,3.78,18.47,5.83,57.51,19.79,92.59,49.06,92.59,71.62,0,24-37.89,55.21-99.4,75.59ZM750.6,638.46c6.22,31.41,7.1,59.81,3,82-3.7,19.95-11.14,33.25-20.34,38.58-19.59,11.33-61.47-3.4-106.64-42.27q-7.77-6.69-15.63-14.25a624.23,624.23,0,0,0,52.09-66.14,620.2,620.2,0,0,0,84.17-13q1.9,7.68,3.37,15ZM492.48,757.1c-19.14,6.76-34.38,6.95-43.59,1.64-19.6-11.31-27.75-55-16.63-113.5q2-10.37,4.53-20.63a625.79,625.79,0,0,0,83.75,12.13,645.09,645.09,0,0,0,53.35,65.9q-5.79,5.61-11.84,10.91c-24.11,21.08-48.28,36-69.57,43.55ZM402.84,587.73c-30.31-10.36-55.33-23.82-72.49-38.5-15.41-13.2-23.19-26.31-23.19-36.94,0-22.63,33.74-51.5,90-71.11q10.6-3.69,21.39-6.73a637.08,637.08,0,0,0,30.29,78.48,646.29,646.29,0,0,0-30.66,79.6Q410.44,590.32,402.84,587.73Zm30.05-204.54c-11.68-59.69-3.93-104.72,15.59-116,20.79-12,66.76,5.12,115.22,48.15,3.1,2.75,6.21,5.63,9.32,8.6a635.89,635.89,0,0,0-52.93,65.52,648.42,648.42,0,0,0-82.93,12.89q-2.39-9.52-4.27-19.15ZM701,449.38q-9.11-15.74-18.89-31.08c19.83,2.51,38.82,5.83,56.66,9.91a565.54,565.54,0,0,1-19.89,53.51q-8.61-16.35-17.88-32.34ZM591.64,342.91a569.3,569.3,0,0,1,36.57,44.14q-36.71-1.73-73.45,0c12.07-15.92,24.44-30.72,36.88-44.13Zm-110,106.65q-9.15,15.87-17.55,32.14c-7.73-18.33-14.34-36.36-19.74-53.77,17.73-4,36.64-7.21,56.34-9.68Q490.77,433.69,481.62,449.56Zm19.61,158.65A564.64,564.64,0,0,1,444,599c5.49-17.71,12.25-36.13,20.15-54.86q8.43,16.29,17.61,32.16Q491.1,592.49,501.23,608.21Zm91.14,75.33C579.79,670,567.24,655,555,638.79q17.85.71,36.36.71,19,0,37.51-.84A563.94,563.94,0,0,1,592.37,683.54ZM719.08,543.19A562.82,562.82,0,0,1,740,597.85a561.35,561.35,0,0,1-58,9.89q9.85-15.63,19.08-31.63,9.38-16.26,18-32.92Zm-41,19.66q-14.12,24.52-29.81,48.1c-18.44,1.32-37.49,2-56.91,2s-38.15-.6-56.27-1.78Q519,587.67,504.7,563t-26.51-50.08q12.27-25.53,26.43-50.1h0q14.14-24.56,30.13-48c18.49-1.4,37.43-2.13,56.59-2.13s38.22.74,56.69,2.14q15.81,23.37,30,47.81t26.79,49.87q-12.45,25.62-26.71,50.3Zm54.77-296.46c20.81,12,28.9,60.4,15.83,123.87q-1.29,6.19-2.8,12.35a635.74,635.74,0,0,0-83.09-13.13,625.16,625.16,0,0,0-52.53-65.56q7-6.74,14.29-13.11c45.88-39.93,88.76-55.69,108.3-44.42Z" transform="translate(-46 -84.41)" fill="#fff"/><path d="M591.34,456.79a55.5,55.5,0,1,1-55.5,55.5,55.49,55.49,0,0,1,55.5-55.5" transform="translate(-46 -84.41)" fill="#53c1de"/><path d="M605.26,104.81a16.6,16.6,0,1,1-16.6-16.6A16.52,16.52,0,0,1,605.26,104.81Z" transform="translate(-46 -84.41)" fill="#3f3d56"/><path d="M575.4,109a16.62,16.62,0,0,1,12.49-24.54,16.6,16.6,0,1,0,1.41,33.07A16.6,16.6,0,0,1,575.4,109Z" transform="translate(-46 -84.41)" fill="#3f3d56"/><rect x="521.91" y="43.52" width="44.47" height="69.37" fill="#3f3d56"/><rect x="521.91" y="43.52" width="44.47" height="69.37" opacity="0.1"/><path d="M497.66,379.61s-4.75,13.05-16,14.83-17.79,4.74-17.79,4.74l26.68,17.19,14.23-1.78s1.78-18.38,7.71-22.53S497.66,379.61,497.66,379.61Z" transform="translate(-46 -84.41)" fill="#a0616a"/><path d="M690.34,379.61s4.75,13.05,16,14.83,17.79,4.74,17.79,4.74l-26.68,17.19-14.23-1.78s-1.78-18.38-7.71-22.53S690.34,379.61,690.34,379.61Z" transform="translate(-46 -84.41)" fill="#a0616a"/><path d="M560.5,264.59s-7.11,3.56-9.48,10.68c0,0-13,4.15-20.16,15.41,0,0-8.9,9.49-10.08,14.23S506,338.11,506,338.11s-13.64,44.47-20.75,49.21c0,0,22.53-4.74,26.68,17.79,0,0,5.33,0,11.26-20.75s20.16-46.25,20.16-46.25,4.74-17.78,8.89-20.75,10.67-16.6,16.6-13,45.06-.6,45.06-.6S637,314.4,637.58,321.51s4.74,7.71,5.33,13.64,22.53,52.76,22.53,52.76,4.15,13,5.34,16c0,0,13-31.42,30.24-13.63,0,0-.6-11.86-5.93-19s-28.46-62.84-28.46-62.84-2.37-8.3-4.74-10.67-20.76-21.35-27.28-21.35c0,0-3.55-8.89-7.7-10.08Z" transform="translate(-46 -84.41)" fill="#3f3d56"/><path d="M507.14,410.44a28.89,28.89,0,0,1-28.22-3.79,56.37,56.37,0,0,0-12.59-7.3c-6.29-2.54-13.81-4.42-16.1-.17-4.15,7.71,50.39,26.68,50.39,26.68S507.74,421.71,507.14,410.44Z" transform="translate(-46 -84.41)" fill="#3f3d56"/><path d="M680.86,410.44a28.89,28.89,0,0,0,28.22-3.79,56.37,56.37,0,0,1,12.59-7.3c6.29-2.54,13.81-4.42,16.1-.17,4.15,7.71-50.39,26.68-50.39,26.68S680.26,421.71,680.86,410.44Z" transform="translate(-46 -84.41)" fill="#3f3d56"/><path d="M579.88,167.08c-.22,2.06-.9,4.29-2.66,5.38-1.44.9-3.26.83-4.92,1.17a11.46,11.46,0,0,0-7.82,6.77,17.51,17.51,0,0,0-.75,10.55,39.22,39.22,0,0,0,1.52,5.06c1.74,4.92,3.84,9.8,7.09,13.89a59,59,0,0,0,9.3,8.77c2.11,1.72,4.29,3.47,6.89,4.28a21.75,21.75,0,0,0,5.4.72c2.25.1,4.65.17,6.6-.95,3-1.73,3.89-5.55,5.52-8.62,1.38-2.6,3.44-4.81,4.73-7.46a29.49,29.49,0,0,0,2-6.52l2.77-12.3c1-4.47,1.92-9.51-.59-13.34a2.28,2.28,0,0,0-.74-.77,2.79,2.79,0,0,0-1.52-.15,16.44,16.44,0,0,1-9.15-2.09,3.93,3.93,0,0,1-1.15-.9,4.72,4.72,0,0,1-.7-2.12,22.2,22.2,0,0,0-1.28-4.45,3,3,0,0,0-.87-1.34,3.15,3.15,0,0,0-1.41-.47,114.47,114.47,0,0,0-12.93-1.35c-1.42-.07-3.56-.64-4.54.62S580,165.58,579.88,167.08Z" transform="translate(-46 -84.41)" fill="#a0616a"/><path d="M579.88,167.08c-.22,2.06-.9,4.29-2.66,5.38-1.44.9-3.26.83-4.92,1.17a11.46,11.46,0,0,0-7.82,6.77,17.51,17.51,0,0,0-.75,10.55,39.22,39.22,0,0,0,1.52,5.06c1.74,4.92,3.84,9.8,7.09,13.89a59,59,0,0,0,9.3,8.77c2.11,1.72,4.29,3.47,6.89,4.28a21.75,21.75,0,0,0,5.4.72c2.25.1,4.65.17,6.6-.95,3-1.73,3.89-5.55,5.52-8.62,1.38-2.6,3.44-4.81,4.73-7.46a29.49,29.49,0,0,0,2-6.52l2.77-12.3c1-4.47,1.92-9.51-.59-13.34a2.28,2.28,0,0,0-.74-.77,2.79,2.79,0,0,0-1.52-.15,16.44,16.44,0,0,1-9.15-2.09,3.93,3.93,0,0,1-1.15-.9,4.72,4.72,0,0,1-.7-2.12,22.2,22.2,0,0,0-1.28-4.45,3,3,0,0,0-.87-1.34,3.15,3.15,0,0,0-1.41-.47,114.47,114.47,0,0,0-12.93-1.35c-1.42-.07-3.56-.64-4.54.62S580,165.58,579.88,167.08Z" transform="translate(-46 -84.41)" opacity="0.1"/><path d="M571.85,174.15a26.93,26.93,0,0,0-7.13-1.12c-5.72-.14-11.84,1.83-15.14,6.5A15.34,15.34,0,0,0,547.29,191a23.57,23.57,0,0,0,5.2,10.66,32,32,0,0,1,4,5.24c1.58,3,1.63,6.59,2.06,10,1,8.12,4.46,15.75,5.83,23.82s.19,17.42-6.18,22.55c-1.07.86-2.37,1.77-2.46,3.14-.14,2.19,2.71,3.12,4.9,3.33,6.55.62,13.27,1.23,19.63-.46,2.63-.7,5.17-1.79,7.85-2.29,6.8-1.27,13.64,1.34,20.45,2.59a90.61,90.61,0,0,0,14.91,1.21,7.94,7.94,0,0,0,3.43-.45,2.75,2.75,0,0,0,1.74-2.74,4.76,4.76,0,0,0-1.18-2c-3.44-4.25-4.49-9.9-5.43-15.29l-3.15-18.11c-1.69-9.68-3.26-20.2,1.32-28.89,3.29-6.25,9.36-10.65,12.83-16.8a9.84,9.84,0,0,0,1.55-6.28c-.52-3.09-3.31-5.3-6.17-6.59A23.21,23.21,0,0,0,611,173c.1,4.33-1,8.71-1.71,13l-1.21,7a88.83,88.83,0,0,1-2.71,12.2,12.85,12.85,0,0,1-2.17,4.42,11.43,11.43,0,0,1-3.83,2.79,22.83,22.83,0,0,1-10.14,2.32,13.54,13.54,0,0,1-4.48-.69,19,19,0,0,1-6.17-4.34,10.11,10.11,0,0,1-1.63-1.77,9.93,9.93,0,0,1-1.11-2.67,55.42,55.42,0,0,1-1.91-7.48c-.3-1.94-.4-3.91-.54-5.87C573,186.12,573,179.72,571.85,174.15Z" transform="translate(-46 -84.41)" fill="#0f5d40"/><path d="M565.84,288.9s-2.37,31.43,12.45,36.76,1.78-26.09,1.78-26.09l-4.75-9.48Z" transform="translate(-46 -84.41)" fill="#a0616a"/><path d="M616.23,288.9s2.37,31.43-12.45,36.76S602,299.57,602,299.57l4.75-9.48Z" transform="translate(-46 -84.41)" fill="#a0616a"/><path d="M552.79,184l-4.74,7.71s4.15,26.68,4.74,31.42a62.2,62.2,0,0,0,2.38,10.08s.59,14.23.59,19.57,3,14.23,3,14.23a64.82,64.82,0,0,0,3,14.82c2.37,6.52,4.74,14.23,4.74,14.23s3-8.3,14.82,4.15a7.18,7.18,0,0,0,0-10.08s-3.55-16-3.55-24.31-6.53-48-6.53-48S567,172.7,552.79,184Z" transform="translate(-46 -84.41)" opacity="0.1"/><path d="M551.61,183.37l-4.74,7.71s4.15,26.68,4.74,31.42A61.84,61.84,0,0,0,554,232.58s.59,14.23.59,19.56,3,14.23,3,14.23a64.53,64.53,0,0,0,3,14.82c2.37,6.53,4.75,14.23,4.75,14.23s3-8.3,14.82,4.15a7.18,7.18,0,0,0,0-10.07s-3.56-16-3.56-24.31-6.52-48-6.52-48S565.84,172.1,551.61,183.37Z" transform="translate(-46 -84.41)" fill="#0f5d40"/><path d="M629.87,179.22l3,3.53s3.49,20.18-4.22,45.68l-2.37,23.12s-4.15,19.57-4.74,24.31-.59,5.33-1.78,7.11a2.29,2.29,0,0,0,0,3l-3.56,13s-5.33-6.52-16,1.78c0,0-3-4.74-.6-8.89s2.37-5.93,1.78-7.12,2.37-7.11,2.37-8.3S607.93,248,607.93,248s1.78-26.68,3.56-35.57c1.09-5.47,1.07-17.66.88-26.24-.19-8.94,10.63-13.78,17-7.5C629.52,178.85,629.7,179,629.87,179.22Z" transform="translate(-46 -84.41)" opacity="0.1"/><path d="M631.65,178l3,3.53s3.49,20.19-4.22,45.68l-2.37,23.12s-4.15,19.57-4.74,24.31-.6,5.34-1.78,7.12a2.28,2.28,0,0,0,0,3L618,297.8s-5.33-6.53-16,1.77c0,0-3-4.74-.59-8.89s2.37-5.93,1.78-7.11,2.37-7.12,2.37-8.3,4.15-28.46,4.15-28.46,1.78-26.68,3.56-35.58.59-35.57.59-35.57S623.35,169.14,631.65,178Z" transform="translate(-46 -84.41)" fill="#0f5d40"/><circle cx="545.92" cy="61.61" r="23.72" fill="#a0616a"/><path d="M604.29,110.41a16.6,16.6,0,0,1-31.09.44c9.26-3.73,18.72-.41,18.72-.41C596.65,108.78,600.75,108.93,604.29,110.41Z" transform="translate(-46 -84.41)" opacity="0.1"/><path d="M591.92,111.63s-45.65-16-34.38,61.66c0,0,10.08,6.52,17.78,2.37,0,0-5.33-53.95,15.42-51.58s17.19,50.4,17.19,50.4,11.86,3.55,15.42-3S622.16,101,591.92,111.63Z" transform="translate(-46 -84.41)" fill="#3f3d56"/><path d="M590.74,120.52c-14.24-1.62-16.2,23.27-16,39.05.17-15.69,2.81-37,16-35.49,14.81,1.69,17.24,26.66,17.41,40.8C608.32,151.9,606.9,122.37,590.74,120.52Z" transform="translate(-46 -84.41)" opacity="0.1"/><path d="M557.54,169.73a159.38,159.38,0,0,1-1.77-20.53,152.12,152.12,0,0,0,1.77,24.09s10.08,6.52,17.78,2.37c0,0-.12-1.28-.26-3.43C567.39,176.1,557.54,169.73,557.54,169.73Z" transform="translate(-46 -84.41)" opacity="0.1"/><path d="M623.35,168c-3.32,6.08-13.83,3.41-15.25,3-.07,2.2-.17,3.52-.17,3.52s11.86,3.55,15.42-3c.73-1.34,1.11-5.13,1-10.2C624.25,164.57,623.9,167,623.35,168Z" transform="translate(-46 -84.41)" opacity="0.1"/><path d="M872.73,757.37c4.74-8.78-.64-19.54-6.82-27.37s-13.73-16-13.57-26c.23-14.35,15.45-22.81,27.62-30.42a134.77,134.77,0,0,0,24.79-19.93c3-3.05,5.87-6.31,7.62-10.21,2.52-5.6,2.45-12,2.29-18.12q-.79-30.71-3-61.34" transform="translate(-46 -84.41)" fill="none" stroke="#3f3d56" stroke-miterlimit="10" stroke-width="4"/><path d="M934.74,562.9a22.31,22.31,0,0,0-11.16-18.32l-5,9.9.15-12a22.37,22.37,0,1,0,16,20.41Z" transform="translate(-46 -84.41)" fill="#0f5d40"/><path d="M894.86,714.29a22.36,22.36,0,1,1,1.08-18l-14,11.37,15.37-3.57A22.25,22.25,0,0,1,894.86,714.29Z" transform="translate(-46 -84.41)" fill="#0f5d40"/><path d="M883.81,670.86A22.37,22.37,0,0,1,876.72,627l-.12,9.22,5.06-10h.06a22.37,22.37,0,1,1,2.09,44.69Z" transform="translate(-46 -84.41)" fill="#0f5d40"/><path d="M938.11,634.73A22.37,22.37,0,1,1,948,592.87l-4,10.83,8.13-7.8a22.37,22.37,0,0,1-14.07,38.83Z" transform="translate(-46 -84.41)" fill="#0f5d40"/><path d="M931.74,568.86c-5.17.57-10.19,2.18-15.37,2.5s-10.87-.92-14.14-5c-1.77-2.17-2.65-4.91-4.14-7.28a16,16,0,0,0-5.63-5.3,22.37,22.37,0,1,0,41.81,14.84C933.42,568.71,932.58,568.77,931.74,568.86Z" transform="translate(-46 -84.41)" opacity="0.1"/><path d="M938.11,634.73a22.39,22.39,0,0,1-21.28-31.91,16.37,16.37,0,0,1,4.5,4.51c1.59,2.4,2.56,5.18,4.43,7.39,3.48,4.09,9.44,5.43,14.84,5.19s10.6-1.78,16-2.28c.75-.06,1.5-.11,2.26-.13A22.37,22.37,0,0,1,938.11,634.73Z" transform="translate(-46 -84.41)" opacity="0.1"/><path d="M883.81,670.86a22.37,22.37,0,0,1-21.46-31.49,17.83,17.83,0,0,1,4.73,4.55c1.74,2.45,2.82,5.27,4.86,7.54,3.77,4.2,10.11,5.68,15.83,5.54,5.54-.12,10.87-1.48,16.38-1.9A22.36,22.36,0,0,1,883.81,670.86Z" transform="translate(-46 -84.41)" opacity="0.1"/><path d="M894.86,714.29A22.37,22.37,0,0,1,854.08,696a22.27,22.27,0,0,1,4.91,4.38c2.13,2.59,3.53,5.53,6,7.94,4.57,4.49,11.95,6.34,18.52,6.51A97.1,97.1,0,0,0,894.86,714.29Z" transform="translate(-46 -84.41)" opacity="0.1"/><path d="M839,747.26s17.65-.54,23-4.33,27.16-8.31,28.48-2.24,26.53,30.22,6.6,30.38-46.31-3.1-51.62-6.34S839,747.26,839,747.26Z" transform="translate(-46 -84.41)" fill="#656380"/><path d="M897.4,769c-19.93.16-46.31-3.11-51.62-6.34-4-2.47-5.65-11.3-6.19-15.38l-.59,0s1.12,14.24,6.43,17.47,31.69,6.5,51.62,6.34c5.75,0,7.74-2.09,7.63-5.12C903.88,767.78,901.69,768.92,897.4,769Z" transform="translate(-46 -84.41)" opacity="0.2"/><path d="M369,127.27l-18.25,11.57,11.08-20.15a18,18,0,0,0-11-3.94h-.3a21.58,21.58,0,0,1-3.78-.28l-6.19,3.92,2.65-4.82a22.06,22.06,0,0,1-10.82-8.21l-11.07,7,7-12.72c-6.48-7.77-15.2-12.54-24.81-12.54-11.51,0-21.76,6.85-28.38,17.52a21.24,21.24,0,0,1-18.76,10.12l-.62,0c-12.71,0-23,14.41-23,32.19s10.3,32.18,23,32.18a17.2,17.2,0,0,0,8-2c8.29-4.31,19.17-4.39,27.85-.54a29,29,0,0,0,23.68.05c8.62-3.77,19.37-3.69,27.61.54a17.23,17.23,0,0,0,7.93,2c12.71,0,23-14.41,23-32.18A40.86,40.86,0,0,0,369,127.27Z" transform="translate(-46 -84.41)" fill="#f2f2f2"/><path d="M334.59,174.36a34,34,0,0,0-19.72,2.14,29,29,0,0,1-23.67-.05c-8.69-3.85-19.57-3.77-27.86.54a17.2,17.2,0,0,1-8,2c-11.29,0-20.68-11.38-22.64-26.38a21.58,21.58,0,0,0,5.64-6.08C245,135.87,255.21,129,266.72,129s21.64,6.77,28.26,17.32a21.79,21.79,0,0,0,18.76,10.31H314C323,156.64,330.8,163.85,334.59,174.36Z" transform="translate(-46 -84.41)" opacity="0.03"/><path d="M846.07,150.83,837,156.6l5.53-10a9,9,0,0,0-5.51-2h-.14a10.79,10.79,0,0,1-1.89-.14l-3.09,2L833.2,144a11,11,0,0,1-5.4-4.09l-5.52,3.5,3.49-6.34a16.17,16.17,0,0,0-12.37-6.26c-5.75,0-10.86,3.42-14.16,8.74a10.57,10.57,0,0,1-9.36,5h-.31c-6.34,0-11.48,7.19-11.48,16s5.14,16.05,11.48,16.05a8.62,8.62,0,0,0,4-1,16.56,16.56,0,0,1,13.89-.27,14.52,14.52,0,0,0,11.81,0,16.58,16.58,0,0,1,13.77.27,8.61,8.61,0,0,0,4,1c6.34,0,11.48-7.18,11.48-16.05A20.28,20.28,0,0,0,846.07,150.83Z" transform="translate(-46 -84.41)" fill="#f2f2f2"/><path d="M828.92,174.32a17,17,0,0,0-9.83,1.07,14.52,14.52,0,0,1-11.81,0,16.58,16.58,0,0,0-13.9.27,8.55,8.55,0,0,1-4,1c-5.64,0-10.32-5.67-11.3-13.15a10.93,10.93,0,0,0,2.82-3c3.3-5.32,8.42-8.73,14.16-8.73s10.79,3.37,14.09,8.63a10.85,10.85,0,0,0,9.36,5.14h.15C823.15,165.48,827,169.08,828.92,174.32Z" transform="translate(-46 -84.41)" opacity="0.03"/><path d="M250.34,300.27,265,309.55l-8.88-16.15a14.48,14.48,0,0,1,8.85-3.15h.23a17.08,17.08,0,0,0,3-.22l4.95,3.14L271,289.31a17.78,17.78,0,0,0,8.67-6.58l8.87,5.62L283,278.16c5.19-6.22,12.18-10,19.87-10,9.23,0,17.44,5.48,22.75,14a17,17,0,0,0,15,8.11h.5c10.18,0,18.43,11.54,18.43,25.78s-8.25,25.79-18.43,25.79a13.86,13.86,0,0,1-6.43-1.61,26.59,26.59,0,0,0-22.31-.43,23.28,23.28,0,0,1-19,0,26.64,26.64,0,0,0-22.12.43,13.9,13.9,0,0,1-6.35,1.57c-10.19,0-18.44-11.54-18.44-25.79A32.78,32.78,0,0,1,250.34,300.27Z" transform="translate(-46 -84.41)" fill="#f2f2f2"/><path d="M277.89,338a27.36,27.36,0,0,1,15.8,1.72,23.28,23.28,0,0,0,19,0,26.61,26.61,0,0,1,22.32.43,13.82,13.82,0,0,0,6.42,1.61c9.05,0,16.57-9.11,18.14-21.13a17.44,17.44,0,0,1-4.52-4.88c-5.31-8.54-13.52-14-22.75-14s-17.33,5.42-22.64,13.88a17.44,17.44,0,0,1-15,8.25h-.23C287.17,323.81,280.93,329.59,277.89,338Z" transform="translate(-46 -84.41)" opacity="0.03"/></svg>
diff --git a/img/undraw_tweetstorm.svg b/img/undraw_tweetstorm.svg
index 69e3bd5..90b3a44 100644
--- a/img/undraw_tweetstorm.svg
+++ b/img/undraw_tweetstorm.svg
@@ -1 +1 @@
-<svg data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="813.15" height="752" viewBox="0 0 813.15 752"><path fill="#e0e0e0" d="M559.73 403.7l-211.87-51.03V752l211.87-55.46V403.7z"/><path opacity=".1" d="M559.73 403.7l-211.87-51.03V752l211.87-55.46V403.7z"/><path fill="#e0e0e0" d="M135.99 403.7l211.87-51.03V752l-211.87-54.35V403.7z"/><path opacity=".17" d="M135.99 401.93l211.87-51.02V752l-211.87-54.35V401.93z"/><path fill="#e0e0e0" d="M346.09 354.44l111.59-92.73 211.86 54.36-111.58 89.39-211.87-51.02z"/><path fill="#e0e0e0" d="M29.05 318.94l108.71 86.52 211.86-51.02-107.59-90.96-212.98 55.46z"/><path opacity=".05" d="M27.29 317.18l111.35 88.28 211.87-51.02-110.25-92.73-212.97 55.47z"/><path fill="#e0e0e0" d="M135.99 403.7v293.95L347.86 752l2.86-291.73-214.73-56.57z"/><path fill="#e0e0e0" d="M559.73 696.54L347.86 752V460.27l211.87-56.57v292.84z"/><path opacity=".07" d="M559.73 696.54L347.86 752V460.27l211.87-56.57v292.84z"/><path opacity=".07" d="M475.42 598.92v96.51l84.31-23.3v-96.5l-84.31 23.29z"/><path opacity=".1" d="M133.22 556.22l118.69 29.95 95.4-77.65v-47.7l-211.87-53.24-2.22 148.64zm428.17 0L442.7 586.17l-95.39-77.65v-47.7l211.86-53.24 2.22 148.64z"/><path d="M259.23 399.1l8.21-1.64s-6.9 7.72-8.21 8.21a33.05 33.05 0 000 4.93c-15.77 67.69-73.93 37.79-73.93 37.79 21.19.49 23-8.21 23-8.21-12.32-1.81-14.79-9.86-14.79-9.86a5.08 5.08 0 006.57-1.64c-13.31-3.45-11.5-16.43-11.5-16.43 2.3 2 5.91 2.79 8.05 3.12-1.48-1.81-14-16.76-6.41-24.48 0 0 9.2 16.43 33.35 17.91l1.64-.33a12.89 12.89 0 01-.33-3.61 17.25 17.25 0 0117.25-17.25c11.5 0 14 6.57 14 6.57l8.21-4.93c-.18-.01-1 8.21-5.11 9.85z" fill="#00aced"/><path fill="#e0e0e0" d="M135.99 403.7l-108.7 89.85 211.86 53.24 108.71-86.52-211.87-56.57z"/><path d="M424.82 396.91l4.06-5.65s.18 8.6-.34 9.65a27.47 27.47 0 002.79 3c28.77 50.08-23.53 64.86-23.53 64.86 13.16-11.71 9.33-18 9.33-18-8.56 5.85-14.56 2.35-14.56 2.35a4.22 4.22 0 003.06-4.72c-10 5.44-16.3-3.47-16.3-3.47 2.52-.1 5.18-1.65 6.66-2.66-1.92-.26-18-2.27-17.77-11.25 0 0 14.9 4.77 30.42-8l.81-1.13a10.71 10.71 0 01-2.25-2 14.33 14.33 0 01.71-20.26c7-6.52 12.21-3.92 12.21-3.92l2.2-7.65c-.09.07 4.06 5.52 2.5 8.85z" fill="#0f5d40"/><path fill="#e0e0e0" d="M559.73 403.7l109.81 89.85-210.76 53.24-110.92-86.52 211.87-56.57z"/><path opacity=".07" d="M559.73 403.7l109.81 89.85-210.76 53.24-110.92-86.52 211.87-56.57z"/><path d="M417.09 122.35l7.51-3.61s-4.74 9.15-5.89 9.95a32.88 32.88 0 001.22 4.75c1.53 69.12-61.9 54.68-61.9 54.68 20.54-4.76 20.13-13.6 20.13-13.6-12.32 1.3-16.68-5.84-16.68-5.84a5 5 0 005.93-3.21c-13.68 0-15.14-13-15.14-13 2.7 1.33 6.39 1.23 8.53 1-1.87-1.38-17.6-12.7-12.22-22 0 0 12.93 13.56 36.56 9l1.5-.72a12.82 12.82 0 01-1.21-3.4 17.16 17.16 0 0112.36-20.89c11.08-2.84 15.08 2.88 15.08 2.88l6.7-6.78c-.17.07 1.07 8.19-2.48 10.79zM73.57 175l8.17-1.63s-6.86 7.68-8.17 8.17a32.88 32.88 0 000 4.9C57.88 253.77.03 224.03.03 224.03c21.08.49 22.88-8.17 22.88-8.17-12.26-1.8-14.71-9.81-14.71-9.81a5 5 0 006.54-1.63C1.47 201 3.27 188.12 3.27 188.12c2.29 2 5.88 2.78 8 3.11-1.47-1.8-13.89-16.67-6.37-24.35 0 0 9.15 16.34 33.18 17.81l1.63-.33a12.82 12.82 0 01-.33-3.6 17.16 17.16 0 0117.19-17.15c11.44 0 13.89 6.54 13.89 6.54l8.17-4.9c-.19-.01-1 8.16-5.06 9.75zM799.81 29.71l13.33-2.67s-11.2 12.53-13.33 13.33a53.64 53.64 0 000 8c-25.6 109.85-120 61.32-120 61.32 34.39.8 37.33-13.33 37.33-13.33-20-2.93-24-16-24-16a8.24 8.24 0 0010.66-2.67c-21.6-5.6-18.66-26.66-18.66-26.66 3.73 3.2 9.6 4.53 13.06 5.07-2.4-2.93-22.66-27.2-10.4-39.73 0 0 14.93 26.66 54.12 29.06l2.67-.53a20.92 20.92 0 01-.53-5.87 28 28 0 0128-28c18.66 0 22.66 10.66 22.66 10.66l13.33-8c-.24.02-1.57 13.31-8.24 16.02zM581.95 7.73l5.52-1.1s-4.64 5.19-5.52 5.52a22.21 22.21 0 000 3.31c-10.6 45.5-49.69 25.4-49.69 25.4 14.25.33 15.46-5.52 15.46-5.52-8.28-1.21-9.94-6.63-9.94-6.63a3.41 3.41 0 004.42-1.1c-8.94-2.32-7.73-11-7.73-11a11.48 11.48 0 005.41 2.1c-1-1.21-9.39-11.26-4.31-16.45 0 0 6.18 11 22.42 12l1.1-.22a8.66 8.66 0 01-.22-2.43A11.59 11.59 0 01570.47 0c7.73 0 9.39 4.42 9.39 4.42l5.52-3.31c-.12-.01-.67 5.52-3.43 6.62z" fill="#00aced"/><path d="M331.28 228.58l5.52-1.1s-4.64 5.19-5.52 5.52a22.21 22.21 0 000 3.31c-10.6 45.5-49.69 25.4-49.69 25.4 14.25.33 15.46-5.52 15.46-5.52-8.28-1.21-9.94-6.63-9.94-6.63a3.41 3.41 0 004.42-1.1c-8.94-2.32-7.73-11-7.73-11a11.48 11.48 0 005.41 2.1c-1-1.21-9.39-11.26-4.31-16.45 0 0 6.18 11 22.42 12l1.1-.22a8.66 8.66 0 01-.22-2.43 11.59 11.59 0 0111.59-11.59c7.73 0 9.39 4.42 9.39 4.42l5.52-3.31c-.13.02-.66 5.5-3.42 6.6z" fill="#535461" opacity=".3"/><path d="M546.57 125.89l5.52-1.1s-4.59 5.21-5.52 5.51a22.21 22.21 0 000 3.31c-10.6 45.5-49.69 25.4-49.69 25.4 14.25.33 15.46-5.52 15.46-5.52-8.28-1.21-9.94-6.63-9.94-6.63a3.41 3.41 0 004.42-1.1c-8.94-2.32-7.73-11-7.73-11a11.48 11.48 0 005.41 2.1c-1-1.21-9.39-11.26-4.31-16.45 0 0 6.18 11 22.42 12l1.1-.22a8.66 8.66 0 01-.22-2.43 11.59 11.59 0 0111.59-11.59c7.73 0 9.39 4.42 9.39 4.42l5.52-3.31c-.06-.02-.62 5.5-3.42 6.61z" fill="#00aced" opacity=".3"/><path d="M442.37 310.76l11.48-2.3s-9.65 10.8-11.48 11.48a46.21 46.21 0 000 6.89c-22.05 94.63-103.36 52.83-103.36 52.83 29.63.69 32.16-11.48 32.16-11.48-17.23-2.53-20.67-13.78-20.67-13.78a7.1 7.1 0 009.19-2.3c-18.6-4.82-16.08-23-16.08-23 3.22 2.76 8.27 3.9 11.25 4.36-2.07-2.53-19.52-23.43-9-34.22 0 0 12.86 23 46.63 25l2.3-.46a18 18 0 01-.46-5.05 24.11 24.11 0 0124.12-24.12c16.08 0 19.52 9.19 19.52 9.19l11.52-6.8c-.23 0-1.38 11.47-7.12 13.76zM361.09 26.5l5.48-1.1s-4.64 5.19-5.52 5.52a22.21 22.21 0 000 3.31c-10.6 45.5-49.69 25.4-49.69 25.4 14.25.33 15.46-5.52 15.46-5.52-8.28-1.21-9.94-6.63-9.94-6.63a3.41 3.41 0 004.42-1.1c-8.94-2.32-7.73-11-7.73-11a11.48 11.48 0 005.41 2.1c-1-1.21-9.39-11.26-4.31-16.45 0 0 6.18 11 22.42 12l1.1-.22a8.66 8.66 0 01-.22-2.43 11.59 11.59 0 0111.6-11.61c7.73 0 9.39 4.42 9.39 4.42l5.52-3.31c-.07 0-.62 5.52-3.39 6.62zM192.14 149.08l5.52-1.1s-4.64 5.19-5.52 5.52a22.21 22.21 0 000 3.31c-10.6 45.5-49.69 25.4-49.69 25.4 14.25.33 15.46-5.52 15.46-5.52-8.28-1.21-9.94-6.63-9.94-6.63a3.41 3.41 0 004.42-1.1c-8.94-2.32-7.73-11-7.73-11a11.48 11.48 0 005.41 2.1c-1-1.21-9.39-11.26-4.31-16.45 0 0 6.18 11 22.42 12l1.1-.22a8.66 8.66 0 01-.22-2.43 11.59 11.59 0 0111.59-11.59c7.73 0 9.39 4.42 9.39 4.42l5.52-3.31c-.11-.03-.66 5.52-3.42 6.6z" fill="#0f5d40"/><path d="M145.76 69.57l5.52-1.1s-4.64 5.19-5.52 5.52a22.21 22.21 0 000 3.31c-10.6 45.5-49.69 25.4-49.69 25.4 14.25.33 15.46-5.52 15.46-5.52-8.28-1.21-9.94-6.63-9.94-6.63a3.41 3.41 0 004.42-1.1c-8.94-2.32-7.73-11-7.73-11a11.48 11.48 0 005.41 2.1c-1-1.21-9.39-11.26-4.31-16.45 0 0 6.18 11 22.42 12l1.1-.22a8.66 8.66 0 01-.22-2.43 11.59 11.59 0 0111.59-11.59c7.73 0 9.39 4.42 9.39 4.42l5.52-3.31c-.11-.03-.61 5.5-3.42 6.6z" fill="#0f5d40" opacity=".3"/><path d="M340.11 406.37l5.52-1.1s-4.64 5.19-5.52 5.52a22.21 22.21 0 000 3.31c-10.6 45.5-49.69 25.4-49.69 25.4 14.25.33 15.46-5.52 15.46-5.52-8.28-1.21-9.94-6.63-9.94-6.63a3.41 3.41 0 004.42-1.1c-8.94-2.32-7.73-11-7.73-11a11.48 11.48 0 005.41 2.1c-1-1.21-9.39-11.26-4.31-16.45 0 0 6.18 11 22.42 12l1.1-.22a8.66 8.66 0 01-.22-2.43 11.59 11.59 0 0111.59-11.59c7.73 0 9.39 4.42 9.39 4.42l5.52-3.31c-.1-.02-.66 5.5-3.42 6.6zM662.34 166.7l11.23-2.25s-9.46 10.59-11.26 11.26a45.32 45.32 0 000 6.76c-21.63 92.81-101.37 51.81-101.37 51.81 29.09.72 31.57-11.28 31.57-11.28-16.9-2.48-20.27-13.52-20.27-13.52a7 7 0 009-2.25c-18.25-4.73-15.77-22.53-15.77-22.53 3.15 2.7 8.11 3.83 11 4.28-2-2.48-19.15-23-8.79-33.57 0 0 12.62 22.53 45.73 24.55l2.25-.45a17.67 17.67 0 01-.45-5 23.65 23.65 0 0123.65-23.65c15.77 0 19.15 9 19.15 9l11.26-6.76c-.17.08-1.3 11.35-6.93 13.6zm-447.23 90.55l11.26-2.25s-9.46 10.59-11.26 11.26a45.32 45.32 0 000 6.76c-21.63 92.81-101.37 51.81-101.37 51.81 29.06.68 31.54-11.26 31.54-11.26-16.9-2.48-20.27-13.52-20.27-13.52a7 7 0 009-2.25c-18.25-4.73-15.77-22.53-15.77-22.53 3.15 2.7 8.11 3.83 11 4.28-2-2.48-19.15-23-8.79-33.57 0 0 12.62 22.53 45.73 24.55l2.25-.45a17.67 17.67 0 01-.45-5 23.65 23.65 0 0123.65-23.65c15.77 0 19.15 9 19.15 9l11.26-6.76c-.17.06-1.3 11.33-6.93 13.58z" fill="#535461"/></svg>
\ No newline at end of file
+<svg id="5315dcf4-9ab7-45f5-a3d8-2e76525705db" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="813.15" height="752" viewBox="0 0 813.15 752"><title>tweetstorm</title><polygon points="559.73 403.7 347.86 352.67 347.86 752 559.73 696.54 559.73 403.7" fill="#e0e0e0"/><polygon points="559.73 403.7 347.86 352.67 347.86 752 559.73 696.54 559.73 403.7" opacity="0.1"/><polygon points="135.99 403.7 347.86 352.67 347.86 752 135.99 697.65 135.99 403.7" fill="#e0e0e0"/><polygon points="135.99 401.93 347.86 350.91 347.86 752 135.99 697.65 135.99 401.93" opacity="0.17"/><polygon points="346.09 354.44 457.68 261.71 669.54 316.07 557.96 405.46 346.09 354.44" fill="#e0e0e0"/><polygon points="29.05 318.94 137.76 405.46 349.62 354.44 242.03 263.48 29.05 318.94" fill="#e0e0e0"/><polygon points="27.29 317.18 138.64 405.46 350.51 354.44 240.26 261.71 27.29 317.18" opacity="0.05"/><polygon points="135.99 403.7 135.99 697.65 347.86 752 350.72 460.27 135.99 403.7" fill="#e0e0e0"/><polygon points="559.73 696.54 347.86 752 347.86 460.27 559.73 403.7 559.73 696.54" fill="#e0e0e0"/><polygon points="559.73 696.54 347.86 752 347.86 460.27 559.73 403.7 559.73 696.54" opacity="0.07"/><polygon points="475.42 598.92 475.42 695.43 559.73 672.13 559.73 575.63 475.42 598.92" opacity="0.07"/><polygon points="133.22 556.22 251.91 586.17 347.31 508.52 347.31 460.82 135.44 407.58 133.22 556.22" opacity="0.1"/><polygon points="561.39 556.22 442.7 586.17 347.31 508.52 347.31 460.82 559.17 407.58 561.39 556.22" opacity="0.1"/><path d="M452.66,473.1l8.21-1.64s-6.9,7.72-8.21,8.21h0a33.05,33.05,0,0,0,0,4.93c-15.77,67.69-73.93,37.79-73.93,37.79,21.19.49,23-8.21,23-8.21-12.32-1.81-14.79-9.86-14.79-9.86a5.08,5.08,0,0,0,6.57-1.64c-13.31-3.45-11.5-16.43-11.5-16.43,2.3,2,5.91,2.79,8.05,3.12-1.48-1.81-14-16.76-6.41-24.48,0,0,9.2,16.43,33.35,17.91l1.64-.33a12.89,12.89,0,0,1-.33-3.61,17.25,17.25,0,0,1,17.25-17.25c11.5,0,14,6.57,14,6.57l8.21-4.93C457.59,463.24,456.77,471.46,452.66,473.1Z" transform="translate(-193.43 -74)" fill="#00aced"/><polygon points="135.99 403.7 27.29 493.55 239.15 546.79 347.86 460.27 135.99 403.7" fill="#e0e0e0"/><path d="M618.25,470.91l4.06-5.65s.18,8.6-.34,9.65h0a27.47,27.47,0,0,0,2.79,3c28.77,50.08-23.53,64.86-23.53,64.86,13.16-11.71,9.33-18,9.33-18C602,530.62,596,527.12,596,527.12a4.22,4.22,0,0,0,3.06-4.72c-10,5.44-16.3-3.47-16.3-3.47,2.52-.1,5.18-1.65,6.66-2.66-1.92-.26-18-2.27-17.77-11.25,0,0,14.9,4.77,30.42-8l.81-1.13a10.71,10.71,0,0,1-2.25-2,14.33,14.33,0,0,1,.71-20.26c7-6.52,12.21-3.92,12.21-3.92l2.2-7.65C615.66,462.13,619.81,467.58,618.25,470.91Z" transform="translate(-193.43 -74)" fill="#0f5d40"/><polygon points="559.73 403.7 669.54 493.55 458.78 546.79 347.86 460.27 559.73 403.7" fill="#e0e0e0"/><polygon points="559.73 403.7 669.54 493.55 458.78 546.79 347.86 460.27 559.73 403.7" opacity="0.07"/><path d="M610.52,196.35l7.51-3.61s-4.74,9.15-5.89,9.95h0a32.88,32.88,0,0,0,1.22,4.75c1.53,69.12-61.9,54.68-61.9,54.68,20.54-4.76,20.13-13.6,20.13-13.6-12.32,1.3-16.68-5.84-16.68-5.84a5,5,0,0,0,5.93-3.21c-13.68,0-15.14-13-15.14-13,2.7,1.33,6.39,1.23,8.53,1-1.87-1.38-17.6-12.7-12.22-22,0,0,12.93,13.56,36.56,9l1.5-.72a12.82,12.82,0,0,1-1.21-3.4,17.16,17.16,0,0,1,12.36-20.89c11.08-2.84,15.08,2.88,15.08,2.88l6.7-6.78C612.83,185.63,614.07,193.75,610.52,196.35Z" transform="translate(-193.43 -74)" fill="#00aced"/><path d="M267,249l8.17-1.63s-6.86,7.68-8.17,8.17h0a32.88,32.88,0,0,0,0,4.9c-15.69,67.33-73.54,37.59-73.54,37.59,21.08.49,22.88-8.17,22.88-8.17-12.26-1.8-14.71-9.81-14.71-9.81a5,5,0,0,0,6.54-1.63C194.9,275,196.7,262.12,196.7,262.12c2.29,2,5.88,2.78,8,3.11-1.47-1.8-13.89-16.67-6.37-24.35,0,0,9.15,16.34,33.18,17.81l1.63-.33a12.82,12.82,0,0,1-.33-3.6A17.16,17.16,0,0,1,250,237.61c11.44,0,13.89,6.54,13.89,6.54l8.17-4.9C271.87,239.24,271.06,247.41,267,249Z" transform="translate(-193.43 -74)" fill="#00aced"/><path d="M993.24,103.71l13.33-2.67s-11.2,12.53-13.33,13.33h0a53.64,53.64,0,0,0,0,8c-25.6,109.85-120,61.32-120,61.32,34.39.8,37.33-13.33,37.33-13.33-20-2.93-24-16-24-16a8.24,8.24,0,0,0,10.66-2.67c-21.6-5.6-18.66-26.66-18.66-26.66,3.73,3.2,9.6,4.53,13.06,5.07-2.4-2.93-22.66-27.2-10.4-39.73,0,0,14.93,26.66,54.12,29.06l2.67-.53a20.92,20.92,0,0,1-.53-5.87,28,28,0,0,1,28-28c18.66,0,22.66,10.66,22.66,10.66l13.33-8C1001.24,87.71,999.91,101,993.24,103.71Z" transform="translate(-193.43 -74)" fill="#00aced"/><path d="M775.38,81.73l5.52-1.1s-4.64,5.19-5.52,5.52h0a22.21,22.21,0,0,0,0,3.31c-10.6,45.5-49.69,25.4-49.69,25.4,14.25.33,15.46-5.52,15.46-5.52-8.28-1.21-9.94-6.63-9.94-6.63a3.41,3.41,0,0,0,4.42-1.1c-8.94-2.32-7.73-11-7.73-11a11.48,11.48,0,0,0,5.41,2.1c-1-1.21-9.39-11.26-4.31-16.45,0,0,6.18,11,22.42,12l1.1-.22a8.66,8.66,0,0,1-.22-2.43A11.59,11.59,0,0,1,763.9,74c7.73,0,9.39,4.42,9.39,4.42l5.52-3.31C778.69,75.1,778.14,80.63,775.38,81.73Z" transform="translate(-193.43 -74)" fill="#00aced"/><path d="M524.71,302.58l5.52-1.1s-4.64,5.19-5.52,5.52h0a22.21,22.21,0,0,0,0,3.31c-10.6,45.5-49.69,25.4-49.69,25.4,14.25.33,15.46-5.52,15.46-5.52-8.28-1.21-9.94-6.63-9.94-6.63a3.41,3.41,0,0,0,4.42-1.1c-8.94-2.32-7.73-11-7.73-11a11.48,11.48,0,0,0,5.41,2.1c-1-1.21-9.39-11.26-4.31-16.45,0,0,6.18,11,22.42,12l1.1-.22a8.66,8.66,0,0,1-.22-2.43,11.59,11.59,0,0,1,11.59-11.59c7.73,0,9.39,4.42,9.39,4.42l5.52-3.31C528,296,527.47,301.48,524.71,302.58Z" transform="translate(-193.43 -74)" fill="#535461" opacity="0.3"/><path d="M740,199.89l5.52-1.1S740.93,204,740,204.3h0a22.21,22.21,0,0,0,0,3.31c-10.6,45.5-49.69,25.4-49.69,25.4,14.25.33,15.46-5.52,15.46-5.52-8.28-1.21-9.94-6.63-9.94-6.63a3.41,3.41,0,0,0,4.42-1.1c-8.94-2.32-7.73-11-7.73-11a11.48,11.48,0,0,0,5.41,2.1c-1-1.21-9.39-11.26-4.31-16.45,0,0,6.18,11,22.42,12l1.1-.22a8.66,8.66,0,0,1-.22-2.43,11.59,11.59,0,0,1,11.59-11.59c7.73,0,9.39,4.42,9.39,4.42l5.52-3.31C743.36,193.26,742.8,198.78,740,199.89Z" transform="translate(-193.43 -74)" fill="#00aced" opacity="0.3"/><path d="M635.8,384.76l11.48-2.3s-9.65,10.8-11.48,11.48h0a46.21,46.21,0,0,0,0,6.89c-22.05,94.63-103.36,52.83-103.36,52.83,29.63.69,32.16-11.48,32.16-11.48-17.23-2.53-20.67-13.78-20.67-13.78a7.1,7.1,0,0,0,9.19-2.3c-18.6-4.82-16.08-23-16.08-23,3.22,2.76,8.27,3.9,11.25,4.36-2.07-2.53-19.52-23.43-9-34.22,0,0,12.86,23,46.63,25l2.3-.46a18,18,0,0,1-.46-5.05,24.11,24.11,0,0,1,24.12-24.12c16.08,0,19.52,9.19,19.52,9.19L642.92,371C642.69,371,641.54,382.47,635.8,384.76Z" transform="translate(-193.43 -74)" fill="#0f5d40"/><path d="M554.52,100.5,560,99.4s-4.64,5.19-5.52,5.52h0a22.21,22.21,0,0,0,0,3.31c-10.6,45.5-49.69,25.4-49.69,25.4,14.25.33,15.46-5.52,15.46-5.52-8.28-1.21-9.94-6.63-9.94-6.63a3.41,3.41,0,0,0,4.42-1.1c-8.94-2.32-7.73-11-7.73-11a11.48,11.48,0,0,0,5.41,2.1c-1-1.21-9.39-11.26-4.31-16.45,0,0,6.18,11,22.42,12l1.1-.22a8.66,8.66,0,0,1-.22-2.43A11.59,11.59,0,0,1,543,92.77c7.73,0,9.39,4.42,9.39,4.42l5.52-3.31C557.84,93.88,557.29,99.4,554.52,100.5Z" transform="translate(-193.43 -74)" fill="#0f5d40"/><path d="M385.57,223.08l5.52-1.1s-4.64,5.19-5.52,5.52h0a22.21,22.21,0,0,0,0,3.31c-10.6,45.5-49.69,25.4-49.69,25.4,14.25.33,15.46-5.52,15.46-5.52-8.28-1.21-9.94-6.63-9.94-6.63a3.41,3.41,0,0,0,4.42-1.1c-8.94-2.32-7.73-11-7.73-11a11.48,11.48,0,0,0,5.41,2.1c-1-1.21-9.39-11.26-4.31-16.45,0,0,6.18,11,22.42,12l1.1-.22a8.66,8.66,0,0,1-.22-2.43,11.59,11.59,0,0,1,11.59-11.59c7.73,0,9.39,4.42,9.39,4.42l5.52-3.31C388.88,216.45,388.33,222,385.57,223.08Z" transform="translate(-193.43 -74)" fill="#0f5d40"/><path d="M339.19,143.57l5.52-1.1s-4.64,5.19-5.52,5.52h0a22.21,22.21,0,0,0,0,3.31c-10.6,45.5-49.69,25.4-49.69,25.4,14.25.33,15.46-5.52,15.46-5.52-8.28-1.21-9.94-6.63-9.94-6.63a3.41,3.41,0,0,0,4.42-1.1c-8.94-2.32-7.73-11-7.73-11a11.48,11.48,0,0,0,5.41,2.1c-1-1.21-9.39-11.26-4.31-16.45,0,0,6.18,11,22.42,12l1.1-.22a8.66,8.66,0,0,1-.22-2.43,11.59,11.59,0,0,1,11.59-11.59c7.73,0,9.39,4.42,9.39,4.42l5.52-3.31C342.5,136.94,342,142.47,339.19,143.57Z" transform="translate(-193.43 -74)" fill="#0f5d40" opacity="0.3"/><path d="M533.54,480.37l5.52-1.1s-4.64,5.19-5.52,5.52h0a22.21,22.21,0,0,0,0,3.31c-10.6,45.5-49.69,25.4-49.69,25.4,14.25.33,15.46-5.52,15.46-5.52-8.28-1.21-9.94-6.63-9.94-6.63a3.41,3.41,0,0,0,4.42-1.1c-8.94-2.32-7.73-11-7.73-11a11.48,11.48,0,0,0,5.41,2.1c-1-1.21-9.39-11.26-4.31-16.45,0,0,6.18,11,22.42,12l1.1-.22a8.66,8.66,0,0,1-.22-2.43,11.59,11.59,0,0,1,11.59-11.59c7.73,0,9.39,4.42,9.39,4.42l5.52-3.31C536.86,473.75,536.3,479.27,533.54,480.37Z" transform="translate(-193.43 -74)" fill="#535461"/><path d="M855.77,240.7,867,238.45s-9.46,10.59-11.26,11.26h0a45.32,45.32,0,0,0,0,6.76c-21.63,92.81-101.37,51.81-101.37,51.81C783.46,309,785.94,297,785.94,297c-16.9-2.48-20.27-13.52-20.27-13.52a7,7,0,0,0,9-2.25c-18.25-4.73-15.77-22.53-15.77-22.53,3.15,2.7,8.11,3.83,11,4.28-2-2.48-19.15-23-8.79-33.57,0,0,12.62,22.53,45.73,24.55l2.25-.45a17.67,17.67,0,0,1-.45-5,23.65,23.65,0,0,1,23.65-23.65c15.77,0,19.15,9,19.15,9l11.26-6.76C862.53,227.18,861.4,238.45,855.77,240.7Z" transform="translate(-193.43 -74)" fill="#535461"/><path d="M408.54,331.25,419.8,329s-9.46,10.59-11.26,11.26h0a45.32,45.32,0,0,0,0,6.76c-21.63,92.81-101.37,51.81-101.37,51.81,29.06.68,31.54-11.26,31.54-11.26-16.9-2.48-20.27-13.52-20.27-13.52a7,7,0,0,0,9-2.25c-18.25-4.73-15.77-22.53-15.77-22.53,3.15,2.7,8.11,3.83,11,4.28-2-2.48-19.15-23-8.79-33.57,0,0,12.62,22.53,45.73,24.55l2.25-.45a17.67,17.67,0,0,1-.45-5,23.65,23.65,0,0,1,23.65-23.65c15.77,0,19.15,9,19.15,9l11.26-6.76C415.3,317.73,414.17,329,408.54,331.25Z" transform="translate(-193.43 -74)" fill="#535461"/></svg>
diff --git a/img/undraw_youtube_tutorial.svg b/img/undraw_youtube_tutorial.svg
index ba33dce..7a53a3d 100644
--- a/img/undraw_youtube_tutorial.svg
+++ b/img/undraw_youtube_tutorial.svg
@@ -1 +1 @@
-<svg data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="1130" height="831.56" viewBox="0 0 1130 831.56"><defs><linearGradient id="a" x1="321.68" y1="857.11" x2="321.68" y2="447.21" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="gray" stop-opacity=".25"/><stop offset=".54" stop-color="gray" stop-opacity=".12"/><stop offset="1" stop-color="gray" stop-opacity=".1"/></linearGradient></defs><path d="M656.54 124.69C584.1 122.18 515.1 98.78 449.22 73.2S318.07 19.27 247.37 5.71c-45.48-8.72-97.49-9.93-134.13 14.43-35.27 23.46-46.66 64-52.78 101.55-4.61 28.28-7.32 58 5.3 84.51 8.77 18.37 24.34 33.82 35.11 51.42 37.45 61.26 11 136.79-29.62 196.59-19 28.06-41.13 54.82-55.82 84.69s-21.49 64.08-8.64 94.54c12.75 30.2 43.11 52.88 76 68.83 66.81 32.4 145.54 41.68 222.31 46.93 169.95 11.58 340.8 6.58 511.19 1.58 63.06-1.87 126.39-3.76 188.43-13.51 34.44-5.41 70-14 95-34.75 31.75-26.34 39.62-70.94 18.34-104-35.68-55.39-134.35-69.15-159.29-128.6-13.73-32.72.37-69.17 20.32-99.52 42.8-65.11 114.54-122.22 118.32-196.64 2.6-51.11-31.89-102.3-85.21-126.48-55.9-25.35-133.4-22.16-174.64 19.8-42.44 43.21-117.06 59.83-181.02 57.61z" fill="#0f5d40" opacity=".1"/><path fill="#d0d2d5" d="M664.18 755.89l-195-2.5.57-5 9.43-82.5h171.25l12.6 82.5.96 6.25.19 1.25z"/><path opacity=".1" d="M663.99 754.64h-97.31l-97.5-1.25.57-5h193.28l.96 6.25z"/><path fill="#d0d2d5" d="M436.68 749.64h258.75v6.25H436.68z"/><path d="M942.3 170.37a16.27 16.27 0 00-16.19-16.35H203.5a16.27 16.27 0 00-16.2 16.35v438h755z" fill="#444053"/><path d="M187.3 604.02v51.3a16.2 16.2 0 0016.2 16.2h722.61a16.2 16.2 0 0016.19-16.2v-51.3z" fill="#d0d2d5"/><path fill="#0f5d40" opacity=".1" d="M218.55 181.52H914.8v393.75H218.55z"/><path d="M568.55 652.05a16.89 16.89 0 0013.28-6.44 17.21 17.21 0 001.31-1.93l-9.26-1.52 10 .08a16.85 16.85 0 00.32-13.38l-13.43 7 12.39-9.1a16.87 16.87 0 10-27.87 18.88 16.87 16.87 0 0013.26 6.41z" fill="#0f5d40"/><path opacity=".1" d="M585.43 671.52l77.79 78.12-11.93-78.12h-65.86z"/><rect x="239" y="252.56" width="457" height="274" rx="2.6" fill="#fff"/><path fill="#fff" d="M219 181.56h696v23H219z"/><rect x="222" y="185.56" width="20" height="14" rx=".78" fill="#0f5d40"/><rect x="460" y="185.56" width="210" height="14" rx=".58" fill="#0f5d40" opacity=".3"/><path d="M663.77 194h-.51l-.19-.16a4.25 4.25 0 001-2.72 4.14 4.14 0 10-4.13 4.17 4.27 4.27 0 002.72-1l.19.16v.52l3.2 3.2 1-1zm-3.84 0a2.89 2.89 0 112.88-2.88 2.86 2.86 0 01-2.88 2.88z" fill="#444053"/><circle cx="905" cy="192.56" r="7" fill="#0f5d40"/><rect x="729" y="229.56" width="65" height="44" rx="2.43" fill="#fff"/><rect x="811" y="229.56" width="84" height="7" rx=".61" fill="#fff"/><rect x="811" y="244.56" width="84" height="7" rx=".61" fill="#fff"/><rect x="811" y="259.56" width="84" height="7" rx=".61" fill="#fff"/><rect x="729" y="298.56" width="65" height="44" rx="2.43" fill="#fff"/><rect x="811" y="298.56" width="84" height="7" rx=".61" fill="#fff"/><rect x="811" y="313.56" width="84" height="7" rx=".61" fill="#fff"/><rect x="811" y="328.56" width="84" height="7" rx=".66" fill="#fff"/><rect x="729" y="367.56" width="65" height="44" rx="2.43" fill="#fff"/><rect x="811" y="367.56" width="84" height="7" rx=".66" fill="#fff"/><rect x="811" y="382.56" width="84" height="7" rx=".66" fill="#fff"/><rect x="811" y="397.56" width="84" height="7" rx=".66" fill="#fff"/><rect x="729" y="436.56" width="65" height="44" rx="2.43" fill="#fff"/><rect x="811" y="436.56" width="84" height="7" rx=".66" fill="#fff"/><rect x="811" y="451.56" width="84" height="7" rx=".66" fill="#fff"/><rect x="811" y="466.56" width="84" height="7" rx=".66" fill="#fff"/><rect x="729" y="505.56" width="65" height="44" rx="2.43" fill="#fff"/><rect x="811" y="505.56" width="84" height="7" rx=".66" fill="#fff"/><rect x="811" y="520.56" width="84" height="7" rx=".66" fill="#fff"/><rect x="811" y="535.56" width="84" height="7" rx=".66" fill="#fff"/><path fill="#0f5d40" opacity=".1" d="M304.92 325.17h102.83v5.33H304.92zm9.14-28.18h9.9v28.18h-9.9zm14.47 0h9.9v28.18h-9.9zm14.47 0h9.9v28.18H343zm14.47 0h9.9v28.18h-9.9zm14.47 0h9.9v28.18h-9.9zm14.48 0h9.9v28.18h-9.9z"/><path fill="#0f5d40" opacity=".1" d="M314.06 302.32h9.9v3.05h-9.9zm14.47 0h9.9v3.05h-9.9zm14.47 0h9.9v3.05H343zm14.47 0h9.9v3.05h-9.9zm14.47 0h9.9v3.05h-9.9zm14.48 0h9.9v3.05h-9.9zm-72.36 13.71h9.9v3.05h-9.9zm14.47 0h9.9v3.05h-9.9zm14.47 0h9.9v3.05H343zm14.47 0h9.9v3.05h-9.9zm14.47 0h9.9v3.05h-9.9zm14.48 0h9.9v3.05h-9.9zm143.95 22.85H633.2v5.33H530.37zm9.14-28.18h9.9v28.18h-9.9zm14.47 0h9.9v28.18h-9.9zm14.47 0h9.9v28.18h-9.9zm14.48 0h9.9v28.18h-9.9zm14.47 0h9.9v28.18h-9.9zm14.47 0h9.9v28.18h-9.9z"/><path fill="#0f5d40" opacity=".1" d="M539.51 316.03h9.9v3.05h-9.9zm14.47 0h9.9v3.05h-9.9zm14.47 0h9.9v3.05h-9.9zm14.48 0h9.9v3.05h-9.9zm14.47 0h9.9v3.05h-9.9zm14.47 0h9.9v3.05h-9.9zm-72.36 13.71h9.9v3.05h-9.9zm14.47 0h9.9v3.05h-9.9zm14.47 0h9.9v3.05h-9.9zm14.48 0h9.9v3.05h-9.9zm14.47 0h9.9v3.05h-9.9zm14.47 0h9.9v3.05h-9.9zm-81.5 47.98H633.2v5.33H530.37zm9.14-28.18h9.9v28.18h-9.9zm14.47 0h9.9v28.18h-9.9zm14.47 0h9.9v28.18h-9.9zm14.48 0h9.9v28.18h-9.9zm14.47 0h9.9v28.18h-9.9zm14.47 0h9.9v28.18h-9.9z"/><path fill="#0f5d40" opacity=".1" d="M539.51 354.87h9.9v3.05h-9.9zm14.47 0h9.9v3.05h-9.9zm14.47 0h9.9v3.05h-9.9zm14.48 0h9.9v3.05h-9.9zm14.47 0h9.9v3.05h-9.9zm14.47 0h9.9v3.05h-9.9zm-72.36 13.71h9.9v3.05h-9.9zm14.47 0h9.9v3.05h-9.9zm14.47 0h9.9v3.05h-9.9zm14.48 0h9.9v3.05h-9.9zm14.47 0h9.9v3.05h-9.9zm14.47 0h9.9v3.05h-9.9zM368 385.44a28.45 28.45 0 01-2.1-3.09l14.81-2.43-16 .12a27.06 27.06 0 01-.52-21.38l21.45 11.12-19.81-14.56a27 27 0 1144.57 30.2 26.24 26.24 0 013.08 4.92l-19.22 10 20.49-6.87a27 27 0 01-4.35 25.31 27 27 0 11-42.4 0 27 27 0 010-33.37z"/><path d="M416.18 402.12a26.89 26.89 0 01-5.78 16.66 27 27 0 11-42.4 0c-3.63-4.57 48.18-19.69 48.18-16.66z" fill="#0f5d40" opacity=".1"/><path d="M393.52 469.66a2.53 2.53 0 01.13.22h-9.16c.05-.07.08-.15.13-.22a8.87 8.87 0 01-1.18-4.51 9.26 9.26 0 01.55-3.18c.51.08 1.14.17 1.87.25a32.1 32.1 0 006.39 0q.92-.09 1.89-.24a.09.09 0 000 .05 9 9 0 01.54 3.13 8.87 8.87 0 01-1.16 4.5z" fill="#3f3d56" opacity=".2"/><path d="M360.6 469.88h-51c-.11-.29-.21-.6-.3-.9a26.85 26.85 0 01.59-17.64 27 27 0 01-9.85-31.89 25.83 25.83 0 01-2.91-2.33l13.42-6.69-15.26 4.84a27 27 0 01-6.8-20.27l23.81 4.3-23.22-8.07a27 27 0 1151.49 15.7 27.35 27.35 0 014.43 3.85l-15.42 15.21 17.55-12.62a27 27 0 013.32 25.5 27 27 0 0110.15 31.01z" fill="#0f5d40" opacity=".1"/><path d="M360.6 469.88h-51c-.11-.29-.21-.6-.3-.9a26.85 26.85 0 01.59-17.64c-4.8-3.32 40.23-33.07 41.12-30.17a26.88 26.88 0 01-.59 17.65 27 27 0 0110.18 31.06zm230.75-36.54a26.9 26.9 0 01-13.51 11.36 27.4 27.4 0 01.11 5.8l-21.61-1.3 21.11 4.58a27 27 0 01-3.22 8.16 26.57 26.57 0 01-7.2 7.9h-29.42v.77h-30c.06-.26.12-.51.19-.77a27 27 0 0116.45-18.31 27 27 0 0117.13-28.64 27.36 27.36 0 01-.22-3.73l13.95 5.51-13.8-8.11a27 27 0 0110.59-18.58l12.71 20.58-9.53-22.66a27 27 0 0136.27 37.44z" fill="#0f5d40" opacity=".1"/><path d="M574.23 461.98a26.57 26.57 0 01-7.2 7.9h-29.42v.77h-30c.06-.26.12-.51.19-.77a27 27 0 0116.45-18.31c-.25-2 5.56-1.7 13.31-.4 15.19 2.55 37.7 9.09 36.67 10.81z" fill="#0f5d40" opacity=".1"/><path d="M446.71 389.97s3.7 20-4.56 26.53 7 45.67 32.18 41.1 35.44-37.4 35.44-37.4-25.22-5.22-15.87-31.75z" fill="#ee8e9e"/><path d="M446.71 389.97s3.7 20-4.56 26.53 7 45.67 32.18 41.1 35.44-37.4 35.44-37.4-25.22-5.22-15.87-31.75z" opacity=".1"/><circle cx="469" cy="362.9" r="41.75" fill="#ee8e9e"/><path d="M537.61 442.27v28.38H399.75v-27.09a17.48 17.48 0 0110.67-16.1l3.95-1.68c10-4.26 22.15-9.55 26.12-11.75a6.53 6.53 0 001.22-.79c2.17-2.17 1.74.65 1.74.65s-.06.54-.1 1.47c-.24 6.39.68 31.5 30.11 29.41 28.71-2 30-21.42 29.71-27.13a15.45 15.45 0 00-.13-1.58 37.09 37.09 0 015.81 1.9c6 2.22 14.86 5.78 17.23 7.46.74.52 1.64 1.06 2.62 1.61a17.23 17.23 0 013.1 2.21 17.51 17.51 0 015.81 13.03z" fill="#0f5d40"/><path d="M508.85 417.96c-2.43 11.26-10.06 32.35-37.56 32.9-29.3.58-31-28.56-30.81-36.83a5.91 5.91 0 001.23-.79c2.18-2.17 1.74.65 1.74.65s-3.69 33.27 30 30.88 29.55-28.7 29.55-28.7c0-.16 2.51.71 5.85 1.89z" opacity=".1"/><path d="M419.58 364.99a7.15 7.15 0 017.53 2.75c1.52 2.13 1.75 4.7 1.94 7.16 1.81.38 2.83-1.67 3-3.22.67-6.31.72-12.74 2.84-18.84s6.75-12 13.86-14.33a16.08 16.08 0 017.57-.72c1.51.25 2.93.78 4.43 1 5.2.86 10.85-1.6 15.72.11 3.06 1.08 5 3.57 6.43 6.06a13.08 13.08 0 002.5 3.63c2.07 1.86 5.31 2.34 8.28 2.92s6.21 1.59 7.48 3.88c1.14 2.07.3 4.46-.08 6.7a16.42 16.42 0 001.69 10.37c.55 1 1.67 2.21 3 1.88a2.63 2.63 0 001.42-1.15c3.41-4.78 3.32-11 7.6-15.31 1.43-1.44 3.28-2.56 4.67-4a9.08 9.08 0 002.42-8.24c-.77-3.3-3.41-6-5.54-8.9a35 35 0 01-5.93-12.31 2.23 2.23 0 010-1.61 4.29 4.29 0 011.52-1.24 5.74 5.74 0 001.94-7.33c-1.21-2.47-3.87-4.35-6.87-5.47a44.8 44.8 0 00-9.37-2c-2.1.3-4.56-.89-5.21-2.57-.29-.75-.29-1.56-.58-2.31a5.3 5.3 0 00-4-2.8 11.7 11.7 0 00-5.35.38c-2 .56-4.27 1.4-6 .42-.91-.51-1.41-1.44-2.39-1.86-2-.84-4.06.86-5.49 2.26a13.36 13.36 0 01-4.95 3.33 7.37 7.37 0 01-6.14-.41c-1.37-.87-2.06-2.27-3.15-3.38a11.86 11.86 0 00-7.45-3 26.23 26.23 0 00-8.41.92 50.78 50.78 0 00-14.77 6.2 15.87 15.87 0 00-5.67 5.27 12 12 0 00-1.27 5.43c-.22 5.91 1.74 12.13 6.85 16.27-3.12 1.3-4.17 4.49-4.9 7.32-1.17 4.52-2.34 9.11-1.9 13.71.22 2.38.87 4.76.52 7.13a15.36 15.36 0 00-.46 3.41 3.27 3.27 0 002.67 2.49z" fill="#454b69"/><path d="M521.23 343.78a9.76 9.76 0 01-1.8 2.66c-1.39 1.46-3.24 2.59-4.67 4-4.28 4.28-4.19 10.54-7.6 15.32a2.57 2.57 0 01-1.42 1.14c-1.3.34-2.42-.84-3-1.88a17.2 17.2 0 01-1.49-4l-.2 1a16.42 16.42 0 001.69 10.37c.55 1 1.67 2.21 3 1.88a2.63 2.63 0 001.42-1.15c3.41-4.78 3.32-11 7.6-15.31 1.43-1.44 3.28-2.56 4.67-4a9.08 9.08 0 002.42-8.24 10.74 10.74 0 00-.62-1.79zm-9.32-29.6a4.19 4.19 0 00-1.52 1.24 2.21 2.21 0 000 1.6 33.82 33.82 0 001.51 4.56 5.74 5.74 0 001.94-7.33 7 7 0 00-.7-1.17 5.76 5.76 0 01-1.23 1.1zm-88.2 9.27a18.54 18.54 0 01-6.55-11.59 15.62 15.62 0 00-.3 2.72 20.82 20.82 0 003.29 12.37 7 7 0 013.56-3.5zm77.37 31.27c.38-2.25 1.22-4.64.08-6.7-1.27-2.3-4.51-3.3-7.48-3.88s-6.21-1.07-8.28-2.92a13.08 13.08 0 01-2.5-3.63c-1.41-2.49-3.37-5-6.43-6.06-4.87-1.71-10.52.74-15.72-.11-1.5-.25-2.92-.77-4.43-1a16 16 0 00-7.57.72c-7.11 2.34-11.74 8.24-13.86 14.33s-2.17 12.52-2.84 18.84c-.17 1.54-1.19 3.6-3 3.22-.19-2.47-.42-5-1.94-7.17a7.15 7.15 0 00-7.53-2.74 3.66 3.66 0 01-2.11-1.35 11.59 11.59 0 010 2.76 15.36 15.36 0 00-.46 3.41 3.27 3.27 0 002.61 2.57 7.15 7.15 0 017.53 2.75c1.52 2.13 1.75 4.7 1.94 7.16 1.81.38 2.83-1.67 3-3.22.67-6.31.72-12.74 2.84-18.84s6.75-12 13.86-14.33a16.08 16.08 0 017.57-.72c1.51.25 2.93.78 4.43 1 5.2.86 10.85-1.6 15.72.11 3.06 1.08 5 3.57 6.43 6.06a13.08 13.08 0 002.5 3.63c2.07 1.86 5.31 2.34 8.28 2.92s6 1.52 7.33 3.64c-.05-.15 0-.3.03-.45zm-83.65-3.11a19 19 0 00-.33-5.57 24.82 24.82 0 00-.19 5.84c0 .5.11 1 .18 1.49.11-.59.26-1.17.34-1.76z" opacity=".1"/><path d="M368.49 511v-18.05a.51.51 0 01.51-.51h2.05a.51.51 0 01.51.51v7.51l8.32-7.71a1.36 1.36 0 012.23 1v16.35a1.36 1.36 0 01-2.23 1l-8.32-7.66v7.47a.51.51 0 01-.51.51H369a.51.51 0 01-.51-.42zm201.03-18.05V511a.51.51 0 01-.52.51h-2a.51.51 0 01-.51-.51v-7.51l-8.32 7.7a1.37 1.37 0 01-2.24-1v-16.41a1.37 1.37 0 012.24-1l8.32 7.66v-7.46a.51.51 0 01.51-.51h2a.51.51 0 01.52.48zm-103.91 18.83h-4.07a2 2 0 01-2-2v-14.94a2 2 0 012-2h4.07a2 2 0 012 2v14.94a2 2 0 01-2 2zm12.9-2v-14.94a2 2 0 00-2-2h-4.11a2 2 0 00-2 2v14.94a2 2 0 002 2h4.07a2 2 0 002.04-2z" fill="#444053"/><path fill="#444053" opacity=".6" d="M349 468.62h240v2.67H349z"/><circle cx="423.11" cy="469.95" r="6.33" fill="#444053"/><path fill="#444053" d="M349 468.62h74.11v2.67H349z"/><ellipse cx="957.08" cy="758.54" rx="59.47" ry="11.44" fill="#0f5d40"/><ellipse cx="956.09" cy="753.68" rx="6.92" ry="9.06" fill="#3f3d56"/><ellipse cx="956.09" cy="742.6" rx="6.92" ry="9.06" fill="#3f3d56"/><ellipse cx="956.09" cy="731.53" rx="6.92" ry="9.06" fill="#3f3d56"/><ellipse cx="956.09" cy="720.45" rx="6.92" ry="9.06" fill="#3f3d56"/><ellipse cx="956.09" cy="709.37" rx="6.92" ry="9.06" fill="#3f3d56"/><ellipse cx="956.09" cy="698.29" rx="6.92" ry="9.06" fill="#3f3d56"/><ellipse cx="956.09" cy="687.21" rx="6.92" ry="9.06" fill="#3f3d56"/><path d="M982 611.41a34.28 34.28 0 002.58-3.8l-18.2-3 19.68.15a33.27 33.27 0 00.63-26.28l-26.38 13.7 24.34-17.89a33.17 33.17 0 10-54.78 37.12 33.85 33.85 0 00-3.78 6l23.62 12.27-25.18-8.45a33.19 33.19 0 005.34 31.14 33.16 33.16 0 1052.14 0 33.18 33.18 0 000-41z" fill="#0f5d40"/><path d="M922.78 631.91a33 33 0 007.09 20.5 33.16 33.16 0 1052.14 0c4.44-5.63-59.23-24.22-59.23-20.5z" opacity=".1"/><ellipse cx="290" cy="810.56" rx="99" ry="21" fill="#0f5d40" opacity=".1"/><path d="M358.15 842.34c-2-.73-4.14-.61-6.23-.84a19.28 19.28 0 01-11.46-5.56 21 21 0 01-4.58-7c.66.24 1.32.49 2 .76-2-4.67.1-9.91 1.94-14.63q4.68-12 8.85-24.13c7-20.49 13-41.8 12.87-63.6 0-7.88-1.45-15.33-1.73-23.2-.21-5.84.69-11.67.65-17.52 0-.82 0-1.63-.06-2.45a15.53 15.53 0 005.27-12.66 30.48 30.48 0 00-.53-3.68 59.68 59.68 0 00-1.4-6.26c-.66-2.17-1.56-4.25-2.33-6.37-1.49-4.11-2.5-8.39-3.77-12.57a4.33 4.33 0 011.36.37 2.93 2.93 0 01-.64-1.31 32.41 32.41 0 01-1.2-8.17l.85-.38a21.27 21.27 0 00-.41-8.09c.48-4.29 1.23-8.61 1.69-12.88.17-1.6.1-3.61-1.37-4-.3-2.29-.42-4.61-.54-6.92q-.63-12.09-1.25-24.17c-.42-8.09-.84-16.17-1-24.27-.11-5.14-.17-10.46-1.39-15.38a18.6 18.6 0 00-.71-7c-1.86-5.89-7.64-10.56-13.5-10.23a26.86 26.86 0 00-6.39-6.46c1.17-2.62 2.57-5.32 3.72-7.44 9.38-3.05 16.24-12.3 16.24-23.3a25.43 25.43 0 00-2.75-11.59 12.52 12.52 0 00.44-1.35 11.09 11.09 0 00-.45-6.49 19 19 0 00-1-2.32c-.26-.5-.54-1-.83-1.48L348 459c-.31-.47-.63-.92-1-1.36a33.1 33.1 0 00-2.28-2.74 22.56 22.56 0 00-3.28-2.92 14.46 14.46 0 00-5.4-2.49 16.46 16.46 0 00-3.43-.31c-.69 0-1.39 0-2.08.06-1.4.08-2.79.18-4.18.17-.46 0-.93 0-1.39-.07a50.63 50.63 0 01-7.24-1.51l-1.2-.25c-.41-.08-.81-.15-1.22-.2a22.89 22.89 0 00-3.31-.2h-1.11a30.68 30.68 0 00-3.31.34l-1.1.17a31.6 31.6 0 00-8.05 2.39c-.33.15-.67.32-1 .5l-.2.11c-.27.14-.54.29-.8.45l-.15.09-.85.54-.07.05c-7.94 5.34-12.63 15.46-13.82 25.5-1.33 11.27 1 22.63 3.33 33.72l2.1 10c.09.45.19.89.28 1.34a22 22 0 00-6.59 9.14c-2 5-2.05 10.41-1.89 15.83 0 1.1.06 2.2.17 3.3-.25 2.08-.47 4.17-.61 6.27-.63 9.7.55 19.45.24 29.17-.24 7.49-1.37 15-.82 22.44.48 6.6 2.25 13 4 19.37l2.52 9.08a2.41 2.41 0 00.63 1.25 1.9 1.9 0 001.41.29 85.12 85.12 0 00-4.1 11.48 35.5 35.5 0 00-1.48 7.38c-.33 4.58.73 9.13 1.79 13.58q2.4 10 4.78 20.08 1.68 7.05 3.35 14.09c2.2 9.26 4.41 18.58 4.82 28.11a61.05 61.05 0 01-1 14.29 124.52 124.52 0 00-1.24 42.83 210 210 0 008.09 35.41c.81-.43 1.63-.83 2.47-1.2l-.35.65q-1.73 3-3.2 6.15a35 35 0 00-1.71 4.21c-1.28 4-1.48 8.26-1.66 12.47a6.1 6.1 0 00.21 2.41c.55 1.51 2.13 2.28 3.6 2.7 4.32 1.23 8.81.79 13.3.21a1.61 1.61 0 00.09.29c.55 1.51 2.12 2.28 3.6 2.7 6.18 1.76 12.7.1 19.07-.5s12.63-.16 18.76-1.63a8.93 8.93 0 002.6-1 8.51 8.51 0 003.28-4.55 5.83 5.83 0 00.38-1.49c.25-2.19-1.62-4.12-3.6-4.85zM337 749.73a25.2 25.2 0 01-2 6.78 129.4 129.4 0 00-10.26 32.17 149.15 149.15 0 00-2.27 22.25c-.1 5.5.11 11.26-2.18 16.2l.83-.13c-.26.48-.51 1-.75 1.38l-.12.22a21.68 21.68 0 01-2.73-7.66c0-.09-.45-.16-1.14-.2a206.93 206.93 0 01-2.92-47.89 22.17 22.17 0 01.8-5.75c.51-1.61 1.37-3.08 2-4.64a34.09 34.09 0 002-8.14 115.64 115.64 0 001.26-21.52c-.24-6.79 1.33-13.54 2.67-20.3.64-3.21 1.23-6.43 1.55-9.65l.06-.65a96.87 96.87 0 0112.28 31.88 45.6 45.6 0 01.92 15.65zm-42.8-144.52l.32.28a22 22 0 012.66 2.79 3.69 3.69 0 01.84 1.54c.3 1.46-.91 2.7-1.9 3.77a17 17 0 00-1.21 1.46q-.32-4.92-.68-9.84z" transform="translate(-35 -34.22)" fill="url(#a)"/><path d="M245.36 508.31l-1.1 8.49c-.37 2.88-.74 5.75-.94 8.64-.67 9.62.57 19.28.25 28.92-.26 7.42-1.44 14.83-.87 22.24.51 6.54 2.37 12.9 4.23 19.2l2.64 9a2.38 2.38 0 00.66 1.24 2.33 2.33 0 001.69.27l11.72-1.06c-.75-3.44-1.58-7-2-10.53-.32-2.76-.51-5.54-.71-8.32-.62-8.66-1.33-17.32-2-26l-1.25-15.2c-.53-6.6-1.08-13.23-2.74-19.64a39.09 39.09 0 00-9.58-17.25z" fill="#0f5d40"/><path d="M245.36 508.31l-1.1 8.49c-.37 2.88-.74 5.75-.94 8.64-.67 9.62.57 19.28.25 28.92-.26 7.42-1.44 14.83-.87 22.24.51 6.54 2.37 12.9 4.23 19.2l2.64 9a2.38 2.38 0 00.66 1.24 2.33 2.33 0 001.69.27l11.72-1.06c-.75-3.44-1.58-7-2-10.53-.32-2.76-.51-5.54-.71-8.32-.62-8.66-1.33-17.32-2-26l-1.25-15.2c-.53-6.6-1.08-13.23-2.74-19.64a39.09 39.09 0 00-9.58-17.25z" opacity=".1"/><path d="M266.24 797.33a35.81 35.81 0 00-1.8 4.18c-1.34 3.95-1.54 8.19-1.74 12.36a6 6 0 00.22 2.39c.58 1.5 2.24 2.26 3.79 2.67 6.49 1.75 13.33.11 20-.49s13.26-.16 19.7-1.61a10.06 10.06 0 002.73-.95 8.51 8.51 0 003.45-4.5 5.88 5.88 0 00.39-1.48c.21-2.2-1.7-4.1-3.78-4.82s-4.35-.61-6.54-.83a20.6 20.6 0 01-18.24-17.21c-.08-.48-10.84-.19-12 .43-1.32.73-2.12 2.54-2.87 3.77q-1.77 2.97-3.31 6.09z" fill="#a26565"/><path d="M266.24 797.33a35.81 35.81 0 00-1.8 4.18c-1.34 3.95-1.54 8.19-1.74 12.36a6 6 0 00.22 2.39c.58 1.5 2.24 2.26 3.79 2.67 6.49 1.75 13.33.11 20-.49s13.26-.16 19.7-1.61a10.06 10.06 0 002.73-.95 8.51 8.51 0 003.45-4.5 5.88 5.88 0 00.39-1.48c.21-2.2-1.7-4.1-3.78-4.82s-4.35-.61-6.54-.83a20.6 20.6 0 01-18.24-17.21c-.08-.48-10.84-.19-12 .43-1.32.73-2.12 2.54-2.87 3.77q-1.77 2.97-3.31 6.09z" opacity=".1"/><path d="M284.09 800.51a34 34 0 00-1.8 4.17c-1.35 4-1.55 8.19-1.74 12.36a5.83 5.83 0 00.22 2.39c.57 1.5 2.23 2.26 3.78 2.68 6.49 1.74 13.34.1 20-.5s13.27-.16 19.7-1.61a9.62 9.62 0 002.73-1 8.47 8.47 0 003.45-4.5 5.88 5.88 0 00.39-1.48c.21-2.19-1.7-4.1-3.78-4.82s-4.35-.6-6.54-.83a20.61 20.61 0 01-18.24-17.2c-.08-.48-10.84-.2-12 .42-1.33.73-2.13 2.54-2.88 3.77-1.14 2.03-2.26 4.07-3.29 6.15z" fill="#a26565"/><path d="M330.62 694.28c.14 21.61-6.14 42.73-13.51 63q-4.38 12.06-9.29 23.91c-1.94 4.68-4.13 9.88-2.05 14.5-6-2.28-12.1-3.62-18.41-2.57 2.4-4.9 2.17-10.6 2.28-16a140.3 140.3 0 012.36-22.05 123 123 0 0110.79-31.89 24.3 24.3 0 002.09-6.72c.82-5.14.18-10.42-.89-15.51a92.47 92.47 0 00-12.9-31.6l-.06.64a93.27 93.27 0 01-1.62 9.57c-1.41 6.69-3.06 13.39-2.81 20.12a108.83 108.83 0 01-1.32 21.33 32.43 32.43 0 01-2.15 8.06c-.69 1.55-1.59 3-2.13 4.61a21 21 0 00-.84 5.7c-.8 16.27 0 32.79 3.32 48.74-5.57-.44-11.14 1.17-16.12 3.67a198.54 198.54 0 01-8.5-35.1 116.62 116.62 0 011.3-42.46 56.42 56.42 0 001.05-14.15c-.43-9.45-2.75-18.69-5.06-27.87l-3.52-14q-2.5-10-5-19.91c-1.11-4.41-2.23-8.92-1.88-13.46a33.4 33.4 0 011.56-7.32 81.69 81.69 0 0111.07-22.64c19.27 1.08 38.77-.72 58-2.2a3.89 3.89 0 012.72.46 3.85 3.85 0 011.1 2.48l7.23 41a103 103 0 012.05 17.3c0 5.8-.9 11.58-.68 17.37.3 7.8 1.78 15.18 1.82 22.99z" fill="#454b69"/><path d="M291.05 669.99a93.27 93.27 0 01-1.62 9.57c-4.19-7.25-8.71-14.32-12.57-21.75-1-1.91-1.94-3.85-2.89-5.79l-2.85-5.8c-.53-1.09-1.06-2.18-1.54-3.29a23.77 23.77 0 01-1.79-5c1.4-.26 4.86 3.52 5.9 4.51a80.64 80.64 0 016 6.64 72.81 72.81 0 016.26 8.2 39.88 39.88 0 015.1 12.71z" opacity=".1"/><path d="M307.1 471.08s-10.7 17.05-8.72 20.62-33.7-3.17-33.7-3.17 19.43-17.05 17.44-24.19 24.98 6.74 24.98 6.74z" fill="#efb7b9"/><circle cx="297.59" cy="452.05" r="24.19" fill="#efb7b9"/><path d="M307.46 488.96a24.56 24.56 0 00-10.17-8.18 36.38 36.38 0 00-7.23-1.78l-9.65-1.7c-2.36-.42-4.89-.81-7.09.16a11.62 11.62 0 00-3 2.21c-3.35 3.11-6.6 6.52-10.81 8.32-1.15.49-2.35.85-3.5 1.34-4.71 2-8.23 6.26-10.22 11-2.1 4.94-2.16 10.31-2 15.68a27.56 27.56 0 00.55 5.52 35.57 35.57 0 001.83 5.06 92.57 92.57 0 013.34 10.73q3.75 14.35 6.24 29a10.87 10.87 0 001.21 4 14.36 14.36 0 003.34 3.21 20.86 20.86 0 012.79 2.77 3.62 3.62 0 01.91 1.48c.31 1.44-1 2.68-2 3.73a18.06 18.06 0 00-4.52 7.87 3.17 3.17 0 00-.72 2.17 3.8 3.8 0 01.23 1.72 3.88 3.88 0 01-.91 1.41 5.33 5.33 0 00-1 4.28 67.89 67.89 0 0023.68 5.54c2 .1 4 .1 6 .34 1.42.18 2.82.47 4.24.64a45.78 45.78 0 006.2.16c10.77-.22 21.85-.49 31.74-4.76.93-5.07-1.08-10.24-2.34-15.24-2-8-2.5-16.19-4-24.26-1-5.51-2.5-10.94-3.35-16.49s-1-11.3.48-16.7c1.35-4.78 1.76-9.66 3.16-14.43s2.38-9.94.8-14.66c-2-5.84-8.07-10.47-14.23-10.14z" fill="#0f5d40"/><path d="M319.34 439.22c1.18-4.29-1.14-8.76-3.9-12.25-3-3.75-6.82-7.13-11.51-8.07-3.81-.77-7.76.16-11.64-.15-3.43-.27-6.73-1.51-10.14-2a32.12 32.12 0 00-9.28.35 35.25 35.25 0 00-8.45 2.36c-10.3 4.57-16.33 15.83-17.73 27s1.05 22.43 3.49 33.42l2.21 9.94c2.3 10.35 4.6 20.74 5.21 31.32s-.53 21.44-4.88 31.1a66.89 66.89 0 0030.73-34.79c1.56-4.09 2.72-8.34 4.46-12.36 1.49-3.46 3.4-6.74 4.72-10.27a33.36 33.36 0 002.11-12.47c-.08-3.2-.61-6.38-.52-9.58s.91-6.53 3.12-8.85c2-2.05 4.75-3 7.28-4.33a30.31 30.31 0 0010.19-8.5c1.59-2.08 1.68-3 2.08-5.36s1.83-4.24 2.45-6.51z" fill="#a26565"/><path d="M319.37 620.93c.25 2.49-.2 5 .34 7.47.41 1.84 1.36 3.5 1.92 5.3a25.2 25.2 0 01.85 6.37c.08 1.8-.06 4-1.66 4.84-.7.37-1.54.37-2.27.69s-1.35 1.19-.93 1.87 1.14.57 1.8.7 1.37.81 1 1.36a1.14 1.14 0 01-.58.37 7.08 7.08 0 00-1.88.9 1.92 1.92 0 00-.77 1.83 1.13 1.13 0 001.61.74 5 5 0 00-.47 2c2.56 1.1 5.43-.34 7.83-1.73a29.49 29.49 0 003-1.92 15 15 0 005.84-12.77 29.79 29.79 0 00-.57-3.65 54.92 54.92 0 00-1.47-6.21c-.69-2.15-1.63-4.2-2.44-6.31-1.72-4.49-2.83-9.19-4.39-13.74a2.08 2.08 0 00-.75-1.19 2.11 2.11 0 00-1.11-.21 18.19 18.19 0 00-5.21.48c-1 .3-2.71 1-3.18 2s.28 1.84.73 2.67a22.38 22.38 0 012.76 8.14z" fill="#efb7b9"/><path d="M317.74 499.42a7.33 7.33 0 011.28 1.78c3.44 6.25 3.48 13.72 3.64 20.85.18 8 .62 16 1.06 24.05l1.31 24c.13 2.29.25 4.58.58 6.85 1.54.39 1.6 2.39 1.43 4-1.11 9.78-3.86 19.85-1 29.26a2.94 2.94 0 00.67 1.3 7.81 7.81 0 00-4.47-.06c-1.43.3-2.81.83-4.25 1.16-1.82.41-3.88.59-5.12 2a99.24 99.24 0 01-3.35-12.92c-.68-4-.87-8.12-2.49-11.82-.65-1.49-1.53-2.87-2.33-4.3-4.19-7.48-6.25-15.93-8.26-24.27a35.43 35.43 0 01-.64-12.06 41.47 41.47 0 00.5-5.55 42.64 42.64 0 00-.77-5.84 39.15 39.15 0 011.17-16.91c1.5-5.09 2.82-10.45 6-14.73s9.73-6.72 15.04-6.79z" opacity=".1"/><path d="M318.93 498.62a7.39 7.39 0 011.28 1.79c3.44 6.24 3.48 13.72 3.64 20.85.18 8 .62 16 1.06 24l1.31 24c.13 2.29.25 4.58.58 6.85 1.54.39 1.6 2.39 1.42 4-1.1 9.78-3.85 19.84-1 29.26a2.94 2.94 0 00.67 1.3 7.81 7.81 0 00-4.47-.06c-1.43.3-2.81.83-4.25 1.15-1.82.42-3.88.59-5.12 2a98.21 98.21 0 01-3.32-12.98c-.68-4-.87-8.11-2.49-11.81a48.28 48.28 0 00-2.33-4.3c-4.2-7.48-6.25-15.94-8.26-24.28a35.42 35.42 0 01-.64-12.06 26 26 0 00-.27-11.39 39.1 39.1 0 011.17-16.9c1.5-5.09 2.82-10.45 6-14.73s9.71-6.61 15.02-6.69z" fill="#0f5d40"/><path d="M315.44 426.97c-3-3.75-6.82-7.13-11.51-8.07-3.81-.77-7.76.16-11.64-.15-3.43-.27-6.73-1.51-10.14-2a32.12 32.12 0 00-9.28.35 35.25 35.25 0 00-8.45 2.36 25.09 25.09 0 00-4.17 2.37 35.56 35.56 0 017.47-2 32 32 0 019.27-.35c3.42.44 6.71 1.67 10.15 1.94 3.87.31 7.82-.61 11.64.15 4.69.94 8.53 4.33 11.5 8.08 2.77 3.48 5.08 7.95 3.91 12.25-.62 2.26-2.06 4.24-2.45 6.57s-.49 3.28-2.09 5.36a30.38 30.38 0 01-7.34 6.83c.77-.36 1.56-.72 2.31-1.11a30.31 30.31 0 0010.19-8.5c1.59-2.08 1.68-3 2.08-5.36s1.83-4.3 2.45-6.57c1.18-4.19-1.14-8.66-3.9-12.15zm-18.1 37.01a10 10 0 011.35-1.17c-2.31 1.12-4.74 2.1-6.51 4-2.21 2.31-3 5.65-3.12 8.85s.45 6.38.52 9.57a33.41 33.41 0 01-2.11 12.48c-1.32 3.53-3.23 6.8-4.72 10.27-1.73 4-2.89 8.26-4.45 12.35a67 67 0 01-25.41 31.62c-.06.13-.11.27-.17.4a66.89 66.89 0 0030.73-34.79c1.56-4.09 2.72-8.34 4.46-12.36 1.49-3.46 3.4-6.74 4.72-10.27a33.36 33.36 0 002.11-12.47c-.08-3.2-.61-6.38-.52-9.58s.91-6.58 3.12-8.9z" opacity=".1"/></svg>
\ No newline at end of file
+<svg id="b847c0d8-de26-4ae3-b269-ef35a8ef771f" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1130" height="831.56" viewBox="0 0 1130 831.56"><defs><linearGradient id="af868219-7e5b-405b-a411-f7ffae4abd96" x1="321.68" y1="857.11" x2="321.68" y2="447.21" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="gray" stop-opacity="0.25"/><stop offset="0.54" stop-color="gray" stop-opacity="0.12"/><stop offset="1" stop-color="gray" stop-opacity="0.1"/></linearGradient></defs><title>youtube tutorial</title><path d="M691.54,158.91C619.1,156.4,550.1,133,484.22,107.42S353.07,53.49,282.37,39.93C236.89,31.21,184.88,30,148.24,54.36c-35.27,23.46-46.66,64-52.78,101.55-4.61,28.28-7.32,58,5.3,84.51,8.77,18.37,24.34,33.82,35.11,51.42,37.45,61.26,11,136.79-29.62,196.59-19,28.06-41.13,54.82-55.82,84.69s-21.49,64.08-8.64,94.54c12.75,30.2,43.11,52.88,76,68.83,66.81,32.4,145.54,41.68,222.31,46.93C510.05,795,680.9,790,851.29,785c63.06-1.87,126.39-3.76,188.43-13.51,34.44-5.41,70-14,95-34.75,31.75-26.34,39.62-70.94,18.34-104-35.68-55.39-134.35-69.15-159.29-128.6-13.73-32.72.37-69.17,20.32-99.52,42.8-65.11,114.54-122.22,118.32-196.64,2.6-51.11-31.89-102.3-85.21-126.48-55.9-25.35-133.4-22.16-174.64,19.8C830.12,144.51,755.5,161.13,691.54,158.91Z" transform="translate(-35 -34.22)" fill="#0f5d40" opacity="0.1"/><polygon points="664.18 755.89 469.18 753.39 469.75 748.39 479.18 665.89 650.43 665.89 663.03 748.39 663.99 754.64 664.18 755.89" fill="#d0d2d5"/><polygon points="663.99 754.64 566.68 754.64 469.18 753.39 469.75 748.39 663.03 748.39 663.99 754.64" opacity="0.1"/><rect x="436.68" y="749.64" width="258.75" height="6.25" fill="#d0d2d5"/><path d="M977.3,204.59a16.27,16.27,0,0,0-16.19-16.35H238.5a16.27,16.27,0,0,0-16.2,16.35v438h755Z" transform="translate(-35 -34.22)" fill="#444053"/><path d="M222.3,638.24v51.3a16.2,16.2,0,0,0,16.2,16.2H961.11a16.2,16.2,0,0,0,16.19-16.2v-51.3Z" transform="translate(-35 -34.22)" fill="#d0d2d5"/><rect x="218.55" y="181.52" width="696.25" height="393.75" fill="#0f5d40" opacity="0.1"/><path d="M603.55,686.27a16.89,16.89,0,0,0,13.28-6.44v0a17.21,17.21,0,0,0,1.31-1.93l-9.26-1.52,10,.08a16.85,16.85,0,0,0,.32-13.38l-13.43,7,12.39-9.1a16.87,16.87,0,1,0-27.87,18.88v0A16.87,16.87,0,0,0,603.55,686.27Z" transform="translate(-35 -34.22)" fill="#0f5d40"/><polygon points="585.43 671.52 663.22 749.64 651.29 671.52 585.43 671.52" opacity="0.1"/><rect x="239" y="252.56" width="457" height="274" rx="2.6" fill="#fff"/><rect x="219" y="181.56" width="696" height="23" fill="#fff"/><rect x="222" y="185.56" width="20" height="14" rx="0.78" fill="#0f5d40"/><rect x="460" y="185.56" width="210" height="14" rx="0.58" fill="#0f5d40" opacity="0.3"/><path d="M698.77,228.22h-.51l-.19-.16a4.25,4.25,0,0,0,1-2.72,4.14,4.14,0,1,0-4.13,4.17,4.27,4.27,0,0,0,2.72-1l.19.16v.52l3.2,3.2,1-1Zm-3.84,0a2.89,2.89,0,1,1,2.88-2.88A2.86,2.86,0,0,1,694.93,228.22Z" transform="translate(-35 -34.22)" fill="#444053"/><circle cx="905" cy="192.56" r="7" fill="#0f5d40"/><rect x="729" y="229.56" width="65" height="44" rx="2.43" fill="#fff"/><rect x="811" y="229.56" width="84" height="7" rx="0.61" fill="#fff"/><rect x="811" y="244.56" width="84" height="7" rx="0.61" fill="#fff"/><rect x="811" y="259.56" width="84" height="7" rx="0.61" fill="#fff"/><rect x="729" y="298.56" width="65" height="44" rx="2.43" fill="#fff"/><rect x="811" y="298.56" width="84" height="7" rx="0.61" fill="#fff"/><rect x="811" y="313.56" width="84" height="7" rx="0.61" fill="#fff"/><rect x="811" y="328.56" width="84" height="7" rx="0.66" fill="#fff"/><rect x="729" y="367.56" width="65" height="44" rx="2.43" fill="#fff"/><rect x="811" y="367.56" width="84" height="7" rx="0.66" fill="#fff"/><rect x="811" y="382.56" width="84" height="7" rx="0.66" fill="#fff"/><rect x="811" y="397.56" width="84" height="7" rx="0.66" fill="#fff"/><rect x="729" y="436.56" width="65" height="44" rx="2.43" fill="#fff"/><rect x="811" y="436.56" width="84" height="7" rx="0.66" fill="#fff"/><rect x="811" y="451.56" width="84" height="7" rx="0.66" fill="#fff"/><rect x="811" y="466.56" width="84" height="7" rx="0.66" fill="#fff"/><rect x="729" y="505.56" width="65" height="44" rx="2.43" fill="#fff"/><rect x="811" y="505.56" width="84" height="7" rx="0.66" fill="#fff"/><rect x="811" y="520.56" width="84" height="7" rx="0.66" fill="#fff"/><rect x="811" y="535.56" width="84" height="7" rx="0.66" fill="#fff"/><rect x="304.92" y="325.17" width="102.83" height="5.33" fill="#0f5d40" opacity="0.1"/><rect x="314.06" y="296.99" width="9.9" height="28.18" fill="#0f5d40" opacity="0.1"/><rect x="328.53" y="296.99" width="9.9" height="28.18" fill="#0f5d40" opacity="0.1"/><rect x="343" y="296.99" width="9.9" height="28.18" fill="#0f5d40" opacity="0.1"/><rect x="357.47" y="296.99" width="9.9" height="28.18" fill="#0f5d40" opacity="0.1"/><rect x="371.94" y="296.99" width="9.9" height="28.18" fill="#0f5d40" opacity="0.1"/><rect x="386.42" y="296.99" width="9.9" height="28.18" fill="#0f5d40" opacity="0.1"/><rect x="314.06" y="302.32" width="9.9" height="3.05" fill="#0f5d40" opacity="0.1"/><rect x="328.53" y="302.32" width="9.9" height="3.05" fill="#0f5d40" opacity="0.1"/><rect x="343" y="302.32" width="9.9" height="3.05" fill="#0f5d40" opacity="0.1"/><rect x="357.47" y="302.32" width="9.9" height="3.05" fill="#0f5d40" opacity="0.1"/><rect x="371.94" y="302.32" width="9.9" height="3.05" fill="#0f5d40" opacity="0.1"/><rect x="386.42" y="302.32" width="9.9" height="3.05" fill="#0f5d40" opacity="0.1"/><rect x="314.06" y="316.03" width="9.9" height="3.05" fill="#0f5d40" opacity="0.1"/><rect x="328.53" y="316.03" width="9.9" height="3.05" fill="#0f5d40" opacity="0.1"/><rect x="343" y="316.03" width="9.9" height="3.05" fill="#0f5d40" opacity="0.1"/><rect x="357.47" y="316.03" width="9.9" height="3.05" fill="#0f5d40" opacity="0.1"/><rect x="371.94" y="316.03" width="9.9" height="3.05" fill="#0f5d40" opacity="0.1"/><rect x="386.42" y="316.03" width="9.9" height="3.05" fill="#0f5d40" opacity="0.1"/><rect x="530.37" y="338.88" width="102.83" height="5.33" fill="#0f5d40" opacity="0.1"/><rect x="539.51" y="310.7" width="9.9" height="28.18" fill="#0f5d40" opacity="0.1"/><rect x="553.98" y="310.7" width="9.9" height="28.18" fill="#0f5d40" opacity="0.1"/><rect x="568.45" y="310.7" width="9.9" height="28.18" fill="#0f5d40" opacity="0.1"/><rect x="582.93" y="310.7" width="9.9" height="28.18" fill="#0f5d40" opacity="0.1"/><rect x="597.4" y="310.7" width="9.9" height="28.18" fill="#0f5d40" opacity="0.1"/><rect x="611.87" y="310.7" width="9.9" height="28.18" fill="#0f5d40" opacity="0.1"/><rect x="539.51" y="316.03" width="9.9" height="3.05" fill="#0f5d40" opacity="0.1"/><rect x="553.98" y="316.03" width="9.9" height="3.05" fill="#0f5d40" opacity="0.1"/><rect x="568.45" y="316.03" width="9.9" height="3.05" fill="#0f5d40" opacity="0.1"/><rect x="582.93" y="316.03" width="9.9" height="3.05" fill="#0f5d40" opacity="0.1"/><rect x="597.4" y="316.03" width="9.9" height="3.05" fill="#0f5d40" opacity="0.1"/><rect x="611.87" y="316.03" width="9.9" height="3.05" fill="#0f5d40" opacity="0.1"/><rect x="539.51" y="329.74" width="9.9" height="3.05" fill="#0f5d40" opacity="0.1"/><rect x="553.98" y="329.74" width="9.9" height="3.05" fill="#0f5d40" opacity="0.1"/><rect x="568.45" y="329.74" width="9.9" height="3.05" fill="#0f5d40" opacity="0.1"/><rect x="582.93" y="329.74" width="9.9" height="3.05" fill="#0f5d40" opacity="0.1"/><rect x="597.4" y="329.74" width="9.9" height="3.05" fill="#0f5d40" opacity="0.1"/><rect x="611.87" y="329.74" width="9.9" height="3.05" fill="#0f5d40" opacity="0.1"/><rect x="530.37" y="377.72" width="102.83" height="5.33" fill="#0f5d40" opacity="0.1"/><rect x="539.51" y="349.54" width="9.9" height="28.18" fill="#0f5d40" opacity="0.1"/><rect x="553.98" y="349.54" width="9.9" height="28.18" fill="#0f5d40" opacity="0.1"/><rect x="568.45" y="349.54" width="9.9" height="28.18" fill="#0f5d40" opacity="0.1"/><rect x="582.93" y="349.54" width="9.9" height="28.18" fill="#0f5d40" opacity="0.1"/><rect x="597.4" y="349.54" width="9.9" height="28.18" fill="#0f5d40" opacity="0.1"/><rect x="611.87" y="349.54" width="9.9" height="28.18" fill="#0f5d40" opacity="0.1"/><rect x="539.51" y="354.87" width="9.9" height="3.05" fill="#0f5d40" opacity="0.1"/><rect x="553.98" y="354.87" width="9.9" height="3.05" fill="#0f5d40" opacity="0.1"/><rect x="568.45" y="354.87" width="9.9" height="3.05" fill="#0f5d40" opacity="0.1"/><rect x="582.93" y="354.87" width="9.9" height="3.05" fill="#0f5d40" opacity="0.1"/><rect x="597.4" y="354.87" width="9.9" height="3.05" fill="#0f5d40" opacity="0.1"/><rect x="611.87" y="354.87" width="9.9" height="3.05" fill="#0f5d40" opacity="0.1"/><rect x="539.51" y="368.58" width="9.9" height="3.05" fill="#0f5d40" opacity="0.1"/><rect x="553.98" y="368.58" width="9.9" height="3.05" fill="#0f5d40" opacity="0.1"/><rect x="568.45" y="368.58" width="9.9" height="3.05" fill="#0f5d40" opacity="0.1"/><rect x="582.93" y="368.58" width="9.9" height="3.05" fill="#0f5d40" opacity="0.1"/><rect x="597.4" y="368.58" width="9.9" height="3.05" fill="#0f5d40" opacity="0.1"/><rect x="611.87" y="368.58" width="9.9" height="3.05" fill="#0f5d40" opacity="0.1"/><path d="M403,419.66a28.45,28.45,0,0,1-2.1-3.09l14.81-2.43-16,.12a27.06,27.06,0,0,1-.52-21.38L420.64,404l-19.81-14.56a27,27,0,1,1,44.57,30.2,26.24,26.24,0,0,1,3.08,4.92l-19.22,10,20.49-6.87A27,27,0,0,1,445.4,453,27,27,0,1,1,403,453a27,27,0,0,1,0-33.37Z" transform="translate(-35 -34.22)" fill="#0f5d40" opacity="0.1"/><path d="M451.18,436.34A26.89,26.89,0,0,1,445.4,453,27,27,0,1,1,403,453C399.37,448.43,451.18,433.31,451.18,436.34Z" transform="translate(-35 -34.22)" fill="#0f5d40" opacity="0.1"/><path d="M428.52,503.88a2.53,2.53,0,0,1,.13.22h-9.16c.05-.07.08-.15.13-.22a8.87,8.87,0,0,1-1.18-4.51,9.26,9.26,0,0,1,.55-3.18v0c.51.08,1.14.17,1.87.25a32.1,32.1,0,0,0,6.39,0q.92-.09,1.89-.24a.09.09,0,0,0,0,.05,9,9,0,0,1,.54,3.13A8.87,8.87,0,0,1,428.52,503.88Z" transform="translate(-35 -34.22)" fill="#3f3d56" opacity="0.2"/><path d="M395.6,504.1h-51c-.11-.29-.21-.6-.3-.9a26.85,26.85,0,0,1,.59-17.64,27,27,0,0,1-9.85-31.89,25.83,25.83,0,0,1-2.91-2.33l13.42-6.69-15.26,4.84a27,27,0,0,1-6.8-20.27l23.81,4.3-23.22-8.07a27,27,0,1,1,51.49,15.7A27.35,27.35,0,0,1,380,445l-15.42,15.21,17.55-12.62a27,27,0,0,1,3.32,25.5A27,27,0,0,1,395.6,504.1Z" transform="translate(-35 -34.22)" fill="#0f5d40" opacity="0.1"/><path d="M395.6,504.1h-51c-.11-.29-.21-.6-.3-.9a26.85,26.85,0,0,1,.59-17.64c-4.8-3.32,40.23-33.07,41.12-30.17a26.88,26.88,0,0,1-.59,17.65A27,27,0,0,1,395.6,504.1Z" transform="translate(-35 -34.22)" fill="#0f5d40" opacity="0.1"/><path d="M626.35,467.56a26.9,26.9,0,0,1-13.51,11.36,27.4,27.4,0,0,1,.11,5.8l-21.61-1.3L612.45,488a27,27,0,0,1-3.22,8.16,26.57,26.57,0,0,1-7.2,7.9H572.61v.77h-30c.06-.26.12-.51.19-.77a27,27,0,0,1,16.45-18.31,27,27,0,0,1,17.13-28.64,27.36,27.36,0,0,1-.22-3.73l13.95,5.51-13.8-8.11A27,27,0,0,1,586.9,432.2l12.71,20.58-9.53-22.66a27,27,0,0,1,36.27,37.44Z" transform="translate(-35 -34.22)" fill="#0f5d40" opacity="0.1"/><path d="M609.23,496.2a26.57,26.57,0,0,1-7.2,7.9H572.61v.77h-30c.06-.26.12-.51.19-.77a27,27,0,0,1,16.45-18.31c-.25-2,5.56-1.7,13.31-.4C587.75,487.94,610.26,494.48,609.23,496.2Z" transform="translate(-35 -34.22)" fill="#0f5d40" opacity="0.1"/><path d="M481.71,424.19s3.7,20-4.56,26.53,7,45.67,32.18,41.1,35.44-37.4,35.44-37.4-25.22-5.22-15.87-31.75Z" transform="translate(-35 -34.22)" fill="#ee8e9e"/><path d="M481.71,424.19s3.7,20-4.56,26.53,7,45.67,32.18,41.1,35.44-37.4,35.44-37.4-25.22-5.22-15.87-31.75Z" transform="translate(-35 -34.22)" opacity="0.1"/><circle cx="469" cy="362.9" r="41.75" fill="#ee8e9e"/><path d="M572.61,476.49v28.38H434.75V477.78a17.48,17.48,0,0,1,10.67-16.1l3.95-1.68c10-4.26,22.15-9.55,26.12-11.75a6.53,6.53,0,0,0,1.22-.79c2.17-2.17,1.74.65,1.74.65s-.06.54-.1,1.47c-.24,6.39.68,31.5,30.11,29.41,28.71-2,30-21.42,29.71-27.13a15.45,15.45,0,0,0-.13-1.58,37.09,37.09,0,0,1,5.81,1.9c6,2.22,14.86,5.78,17.23,7.46.74.52,1.64,1.06,2.62,1.61a17.23,17.23,0,0,1,3.1,2.21A17.51,17.51,0,0,1,572.61,476.49Z" transform="translate(-35 -34.22)" fill="#0f5d40"/><path d="M543.85,452.18c-2.43,11.26-10.06,32.35-37.56,32.9-29.3.58-31-28.56-30.81-36.83a5.91,5.91,0,0,0,1.23-.79c2.18-2.17,1.74.65,1.74.65s-3.69,33.27,30,30.88S538,450.29,538,450.29C538,450.13,540.51,451,543.85,452.18Z" transform="translate(-35 -34.22)" opacity="0.1"/><path d="M454.58,399.21a7.15,7.15,0,0,1,7.53,2.75c1.52,2.13,1.75,4.7,1.94,7.16,1.81.38,2.83-1.67,3-3.22.67-6.31.72-12.74,2.84-18.84s6.75-12,13.86-14.33a16.08,16.08,0,0,1,7.57-.72c1.51.25,2.93.78,4.43,1,5.2.86,10.85-1.6,15.72.11,3.06,1.08,5,3.57,6.43,6.06a13.08,13.08,0,0,0,2.5,3.63c2.07,1.86,5.31,2.34,8.28,2.92s6.21,1.59,7.48,3.88c1.14,2.07.3,4.46-.08,6.7a16.42,16.42,0,0,0,1.69,10.37c.55,1,1.67,2.21,3,1.88a2.63,2.63,0,0,0,1.42-1.15c3.41-4.78,3.32-11,7.6-15.31,1.43-1.44,3.28-2.56,4.67-4a9.08,9.08,0,0,0,2.42-8.24c-.77-3.3-3.41-6-5.54-8.9a35,35,0,0,1-5.93-12.31,2.23,2.23,0,0,1,0-1.61,4.29,4.29,0,0,1,1.52-1.24,5.74,5.74,0,0,0,1.94-7.33C547.66,346,545,344.12,542,343a44.8,44.8,0,0,0-9.37-2c-2.1.3-4.56-.89-5.21-2.57-.29-.75-.29-1.56-.58-2.31a5.3,5.3,0,0,0-4-2.8,11.7,11.7,0,0,0-5.35.38c-2,.56-4.27,1.4-6,.42-.91-.51-1.41-1.44-2.39-1.86-2-.84-4.06.86-5.49,2.26a13.36,13.36,0,0,1-4.95,3.33,7.37,7.37,0,0,1-6.14-.41c-1.37-.87-2.06-2.27-3.15-3.38a11.86,11.86,0,0,0-7.45-3,26.23,26.23,0,0,0-8.41.92,50.78,50.78,0,0,0-14.77,6.2,15.87,15.87,0,0,0-5.67,5.27,12,12,0,0,0-1.27,5.43c-.22,5.91,1.74,12.13,6.85,16.27-3.12,1.3-4.17,4.49-4.9,7.32-1.17,4.52-2.34,9.11-1.9,13.71.22,2.38.87,4.76.52,7.13a15.36,15.36,0,0,0-.46,3.41A3.27,3.27,0,0,0,454.58,399.21Z" transform="translate(-35 -34.22)" fill="#454b69"/><g opacity="0.1"><path d="M556.23,378a9.76,9.76,0,0,1-1.8,2.66c-1.39,1.46-3.24,2.59-4.67,4-4.28,4.28-4.19,10.54-7.6,15.32a2.57,2.57,0,0,1-1.42,1.14c-1.3.34-2.42-.84-3-1.88a17.2,17.2,0,0,1-1.49-4c-.07.35-.14.7-.2,1a16.42,16.42,0,0,0,1.69,10.37c.55,1,1.67,2.21,3,1.88a2.63,2.63,0,0,0,1.42-1.15c3.41-4.78,3.32-11,7.6-15.31,1.43-1.44,3.28-2.56,4.67-4a9.08,9.08,0,0,0,2.42-8.24A10.74,10.74,0,0,0,556.23,378Z" transform="translate(-35 -34.22)"/><path d="M546.91,348.4a4.19,4.19,0,0,0-1.52,1.24,2.21,2.21,0,0,0,0,1.6,33.82,33.82,0,0,0,1.51,4.56h0a5.74,5.74,0,0,0,1.94-7.33,7,7,0,0,0-.7-1.17A5.76,5.76,0,0,1,546.91,348.4Z" transform="translate(-35 -34.22)"/><path d="M458.71,357.67a18.54,18.54,0,0,1-6.55-11.59,15.62,15.62,0,0,0-.3,2.72,20.82,20.82,0,0,0,3.29,12.37A7,7,0,0,1,458.71,357.67Z" transform="translate(-35 -34.22)"/><path d="M536.08,388.94c.38-2.25,1.22-4.64.08-6.7-1.27-2.3-4.51-3.3-7.48-3.88s-6.21-1.07-8.28-2.92a13.08,13.08,0,0,1-2.5-3.63c-1.41-2.49-3.37-5-6.43-6.06-4.87-1.71-10.52.74-15.72-.11-1.5-.25-2.92-.77-4.43-1a16,16,0,0,0-7.57.72c-7.11,2.34-11.74,8.24-13.86,14.33s-2.17,12.52-2.84,18.84c-.17,1.54-1.19,3.6-3,3.22-.19-2.47-.42-5-1.94-7.17a7.15,7.15,0,0,0-7.53-2.74,3.66,3.66,0,0,1-2.11-1.35,11.59,11.59,0,0,1,0,2.76,15.36,15.36,0,0,0-.46,3.41,3.27,3.27,0,0,0,2.61,2.57,7.15,7.15,0,0,1,7.53,2.75c1.52,2.13,1.75,4.7,1.94,7.16,1.81.38,2.83-1.67,3-3.22.67-6.31.72-12.74,2.84-18.84s6.75-12,13.86-14.33a16.08,16.08,0,0,1,7.57-.72c1.51.25,2.93.78,4.43,1,5.2.86,10.85-1.6,15.72.11,3.06,1.08,5,3.57,6.43,6.06a13.08,13.08,0,0,0,2.5,3.63c2.07,1.86,5.31,2.34,8.28,2.92s6,1.52,7.33,3.64C536,389.24,536.05,389.09,536.08,388.94Z" transform="translate(-35 -34.22)"/><path d="M452.43,385.83a19,19,0,0,0-.33-5.57,24.82,24.82,0,0,0-.19,5.84c0,.5.11,1,.18,1.49C452.2,387,452.35,386.42,452.43,385.83Z" transform="translate(-35 -34.22)"/></g><path d="M403.49,545.22V527.17a.51.51,0,0,1,.51-.51h2.05a.51.51,0,0,1,.51.51v7.51l8.32-7.71a1.36,1.36,0,0,1,2.23,1v16.35a1.36,1.36,0,0,1-2.23,1l-8.32-7.66v7.47a.51.51,0,0,1-.51.51H404A.51.51,0,0,1,403.49,545.22Z" transform="translate(-35 -34.22)" fill="#444053"/><path d="M604.52,527.17v18.05a.51.51,0,0,1-.52.51h-2a.51.51,0,0,1-.51-.51v-7.51l-8.32,7.7a1.37,1.37,0,0,1-2.24-1V528a1.37,1.37,0,0,1,2.24-1l8.32,7.66v-7.46a.51.51,0,0,1,.51-.51h2A.51.51,0,0,1,604.52,527.17Z" transform="translate(-35 -34.22)" fill="#444053"/><path d="M500.61,546h-4.07a2,2,0,0,1-2-2V529.06a2,2,0,0,1,2-2h4.07a2,2,0,0,1,2,2V544A2,2,0,0,1,500.61,546Zm12.9-2V529.06a2,2,0,0,0-2-2H507.4a2,2,0,0,0-2,2V544a2,2,0,0,0,2,2h4.07A2,2,0,0,0,513.51,544Z" transform="translate(-35 -34.22)" fill="#444053"/><rect x="349" y="468.62" width="240" height="2.67" fill="#444053" opacity="0.6"/><circle cx="423.11" cy="469.95" r="6.33" fill="#444053"/><rect x="349" y="468.62" width="74.11" height="2.67" fill="#444053"/><ellipse cx="957.08" cy="758.54" rx="59.47" ry="11.44" fill="#0f5d40"/><ellipse cx="956.09" cy="753.68" rx="6.92" ry="9.06" fill="#3f3d56"/><ellipse cx="956.09" cy="742.6" rx="6.92" ry="9.06" fill="#3f3d56"/><ellipse cx="956.09" cy="731.53" rx="6.92" ry="9.06" fill="#3f3d56"/><ellipse cx="956.09" cy="720.45" rx="6.92" ry="9.06" fill="#3f3d56"/><ellipse cx="956.09" cy="709.37" rx="6.92" ry="9.06" fill="#3f3d56"/><ellipse cx="956.09" cy="698.29" rx="6.92" ry="9.06" fill="#3f3d56"/><ellipse cx="956.09" cy="687.21" rx="6.92" ry="9.06" fill="#3f3d56"/><path d="M1017,645.63a34.28,34.28,0,0,0,2.58-3.8l-18.2-3,19.68.15a33.27,33.27,0,0,0,.63-26.28L995.31,626.4l24.34-17.89a33.17,33.17,0,1,0-54.78,37.12,33.85,33.85,0,0,0-3.78,6l23.62,12.27-25.18-8.45a33.19,33.19,0,0,0,5.34,31.14,33.16,33.16,0,1,0,52.14,0,33.18,33.18,0,0,0,0-41Z" transform="translate(-35 -34.22)" fill="#0f5d40"/><path d="M957.78,666.13a33,33,0,0,0,7.09,20.5,33.16,33.16,0,1,0,52.14,0C1021.45,681,957.78,662.41,957.78,666.13Z" transform="translate(-35 -34.22)" opacity="0.1"/><ellipse cx="290" cy="810.56" rx="99" ry="21" fill="#0f5d40" opacity="0.1"/><path d="M358.15,842.34c-2-.73-4.14-.61-6.23-.84a19.28,19.28,0,0,1-11.46-5.56,21,21,0,0,1-4.58-7c.66.24,1.32.49,2,.76-2-4.67.1-9.91,1.94-14.63q4.68-12,8.85-24.13c7-20.49,13-41.8,12.87-63.6,0-7.88-1.45-15.33-1.73-23.2-.21-5.84.69-11.67.65-17.52,0-.82,0-1.63-.06-2.45a15.53,15.53,0,0,0,5.27-12.66,30.48,30.48,0,0,0-.53-3.68,59.68,59.68,0,0,0-1.4-6.26c-.66-2.17-1.56-4.25-2.33-6.37-1.49-4.11-2.5-8.39-3.77-12.57A4.33,4.33,0,0,1,359,643a2.93,2.93,0,0,1-.64-1.31,32.41,32.41,0,0,1-1.2-8.17l.85-.38a21.27,21.27,0,0,0-.41-8.09c.48-4.29,1.23-8.61,1.69-12.88.17-1.6.1-3.61-1.37-4-.3-2.29-.42-4.61-.54-6.92q-.63-12.09-1.25-24.17c-.42-8.09-.84-16.17-1-24.27-.11-5.14-.17-10.46-1.39-15.38a18.6,18.6,0,0,0-.71-7c-1.86-5.89-7.64-10.56-13.5-10.23a26.86,26.86,0,0,0-6.39-6.46c1.17-2.62,2.57-5.32,3.72-7.44C346.24,503.25,353.1,494,353.1,483a25.43,25.43,0,0,0-2.75-11.59,12.52,12.52,0,0,0,.44-1.35,11.09,11.09,0,0,0-.45-6.49,19,19,0,0,0-1-2.32c-.26-.5-.54-1-.83-1.48L348,459c-.31-.47-.63-.92-1-1.36a33.1,33.1,0,0,0-2.28-2.74,22.56,22.56,0,0,0-3.28-2.92,14.46,14.46,0,0,0-5.4-2.49,16.46,16.46,0,0,0-3.43-.31c-.69,0-1.39,0-2.08.06-1.4.08-2.79.18-4.18.17-.46,0-.93,0-1.39-.07a50.63,50.63,0,0,1-7.24-1.51l-1.2-.25c-.41-.08-.81-.15-1.22-.2a22.89,22.89,0,0,0-3.31-.2l-1.11,0a30.68,30.68,0,0,0-3.31.34l-1.1.17a31.6,31.6,0,0,0-8.05,2.39c-.33.15-.67.32-1,.5l-.2.11c-.27.14-.54.29-.8.45l-.15.09-.85.54-.07.05c-7.94,5.34-12.63,15.46-13.82,25.5-1.33,11.27,1,22.63,3.33,33.72l2.1,10c.09.45.19.89.28,1.34a22,22,0,0,0-6.59,9.14c-2,5-2.05,10.41-1.89,15.83,0,1.1.06,2.2.17,3.3-.25,2.08-.47,4.17-.61,6.27-.63,9.7.55,19.45.24,29.17-.24,7.49-1.37,15-.82,22.44.48,6.6,2.25,13,4,19.37l2.52,9.08a2.41,2.41,0,0,0,.63,1.25,1.9,1.9,0,0,0,1.41.29A85.12,85.12,0,0,0,282.2,650a35.5,35.5,0,0,0-1.48,7.38c-.33,4.58.73,9.13,1.79,13.58q2.4,10,4.78,20.08,1.68,7.05,3.35,14.09c2.2,9.26,4.41,18.58,4.82,28.11a61.05,61.05,0,0,1-1,14.29,124.52,124.52,0,0,0-1.24,42.83,210,210,0,0,0,8.09,35.41c.81-.43,1.63-.83,2.47-1.2l-.35.65q-1.73,3-3.2,6.15a35,35,0,0,0-1.71,4.21c-1.28,4-1.48,8.26-1.66,12.47a6.1,6.1,0,0,0,.21,2.41c.55,1.51,2.13,2.28,3.6,2.7,4.32,1.23,8.81.79,13.3.21a1.61,1.61,0,0,0,.09.29c.55,1.51,2.12,2.28,3.6,2.7,6.18,1.76,12.7.1,19.07-.5s12.63-.16,18.76-1.63a8.93,8.93,0,0,0,2.6-1,8.51,8.51,0,0,0,3.28-4.55,5.83,5.83,0,0,0,.38-1.49C362,845,360.13,843.07,358.15,842.34ZM337,749.73a25.2,25.2,0,0,1-2,6.78,129.4,129.4,0,0,0-10.26,32.17,149.15,149.15,0,0,0-2.27,22.25c-.1,5.5.11,11.26-2.18,16.2l.83-.13c-.26.48-.51,1-.75,1.38l-.12.22a21.68,21.68,0,0,1-2.73-7.66c0-.09-.45-.16-1.14-.2a206.93,206.93,0,0,1-2.92-47.89,22.17,22.17,0,0,1,.8-5.75c.51-1.61,1.37-3.08,2-4.64a34.09,34.09,0,0,0,2-8.14,115.64,115.64,0,0,0,1.26-21.52c-.24-6.79,1.33-13.54,2.67-20.3.64-3.21,1.23-6.43,1.55-9.65l.06-.65a96.87,96.87,0,0,1,12.28,31.88A45.6,45.6,0,0,1,337,749.73Zm-42.8-144.52.32.28a22,22,0,0,1,2.66,2.79,3.69,3.69,0,0,1,.84,1.54c.3,1.46-.91,2.7-1.9,3.77a17,17,0,0,0-1.21,1.46Q294.59,610.13,294.23,605.21Z" transform="translate(-35 -34.22)" fill="url(#af868219-7e5b-405b-a411-f7ffae4abd96)"/><path d="M280.36,542.53l-1.1,8.49c-.37,2.88-.74,5.75-.94,8.64-.67,9.62.57,19.28.25,28.92-.26,7.42-1.44,14.83-.87,22.24.51,6.54,2.37,12.9,4.23,19.2l2.64,9a2.38,2.38,0,0,0,.66,1.24,2.33,2.33,0,0,0,1.69.27l11.72-1.06c-.75-3.44-1.58-7-2-10.53-.32-2.76-.51-5.54-.71-8.32-.62-8.66-1.33-17.32-2-26l-1.25-15.2c-.53-6.6-1.08-13.23-2.74-19.64A39.09,39.09,0,0,0,280.36,542.53Z" transform="translate(-35 -34.22)" fill="#0f5d40"/><path d="M280.36,542.53l-1.1,8.49c-.37,2.88-.74,5.75-.94,8.64-.67,9.62.57,19.28.25,28.92-.26,7.42-1.44,14.83-.87,22.24.51,6.54,2.37,12.9,4.23,19.2l2.64,9a2.38,2.38,0,0,0,.66,1.24,2.33,2.33,0,0,0,1.69.27l11.72-1.06c-.75-3.44-1.58-7-2-10.53-.32-2.76-.51-5.54-.71-8.32-.62-8.66-1.33-17.32-2-26l-1.25-15.2c-.53-6.6-1.08-13.23-2.74-19.64A39.09,39.09,0,0,0,280.36,542.53Z" transform="translate(-35 -34.22)" opacity="0.1"/><path d="M301.24,831.55a35.81,35.81,0,0,0-1.8,4.18c-1.34,3.95-1.54,8.19-1.74,12.36a6,6,0,0,0,.22,2.39c.58,1.5,2.24,2.26,3.79,2.67,6.49,1.75,13.33.11,20-.49s13.26-.16,19.7-1.61a10.06,10.06,0,0,0,2.73-.95,8.51,8.51,0,0,0,3.45-4.5,5.88,5.88,0,0,0,.39-1.48c.21-2.2-1.7-4.1-3.78-4.82s-4.35-.61-6.54-.83a20.6,20.6,0,0,1-18.24-17.21c-.08-.48-10.84-.19-12,.43-1.32.73-2.12,2.54-2.87,3.77Q302.78,828.43,301.24,831.55Z" transform="translate(-35 -34.22)" fill="#a26565"/><path d="M301.24,831.55a35.81,35.81,0,0,0-1.8,4.18c-1.34,3.95-1.54,8.19-1.74,12.36a6,6,0,0,0,.22,2.39c.58,1.5,2.24,2.26,3.79,2.67,6.49,1.75,13.33.11,20-.49s13.26-.16,19.7-1.61a10.06,10.06,0,0,0,2.73-.95,8.51,8.51,0,0,0,3.45-4.5,5.88,5.88,0,0,0,.39-1.48c.21-2.2-1.7-4.1-3.78-4.82s-4.35-.61-6.54-.83a20.6,20.6,0,0,1-18.24-17.21c-.08-.48-10.84-.19-12,.43-1.32.73-2.12,2.54-2.87,3.77Q302.78,828.43,301.24,831.55Z" transform="translate(-35 -34.22)" opacity="0.1"/><path d="M319.09,834.73a34,34,0,0,0-1.8,4.17c-1.35,4-1.55,8.19-1.74,12.36a5.83,5.83,0,0,0,.22,2.39c.57,1.5,2.23,2.26,3.78,2.68,6.49,1.74,13.34.1,20-.5s13.27-.16,19.7-1.61a9.62,9.62,0,0,0,2.73-1,8.47,8.47,0,0,0,3.45-4.5,5.88,5.88,0,0,0,.39-1.48c.21-2.19-1.7-4.1-3.78-4.82s-4.35-.6-6.54-.83a20.61,20.61,0,0,1-18.24-17.2c-.08-.48-10.84-.2-12,.42-1.33.73-2.13,2.54-2.88,3.77C321.24,830.61,320.12,832.65,319.09,834.73Z" transform="translate(-35 -34.22)" fill="#a26565"/><path d="M365.62,728.5c.14,21.61-6.14,42.73-13.51,63q-4.38,12.06-9.29,23.91c-1.94,4.68-4.13,9.88-2.05,14.5-6-2.28-12.1-3.62-18.41-2.57,2.4-4.9,2.17-10.6,2.28-16A140.3,140.3,0,0,1,327,789.29a123,123,0,0,1,10.79-31.89,24.3,24.3,0,0,0,2.09-6.72c.82-5.14.18-10.42-.89-15.51a92.47,92.47,0,0,0-12.9-31.6l-.06.64a93.27,93.27,0,0,1-1.62,9.57c-1.41,6.69-3.06,13.39-2.81,20.12a108.83,108.83,0,0,1-1.32,21.33,32.43,32.43,0,0,1-2.15,8.06c-.69,1.55-1.59,3-2.13,4.61a21,21,0,0,0-.84,5.7c-.8,16.27,0,32.79,3.32,48.74-5.57-.44-11.14,1.17-16.12,3.67a198.54,198.54,0,0,1-8.5-35.1,116.62,116.62,0,0,1,1.3-42.46,56.42,56.42,0,0,0,1.05-14.15c-.43-9.45-2.75-18.69-5.06-27.87l-3.52-14q-2.5-10-5-19.91c-1.11-4.41-2.23-8.92-1.88-13.46a33.4,33.4,0,0,1,1.56-7.32,81.69,81.69,0,0,1,11.07-22.64c19.27,1.08,38.77-.72,58-2.2a3.89,3.89,0,0,1,2.72.46,3.85,3.85,0,0,1,1.1,2.48l7.23,41a103,103,0,0,1,2.05,17.3c0,5.8-.9,11.58-.68,17.37C364.1,713.31,365.58,720.69,365.62,728.5Z" transform="translate(-35 -34.22)" fill="#454b69"/><path d="M326.05,704.21a93.27,93.27,0,0,1-1.62,9.57c-4.19-7.25-8.71-14.32-12.57-21.75-1-1.91-1.94-3.85-2.89-5.79l-2.85-5.8c-.53-1.09-1.06-2.18-1.54-3.29a23.77,23.77,0,0,1-1.79-5c1.4-.26,4.86,3.52,5.9,4.51a80.64,80.64,0,0,1,6,6.64,72.81,72.81,0,0,1,6.26,8.2A39.88,39.88,0,0,1,326.05,704.21Z" transform="translate(-35 -34.22)" opacity="0.1"/><path d="M342.1,505.3s-10.7,17.05-8.72,20.62-33.7-3.17-33.7-3.17,19.43-17.05,17.44-24.19S342.1,505.3,342.1,505.3Z" transform="translate(-35 -34.22)" fill="#efb7b9"/><circle cx="297.59" cy="452.05" r="24.19" fill="#efb7b9"/><path d="M342.46,523.18A24.56,24.56,0,0,0,332.29,515a36.38,36.38,0,0,0-7.23-1.78l-9.65-1.7c-2.36-.42-4.89-.81-7.09.16a11.62,11.62,0,0,0-3,2.21c-3.35,3.11-6.6,6.52-10.81,8.32-1.15.49-2.35.85-3.5,1.34-4.71,2-8.23,6.26-10.22,11-2.1,4.94-2.16,10.31-2,15.68a27.56,27.56,0,0,0,.55,5.52,35.57,35.57,0,0,0,1.83,5.06,92.57,92.57,0,0,1,3.34,10.73q3.75,14.35,6.24,29a10.87,10.87,0,0,0,1.21,4,14.36,14.36,0,0,0,3.34,3.21,20.86,20.86,0,0,1,2.79,2.77A3.62,3.62,0,0,1,299,612c.31,1.44-1,2.68-2,3.73a18.06,18.06,0,0,0-4.52,7.87,3.17,3.17,0,0,0-.72,2.17,3.8,3.8,0,0,1,.23,1.72,3.88,3.88,0,0,1-.91,1.41,5.33,5.33,0,0,0-1,4.28,67.89,67.89,0,0,0,23.68,5.54c2,.1,4,.1,6,.34,1.42.18,2.82.47,4.24.64a45.78,45.78,0,0,0,6.2.16c10.77-.22,21.85-.49,31.74-4.76.93-5.07-1.08-10.24-2.34-15.24-2-8-2.5-16.19-4-24.26-1-5.51-2.5-10.94-3.35-16.49s-1-11.3.48-16.7c1.35-4.78,1.76-9.66,3.16-14.43s2.38-9.94.8-14.66C354.69,527.48,348.62,522.85,342.46,523.18Z" transform="translate(-35 -34.22)" fill="#0f5d40"/><path d="M354.34,473.44c1.18-4.29-1.14-8.76-3.9-12.25-3-3.75-6.82-7.13-11.51-8.07-3.81-.77-7.76.16-11.64-.15-3.43-.27-6.73-1.51-10.14-2a32.12,32.12,0,0,0-9.28.35,35.25,35.25,0,0,0-8.45,2.36c-10.3,4.57-16.33,15.83-17.73,27s1.05,22.43,3.49,33.42l2.21,9.94c2.3,10.35,4.6,20.74,5.21,31.32s-.53,21.44-4.88,31.1a66.89,66.89,0,0,0,30.73-34.79c1.56-4.09,2.72-8.34,4.46-12.36,1.49-3.46,3.4-6.74,4.72-10.27a33.36,33.36,0,0,0,2.11-12.47c-.08-3.2-.61-6.38-.52-9.58s.91-6.53,3.12-8.85c2-2.05,4.75-3,7.28-4.33a30.31,30.31,0,0,0,10.19-8.5c1.59-2.08,1.68-3,2.08-5.36S353.72,475.71,354.34,473.44Z" transform="translate(-35 -34.22)" fill="#a26565"/><path d="M354.37,655.15c.25,2.49-.2,5,.34,7.47.41,1.84,1.36,3.5,1.92,5.3a25.2,25.2,0,0,1,.85,6.37c.08,1.8-.06,4-1.66,4.84-.7.37-1.54.37-2.27.69s-1.35,1.19-.93,1.87,1.14.57,1.8.7,1.37.81,1,1.36a1.14,1.14,0,0,1-.58.37,7.08,7.08,0,0,0-1.88.9,1.92,1.92,0,0,0-.77,1.83,1.13,1.13,0,0,0,1.61.74,5,5,0,0,0-.47,2c2.56,1.1,5.43-.34,7.83-1.73a29.49,29.49,0,0,0,3-1.92A15,15,0,0,0,370,673.17a29.79,29.79,0,0,0-.57-3.65,54.92,54.92,0,0,0-1.47-6.21c-.69-2.15-1.63-4.2-2.44-6.31-1.72-4.49-2.83-9.19-4.39-13.74a2.08,2.08,0,0,0-.75-1.19,2.11,2.11,0,0,0-1.11-.21,18.19,18.19,0,0,0-5.21.48c-1,.3-2.71,1-3.18,2s.28,1.84.73,2.67A22.38,22.38,0,0,1,354.37,655.15Z" transform="translate(-35 -34.22)" fill="#efb7b9"/><path d="M352.74,533.64a7.33,7.33,0,0,1,1.28,1.78c3.44,6.25,3.48,13.72,3.64,20.85.18,8,.62,16,1.06,24.05l1.31,24c.13,2.29.25,4.58.58,6.85,1.54.39,1.6,2.39,1.43,4-1.11,9.78-3.86,19.85-1,29.26a2.94,2.94,0,0,0,.67,1.3,7.81,7.81,0,0,0-4.47-.06c-1.43.3-2.81.83-4.25,1.16-1.82.41-3.88.59-5.12,2a99.24,99.24,0,0,1-3.35-12.92c-.68-4-.87-8.12-2.49-11.82-.65-1.49-1.53-2.87-2.33-4.3-4.19-7.48-6.25-15.93-8.26-24.27a35.43,35.43,0,0,1-.64-12.06,41.47,41.47,0,0,0,.5-5.55,42.64,42.64,0,0,0-.77-5.84,39.15,39.15,0,0,1,1.17-16.91c1.5-5.09,2.82-10.45,6-14.73S347.43,533.71,352.74,533.64Z" transform="translate(-35 -34.22)" opacity="0.1"/><path d="M353.93,532.84a7.39,7.39,0,0,1,1.28,1.79c3.44,6.24,3.48,13.72,3.64,20.85.18,8,.62,16,1.06,24l1.31,24c.13,2.29.25,4.58.58,6.85,1.54.39,1.6,2.39,1.42,4-1.1,9.78-3.85,19.84-1,29.26a2.94,2.94,0,0,0,.67,1.3,7.81,7.81,0,0,0-4.47-.06c-1.43.3-2.81.83-4.25,1.15-1.82.42-3.88.59-5.12,2A98.21,98.21,0,0,1,345.73,635c-.68-4-.87-8.11-2.49-11.81a48.28,48.28,0,0,0-2.33-4.3c-4.2-7.48-6.25-15.94-8.26-24.28a35.42,35.42,0,0,1-.64-12.06,26,26,0,0,0-.27-11.39,39.1,39.1,0,0,1,1.17-16.9c1.5-5.09,2.82-10.45,6-14.73S348.62,532.92,353.93,532.84Z" transform="translate(-35 -34.22)" fill="#0f5d40"/><g opacity="0.1"><path d="M350.44,461.19c-3-3.75-6.82-7.13-11.51-8.07-3.81-.77-7.76.16-11.64-.15-3.43-.27-6.73-1.51-10.14-2a32.12,32.12,0,0,0-9.28.35,35.25,35.25,0,0,0-8.45,2.36,25.09,25.09,0,0,0-4.17,2.37,35.56,35.56,0,0,1,7.47-2,32,32,0,0,1,9.27-.35c3.42.44,6.71,1.67,10.15,1.94,3.87.31,7.82-.61,11.64.15,4.69.94,8.53,4.33,11.5,8.08,2.77,3.48,5.08,7.95,3.91,12.25-.62,2.26-2.06,4.24-2.45,6.57s-.49,3.28-2.09,5.36a30.38,30.38,0,0,1-7.34,6.83c.77-.36,1.56-.72,2.31-1.11a30.31,30.31,0,0,0,10.19-8.5c1.59-2.08,1.68-3,2.08-5.36s1.83-4.3,2.45-6.57C355.52,469.15,353.2,464.68,350.44,461.19Z" transform="translate(-35 -34.22)"/><path d="M332.34,498.2a10,10,0,0,1,1.35-1.17c-2.31,1.12-4.74,2.1-6.51,4-2.21,2.31-3,5.65-3.12,8.85s.45,6.38.52,9.57a33.41,33.41,0,0,1-2.11,12.48c-1.32,3.53-3.23,6.8-4.72,10.27-1.73,4-2.89,8.26-4.45,12.35a67,67,0,0,1-25.41,31.62c-.06.13-.11.27-.17.4a66.89,66.89,0,0,0,30.73-34.79c1.56-4.09,2.72-8.34,4.46-12.36,1.49-3.46,3.4-6.74,4.72-10.27a33.36,33.36,0,0,0,2.11-12.47c-.08-3.2-.61-6.38-.52-9.58S330.13,500.52,332.34,498.2Z" transform="translate(-35 -34.22)"/></g></svg>
diff --git a/img/words.eps.jpg b/img/words.eps.jpg
index f197e6e..3685d4c 100644
--- a/img/words.eps.jpg
+++ b/img/words.eps.jpg
Binary files differ
diff --git a/index.html b/index.html
index e28a92c..ada644f 100644
--- a/index.html
+++ b/index.html
@@ -1,14 +1,22 @@
-<!DOCTYPE HTML>
-<html lang="en-US">
-  <head>
-    <meta charset="UTF-8">
-    <meta http-equiv="refresh" content="0; url=/users.html">
-    <script type="text/javascript">
-      window.location.href = '/users.html';
-    </script>
-    <title>Apache Milagro is core security infrastructure and crypto libraries for decentralized networks and distributed systems.</title>
-  </head>
-  <body>
-    If you are not redirected automatically, follow this <a href="/users.html">link</a>.
-  </body>
+<!doctype html>
+<html lang="en" dir="ltr" class="plugin-pages plugin-id-default">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">Apache Milagro</title><meta data-rh="true" property="og:title" content="Apache Milagro"><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/" hreflang="x-default"><script data-rh="true">function maybeInsertBanner(){window.__DOCUSAURUS_INSERT_BASEURL_BANNER&&insertBanner()}function insertBanner(){var n=document.getElementById("docusaurus-base-url-issue-banner-container");if(n){n.innerHTML='\n<div id="docusaurus-base-url-issue-banner" 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;">/</span>  (default value)</p>\n   <p>We suggest trying baseUrl = <span id="docusaurus-base-url-issue-banner-suggestion-container" style="font-weight: bold; color: green;"></span></p>\n</div>\n';var e=document.getElementById("docusaurus-base-url-issue-banner-suggestion-container"),s=window.location.pathname,r="/"===s.substr(-1)?s:s+"/";e.innerHTML=r}}window.__DOCUSAURUS_INSERT_BASEURL_BANNER=!0,document.addEventListener("DOMContentLoaded",maybeInsertBanner)</script><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
+
+
+
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div id="docusaurus-base-url-issue-banner-container"></div><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><div class="mainContainer" style="display:flex;align-items:center;height:60vh;justify-content:center"><div padding="bottom,top"><div class="showcaseSection" style="display:flex;align-items:center;justify-content:center"><div class="prose" style="align-items:center;justify-content:center;margin:auto"><img src="images/milagro_logo.svg" alt="Apache Milagro logo" style="margin:auto;align-items:center;display:flex"><br><br><br><br><p>Core security infrastructure for decentralized networks and distributed systems</p></div><p> </p></div></div></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
 </html>
\ No newline at end of file
diff --git a/index.js-old/index.html b/index.js-old/index.html
index 7bc25cd..f8d3a4d 100644
--- a/index.js-old/index.html
+++ b/index.js-old/index.html
@@ -1,10 +1,22 @@
-<!DOCTYPE html><html lang=""><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Apache Milagro · Core security infrastructure for decentralized networks</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Core security infrastructure for decentralized networks"/><meta property="og:title" content="Apache Milagro · Core security infrastructure for decentralized networks"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="Core security infrastructure for decentralized networks"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class=""><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class=""><a href="/docs/support" target="_self">Support</a></li><li class=""><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class=""><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div><div class="homeContainer"><div class="homeSplashFade"><div class="wrapper homeWrapper"><div class="projectLogo"><img src="/img/undraw_monitor.svg" alt="Project Logo"/></div><div class="inner"><h2 class="projectTitle">Apache Milagro<small>Core security infrastructure for decentralized networks</small></h2></div></div></div></div><div class="mainContainer"><div class="container paddingBottom paddingTop"><div class="wrapper"><div class="gridBlock"><div class="blockElement alignCenter fourByGridBlock imageAlignTop"><div class="blockImage"><img src="/img/undraw_react.svg"/></div><div class="blockContent"><h2><div><span><p>Zero-knowledge proof multi-factor authentication</p>
-</span></div></h2><div><span><p>This is the content of my feature</p>
-</span></div></div></div><div class="blockElement alignCenter fourByGridBlock imageAlignTop"><div class="blockImage"><img src="/img/undraw_operating_system.svg"/></div><div class="blockContent"><h2><div><span><p>Decentralized custody of digital assets</p>
-</span></div></h2><div><span><p>The content of my second feature</p>
-</span></div></div></div></div></div></div><div class="productShowcaseSection paddingBottom" style="text-align:center"><h2>Milagro Server</h2><div><span><p>These are features of this project</p>
-</span></div></div><div class="container lightBackground paddingBottom paddingTop"><div class="wrapper"><div class="gridBlock"><div class="blockElement alignCenter imageAlignSide imageAlignRight twoByGridBlock"><div class="blockContent"><h2><div><span><p>Randomly Generated Theme Colors</p>
-</span></div></h2><div><span><p>Each new Docusaurus project has <strong>randomly-generated</strong> theme colors.</p>
-</span></div></div><div class="blockImage"><img src="/img/undraw_youtube_tutorial.svg"/></div></div></div></div></div><div class="container paddingBottom paddingTop" id="try"><div class="wrapper"><div class="gridBlock"><div class="blockElement alignCenter imageAlignSide imageAlignLeft twoByGridBlock"><div class="blockImage"><img src="/img/undraw_code_review.svg"/></div><div class="blockContent"><h2><div><span><p>Wonderful SVG Illustrations</p>
-</span></div></h2><div><span><p>To make your landing page more attractive, use illustrations! Check out <a href="https://undraw.co/"><strong>unDraw</strong></a> which provides you with customizable illustrations which are free to use. The illustrations you see on this page are from unDraw.</p>
-</span></div></div></div></div></div></div></div></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<!doctype html>
+<html lang="en" dir="ltr" class="plugin-pages plugin-id-default">
+<head>
+<meta charset="UTF-8">
+<meta name="generator" content="Docusaurus v2.2.0">
+<title data-rh="true">Apache Milagro</title><meta data-rh="true" property="og:title" content="Apache Milagro"><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://milagro.apache.org/index.js-old"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://milagro.apache.org/index.js-old"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/index.js-old" hreflang="en"><link data-rh="true" rel="alternate" href="https://milagro.apache.org/index.js-old" hreflang="x-default"><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="Apache Milagro RSS Feed">
+<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="Apache Milagro Atom Feed">
+
+
+
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css" integrity="sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM" crossorigin="anonymous">
+<script src="https://buttons.github.io/buttons.js"></script><link rel="stylesheet" href="/assets/css/styles.e187d088.css">
+<link rel="preload" href="/assets/js/runtime~main.2c187651.js" as="script">
+<link rel="preload" href="/assets/js/main.98efe6b5.js" as="script">
+</head>
+<body class="navigation-with-keyboard">
+<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
+<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--light_HNdA"><img src="/img/milagro.svg" alt="" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">Apache Milagro</b></a><a class="navbar__item navbar__link" href="/docs/milagro-intro">Docs</a><a class="navbar__item navbar__link" href="/docs/support">Support</a><a class="navbar__item navbar__link" href="/docs/contributor-guide">Contributing</a><a class="navbar__item navbar__link" href="/docs/downloads">Downloads</a></div><div class="navbar__items navbar__items--right"><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)" aria-live="polite"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_pyhR"><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"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_wfgR"><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"></path></svg></button></div><div class="searchBox_ZlJk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0"><div><div class="homeContainer"><div class="homeSplashFade"><div class="wrapper homeWrapper"><div class="projectLogo"><img src="/img/undraw_monitor.svg" alt="Project Logo"></div><div class="inner"><h2 class="projectTitle">Apache Milagro<small>Core security infrastructure for decentralized networks</small></h2></div></div></div></div><div class="mainContainer"><div padding="bottom,top"><div align="center" contents="[object Object],[object Object]" layout="fourColumn"></div></div><div class="productShowcaseSection paddingBottom" style="text-align:center"><h2>Milagro Server</h2><div>These are features of this project</div></div><div padding="bottom,top" background="light"><div align="center" contents="[object Object]"></div></div><div padding="bottom,top" id="try"><div align="center" contents="[object Object]"></div></div></div></div></div><footer class="footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--light_HNdA footer__logo"><img src="/img/milagro.svg" class="themedImage_ToTc themedImage--dark_i4oU footer__logo"></div><div class="footer__copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</div></div></div></footer></div>
+<script src="/assets/js/runtime~main.2c187651.js"></script>
+<script src="/assets/js/main.98efe6b5.js"></script>
+</body>
+</html>
\ No newline at end of file
diff --git a/mpcdocs/bdwn.png b/mpcdocs/bdwn.png
index f23272a..940a0b9 100644
--- a/mpcdocs/bdwn.png
+++ b/mpcdocs/bdwn.png
Binary files differ
diff --git a/mpcdocs/closed.png b/mpcdocs/closed.png
index 39c7e41..98cc2c9 100644
--- a/mpcdocs/closed.png
+++ b/mpcdocs/closed.png
Binary files differ
diff --git a/mpcdocs/doc.png b/mpcdocs/doc.png
index 12aa850..17edabf 100644
--- a/mpcdocs/doc.png
+++ b/mpcdocs/doc.png
Binary files differ
diff --git a/mpcdocs/doxygen.svg b/mpcdocs/doxygen.svg
index ff148af..d42dad5 100644
--- a/mpcdocs/doxygen.svg
+++ b/mpcdocs/doxygen.svg
@@ -1 +1,26 @@
-<svg viewBox="0 0 104 31" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><linearGradient id="a"><stop stop-color="#5373B4" offset="0"/><stop stop-color="#7C95C6" offset="1"/></linearGradient><linearGradient id="c" x1="31.474" x2="31.474" y1="24.821" y2="26.773" gradientUnits="userSpaceOnUse" xlink:href="#a"/><linearGradient id="f" x1="31.474" x2="31.474" y1="24.821" y2="26.773" gradientTransform="matrix(.6816 0 0 1.0248 72.391 -.918)" gradientUnits="userSpaceOnUse" xlink:href="#a"/><linearGradient id="e" x1="56.295" x2="56.295" y1="24.622" y2="26.574" gradientUnits="userSpaceOnUse" xlink:href="#a"/><linearGradient id="d" x1="49.067" x2="48.956" y1="19.719" y2="9.523" gradientTransform="matrix(.97968 0 0 1.0207 -.256 -.256)" gradientUnits="userSpaceOnUse"><stop stop-color="#C0CCE3" offset="0"/><stop stop-color="#EEF1F7" offset="1"/></linearGradient><filter id="b" x="-.011" y="-.045" width="1.021" height="1.091" color-interpolation-filters="sRGB"><feGaussianBlur stdDeviation=".453"/></filter></defs><path transform="translate(-2.576 -27.848)" d="M13.609 32.203v6.863h-.05a3.82 3.82 0 00-1.673-1.506 4.802 4.802 0 00-2.205-.527c-.962 0-1.807.203-2.533.607a5.478 5.478 0 00-1.824 1.557c-.473.651-.835 1.41-1.088 2.272a9.74 9.74 0 00-.356 2.638c0 .95.12 1.865.356 2.744a8 8 0 001.088 2.35 5.557 5.557 0 001.85 1.611c.743.387 1.604.58 2.583.58.862 0 1.632-.158 2.307-.474.692-.335 1.25-.873 1.672-1.612h.05v1.743h3.42V32.203zm12.875 4.83c-1.03 0-1.96.176-2.787.527a5.887 5.887 0 00-2.127 1.454c-.591.615-1.048 1.372-1.37 2.269-.32.88-.48 1.866-.48 2.957s.16 2.075.48 2.955a6.62 6.62 0 001.37 2.27 6.048 6.048 0 002.127 1.425c.827.335 1.757.502 2.787.502s1.96-.167 2.787-.502a6 6 0 002.152-1.425 6.593 6.593 0 001.37-2.27c.32-.88.48-1.864.48-2.955s-.16-2.077-.48-2.957c-.321-.897-.779-1.654-1.37-2.27a5.84 5.84 0 00-2.152-1.453c-.827-.351-1.757-.527-2.787-.527zm41.715 0c-.912 0-1.722.185-2.432.555-.692.37-1.275.87-1.748 1.504a6.771 6.771 0 00-1.09 2.164 8.999 8.999 0 00-.353 2.535c0 .933.1 1.821.303 2.666a6.61 6.61 0 001.014 2.19 5.033 5.033 0 001.748 1.478c.709.352 1.553.53 2.533.53a5.22 5.22 0 002.254-.503 3.685 3.685 0 001.672-1.611h.05v1.795c.017.968-.21 1.769-.683 2.402-.456.634-1.19.951-2.203.951-.642 0-1.208-.142-1.698-.423-.49-.264-.82-.748-.988-1.452h-3.572c.05.775.252 1.435.607 1.98.372.564.829 1.02 1.37 1.372a6.034 6.034 0 001.823.766 7.816 7.816 0 001.975.265c1.503 0 2.703-.212 3.598-.635.895-.422 1.58-.94 2.052-1.556.473-.598.777-1.25.913-1.953.152-.704.226-1.33.226-1.875V37.403h-3.42v1.822h-.05c-.44-.792-.988-1.355-1.647-1.69-.642-.334-1.393-.501-2.254-.501zm16.523 0c-.996 0-1.909.185-2.736.555a6.39 6.39 0 00-2.104 1.531c-.59.633-1.046 1.39-1.367 2.27s-.48 1.83-.48 2.851c0 1.056.15 2.023.455 2.902a6.8 6.8 0 001.341 2.27 5.93 5.93 0 002.104 1.478c.827.335 1.757.502 2.787.502 1.486 0 2.752-.352 3.799-1.056 1.047-.704 1.825-1.874 2.332-3.51h-3.168c-.118.422-.44.828-.963 1.215-.524.37-1.147.552-1.873.552-1.013 0-1.792-.272-2.332-.818-.54-.545-.836-1.424-.887-2.639h9.45a10.023 10.023 0 00-.253-3.035 7.436 7.436 0 00-1.166-2.586 5.654 5.654 0 00-2.027-1.795c-.827-.457-1.797-.687-2.912-.687zm16.189 0a4.86 4.86 0 00-2.228.555c-.727.352-1.318.923-1.774 1.715h-.076v-1.9h-3.42v13.645h3.598v-7.152c0-1.39.219-2.384.658-2.983.439-.615 1.15-.923 2.129-.923.861 0 1.46.28 1.799.843.337.546.505 1.382.505 2.508v7.707h3.598v-8.392c0-.845-.076-1.611-.228-2.297-.136-.704-.38-1.293-.735-1.768-.354-.493-.844-.873-1.469-1.137-.608-.281-1.394-.421-2.357-.421zm-66.063.37l4.307 6.466-4.713 7.18h4.029l2.736-4.303 2.735 4.303h4.105l-4.84-7.258 4.307-6.389h-3.977l-2.279 3.565-2.306-3.565zm13.275 0l4.584 12.802c.101.264.152.545.152.844 0 .405-.117.775-.353 1.11-.22.334-.566.527-1.04.58-.354.017-.71.01-1.064-.026l-1.039-.105v3.088c.372.035.735.06 1.09.078.371.035.744.052 1.115.052 1.233 0 2.194-.237 2.887-.713.692-.475 1.232-1.266 1.62-2.375l5.474-15.336h-3.725l-2.861 9.344h-.051l-2.965-9.344zm-37.48 2.454c.591 0 1.082.123 1.47.37.39.246.7.571.936.976.254.387.432.845.533 1.373.102.51.153 1.048.153 1.611s-.051 1.107-.153 1.635a4.72 4.72 0 01-.507 1.426c-.237.405-.556.73-.961.977-.389.246-.88.369-1.471.369-.557 0-1.038-.123-1.443-.37a3.64 3.64 0 01-.989-1.001c-.253-.423-.438-.898-.556-1.426s-.178-1.056-.178-1.584c0-.563.051-1.1.152-1.61.119-.528.295-.995.532-1.4.253-.405.582-.73.988-.977.405-.246.903-.369 1.494-.369zm15.84 0c.608 0 1.114.133 1.52.397.422.246.751.572.988.976.253.405.43.87.531 1.399a8.535 8.535 0 010 3.22c-.101.51-.278.977-.531 1.399a2.69 2.69 0 01-.988.976c-.406.247-.912.37-1.52.37s-1.114-.123-1.52-.37-.734-.571-.988-.976a4.727 4.727 0 01-.508-1.399 8.535 8.535 0 010-3.22 4.39 4.39 0 01.508-1.399c.254-.404.583-.73.988-.976.406-.264.912-.397 1.52-.397zm42.602 0c.591 0 1.08.115 1.469.344.388.229.7.537.937.924.237.387.407.835.508 1.346.101.492.15 1.02.15 1.584 0 .492-.066.968-.2 1.425-.119.44-.306.836-.56 1.188a2.84 2.84 0 01-.962.844 2.764 2.764 0 01-1.342.318c-.557 0-1.02-.125-1.393-.371a3 3 0 01-.912-.95 4.51 4.51 0 01-.482-1.292 8.74 8.74 0 01-.127-1.479c0-.51.051-.993.152-1.451.119-.475.297-.89.534-1.242.253-.37.557-.66.912-.871.371-.211.81-.317 1.316-.317zm15.535 0c.878 0 1.529.248 1.951.74.44.493.743 1.214.912 2.165H81.63c.017-.264.068-.564.152-.899.101-.334.263-.65.483-.949.236-.3.54-.547.912-.74.388-.211.869-.317 1.443-.317z" filter="url(#b)" opacity=".3" stroke="#969696" xlink:href="#path141"/><path d="M.972 24.161l43.605-.002.05 3.306-43.6.042z" fill="url(#c)" stroke="#000" stroke-width=".5"/><path d="M10.283 3.555v6.863h-.05A3.82 3.82 0 008.56 8.912a4.802 4.802 0 00-2.205-.527c-.962 0-1.807.202-2.533.607a5.478 5.478 0 00-1.824 1.557c-.473.65-.835 1.409-1.088 2.271a9.74 9.74 0 00-.356 2.639c0 .95.12 1.864.356 2.744.253.88.615 1.663 1.088 2.35a5.557 5.557 0 001.85 1.611c.743.387 1.604.58 2.583.58.862 0 1.632-.158 2.307-.475.692-.334 1.25-.872 1.672-1.61h.05V22.4h3.42V3.554zm12.875 4.83c-1.03 0-1.96.175-2.787.527a5.887 5.887 0 00-2.127 1.453c-.591.616-1.048 1.372-1.37 2.27-.32.88-.48 1.866-.48 2.957s.16 2.075.48 2.955a6.62 6.62 0 001.37 2.27 6.048 6.048 0 002.127 1.425c.827.334 1.757.502 2.787.502s1.96-.168 2.787-.502a6 6 0 002.152-1.426 6.593 6.593 0 001.37-2.27c.32-.879.48-1.863.48-2.954s-.16-2.077-.48-2.957c-.321-.898-.779-1.654-1.37-2.27a5.84 5.84 0 00-2.152-1.453c-.827-.352-1.757-.527-2.787-.527zm41.715 0c-.912 0-1.722.185-2.432.554-.692.37-1.275.87-1.748 1.504a6.771 6.771 0 00-1.09 2.164 9 9 0 00-.353 2.536c0 .932.1 1.821.303 2.666a6.61 6.61 0 001.014 2.19 5.033 5.033 0 001.748 1.478c.709.352 1.553.529 2.533.529a5.22 5.22 0 002.254-.502 3.685 3.685 0 001.672-1.611h.05v1.795c.017.967-.21 1.769-.683 2.402-.456.633-1.19.951-2.203.951-.642 0-1.208-.142-1.698-.424-.49-.264-.82-.747-.988-1.45H59.68c.05.773.252 1.434.607 1.98a4.694 4.694 0 001.37 1.37 6.034 6.034 0 001.823.766 7.816 7.816 0 001.975.266c1.503 0 2.703-.213 3.598-.635.895-.422 1.58-.94 2.052-1.556.473-.599.777-1.25.913-1.954.152-.703.226-1.33.226-1.875V8.754h-3.42v1.823h-.05c-.44-.792-.988-1.355-1.647-1.69-.642-.334-1.393-.502-2.254-.502zm16.523 0c-.996 0-1.909.185-2.736.554a6.39 6.39 0 00-2.104 1.532c-.59.633-1.046 1.39-1.367 2.27s-.48 1.83-.48 2.85c0 1.057.15 2.023.455 2.903a6.8 6.8 0 001.341 2.27 5.93 5.93 0 002.104 1.478c.827.334 1.757.502 2.787.502 1.486 0 2.752-.353 3.799-1.057 1.047-.703 1.825-1.873 2.332-3.51h-3.168c-.118.423-.44.828-.963 1.215-.524.37-1.147.553-1.873.553-1.013 0-1.792-.273-2.332-.818-.54-.546-.836-1.425-.887-2.639h9.45a10.023 10.023 0 00-.253-3.035 7.436 7.436 0 00-1.166-2.586 5.654 5.654 0 00-2.027-1.795c-.827-.457-1.797-.687-2.912-.687zm16.189 0a4.86 4.86 0 00-2.228.554c-.727.352-1.318.923-1.774 1.715h-.076v-1.9h-3.42V22.4h3.598v-7.152c0-1.39.219-2.385.658-2.983.439-.616 1.15-.924 2.129-.924.861 0 1.46.281 1.799.844.337.546.505 1.382.505 2.508V22.4h3.598v-8.393c0-.844-.076-1.61-.228-2.297-.135-.703-.38-1.292-.735-1.767-.354-.493-.844-.873-1.468-1.137-.608-.281-1.395-.422-2.358-.422zm-66.062.369l4.307 6.467-4.713 7.18h4.029l2.736-4.303 2.735 4.302h4.105l-4.84-7.257 4.307-6.39h-3.977l-2.279 3.565-2.306-3.564zm13.275 0l4.584 12.803c.101.264.152.545.152.844 0 .404-.117.775-.353 1.11-.22.333-.566.526-1.04.58-.354.017-.71.009-1.064-.026-.354-.035-.701-.07-1.039-.106v3.088c.372.035.735.06 1.09.078.371.036.744.053 1.115.053 1.233 0 2.194-.238 2.887-.713.692-.475 1.232-1.266 1.62-2.375l5.474-15.336h-3.725l-2.861 9.344h-.051l-2.965-9.344zm-37.48 2.455c.591 0 1.082.123 1.47.37s.7.571.936.976c.254.387.432.845.533 1.373.102.51.153 1.048.153 1.611s-.051 1.107-.153 1.635A4.72 4.72 0 019.75 18.6c-.237.404-.556.73-.961.976-.389.247-.88.37-1.471.37-.557 0-1.038-.123-1.443-.37a3.64 3.64 0 01-.989-1.002c-.253-.422-.438-.898-.556-1.426s-.178-1.056-.178-1.584c0-.563.051-1.099.152-1.609.119-.528.295-.996.532-1.4.253-.405.582-.73.988-.977.405-.246.903-.37 1.494-.37zm15.84 0c.608 0 1.114.133 1.52.397.422.246.751.571.988.976.253.405.43.87.531 1.398a8.535 8.535 0 010 3.221c-.101.51-.278.976-.531 1.399a2.69 2.69 0 01-.988.976c-.406.246-.912.37-1.52.37s-1.114-.124-1.52-.37-.734-.572-.988-.976a4.727 4.727 0 01-.508-1.399 8.535 8.535 0 010-3.22 4.39 4.39 0 01.508-1.399c.254-.405.583-.73.989-.976.405-.264.911-.397 1.519-.397zm42.602 0c.591 0 1.08.115 1.469.344.388.229.7.536.937.924.237.387.407.835.508 1.345a7.89 7.89 0 01.15 1.584c0 .493-.066.969-.2 1.426-.119.44-.306.836-.56 1.188a2.84 2.84 0 01-.962.843 2.764 2.764 0 01-1.342.319c-.557 0-1.02-.125-1.393-.371a3 3 0 01-.912-.95 4.51 4.51 0 01-.482-1.293 8.74 8.74 0 01-.127-1.478c0-.51.051-.994.152-1.451.119-.475.297-.89.534-1.242.253-.37.557-.66.912-.872.371-.21.81-.316 1.316-.316zm15.535 0c.878 0 1.529.248 1.951.74.44.493.743 1.214.912 2.164h-5.853c.017-.264.068-.564.152-.898.101-.334.263-.65.483-.95.236-.298.54-.546.912-.74.388-.21.869-.316 1.443-.316z" fill="url(#d)" stroke="#4665A2" stroke-width=".7"/><path d="M52.988 27.291c.996-1.036 1.394-1.873 1.793-3.108l3.825-.04c.31 1.61.824 2.514 1.633 3.148z" fill="url(#e)" stroke="#000" stroke-width=".5"/><path d="M73.89 24.04l28.885-.201-.125 3.388-31.033.162c1.262-1.023 1.967-2.286 2.273-3.349z" fill="url(#f)" stroke="#000" stroke-width=".418"/></svg>
\ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<svg version="1.1" viewBox="0 0 104 31" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+  <linearGradient id="a">
+   <stop stop-color="#5373B4" offset="0"/>
+   <stop stop-color="#7C95C6" offset="1"/>
+  </linearGradient>
+  <linearGradient id="d" x1="31.474" x2="31.474" y1="24.821" y2="26.773" gradientUnits="userSpaceOnUse" xlink:href="#a"/>
+  <linearGradient id="c" x1="31.474" x2="31.474" y1="24.821" y2="26.773" gradientTransform="matrix(.6816 0 0 1.0248 72.391 -.91809)" gradientUnits="userSpaceOnUse" xlink:href="#a"/>
+  <linearGradient id="b" x1="56.295" x2="56.295" y1="24.622" y2="26.574" gradientUnits="userSpaceOnUse" xlink:href="#a"/>
+  <linearGradient id="e" x1="49.067" x2="48.956" y1="19.719" y2="9.5227" gradientTransform="matrix(.97968 0 0 1.0207 -.25579 -.25579)" gradientUnits="userSpaceOnUse">
+   <stop stop-color="#C0CCE3" offset="0"/>
+   <stop stop-color="#EEF1F7" offset="1"/>
+  </linearGradient>
+  <filter id="f" x="-.010676" y="-.045304" width="1.0214" height="1.0906" color-interpolation-filters="sRGB">
+   <feGaussianBlur stdDeviation="0.45293203"/>
+  </filter>
+ </defs>
+ <g>
+  <path transform="translate(-2.5759 -27.848)" d="m13.609 32.203v6.8633h-0.05078c-0.40533-0.66867-0.96254-1.1715-1.6719-1.5059-0.69244-0.35193-1.4282-0.52734-2.2051-0.52734-0.96267 0-1.807 0.2027-2.5332 0.60742-0.72622 0.38713-1.3344 0.90556-1.8242 1.5566-0.47289 0.65108-0.83456 1.4092-1.0879 2.2715-0.23644 0.84464-0.35547 1.7236-0.35547 2.6387 0 0.95022 0.11902 1.8643 0.35547 2.7441 0.25333 0.87983 0.615 1.6633 1.0879 2.3496 0.48978 0.66867 1.1065 1.2066 1.8496 1.6113 0.74311 0.38713 1.6044 0.58008 2.584 0.58008 0.86133 0 1.6311-0.15787 2.3066-0.47461 0.69244-0.33434 1.2497-0.87227 1.6719-1.6113h0.05078v1.7422h3.4199v-18.846zm12.875 4.8301c-1.0302 0-1.9596 0.17541-2.7871 0.52734-0.82756 0.33434-1.5358 0.81965-2.127 1.4531-0.59111 0.61588-1.0483 1.3721-1.3691 2.2695-0.32089 0.87983-0.48047 1.866-0.48047 2.957s0.15958 2.0752 0.48047 2.9551c0.32089 0.87983 0.77803 1.6361 1.3691 2.2695 0.59111 0.61588 1.2994 1.0914 2.127 1.4258 0.82756 0.33434 1.7569 0.50195 2.7871 0.50195 1.0302 0 1.9596-0.16762 2.7871-0.50195 0.84444-0.33434 1.5612-0.8099 2.1523-1.4258 0.59111-0.63348 1.0483-1.3897 1.3691-2.2695 0.32089-0.87983 0.48047-1.8641 0.48047-2.9551s-0.15958-2.0772-0.48047-2.957c-0.32089-0.89743-0.77803-1.6536-1.3691-2.2695-0.59111-0.63348-1.3079-1.1188-2.1523-1.4531-0.82756-0.35193-1.7569-0.52734-2.7871-0.52734zm41.715 0c-0.912 0-1.7223 0.18516-2.4316 0.55469-0.69244 0.36953-1.2752 0.87043-1.748 1.5039-0.47289 0.61588-0.83651 1.337-1.0898 2.1641-0.23645 0.80944-0.35352 1.6553-0.35352 2.5352 0 0.93262 0.10007 1.8214 0.30273 2.666 0.21956 0.82704 0.55767 1.556 1.0137 2.1895 0.456 0.61588 1.0387 1.109 1.748 1.4785 0.70933 0.35193 1.5536 0.5293 2.5332 0.5293 0.79378 0 1.5446-0.16762 2.2539-0.50195 0.72622-0.35193 1.2834-0.88986 1.6719-1.6113h0.05078v1.7949c0.01689 0.96782-0.21071 1.7689-0.68359 2.4023-0.456 0.63348-1.1898 0.95117-2.2031 0.95117-0.64178 0-1.2075-0.14228-1.6973-0.42383-0.48978-0.26395-0.81939-0.74731-0.98828-1.4512h-3.5723c0.05067 0.77425 0.25276 1.435 0.60742 1.9805 0.37156 0.56309 0.8287 1.0192 1.3691 1.3711 0.55733 0.35193 1.1656 0.60726 1.8242 0.76562 0.67556 0.17597 1.3328 0.26562 1.9746 0.26562 1.5031 0 2.7025-0.21245 3.5977-0.63477 0.89511-0.42232 1.5798-0.94076 2.0527-1.5566 0.47289-0.59829 0.777-1.2493 0.91211-1.9531 0.152-0.70386 0.22656-1.3295 0.22656-1.875v-12.775h-3.4199v1.8223h-0.05078c-0.43911-0.79185-0.98782-1.3551-1.6465-1.6895-0.64178-0.33434-1.3926-0.50195-2.2539-0.50195zm16.523 0c-0.99644 0-1.9088 0.18516-2.7363 0.55469-0.81067 0.36953-1.5124 0.88018-2.1035 1.5312-0.59111 0.63348-1.0463 1.3897-1.3672 2.2695s-0.48047 1.831-0.48047 2.8516c0 1.0558 0.15108 2.0225 0.45508 2.9023 0.32089 0.87983 0.76758 1.6361 1.3418 2.2695 0.57422 0.63348 1.276 1.1266 2.1035 1.4785 0.82756 0.33434 1.7569 0.50195 2.7871 0.50195 1.4862 0 2.7517-0.35277 3.7988-1.0566 1.0471-0.70387 1.8254-1.8733 2.332-3.5098h-3.168c-0.11822 0.42232-0.43934 0.82772-0.96289 1.2148-0.52355 0.36953-1.1468 0.55274-1.873 0.55273-1.0133 0-1.7916-0.27286-2.332-0.81836-0.54044-0.5455-0.83605-1.4245-0.88672-2.6387h9.4492c0.06756-1.0558-0.01551-2.0673-0.25195-3.0352-0.23644-0.96782-0.62557-1.8293-1.166-2.5859-0.52356-0.75666-1.1998-1.355-2.0273-1.7949-0.82756-0.45751-1.7974-0.6875-2.9121-0.6875zm16.189 0c-0.76 0-1.5023 0.18516-2.2285 0.55469-0.72622 0.35193-1.3174 0.92299-1.7734 1.7148h-0.07617v-1.9004h-3.4199v13.646h3.5977v-7.1523c0-1.3901 0.21909-2.3841 0.6582-2.9824 0.43911-0.61588 1.1494-0.92383 2.1289-0.92383 0.86133 0 1.4611 0.28066 1.7988 0.84375 0.33777 0.5455 0.50586 1.3816 0.50586 2.5078v7.707h3.5976v-8.3926c0-0.84464-0.0765-1.6106-0.22851-2.2969-0.13511-0.70387-0.37971-1.2925-0.73438-1.7676-0.35466-0.49271-0.84386-0.87277-1.4688-1.1367-0.608-0.28155-1.3948-0.42188-2.3574-0.42188zm-66.063 0.36914 4.3066 6.4668-4.7129 7.1797h4.0293l2.7363-4.3027 2.7344 4.3027h4.1055l-4.8398-7.2578 4.3066-6.3887h-3.9766l-2.2793 3.5645-2.3066-3.5645zm13.275 0 4.584 12.803c0.10133 0.26395 0.15234 0.54461 0.15234 0.84375 0 0.40472-0.11707 0.77504-0.35352 1.1094-0.21956 0.33434-0.56617 0.52729-1.0391 0.58008-0.35467 0.0176-0.70979 0.0098-1.0645-0.02539-0.35467-0.03519-0.70128-0.07028-1.0391-0.10547v3.0879c0.37156 0.03519 0.73518 0.06051 1.0898 0.07813 0.37156 0.03519 0.74368 0.05273 1.1152 0.05273 1.2329 0 2.1943-0.23778 2.8867-0.71289 0.69244-0.47511 1.2326-1.2664 1.6211-2.375l5.4727-15.336h-3.7246l-2.8613 9.3438h-0.05078l-2.9648-9.3438zm-37.48 2.4551c0.59111 0 1.0823 0.12279 1.4707 0.36914 0.38844 0.24635 0.6991 0.57184 0.93555 0.97656 0.25333 0.38713 0.43187 0.84515 0.5332 1.373 0.10133 0.5103 0.15234 1.0482 0.15234 1.6113 0 0.56309-0.05101 1.1069-0.15234 1.6348-0.10133 0.5279-0.27137 1.0035-0.50781 1.4258-0.23644 0.40472-0.5556 0.73021-0.96094 0.97656-0.38844 0.24635-0.87959 0.36914-1.4707 0.36914-0.55733 0-1.038-0.12279-1.4434-0.36914-0.38844-0.26395-0.71806-0.59723-0.98828-1.002-0.25333-0.42232-0.43842-0.89788-0.55664-1.4258s-0.17773-1.0561-0.17773-1.584c-1e-7 -0.56309 0.05101-1.0991 0.15234-1.6094 0.11822-0.5279 0.29481-0.99567 0.53125-1.4004 0.25333-0.40472 0.58295-0.73021 0.98828-0.97656 0.40533-0.24635 0.90303-0.36914 1.4941-0.36914zm15.84 0c0.608 0 1.1142 0.13253 1.5195 0.39648 0.42222 0.24635 0.75184 0.57184 0.98828 0.97656 0.25333 0.40472 0.42992 0.87054 0.53125 1.3984 0.10133 0.5279 0.15234 1.0658 0.15234 1.6113 0 0.5455-0.05101 1.0815-0.15234 1.6094-0.10134 0.5103-0.27792 0.97612-0.53125 1.3984-0.23644 0.40472-0.56606 0.73021-0.98828 0.97656-0.40533 0.24635-0.91153 0.36914-1.5195 0.36914-0.608 0-1.1142-0.12279-1.5195-0.36914s-0.73495-0.57184-0.98828-0.97656c-0.23644-0.42232-0.40648-0.88814-0.50781-1.3984-0.10133-0.5279-0.15234-1.0639-0.15234-1.6094 0-0.5455 0.05101-1.0834 0.15234-1.6113 0.10133-0.5279 0.27137-0.99371 0.50781-1.3984 0.25333-0.40472 0.58295-0.73021 0.98828-0.97656 0.40533-0.26395 0.91153-0.39648 1.5195-0.39648zm42.602 0c0.59111 0 1.0803 0.11499 1.4688 0.34375 0.38844 0.22876 0.70105 0.5367 0.9375 0.92383 0.23644 0.38713 0.40648 0.8354 0.50781 1.3457 0.10133 0.49271 0.15039 1.0209 0.15039 1.584 0 0.4927-0.06606 0.96827-0.20117 1.4258-0.11822 0.43992-0.30526 0.83557-0.55859 1.1875-0.25333 0.35193-0.57445 0.63259-0.96289 0.84375-0.38844 0.21116-0.83513 0.31836-1.3418 0.31836-0.55733 0-1.021-0.12474-1.3926-0.37109-0.37156-0.24635-0.67566-0.56209-0.91211-0.94922-0.21956-0.38713-0.38109-0.81786-0.48242-1.293-0.08444-0.49271-0.12695-0.98581-0.12695-1.4785 0-0.5103 0.05101-0.99366 0.15234-1.4512 0.11822-0.47511 0.29676-0.89025 0.5332-1.2422 0.25333-0.36953 0.55744-0.65993 0.91211-0.87109 0.37156-0.21116 0.80974-0.31641 1.3164-0.31641zm15.535 0c0.87822 0 1.529 0.24753 1.9512 0.74023 0.43911 0.49271 0.74322 1.2138 0.91211 2.1641h-5.8535c0.01689-0.26395 0.0679-0.5641 0.15234-0.89844 0.10133-0.33434 0.26287-0.65008 0.48242-0.94922 0.23644-0.29914 0.54055-0.54667 0.91211-0.74023 0.38845-0.21116 0.86914-0.31641 1.4434-0.31641z" filter="url(#f)" opacity=".3" stroke="#969696" xlink:href="#path141"/>
+  <path d="m0.97202 24.161 43.605-0.0019 0.0508 3.3061-43.6 0.04174z" fill="url(#d)" stroke="#000" stroke-width=".5"/>
+  <path d="m10.283 3.5547v6.8633h-0.05078c-0.40533-0.66867-0.96254-1.1715-1.6719-1.5059-0.69244-0.35193-1.4282-0.52734-2.2051-0.52734-0.96267 0-1.807 0.2027-2.5332 0.60742-0.72622 0.38713-1.3344 0.90556-1.8242 1.5566-0.47289 0.65108-0.83456 1.4092-1.0879 2.2715-0.23644 0.84464-0.35547 1.7236-0.35547 2.6387 0 0.95022 0.11902 1.8643 0.35547 2.7441 0.25333 0.87983 0.615 1.6633 1.0879 2.3496 0.48978 0.66867 1.1065 1.2066 1.8496 1.6113 0.74311 0.38713 1.6044 0.58008 2.584 0.58008 0.86133 0 1.6311-0.15787 2.3066-0.47461 0.69244-0.33434 1.2497-0.87227 1.6719-1.6113h0.05078v1.7422h3.4199v-18.846zm12.875 4.8301c-1.0302 0-1.9596 0.17541-2.7871 0.52734-0.82756 0.33434-1.5358 0.81965-2.127 1.4531-0.59111 0.61588-1.0483 1.3721-1.3691 2.2695-0.32089 0.87983-0.48047 1.866-0.48047 2.957s0.15958 2.0752 0.48047 2.9551c0.32089 0.87983 0.77803 1.6361 1.3691 2.2695 0.59111 0.61588 1.2994 1.0914 2.127 1.4258 0.82756 0.33434 1.7569 0.50195 2.7871 0.50195 1.0302 0 1.9596-0.16762 2.7871-0.50195 0.84444-0.33434 1.5612-0.8099 2.1523-1.4258 0.59111-0.63348 1.0483-1.3897 1.3691-2.2695 0.32089-0.87983 0.48047-1.8641 0.48047-2.9551s-0.15958-2.0772-0.48047-2.957c-0.32089-0.89743-0.77803-1.6536-1.3691-2.2695-0.59111-0.63348-1.3079-1.1188-2.1523-1.4531-0.82756-0.35193-1.7569-0.52734-2.7871-0.52734zm41.715 0c-0.912 0-1.7223 0.18516-2.4316 0.55469-0.69244 0.36953-1.2752 0.87043-1.748 1.5039-0.47289 0.61588-0.83651 1.337-1.0898 2.1641-0.23644 0.80944-0.35352 1.6553-0.35352 2.5352 0 0.93262 0.10007 1.8214 0.30273 2.666 0.21956 0.82704 0.55767 1.556 1.0137 2.1895 0.456 0.61588 1.0387 1.109 1.748 1.4785 0.70933 0.35193 1.5536 0.5293 2.5332 0.5293 0.79378 0 1.5446-0.16762 2.2539-0.50195 0.72622-0.35193 1.2834-0.88986 1.6719-1.6113h0.05078v1.7949c0.01689 0.96782-0.21071 1.7689-0.68359 2.4023-0.456 0.63348-1.1898 0.95117-2.2031 0.95117-0.64178 0-1.2075-0.14228-1.6973-0.42383-0.48978-0.26395-0.81939-0.74731-0.98828-1.4512h-3.5723c0.05067 0.77425 0.25276 1.435 0.60742 1.9805 0.37156 0.56309 0.8287 1.0192 1.3691 1.3711 0.55733 0.35193 1.1656 0.60726 1.8242 0.76562 0.67556 0.17597 1.3328 0.26562 1.9746 0.26562 1.5031 0 2.7025-0.21245 3.5977-0.63477 0.89511-0.42232 1.5798-0.94076 2.0527-1.5566 0.47289-0.59829 0.777-1.2493 0.91211-1.9531 0.152-0.70386 0.22656-1.3295 0.22656-1.875v-12.775h-3.4199v1.8223h-0.05078c-0.43911-0.79185-0.98782-1.3551-1.6465-1.6895-0.64178-0.33434-1.3926-0.50195-2.2539-0.50195zm16.523 0c-0.99644 0-1.9088 0.18516-2.7363 0.55469-0.81067 0.36953-1.5124 0.88017-2.1035 1.5312-0.59111 0.63348-1.0463 1.3897-1.3672 2.2695s-0.48047 1.831-0.48047 2.8516c0 1.0558 0.15108 2.0225 0.45508 2.9023 0.32089 0.87983 0.76758 1.6361 1.3418 2.2695 0.57422 0.63348 1.276 1.1266 2.1035 1.4785 0.82756 0.33434 1.7569 0.50195 2.7871 0.50195 1.4862 0 2.7517-0.35278 3.7988-1.0566 1.0471-0.70386 1.8254-1.8733 2.332-3.5098h-3.168c-0.11822 0.42232-0.43934 0.82772-0.96289 1.2148-0.52355 0.36953-1.1468 0.55274-1.873 0.55273-1.0133 0-1.7916-0.27286-2.332-0.81836-0.54044-0.5455-0.83605-1.4245-0.88672-2.6387h9.4492c0.06756-1.0558-0.01551-2.0673-0.25195-3.0352-0.23644-0.96782-0.62557-1.8293-1.166-2.5859-0.52356-0.75666-1.1998-1.355-2.0273-1.7949-0.82756-0.45751-1.7974-0.6875-2.9121-0.6875zm16.189 0c-0.76 0-1.5023 0.18516-2.2285 0.55469-0.72622 0.35193-1.3174 0.923-1.7734 1.7148h-0.07617v-1.9004h-3.4199v13.646h3.5977v-7.1523c0-1.3901 0.21909-2.3841 0.6582-2.9824 0.43911-0.61588 1.1494-0.92383 2.1289-0.92383 0.86133 0 1.461 0.28066 1.7988 0.84375 0.33778 0.5455 0.50586 1.3816 0.50586 2.5078v7.707h3.5977v-8.3926c0-0.84464-0.0765-1.6106-0.22852-2.2969-0.13511-0.70387-0.3797-1.2925-0.73437-1.7676-0.35466-0.49271-0.84386-0.87277-1.4688-1.1367-0.608-0.28155-1.3948-0.42188-2.3574-0.42188zm-66.062 0.36914 4.3066 6.4668-4.7129 7.1797h4.0293l2.7363-4.3027 2.7344 4.3027h4.1055l-4.8398-7.2578 4.3066-6.3887h-3.9766l-2.2793 3.5645-2.3066-3.5645zm13.275 0 4.584 12.803c0.10133 0.26395 0.15234 0.54461 0.15234 0.84375 0 0.40472-0.11707 0.77504-0.35352 1.1094-0.21956 0.33434-0.56617 0.52729-1.0391 0.58008-0.35467 0.0176-0.70979 0.0098-1.0645-0.02539-0.35467-0.03519-0.70128-0.07027-1.0391-0.10547v3.0879c0.37156 0.03519 0.73518 0.06052 1.0898 0.07813 0.37156 0.03519 0.74368 0.05273 1.1152 0.05273 1.2329 0 2.1943-0.23778 2.8867-0.71289 0.69244-0.47511 1.2326-1.2664 1.6211-2.375l5.4727-15.336h-3.7246l-2.8613 9.3437h-0.05078l-2.9648-9.3437zm-37.48 2.4551c0.59111 0 1.0823 0.12279 1.4707 0.36914s0.6991 0.57184 0.93555 0.97656c0.25333 0.38713 0.43187 0.84515 0.5332 1.373 0.10133 0.5103 0.15234 1.0482 0.15234 1.6113 0 0.56309-0.05101 1.1069-0.15234 1.6348-0.10133 0.5279-0.27137 1.0035-0.50781 1.4258-0.23644 0.40472-0.5556 0.73021-0.96094 0.97656-0.38844 0.24635-0.87959 0.36914-1.4707 0.36914-0.55733 0-1.038-0.12279-1.4434-0.36914-0.38844-0.26395-0.71806-0.59723-0.98828-1.002-0.25333-0.42232-0.43842-0.89788-0.55664-1.4258s-0.17773-1.0561-0.17773-1.584c-1e-7 -0.56309 0.05101-1.0991 0.15234-1.6094 0.11822-0.5279 0.29481-0.99567 0.53125-1.4004 0.25333-0.40472 0.58295-0.73021 0.98828-0.97656 0.40533-0.24635 0.90303-0.36914 1.4941-0.36914zm15.84 0c0.608 0 1.1142 0.13254 1.5195 0.39648 0.42222 0.24635 0.75184 0.57184 0.98828 0.97656 0.25333 0.40472 0.42992 0.87054 0.53125 1.3984 0.10133 0.5279 0.15234 1.0658 0.15234 1.6113 0 0.5455-0.05101 1.0815-0.15234 1.6094-0.10133 0.5103-0.27792 0.97612-0.53125 1.3984-0.23644 0.40472-0.56606 0.73021-0.98828 0.97656-0.40533 0.24635-0.91153 0.36914-1.5195 0.36914-0.608 0-1.1142-0.12279-1.5195-0.36914s-0.73495-0.57184-0.98828-0.97656c-0.23644-0.42232-0.40648-0.88813-0.50781-1.3984-0.10133-0.5279-0.15234-1.0639-0.15234-1.6094 0-0.5455 0.05101-1.0834 0.15234-1.6113 0.10133-0.5279 0.27137-0.99371 0.50781-1.3984 0.25333-0.40472 0.58295-0.73021 0.98828-0.97656 0.40533-0.26395 0.91153-0.39648 1.5195-0.39648zm42.602 0c0.59111 0 1.0803 0.11499 1.4688 0.34375 0.38844 0.22876 0.70106 0.5367 0.9375 0.92383 0.23644 0.38713 0.40648 0.8354 0.50781 1.3457 0.10133 0.49271 0.15039 1.0209 0.15039 1.584 0 0.49271-0.06606 0.96827-0.20117 1.4258-0.11822 0.43992-0.30526 0.83557-0.55859 1.1875-0.25333 0.35193-0.57445 0.63259-0.96289 0.84375-0.38844 0.21116-0.83513 0.31836-1.3418 0.31836-0.55733 0-1.021-0.12474-1.3926-0.37109-0.37156-0.24635-0.67566-0.56209-0.91211-0.94922-0.21956-0.38713-0.38109-0.81786-0.48242-1.293-0.08444-0.49271-0.12695-0.98581-0.12695-1.4785 0-0.5103 0.05101-0.99366 0.15234-1.4512 0.11822-0.47511 0.29676-0.89026 0.5332-1.2422 0.25333-0.36953 0.55744-0.65993 0.91211-0.87109 0.37156-0.21116 0.80974-0.31641 1.3164-0.31641zm15.535 0c0.87822 0 1.529 0.24753 1.9512 0.74024 0.43911 0.49271 0.74322 1.2138 0.91211 2.1641h-5.8535c0.01689-0.26395 0.0679-0.5641 0.15234-0.89844 0.10133-0.33434 0.26287-0.65008 0.48242-0.94922 0.23644-0.29914 0.54055-0.54667 0.91211-0.74023 0.38845-0.21116 0.86914-0.31641 1.4434-0.31641z" fill="url(#e)" stroke="#4665A2" stroke-width=".7"/>
+  <path d="m52.988 27.291c0.99602-1.0359 1.3944-1.8725 1.7928-3.1076l3.8247-0.03984c0.3113 1.6096 0.82413 2.5137 1.6335 3.1474z" fill="url(#b)" stroke="#000" stroke-width=".5"/>
+  <path d="m73.89 24.04 28.885-0.2011-0.12476 3.3879-31.033 0.16229c1.2621-1.0234 1.9665-2.2859 2.2724-3.3491z" fill="url(#c)" stroke="#000" stroke-width=".41788"/>
+ </g>
+</svg>
diff --git a/mpcdocs/folderclosed.png b/mpcdocs/folderclosed.png
index ed0abaf..bb8ab35 100644
--- a/mpcdocs/folderclosed.png
+++ b/mpcdocs/folderclosed.png
Binary files differ
diff --git a/mpcdocs/folderopen.png b/mpcdocs/folderopen.png
index cf4a936..d6c7f67 100644
--- a/mpcdocs/folderopen.png
+++ b/mpcdocs/folderopen.png
Binary files differ
diff --git a/mpcdocs/nav_g.png b/mpcdocs/nav_g.png
index 8700057..2093a23 100644
--- a/mpcdocs/nav_g.png
+++ b/mpcdocs/nav_g.png
Binary files differ
diff --git a/mpcdocs/nav_h.png b/mpcdocs/nav_h.png
index bab86c0..33389b1 100644
--- a/mpcdocs/nav_h.png
+++ b/mpcdocs/nav_h.png
Binary files differ
diff --git a/mpcdocs/open.png b/mpcdocs/open.png
index a3b9af1..30f75c7 100644
--- a/mpcdocs/open.png
+++ b/mpcdocs/open.png
Binary files differ
diff --git a/mpcdocs/search/close.svg b/mpcdocs/search/close.svg
index b42716d..a933eea 100644
--- a/mpcdocs/search/close.svg
+++ b/mpcdocs/search/close.svg
@@ -1 +1,31 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 11 11" height="11" width="11"><path d="M5.5.5a5 5 0 00-5 5 5 5 0 005 5 5 5 0 005-5 5 5 0 00-5-5zM3.582 3A.583.583 0 014 3.176l1.5 1.5 1.5-1.5A.583.583 0 017.4 3a.583.583 0 01.424 1l-1.5 1.5 1.5 1.5A.583.583 0 117 7.824l-1.5-1.5-1.5 1.5A.583.583 0 113.176 7l1.5-1.5-1.5-1.5a.583.583 0 01.406-1z" fill="#bababa"/></svg>
\ No newline at end of file
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   viewBox="0 0 11 11"
+   height="11"
+   width="11"
+   id="svg2"
+   version="1.1">
+  <metadata
+     id="metadata8">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs6" />
+  <path
+     id="path12"
+     d="M 5.5 0.5 A 5 5 0 0 0 0.5 5.5 A 5 5 0 0 0 5.5 10.5 A 5 5 0 0 0 10.5 5.5 A 5 5 0 0 0 5.5 0.5 z M 3.5820312 3 A 0.58291923 0.58291923 0 0 1 4 3.1757812 L 5.5 4.6757812 L 7 3.1757812 A 0.58291923 0.58291923 0 0 1 7.4003906 3 A 0.58291923 0.58291923 0 0 1 7.8242188 4 L 6.3242188 5.5 L 7.8242188 7 A 0.58291923 0.58291923 0 1 1 7 7.8242188 L 5.5 6.3242188 L 4 7.8242188 A 0.58291923 0.58291923 0 1 1 3.1757812 7 L 4.6757812 5.5 L 3.1757812 4 A 0.58291923 0.58291923 0 0 1 3.5820312 3 z "
+     style="stroke-width:1.09870648;fill:#bababa;fill-opacity:1" />
+</svg>
diff --git a/mpcdocs/search/mag_sel.svg b/mpcdocs/search/mag_sel.svg
index b17b33e..03626f6 100644
--- a/mpcdocs/search/mag_sel.svg
+++ b/mpcdocs/search/mag_sel.svg
@@ -1 +1,74 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="20" height="19" viewBox="0 0 20 19"><circle cx="5.5" cy="8.5" r="3.5" stroke="#656565" stroke-width="1.4" fill="none"/><path d="M11 7l2.5 3L16 7z" fill="#656565"/><path d="M8.109 11.11l2.782 2.781" fill="none" stroke="#656565" stroke-width="1.4" stroke-linecap="round"/></svg>
\ No newline at end of file
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
+   id="svg2"
+   width="20"
+   height="19"
+   viewBox="0 0 20 19"
+   sodipodi:docname="mag_sel.svg"
+   inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)">
+  <metadata
+     id="metadata8">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs6" />
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1920"
+     inkscape:window-height="2096"
+     id="namedview4"
+     showgrid="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:zoom="32"
+     inkscape:cx="5.9792688"
+     inkscape:cy="1.1436277"
+     inkscape:window-x="1920"
+     inkscape:window-y="27"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg2" />
+  <circle
+     style="fill:#000000;fill-opacity:0;stroke:#656565;stroke-width:1.4;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+     id="path4611"
+     cx="5.5"
+     cy="8.5"
+     r="3.5" />
+  <path
+     style="fill:#656565;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     d="M 11,7 13.5,10 16,7 Z"
+     id="path4609"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="cccc" />
+  <path
+     style="fill:none;stroke:#656565;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     d="m 8.1085854,11.109059 2.7823556,2.782356"
+     id="path4630"
+     inkscape:connector-curvature="0" />
+</svg>
diff --git a/mpcdocs/search/search_l.png b/mpcdocs/search/search_l.png
index 279f1d7..fd5f7da 100644
--- a/mpcdocs/search/search_l.png
+++ b/mpcdocs/search/search_l.png
Binary files differ
diff --git a/mpcdocs/search/search_m.png b/mpcdocs/search/search_m.png
index e72744f..b429a16 100644
--- a/mpcdocs/search/search_m.png
+++ b/mpcdocs/search/search_m.png
Binary files differ
diff --git a/mpcdocs/search/search_r.png b/mpcdocs/search/search_r.png
index 4bb15ff..1af5d21 100644
--- a/mpcdocs/search/search_r.png
+++ b/mpcdocs/search/search_r.png
Binary files differ
diff --git a/mpcdocs/splitbar.png b/mpcdocs/splitbar.png
index cc3953a..fe895f2 100644
--- a/mpcdocs/splitbar.png
+++ b/mpcdocs/splitbar.png
Binary files differ
diff --git a/mpcdocs/sync_off.png b/mpcdocs/sync_off.png
index 87acaa6..3b443fc 100644
--- a/mpcdocs/sync_off.png
+++ b/mpcdocs/sync_off.png
Binary files differ
diff --git a/mpcdocs/sync_on.png b/mpcdocs/sync_on.png
index 59490bd..e08320f 100644
--- a/mpcdocs/sync_on.png
+++ b/mpcdocs/sync_on.png
Binary files differ
diff --git a/mpcdocs/tab_a.png b/mpcdocs/tab_a.png
index a09fd9d..3b725c4 100644
--- a/mpcdocs/tab_a.png
+++ b/mpcdocs/tab_a.png
Binary files differ
diff --git a/mpcdocs/tab_b.png b/mpcdocs/tab_b.png
index 134a6c6..e2b4a86 100644
--- a/mpcdocs/tab_b.png
+++ b/mpcdocs/tab_b.png
Binary files differ
diff --git a/mpcdocs/tab_h.png b/mpcdocs/tab_h.png
index 66c5649..fd5cb70 100644
--- a/mpcdocs/tab_h.png
+++ b/mpcdocs/tab_h.png
Binary files differ
diff --git a/mpcdocs/tab_s.png b/mpcdocs/tab_s.png
index 990149e..ab478c9 100644
--- a/mpcdocs/tab_s.png
+++ b/mpcdocs/tab_s.png
Binary files differ
diff --git a/sitemap.xml b/sitemap.xml
index 5621707..0ac7bd6 100644
--- a/sitemap.xml
+++ b/sitemap.xml
@@ -1 +1 @@
-<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:mobile="http://www.google.com/schemas/sitemap-mobile/1.0" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"><url><loc>https://milagro.apache.org/help</loc><changefreq>weekly</changefreq><priority>0.5</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/en/help"/></url><url><loc>https://milagro.apache.org/index.js-old</loc><changefreq>weekly</changefreq><priority>0.5</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/en/index.js-old"/></url><url><loc>https://milagro.apache.org/users</loc><changefreq>weekly</changefreq><priority>0.5</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/en/users"/></url><url><loc>https://milagro.apache.org/blog/2019/06/10/miss-me</loc><changefreq>weekly</changefreq><priority>0.3</priority></url><url><loc>https://milagro.apache.org/docs/amcl-c-api-2.0.0</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/amcl-c-api-2.0.0"/></url><url><loc>https://milagro.apache.org/docs/amcl-javascript-api</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/amcl-javascript-api"/></url><url><loc>https://milagro.apache.org/docs/amcl-overview</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/amcl-overview"/></url><url><loc>https://milagro.apache.org/docs/contributor-guide</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/contributor-guide"/></url><url><loc>https://milagro.apache.org/docs/cryptojs/aes</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/cryptojs/aes"/></url><url><loc>https://milagro.apache.org/docs/cryptojs/amcl-javascript-api</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/cryptojs/amcl-javascript-api"/></url><url><loc>https://milagro.apache.org/docs/cryptojs/big</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/cryptojs/big"/></url><url><loc>https://milagro.apache.org/docs/cryptojs/bls</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/cryptojs/bls"/></url><url><loc>https://milagro.apache.org/docs/cryptojs/bls192</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/cryptojs/bls192"/></url><url><loc>https://milagro.apache.org/docs/cryptojs/bls256</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/cryptojs/bls256"/></url><url><loc>https://milagro.apache.org/docs/cryptojs/dbig</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/cryptojs/dbig"/></url><url><loc>https://milagro.apache.org/docs/cryptojs/ecdh</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/cryptojs/ecdh"/></url><url><loc>https://milagro.apache.org/docs/cryptojs/ecp</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/cryptojs/ecp"/></url><url><loc>https://milagro.apache.org/docs/cryptojs/ecp2</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/cryptojs/ecp2"/></url><url><loc>https://milagro.apache.org/docs/cryptojs/ecp4</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/cryptojs/ecp4"/></url><url><loc>https://milagro.apache.org/docs/cryptojs/ecp8</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/cryptojs/ecp8"/></url><url><loc>https://milagro.apache.org/docs/cryptojs/ff</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/cryptojs/ff"/></url><url><loc>https://milagro.apache.org/docs/cryptojs/fp</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/cryptojs/fp"/></url><url><loc>https://milagro.apache.org/docs/cryptojs/fp12</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/cryptojs/fp12"/></url><url><loc>https://milagro.apache.org/docs/cryptojs/fp16</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/cryptojs/fp16"/></url><url><loc>https://milagro.apache.org/docs/cryptojs/fp2</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/cryptojs/fp2"/></url><url><loc>https://milagro.apache.org/docs/cryptojs/fp24</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/cryptojs/fp24"/></url><url><loc>https://milagro.apache.org/docs/cryptojs/fp4</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/cryptojs/fp4"/></url><url><loc>https://milagro.apache.org/docs/cryptojs/fp48</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/cryptojs/fp48"/></url><url><loc>https://milagro.apache.org/docs/cryptojs/fp8</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/cryptojs/fp8"/></url><url><loc>https://milagro.apache.org/docs/cryptojs/gcm</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/cryptojs/gcm"/></url><url><loc>https://milagro.apache.org/docs/cryptojs/hash256</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/cryptojs/hash256"/></url><url><loc>https://milagro.apache.org/docs/cryptojs/hash384</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/cryptojs/hash384"/></url><url><loc>https://milagro.apache.org/docs/cryptojs/hash512</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/cryptojs/hash512"/></url><url><loc>https://milagro.apache.org/docs/cryptojs/mpin</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/cryptojs/mpin"/></url><url><loc>https://milagro.apache.org/docs/cryptojs/mpin192</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/cryptojs/mpin192"/></url><url><loc>https://milagro.apache.org/docs/cryptojs/mpin256</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/cryptojs/mpin256"/></url><url><loc>https://milagro.apache.org/docs/cryptojs/pair</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/cryptojs/pair"/></url><url><loc>https://milagro.apache.org/docs/cryptojs/pair192</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/cryptojs/pair192"/></url><url><loc>https://milagro.apache.org/docs/cryptojs/pair256</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/cryptojs/pair256"/></url><url><loc>https://milagro.apache.org/docs/cryptojs/rand</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/cryptojs/rand"/></url><url><loc>https://milagro.apache.org/docs/cryptojs/rsa</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/cryptojs/rsa"/></url><url><loc>https://milagro.apache.org/docs/cryptojs/sha3</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/cryptojs/sha3"/></url><url><loc>https://milagro.apache.org/docs/cryptojs/unit64</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/cryptojs/unit64"/></url><url><loc>https://milagro.apache.org/docs/d-ta-api</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/d-ta-api"/></url><url><loc>https://milagro.apache.org/docs/d-ta-overview</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/d-ta-overview"/></url><url><loc>https://milagro.apache.org/docs/downloads</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/downloads"/></url><url><loc>https://milagro.apache.org/docs/dta-details/api</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/dta-details/api"/></url><url><loc>https://milagro.apache.org/docs/dta-details/authentication</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/dta-details/authentication"/></url><url><loc>https://milagro.apache.org/docs/dta-details/configuration</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/dta-details/configuration"/></url><url><loc>https://milagro.apache.org/docs/dta-details/plugins-overview</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/dta-details/plugins-overview"/></url><url><loc>https://milagro.apache.org/docs/dta-details/encrypted-envelope</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/dta-details/encrypted-envelope"/></url><url><loc>https://milagro.apache.org/docs/dta-details/identity-documents</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/dta-details/identity-documents"/></url><url><loc>https://milagro.apache.org/docs/dta-details/ipfs</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/dta-details/ipfs"/></url><url><loc>https://milagro.apache.org/docs/dta-details/plugin-dev-guide</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/dta-details/plugin-dev-guide"/></url><url><loc>https://milagro.apache.org/docs/dta-details/quickstart</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/dta-details/quickstart"/></url><url><loc>https://milagro.apache.org/docs/milagro-crypto</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/milagro-crypto"/></url><url><loc>https://milagro.apache.org/docs/milagro-design</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/milagro-design"/></url><url><loc>https://milagro.apache.org/docs/milagro-intro</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/milagro-intro"/></url><url><loc>https://milagro.apache.org/docs/milagro-protocols</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/milagro-protocols"/></url><url><loc>https://milagro.apache.org/docs/mpc-api-0.1</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/mpc-api-0.1"/></url><url><loc>https://milagro.apache.org/docs/support</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/support"/></url><url><loc>https://milagro.apache.org/docs/zkp-mfa-api</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/zkp-mfa-api"/></url><url><loc>https://milagro.apache.org/docs/zkp-mfa-overview</loc><changefreq>hourly</changefreq><priority>1.0</priority><xhtml:link rel="alternate" hreflang="en" href="https://milagro.apache.org/docs/zkp-mfa-overview"/></url></urlset>
\ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"><url><loc>https://milagro.apache.org/blog</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/blog/2019/06/10/miss-me</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/blog/archive</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/help</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/index.js-old</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/amcl-c-api-2.0.0</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/amcl-javascript-api</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/amcl-overview</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/contributor-guide</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/cryptojs/aes</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/cryptojs/amcl-javascript-api</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/cryptojs/big</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/cryptojs/bls</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/cryptojs/bls192</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/cryptojs/bls256</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/cryptojs/dbig</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/cryptojs/ecdh</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/cryptojs/ecp</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/cryptojs/ecp2</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/cryptojs/ecp4</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/cryptojs/ecp8</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/cryptojs/ff</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/cryptojs/fp</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/cryptojs/fp12</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/cryptojs/fp16</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/cryptojs/fp2</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/cryptojs/fp24</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/cryptojs/fp4</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/cryptojs/fp48</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/cryptojs/fp8</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/cryptojs/gcm</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/cryptojs/hash256</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/cryptojs/hash384</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/cryptojs/hash512</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/cryptojs/mpin</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/cryptojs/mpin192</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/cryptojs/mpin256</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/cryptojs/pair</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/cryptojs/pair192</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/cryptojs/pair256</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/cryptojs/rand</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/cryptojs/rsa</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/cryptojs/sha3</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/cryptojs/unit64</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/d-ta-api</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/d-ta-overview</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/downloads</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/dta-details/api</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/dta-details/authentication</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/dta-details/configuration</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/dta-details/encrypted-envelope</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/dta-details/identity-documents</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/dta-details/ipfs</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/dta-details/plugin-dev-guide</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/dta-details/plugins-overview</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/dta-details/quickstart</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/milagro-crypto</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/milagro-design</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/milagro-intro</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/milagro-protocols</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/mpc-api-0.1</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/support</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/zkp-mfa-api</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/docs/zkp-mfa-overview</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://milagro.apache.org/</loc><changefreq>weekly</changefreq><priority>0.5</priority></url></urlset>
\ No newline at end of file
diff --git a/swagger/favicon-16x16.png b/swagger/favicon-16x16.png
index 0afbcae..8b194e6 100644
--- a/swagger/favicon-16x16.png
+++ b/swagger/favicon-16x16.png
Binary files differ
diff --git a/users.html b/users.html
index 44c9ca4..d6e5074 100644
--- a/users.html
+++ b/users.html
@@ -1 +1,14 @@
-<!DOCTYPE html><html lang=""><head><meta charSet="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><title>Apache Milagro · Core security infrastructure for decentralized networks</title><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta name="generator" content="Docusaurus"/><meta name="description" content="Core security infrastructure for decentralized networks"/><meta property="og:title" content="Apache Milagro · Core security infrastructure for decentralized networks"/><meta property="og:type" content="website"/><meta property="og:url" content="https://milagro.apache.org/"/><meta property="og:description" content="Core security infrastructure for decentralized networks"/><meta name="twitter:card" content="summary"/><link rel="shortcut icon" href="/img/favicon.ico"/><link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/><link rel="alternate" type="application/atom+xml" href="https://milagro.apache.org/blog/atom.xml" title="Apache Milagro Blog ATOM Feed"/><link rel="alternate" type="application/rss+xml" href="https://milagro.apache.org/blog/feed.xml" title="Apache Milagro Blog RSS Feed"/><script type="text/javascript" src="https://buttons.github.io/buttons.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"></script><script src="/js/scrollSpy.js"></script><link rel="stylesheet" href="/css/main.css"/><script src="/js/codetabs.js"></script></head><body><div class="fixedHeaderContainer"><div class="headerWrapper wrapper"><header><a href="/"><img class="logo" src="/img/milagro.svg" alt="Apache Milagro"/><h2 class="headerTitleWithLogo">Apache Milagro</h2></a><div class="navigationWrapper navigationSlider"><nav class="slidingNav"><ul class="nav-site nav-site-internal"><li class=""><a href="/docs/milagro-intro" target="_self">Docs</a></li><li class=""><a href="/docs/support" target="_self">Support</a></li><li class=""><a href="/docs/contributor-guide" target="_self">Contributing</a></li><li class=""><a href="/docs/downloads" target="_self">Downloads</a></li><li class=""><a href="/blog/" target="_self">Status</a></li></ul></nav></div></header></div></div><div class="navPusher"><div class="mainContainer"><div class="container paddingBottom paddingTop"><div class="wrapper"><div class="showcaseSection"><div class="prose"><h1>Apache Milagro</h1><h3>Core security infrastructure</h3><h3>for decentralized networks</h3><h3>and distributed systems</h3></div><div class="logos"><a href="https://milagro.apache.org"><img src="/img/MILAGRO_emblem.svg" alt="User1" title="User1"/></a></div><p> </p></div></div></div></div><footer class="nav-footer" id="footer"><section class="sitemap"><a href="/" class="nav-home"><img src="/img/milagro.svg" alt="Apache Milagro" width="50" height="100"/></a><div><h5>Docs</h5><a href="/docs/milagro-intro.html">Milagro Intro</a><a href="/docs/amcl-overview.html">Apache Milagro Crypto Library</a><a href="/docs/d-ta-overview.html">Decentralized Trust Authority</a><a href="/docs/zkp-mfa-overview.html">Zero Knowledge Proof MFA</a></div><div><h5>Community</h5><a href="../docs/support">Support</a><a href="../docs/contributor-guide">Contributing</a><a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=115529045" target="_blank" rel="noreferrer noopener">Developer Wiki</a><a href="https://twitter.com/apachemilagro?lang=en" target="_blank" rel="noreferrer noopener">Twitter</a></div><div><h5>More</h5><a href="/blog">Status</a><a href="https://github.com/apache/incubator-milagro-crypto-c">GitHub</a><a class="github-button" href="https://github.com/apache/incubator-milagro" data-icon="octicon-star" data-count-href="/apache/incubator-milagro-crypto/stargazers" data-show-count="true" data-count-aria-label="# stargazers on GitHub" aria-label="Star this project on GitHub">Star</a></div></section><a href="https://apache.org" target="_blank" rel="noreferrer noopener" class="fbOpenSource"><img src="/img/oss_logo.png" alt="Apache Incubator" width="170" height="45"/></a><section class="copyright"><div>Apache Milagro is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div></section><p></p><section class="copyright">Copyright © 2022  The Apache Software Foundation. Apache Milagro, Milagro, Apache, the Apache feather, and the Apache Milagro project logo are either registered trademarks or trademarks of the Apache Software Foundation.</section></footer></div></body></html>
\ No newline at end of file
+<!DOCTYPE HTML>
+<html lang="en-US">
+  <head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0; url=/index.html">
+    <script type="text/javascript">
+      window.location.href = '/index.html';
+    </script>
+    <title>Apache Milagro is core security infrastructure and crypto libraries for decentralized networks and distributed systems.</title>
+  </head>
+  <body>
+    If you are not redirected automatically, follow this <a href="/index.html">link</a>.
+  </body>
+</html>
\ No newline at end of file